Pull hotplug into release branch
authorLen Brown <len.brown@intel.com>
Fri, 14 Dec 2007 19:54:09 +0000 (14:54 -0500)
committerLen Brown <len.brown@intel.com>
Fri, 14 Dec 2007 19:54:09 +0000 (14:54 -0500)
986 files changed:
Documentation/00-INDEX
Documentation/DocBook/Makefile
Documentation/DocBook/uio-howto.tmpl
Documentation/i2c/summary
Documentation/lguest/lguest.c
Documentation/namespaces/compatibility-list.txt [new file with mode: 0644]
Documentation/networking/bonding.txt
Documentation/parport-lowlevel.txt
Documentation/powerpc/booting-without-of.txt
Documentation/thinkpad-acpi.txt
Documentation/tty.txt
Documentation/usb/power-management.txt
Documentation/x86_64/uefi.txt [new file with mode: 0644]
MAINTAINERS
Makefile
arch/alpha/kernel/pci-noop.c
arch/arm/common/uengine.c
arch/arm/kernel/entry-armv.S
arch/arm/kernel/traps.c
arch/arm/mach-at91/at91rm9200_devices.c
arch/arm/mach-at91/at91sam9260_devices.c
arch/arm/mach-at91/at91sam9261_devices.c
arch/arm/mach-at91/at91sam9263_devices.c
arch/arm/mach-at91/at91sam9rl_devices.c
arch/arm/mach-at91/board-carmeva.c
arch/arm/mach-at91/board-csb337.c
arch/arm/mach-at91/board-csb637.c
arch/arm/mach-at91/board-dk.c
arch/arm/mach-at91/board-eb9200.c
arch/arm/mach-at91/board-ek.c
arch/arm/mach-at91/board-kafa.c
arch/arm/mach-at91/board-kb9202.c
arch/arm/mach-at91/board-picotux200.c
arch/arm/mach-at91/board-sam9260ek.c
arch/arm/mach-at91/board-sam9261ek.c
arch/arm/mach-at91/board-sam9263ek.c
arch/arm/mach-at91/board-sam9rlek.c
arch/arm/mach-at91/clock.c
arch/arm/mach-imx/irq.c
arch/arm/mach-pxa/pxa27x.c
arch/arm/mach-pxa/pxa320.c
arch/arm/mach-pxa/ssp.c
arch/avr32/Kconfig
arch/avr32/kernel/Makefile
arch/avr32/kernel/asm-offsets.c
arch/avr32/kernel/entry-avr32b.S
arch/avr32/kernel/kprobes.c
arch/avr32/kernel/process.c
arch/avr32/kernel/ptrace.c
arch/avr32/kernel/stacktrace.c [new file with mode: 0644]
arch/avr32/kernel/traps.c
arch/avr32/kernel/vmlinux.lds.S
arch/avr32/mm/cache.c
arch/blackfin/Kconfig
arch/blackfin/Kconfig.debug [new file with mode: 0644]
arch/blackfin/Makefile
arch/blackfin/configs/BF527-EZKIT_defconfig
arch/blackfin/configs/BF533-EZKIT_defconfig
arch/blackfin/configs/BF533-STAMP_defconfig
arch/blackfin/configs/BF537-STAMP_defconfig
arch/blackfin/configs/BF548-EZKIT_defconfig
arch/blackfin/configs/BF561-EZKIT_defconfig
arch/blackfin/configs/H8606_defconfig [new file with mode: 0644]
arch/blackfin/configs/PNAV-10_defconfig
arch/blackfin/kernel/bfin_dma_5xx.c
arch/blackfin/kernel/bfin_ksyms.c
arch/blackfin/kernel/cplbinit.c
arch/blackfin/kernel/early_printk.c
arch/blackfin/kernel/process.c
arch/blackfin/kernel/setup.c
arch/blackfin/kernel/traps.c
arch/blackfin/lib/Makefile
arch/blackfin/lib/ins.S
arch/blackfin/lib/strcmp.c
arch/blackfin/lib/strcpy.c
arch/blackfin/lib/strncmp.c
arch/blackfin/lib/strncpy.c
arch/blackfin/lib/udivdi3.S [deleted file]
arch/blackfin/mach-bf527/Kconfig
arch/blackfin/mach-bf527/boards/Kconfig [new file with mode: 0644]
arch/blackfin/mach-bf527/boards/Makefile
arch/blackfin/mach-bf527/boards/eth_mac.c [deleted file]
arch/blackfin/mach-bf527/boards/ezkit.c
arch/blackfin/mach-bf533/Kconfig
arch/blackfin/mach-bf533/boards/H8606.c
arch/blackfin/mach-bf533/boards/Kconfig [new file with mode: 0644]
arch/blackfin/mach-bf533/boards/Makefile
arch/blackfin/mach-bf533/boards/cm_bf533.c
arch/blackfin/mach-bf533/boards/ezkit.c
arch/blackfin/mach-bf533/boards/generic_board.c
arch/blackfin/mach-bf533/boards/stamp.c
arch/blackfin/mach-bf537/Kconfig
arch/blackfin/mach-bf537/boards/Kconfig [new file with mode: 0644]
arch/blackfin/mach-bf537/boards/Makefile
arch/blackfin/mach-bf537/boards/cm_bf537.c
arch/blackfin/mach-bf537/boards/eth_mac.c [deleted file]
arch/blackfin/mach-bf537/boards/generic_board.c
arch/blackfin/mach-bf537/boards/pnav10.c
arch/blackfin/mach-bf537/boards/stamp.c
arch/blackfin/mach-bf548/Kconfig
arch/blackfin/mach-bf548/boards/Kconfig [new file with mode: 0644]
arch/blackfin/mach-bf548/boards/Makefile
arch/blackfin/mach-bf548/boards/ezkit.c
arch/blackfin/mach-bf548/head.S
arch/blackfin/mach-bf561/Kconfig
arch/blackfin/mach-bf561/boards/Kconfig [new file with mode: 0644]
arch/blackfin/mach-bf561/boards/Makefile
arch/blackfin/mach-bf561/boards/cm_bf561.c
arch/blackfin/mach-bf561/boards/ezkit.c
arch/blackfin/mach-bf561/boards/generic_board.c
arch/blackfin/mach-bf561/boards/tepla.c
arch/blackfin/mach-common/cplbinfo.c
arch/blackfin/mach-common/cplbmgr.S
arch/blackfin/mach-common/entry.S
arch/blackfin/mach-common/interrupt.S
arch/blackfin/mach-common/ints-priority-dc.c
arch/blackfin/mach-common/ints-priority-sc.c
arch/blackfin/mach-common/irqpanic.c
arch/blackfin/mm/blackfin_sram.c
arch/cris/arch-v10/drivers/Kconfig
arch/cris/arch-v32/drivers/Kconfig
arch/frv/kernel/break.S
arch/frv/kernel/entry.S
arch/frv/kernel/vmlinux.lds.S
arch/frv/mm/tlb-miss.S
arch/ia64/Makefile
arch/ia64/hp/sim/boot/Makefile
arch/ia64/hp/sim/boot/bootloader.lds
arch/ia64/kernel/acpi.c
arch/ia64/kernel/efi.c
arch/ia64/kernel/gate.lds.S
arch/ia64/kernel/ia64_ksyms.c
arch/ia64/kernel/iosapic.c
arch/ia64/kernel/kprobes.c
arch/ia64/kernel/setup.c
arch/ia64/kernel/signal.c
arch/ia64/kernel/vmlinux.lds.S
arch/ia64/lib/Makefile
arch/ia64/mm/tlb.c
arch/ia64/scripts/unwcheck.py [changed mode: 0755->0644]
arch/ia64/sn/kernel/io_common.c
arch/m32r/kernel/signal.c
arch/m32r/kernel/syscall_table.S
arch/m68k/atari/atakeyb.c
arch/mips/Kconfig
arch/mips/au1000/Kconfig
arch/mips/au1000/common/dbdma.c
arch/mips/au1000/common/irq.c
arch/mips/au1000/pb1200/irqmap.c
arch/mips/configs/bigsur_defconfig
arch/mips/configs/malta_defconfig
arch/mips/kernel/Makefile
arch/mips/kernel/cevt-r4k.c
arch/mips/kernel/csrc-r4k.c [new file with mode: 0644]
arch/mips/kernel/setup.c
arch/mips/kernel/smp-up.c [new file with mode: 0644]
arch/mips/kernel/time.c
arch/mips/kernel/vpe.c
arch/mips/math-emu/ieee754.c
arch/mips/math-emu/ieee754dp.c
arch/mips/math-emu/ieee754sp.c
arch/mips/mips-boards/generic/display.c
arch/mips/mipssim/sim_time.c
arch/mips/mm/dma-default.c
arch/mips/mm/init.c
arch/mips/oprofile/op_model_mipsxx.c
arch/mips/pci/pci-bcm1480.c
arch/mips/pmc-sierra/Kconfig
arch/mips/qemu/q-irq.c
arch/mips/sgi-ip22/ip22-eisa.c
arch/mips/sgi-ip22/ip22-nvram.c
arch/mips/sgi-ip22/ip22-setup.c
arch/mips/sgi-ip32/ip32-irq.c
arch/mips/vr41xx/Kconfig
arch/parisc/Makefile
arch/parisc/kernel/firmware.c
arch/parisc/kernel/irq.c
arch/parisc/kernel/parisc_ksyms.c
arch/parisc/kernel/pdc_cons.c
arch/parisc/lib/Makefile
arch/parisc/lib/libgcc/Makefile [deleted file]
arch/parisc/lib/libgcc/__ashldi3.c [deleted file]
arch/parisc/lib/libgcc/__ashrdi3.c [deleted file]
arch/parisc/lib/libgcc/__clzsi2.c [deleted file]
arch/parisc/lib/libgcc/__divdi3.c [deleted file]
arch/parisc/lib/libgcc/__divsi3.c [deleted file]
arch/parisc/lib/libgcc/__lshrdi3.c [deleted file]
arch/parisc/lib/libgcc/__moddi3.c [deleted file]
arch/parisc/lib/libgcc/__modsi3.c [deleted file]
arch/parisc/lib/libgcc/__muldi3.c [deleted file]
arch/parisc/lib/libgcc/__udivdi3.c [deleted file]
arch/parisc/lib/libgcc/__udivmoddi4.c [deleted file]
arch/parisc/lib/libgcc/__udivmodsi4.c [deleted file]
arch/parisc/lib/libgcc/__udivsi3.c [deleted file]
arch/parisc/lib/libgcc/__umoddi3.c [deleted file]
arch/parisc/lib/libgcc/__umodsi3.c [deleted file]
arch/parisc/lib/libgcc/__umulsidi3.c [deleted file]
arch/parisc/lib/libgcc/libgcc.h [deleted file]
arch/parisc/lib/milli/Makefile [deleted file]
arch/parisc/lib/milli/divI.S [deleted file]
arch/parisc/lib/milli/divU.S [deleted file]
arch/parisc/lib/milli/div_const.S [deleted file]
arch/parisc/lib/milli/dyncall.S [deleted file]
arch/parisc/lib/milli/milli.S [deleted file]
arch/parisc/lib/milli/milli.h [deleted file]
arch/parisc/lib/milli/mulI.S [deleted file]
arch/parisc/lib/milli/remI.S [deleted file]
arch/parisc/lib/milli/remU.S [deleted file]
arch/powerpc/Kconfig
arch/powerpc/boot/dts/mpc832x_mds.dts
arch/powerpc/boot/dts/mpc834x_mds.dts
arch/powerpc/boot/dts/mpc836x_mds.dts
arch/powerpc/boot/dts/mpc8544ds.dts
arch/powerpc/boot/dts/mpc8572ds.dts
arch/powerpc/boot/dts/mpc8641_hpcn.dts
arch/powerpc/boot/dts/sequoia.dts
arch/powerpc/configs/bamboo_defconfig
arch/powerpc/configs/cell_defconfig
arch/powerpc/configs/celleb_defconfig
arch/powerpc/configs/chrp32_defconfig
arch/powerpc/configs/ebony_defconfig
arch/powerpc/configs/ep88xc_defconfig
arch/powerpc/configs/g5_defconfig
arch/powerpc/configs/holly_defconfig
arch/powerpc/configs/iseries_defconfig
arch/powerpc/configs/kilauea_defconfig
arch/powerpc/configs/linkstation_defconfig
arch/powerpc/configs/lite5200_defconfig
arch/powerpc/configs/maple_defconfig
arch/powerpc/configs/mpc7448_hpc2_defconfig
arch/powerpc/configs/mpc8272_ads_defconfig
arch/powerpc/configs/mpc8313_rdb_defconfig
arch/powerpc/configs/mpc832x_mds_defconfig
arch/powerpc/configs/mpc832x_rdb_defconfig
arch/powerpc/configs/mpc834x_itx_defconfig
arch/powerpc/configs/mpc834x_itxgp_defconfig
arch/powerpc/configs/mpc834x_mds_defconfig
arch/powerpc/configs/mpc836x_mds_defconfig
arch/powerpc/configs/mpc8540_ads_defconfig
arch/powerpc/configs/mpc8544_ds_defconfig
arch/powerpc/configs/mpc8560_ads_defconfig
arch/powerpc/configs/mpc8568mds_defconfig
arch/powerpc/configs/mpc8572_ds_defconfig
arch/powerpc/configs/mpc85xx_cds_defconfig
arch/powerpc/configs/mpc8610_hpcd_defconfig
arch/powerpc/configs/mpc8641_hpcn_defconfig
arch/powerpc/configs/mpc866_ads_defconfig
arch/powerpc/configs/mpc885_ads_defconfig
arch/powerpc/configs/pasemi_defconfig
arch/powerpc/configs/pmac32_defconfig
arch/powerpc/configs/ppc64_defconfig
arch/powerpc/configs/pq2fads_defconfig
arch/powerpc/configs/prpmc2800_defconfig
arch/powerpc/configs/ps3_defconfig
arch/powerpc/configs/pseries_defconfig
arch/powerpc/configs/sequoia_defconfig
arch/powerpc/configs/walnut_defconfig
arch/powerpc/kernel/asm-offsets.c
arch/powerpc/kernel/head_32.S
arch/powerpc/kernel/head_40x.S
arch/powerpc/kernel/head_44x.S
arch/powerpc/kernel/head_fsl_booke.S
arch/powerpc/kernel/process.c
arch/powerpc/kernel/rtas.c
arch/powerpc/kernel/time.c
arch/powerpc/kernel/vdso.c
arch/powerpc/kernel/vdso32/cacheflush.S
arch/powerpc/kernel/vdso64/cacheflush.S
arch/powerpc/mm/mem.c
arch/powerpc/mm/mmu_decl.h
arch/powerpc/mm/stab.c
arch/powerpc/platforms/40x/walnut.c
arch/powerpc/platforms/44x/bamboo.c
arch/powerpc/platforms/44x/ebony.c
arch/powerpc/platforms/44x/sequoia.c
arch/powerpc/platforms/83xx/mpc832x_mds.c
arch/powerpc/platforms/83xx/mpc832x_rdb.c
arch/powerpc/platforms/83xx/mpc834x_mds.c
arch/powerpc/platforms/83xx/mpc836x_mds.c
arch/powerpc/platforms/83xx/usb.c
arch/powerpc/platforms/cell/spufs/inode.c
arch/powerpc/platforms/chrp/pci.c
arch/powerpc/platforms/embedded6xx/prpmc2800.c
arch/powerpc/platforms/pasemi/setup.c
arch/powerpc/platforms/powermac/pci.c
arch/powerpc/platforms/pseries/Kconfig
arch/powerpc/sysdev/uic.c
arch/ppc/configs/ml300_defconfig
arch/ppc/configs/ml403_defconfig
arch/ppc/kernel/setup.c
arch/ppc/mm/init.c
arch/ppc/mm/mmu_decl.h
arch/ppc/platforms/4xx/xparameters/xparameters.h
arch/ppc/platforms/4xx/yucca.c
arch/ppc/syslib/virtex_devices.c
arch/s390/appldata/appldata.h
arch/s390/appldata/appldata_base.c
arch/s390/appldata/appldata_mem.c
arch/s390/appldata/appldata_net_sum.c
arch/s390/appldata/appldata_os.c
arch/s390/kernel/early.c
arch/s390/kernel/entry.S
arch/s390/kernel/entry64.S
arch/s390/kernel/setup.c
arch/s390/kernel/smp.c
arch/s390/kernel/traps.c
arch/s390/mm/cmm.c
arch/sh/boards/renesas/rts7751r2d/setup.c
arch/sh/configs/r7780mp_defconfig
arch/sh/configs/r7785rp_defconfig
arch/sh/drivers/pci/ops-r7780rp.c
arch/sh/drivers/pci/ops-se7780.c
arch/sh/drivers/pci/pci-sh7780.h
arch/sh/mm/fault.c
arch/sparc/kernel/devices.c
arch/sparc/kernel/pcic.c
arch/sparc64/defconfig
arch/sparc64/kernel/chmc.c
arch/sparc64/kernel/isa.c
arch/sparc64/kernel/ldc.c
arch/sparc64/kernel/pci_sun4v.c
arch/sparc64/kernel/smp.c
arch/um/Kconfig.i386
arch/um/Makefile
arch/um/Makefile-i386
arch/um/drivers/chan_user.c
arch/um/drivers/net_kern.c
arch/um/drivers/ubd_kern.c
arch/um/os-Linux/time.c
arch/x86/Kconfig
arch/x86/Makefile
arch/x86/boot/header.S
arch/x86/kernel/acpi/processor.c
arch/x86/kernel/acpi/sleep_64.c
arch/x86/kernel/acpi/wakeup_32.S
arch/x86/kernel/apic_32.c
arch/x86/kernel/cpu/intel_cacheinfo.c
arch/x86/kernel/crash.c
arch/x86/kernel/head_32.S
arch/x86/kernel/hpet.c
arch/x86/kernel/i386_ksyms_32.c
arch/x86/kernel/io_apic_32.c
arch/x86/kernel/io_apic_64.c
arch/x86/kernel/kprobes_64.c
arch/x86/kernel/nmi_32.c
arch/x86/kernel/nmi_64.c
arch/x86/kernel/paravirt_32.c
arch/x86/kernel/pci-dma_64.c
arch/x86/kernel/reboot_32.c
arch/x86/kernel/reboot_64.c
arch/x86/kernel/topology.c
arch/x86/kernel/traps_32.c
arch/x86/kernel/traps_64.c
arch/x86/lguest/Kconfig
arch/x86/mm/init_64.c
arch/x86/pci/acpi.c
arch/x86/pci/common.c
arch/x86/xen/enlighten.c
arch/x86/xen/mmu.c
arch/xtensa/platform-iss/network.c
block/blktrace.c
block/genhd.c
block/ll_rw_blk.c
crypto/algapi.c
crypto/authenc.c
crypto/fcrypt.c
drivers/acpi/Kconfig
drivers/acpi/Makefile
drivers/acpi/ac.c
drivers/acpi/battery.c
drivers/acpi/dispatcher/dsobject.c
drivers/acpi/ec.c
drivers/acpi/numa.c
drivers/acpi/osl.c
drivers/acpi/processor_core.c
drivers/acpi/processor_idle.c
drivers/acpi/processor_throttling.c
drivers/acpi/sbs.c
drivers/acpi/tables/tbutils.c
drivers/acpi/video.c
drivers/ata/ahci.c
drivers/ata/ata_piix.c
drivers/ata/libata-core.c
drivers/ata/libata-eh.c
drivers/ata/libata-scsi.c
drivers/ata/pata_ali.c
drivers/ata/pata_amd.c
drivers/ata/pata_at32.c
drivers/ata/pata_bf54x.c
drivers/ata/pata_hpt37x.c
drivers/ata/pata_isapnp.c
drivers/ata/pata_jmicron.c
drivers/ata/pata_sil680.c
drivers/ata/pata_sis.c
drivers/ata/pata_via.c
drivers/ata/sata_mv.c
drivers/ata/sata_nv.c
drivers/ata/sata_sil24.c
drivers/atm/he.c
drivers/base/core.c
drivers/base/power/Makefile
drivers/base/power/main.c
drivers/base/power/power.h
drivers/block/aoe/aoeblk.c
drivers/block/umem.c
drivers/block/virtio_blk.c
drivers/char/Kconfig
drivers/char/apm-emulation.c
drivers/char/cs5535_gpio.c
drivers/char/sonypi.c
drivers/char/tpm/tpm_tis.c
drivers/crypto/Kconfig
drivers/dma/Kconfig
drivers/firewire/fw-ohci.c
drivers/hwmon/coretemp.c
drivers/i2c/busses/i2c-davinci.c
drivers/i2c/busses/i2c-gpio.c
drivers/i2c/busses/i2c-omap.c
drivers/i2c/chips/isp1301_omap.c
drivers/ide/Kconfig
drivers/ide/Makefile
drivers/ide/cris/ide-cris.c
drivers/ide/ide-dma.c
drivers/ide/ide-iops.c
drivers/ide/ide-probe.c
drivers/ide/legacy/ali14xx.c
drivers/ide/legacy/macide.c
drivers/ide/legacy/q40ide.c
drivers/ide/pci/aec62xx.c
drivers/ide/pci/alim15x3.c
drivers/ide/pci/piix.c
drivers/ide/pci/siimage.c
drivers/ide/pci/sis5513.c
drivers/ide/pci/trm290.c
drivers/ide/ppc/pmac.c
drivers/infiniband/hw/ehca/ehca_av.c
drivers/infiniband/hw/ehca/ehca_qp.c
drivers/infiniband/hw/ipath/ipath_cq.c
drivers/infiniband/hw/ipath/ipath_qp.c
drivers/infiniband/hw/ipath/ipath_srq.c
drivers/infiniband/hw/ipath/ipath_verbs.c
drivers/infiniband/ulp/ipoib/ipoib_main.c
drivers/infiniband/ulp/iser/iser_memory.c
drivers/input/keyboard/Kconfig
drivers/input/keyboard/gpio_keys.c
drivers/input/serio/Kconfig
drivers/input/serio/i8042-x86ia64io.h
drivers/input/touchscreen/ads7846.c
drivers/isdn/hisax/hfcscard.c
drivers/isdn/i4l/isdn_common.c
drivers/isdn/i4l/isdn_net.c
drivers/kvm/kvm_main.c
drivers/kvm/svm.c
drivers/kvm/x86_emulate.c
drivers/leds/led-class.c
drivers/leds/led-triggers.c
drivers/lguest/lguest_device.c
drivers/media/common/saa7146_video.c
drivers/media/dvb/dvb-usb/Makefile
drivers/media/dvb/dvb-usb/dibusb-common.c
drivers/media/dvb/frontends/tda10086.c
drivers/media/dvb/frontends/zl10353.c
drivers/media/dvb/frontends/zl10353.h
drivers/media/video/bt8xx/bttv-cards.c
drivers/media/video/bt8xx/bttv-driver.c
drivers/media/video/cx88/cx88-blackbird.c
drivers/media/video/cx88/cx88-video.c
drivers/media/video/em28xx/em28xx-video.c
drivers/media/video/ivtv/ivtv-i2c.c
drivers/media/video/ivtv/ivtv-i2c.h
drivers/media/video/ivtv/ivtv-streams.c
drivers/media/video/saa5246a.c
drivers/media/video/saa5249.c
drivers/media/video/saa7134/saa7134-alsa.c
drivers/media/video/saa7134/saa7134-cards.c
drivers/media/video/saa7134/saa7134-core.c
drivers/media/video/saa7134/saa7134-dvb.c
drivers/media/video/saa7134/saa7134-empress.c
drivers/media/video/saa7134/saa7134-video.c
drivers/media/video/tvp5150.c
drivers/media/video/videobuf-core.c
drivers/media/video/videobuf-vmalloc.c
drivers/media/video/vivi.c
drivers/mfd/sm501.c
drivers/misc/sony-laptop.c
drivers/misc/thinkpad_acpi.c
drivers/misc/thinkpad_acpi.h
drivers/mmc/card/block.c
drivers/mmc/card/queue.c
drivers/mmc/card/sdio_uart.c
drivers/mmc/host/mmc_spi.c
drivers/mmc/host/tifm_sd.c
drivers/net/Kconfig
drivers/net/amd8111e.c
drivers/net/bfin_mac.c
drivers/net/bfin_mac.h
drivers/net/bnx2.c
drivers/net/bnx2.h
drivers/net/bonding/bond_main.c
drivers/net/bonding/bond_sysfs.c
drivers/net/bonding/bonding.h
drivers/net/chelsio/cxgb2.c
drivers/net/chelsio/pm3393.c
drivers/net/chelsio/sge.c
drivers/net/chelsio/sge.h
drivers/net/cxgb3/regs.h
drivers/net/cxgb3/t3_hw.c
drivers/net/cxgb3/xgmac.c
drivers/net/e100.c
drivers/net/e1000/e1000_ethtool.c
drivers/net/e1000/e1000_main.c
drivers/net/e1000e/ethtool.c
drivers/net/ehea/ehea.h
drivers/net/ehea/ehea_main.c
drivers/net/ehea/ehea_qmr.h
drivers/net/fec_mpc52xx.c
drivers/net/forcedeth.c
drivers/net/gianfar.c
drivers/net/ibm_newemac/core.c
drivers/net/ibm_newemac/core.h
drivers/net/ibm_newemac/debug.c
drivers/net/ibm_newemac/debug.h
drivers/net/ibm_newemac/emac.h
drivers/net/ibm_newemac/mal.c
drivers/net/ibm_newemac/mal.h
drivers/net/ibm_newemac/phy.c
drivers/net/ibm_newemac/phy.h
drivers/net/ibm_newemac/rgmii.c
drivers/net/ibm_newemac/rgmii.h
drivers/net/ibm_newemac/tah.c
drivers/net/ibm_newemac/tah.h
drivers/net/ibm_newemac/zmii.c
drivers/net/ibm_newemac/zmii.h
drivers/net/lib82596.c
drivers/net/mlx4/qp.c
drivers/net/myri10ge/myri10ge.c
drivers/net/niu.c
drivers/net/pasemi_mac.c
drivers/net/phy/marvell.c
drivers/net/phy/mdio_bus.c
drivers/net/phy/phy.c
drivers/net/phy/phy_device.c
drivers/net/plip.c
drivers/net/s2io-regs.h
drivers/net/s2io.c
drivers/net/skge.c
drivers/net/sky2.c
drivers/net/sky2.h
drivers/net/smc911x.c
drivers/net/smc911x.h
drivers/net/smc91x.h
drivers/net/sungem.c
drivers/net/tulip/dmfe.c
drivers/net/ucc_geth.c
drivers/net/usb/dm9601.c
drivers/net/via-velocity.c
drivers/net/virtio_net.c
drivers/net/wireless/b43/main.c
drivers/net/wireless/b43/phy.c
drivers/net/wireless/b43legacy/dma.c
drivers/net/wireless/b43legacy/main.c
drivers/net/wireless/b43legacy/phy.c
drivers/net/wireless/bcm43xx/bcm43xx_phy.c
drivers/net/wireless/iwlwifi/iwl3945-base.c
drivers/net/wireless/iwlwifi/iwl4965-base.c
drivers/net/wireless/libertas/if_cs.c
drivers/net/wireless/libertas/main.c
drivers/net/wireless/libertas/wext.c
drivers/net/wireless/netwave_cs.c
drivers/net/wireless/p54usb.c
drivers/net/wireless/rt2x00/rt2500usb.c
drivers/net/wireless/rt2x00/rt2x00.h
drivers/net/wireless/rt2x00/rt2x00usb.c
drivers/net/wireless/rt2x00/rt73usb.c
drivers/parisc/lba_pci.c
drivers/pci/hotplug/acpiphp.h
drivers/pci/hotplug/acpiphp_core.c
drivers/pci/hotplug/acpiphp_glue.c
drivers/pci/hotplug/acpiphp_ibm.c
drivers/pci/hotplug/cpqphp_core.c
drivers/pci/hotplug/cpqphp_ctrl.c
drivers/pci/hotplug/fakephp.c
drivers/pci/hotplug/pciehp_ctrl.c
drivers/pci/hotplug/rpadlpar_core.c
drivers/pci/hotplug/rpaphp_core.c
drivers/pci/hotplug/rpaphp_pci.c
drivers/pci/hotplug/shpchp_ctrl.c
drivers/pci/pci-sysfs.c
drivers/pci/pcie/aer/aerdrv_core.c
drivers/pci/pcie/portdrv_pci.c
drivers/pci/probe.c
drivers/pcmcia/cs.c
drivers/pcmcia/ds.c
drivers/pcmcia/ti113x.h
drivers/pcmcia/yenta_socket.c
drivers/pnp/pnpacpi/rsparser.c
drivers/pnp/resource.c
drivers/ps3/Makefile
drivers/ps3/ps3-sys-manager.c [moved from drivers/ps3/sys-manager.c with 100% similarity]
drivers/ps3/ps3-vuart.c [moved from drivers/ps3/vuart.c with 100% similarity]
drivers/rtc/Kconfig
drivers/rtc/interface.c
drivers/rtc/rtc-dev.c
drivers/rtc/rtc-max6902.c
drivers/s390/block/dcssblk.c
drivers/s390/cio/css.c
drivers/s390/cio/device_fsm.c
drivers/s390/cio/device_id.c
drivers/s390/net/ctcmain.c
drivers/s390/net/netiucv.c
drivers/s390/scsi/zfcp_erp.c
drivers/scsi/aacraid/commsup.c
drivers/scsi/aacraid/linit.c
drivers/scsi/atari_scsi.c
drivers/scsi/dpt_i2o.c
drivers/scsi/dpti.h
drivers/scsi/dtc.c
drivers/scsi/esp_scsi.c
drivers/scsi/g_NCR5380.c
drivers/scsi/ide-scsi.c
drivers/scsi/iscsi_tcp.c
drivers/scsi/iscsi_tcp.h
drivers/scsi/libiscsi.c
drivers/scsi/mac_scsi.c
drivers/scsi/pas16.c
drivers/scsi/qla1280.c
drivers/scsi/scsi.c
drivers/scsi/sun3_scsi.c
drivers/scsi/sun3_scsi_vme.c
drivers/scsi/t128.c
drivers/scsi/zorro7xx.c
drivers/serial/Kconfig
drivers/serial/ip22zilog.c
drivers/serial/pxa.c
drivers/serial/suncore.c
drivers/serial/suncore.h
drivers/serial/sunhv.c
drivers/serial/sunsab.c
drivers/serial/sunsu.c
drivers/serial/sunzilog.c
drivers/serial/uartlite.c
drivers/spi/Kconfig
drivers/spi/at25.c
drivers/spi/atmel_spi.c
drivers/spi/pxa2xx_spi.c
drivers/spi/spi.c
drivers/spi/spi_bfin5xx.c
drivers/spi/spi_imx.c
drivers/spi/spi_s3c24xx_gpio.c
drivers/usb/README
drivers/usb/core/driver.c
drivers/usb/core/hcd.c
drivers/usb/core/hub.c
drivers/usb/core/message.c
drivers/usb/core/sysfs.c
drivers/usb/core/usb.c
drivers/usb/gadget/omap_udc.c
drivers/usb/gadget/s3c2410_udc.c
drivers/usb/host/Kconfig
drivers/usb/host/ehci-hcd.c
drivers/usb/image/microtek.c
drivers/usb/misc/adutux.c
drivers/usb/misc/usbled.c
drivers/usb/serial/generic.c
drivers/usb/serial/keyspan.c
drivers/usb/serial/mos7840.c
drivers/usb/serial/pl2303.c
drivers/usb/serial/pl2303.h
drivers/usb/serial/sierra.c
drivers/usb/storage/scsiglue.c
drivers/usb/storage/unusual_devs.h
drivers/video/Kconfig
drivers/video/Makefile
drivers/video/atmel_lcdfb.c
drivers/video/aty/radeon_base.c
drivers/video/console/Kconfig
drivers/video/efifb.c [new file with mode: 0644]
drivers/video/fb_ddc.c
drivers/video/imacfb.c
drivers/video/ps3fb.c
drivers/virtio/virtio.c
drivers/zorro/zorro-driver.c
fs/Kconfig
fs/aio.c
fs/bfs/inode.c
fs/cifs/CHANGES
fs/cifs/README
fs/cifs/TODO
fs/cifs/cifs_spnego.c
fs/cifs/cifs_spnego.h
fs/cifs/cifsacl.c
fs/cifs/cifsfs.c
fs/cifs/cifsglob.h
fs/cifs/cifsproto.h
fs/cifs/cifssmb.c
fs/cifs/connect.c
fs/cifs/file.c
fs/cifs/inode.c
fs/cifs/sess.c
fs/cifs/transport.c
fs/compat_ioctl.c
fs/exec.c
fs/ext2/ext2.h
fs/fuse/dir.c
fs/fuse/file.c
fs/fuse/fuse_i.h
fs/fuse/inode.c
fs/jbd/checkpoint.c
fs/jbd/commit.c
fs/jffs2/background.c
fs/nfs/dir.c
fs/nfs/direct.c
fs/nfs/getroot.c
fs/nfs/super.c
fs/nfs/write.c
fs/ocfs2/aops.c
fs/ocfs2/cluster/masklog.h
fs/ocfs2/cluster/tcp.c
fs/ocfs2/dcache.c
fs/ocfs2/dlm/dlmmaster.c
fs/ocfs2/file.c
fs/ocfs2/inode.c
fs/ocfs2/localalloc.c
fs/ocfs2/super.c
fs/proc/array.c
fs/proc/base.c
fs/proc/generic.c
fs/proc/inode.c
fs/proc/internal.h
fs/proc/proc_net.c
fs/proc/root.c
fs/reiserfs/procfs.c
fs/sysfs/file.c
fs/ufs/dir.c
fs/ufs/super.c
fs/xfs/linux-2.6/xfs_buf.c
fs/xfs/linux-2.6/xfs_file.c
fs/xfs/linux-2.6/xfs_ioctl.c
fs/xfs/linux-2.6/xfs_ioctl32.c
fs/xfs/linux-2.6/xfs_iops.c
fs/xfs/quota/xfs_qm.c
fs/xfs/xfs_iget.c
fs/xfs/xfs_itable.c
include/acpi/processor.h
include/asm-arm/arch-at91/board.h
include/asm-arm/arch-ixp23xx/irqs.h
include/asm-arm/arch-omap/board-innovator.h
include/asm-arm/arch-pxa/irqs.h
include/asm-arm/arch-pxa/mfp-pxa300.h
include/asm-arm/arch-pxa/mfp-pxa320.h
include/asm-arm/arch-pxa/mfp.h
include/asm-arm/arch-pxa/pxa-regs.h
include/asm-arm/arch-s3c2410/spi-gpio.h
include/asm-avr32/cacheflush.h
include/asm-avr32/ocd.h
include/asm-avr32/processor.h
include/asm-avr32/ptrace.h
include/asm-avr32/sysreg.h
include/asm-avr32/system.h
include/asm-avr32/thread_info.h
include/asm-blackfin/bfin-global.h
include/asm-blackfin/bfin5xx_spi.h
include/asm-blackfin/cplbinit.h
include/asm-blackfin/delay.h
include/asm-blackfin/io.h
include/asm-blackfin/mach-bf527/irq.h
include/asm-blackfin/mach-bf527/mem_map.h
include/asm-blackfin/mach-bf533/irq.h
include/asm-blackfin/mach-bf533/mem_map.h
include/asm-blackfin/mach-bf533/portmux.h
include/asm-blackfin/mach-bf537/irq.h
include/asm-blackfin/mach-bf537/mem_map.h
include/asm-blackfin/mach-bf548/bf548.h
include/asm-blackfin/mach-bf548/defBF544.h
include/asm-blackfin/mach-bf548/defBF548.h
include/asm-blackfin/mach-bf548/defBF54x_base.h
include/asm-blackfin/mach-bf548/irq.h
include/asm-blackfin/mach-bf548/mem_map.h
include/asm-blackfin/mach-bf561/bf561.h
include/asm-blackfin/mach-bf561/defBF561.h
include/asm-blackfin/mach-bf561/irq.h
include/asm-blackfin/mach-bf561/mem_map.h
include/asm-blackfin/mach-common/def_LPBlackfin.h
include/asm-blackfin/page_offset.h
include/asm-blackfin/string.h
include/asm-blackfin/traps.h
include/asm-generic/resource.h
include/asm-h8300/timex.h
include/asm-ia64/acpi.h
include/asm-ia64/iosapic.h
include/asm-m32r/thread_info.h
include/asm-m32r/unistd.h
include/asm-mips/8253pit.h [deleted file]
include/asm-mips/cpu-features.h
include/asm-mips/dma.h
include/asm-mips/futex.h
include/asm-mips/i8253.h
include/asm-mips/ip32/ip32_ints.h
include/asm-mips/mach-au1x00/au1000.h
include/asm-mips/mach-au1x00/au1100_mmc.h
include/asm-mips/system.h
include/asm-mips/time.h
include/asm-parisc/pdc.h
include/asm-powerpc/page_32.h
include/asm-powerpc/pci-bridge.h
include/asm-powerpc/pgtable-ppc32.h
include/asm-powerpc/time.h
include/asm-powerpc/vdso_datapage.h
include/asm-s390/system.h
include/asm-sh/cacheflush.h
include/asm-x86/acpi.h
include/asm-x86/apic_32.h
include/asm-x86/hpet.h
include/linux/acpi.h
include/linux/cgroup_subsys.h
include/linux/cpuidle.h
include/linux/ext2_fs.h
include/linux/fuse.h
include/linux/if_bonding.h
include/linux/inet_lro.h
include/linux/input.h
include/linux/jbd.h
include/linux/kd.h
include/linux/leds.h
include/linux/libata.h
include/linux/mm.h
include/linux/nfs_fs.h
include/linux/pci_ids.h
include/linux/phy.h
include/linux/pnp.h
include/linux/proc_fs.h
include/linux/rtc.h
include/linux/scatterlist.h
include/linux/sched.h
include/linux/screen_info.h
include/linux/serial_core.h
include/linux/skbuff.h
include/linux/sunrpc/debug.h
include/linux/sunrpc/xprtsock.h
include/linux/sysctl.h
include/linux/thread_info.h
include/linux/timex.h
include/linux/usb.h
include/linux/usbdevice_fs.h
include/media/videobuf-core.h
include/net/ieee80211.h
include/net/inet_hashtables.h
include/net/ip_vs.h
include/net/route.h
include/net/sctp/constants.h
include/net/sctp/structs.h
include/net/sock.h
include/net/tcp.h
include/scsi/scsi_device.h
include/sound/version.h
init/Kconfig
init/do_mounts_initrd.c
ipc/mqueue.c
kernel/Kconfig.instrumentation
kernel/acct.c
kernel/exit.c
kernel/fork.c
kernel/futex.c
kernel/hrtimer.c
kernel/kallsyms.c
kernel/lockdep.c
kernel/module.c
kernel/sched.c
kernel/sched_debug.c
kernel/sched_fair.c
kernel/sched_rt.c
kernel/sched_stats.h
kernel/sysctl.c
kernel/sysctl_check.c
kernel/time/clockevents.c
kernel/time/ntp.c
kernel/time/tick-sched.c
kernel/user.c
kernel/utsname_sysctl.c
lib/Kconfig.debug
lib/hexdump.c
lib/kobject.c
lib/textsearch.c
mm/backing-dev.c
mm/filemap_xip.c
mm/hugetlb.c
mm/mmap.c
mm/nommu.c
mm/page_alloc.c
mm/rmap.c
mm/shmem.c
mm/slab.c
mm/slob.c
mm/slub.c
mm/sparse-vmemmap.c
net/8021q/vlan.c
net/8021q/vlan_dev.c
net/bridge/br.c
net/bridge/br_fdb.c
net/bridge/br_input.c
net/bridge/netfilter/ebt_among.c
net/bridge/netfilter/ebtable_broute.c
net/core/dev.c
net/core/pktgen.c
net/core/skbuff.c
net/dccp/ccids/lib/loss_interval.c
net/decnet/dn_dev.c
net/ieee80211/ieee80211_crypt_ccmp.c
net/ieee80211/ieee80211_crypt_tkip.c
net/ieee80211/ieee80211_tx.c
net/ipv4/arp.c
net/ipv4/devinet.c
net/ipv4/esp4.c
net/ipv4/inet_diag.c
net/ipv4/inet_lro.c
net/ipv4/ipvs/ip_vs_core.c
net/ipv4/ipvs/ip_vs_ctl.c
net/ipv4/ipvs/ip_vs_lblc.c
net/ipv4/ipvs/ip_vs_lblcr.c
net/ipv4/ipvs/ip_vs_proto.c
net/ipv4/ipvs/ip_vs_sched.c
net/ipv4/netfilter/iptable_raw.c
net/ipv4/netfilter/nf_nat_core.c
net/ipv4/route.c
net/ipv4/sysctl_net_ipv4.c
net/ipv4/tcp_illinois.c
net/ipv4/tcp_input.c
net/ipv4/tcp_ipv4.c
net/ipv4/tcp_output.c
net/ipv6/addrconf.c
net/ipv6/esp6.c
net/ipv6/ip6_output.c
net/ipv6/tcp_ipv6.c
net/ipv6/xfrm6_policy.c
net/irda/ircomm/ircomm_tty.c
net/irda/iriap.c
net/irda/irlan/irlan_eth.c
net/iucv/iucv.c
net/key/af_key.c
net/mac80211/ieee80211.c
net/mac80211/ieee80211_sta.c
net/mac80211/rx.c
net/mac80211/wep.c
net/netfilter/xt_CONNMARK.c
net/netfilter/xt_CONNSECMARK.c
net/netfilter/xt_TCPMSS.c
net/rfkill/rfkill.c
net/rose/rose_dev.c
net/rxrpc/Kconfig
net/rxrpc/rxkad.c
net/sctp/Kconfig
net/sctp/auth.c
net/sctp/bind_addr.c
net/sctp/sm_make_chunk.c
net/sctp/sm_statefuns.c
net/sctp/socket.c
net/sunrpc/auth_gss/auth_gss.c
net/sunrpc/auth_gss/gss_krb5_mech.c
net/sunrpc/auth_gss/gss_krb5_seal.c
net/sunrpc/rpc_pipe.c
net/sunrpc/xprt.c
net/sunrpc/xprtrdma/transport.c
net/sunrpc/xprtsock.c
net/unix/af_unix.c
net/wireless/wext.c
net/xfrm/xfrm_policy.c
net/xfrm/xfrm_state.c
net/xfrm/xfrm_user.c
scripts/checkpatch.pl
scripts/mkmakefile
security/commoncap.c
security/dummy.c
security/selinux/selinuxfs.c
sound/drivers/mpu401/mpu401_uart.c
sound/drivers/portman2x4.c
sound/pci/ca0106/ca0106_mixer.c
sound/pci/ca0106/ca0106_proc.c
sound/pci/cmipci.c
sound/pci/emu10k1/emumixer.c
sound/pci/emu10k1/p16v.c
sound/pci/hda/hda_codec.c
sound/pci/hda/hda_local.h
sound/pci/hda/patch_analog.c
sound/pci/hda/patch_sigmatel.c
sound/soc/codecs/cs4270.c
sound/soc/s3c24xx/s3c2443-ac97.c

index 299615d821ac73ab81a0e18d28331f869f03629a..c3014df066c4e3ee61b12397cb6e964131630427 100644 (file)
@@ -262,6 +262,8 @@ mtrr.txt
        - how to use PPro Memory Type Range Registers to increase performance.
 mutex-design.txt
        - info on the generic mutex subsystem.
+namespaces/
+       - directory with various information about namespaces
 nbd.txt
        - info on a TCP implementation of a network block device.
 netlabel/
index 054a7ecf64c6257551db24c986671f06a7e3d772..4953bc258729bd641e3fbdf33bd6efe8368e7803 100644 (file)
@@ -11,7 +11,7 @@ DOCBOOKS := wanbook.xml z8530book.xml mcabook.xml videobook.xml \
            procfs-guide.xml writing_usb_driver.xml \
            kernel-api.xml filesystems.xml lsm.xml usb.xml \
            gadget.xml libata.xml mtdnand.xml librs.xml rapidio.xml \
-           genericirq.xml s390-drivers.xml
+           genericirq.xml s390-drivers.xml uio-howto.xml
 
 ###
 # The build process is as follows (targets):
index c119484258b8428d59b07b3046a5c5d48def9519..fdd7f4f887b75ba7bc96b7ab81b9abc7d3348d73 100644 (file)
 </abstract>
 
 <revhistory>
+       <revision>
+       <revnumber>0.4</revnumber>
+       <date>2007-11-26</date>
+       <authorinitials>hjk</authorinitials>
+       <revremark>Removed section about uio_dummy.</revremark>
+       </revision>
        <revision>
        <revnumber>0.3</revnumber>
        <date>2007-04-29</date>
@@ -94,6 +100,26 @@ interested in translating it, please email me
        user space. This simplifies development and reduces the risk of
        serious bugs within a kernel module.
        </para>
+       <para>
+       Please note that UIO is not an universal driver interface. Devices
+       that are already handled well by other kernel subsystems (like
+       networking or serial or USB) are no candidates for an UIO driver.
+       Hardware that is ideally suited for an UIO driver fulfills all of
+       the following:
+       </para>
+<itemizedlist>
+<listitem>
+       <para>The device has memory that can be mapped. The device can be
+       controlled completely by writing to this memory.</para>
+</listitem>
+<listitem>
+       <para>The device usually generates interrupts.</para>
+</listitem>
+<listitem>
+       <para>The device does not fit into one of the standard kernel
+       subsystems.</para>
+</listitem>
+</itemizedlist>
 </sect1>
 
 <sect1 id="thanks">
@@ -174,8 +200,9 @@ interested in translating it, please email me
        For cards that don't generate interrupts but need to be
        polled, there is the possibility to set up a timer that
        triggers the interrupt handler at configurable time intervals.
-       See <filename>drivers/uio/uio_dummy.c</filename> for an
-       example of this technique.
+       This interrupt simulation is done by calling
+       <function>uio_event_notify()</function>
+       from the timer's event handler.
        </para>
 
        <para>
@@ -263,63 +290,11 @@ offset = N * getpagesize();
 </sect1>
 </chapter>
 
-<chapter id="using-uio_dummy" xreflabel="Using uio_dummy">
-<?dbhtml filename="using-uio_dummy.html"?>
-<title>Using uio_dummy</title>
-       <para>
-       Well, there is no real use for uio_dummy. Its only purpose is
-       to test most parts of the UIO system (everything except
-       hardware interrupts), and to serve as an example for the
-       kernel module that you will have to write yourself.
-       </para>
-
-<sect1 id="what_uio_dummy_does">
-<title>What uio_dummy does</title>
-       <para>
-       The kernel module <filename>uio_dummy.ko</filename> creates a
-       device that uses a timer to generate periodic interrupts. The
-       interrupt handler does nothing but increment a counter. The
-       driver adds two custom attributes, <varname>count</varname>
-       and <varname>freq</varname>, that appear under
-       <filename>/sys/devices/platform/uio_dummy/</filename>.
-       </para>
-
-       <para>
-       The attribute <varname>count</varname> can be read and
-       written.  The associated file
-       <filename>/sys/devices/platform/uio_dummy/count</filename>
-       appears as a normal text file and contains the total number of
-       timer interrupts. If you look at it (e.g. using
-       <function>cat</function>), you'll notice it is slowly counting
-       up.
-       </para>
-
-       <para>
-       The attribute <varname>freq</varname> can be read and written.
-       The content of
-       <filename>/sys/devices/platform/uio_dummy/freq</filename>
-       represents the number of system timer ticks between two timer
-       interrupts. The default value of <varname>freq</varname> is
-       the value of the kernel variable <varname>HZ</varname>, which
-       gives you an interval of one second. Lower values will
-       increase the frequency. Try the following:
-       </para>
-<programlisting format="linespecific">
-cd /sys/devices/platform/uio_dummy/
-echo 100 > freq
-</programlisting>
-       <para>
-       Use <function>cat count</function> to see how the interrupt
-       frequency changes.
-       </para>
-</sect1>
-</chapter>
-
 <chapter id="custom_kernel_module" xreflabel="Writing your own kernel module">
 <?dbhtml filename="custom_kernel_module.html"?>
 <title>Writing your own kernel module</title>
        <para>
-       Please have a look at <filename>uio_dummy.c</filename> as an
+       Please have a look at <filename>uio_cif.c</filename> as an
        example. The following paragraphs explain the different
        sections of this file.
        </para>
@@ -354,9 +329,8 @@ See the description below for details.
 interrupt, it's your modules task to determine the irq number during
 initialization. If you don't have a hardware generated interrupt but
 want to trigger the interrupt handler in some other way, set
-<varname>irq</varname> to <varname>UIO_IRQ_CUSTOM</varname>. The
-uio_dummy module does this as it triggers the event mechanism in a timer
-routine. If you had no interrupt at all, you could set
+<varname>irq</varname> to <varname>UIO_IRQ_CUSTOM</varname>.
+If you had no interrupt at all, you could set
 <varname>irq</varname> to <varname>UIO_IRQ_NONE</varname>, though this
 rarely makes sense.
 </para></listitem>
index 003c7319b8c7a6dbae0881ae513474eea86f727b..13ab076dcd92484149eec9ef9e8bc1fc33031397 100644 (file)
@@ -1,5 +1,3 @@
-This is an explanation of what i2c is, and what is supported in this package.
-
 I2C and SMBus
 =============
 
@@ -33,52 +31,17 @@ When we talk about I2C, we use the following terms:
             Client
 
 An Algorithm driver contains general code that can be used for a whole class
-of I2C adapters. Each specific adapter driver depends on one algorithm
-driver.
+of I2C adapters. Each specific adapter driver either depends on one algorithm
+driver, or includes its own implementation.
 
 A Driver driver (yes, this sounds ridiculous, sorry) contains the general
 code to access some type of device. Each detected device gets its own
 data in the Client structure. Usually, Driver and Client are more closely
 integrated than Algorithm and Adapter.
 
-For a given configuration, you will need a driver for your I2C bus (usually
-a separate Adapter and Algorithm driver), and drivers for your I2C devices
-(usually one driver for each device). There are no I2C device drivers
-in this package. See the lm_sensors project http://www.lm-sensors.nu
-for device drivers.
+For a given configuration, you will need a driver for your I2C bus, and
+drivers for your I2C devices (usually one driver for each device).
 
 At this time, Linux only operates I2C (or SMBus) in master mode; you can't
 use these APIs to make a Linux system behave as a slave/device, either to
 speak a custom protocol or to emulate some other device.
-
-
-Included Bus Drivers
-====================
-Note that only stable drivers are patched into the kernel by 'mkpatch'.
-
-
-Base modules
-------------
-
-i2c-core: The basic I2C code, including the /proc/bus/i2c* interface
-i2c-dev:  The /dev/i2c-* interface
-i2c-proc: The /proc/sys/dev/sensors interface for device (client) drivers
-
-Algorithm drivers
------------------
-
-i2c-algo-bit:    A bit-banging algorithm
-i2c-algo-pcf:    A PCF 8584 style algorithm
-i2c-algo-ibm_ocp: An algorithm for the I2C device in IBM 4xx processors (NOT BUILT BY DEFAULT)
-
-Adapter drivers
----------------
-
-i2c-elektor:     Elektor ISA card (uses i2c-algo-pcf)
-i2c-elv:         ELV parallel port adapter (uses i2c-algo-bit)
-i2c-pcf-epp:     PCF8584 on a EPP parallel port (uses i2c-algo-pcf) (NOT mkpatched)
-i2c-philips-par: Philips style parallel port adapter (uses i2c-algo-bit)
-i2c-adap-ibm_ocp: IBM 4xx processor I2C device (uses i2c-algo-ibm_ocp) (NOT BUILT BY DEFAULT)
-i2c-pport:       Primitive parallel port adapter (uses i2c-algo-bit)
-i2c-velleman:    Velleman K8000 parallel port adapter (uses i2c-algo-bit)
-
index 42008395534d67c39dfc1da086ee9f35eaa95c3a..9b0e322118b5402eb83868c70266f8afdf420ed1 100644 (file)
@@ -1040,6 +1040,11 @@ static void add_virtqueue(struct device *dev, unsigned int num_descs,
                / getpagesize();
        p = get_pages(pages);
 
+       /* Initialize the virtqueue */
+       vq->next = NULL;
+       vq->last_avail_idx = 0;
+       vq->dev = dev;
+
        /* Initialize the configuration. */
        vq->config.num = num_descs;
        vq->config.irq = devices.next_irq++;
@@ -1057,9 +1062,6 @@ static void add_virtqueue(struct device *dev, unsigned int num_descs,
        for (i = &dev->vq; *i; i = &(*i)->next);
        *i = vq;
 
-       /* Link virtqueue back to device. */
-       vq->dev = dev;
-
        /* Set the routine to call when the Guest does something to this
         * virtqueue. */
        vq->handle_output = handle_output;
@@ -1093,6 +1095,7 @@ static struct device *new_device(const char *name, u16 type, int fd,
        dev->desc = new_dev_desc(type);
        dev->handle_input = handle_input;
        dev->name = name;
+       dev->vq = NULL;
        return dev;
 }
 
diff --git a/Documentation/namespaces/compatibility-list.txt b/Documentation/namespaces/compatibility-list.txt
new file mode 100644 (file)
index 0000000..defc558
--- /dev/null
@@ -0,0 +1,39 @@
+       Namespaces compatibility list
+
+This document contains the information about the problems user
+may have when creating tasks living in different namespaces.
+
+Here's the summary. This matrix shows the known problems, that
+occur when tasks share some namespace (the columns) while living
+in different other namespaces (the rows):
+
+       UTS     IPC     VFS     PID     User    Net
+UTS     X
+IPC             X       1
+VFS                     X
+PID             1       1       X
+User            2       2               X
+Net                                             X
+
+1. Both the IPC and the PID namespaces provide IDs to address
+   object inside the kernel. E.g. semaphore with IPCID or
+   process group with pid.
+
+   In both cases, tasks shouldn't try exposing this ID to some
+   other task living in a different namespace via a shared filesystem
+   or IPC shmem/message. The fact is that this ID is only valid
+   within the namespace it was obtained in and may refer to some
+   other object in another namespace.
+
+2. Intentionally, two equal user IDs in different user namespaces
+   should not be equal from the VFS point of view. In other
+   words, user 10 in one user namespace shouldn't have the same
+   access permissions to files, belonging to user 10 in another
+   namespace.
+
+   The same is true for the IPC namespaces being shared - two users
+   from different user namespaces should not access the same IPC objects
+   even having equal UIDs.
+
+   But currently this is not so.
+
index 11340625e363cbb122b3b61bea966249ed8dcca2..6cc30e0d5795ce8e598190fb32edf1624a58a203 100644 (file)
@@ -554,6 +554,30 @@ xmit_hash_policy
 
                This algorithm is 802.3ad compliant.
 
+       layer2+3
+
+               This policy uses a combination of layer2 and layer3
+               protocol information to generate the hash.
+
+               Uses XOR of hardware MAC addresses and IP addresses to
+               generate the hash.  The formula is
+
+               (((source IP XOR dest IP) AND 0xffff) XOR
+                       ( source MAC XOR destination MAC ))
+                               modulo slave count
+
+               This algorithm will place all traffic to a particular
+               network peer on the same slave.  For non-IP traffic,
+               the formula is the same as for the layer2 transmit
+               hash policy.
+
+               This policy is intended to provide a more balanced
+               distribution of traffic than layer2 alone, especially
+               in environments where a layer3 gateway device is
+               required to reach most destinations.
+
+               This algorithm is 802.3ad complient.
+
        layer3+4
 
                This policy uses upper layer protocol information,
@@ -589,8 +613,9 @@ xmit_hash_policy
                or may not tolerate this noncompliance.
 
        The default value is layer2.  This option was added in bonding
-version 2.6.3.  In earlier versions of bonding, this parameter does
-not exist, and the layer2 policy is the only policy.
+       version 2.6.3.  In earlier versions of bonding, this parameter
+       does not exist, and the layer2 policy is the only policy.  The
+       layer2+3 value was added for bonding version 3.2.2.
 
 
 3. Configuring Bonding Devices
index 265fcdcb8e5f3cdc4a0826697be57ae7ebda3c54..120eb20dbb09199afc1628a2ca1187812789bde9 100644 (file)
@@ -339,6 +339,10 @@ Use this function to register your device driver on a parallel port
 ('port').  Once you have done that, you will be able to use
 parport_claim and parport_release in order to use the port.
 
+The ('name') argument is the name of the device that appears in /proc
+filesystem. The string must be valid for the whole lifetime of the
+device (until parport_unregister_device is called).
+
 This function will register three callbacks into your driver:
 'preempt', 'wakeup' and 'irq'.  Each of these may be NULL in order to
 indicate that you do not want a callback.
index ac1be25c1e253e7711ecfeb5d542f471fe7eba69..e9a3cb1d6b06b18a3e0bba0d5a0bf85dc3fde77f 100644 (file)
@@ -1645,8 +1645,9 @@ platforms are moved over to use the flattened-device-tree model.
      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", "tbi",
-     or "rtbi".
+     i.e., "mii" (default), "rmii", "gmii", "rgmii", "rgmii-id" (Internal
+     Delay), "rgmii-txid" (delay on TX only), "rgmii-rxid" (delay on RX only),
+     "tbi", or "rtbi".
 
    Example:
        ucc@2000 {
index ec499265decaa45b7c2495e51bdc660f1959dc6f..10c041ca13c70c8f0e8d9c44a1e3118f34e9d793 100644 (file)
@@ -1,7 +1,7 @@
                     ThinkPad ACPI Extras Driver
 
-                            Version 0.16
-                          August 2nd, 2007
+                            Version 0.17
+                         October 04th, 2007
 
                Borislav Deianov <borislav@users.sf.net>
              Henrique de Moraes Holschuh <hmh@hmh.eng.br>
@@ -923,19 +923,34 @@ sysfs backlight device "thinkpad_screen"
 This feature allows software control of the LCD brightness on ThinkPad
 models which don't have a hardware brightness slider.
 
-It has some limitations: the LCD backlight cannot be actually turned on or off
-by this interface, and in many ThinkPad models, the "dim while on battery"
-functionality will be enabled by the BIOS when this interface is used, and
-cannot be controlled.
-
-The backlight control has eight levels, ranging from 0 to 7.  Some of the
-levels may not be distinct.
-
-There are two interfaces to the firmware for brightness control, EC and CMOS.
-To select which one should be used, use the brightness_mode module parameter:
-brightness_mode=1 selects EC mode, brightness_mode=2 selects CMOS mode,
-brightness_mode=3 selects both EC and CMOS.  The driver tries to autodetect
-which interface to use.
+It has some limitations: the LCD backlight cannot be actually turned on or
+off by this interface, and in many ThinkPad models, the "dim while on
+battery" functionality will be enabled by the BIOS when this interface is
+used, and cannot be controlled.
+
+On IBM (and some of the earlier Lenovo) ThinkPads, the backlight control
+has eight brightness levels, ranging from 0 to 7.  Some of the levels
+may not be distinct.  Later Lenovo models that implement the ACPI
+display backlight brightness control methods have 16 levels, ranging
+from 0 to 15.
+
+There are two interfaces to the firmware for direct brightness control,
+EC and CMOS.  To select which one should be used, use the
+brightness_mode module parameter: brightness_mode=1 selects EC mode,
+brightness_mode=2 selects CMOS mode, brightness_mode=3 selects both EC
+and CMOS.  The driver tries to autodetect which interface to use.
+
+When display backlight brightness controls are available through the
+standard ACPI interface, it is best to use it instead of this direct
+ThinkPad-specific interface.  The driver will disable its native
+backlight brightness control interface if it detects that the standard
+ACPI interface is available in the ThinkPad.
+
+The brightness_enable module parameter can be used to control whether
+the LCD brightness control feature will be enabled when available.
+brightness_enable=0 forces it to be disabled.  brightness_enable=1
+forces it to be enabled when available, even if the standard ACPI
+interface is also available.
 
 Procfs notes:
 
@@ -947,11 +962,11 @@ Procfs notes:
 
 Sysfs notes:
 
-The interface is implemented through the backlight sysfs class, which is poorly
-documented at this time.
+The interface is implemented through the backlight sysfs class, which is
+poorly documented at this time.
 
-Locate the thinkpad_screen device under /sys/class/backlight, and inside it
-there will be the following attributes:
+Locate the thinkpad_screen device under /sys/class/backlight, and inside
+it there will be the following attributes:
 
        max_brightness:
                Reads the maximum brightness the hardware can be set to.
@@ -961,17 +976,19 @@ there will be the following attributes:
                Reads what brightness the screen is set to at this instant.
 
        brightness:
-               Writes request the driver to change brightness to the given
-               value.  Reads will tell you what brightness the driver is trying
-               to set the display to when "power" is set to zero and the display
-               has not been dimmed by a kernel power management event.
+               Writes request the driver to change brightness to the
+               given value.  Reads will tell you what brightness the
+               driver is trying to set the display to when "power" is set
+               to zero and the display has not been dimmed by a kernel
+               power management event.
 
        power:
-               power management mode, where 0 is "display on", and 1 to 3 will
-               dim the display backlight to brightness level 0 because
-               thinkpad-acpi cannot really turn the backlight off.  Kernel
-               power management events can temporarily increase the current
-               power management level, i.e. they can dim the display.
+               power management mode, where 0 is "display on", and 1 to 3
+               will dim the display backlight to brightness level 0
+               because thinkpad-acpi cannot really turn the backlight
+               off.  Kernel power management events can temporarily
+               increase the current power management level, i.e. they can
+               dim the display.
 
 
 Volume control -- /proc/acpi/ibm/volume
index 048a8762cfb548fbe2b2078ea8527a7a9c50bc01..8e65c4498c521259d93061e0a94a2d3652eaef98 100644 (file)
@@ -132,6 +132,14 @@ set_termios()              Notify the tty driver that the device's termios
                        tty->termios. Previous settings should be passed in
                        the "old" argument.
 
+                       The API is defined such that the driver should return
+                       the actual modes selected. This means that the
+                       driver function is responsible for modifying any
+                       bits in the request it cannot fulfill to indicate
+                       the actual modes being used. A device with no
+                       hardware capability for change (eg a USB dongle or
+                       virtual port) can provide NULL for this method.
+
 throttle()             Notify the tty driver that input buffers for the
                        line discipline are close to full, and it should
                        somehow signal that no more characters should be
index 97842deec47170dee0617d8767e5ebb5d8fa099e..b2fc4d4a99177be7bd48dce560d1f28417c60aa9 100644 (file)
@@ -278,6 +278,14 @@ optional.  The methods' jobs are quite simple:
        (although the interfaces will be in the same altsettings as
        before the suspend).
 
+If the device is disconnected or powered down while it is suspended,
+the disconnect method will be called instead of the resume or
+reset_resume method.  This is also quite likely to happen when
+waking up from hibernation, as many systems do not maintain suspend
+current to the USB host controllers during hibernation.  (It's
+possible to work around the hibernation-forces-disconnect problem by
+using the USB Persist facility.)
+
 The reset_resume method is used by the USB Persist facility (see
 Documentation/usb/persist.txt) and it can also be used under certain
 circumstances when CONFIG_USB_PERSIST is not enabled.  Currently, if a
diff --git a/Documentation/x86_64/uefi.txt b/Documentation/x86_64/uefi.txt
new file mode 100644 (file)
index 0000000..91a98ed
--- /dev/null
@@ -0,0 +1,29 @@
+General note on [U]EFI x86_64 support
+-------------------------------------
+
+The nomenclature EFI and UEFI are used interchangeably in this document.
+
+Although the tools below are _not_ needed for building the kernel,
+the needed bootloader support and associated tools for x86_64 platforms
+with EFI firmware and specifications are listed below.
+
+1. UEFI specification:  http://www.uefi.org
+
+2. Booting Linux kernel on UEFI x86_64 platform requires bootloader
+   support. Elilo with x86_64 support can be used.
+
+3. x86_64 platform with EFI/UEFI firmware.
+
+Mechanics:
+---------
+- Build the kernel with the following configuration.
+       CONFIG_FB_EFI=y
+       CONFIG_FRAMEBUFFER_CONSOLE=y
+- Create a VFAT partition on the disk
+- Copy the following to the VFAT partition:
+       elilo bootloader with x86_64 support, elilo configuration file,
+       kernel image built in first step and corresponding
+       initrd. Instructions on building elilo  and its dependencies
+       can be found in the elilo sourceforge project.
+- Boot to EFI shell and invoke elilo choosing the kernel image built
+  in first step.
index cad0882754a68ebee704d42e2ec34cb1155a6b14..9507b42075128b4072e0c834218c644546bde116 100644 (file)
@@ -88,7 +88,6 @@ S: Status, one of the following:
 P:     Mike Phillips
 M:     mikep@linuxtr.net
 L:     netdev@vger.kernel.org
-L:     linux-tr@linuxtr.net
 W:     http://www.linuxtr.net
 S:     Maintained
 
@@ -167,7 +166,6 @@ S:  Maintained
 
 A2232 SERIAL BOARD DRIVER
 P:     Enver Haase
-M:     ehaase@inf.fu-berlin.de
 M:     A2232@gmx.net
 L:     linux-m68k@lists.linux-m68k.org
 S:     Maintained
@@ -323,8 +321,7 @@ S:  Maintained
 ALCATEL SPEEDTOUCH USB DRIVER
 P:     Duncan Sands
 M:     duncan.sands@free.fr
-L:     linux-usb-users@lists.sourceforge.net
-L:     linux-usb-devel@lists.sourceforge.net
+L:     linux-usb@vger.kernel.org
 W:     http://www.linux-usb.org/SpeedTouch/
 S:     Maintained
 
@@ -1043,7 +1040,7 @@ S:        Maintained
 CIRRUS LOGIC EP93XX OHCI USB HOST DRIVER
 P:     Lennert Buytenhek
 M:     kernel@wantstofly.org
-L:     linux-usb-devel@lists.sourceforge.net
+L:     linux-usb@vger.kernel.org
 S:     Maintained
 
 CIRRUS LOGIC CS4280/CS461x SOUNDDRIVER
@@ -1552,7 +1549,7 @@ S:        Maintained
 FREESCALE HIGHSPEED USB DEVICE DRIVER
 P:     Li Yang
 M:     leoli@freescale.com
-L:     linux-usb-devel@lists.sourceforge.net
+L:     linux-usb@vger.kernel.org
 L:     linuxppc-dev@ozlabs.org
 S:     Maintained
 
@@ -1682,8 +1679,7 @@ S:        Maintained
 HARMONY SOUND DRIVER
 P:     Kyle McMartin
 M:     kyle@parisc-linux.org
-W:     http://www.parisc-linux.org/~kyle/harmony/
-L:     parisc-linux@lists.parisc-linux.org
+L:     linux-parisc@vger.kernel.org
 S:     Maintained
 
 HAYES ESP SERIAL DRIVER
@@ -1914,10 +1910,8 @@ L:       linux1394-devel@lists.sourceforge.net
 S:     Maintained
 
 IMS TWINTURBO FRAMEBUFFER DRIVER
-P:     Paul Mundt
-M:     lethal@chaoticdreams.org
 L:     linux-fbdev-devel@lists.sourceforge.net (subscribers-only)
-S:     Maintained
+S:     Orphan
 
 INFINIBAND SUBSYSTEM
 P:     Roland Dreier
@@ -2068,7 +2062,7 @@ S:        Maintained
 IOC3 SERIAL DRIVER
 P:     Pat Gefre
 M:     pfg@sgi.com
-L:     linux-kernel@linux-mips.org
+L:     linux-mips@linux-mips.org
 S:     Maintained
 
 IP MASQUERADING:
@@ -2113,6 +2107,14 @@ L:       irda-users@lists.sourceforge.net (subscribers-only)
 W:     http://irda.sourceforge.net/
 S:     Maintained
 
+ISCSI
+P:     Mike Christie
+M:     michaelc@cs.wisc.edu
+L:     open-iscsi@googlegroups.com
+W:     www.open-iscsi.org
+T:     git kernel.org:/pub/scm/linux/kernel/mnc/linux-2.6-iscsi.git
+S:     Maintained
+
 ISAPNP
 P:     Jaroslav Kysela
 M:     perex@perex.cz
@@ -2168,7 +2170,7 @@ S:        Maintained
 
 KDUMP
 P:     Vivek Goyal
-M:     vgoyal@in.ibm.com
+M:     vgoyal@redhat.com
 P:     Haren Myneni
 M:     hbabu@us.ibm.com
 L:     kexec@lists.infradead.org
@@ -2446,7 +2448,7 @@ M68K ON APPLE MACINTOSH
 P:     Joshua Thompson
 M:     funaho@jurai.org
 W:     http://www.mac.linux-m68k.org/
-L:     linux-mac68k@mac.linux-m68k.org
+L:     linux-m68k@lists.linux-m68k.org
 S:     Maintained
 
 M68K ON HP9000/300
@@ -2593,13 +2595,6 @@ L:       https://tango.0pointer.de/mailman/listinfo/s270-linux
 W:     http://0pointer.de/lennart/tchibo.html
 S:     Maintained
 
-MTRR AND SIMILAR SUPPORT [i386]
-P:     Richard Gooch
-M:     rgooch@atnf.csiro.au
-L:     linux-kernel@vger.kernel.org
-W:     http://www.atnf.csiro.au/~rgooch/linux/kernel-patches.html
-S:     Maintained
-
 MULTIMEDIA CARD (MMC), SECURE DIGITAL (SD) AND SDIO SUBSYSTEM
 P:     Pierre Ossman
 M:     drzeus-mmc@drzeus.cx
@@ -2818,7 +2813,6 @@ M:        p2@ace.ulyssis.student.kuleuven.ac.be
 P:     Mike Phillips
 M:     mikep@linuxtr.net
 L:     netdev@vger.kernel.org
-L:     linux-tr@linuxtr.net
 W:     http://www.linuxtr.net
 S:     Maintained
 
@@ -2892,16 +2886,15 @@ W:      http://www.torque.net/linux-pp.html
 S:     Maintained
 
 PARISC ARCHITECTURE
+P:     Kyle McMartin
+M:     kyle@parisc-linux.org
 P:     Matthew Wilcox
 M:     matthew@wil.cx
 P:     Grant Grundler
 M:     grundler@parisc-linux.org
-P:     Kyle McMartin
-M:     kyle@parisc-linux.org
-L:     parisc-linux@parisc-linux.org
+L:     linux-parisc@vger.kernel.org
 W:     http://www.parisc-linux.org/
 T:     git kernel.org:/pub/scm/linux/kernel/git/kyle/parisc-2.6.git
-T:     cvs cvs.parisc-linux.org:/var/cvs/linux-2.6
 S:     Maintained
 
 PARAVIRT_OPS INTERFACE
@@ -2957,7 +2950,7 @@ S:        Supported
 PCMCIA SUBSYSTEM
 P:     Linux PCMCIA Team
 L:     linux-pcmcia@lists.infradead.org
-L:     http://lists.infradead.org/mailman/listinfo/linux-pcmcia
+W:     http://lists.infradead.org/mailman/listinfo/linux-pcmcia
 T:     git kernel.org:/pub/scm/linux/kernel/git/brodo/pcmcia-2.6.git
 S:     Maintained
 
@@ -3636,18 +3629,12 @@ M:      laredo@gnu.org
 W:     http://www.stradis.com/
 S:     Maintained
 
-SUPERH (sh)
-P:     Paul Mundt
-M:     lethal@linux-sh.org
-L:     linuxsh-dev@lists.sourceforge.net (subscribers-only)
-W:     http://www.linux-sh.org
-S:     Maintained
-
-SUPERH64 (sh64)
+SUPERH
 P:     Paul Mundt
 M:     lethal@linux-sh.org
-L:     linuxsh-shmedia-dev@lists.sourceforge.net
+L:     linux-sh@vger.kernel.org
 W:     http://www.linux-sh.org
+T:     git kernel.org:/pub/scm/linux/kernel/git/lethal/sh-2.6.git
 S:     Maintained
 
 SUN3/3X
@@ -3733,7 +3720,7 @@ S:        Maintained
 TLAN NETWORK DRIVER
 P:     Samuel Chessman
 M:     chessman@tux.org
-L:     tlan-devel@lists.sourceforge.net
+L:     tlan-devel@lists.sourceforge.net (subscribers-only)
 W:     http://sourceforge.net/projects/tlan/
 S:     Maintained
 
@@ -3741,7 +3728,6 @@ TOKEN-RING NETWORK DRIVER
 P:     Mike Phillips
 M:     mikep@linuxtr.net
 L:     netdev@vger.kernel.org
-L:     linux-tr@linuxtr.net
 W:     http://www.linuxtr.net
 S:     Maintained
 
@@ -3818,22 +3804,20 @@ S:      Maintained
 USB ACM DRIVER
 P:     Oliver Neukum
 M:     oliver@neukum.name
-L:     linux-usb-users@lists.sourceforge.net
-L:     linux-usb-devel@lists.sourceforge.net
+L:     linux-usb@vger.kernel.org
 S:     Maintained
 
 USB BLOCK DRIVER (UB ub)
 P:     Pete Zaitcev
 M:     zaitcev@redhat.com
 L:     linux-kernel@vger.kernel.org
-L:     linux-usb-devel@lists.sourceforge.net
+L:      linux-usb@vger.kernel.org
 S:     Supported
 
 USB CDC ETHERNET DRIVER
 P:     Greg Kroah-Hartman
 M:     greg@kroah.com
-L:     linux-usb-users@lists.sourceforge.net
-L:     linux-usb-devel@lists.sourceforge.net
+L:      linux-usb@vger.kernel.org
 S:     Maintained
 W:     http://www.kroah.com/linux-usb/
 
@@ -3847,13 +3831,13 @@ S:      Maintained
 USB EHCI DRIVER
 P:     David Brownell
 M:     dbrownell@users.sourceforge.net
-L:     linux-usb-devel@lists.sourceforge.net
+L:      linux-usb@vger.kernel.org
 S:     Odd Fixes
 
 USB ET61X[12]51 DRIVER
 P:     Luca Risolia
 M:     luca.risolia@studio.unibo.it
-L:     linux-usb-devel@lists.sourceforge.net
+L:      linux-usb@vger.kernel.org
 L:     video4linux-list@redhat.com
 W:     http://www.linux-projects.org
 S:     Maintained
@@ -3861,41 +3845,33 @@ S:      Maintained
 USB GADGET/PERIPHERAL SUBSYSTEM
 P:     David Brownell
 M:     dbrownell@users.sourceforge.net
-L:     linux-usb-devel@lists.sourceforge.net
+L:      linux-usb@vger.kernel.org
 W:     http://www.linux-usb.org/gadget
 S:     Maintained
 
 USB HID/HIDBP DRIVERS (USB KEYBOARDS, MICE, REMOTE CONTROLS, ...)
 P:     Jiri Kosina
 M:     jkosina@suse.cz
-L:     linux-usb-devel@lists.sourceforge.net
+L:      linux-usb@vger.kernel.org
 T:     git kernel.org:/pub/scm/linux/kernel/git/jikos/hid.git
 S:     Maintained
 
-USB HUB DRIVER
-P:     Johannes Erdfelt
-M:     johannes@erdfelt.com
-L:     linux-usb-users@lists.sourceforge.net
-L:     linux-usb-devel@lists.sourceforge.net
-S:     Maintained
-
 USB ISP116X DRIVER
 P:     Olav Kongas
 M:     ok@artecdesign.ee
-L:     linux-usb-devel@lists.sourceforge.net
+L:      linux-usb@vger.kernel.org
 S:     Maintained
 
 USB KAWASAKI LSI DRIVER
 P:     Oliver Neukum
 M:     oliver@neukum.name
-L:     linux-usb-users@lists.sourceforge.net
-L:     linux-usb-devel@lists.sourceforge.net
+L:      linux-usb@vger.kernel.org
 S:     Maintained
 
 USB MASS STORAGE DRIVER
 P:     Matthew Dharm
 M:     mdharm-usb@one-eyed-alien.net
-L:     linux-usb-users@lists.sourceforge.net
+L:      linux-usb@vger.kernel.org
 L:     usb-storage@lists.one-eyed-alien.net
 S:     Maintained
 W:     http://www.one-eyed-alien.net/~mdharm/linux-usb/
@@ -3903,28 +3879,26 @@ W:      http://www.one-eyed-alien.net/~mdharm/linux-usb/
 USB OHCI DRIVER
 P:     David Brownell
 M:     dbrownell@users.sourceforge.net
-L:     linux-usb-users@lists.sourceforge.net
-L:     linux-usb-devel@lists.sourceforge.net
+L:      linux-usb@vger.kernel.org
 S:     Odd Fixes
 
 USB OPTION-CARD DRIVER
 P:     Matthias Urlichs
 M:     smurf@smurf.noris.de
-L:     linux-usb-devel@lists.sourceforge.net
+L:      linux-usb@vger.kernel.org
 S:     Maintained
 
 USB OV511 DRIVER
 P:     Mark McClelland
 M:     mmcclell@bigfoot.com
-L:     linux-usb-users@lists.sourceforge.net
-L:     linux-usb-devel@lists.sourceforge.net
+L:      linux-usb@vger.kernel.org
 W:     http://alpha.dyndns.org/ov511/
 S:     Maintained
 
 USB PEGASUS DRIVER
 P:     Petko Manolov
 M:     petkan@users.sourceforge.net
-L:     linux-usb-devel@lists.sourceforge.net
+L:      linux-usb@vger.kernel.org
 L:     netdev@vger.kernel.org
 W:     http://pegasus2.sourceforge.net/
 S:     Maintained
@@ -3932,14 +3906,13 @@ S:      Maintained
 USB PRINTER DRIVER (usblp)
 P:     Pete Zaitcev
 M:     zaitcev@redhat.com
-L:     linux-usb-users@lists.sourceforge.net
-L:     linux-usb-devel@lists.sourceforge.net
+L:      linux-usb@vger.kernel.org
 S:     Supported
 
 USB RTL8150 DRIVER
 P:     Petko Manolov
 M:     petkan@users.sourceforge.net
-L:     linux-usb-devel@lists.sourceforge.net
+L:      linux-usb@vger.kernel.org
 L:     netdev@vger.kernel.org
 W:     http://pegasus2.sourceforge.net/
 S:     Maintained
@@ -3947,8 +3920,7 @@ S:        Maintained
 USB SE401 DRIVER
 P:     Jeroen Vreeken
 M:     pe1rxq@amsat.org
-L:     linux-usb-users@lists.sourceforge.net
-L:     linux-usb-devel@lists.sourceforge.net
+L:      linux-usb@vger.kernel.org
 W:     http://www.chello.nl/~j.vreeken/se401/
 S:     Maintained
 
@@ -3962,72 +3934,59 @@ USB SERIAL DIGI ACCELEPORT DRIVER
 P:     Peter Berger and Al Borchers
 M:     pberger@brimson.com
 M:     alborchers@steinerpoint.com
-L:     linux-usb-users@lists.sourceforge.net
-L:     linux-usb-devel@lists.sourceforge.net
+L:      linux-usb@vger.kernel.org
 S:     Maintained
 
 USB SERIAL DRIVER
 P:     Greg Kroah-Hartman
 M:     gregkh@suse.de
-L:     linux-usb-users@lists.sourceforge.net
-L:     linux-usb-devel@lists.sourceforge.net
+L:      linux-usb@vger.kernel.org
 S:     Supported
 
 USB SERIAL BELKIN F5U103 DRIVER
 P:     William Greathouse
 M:     wgreathouse@smva.com
-L:     linux-usb-users@lists.sourceforge.net
-L:     linux-usb-devel@lists.sourceforge.net
+L:      linux-usb@vger.kernel.org
 S:     Maintained
 
 USB SERIAL CYPRESS M8 DRIVER
 P:     Lonnie Mendez
 M:     dignome@gmail.com
-L:     linux-usb-users@lists.sourceforge.net
-L:     linux-usb-devel@lists.sourceforge.net
+L:      linux-usb@vger.kernel.org
 S:     Maintained
 W:     http://geocities.com/i0xox0i
 W:     http://firstlight.net/cvs
 
-USB SERIAL CYBERJACK PINPAD/E-COM DRIVER
-L:     linux-usb-users@lists.sourceforge.net
-L:     linux-usb-devel@lists.sourceforge.net
-S:     Maintained
-
 USB AUERSWALD DRIVER
 P:     Wolfgang Muees
 M:     wolfgang@iksw-muees.de
-L:     linux-usb-users@lists.sourceforge.net
-L:     linux-usb-devel@lists.sourceforge.net
+L:      linux-usb@vger.kernel.org
 S:     Maintained
 
 USB SERIAL EMPEG EMPEG-CAR MARK I/II DRIVER
 P:     Gary Brubaker
 M:     xavyer@ix.netcom.com
-L:     linux-usb-users@lists.sourceforge.net
-L:     linux-usb-devel@lists.sourceforge.net
+L:      linux-usb@vger.kernel.org
 S:     Maintained
 
 USB SERIAL KEYSPAN DRIVER
 P:     Greg Kroah-Hartman
 M:     greg@kroah.com
-L:     linux-usb-users@lists.sourceforge.net
-L:     linux-usb-devel@lists.sourceforge.net
+L:      linux-usb@vger.kernel.org
 W:     http://www.kroah.com/linux/
 S:     Maintained
 
 USB SERIAL WHITEHEAT DRIVER
 P:     Support Department
 M:     support@connecttech.com
-L:     linux-usb-users@lists.sourceforge.net
-L:     linux-usb-devel@lists.sourceforge.net
+L:      linux-usb@vger.kernel.org
 W:     http://www.connecttech.com
 S:     Supported
 
 USB SN9C1xx DRIVER
 P:     Luca Risolia
 M:     luca.risolia@studio.unibo.it
-L:     linux-usb-devel@lists.sourceforge.net
+L:      linux-usb@vger.kernel.org
 L:     video4linux-list@redhat.com
 W:     http://www.linux-projects.org
 S:     Maintained
@@ -4035,8 +3994,7 @@ S:        Maintained
 USB SUBSYSTEM
 P:     Greg Kroah-Hartman
 M:     gregkh@suse.de
-L:     linux-usb-users@lists.sourceforge.net
-L:     linux-usb-devel@lists.sourceforge.net
+L:      linux-usb@vger.kernel.org
 W:     http://www.linux-usb.org
 T:     quilt kernel.org/pub/linux/kernel/people/gregkh/gregkh-2.6/
 S:     Supported
@@ -4044,8 +4002,7 @@ S:        Supported
 USB UHCI DRIVER
 P:     Alan Stern
 M:     stern@rowland.harvard.edu
-L:     linux-usb-users@lists.sourceforge.net
-L:     linux-usb-devel@lists.sourceforge.net
+L:      linux-usb@vger.kernel.org
 S:     Maintained
 
 USB "USBNET" DRIVER FRAMEWORK
@@ -4058,7 +4015,7 @@ S:        Maintained
 USB W996[87]CF DRIVER
 P:     Luca Risolia
 M:     luca.risolia@studio.unibo.it
-L:     linux-usb-devel@lists.sourceforge.net
+L:      linux-usb@vger.kernel.org
 L:     video4linux-list@redhat.com
 W:     http://www.linux-projects.org
 S:     Maintained
@@ -4066,7 +4023,7 @@ S:        Maintained
 USB ZC0301 DRIVER
 P:     Luca Risolia
 M:     luca.risolia@studio.unibo.it
-L:     linux-usb-devel@lists.sourceforge.net
+L:      linux-usb@vger.kernel.org
 L:     video4linux-list@redhat.com
 W:     http://www.linux-projects.org
 S:     Maintained
@@ -4074,22 +4031,21 @@ S:      Maintained
 USB ZD1201 DRIVER
 P:     Jeroen Vreeken
 M:     pe1rxq@amsat.org
-L:     linux-usb-users@lists.sourceforge.net
-L:     linux-usb-devel@lists.sourceforge.net
+L:      linux-usb@vger.kernel.org
 W:     http://linux-lc100020.sourceforge.net
 S:     Maintained
 
 USB ZR364XX DRIVER
 P:     Antoine Jacquet
 M:     royale@zerezo.com
-L:     linux-usb-devel@lists.sourceforge.net
+L:      linux-usb@vger.kernel.org
 L:     video4linux-list@redhat.com
 W:     http://royale.zerezo.com/zr364xx/
 S:     Maintained
 
 USER-MODE LINUX
 P:     Jeff Dike
-M:     jdike@karaya.com
+M:     jdike@addtoit.com
 L:     user-mode-linux-devel@lists.sourceforge.net
 L:     user-mode-linux-user@lists.sourceforge.net
 W:     http://user-mode-linux.sourceforge.net
@@ -4320,13 +4276,6 @@ L:       mjpeg-users@lists.sourceforge.net
 W:     http://mjpeg.sourceforge.net/driver-zoran/
 S:     Maintained
 
-ZR36120 VIDEO FOR LINUX DRIVER
-P:     Pauline Middelink
-M:     middelin@polyware.nl
-W:     http://www.polyware.nl/~middelin/En/hobbies.html
-W:     http://www.polyware.nl/~middelin/hobbies.html
-S:     Maintained
-
 ZS DECSTATION Z85C30 SERIAL DRIVER
 P:     Maciej W. Rozycki
 M:     macro@linux-mips.org
index a65ffd27de6b5f6786f2d17cc716f003efa628b9..c1825aab77e882b4fdd7bcf89fcf3c8e80b8b6ee 100644 (file)
--- a/Makefile
+++ b/Makefile
@@ -1,7 +1,7 @@
 VERSION = 2
 PATCHLEVEL = 6
 SUBLEVEL = 24
-EXTRAVERSION = -rc3
+EXTRAVERSION = -rc5
 NAME = Arr Matey! A Hairy Bilge Rat!
 
 # *DOCUMENTATION*
@@ -108,6 +108,9 @@ endif
 PHONY := _all
 _all:
 
+# Cancel implicit rules on top Makefile
+$(CURDIR)/Makefile Makefile: ;
+
 ifneq ($(KBUILD_OUTPUT),)
 # Invoke a second make in the output directory, passing relevant variables
 # check that the output directory actually exists
@@ -115,13 +118,10 @@ saved-output := $(KBUILD_OUTPUT)
 KBUILD_OUTPUT := $(shell cd $(KBUILD_OUTPUT) && /bin/pwd)
 $(if $(KBUILD_OUTPUT),, \
      $(error output directory "$(saved-output)" does not exist))
-# Check that OUTPUT directory is not the same as where we have kernel src
-$(if $(filter-out $(KBUILD_OUTPUT),$(shell /bin/pwd)),, \
-     $(error Output directory (O=...) specifies kernel src dir))
 
 PHONY += $(MAKECMDGOALS) sub-make
 
-$(filter-out _all sub-make,$(MAKECMDGOALS)) _all: sub-make
+$(filter-out _all sub-make $(CURDIR)/Makefile, $(MAKECMDGOALS)) _all: sub-make
        $(Q)@:
 
 sub-make: FORCE
@@ -291,7 +291,8 @@ export quiet Q KBUILD_VERBOSE
 # Look for make include files relative to root of kernel src
 MAKEFLAGS += --include-dir=$(srctree)
 
-# We need some generic definitions.
+# We need some generic definitions (do not try to remake the file).
+$(srctree)/scripts/Kbuild.include: ;
 include $(srctree)/scripts/Kbuild.include
 
 # Make variables (CC, etc...)
@@ -1560,9 +1561,6 @@ endif     # skip-makefile
 PHONY += FORCE
 FORCE:
 
-# Cancel implicit rules on top Makefile, `-rR' will apply to sub-makes.
-Makefile: ;
-
 # Declare the contents of the .PHONY variable as phony.  We keep that
 # information in a variable se we can use it in if_changed and friends.
 .PHONY: $(PHONY)
index 174b729c504b274084c10bd78ff9e4465f3a9cda..468b76ce66a1304e4eeddc48663effbe8545f83e 100644 (file)
@@ -12,6 +12,7 @@
 #include <linux/errno.h>
 #include <linux/sched.h>
 #include <linux/dma-mapping.h>
+#include <linux/scatterlist.h>
 
 #include "proto.h"
 
@@ -172,18 +173,19 @@ dma_alloc_coherent(struct device *dev, size_t size,
 EXPORT_SYMBOL(dma_alloc_coherent);
 
 int
-dma_map_sg(struct device *dev, struct scatterlist *sg, int nents,
+dma_map_sg(struct device *dev, struct scatterlist *sgl, int nents,
           enum dma_data_direction direction)
 {
        int i;
+       struct scatterlist *sg;
 
-       for (i = 0; i < nents; i++ ) {
+       for_each_sg(sgl, sg, nents, i) {
                void *va;
 
-               BUG_ON(!sg[i].page);
-               va = page_address(sg[i].page) + sg[i].offset;
-               sg_dma_address(sg + i) = (dma_addr_t)virt_to_bus(va);
-               sg_dma_len(sg + i) = sg[i].length;
+               BUG_ON(!sg_page(sg));
+               va = sg_virt(sg);
+               sg_dma_address(sg) = (dma_addr_t)virt_to_bus(va);
+               sg_dma_len(sg) = sg->length;
        }
 
        return nents;
index 95c8508c29b7125a1ac93bc0a6fd4e4f00d39f9e..117cab30bd36ca4e232fab5243b43ee81bc4b22c 100644 (file)
@@ -374,8 +374,8 @@ static int set_initial_registers(int uengine, struct ixp2000_uengine_code *c)
        u8 *ucode;
        int i;
 
-       gpr_a = kmalloc(128 * sizeof(u32), GFP_KERNEL);
-       gpr_b = kmalloc(128 * sizeof(u32), GFP_KERNEL);
+       gpr_a = kzalloc(128 * sizeof(u32), GFP_KERNEL);
+       gpr_b = kzalloc(128 * sizeof(u32), GFP_KERNEL);
        ucode = kmalloc(513 * 5, GFP_KERNEL);
        if (gpr_a == NULL || gpr_b == NULL || ucode == NULL) {
                kfree(ucode);
@@ -388,8 +388,6 @@ static int set_initial_registers(int uengine, struct ixp2000_uengine_code *c)
        if (c->uengine_parameters & IXP2000_UENGINE_4_CONTEXTS)
                per_ctx_regs = 32;
 
-       memset(gpr_a, 0, sizeof(gpr_a));
-       memset(gpr_b, 0, sizeof(gpr_b));
        for (i = 0; i < 256; i++) {
                struct ixp2000_reg_value *r = c->initial_reg_values + i;
                u32 *bank;
index d645897652c2d50a073bc529533127beff369c8d..29dec080a60431dd88bfa7b732940449054374ad 100644 (file)
@@ -339,16 +339,6 @@ __pabt_svc:
        str     r1, [sp]                @ save the "real" r0 copied
                                        @ from the exception stack
 
-#if __LINUX_ARM_ARCH__ < 6 && !defined(CONFIG_NEEDS_SYSCALL_FOR_CMPXCHG)
-#ifndef CONFIG_MMU
-#warning "NPTL on non MMU needs fixing"
-#else
-       @ make sure our user space atomic helper is aborted
-       cmp     r2, #TASK_SIZE
-       bichs   r3, r3, #PSR_Z_BIT
-#endif
-#endif
-
        @
        @ We are now ready to fill in the remaining blanks on the stack:
        @
@@ -372,9 +362,25 @@ __pabt_svc:
        zero_fp
        .endm
 
+       .macro  kuser_cmpxchg_check
+#if __LINUX_ARM_ARCH__ < 6 && !defined(CONFIG_NEEDS_SYSCALL_FOR_CMPXCHG)
+#ifndef CONFIG_MMU
+#warning "NPTL on non MMU needs fixing"
+#else
+       @ Make sure our user space atomic helper is restarted
+       @ if it was interrupted in a critical region.  Here we
+       @ perform a quick test inline since it should be false
+       @ 99.9999% of the time.  The rest is done out of line.
+       cmp     r2, #TASK_SIZE
+       blhs    kuser_cmpxchg_fixup
+#endif
+#endif
+       .endm
+
        .align  5
 __dabt_usr:
        usr_entry
+       kuser_cmpxchg_check
 
        @
        @ Call the processor-specific abort handler:
@@ -404,6 +410,7 @@ __dabt_usr:
        .align  5
 __irq_usr:
        usr_entry
+       kuser_cmpxchg_check
 
 #ifdef CONFIG_TRACE_IRQFLAGS
        bl      trace_hardirqs_off
@@ -446,9 +453,9 @@ __und_usr:
        @
        @  r0 - instruction
        @
-1:     ldrt    r0, [r4]
        adr     r9, ret_from_exception
        adr     lr, __und_usr_unknown
+1:     ldrt    r0, [r4]
        @
        @ fallthrough to call_fpe
        @
@@ -669,7 +676,7 @@ __kuser_helper_start:
  *
  * Clobbered:
  *
- *     the Z flag might be lost
+ *     none
  *
  * Definition and user space usage example:
  *
@@ -730,9 +737,6 @@ __kuser_memory_barrier:                             @ 0xffff0fa0
  *
  *    - This routine already includes memory barriers as needed.
  *
- *    - A failure might be transient, i.e. it is possible, although unlikely,
- *      that "failure" be returned even if *ptr == oldval.
- *
  * For example, a user space atomic_add implementation could look like this:
  *
  * #define atomic_add(ptr, val) \
@@ -769,46 +773,62 @@ __kuser_cmpxchg:                          @ 0xffff0fc0
 
 #elif __LINUX_ARM_ARCH__ < 6
 
+#ifdef CONFIG_MMU
+
        /*
-        * Theory of operation:
-        *
-        * We set the Z flag before loading oldval. If ever an exception
-        * occurs we can not be sure the loaded value will still be the same
-        * when the exception returns, therefore the user exception handler
-        * will clear the Z flag whenever the interrupted user code was
-        * actually from the kernel address space (see the usr_entry macro).
-        *
-        * The post-increment on the str is used to prevent a race with an
-        * exception happening just after the str instruction which would
-        * clear the Z flag although the exchange was done.
+        * The only thing that can break atomicity in this cmpxchg
+        * implementation is either an IRQ or a data abort exception
+        * causing another process/thread to be scheduled in the middle
+        * of the critical sequence.  To prevent this, code is added to
+        * the IRQ and data abort exception handlers to set the pc back
+        * to the beginning of the critical section if it is found to be
+        * within that critical section (see kuser_cmpxchg_fixup).
         */
-#ifdef CONFIG_MMU
-       teq     ip, ip                  @ set Z flag
-       ldr     ip, [r2]                @ load current val
-       add     r3, r2, #1              @ prepare store ptr
-       teqeq   ip, r0                  @ compare with oldval if still allowed
-       streq   r1, [r3, #-1]!          @ store newval if still allowed
-       subs    r0, r2, r3              @ if r2 == r3 the str occured
+1:     ldr     r3, [r2]                        @ load current val
+       subs    r3, r3, r0                      @ compare with oldval
+2:     streq   r1, [r2]                        @ store newval if eq
+       rsbs    r0, r3, #0                      @ set return val and C flag
+       usr_ret lr
+
+       .text
+kuser_cmpxchg_fixup:
+       @ Called from kuser_cmpxchg_check macro.
+       @ r2 = address of interrupted insn (must be preserved).
+       @ sp = saved regs. r7 and r8 are clobbered.
+       @ 1b = first critical insn, 2b = last critical insn.
+       @ If r2 >= 1b and r2 <= 2b then saved pc_usr is set to 1b.
+       mov     r7, #0xffff0fff
+       sub     r7, r7, #(0xffff0fff - (0xffff0fc0 + (1b - __kuser_cmpxchg)))
+       subs    r8, r2, r7
+       rsbcss  r8, r8, #(2b - 1b)
+       strcs   r7, [sp, #S_PC]
+       mov     pc, lr
+       .previous
+
 #else
 #warning "NPTL on non MMU needs fixing"
        mov     r0, #-1
        adds    r0, r0, #0
-#endif
        usr_ret lr
+#endif
 
 #else
 
 #ifdef CONFIG_SMP
        mcr     p15, 0, r0, c7, c10, 5  @ dmb
 #endif
-       ldrex   r3, [r2]
+1:     ldrex   r3, [r2]
        subs    r3, r3, r0
        strexeq r3, r1, [r2]
+       teqeq   r3, #1
+       beq     1b
        rsbs    r0, r3, #0
+       /* beware -- each __kuser slot must be 8 instructions max */
 #ifdef CONFIG_SMP
-       mcr     p15, 0, r0, c7, c10, 5  @ dmb
-#endif
+       b       __kuser_memory_barrier
+#else
        usr_ret lr
+#endif
 
 #endif
 
@@ -829,7 +849,7 @@ __kuser_cmpxchg:                            @ 0xffff0fc0
  *
  * Clobbered:
  *
- *     the Z flag might be lost
+ *     none
  *
  * Definition and user space usage example:
  *
index 4764bd9ccee801ced5838d9043a5923c9e931cb8..c34db4e868fa530c50b0e6baa7123c88eab76ec8 100644 (file)
@@ -327,7 +327,7 @@ asmlinkage void __exception do_undefinstr(struct pt_regs *regs)
                if ((instr & hook->instr_mask) == hook->instr_val &&
                    (regs->ARM_cpsr & hook->cpsr_mask) == hook->cpsr_val) {
                        if (hook->fn(regs, instr) == 0) {
-                               spin_unlock_irq(&undef_lock);
+                               spin_unlock_irqrestore(&undef_lock, flags);
                                return;
                        }
                }
@@ -509,7 +509,7 @@ asmlinkage int arm_syscall(int no, struct pt_regs *regs)
         * existence.  Don't ever use this from user code.
         */
        case 0xfff0:
-       {
+       for (;;) {
                extern void do_DataAbort(unsigned long addr, unsigned int fsr,
                                         struct pt_regs *regs);
                unsigned long val;
@@ -545,7 +545,6 @@ asmlinkage int arm_syscall(int no, struct pt_regs *regs)
                up_read(&mm->mmap_sem);
                /* simulate a write access fault */
                do_DataAbort(addr, 15 + (1 << 11), regs);
-               return -1;
        }
 #endif
 
index 0417c165d50d0a8e732b60b5ad767cddbe757851..9296833f91ccd576c7c5dbbacffbf94cb7a28518 100644 (file)
@@ -14,6 +14,7 @@
 #include <asm/mach/map.h>
 
 #include <linux/platform_device.h>
+#include <linux/i2c-gpio.h>
 
 #include <asm/arch/board.h>
 #include <asm/arch/gpio.h>
@@ -435,7 +436,40 @@ void __init at91_add_device_nand(struct at91_nand_data *data) {}
  *  TWI (i2c)
  * -------------------------------------------------------------------- */
 
-#if defined(CONFIG_I2C_AT91) || defined(CONFIG_I2C_AT91_MODULE)
+/*
+ * Prefer the GPIO code since the TWI controller isn't robust
+ * (gets overruns and underruns under load) and can only issue
+ * repeated STARTs in one scenario (the driver doesn't yet handle them).
+ */
+#if defined(CONFIG_I2C_GPIO) || defined(CONFIG_I2C_GPIO_MODULE)
+
+static struct i2c_gpio_platform_data pdata = {
+       .sda_pin                = AT91_PIN_PA25,
+       .sda_is_open_drain      = 1,
+       .scl_pin                = AT91_PIN_PA26,
+       .scl_is_open_drain      = 1,
+       .udelay                 = 2,            /* ~100 kHz */
+};
+
+static struct platform_device at91rm9200_twi_device = {
+       .name                   = "i2c-gpio",
+       .id                     = -1,
+       .dev.platform_data      = &pdata,
+};
+
+void __init at91_add_device_i2c(struct i2c_board_info *devices, int nr_devices)
+{
+       at91_set_GPIO_periph(AT91_PIN_PA25, 1);         /* TWD (SDA) */
+       at91_set_multi_drive(AT91_PIN_PA25, 1);
+
+       at91_set_GPIO_periph(AT91_PIN_PA26, 1);         /* TWCK (SCL) */
+       at91_set_multi_drive(AT91_PIN_PA26, 1);
+
+       i2c_register_board_info(0, devices, nr_devices);
+       platform_device_register(&at91rm9200_twi_device);
+}
+
+#elif defined(CONFIG_I2C_AT91) || defined(CONFIG_I2C_AT91_MODULE)
 
 static struct resource twi_resources[] = {
        [0] = {
@@ -457,7 +491,7 @@ static struct platform_device at91rm9200_twi_device = {
        .num_resources  = ARRAY_SIZE(twi_resources),
 };
 
-void __init at91_add_device_i2c(void)
+void __init at91_add_device_i2c(struct i2c_board_info *devices, int nr_devices)
 {
        /* pins used for TWI interface */
        at91_set_A_periph(AT91_PIN_PA25, 0);            /* TWD */
@@ -466,10 +500,11 @@ void __init at91_add_device_i2c(void)
        at91_set_A_periph(AT91_PIN_PA26, 0);            /* TWCK */
        at91_set_multi_drive(AT91_PIN_PA26, 1);
 
+       i2c_register_board_info(0, devices, nr_devices);
        platform_device_register(&at91rm9200_twi_device);
 }
 #else
-void __init at91_add_device_i2c(void) {}
+void __init at91_add_device_i2c(struct i2c_board_info *devices, int nr_devices) {}
 #endif
 
 
index ffd3154c1e5404f2a305b4b4e8ece8b739ad8b02..3091bf47d8c96dafb90e694005c3d2f99df7e1df 100644 (file)
@@ -13,6 +13,7 @@
 #include <asm/mach/map.h>
 
 #include <linux/platform_device.h>
+#include <linux/i2c-gpio.h>
 
 #include <asm/arch/board.h>
 #include <asm/arch/gpio.h>
@@ -352,7 +353,41 @@ void __init at91_add_device_nand(struct at91_nand_data *data) {}
  *  TWI (i2c)
  * -------------------------------------------------------------------- */
 
-#if defined(CONFIG_I2C_AT91) || defined(CONFIG_I2C_AT91_MODULE)
+/*
+ * Prefer the GPIO code since the TWI controller isn't robust
+ * (gets overruns and underruns under load) and can only issue
+ * repeated STARTs in one scenario (the driver doesn't yet handle them).
+ */
+
+#if defined(CONFIG_I2C_GPIO) || defined(CONFIG_I2C_GPIO_MODULE)
+
+static struct i2c_gpio_platform_data pdata = {
+       .sda_pin                = AT91_PIN_PA23,
+       .sda_is_open_drain      = 1,
+       .scl_pin                = AT91_PIN_PA24,
+       .scl_is_open_drain      = 1,
+       .udelay                 = 2,            /* ~100 kHz */
+};
+
+static struct platform_device at91sam9260_twi_device = {
+       .name                   = "i2c-gpio",
+       .id                     = -1,
+       .dev.platform_data      = &pdata,
+};
+
+void __init at91_add_device_i2c(struct i2c_board_info *devices, int nr_devices)
+{
+       at91_set_GPIO_periph(AT91_PIN_PA23, 1);         /* TWD (SDA) */
+       at91_set_multi_drive(AT91_PIN_PA23, 1);
+
+       at91_set_GPIO_periph(AT91_PIN_PA24, 1);         /* TWCK (SCL) */
+       at91_set_multi_drive(AT91_PIN_PA24, 1);
+
+       i2c_register_board_info(0, devices, nr_devices);
+       platform_device_register(&at91sam9260_twi_device);
+}
+
+#elif defined(CONFIG_I2C_AT91) || defined(CONFIG_I2C_AT91_MODULE)
 
 static struct resource twi_resources[] = {
        [0] = {
@@ -374,7 +409,7 @@ static struct platform_device at91sam9260_twi_device = {
        .num_resources  = ARRAY_SIZE(twi_resources),
 };
 
-void __init at91_add_device_i2c(void)
+void __init at91_add_device_i2c(struct i2c_board_info *devices, int nr_devices)
 {
        /* pins used for TWI interface */
        at91_set_A_periph(AT91_PIN_PA23, 0);            /* TWD */
@@ -383,10 +418,11 @@ void __init at91_add_device_i2c(void)
        at91_set_A_periph(AT91_PIN_PA24, 0);            /* TWCK */
        at91_set_multi_drive(AT91_PIN_PA24, 1);
 
+       i2c_register_board_info(0, devices, nr_devices);
        platform_device_register(&at91sam9260_twi_device);
 }
 #else
-void __init at91_add_device_i2c(void) {}
+void __init at91_add_device_i2c(struct i2c_board_info *devices, int nr_devices) {}
 #endif
 
 
index 3576595b4941b7ecefcf75b0ab1ec0128f1bc261..64979a9023c2cb4e0a674cbb8cc9303ae0066074 100644 (file)
@@ -14,7 +14,9 @@
 #include <asm/mach/map.h>
 
 #include <linux/platform_device.h>
+#include <linux/i2c-gpio.h>
 
+#include <linux/fb.h>
 #include <video/atmel_lcdc.h>
 
 #include <asm/arch/board.h>
@@ -275,7 +277,40 @@ void __init at91_add_device_nand(struct at91_nand_data *data) {}
  *  TWI (i2c)
  * -------------------------------------------------------------------- */
 
-#if defined(CONFIG_I2C_AT91) || defined(CONFIG_I2C_AT91_MODULE)
+/*
+ * Prefer the GPIO code since the TWI controller isn't robust
+ * (gets overruns and underruns under load) and can only issue
+ * repeated STARTs in one scenario (the driver doesn't yet handle them).
+ */
+#if defined(CONFIG_I2C_GPIO) || defined(CONFIG_I2C_GPIO_MODULE)
+
+static struct i2c_gpio_platform_data pdata = {
+       .sda_pin                = AT91_PIN_PA7,
+       .sda_is_open_drain      = 1,
+       .scl_pin                = AT91_PIN_PA8,
+       .scl_is_open_drain      = 1,
+       .udelay                 = 2,            /* ~100 kHz */
+};
+
+static struct platform_device at91sam9261_twi_device = {
+       .name                   = "i2c-gpio",
+       .id                     = -1,
+       .dev.platform_data      = &pdata,
+};
+
+void __init at91_add_device_i2c(struct i2c_board_info *devices, int nr_devices)
+{
+       at91_set_GPIO_periph(AT91_PIN_PA7, 1);          /* TWD (SDA) */
+       at91_set_multi_drive(AT91_PIN_PA7, 1);
+
+       at91_set_GPIO_periph(AT91_PIN_PA8, 1);          /* TWCK (SCL) */
+       at91_set_multi_drive(AT91_PIN_PA8, 1);
+
+       i2c_register_board_info(0, devices, nr_devices);
+       platform_device_register(&at91sam9261_twi_device);
+}
+
+#elif defined(CONFIG_I2C_AT91) || defined(CONFIG_I2C_AT91_MODULE)
 
 static struct resource twi_resources[] = {
        [0] = {
@@ -297,7 +332,7 @@ static struct platform_device at91sam9261_twi_device = {
        .num_resources  = ARRAY_SIZE(twi_resources),
 };
 
-void __init at91_add_device_i2c(void)
+void __init at91_add_device_i2c(struct i2c_board_info *devices, int nr_devices)
 {
        /* pins used for TWI interface */
        at91_set_A_periph(AT91_PIN_PA7, 0);             /* TWD */
@@ -306,10 +341,11 @@ void __init at91_add_device_i2c(void)
        at91_set_A_periph(AT91_PIN_PA8, 0);             /* TWCK */
        at91_set_multi_drive(AT91_PIN_PA8, 1);
 
+       i2c_register_board_info(0, devices, nr_devices);
        platform_device_register(&at91sam9261_twi_device);
 }
 #else
-void __init at91_add_device_i2c(void) {}
+void __init at91_add_device_i2c(struct i2c_board_info *devices, int nr_devices) {}
 #endif
 
 
index f924bd5017de19ef1efac43b5dc125fdcc65ee13..ac329a98e9596ce1e56e784cab86b0c4f1fdab62 100644 (file)
@@ -13,7 +13,9 @@
 #include <asm/mach/map.h>
 
 #include <linux/platform_device.h>
+#include <linux/i2c-gpio.h>
 
+#include <linux/fb.h>
 #include <video/atmel_lcdc.h>
 
 #include <asm/arch/board.h>
@@ -421,7 +423,40 @@ void __init at91_add_device_nand(struct at91_nand_data *data) {}
  *  TWI (i2c)
  * -------------------------------------------------------------------- */
 
-#if defined(CONFIG_I2C_AT91) || defined(CONFIG_I2C_AT91_MODULE)
+/*
+ * Prefer the GPIO code since the TWI controller isn't robust
+ * (gets overruns and underruns under load) and can only issue
+ * repeated STARTs in one scenario (the driver doesn't yet handle them).
+ */
+#if defined(CONFIG_I2C_GPIO) || defined(CONFIG_I2C_GPIO_MODULE)
+
+static struct i2c_gpio_platform_data pdata = {
+       .sda_pin                = AT91_PIN_PB4,
+       .sda_is_open_drain      = 1,
+       .scl_pin                = AT91_PIN_PB5,
+       .scl_is_open_drain      = 1,
+       .udelay                 = 2,            /* ~100 kHz */
+};
+
+static struct platform_device at91sam9263_twi_device = {
+       .name                   = "i2c-gpio",
+       .id                     = -1,
+       .dev.platform_data      = &pdata,
+};
+
+void __init at91_add_device_i2c(struct i2c_board_info *devices, int nr_devices)
+{
+       at91_set_GPIO_periph(AT91_PIN_PB4, 1);          /* TWD (SDA) */
+       at91_set_multi_drive(AT91_PIN_PB4, 1);
+
+       at91_set_GPIO_periph(AT91_PIN_PB5, 1);          /* TWCK (SCL) */
+       at91_set_multi_drive(AT91_PIN_PB5, 1);
+
+       i2c_register_board_info(0, devices, nr_devices);
+       platform_device_register(&at91sam9263_twi_device);
+}
+
+#elif defined(CONFIG_I2C_AT91) || defined(CONFIG_I2C_AT91_MODULE)
 
 static struct resource twi_resources[] = {
        [0] = {
@@ -443,7 +478,7 @@ static struct platform_device at91sam9263_twi_device = {
        .num_resources  = ARRAY_SIZE(twi_resources),
 };
 
-void __init at91_add_device_i2c(void)
+void __init at91_add_device_i2c(struct i2c_board_info *devices, int nr_devices)
 {
        /* pins used for TWI interface */
        at91_set_A_periph(AT91_PIN_PB4, 0);             /* TWD */
@@ -452,10 +487,11 @@ void __init at91_add_device_i2c(void)
        at91_set_A_periph(AT91_PIN_PB5, 0);             /* TWCK */
        at91_set_multi_drive(AT91_PIN_PB5, 1);
 
+       i2c_register_board_info(0, devices, nr_devices);
        platform_device_register(&at91sam9263_twi_device);
 }
 #else
-void __init at91_add_device_i2c(void) {}
+void __init at91_add_device_i2c(struct i2c_board_info *devices, int nr_devices) {}
 #endif
 
 
index cd7532bcd4e5ea92a74aa2e4c5caec83fe519c04..2bd60a3dc6233cac740694121785f8edac22f81a 100644 (file)
@@ -10,8 +10,9 @@
 #include <asm/mach/map.h>
 
 #include <linux/platform_device.h>
-#include <linux/fb.h>
+#include <linux/i2c-gpio.h>
 
+#include <linux/fb.h>
 #include <video/atmel_lcdc.h>
 
 #include <asm/arch/board.h>
@@ -169,7 +170,40 @@ void __init at91_add_device_nand(struct at91_nand_data *data) {}
  *  TWI (i2c)
  * -------------------------------------------------------------------- */
 
-#if defined(CONFIG_I2C_AT91) || defined(CONFIG_I2C_AT91_MODULE)
+/*
+ * Prefer the GPIO code since the TWI controller isn't robust
+ * (gets overruns and underruns under load) and can only issue
+ * repeated STARTs in one scenario (the driver doesn't yet handle them).
+ */
+#if defined(CONFIG_I2C_GPIO) || defined(CONFIG_I2C_GPIO_MODULE)
+
+static struct i2c_gpio_platform_data pdata = {
+       .sda_pin                = AT91_PIN_PA23,
+       .sda_is_open_drain      = 1,
+       .scl_pin                = AT91_PIN_PA24,
+       .scl_is_open_drain      = 1,
+       .udelay                 = 2,            /* ~100 kHz */
+};
+
+static struct platform_device at91sam9rl_twi_device = {
+       .name                   = "i2c-gpio",
+       .id                     = -1,
+       .dev.platform_data      = &pdata,
+};
+
+void __init at91_add_device_i2c(struct i2c_board_info *devices, int nr_devices)
+{
+       at91_set_GPIO_periph(AT91_PIN_PA23, 1);         /* TWD (SDA) */
+       at91_set_multi_drive(AT91_PIN_PA23, 1);
+
+       at91_set_GPIO_periph(AT91_PIN_PA24, 1);         /* TWCK (SCL) */
+       at91_set_multi_drive(AT91_PIN_PA24, 1);
+
+       i2c_register_board_info(0, devices, nr_devices);
+       platform_device_register(&at91sam9rl_twi_device);
+}
+
+#elif defined(CONFIG_I2C_AT91) || defined(CONFIG_I2C_AT91_MODULE)
 
 static struct resource twi_resources[] = {
        [0] = {
@@ -191,7 +225,7 @@ static struct platform_device at91sam9rl_twi_device = {
        .num_resources  = ARRAY_SIZE(twi_resources),
 };
 
-void __init at91_add_device_i2c(void)
+void __init at91_add_device_i2c(struct i2c_board_info *devices, int nr_devices)
 {
        /* pins used for TWI interface */
        at91_set_A_periph(AT91_PIN_PA23, 0);            /* TWD */
@@ -200,10 +234,11 @@ void __init at91_add_device_i2c(void)
        at91_set_A_periph(AT91_PIN_PA24, 0);            /* TWCK */
        at91_set_multi_drive(AT91_PIN_PA24, 1);
 
+       i2c_register_board_info(0, devices, nr_devices);
        platform_device_register(&at91sam9rl_twi_device);
 }
 #else
-void __init at91_add_device_i2c(void) {}
+void __init at91_add_device_i2c(struct i2c_board_info *devices, int nr_devices) {}
 #endif
 
 
index 76ec856cd4f9fb0ee8ad54f1a54eba769172804d..0f0878294a67c660a8bb2e3b291f5c85212cd3f6 100644 (file)
@@ -128,7 +128,7 @@ static void __init carmeva_board_init(void)
        /* USB Device */
        at91_add_device_udc(&carmeva_udc_data);
        /* I2C */
-       at91_add_device_i2c();
+       at91_add_device_i2c(NULL, 0);
        /* SPI */
        at91_add_device_spi(carmeva_spi_devices, ARRAY_SIZE(carmeva_spi_devices));
        /* Compact Flash */
index dde089922e3bda6afaad9efed6335d38efe7c172..d0aa20c9383e355da4e313e35fd533cb49269263 100644 (file)
@@ -23,7 +23,6 @@
 #include <linux/mm.h>
 #include <linux/module.h>
 #include <linux/platform_device.h>
-#include <linux/i2c.h>
 #include <linux/spi/spi.h>
 #include <linux/mtd/physmap.h>
 
@@ -85,12 +84,12 @@ static struct at91_udc_data __initdata csb337_udc_data = {
 };
 
 static struct i2c_board_info __initdata csb337_i2c_devices[] = {
-       { I2C_BOARD_INFO("rtc-ds1307", 0x68),
-         .type = "ds1307",
+       {
+               I2C_BOARD_INFO("rtc-ds1307", 0x68),
+               .type   = "ds1307",
        },
 };
 
-
 static struct at91_cf_data __initdata csb337_cf_data = {
        /*
         * connector P4 on the CSB 337 mates to
@@ -168,9 +167,7 @@ static void __init csb337_board_init(void)
        /* USB Device */
        at91_add_device_udc(&csb337_udc_data);
        /* I2C */
-       at91_add_device_i2c();
-       i2c_register_board_info(0, csb337_i2c_devices,
-                       ARRAY_SIZE(csb337_i2c_devices));
+       at91_add_device_i2c(csb337_i2c_devices, ARRAY_SIZE(csb337_i2c_devices));
        /* Compact Flash */
        at91_set_gpio_input(AT91_PIN_PB22, 1);          /* IOIS16 */
        at91_add_device_cf(&csb337_cf_data);
index 77f04b935b3ab9753110ab15678acdca7a402718..c5c721d27f429291d2f86efb925f2fa1e1dd07be 100644 (file)
@@ -129,7 +129,7 @@ static void __init csb637_board_init(void)
        /* USB Device */
        at91_add_device_udc(&csb637_udc_data);
        /* I2C */
-       at91_add_device_i2c();
+       at91_add_device_i2c(NULL, 0);
        /* SPI */
        at91_add_device_spi(NULL, 0);
        /* NOR flash */
index af497896a96ce761dcb6a45281a7148e1c7e3bd6..40c9e4331706b0a32cac592603bfba036ccefa88 100644 (file)
@@ -124,6 +124,19 @@ static struct spi_board_info dk_spi_devices[] = {
 #endif
 };
 
+static struct i2c_board_info __initdata dk_i2c_devices[] = {
+       {
+               I2C_BOARD_INFO("ics1523", 0x26),
+       },
+       {
+               I2C_BOARD_INFO("x9429", 0x28),
+       },
+       {
+               I2C_BOARD_INFO("at24c", 0x50),
+               .type   = "24c1024",
+       }
+};
+
 static struct mtd_partition __initdata dk_nand_partition[] = {
        {
                .name   = "NAND Partition 1",
@@ -185,7 +198,7 @@ static void __init dk_board_init(void)
        /* Compact Flash */
        at91_add_device_cf(&dk_cf_data);
        /* I2C */
-       at91_add_device_i2c();
+       at91_add_device_i2c(dk_i2c_devices, ARRAY_SIZE(dk_i2c_devices));
        /* SPI */
        at91_add_device_spi(dk_spi_devices, ARRAY_SIZE(dk_spi_devices));
 #ifdef CONFIG_MTD_AT91_DATAFLASH_CARD
index 20458b5548f0669708eeab4f64baf2ceec1301d7..b7b79bb9d6c4b09bd464225adb1e15a415ff16d8 100644 (file)
@@ -91,6 +91,14 @@ static struct at91_mmc_data __initdata eb9200_mmc_data = {
        .wire4          = 1,
 };
 
+static struct i2c_board_info __initdata eb9200_i2c_devices[] = {
+       {
+               I2C_BOARD_INFO("at24c", 0x50),
+               .type   = "24c512",
+       },
+};
+
+
 static void __init eb9200_board_init(void)
 {
        /* Serial */
@@ -102,7 +110,7 @@ static void __init eb9200_board_init(void)
        /* USB Device */
        at91_add_device_udc(&eb9200_udc_data);
        /* I2C */
-       at91_add_device_i2c();
+       at91_add_device_i2c(eb9200_i2c_devices, ARRAY_SIZE(eb9200_i2c_devices));
        /* Compact Flash */
        at91_add_device_cf(&eb9200_cf_data);
        /* SPI */
index 322fdd75a1e431863729b478988cef8d7d8e708d..d05b1b2be9fbe34fd70a0c2912a8372f999f13bc 100644 (file)
@@ -145,7 +145,7 @@ static void __init ek_board_init(void)
        at91_add_device_udc(&ek_udc_data);
        at91_set_multi_drive(ek_udc_data.pullup_pin, 1);        /* pullup_pin is connected to reset */
        /* I2C */
-       at91_add_device_i2c();
+       at91_add_device_i2c(ek_i2c_devices, ARRAY_SIZE(ek_i2c_devices));
        /* SPI */
        at91_add_device_spi(ek_spi_devices, ARRAY_SIZE(ek_spi_devices));
 #ifdef CONFIG_MTD_AT91_DATAFLASH_CARD
index c77d84ce9cae89878b81f68648f49619fab768d6..cf1b7b2f76fbe180a3f8a9537ac4c58c728c798c 100644 (file)
@@ -92,7 +92,7 @@ static void __init kafa_board_init(void)
        /* USB Device */
        at91_add_device_udc(&kafa_udc_data);
        /* I2C */
-       at91_add_device_i2c();
+       at91_add_device_i2c(NULL, 0);
        /* SPI */
        at91_add_device_spi(NULL, 0);
 }
index 7d9b1a278fd63feb961e3ff21466952bae530dd2..4b39b9cda75b48e84b9f49bae5c4f302efa27480 100644 (file)
@@ -124,7 +124,7 @@ static void __init kb9202_board_init(void)
        /* MMC */
        at91_add_device_mmc(0, &kb9202_mmc_data);
        /* I2C */
-       at91_add_device_i2c();
+       at91_add_device_i2c(NULL, 0);
        /* SPI */
        at91_add_device_spi(NULL, 0);
        /* NAND */
index 49cfe7ab4a85652206bf8b4ac6f21b88f16166fb..6acb55c09ae5d384c5e28b9483d0193bbdabe7a1 100644 (file)
@@ -139,7 +139,7 @@ static void __init picotux200_board_init(void)
        // at91_add_device_udc(&picotux200_udc_data);
        // at91_set_multi_drive(picotux200_udc_data.pullup_pin, 1);     /* pullup_pin is connected to reset */
        /* I2C */
-       at91_add_device_i2c();
+       at91_add_device_i2c(NULL, 0);
        /* SPI */
        // at91_add_device_spi(picotux200_spi_devices, ARRAY_SIZE(picotux200_spi_devices));
 #ifdef CONFIG_MTD_AT91_DATAFLASH_CARD
index 65fa532bb4acd134e0945affbe336d33187f7a40..b343a6c28120b2824597d11ab8754a2a699107da 100644 (file)
@@ -189,7 +189,7 @@ static void __init ek_board_init(void)
        /* MMC */
        at91_add_device_mmc(0, &ek_mmc_data);
        /* I2C */
-       at91_add_device_i2c();
+       at91_add_device_i2c(NULL, 0);
 }
 
 MACHINE_START(AT91SAM9260EK, "Atmel AT91SAM9260-EK")
index 42e172cb0f49bfe2d0e40d9382d574234f712f3e..550ae59a3aca89524def4fdf310d9ce015c848a7 100644 (file)
@@ -382,14 +382,14 @@ static struct platform_device ek_button_device = {
 
 static void __init ek_add_device_buttons(void)
 {
-       at91_set_gpio_input(AT91_PIN_PB27, 0);  /* btn0 */
-       at91_set_deglitch(AT91_PIN_PB27, 1);
-       at91_set_gpio_input(AT91_PIN_PB26, 0);  /* btn1 */
-       at91_set_deglitch(AT91_PIN_PB26, 1);
-       at91_set_gpio_input(AT91_PIN_PB25, 0);  /* btn2 */
-       at91_set_deglitch(AT91_PIN_PB25, 1);
-       at91_set_gpio_input(AT91_PIN_PB24, 0);  /* btn3 */
-       at91_set_deglitch(AT91_PIN_PB24, 1);
+       at91_set_gpio_input(AT91_PIN_PA27, 0);  /* btn0 */
+       at91_set_deglitch(AT91_PIN_PA27, 1);
+       at91_set_gpio_input(AT91_PIN_PA26, 0);  /* btn1 */
+       at91_set_deglitch(AT91_PIN_PA26, 1);
+       at91_set_gpio_input(AT91_PIN_PA25, 0);  /* btn2 */
+       at91_set_deglitch(AT91_PIN_PA25, 1);
+       at91_set_gpio_input(AT91_PIN_PA24, 0);  /* btn3 */
+       at91_set_deglitch(AT91_PIN_PA24, 1);
 
        platform_device_register(&ek_button_device);
 }
@@ -406,7 +406,7 @@ static void __init ek_board_init(void)
        /* USB Device */
        at91_add_device_udc(&ek_udc_data);
        /* I2C */
-       at91_add_device_i2c();
+       at91_add_device_i2c(NULL, 0);
        /* NAND */
        at91_add_device_nand(&ek_nand_data);
        /* DM9000 ethernet */
index 2a1cc73390b79cd88943d7718c3fd3454d3c65fa..ab9dcc0754541f5f952e934c439e525beebf6b7a 100644 (file)
@@ -291,7 +291,7 @@ static void __init ek_board_init(void)
        /* NAND */
        at91_add_device_nand(&ek_nand_data);
        /* I2C */
-       at91_add_device_i2c();
+       at91_add_device_i2c(NULL, 0);
        /* LCD Controller */
        at91_add_device_lcdc(&ek_lcdc_data);
        /* AC97 */
index 9b61320f295aca158355be2ad7ead7596a2cb385..bc0546d7245f7b7df7f125ee4545335cbc1a0586 100644 (file)
@@ -181,7 +181,7 @@ static void __init ek_board_init(void)
        /* Serial */
        at91_add_device_serial();
        /* I2C */
-       at91_add_device_i2c();
+       at91_add_device_i2c(NULL, 0);
        /* NAND */
        at91_add_device_nand(&ek_nand_data);
        /* SPI */
index 848efb2a4ebfbc14cc7bf9426dadc04ca5c194e1..57c3b647ce834f06a790f04f48d18b11e7fd5d65 100644 (file)
@@ -351,7 +351,7 @@ static void init_programmable_clock(struct clk *clk)
        pckr = at91_sys_read(AT91_PMC_PCKR(clk->id));
        parent = at91_css_to_clk(pckr & AT91_PMC_CSS);
        clk->parent = parent;
-       clk->rate_hz = parent->rate_hz / (1 << ((pckr >> 2) & 3));
+       clk->rate_hz = parent->rate_hz / (1 << ((pckr & AT91_PMC_PRES) >> 2));
 }
 
 #endif /* CONFIG_AT91_PROGRAMMABLE_CLOCKS */
@@ -587,8 +587,11 @@ int __init at91_clock_init(unsigned long main_clock)
        mckr = at91_sys_read(AT91_PMC_MCKR);
        mck.parent = at91_css_to_clk(mckr & AT91_PMC_CSS);
        freq = mck.parent->rate_hz;
-       freq /= (1 << ((mckr >> 2) & 3));               /* prescale */
-       mck.rate_hz = freq / (1 + ((mckr >> 8) & 3));   /* mdiv */
+       freq /= (1 << ((mckr & AT91_PMC_PRES) >> 2));                           /* prescale */
+       if (cpu_is_at91rm9200())
+               mck.rate_hz = freq / (1 + ((mckr & AT91_PMC_MDIV) >> 8));       /* mdiv */
+       else
+               mck.rate_hz = freq / (1 << ((mckr & AT91_PMC_MDIV) >> 8));      /* mdiv */
 
        /* Register the PMC's standard clocks */
        for (i = 0; i < ARRAY_SIZE(standard_pmc_clocks); i++)
index 0791b56caeccf827b8405426f23506b9327fce25..a7465db8489373a54bc785a4d0a72a809698c327 100644 (file)
  *
  */
 
-#define INTENNUM_OFF              0x8
-#define INTDISNUM_OFF             0xC
+#define INTCNTL_OFF               0x00
+#define NIMASK_OFF                0x04
+#define INTENNUM_OFF              0x08
+#define INTDISNUM_OFF             0x0C
+#define INTENABLEH_OFF            0x10
+#define INTENABLEL_OFF            0x14
+#define INTTYPEH_OFF              0x18
+#define INTTYPEL_OFF              0x1C
+#define NIPRIORITY_OFF(x)         (0x20+4*(7-(x)))
+#define NIVECSR_OFF               0x40
+#define FIVECSR_OFF               0x44
+#define INTSRCH_OFF               0x48
+#define INTSRCL_OFF               0x4C
+#define INTFRCH_OFF               0x50
+#define INTFRCL_OFF               0x54
+#define NIPNDH_OFF                0x58
+#define NIPNDL_OFF                0x5C
+#define FIPNDH_OFF                0x60
+#define FIPNDL_OFF                0x64
 
 #define VA_AITC_BASE              IO_ADDRESS(IMX_AITC_BASE)
-#define IMX_AITC_INTDISNUM       (VA_AITC_BASE + INTDISNUM_OFF)
+#define IMX_AITC_INTCNTL         (VA_AITC_BASE + INTCNTL_OFF)
+#define IMX_AITC_NIMASK          (VA_AITC_BASE + NIMASK_OFF)
 #define IMX_AITC_INTENNUM        (VA_AITC_BASE + INTENNUM_OFF)
+#define IMX_AITC_INTDISNUM       (VA_AITC_BASE + INTDISNUM_OFF)
+#define IMX_AITC_INTENABLEH      (VA_AITC_BASE + INTENABLEH_OFF)
+#define IMX_AITC_INTENABLEL      (VA_AITC_BASE + INTENABLEL_OFF)
+#define IMX_AITC_INTTYPEH        (VA_AITC_BASE + INTTYPEH_OFF)
+#define IMX_AITC_INTTYPEL        (VA_AITC_BASE + INTTYPEL_OFF)
+#define IMX_AITC_NIPRIORITY(x)   (VA_AITC_BASE + NIPRIORITY_OFF(x))
+#define IMX_AITC_NIVECSR         (VA_AITC_BASE + NIVECSR_OFF)
+#define IMX_AITC_FIVECSR         (VA_AITC_BASE + FIVECSR_OFF)
+#define IMX_AITC_INTSRCH         (VA_AITC_BASE + INTSRCH_OFF)
+#define IMX_AITC_INTSRCL         (VA_AITC_BASE + INTSRCL_OFF)
+#define IMX_AITC_INTFRCH         (VA_AITC_BASE + INTFRCH_OFF)
+#define IMX_AITC_INTFRCL         (VA_AITC_BASE + INTFRCL_OFF)
+#define IMX_AITC_NIPNDH          (VA_AITC_BASE + NIPNDH_OFF)
+#define IMX_AITC_NIPNDL          (VA_AITC_BASE + NIPNDL_OFF)
+#define IMX_AITC_FIPNDH          (VA_AITC_BASE + FIPNDH_OFF)
+#define IMX_AITC_FIPNDL          (VA_AITC_BASE + FIPNDL_OFF)
 
 #if 0
 #define DEBUG_IRQ(fmt...)      printk(fmt)
@@ -222,7 +256,12 @@ imx_init_irq(void)
 
        DEBUG_IRQ("Initializing imx interrupts\n");
 
-       /* Mask all interrupts initially */
+       /* Disable all interrupts initially. */
+       /* Do not rely on the bootloader. */
+       __raw_writel(0, IMX_AITC_INTENABLEH);
+       __raw_writel(0, IMX_AITC_INTENABLEL);
+
+       /* Mask all GPIO interrupts as well */
        IMR(0) = 0;
        IMR(1) = 0;
        IMR(2) = 0;
@@ -245,6 +284,6 @@ imx_init_irq(void)
        set_irq_chained_handler(GPIO_INT_PORTC, imx_gpioc_demux_handler);
        set_irq_chained_handler(GPIO_INT_PORTD, imx_gpiod_demux_handler);
 
-       /* Disable all interrupts initially. */
-       /* In IMX this is done in the bootloader. */
+       /* Release masking of interrupts according to priority */
+       __raw_writel(-1, IMX_AITC_NIMASK);
 }
index d0f2b597db12541ae15514dcf86d8e8d479e8490..8e126e6b74c31be9e7f34cad14334ae70363dd7b 100644 (file)
@@ -146,7 +146,7 @@ static struct clk pxa27x_clks[] = {
        INIT_CKEN("MMCCLK",  MMC,  19500000, 0, &pxa_device_mci.dev),
        INIT_CKEN("FICPCLK", FICP, 48000000, 0, &pxa_device_ficp.dev),
 
-       INIT_CKEN("USBCLK", USB,    48000000, 0, &pxa27x_device_ohci.dev),
+       INIT_CKEN("USBCLK", USBHOST, 48000000, 0, &pxa27x_device_ohci.dev),
        INIT_CKEN("I2CCLK", PWRI2C, 13000000, 0, &pxa27x_device_i2c_power.dev),
        INIT_CKEN("KBDCLK", KEYPAD, 32768, 0, NULL),
 
index 1010f77d977a480ea8295aa359277ae9e44f0a4d..74128eb8f8d0dd5983585c89203e45410e53cfbc 100644 (file)
 static struct pxa3xx_mfp_addr_map pxa320_mfp_addr_map[] __initdata = {
 
        MFP_ADDR_X(GPIO0,  GPIO4,   0x0124),
-       MFP_ADDR_X(GPIO5,  GPIO26,  0x028C),
-       MFP_ADDR_X(GPIO27, GPIO62,  0x0400),
+       MFP_ADDR_X(GPIO5,  GPIO9,   0x028C),
+       MFP_ADDR(GPIO10, 0x0458),
+       MFP_ADDR_X(GPIO11, GPIO26,  0x02A0),
+       MFP_ADDR_X(GPIO27, GPIO48,  0x0400),
+       MFP_ADDR_X(GPIO49, GPIO62,  0x045C),
        MFP_ADDR_X(GPIO63, GPIO73,  0x04B4),
        MFP_ADDR_X(GPIO74, GPIO98,  0x04F0),
        MFP_ADDR_X(GPIO99, GPIO127, 0x0600),
index 71766ac0328b1378f23afde4a656143fd4ba4d2e..422afee88169414dbd5cb74f57f481b7cbc240e5 100644 (file)
@@ -309,6 +309,7 @@ void ssp_exit(struct ssp_dev *dev)
 
        if (dev->port > PXA_SSP_PORTS || dev->port == 0) {
                printk(KERN_WARNING "SSP: tried to close invalid port\n");
+               mutex_unlock(&mutex);
                return;
        }
 
index 4f402c92450496342bd0ea4a92bd2c09b4478b68..b77abce10c7aa895689f6210944d0d5b780bba83 100644 (file)
@@ -6,8 +6,7 @@
 mainmenu "Linux Kernel Configuration"
 
 config AVR32
-       bool
-       default y
+       def_bool y
        # With EMBEDDED=n, we get lots of stuff automatically selected
        # that we usually don't need on AVR32.
        select EMBEDDED
@@ -20,51 +19,49 @@ config AVR32
          http://avr32linux.org/.
 
 config GENERIC_GPIO
-       bool
-       default y
+       def_bool y
 
 config GENERIC_HARDIRQS
-       bool
-       default y
+       def_bool y
+
+config STACKTRACE_SUPPORT
+       def_bool y
+
+config LOCKDEP_SUPPORT
+       def_bool y
+
+config TRACE_IRQFLAGS_SUPPORT
+       def_bool y
 
 config HARDIRQS_SW_RESEND
-       bool
-       default y
+       def_bool y
 
 config GENERIC_IRQ_PROBE
-       bool
-       default y
+       def_bool y
 
 config RWSEM_GENERIC_SPINLOCK
-       bool
-       default y
+       def_bool y
 
 config GENERIC_TIME
-       bool
-       default y
+       def_bool y
 
 config RWSEM_XCHGADD_ALGORITHM
-       bool
+       def_bool n
 
 config ARCH_HAS_ILOG2_U32
-       bool
-       default n
+       def_bool n
 
 config ARCH_HAS_ILOG2_U64
-       bool
-       default n
+       def_bool n
 
 config GENERIC_HWEIGHT
-       bool
-       default y
+       def_bool y
 
 config GENERIC_CALIBRATE_DELAY
-       bool
-       default y
+       def_bool y
 
 config GENERIC_BUG
-       bool
-       default y
+       def_bool y
        depends on BUG
 
 source "init/Kconfig"
@@ -139,28 +136,22 @@ config PHYS_OFFSET
 source "kernel/Kconfig.preempt"
 
 config HAVE_ARCH_BOOTMEM_NODE
-       bool
-       default n
+       def_bool n
 
 config ARCH_HAVE_MEMORY_PRESENT
-       bool
-       default n
+       def_bool n
 
 config NEED_NODE_MEMMAP_SIZE
-       bool
-       default n
+       def_bool n
 
 config ARCH_FLATMEM_ENABLE
-       bool
-       default y
+       def_bool y
 
 config ARCH_DISCONTIGMEM_ENABLE
-       bool
-       default n
+       def_bool n
 
 config ARCH_SPARSEMEM_ENABLE
-       bool
-       default n
+       def_bool n
 
 source "mm/Kconfig"
 
index 989fcd1fef7ed4fd048096b88b18c98d366d1237..2d6d48f35f69bb24d3666b8a3f796505587ab483 100644 (file)
@@ -11,3 +11,4 @@ obj-y                         += signal.o sys_avr32.o process.o time.o
 obj-y                          += init_task.o switch_to.o cpu.o
 obj-$(CONFIG_MODULES)          += module.o avr32_ksyms.o
 obj-$(CONFIG_KPROBES)          += kprobes.o
+obj-$(CONFIG_STACKTRACE)       += stacktrace.o
index 97d8658656678dfa981d8e3edd68c550eea9bc3f..078cd33f467be29256d3d81f39da48c9df6fb510 100644 (file)
@@ -21,5 +21,7 @@ void foo(void)
        OFFSET(TI_flags, thread_info, flags);
        OFFSET(TI_cpu, thread_info, cpu);
        OFFSET(TI_preempt_count, thread_info, preempt_count);
+       OFFSET(TI_rar_saved, thread_info, rar_saved);
+       OFFSET(TI_rsr_saved, thread_info, rsr_saved);
        OFFSET(TI_restart_block, thread_info, restart_block);
 }
index ccadfd9b438da8a86517b135da8c9a90d24b955d..8cf16d7a70409b1994990030cdef47612775a9b0 100644 (file)
@@ -264,16 +264,7 @@ syscall_exit_work:
 
 3:     bld     r1, TIF_BREAKPOINT
        brcc    syscall_exit_cont
-       mfsr    r3, SYSREG_TLBEHI
-       lddsp   r2, sp[REG_PC]
-       andl    r3, 0xff, COH
-       lsl     r3, 1
-       sbr     r3, 30
-       sbr     r3, 0
-       mtdr    DBGREG_BWA2A, r2
-       mtdr    DBGREG_BWC2A, r3
-       rjmp    syscall_exit_cont
-
+       rjmp    enter_monitor_mode
 
        /* The slow path of the TLB miss handler */
 page_table_not_present:
@@ -288,11 +279,16 @@ page_not_present:
        rjmp    ret_from_exception
 
        /* This function expects to find offending PC in SYSREG_RAR_EX */
+       .type   save_full_context_ex, @function
+       .align  2
 save_full_context_ex:
+       mfsr    r11, SYSREG_RAR_EX
+       sub     r9, pc, . - debug_trampoline
        mfsr    r8, SYSREG_RSR_EX
+       cp.w    r9, r11
+       breq    3f
        mov     r12, r8
        andh    r8, (MODE_MASK >> 16), COH
-       mfsr    r11, SYSREG_RAR_EX
        brne    2f
 
 1:     pushm   r11, r12        /* PC and SR */
@@ -303,10 +299,25 @@ save_full_context_ex:
        stdsp   sp[4], r10      /* replace saved SP */
        rjmp    1b
 
+       /*
+        * The debug handler set up a trampoline to make us
+        * automatically enter monitor mode upon return, but since
+        * we're saving the full context, we must assume that the
+        * exception handler might want to alter the return address
+        * and/or status register. So we need to restore the original
+        * context and enter monitor mode manually after the exception
+        * has been handled.
+        */
+3:     get_thread_info r8
+       ld.w    r11, r8[TI_rar_saved]
+       ld.w    r12, r8[TI_rsr_saved]
+       rjmp    1b
+       .size   save_full_context_ex, . - save_full_context_ex
+
        /* Low-level exception handlers */
 handle_critical:
-       pushm   r12
-       pushm   r0-r12
+       sub     sp, 4
+       stmts   --sp, r0-lr
        rcall   save_full_context_ex
        mfsr    r12, SYSREG_ECR
        mov     r11, sp
@@ -439,6 +450,7 @@ do_fpe_ll:
 ret_from_exception:
        mask_interrupts
        lddsp   r4, sp[REG_SR]
+
        andh    r4, (MODE_MASK >> 16), COH
        brne    fault_resume_kernel
 
@@ -515,119 +527,124 @@ fault_exit_work:
 
 2:     bld     r1, TIF_BREAKPOINT
        brcc    fault_resume_user
-       mfsr    r3, SYSREG_TLBEHI
-       lddsp   r2, sp[REG_PC]
-       andl    r3, 0xff, COH
-       lsl     r3, 1
-       sbr     r3, 30
-       sbr     r3, 0
-       mtdr    DBGREG_BWA2A, r2
-       mtdr    DBGREG_BWC2A, r3
-       rjmp    fault_resume_user
-
-       /* If we get a debug trap from privileged context we end up here */
-handle_debug_priv:
-       /* Fix up LR and SP in regs. r11 contains the mode we came from */
+       rjmp    enter_monitor_mode
+
+       .section .kprobes.text, "ax", @progbits
+       .type   handle_debug, @function
+handle_debug:
+       sub     sp, 4           /* r12_orig */
+       stmts   --sp, r0-lr
+       mfsr    r8, SYSREG_RAR_DBG
+       mfsr    r9, SYSREG_RSR_DBG
+       unmask_exceptions
+       pushm   r8-r9
+       bfextu  r9, r9, SYSREG_MODE_OFFSET, SYSREG_MODE_SIZE
+       brne    debug_fixup_regs
+
+.Ldebug_fixup_cont:
+#ifdef CONFIG_TRACE_IRQFLAGS
+       rcall   trace_hardirqs_off
+#endif
+       mov     r12, sp
+       rcall   do_debug
+       mov     sp, r12
+
+       lddsp   r2, sp[REG_SR]
+       bfextu  r3, r2, SYSREG_MODE_OFFSET, SYSREG_MODE_SIZE
+       brne    debug_resume_kernel
+
+       get_thread_info r0
+       ld.w    r1, r0[TI_flags]
+       mov     r2, _TIF_DBGWORK_MASK
+       tst     r1, r2
+       brne    debug_exit_work
+
+       bld     r1, TIF_SINGLE_STEP
+       brcc    1f
+       mfdr    r4, OCD_DC
+       sbr     r4, OCD_DC_SS_BIT
+       mtdr    OCD_DC, r4
+
+1:     popm    r10,r11
+       mask_exceptions
+       mtsr    SYSREG_RSR_DBG, r11
+       mtsr    SYSREG_RAR_DBG, r10
+#ifdef CONFIG_TRACE_IRQFLAGS
+       rcall   trace_hardirqs_on
+1:
+#endif
+       ldmts   sp++, r0-lr
+       sub     sp, -4
+       retd
+       .size   handle_debug, . - handle_debug
+
+       /* Mode of the trapped context is in r9 */
+       .type   debug_fixup_regs, @function
+debug_fixup_regs:
        mfsr    r8, SYSREG_SR
-       mov     r9, r8
-       andh    r8, hi(~MODE_MASK)
-       or      r8, r11
+       mov     r10, r8
+       bfins   r8, r9, SYSREG_MODE_OFFSET, SYSREG_MODE_SIZE
        mtsr    SYSREG_SR, r8
        sub     pc, -2
        stdsp   sp[REG_LR], lr
-       mtsr    SYSREG_SR, r9
+       mtsr    SYSREG_SR, r10
        sub     pc, -2
-       sub     r10, sp, -FRAME_SIZE_FULL
-       stdsp   sp[REG_SP], r10
-       mov     r12, sp
-       rcall   do_debug_priv
+       sub     r8, sp, -FRAME_SIZE_FULL
+       stdsp   sp[REG_SP], r8
+       rjmp    .Ldebug_fixup_cont
+       .size   debug_fixup_regs, . - debug_fixup_regs
 
-       /* Now, put everything back */
-       ssrf    SR_EM_BIT
+       .type   debug_resume_kernel, @function
+debug_resume_kernel:
+       mask_exceptions
        popm    r10, r11
        mtsr    SYSREG_RAR_DBG, r10
        mtsr    SYSREG_RSR_DBG, r11
-       mfsr    r8, SYSREG_SR
-       mov     r9, r8
-       andh    r8, hi(~MODE_MASK)
-       andh    r11, hi(MODE_MASK)
-       or      r8, r11
-       mtsr    SYSREG_SR, r8
+#ifdef CONFIG_TRACE_IRQFLAGS
+       bld     r11, SYSREG_GM_OFFSET
+       brcc    1f
+       rcall   trace_hardirqs_on
+1:
+#endif
+       mfsr    r2, SYSREG_SR
+       mov     r1, r2
+       bfins   r2, r3, SYSREG_MODE_OFFSET, SYSREG_MODE_SIZE
+       mtsr    SYSREG_SR, r2
        sub     pc, -2
        popm    lr
-       mtsr    SYSREG_SR, r9
+       mtsr    SYSREG_SR, r1
        sub     pc, -2
        sub     sp, -4          /* skip SP */
        popm    r0-r12
        sub     sp, -4
        retd
+       .size   debug_resume_kernel, . - debug_resume_kernel
 
+       .type   debug_exit_work, @function
+debug_exit_work:
        /*
-        * At this point, everything is masked, that is, interrupts,
-        * exceptions and debugging traps. We might get called from
-        * interrupt or exception context in some rare cases, but this
-        * will be taken care of by do_debug(), so we're not going to
-        * do a 100% correct context save here.
+        * We must return from Monitor Mode using a retd, and we must
+        * not schedule since that involves the D bit in SR getting
+        * cleared by something other than the debug hardware. This
+        * may cause undefined behaviour according to the Architecture
+        * manual.
+        *
+        * So we fix up the return address and status and return to a
+        * stub below in Exception mode. From there, we can follow the
+        * normal exception return path.
+        *
+        * The real return address and status registers are stored on
+        * the stack in the way the exception return path understands,
+        * so no need to fix anything up there.
         */
-handle_debug:
-       sub     sp, 4           /* r12_orig */
-       stmts   --sp, r0-lr
-       mfsr    r10, SYSREG_RAR_DBG
-       mfsr    r11, SYSREG_RSR_DBG
-       unmask_exceptions
-       pushm   r10,r11
-       andh    r11, (MODE_MASK >> 16), COH
-       brne    handle_debug_priv
-
-       mov     r12, sp
-       rcall   do_debug
-
-       lddsp   r10, sp[REG_SR]
-       andh    r10, (MODE_MASK >> 16), COH
-       breq    debug_resume_user
-
-debug_restore_all:
-       popm    r10,r11
-       mask_exceptions
-       mtsr    SYSREG_RSR_DBG, r11
-       mtsr    SYSREG_RAR_DBG, r10
-       ldmts   sp++, r0-lr
-       sub     sp, -4
+       sub     r8, pc, . - fault_exit_work
+       mtsr    SYSREG_RAR_DBG, r8
+       mov     r9, 0
+       orh     r9, hi(SR_EM | SR_GM | MODE_EXCEPTION)
+       mtsr    SYSREG_RSR_DBG, r9
+       sub     pc, -2
        retd
-
-debug_resume_user:
-       get_thread_info r0
-       mask_interrupts
-
-       ld.w    r1, r0[TI_flags]
-       andl    r1, _TIF_DBGWORK_MASK, COH
-       breq    debug_restore_all
-
-1:     bld     r1, TIF_NEED_RESCHED
-       brcc    2f
-       unmask_interrupts
-       rcall   schedule
-       mask_interrupts
-       ld.w    r1, r0[TI_flags]
-       rjmp    1b
-
-2:     mov     r2, _TIF_SIGPENDING | _TIF_RESTORE_SIGMASK
-       tst     r1, r2
-       breq    3f
-       unmask_interrupts
-       mov     r12, sp
-       mov     r11, r0
-       rcall   do_notify_resume
-       mask_interrupts
-       ld.w    r1, r0[TI_flags]
-       rjmp    1b
-
-3:     bld     r1, TIF_SINGLE_STEP
-       brcc    debug_restore_all
-       mfdr    r2, DBGREG_DC
-       sbr     r2, DC_SS_BIT
-       mtdr    DBGREG_DC, r2
-       rjmp    debug_restore_all
+       .size   debug_exit_work, . - debug_exit_work
 
        .set    rsr_int0,       SYSREG_RSR_INT0
        .set    rsr_int1,       SYSREG_RSR_INT1
@@ -675,7 +692,11 @@ irq_level\level:
        andl    r1, _TIF_WORK_MASK, COH
        brne    irq_exit_work
 
-1:     popm    r8-r9
+1:
+#ifdef CONFIG_TRACE_IRQFLAGS
+       rcall   trace_hardirqs_on
+#endif
+       popm    r8-r9
        mtsr    rar_int\level, r8
        mtsr    rsr_int\level, r9
        ldmts   sp++,r0-lr
@@ -748,3 +769,53 @@ cpu_idle_enable_int_and_exit:
        IRQ_LEVEL 1
        IRQ_LEVEL 2
        IRQ_LEVEL 3
+
+       .section .kprobes.text, "ax", @progbits
+       .type   enter_monitor_mode, @function
+enter_monitor_mode:
+       /*
+        * We need to enter monitor mode to do a single step. The
+        * monitor code will alter the return address so that we
+        * return directly to the user instead of returning here.
+        */
+       breakpoint
+       rjmp    breakpoint_failed
+
+       .size   enter_monitor_mode, . - enter_monitor_mode
+
+       .type   debug_trampoline, @function
+       .global debug_trampoline
+debug_trampoline:
+       /*
+        * Save the registers on the stack so that the monitor code
+        * can find them easily.
+        */
+       sub     sp, 4           /* r12_orig */
+       stmts   --sp, r0-lr
+       get_thread_info r0
+       ld.w    r8, r0[TI_rar_saved]
+       ld.w    r9, r0[TI_rsr_saved]
+       pushm   r8-r9
+
+       /*
+        * The monitor code will alter the return address so we don't
+        * return here.
+        */
+       breakpoint
+       rjmp    breakpoint_failed
+       .size   debug_trampoline, . - debug_trampoline
+
+       .type breakpoint_failed, @function
+breakpoint_failed:
+       /*
+        * Something went wrong. Perhaps the debug hardware isn't
+        * enabled?
+        */
+       lda.w   r12, msg_breakpoint_failed
+       mov     r11, sp
+       mov     r10, 9          /* SIGKILL */
+       call    die
+1:     rjmp    1b
+
+msg_breakpoint_failed:
+       .asciz  "Failed to enter Debug Mode"
index 20b1c9d8f945e1e68e994286728476f548d82bf2..799ba89b07a88a0f5a6d044324a65bfef1d686b0 100644 (file)
@@ -70,9 +70,9 @@ static void __kprobes prepare_singlestep(struct kprobe *p, struct pt_regs *regs)
 
        BUG_ON(!(sysreg_read(SR) & SYSREG_BIT(SR_D)));
 
-       dc = __mfdr(DBGREG_DC);
-       dc |= DC_SS;
-       __mtdr(DBGREG_DC, dc);
+       dc = ocd_read(DC);
+       dc |= 1 << OCD_DC_SS_BIT;
+       ocd_write(DC, dc);
 
        /*
         * We must run the instruction from its original location
@@ -91,9 +91,9 @@ static void __kprobes resume_execution(struct kprobe *p, struct pt_regs *regs)
 
        pr_debug("resuming execution at PC=%08lx\n", regs->pc);
 
-       dc = __mfdr(DBGREG_DC);
-       dc &= ~DC_SS;
-       __mtdr(DBGREG_DC, dc);
+       dc = ocd_read(DC);
+       dc &= ~(1 << OCD_DC_SS_BIT);
+       ocd_write(DC, dc);
 
        *p->addr = BREAKPOINT_INSTRUCTION;
        flush_icache_range((unsigned long)p->addr,
@@ -261,7 +261,7 @@ int __kprobes longjmp_break_handler(struct kprobe *p, struct pt_regs *regs)
 int __init arch_init_kprobes(void)
 {
        printk("KPROBES: Enabling monitor mode (MM|DBE)...\n");
-       __mtdr(DBGREG_DC, DC_MM | DC_DBE);
+       ocd_write(DC, (1 << OCD_DC_MM_BIT) | (1 << OCD_DC_DBE_BIT));
 
        /* TODO: Register kretprobe trampoline */
        return 0;
index 13f988402613a038133f0e84289565210382600a..9d6dac8af7a2600d569d9c1669b9860594ae57e6 100644 (file)
@@ -55,8 +55,8 @@ void machine_power_off(void)
 
 void machine_restart(char *cmd)
 {
-       __mtdr(DBGREG_DC, DC_DBE);
-       __mtdr(DBGREG_DC, DC_RES);
+       ocd_write(DC, (1 << OCD_DC_DBE_BIT));
+       ocd_write(DC, (1 << OCD_DC_RES_BIT));
        while (1) ;
 }
 
@@ -287,10 +287,11 @@ void show_regs_log_lvl(struct pt_regs *regs, const char *log_lvl)
               regs->sr & SR_N ? 'N' : 'n',
               regs->sr & SR_Z ? 'Z' : 'z',
               regs->sr & SR_C ? 'C' : 'c');
-       printk("%sMode bits: %c%c%c%c%c%c%c%c%c\n", log_lvl,
+       printk("%sMode bits: %c%c%c%c%c%c%c%c%c%c\n", log_lvl,
               regs->sr & SR_H ? 'H' : 'h',
-              regs->sr & SR_R ? 'R' : 'r',
               regs->sr & SR_J ? 'J' : 'j',
+              regs->sr & SR_DM ? 'M' : 'm',
+              regs->sr & SR_D ? 'D' : 'd',
               regs->sr & SR_EM ? 'E' : 'e',
               regs->sr & SR_I3M ? '3' : '.',
               regs->sr & SR_I2M ? '2' : '.',
index 9e16b8a447f206ff81bec212e69055dac79c3718..002369e4409335f0515035f8d3b824d33e7edf74 100644 (file)
@@ -30,20 +30,22 @@ static struct pt_regs *get_user_regs(struct task_struct *tsk)
 
 static void ptrace_single_step(struct task_struct *tsk)
 {
-       pr_debug("ptrace_single_step: pid=%u, SR=0x%08lx\n",
-                tsk->pid, tsk->thread.cpu_context.sr);
-       if (!(tsk->thread.cpu_context.sr & SR_D)) {
-               /*
-                * Set a breakpoint at the current pc to force the
-                * process into debug mode.  The syscall/exception
-                * exit code will set a breakpoint at the return
-                * address when this flag is set.
-                */
-               pr_debug("ptrace_single_step: Setting TIF_BREAKPOINT\n");
-               set_tsk_thread_flag(tsk, TIF_BREAKPOINT);
-       }
+       pr_debug("ptrace_single_step: pid=%u, PC=0x%08lx, SR=0x%08lx\n",
+                tsk->pid, task_pt_regs(tsk)->pc, task_pt_regs(tsk)->sr);
 
-       /* The monitor code will do the actual step for us */
+       /*
+        * We can't schedule in Debug mode, so when TIF_BREAKPOINT is
+        * set, the system call or exception handler will do a
+        * breakpoint to enter monitor mode before returning to
+        * userspace.
+        *
+        * The monitor code will then notice that TIF_SINGLE_STEP is
+        * set and return to userspace with single stepping enabled.
+        * The CPU will then enter monitor mode again after exactly
+        * one instruction has been executed, and the monitor code
+        * will then send a SIGTRAP to the process.
+        */
+       set_tsk_thread_flag(tsk, TIF_BREAKPOINT);
        set_tsk_thread_flag(tsk, TIF_SINGLE_STEP);
 }
 
@@ -55,23 +57,7 @@ static void ptrace_single_step(struct task_struct *tsk)
 void ptrace_disable(struct task_struct *child)
 {
        clear_tsk_thread_flag(child, TIF_SINGLE_STEP);
-}
-
-/*
- * Handle hitting a breakpoint
- */
-static void ptrace_break(struct task_struct *tsk, struct pt_regs *regs)
-{
-       siginfo_t info;
-
-       info.si_signo = SIGTRAP;
-       info.si_errno = 0;
-       info.si_code  = TRAP_BRKPT;
-       info.si_addr  = (void __user *)instruction_pointer(regs);
-
-       pr_debug("ptrace_break: Sending SIGTRAP to PID %u (pc = 0x%p)\n",
-                tsk->pid, info.si_addr);
-       force_sig_info(SIGTRAP, &info, tsk);
+       clear_tsk_thread_flag(child, TIF_BREAKPOINT);
 }
 
 /*
@@ -84,9 +70,6 @@ static int ptrace_read_user(struct task_struct *tsk, unsigned long offset,
        unsigned long *regs;
        unsigned long value;
 
-       pr_debug("ptrace_read_user(%p, %#lx, %p)\n",
-                tsk, offset, data);
-
        if (offset & 3 || offset >= sizeof(struct user)) {
                printk("ptrace_read_user: invalid offset 0x%08lx\n", offset);
                return -EIO;
@@ -98,6 +81,9 @@ static int ptrace_read_user(struct task_struct *tsk, unsigned long offset,
        if (offset < sizeof(struct pt_regs))
                value = regs[offset / sizeof(regs[0])];
 
+       pr_debug("ptrace_read_user(%s[%u], %#lx, %p) -> %#lx\n",
+                tsk->comm, tsk->pid, offset, data, value);
+
        return put_user(value, data);
 }
 
@@ -111,8 +97,11 @@ static int ptrace_write_user(struct task_struct *tsk, unsigned long offset,
 {
        unsigned long *regs;
 
+       pr_debug("ptrace_write_user(%s[%u], %#lx, %#lx)\n",
+                       tsk->comm, tsk->pid, offset, value);
+
        if (offset & 3 || offset >= sizeof(struct user)) {
-               printk("ptrace_write_user: invalid offset 0x%08lx\n", offset);
+               pr_debug("  invalid offset 0x%08lx\n", offset);
                return -EIO;
        }
 
@@ -155,11 +144,9 @@ long arch_ptrace(struct task_struct *child, long request, long addr, long data)
 {
        int ret;
 
-       pr_debug("arch_ptrace(%ld, %d, %#lx, %#lx)\n",
-                request, child->pid, addr, data);
-
        pr_debug("ptrace: Enabling monitor mode...\n");
-       __mtdr(DBGREG_DC, __mfdr(DBGREG_DC) | DC_MM | DC_DBE);
+       ocd_write(DC, ocd_read(DC) | (1 << OCD_DC_MM_BIT)
+                       | (1 << OCD_DC_DBE_BIT));
 
        switch (request) {
        /* Read the word at location addr in the child process */
@@ -240,19 +227,16 @@ long arch_ptrace(struct task_struct *child, long request, long addr, long data)
                break;
        }
 
-       pr_debug("sys_ptrace returning %d (DC = 0x%08lx)\n", ret, __mfdr(DBGREG_DC));
        return ret;
 }
 
 asmlinkage void syscall_trace(void)
 {
-       pr_debug("syscall_trace called\n");
        if (!test_thread_flag(TIF_SYSCALL_TRACE))
                return;
        if (!(current->ptrace & PT_PTRACED))
                return;
 
-       pr_debug("syscall_trace: notifying parent\n");
        /* The 0x80 provides a way for the tracing parent to
         * distinguish between a syscall stop and SIGTRAP delivery */
        ptrace_notify(SIGTRAP | ((current->ptrace & PT_TRACESYSGOOD)
@@ -271,86 +255,143 @@ asmlinkage void syscall_trace(void)
        }
 }
 
-asmlinkage void do_debug_priv(struct pt_regs *regs)
-{
-       unsigned long dc, ds;
-       unsigned long die_val;
-
-       ds = __mfdr(DBGREG_DS);
-
-       pr_debug("do_debug_priv: pc = %08lx, ds = %08lx\n", regs->pc, ds);
-
-       if (ds & DS_SSS)
-               die_val = DIE_SSTEP;
-       else
-               die_val = DIE_BREAKPOINT;
-
-       if (notify_die(die_val, "ptrace", regs, 0, 0, SIGTRAP) == NOTIFY_STOP)
-               return;
-
-       if (likely(ds & DS_SSS)) {
-               extern void itlb_miss(void);
-               extern void tlb_miss_common(void);
-               struct thread_info *ti;
-
-               dc = __mfdr(DBGREG_DC);
-               dc &= ~DC_SS;
-               __mtdr(DBGREG_DC, dc);
-
-               ti = current_thread_info();
-               set_ti_thread_flag(ti, TIF_BREAKPOINT);
-
-               /* The TLB miss handlers don't check thread flags */
-               if ((regs->pc >= (unsigned long)&itlb_miss)
-                   && (regs->pc <= (unsigned long)&tlb_miss_common)) {
-                       __mtdr(DBGREG_BWA2A, sysreg_read(RAR_EX));
-                       __mtdr(DBGREG_BWC2A, 0x40000001 | (get_asid() << 1));
-               }
-
-               /*
-                * If we're running in supervisor mode, the breakpoint
-                * will take us where we want directly, no need to
-                * single step.
-                */
-               if ((regs->sr & MODE_MASK) != MODE_SUPERVISOR)
-                       set_ti_thread_flag(ti, TIF_SINGLE_STEP);
-       } else {
-               panic("Unable to handle debug trap at pc = %08lx\n",
-                     regs->pc);
-       }
-}
-
 /*
- * Handle breakpoints, single steps and other debuggy things. To keep
- * things simple initially, we run with interrupts and exceptions
- * disabled all the time.
+ * debug_trampoline() is an assembly stub which will store all user
+ * registers on the stack and execute a breakpoint instruction.
+ *
+ * If we single-step into an exception handler which runs with
+ * interrupts disabled the whole time so it doesn't have to check for
+ * pending work, its return address will be modified so that it ends
+ * up returning to debug_trampoline.
+ *
+ * If the exception handler decides to store the user context and
+ * enable interrupts after all, it will restore the original return
+ * address and status register value. Before it returns, it will
+ * notice that TIF_BREAKPOINT is set and execute a breakpoint
+ * instruction.
  */
-asmlinkage void do_debug(struct pt_regs *regs)
-{
-       unsigned long dc, ds;
+extern void debug_trampoline(void);
 
-       ds = __mfdr(DBGREG_DS);
-       pr_debug("do_debug: pc = %08lx, ds = %08lx\n", regs->pc, ds);
+asmlinkage struct pt_regs *do_debug(struct pt_regs *regs)
+{
+       struct thread_info      *ti;
+       unsigned long           trampoline_addr;
+       u32                     status;
+       u32                     ctrl;
+       int                     code;
+
+       status = ocd_read(DS);
+       ti = current_thread_info();
+       code = TRAP_BRKPT;
+
+       pr_debug("do_debug: status=0x%08x PC=0x%08lx SR=0x%08lx tif=0x%08lx\n",
+                       status, regs->pc, regs->sr, ti->flags);
+
+       if (!user_mode(regs)) {
+               unsigned long   die_val = DIE_BREAKPOINT;
+
+               if (status & (1 << OCD_DS_SSS_BIT))
+                       die_val = DIE_SSTEP;
+
+               if (notify_die(die_val, "ptrace", regs, 0, 0, SIGTRAP)
+                               == NOTIFY_STOP)
+                       return regs;
+
+               if ((status & (1 << OCD_DS_SWB_BIT))
+                               && test_and_clear_ti_thread_flag(
+                                       ti, TIF_BREAKPOINT)) {
+                       /*
+                        * Explicit breakpoint from trampoline or
+                        * exception/syscall/interrupt handler.
+                        *
+                        * The real saved regs are on the stack right
+                        * after the ones we saved on entry.
+                        */
+                       regs++;
+                       pr_debug("  -> TIF_BREAKPOINT done, adjusted regs:"
+                                       "PC=0x%08lx SR=0x%08lx\n",
+                                       regs->pc, regs->sr);
+                       BUG_ON(!user_mode(regs));
+
+                       if (test_thread_flag(TIF_SINGLE_STEP)) {
+                               pr_debug("Going to do single step...\n");
+                               return regs;
+                       }
+
+                       /*
+                        * No TIF_SINGLE_STEP means we're done
+                        * stepping over a syscall. Do the trap now.
+                        */
+                       code = TRAP_TRACE;
+               } else if ((status & (1 << OCD_DS_SSS_BIT))
+                               && test_ti_thread_flag(ti, TIF_SINGLE_STEP)) {
+
+                       pr_debug("Stepped into something, "
+                                       "setting TIF_BREAKPOINT...\n");
+                       set_ti_thread_flag(ti, TIF_BREAKPOINT);
+
+                       /*
+                        * We stepped into an exception, interrupt or
+                        * syscall handler. Some exception handlers
+                        * don't check for pending work, so we need to
+                        * set up a trampoline just in case.
+                        *
+                        * The exception entry code will undo the
+                        * trampoline stuff if it does a full context
+                        * save (which also means that it'll check for
+                        * pending work later.)
+                        */
+                       if ((regs->sr & MODE_MASK) == MODE_EXCEPTION) {
+                               trampoline_addr
+                                       = (unsigned long)&debug_trampoline;
+
+                               pr_debug("Setting up trampoline...\n");
+                               ti->rar_saved = sysreg_read(RAR_EX);
+                               ti->rsr_saved = sysreg_read(RSR_EX);
+                               sysreg_write(RAR_EX, trampoline_addr);
+                               sysreg_write(RSR_EX, (MODE_EXCEPTION
+                                                       | SR_EM | SR_GM));
+                               BUG_ON(ti->rsr_saved & MODE_MASK);
+                       }
+
+                       /*
+                        * If we stepped into a system call, we
+                        * shouldn't do a single step after we return
+                        * since the return address is right after the
+                        * "scall" instruction we were told to step
+                        * over.
+                        */
+                       if ((regs->sr & MODE_MASK) == MODE_SUPERVISOR) {
+                               pr_debug("Supervisor; no single step\n");
+                               clear_ti_thread_flag(ti, TIF_SINGLE_STEP);
+                       }
+
+                       ctrl = ocd_read(DC);
+                       ctrl &= ~(1 << OCD_DC_SS_BIT);
+                       ocd_write(DC, ctrl);
+
+                       return regs;
+               } else {
+                       printk(KERN_ERR "Unexpected OCD_DS value: 0x%08x\n",
+                                       status);
+                       printk(KERN_ERR "Thread flags: 0x%08lx\n", ti->flags);
+                       die("Unhandled debug trap in kernel mode",
+                                       regs, SIGTRAP);
+               }
+       } else if (status & (1 << OCD_DS_SSS_BIT)) {
+               /* Single step in user mode */
+               code = TRAP_TRACE;
 
-       if (test_thread_flag(TIF_BREAKPOINT)) {
-               pr_debug("TIF_BREAKPOINT set\n");
-               /* We're taking care of it */
-               clear_thread_flag(TIF_BREAKPOINT);
-               __mtdr(DBGREG_BWC2A, 0);
+               ctrl = ocd_read(DC);
+               ctrl &= ~(1 << OCD_DC_SS_BIT);
+               ocd_write(DC, ctrl);
        }
 
-       if (test_thread_flag(TIF_SINGLE_STEP)) {
-               pr_debug("TIF_SINGLE_STEP set, ds = 0x%08lx\n", ds);
-               if (ds & DS_SSS) {
-                       dc = __mfdr(DBGREG_DC);
-                       dc &= ~DC_SS;
-                       __mtdr(DBGREG_DC, dc);
+       pr_debug("Sending SIGTRAP: code=%d PC=0x%08lx SR=0x%08lx\n",
+                       code, regs->pc, regs->sr);
 
-                       clear_thread_flag(TIF_SINGLE_STEP);
-                       ptrace_break(current, regs);
-               }
-       } else {
-               /* regular breakpoint */
-               ptrace_break(current, regs);
-       }
+       clear_thread_flag(TIF_SINGLE_STEP);
+       _exception(SIGTRAP, regs, code, instruction_pointer(regs));
+
+       return regs;
 }
diff --git a/arch/avr32/kernel/stacktrace.c b/arch/avr32/kernel/stacktrace.c
new file mode 100644 (file)
index 0000000..9a68190
--- /dev/null
@@ -0,0 +1,53 @@
+/*
+ * Stack trace management functions
+ *
+ * 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/sched.h>
+#include <linux/stacktrace.h>
+#include <linux/thread_info.h>
+
+register unsigned long current_frame_pointer asm("r7");
+
+struct stackframe {
+       unsigned long lr;
+       unsigned long fp;
+};
+
+/*
+ * Save stack-backtrace addresses into a stack_trace buffer.
+ */
+void save_stack_trace(struct stack_trace *trace)
+{
+       unsigned long low, high;
+       unsigned long fp;
+       struct stackframe *frame;
+       int skip = trace->skip;
+
+       low = (unsigned long)task_stack_page(current);
+       high = low + THREAD_SIZE;
+       fp = current_frame_pointer;
+
+       while (fp >= low && fp <= (high - 8)) {
+               frame = (struct stackframe *)fp;
+
+               if (skip) {
+                       skip--;
+               } else {
+                       trace->entries[trace->nr_entries++] = frame->lr;
+                       if (trace->nr_entries >= trace->max_entries)
+                               break;
+               }
+
+               /*
+                * The next frame must be at a higher address than the
+                * current frame.
+                */
+               low = fp + 8;
+               fp = frame->fp;
+       }
+}
index 8a7caf8e7b454da39a915426a1d7ea363faf361f..870c075e631479685f0af15a488ca68cecf3b877 100644 (file)
@@ -39,7 +39,7 @@ void NORET_TYPE die(const char *str, struct pt_regs *regs, long err)
        printk("FRAME_POINTER ");
 #endif
        if (current_cpu_data.features & AVR32_FEATURE_OCD) {
-               unsigned long did = __mfdr(DBGREG_DID);
+               unsigned long did = ocd_read(DID);
                printk("chip: 0x%03lx:0x%04lx rev %lu\n",
                       (did >> 1) & 0x7ff,
                       (did >> 12) & 0x7fff,
index ce9ac9659883d0336cbbe0e796f660e1e97173a2..11f08e35a2eb36df6ee235549a0f9779f3120f91 100644 (file)
@@ -77,10 +77,10 @@ SECTIONS
                . = 0x100;
                *(.scall.text)
                *(.irq.text)
+               KPROBES_TEXT
                TEXT_TEXT
                SCHED_TEXT
                LOCK_TEXT
-               KPROBES_TEXT
                *(.fixup)
                *(.gnu.warning)
                _etext = .;
index c1233c615e679ddc6ff382c4eb93e2e119973de4..15a4e5e142c161aeae51f61187f5f370c0e130e1 100644 (file)
@@ -122,16 +122,6 @@ void flush_icache_page(struct vm_area_struct *vma, struct page *page)
        }
 }
 
-/*
- * This one is used by copy_to_user_page()
- */
-void flush_icache_user_range(struct vm_area_struct *vma, struct page *page,
-                            unsigned long addr, int len)
-{
-       if (vma->vm_flags & VM_EXEC)
-               flush_icache_range(addr, addr + len);
-}
-
 asmlinkage int sys_cacheflush(int operation, void __user *addr, size_t len)
 {
        int ret;
@@ -159,3 +149,13 @@ asmlinkage int sys_cacheflush(int operation, void __user *addr, size_t len)
 out:
        return ret;
 }
+
+void copy_to_user_page(struct vm_area_struct *vma, struct page *page,
+               unsigned long vaddr, void *dst, const void *src,
+               unsigned long len)
+{
+       memcpy(dst, src, len);
+       if (vma->vm_flags & VM_EXEC)
+               flush_icache_range((unsigned long)dst,
+                               (unsigned long)dst + len);
+}
index 9f9de3e95826031eaaf08ba79ab5170bc59ce7c7..2a3a7ea5958c004085e034bd5c9091a87ea751b3 100644 (file)
@@ -3,7 +3,7 @@
 # see Documentation/kbuild/kconfig-language.txt.
 #
 
-mainmenu "uClinux/Blackfin (w/o MMU) Kernel Configuration"
+mainmenu "Blackfin Kernel Configuration"
 
 config MMU
        bool
@@ -29,10 +29,6 @@ config ZONE_DMA
        bool
        default y
 
-config BFIN
-       bool
-       default y
-
 config SEMAPHORE_SLEEPERS
        bool
        default y
@@ -50,7 +46,7 @@ config GENERIC_HARDIRQS
        default y
 
 config GENERIC_IRQ_PROBE
-        bool
+       bool
        default y
 
 config GENERIC_TIME
@@ -69,11 +65,6 @@ config GENERIC_CALIBRATE_DELAY
        bool
        default y
 
-config IRQCHIP_DEMUX_GPIO
-       bool
-       depends on (BF52x || BF53x || BF561 || BF54x)
-       default y
-
 source "init/Kconfig"
 source "kernel/Kconfig.preempt"
 
@@ -140,6 +131,11 @@ config BF544
        help
          BF544 Processor Support.
 
+config BF547
+       bool "BF547"
+       help
+         BF547 Processor Support.
+
 config BF548
        bool "BF548"
        help
@@ -166,11 +162,11 @@ choice
 
 config BF_REV_0_0
        bool "0.0"
-       depends on (BF549 || BF527)
+       depends on (BF52x || BF54x)
 
 config BF_REV_0_1
-       bool "0.2"
-       depends on (BF549 || BF527)
+       bool "0.1"
+       depends on (BF52x || BF54x)
 
 config BF_REV_0_2
        bool "0.2"
@@ -208,7 +204,7 @@ config BF53x
 
 config BF54x
        bool
-       depends on (BF542 || BF544 || BF548 || BF549)
+       depends on (BF542 || BF544 || BF547 || BF548 || BF549)
        default y
 
 config BFIN_DUAL_CORE
@@ -221,95 +217,6 @@ config BFIN_SINGLE_CORE
        depends on !BFIN_DUAL_CORE
        default y
 
-choice
-       prompt "System type"
-       default BFIN533_STAMP
-       help
-         Do NOT change the board here.  Please use the top level
-         configuration to ensure that all the other settings are
-         correct.
-
-config BFIN527_EZKIT
-       bool "BF527-EZKIT"
-       depends on (BF522 || BF525 || BF527)
-       help
-         BF533-EZKIT-LITE board Support.
-
-config BFIN533_EZKIT
-       bool "BF533-EZKIT"
-       depends on (BF533 || BF532 || BF531)
-       help
-         BF533-EZKIT-LITE board Support.
-
-config  BFIN533_STAMP
-       bool "BF533-STAMP"
-       depends on (BF533 || BF532 || BF531)
-       help
-         BF533-STAMP board Support.
-
-config BFIN537_STAMP
-       bool "BF537-STAMP"
-       depends on (BF537 || BF536 || BF534)
-       help
-         BF537-STAMP board Support.
-
-config BFIN533_BLUETECHNIX_CM
-       bool "Bluetechnix CM-BF533"
-       depends on (BF533)
-       help
-         CM-BF533 support for EVAL- and DEV-Board.
-
-config BFIN537_BLUETECHNIX_CM
-       bool "Bluetechnix CM-BF537"
-       depends on (BF537)
-       help
-         CM-BF537 support for EVAL- and DEV-Board.
-
-config BFIN548_EZKIT
-       bool "BF548-EZKIT"
-       depends on (BF548 || BF549)
-         help
-         BFIN548-EZKIT board Support.
-
-config BFIN561_BLUETECHNIX_CM
-       bool "Bluetechnix CM-BF561"
-       depends on (BF561)
-       help
-         CM-BF561 support for EVAL- and DEV-Board.
-
-config BFIN561_EZKIT
-       bool "BF561-EZKIT"
-       depends on (BF561)
-       help
-         BF561-EZKIT-LITE board Support.
-
-config BFIN561_TEPLA
-       bool "BF561-TEPLA"
-       depends on (BF561)
-       help
-        BF561-TEPLA board Support.
-
-config PNAV10
-       bool "PNAV 1.0 board"
-       depends on (BF537)
-       help
-         PNAV 1.0 board Support.
-
-config H8606_HVSISTEMAS
-        bool "HV Sistemas H8606"
-        depends on (BF532)
-        help
-          HV Sistemas H8606 board support.
-
-config GENERIC_BOARD
-       bool "Custom"
-       depends on (BF537 || BF536 \
-               || BF534 || BF561 || BF535 || BF533 || BF532 || BF531)
-       help
-         GENERIC or Custom board Support.
-
-endchoice
-
 config MEM_GENERIC_BOARD
        bool
        depends on GENERIC_BOARD
@@ -389,9 +296,9 @@ config BFIN_KERNEL_CLOCK
          configuration.
 
 config PLL_BYPASS
-        bool "Bypass PLL"
-        depends on BFIN_KERNEL_CLOCK
-        default n
+       bool "Bypass PLL"
+       depends on BFIN_KERNEL_CLOCK
+       default n
 
 config CLKIN_HALF
        bool "Half Clock In"
@@ -468,11 +375,11 @@ config MAX_VCO_HZ
        default 500000000 if BF534
        default 400000000 if BF536
        default 600000000 if BF537
-       default 533000000 if BF538
-       default 533000000 if BF539
+       default 533333333 if BF538
+       default 533333333 if BF539
        default 600000000 if BF542
-       default 533000000 if BF544
-       default 533000000 if BF549
+       default 533333333 if BF544
+       default 533333333 if BF549
        default 600000000 if BF561
 
 config MIN_VCO_HZ
@@ -481,7 +388,7 @@ config MIN_VCO_HZ
 
 config MAX_SCLK_HZ
        int
-       default 133000000
+       default 133333333
 
 config MIN_SCLK_HZ
        int
@@ -959,6 +866,20 @@ config BANK_3
        default 0x99B3
 endmenu
 
+config EBIU_MBSCTLVAL
+       hex "EBIU Bank Select Control Register"
+       depends on BF54x
+       default 0
+
+config EBIU_MODEVAL
+       hex "Flash Memory Mode Control Register"
+       depends on BF54x
+       default 1
+
+config EBIU_FCTLVAL
+       hex "Flash Memory Bank Control Register"
+       depends on BF54x
+       default 6
 endmenu
 
 #############################################################################
@@ -1075,174 +996,7 @@ source "fs/Kconfig"
 
 source "kernel/Kconfig.instrumentation"
 
-menu "Kernel hacking"
-
-source "lib/Kconfig.debug"
-
-config DEBUG_HWERR
-       bool "Hardware error interrupt debugging"
-       depends on DEBUG_KERNEL
-       help
-         When enabled, the hardware error interrupt is never disabled, and
-         will happen immediately when an error condition occurs.  This comes
-         at a slight cost in code size, but is necessary if you are getting
-         hardware error interrupts and need to know where they are coming
-         from.
-
-config DEBUG_ICACHE_CHECK
-       bool "Check Instruction cache coherency"
-       depends on DEBUG_KERNEL
-       depends on DEBUG_HWERR
-       help
-         Say Y here if you are getting weird unexplained errors. This will
-         ensure that icache is what SDRAM says it should be by doing a
-         byte wise comparison between SDRAM and instruction cache. This
-         also relocates the irq_panic() function to L1 memory, (which is
-         un-cached).
-
-config DEBUG_HUNT_FOR_ZERO
-       bool "Catch NULL pointer reads/writes"
-       default y
-       help
-         Say Y here to catch reads/writes to anywhere in the memory range
-         from 0x0000 - 0x0FFF (the first 4k) of memory.  This is useful in
-         catching common programming errors such as NULL pointer dereferences.
-
-         Misbehaving applications will be killed (generate a SEGV) while the
-         kernel will trigger a panic.
-
-         Enabling this option will take up an extra entry in CPLB table.
-         Otherwise, there is no extra overhead.
-
-config DEBUG_BFIN_HWTRACE_ON
-       bool "Turn on Blackfin's Hardware Trace"
-       default y
-       help
-         All Blackfins include a Trace Unit which stores a history of the last
-         16 changes in program flow taken by the program sequencer. The history
-         allows the user to recreate the program sequencer’s recent path. This
-         can be handy when an application dies - we print out the execution
-         path of how it got to the offending instruction.
-
-         By turning this off, you may save a tiny amount of power.
-
-choice
-       prompt "Omit loop Tracing"
-       default DEBUG_BFIN_HWTRACE_COMPRESSION_OFF
-       depends on DEBUG_BFIN_HWTRACE_ON
-       help
-         The trace buffer can be configured to omit recording of changes in
-         program flow that match either the last entry or one of the last
-         two entries. Omitting one of these entries from the record prevents
-         the trace buffer from overflowing because of any sort of loop (for, do
-         while, etc) in the program.
-
-         Because zero-overhead Hardware loops are not recorded in the trace buffer,
-         this feature can be used to prevent trace overflow from loops that
-         are nested four deep.
-
-config DEBUG_BFIN_HWTRACE_COMPRESSION_OFF
-       bool "Trace all Loops"
-       help
-         The trace buffer records all changes of flow 
-
-config DEBUG_BFIN_HWTRACE_COMPRESSION_ONE
-       bool "Compress single-level loops"
-       help
-         The trace buffer does not record single loops - helpful if trace 
-         is spinning on a while or do loop.
-
-config DEBUG_BFIN_HWTRACE_COMPRESSION_TWO
-       bool "Compress two-level loops"
-       help
-         The trace buffer does not record loops two levels deep. Helpful if
-         the trace is spinning in a nested loop
-
-endchoice
-
-config DEBUG_BFIN_HWTRACE_COMPRESSION
-       int
-       depends on DEBUG_BFIN_HWTRACE_ON
-       default 0 if DEBUG_BFIN_HWTRACE_COMPRESSION_OFF
-       default 1 if DEBUG_BFIN_HWTRACE_COMPRESSION_ONE
-       default 2 if DEBUG_BFIN_HWTRACE_COMPRESSION_TWO
-
-
-config DEBUG_BFIN_HWTRACE_EXPAND
-       bool "Expand Trace Buffer greater than 16 entries"
-       depends on DEBUG_BFIN_HWTRACE_ON
-       default n
-       help
-         By selecting this option, every time the 16 hardware entries in
-         the Blackfin's HW Trace buffer are full, the kernel will move them
-         into a software buffer, for dumping when there is an issue. This 
-         has a great impact on performance, (an interrupt every 16 change of 
-         flows) and should normally be turned off, except in those nasty
-         debugging sessions
-
-config DEBUG_BFIN_HWTRACE_EXPAND_LEN
-       int "Size of Trace buffer (in power of 2k)"
-       range 0 4
-       depends on DEBUG_BFIN_HWTRACE_EXPAND
-       default 1
-       help
-         This sets the size of the software buffer that the trace information
-         is kept in.
-         0 for (2^0)  1k, or 256 entries,
-         1 for (2^1)  2k, or 512 entries,
-         2 for (2^2)  4k, or 1024 entries,
-         3 for (2^3)  8k, or 2048 entries,
-         4 for (2^4) 16k, or 4096 entries
-
-config DEBUG_BFIN_NO_KERN_HWTRACE
-       bool "Trace user apps (turn off hwtrace in kernel)"
-       depends on DEBUG_BFIN_HWTRACE_ON
-       default n
-       help
-         Some pieces of the kernel contain a lot of flow changes which can
-         quickly fill up the hardware trace buffer.  When debugging crashes,
-         the hardware trace may indicate that the problem lies in kernel
-         space when in reality an application is buggy.
-
-         Say Y here to disable hardware tracing in some known "jumpy" pieces
-         of code so that the trace buffer will extend further back.
-
-config EARLY_PRINTK
-       bool "Early printk" 
-       default n
-       help
-         This option enables special console drivers which allow the kernel
-         to print messages very early in the bootup process.
-
-         This is useful for kernel debugging when your machine crashes very
-         early before the console code is initialized. After enabling this
-         feature, you must add "earlyprintk=serial,uart0,57600" to the
-         command line (bootargs). It is safe to say Y here in all cases, as
-         all of this lives in the init section and is thrown away after the
-         kernel boots completely.
-
-config DUAL_CORE_TEST_MODULE
-       tristate "Dual Core Test Module"
-       depends on (BF561)
-       default n
-       help
-         Say Y here to build-in dual core test module for dual core test.
-
-config CPLB_INFO
-       bool "Display the CPLB information"
-       help
-         Display the CPLB information.
-
-config ACCESS_CHECK
-       bool "Check the user pointer address"
-       default y
-       help
-         Usually the pointer transfer from user space is checked to see if its
-         address is in the kernel space.
-
-         Say N here to disable that check to improve the performance.
-
-endmenu
+source "arch/blackfin/Kconfig.debug"
 
 source "security/Kconfig"
 
diff --git a/arch/blackfin/Kconfig.debug b/arch/blackfin/Kconfig.debug
new file mode 100644 (file)
index 0000000..59b87a4
--- /dev/null
@@ -0,0 +1,178 @@
+menu "Kernel hacking"
+
+source "lib/Kconfig.debug"
+
+config DEBUG_MMRS
+       bool "Generate Blackfin MMR tree"
+       select DEBUG_FS
+       help
+         Create a tree of Blackfin MMRs via the debugfs tree.  If
+         you enable this, you will find all MMRs laid out in the
+         /sys/kernel/debug/blackfin/ directory where you can read/write
+         MMRs directly from userspace.  This is obviously just a debug
+         feature.
+
+config DEBUG_HWERR
+       bool "Hardware error interrupt debugging"
+       depends on DEBUG_KERNEL
+       help
+         When enabled, the hardware error interrupt is never disabled, and
+         will happen immediately when an error condition occurs.  This comes
+         at a slight cost in code size, but is necessary if you are getting
+         hardware error interrupts and need to know where they are coming
+         from.
+
+config DEBUG_ICACHE_CHECK
+       bool "Check Instruction cache coherency"
+       depends on DEBUG_KERNEL
+       depends on DEBUG_HWERR
+       help
+         Say Y here if you are getting weird unexplained errors. This will
+         ensure that icache is what SDRAM says it should be by doing a
+         byte wise comparison between SDRAM and instruction cache. This
+         also relocates the irq_panic() function to L1 memory, (which is
+         un-cached).
+
+config DEBUG_HUNT_FOR_ZERO
+       bool "Catch NULL pointer reads/writes"
+       default y
+       help
+         Say Y here to catch reads/writes to anywhere in the memory range
+         from 0x0000 - 0x0FFF (the first 4k) of memory.  This is useful in
+         catching common programming errors such as NULL pointer dereferences.
+
+         Misbehaving applications will be killed (generate a SEGV) while the
+         kernel will trigger a panic.
+
+         Enabling this option will take up an extra entry in CPLB table.
+         Otherwise, there is no extra overhead.
+
+config DEBUG_BFIN_HWTRACE_ON
+       bool "Turn on Blackfin's Hardware Trace"
+       default y
+       help
+         All Blackfins include a Trace Unit which stores a history of the last
+         16 changes in program flow taken by the program sequencer. The history
+         allows the user to recreate the program sequencer’s recent path. This
+         can be handy when an application dies - we print out the execution
+         path of how it got to the offending instruction.
+
+         By turning this off, you may save a tiny amount of power.
+
+choice
+       prompt "Omit loop Tracing"
+       default DEBUG_BFIN_HWTRACE_COMPRESSION_OFF
+       depends on DEBUG_BFIN_HWTRACE_ON
+       help
+         The trace buffer can be configured to omit recording of changes in
+         program flow that match either the last entry or one of the last
+         two entries. Omitting one of these entries from the record prevents
+         the trace buffer from overflowing because of any sort of loop (for, do
+         while, etc) in the program.
+
+         Because zero-overhead Hardware loops are not recorded in the trace buffer,
+         this feature can be used to prevent trace overflow from loops that
+         are nested four deep.
+
+config DEBUG_BFIN_HWTRACE_COMPRESSION_OFF
+       bool "Trace all Loops"
+       help
+         The trace buffer records all changes of flow 
+
+config DEBUG_BFIN_HWTRACE_COMPRESSION_ONE
+       bool "Compress single-level loops"
+       help
+         The trace buffer does not record single loops - helpful if trace 
+         is spinning on a while or do loop.
+
+config DEBUG_BFIN_HWTRACE_COMPRESSION_TWO
+       bool "Compress two-level loops"
+       help
+         The trace buffer does not record loops two levels deep. Helpful if
+         the trace is spinning in a nested loop
+
+endchoice
+
+config DEBUG_BFIN_HWTRACE_COMPRESSION
+       int
+       depends on DEBUG_BFIN_HWTRACE_ON
+       default 0 if DEBUG_BFIN_HWTRACE_COMPRESSION_OFF
+       default 1 if DEBUG_BFIN_HWTRACE_COMPRESSION_ONE
+       default 2 if DEBUG_BFIN_HWTRACE_COMPRESSION_TWO
+
+
+config DEBUG_BFIN_HWTRACE_EXPAND
+       bool "Expand Trace Buffer greater than 16 entries"
+       depends on DEBUG_BFIN_HWTRACE_ON
+       default n
+       help
+         By selecting this option, every time the 16 hardware entries in
+         the Blackfin's HW Trace buffer are full, the kernel will move them
+         into a software buffer, for dumping when there is an issue. This 
+         has a great impact on performance, (an interrupt every 16 change of 
+         flows) and should normally be turned off, except in those nasty
+         debugging sessions
+
+config DEBUG_BFIN_HWTRACE_EXPAND_LEN
+       int "Size of Trace buffer (in power of 2k)"
+       range 0 4
+       depends on DEBUG_BFIN_HWTRACE_EXPAND
+       default 1
+       help
+         This sets the size of the software buffer that the trace information
+         is kept in.
+         0 for (2^0)  1k, or 256 entries,
+         1 for (2^1)  2k, or 512 entries,
+         2 for (2^2)  4k, or 1024 entries,
+         3 for (2^3)  8k, or 2048 entries,
+         4 for (2^4) 16k, or 4096 entries
+
+config DEBUG_BFIN_NO_KERN_HWTRACE
+       bool "Trace user apps (turn off hwtrace in kernel)"
+       depends on DEBUG_BFIN_HWTRACE_ON
+       default n
+       help
+         Some pieces of the kernel contain a lot of flow changes which can
+         quickly fill up the hardware trace buffer.  When debugging crashes,
+         the hardware trace may indicate that the problem lies in kernel
+         space when in reality an application is buggy.
+
+         Say Y here to disable hardware tracing in some known "jumpy" pieces
+         of code so that the trace buffer will extend further back.
+
+config EARLY_PRINTK
+       bool "Early printk" 
+       default n
+       help
+         This option enables special console drivers which allow the kernel
+         to print messages very early in the bootup process.
+
+         This is useful for kernel debugging when your machine crashes very
+         early before the console code is initialized. After enabling this
+         feature, you must add "earlyprintk=serial,uart0,57600" to the
+         command line (bootargs). It is safe to say Y here in all cases, as
+         all of this lives in the init section and is thrown away after the
+         kernel boots completely.
+
+config DUAL_CORE_TEST_MODULE
+       tristate "Dual Core Test Module"
+       depends on (BF561)
+       default n
+       help
+         Say Y here to build-in dual core test module for dual core test.
+
+config CPLB_INFO
+       bool "Display the CPLB information"
+       help
+         Display the CPLB information.
+
+config ACCESS_CHECK
+       bool "Check the user pointer address"
+       default y
+       help
+         Usually the pointer transfer from user space is checked to see if its
+         address is in the kernel space.
+
+         Say N here to disable that check to improve the performance.
+
+endmenu
index f7cac7c51e7e5303848ea847370f6f93e5c7354a..c47e000f83240ac9c0c1dd085a816b363e861fcc 100644 (file)
@@ -31,6 +31,7 @@ machine-$(CONFIG_BF536) := bf537
 machine-$(CONFIG_BF537) := bf537
 machine-$(CONFIG_BF542) := bf548
 machine-$(CONFIG_BF544) := bf548
+machine-$(CONFIG_BF547) := bf548
 machine-$(CONFIG_BF548) := bf548
 machine-$(CONFIG_BF549) := bf548
 machine-$(CONFIG_BF561) := bf561
@@ -48,6 +49,7 @@ cpu-$(CONFIG_BF536) := bf536
 cpu-$(CONFIG_BF537) := bf537
 cpu-$(CONFIG_BF542) := bf542
 cpu-$(CONFIG_BF544) := bf544
+cpu-$(CONFIG_BF547) := bf547
 cpu-$(CONFIG_BF548) := bf548
 cpu-$(CONFIG_BF549) := bf549
 cpu-$(CONFIG_BF561) := bf561
index 1f6a93df6b32c14e0cfbe7eba7836dd264421311..fa6eb4e00fae4a3ca9efd982b7412cb6b96ed1c9 100644 (file)
@@ -1,6 +1,6 @@
 #
 # Automatically generated make config: don't edit
-# Linux kernel version: 2.6.22.9
+# Linux kernel version: 2.6.22.12
 #
 # CONFIG_MMU is not set
 # CONFIG_FPU is not set
@@ -8,7 +8,6 @@ CONFIG_RWSEM_GENERIC_SPINLOCK=y
 # CONFIG_RWSEM_XCHGADD_ALGORITHM is not set
 CONFIG_BLACKFIN=y
 CONFIG_ZONE_DMA=y
-CONFIG_BFIN=y
 CONFIG_SEMAPHORE_SLEEPERS=y
 CONFIG_GENERIC_FIND_NEXT_BIT=y
 CONFIG_GENERIC_HWEIGHT=y
@@ -18,7 +17,6 @@ CONFIG_GENERIC_IRQ_PROBE=y
 CONFIG_GENERIC_GPIO=y
 CONFIG_FORCE_MAX_ZONEORDER=14
 CONFIG_GENERIC_CALIBRATE_DELAY=y
-CONFIG_IRQCHIP_DEMUX_GPIO=y
 CONFIG_DEFCONFIG_LIST="/lib/modules/$UNAME_RELEASE/.config"
 
 #
@@ -127,6 +125,7 @@ CONFIG_BF527=y
 # CONFIG_BF537 is not set
 # CONFIG_BF542 is not set
 # CONFIG_BF544 is not set
+# CONFIG_BF547 is not set
 # CONFIG_BF548 is not set
 # CONFIG_BF549 is not set
 # CONFIG_BF561 is not set
@@ -140,19 +139,8 @@ CONFIG_BF_REV_0_0=y
 # CONFIG_BF_REV_NONE is not set
 CONFIG_BF52x=y
 CONFIG_BFIN_SINGLE_CORE=y
-CONFIG_BFIN527_EZKIT=y
-# CONFIG_BFIN533_EZKIT is not set
-# CONFIG_BFIN533_STAMP is not set
-# CONFIG_BFIN537_STAMP is not set
-# CONFIG_BFIN533_BLUETECHNIX_CM is not set
-# CONFIG_BFIN537_BLUETECHNIX_CM is not set
-# CONFIG_BFIN548_EZKIT is not set
-# CONFIG_BFIN561_BLUETECHNIX_CM is not set
-# CONFIG_BFIN561_EZKIT is not set
-# CONFIG_BFIN561_TEPLA is not set
-# CONFIG_PNAV10 is not set
-# CONFIG_GENERIC_BOARD is not set
 CONFIG_MEM_MT48LC32M16A2TG_75=y
+CONFIG_BFIN527_EZKIT=y
 
 #
 # BF527 Specific Configuration
@@ -244,7 +232,7 @@ CONFIG_CLKIN_HZ=25000000
 # CONFIG_BFIN_KERNEL_CLOCK is not set
 CONFIG_MAX_VCO_HZ=600000000
 CONFIG_MIN_VCO_HZ=50000000
-CONFIG_MAX_SCLK_HZ=133333333
+CONFIG_MAX_SCLK_HZ=133000000
 CONFIG_MIN_SCLK_HZ=27000000
 
 #
@@ -301,6 +289,7 @@ CONFIG_SPLIT_PTLOCK_CPUS=4
 # CONFIG_RESOURCES_64BIT is not set
 CONFIG_ZONE_DMA_FLAG=1
 CONFIG_LARGE_ALLOCS=y
+# CONFIG_BFIN_GPTIMERS is not set
 CONFIG_BFIN_DMA_5XX=y
 # CONFIG_DMA_UNCACHED_2M is not set
 CONFIG_DMA_UNCACHED_1M=y
@@ -322,7 +311,7 @@ CONFIG_L1_MAX_PIECE=16
 #
 
 #
-# EBIU_AMBCTL Global Control
+# EBIU_AMGCTL Global Control
 #
 CONFIG_C_AMCKEN=y
 CONFIG_C_CDPRIO=y
@@ -548,6 +537,7 @@ CONFIG_BFIN_NAND_CLE=2
 CONFIG_BFIN_NAND_ALE=1
 CONFIG_BFIN_NAND_READY=3
 CONFIG_MTD_NAND_IDS=m
+# CONFIG_MTD_NAND_BF5XX is not set
 # CONFIG_MTD_NAND_DISKONCHIP is not set
 # CONFIG_MTD_NAND_NANDSIM is not set
 # CONFIG_MTD_NAND_PLATFORM is not set
@@ -637,6 +627,7 @@ CONFIG_BFIN_MAC_RMII=y
 # CONFIG_DM9000 is not set
 CONFIG_NETDEV_1000=y
 CONFIG_NETDEV_10000=y
+# CONFIG_AX88180 is not set
 
 #
 # Wireless LAN
@@ -708,7 +699,7 @@ CONFIG_INPUT_MISC=y
 # CONFIG_SPI_ADC_BF533 is not set
 # CONFIG_BF5xx_PFLAGS is not set
 # CONFIG_BF5xx_PPIFCD is not set
-# CONFIG_BF5xx_TIMERS is not set
+# CONFIG_BFIN_SIMPLE_TIMER is not set
 # CONFIG_BF5xx_PPI is not set
 # CONFIG_BFIN_SPORT is not set
 # CONFIG_BFIN_TIMER_LATENCY is not set
index 9e9b420342d1bbe5b8486f1741b35262e28340ec..4fdb49362ba30dcd9d9f2220a42242fce46bc63a 100644 (file)
@@ -1,6 +1,6 @@
 #
 # Automatically generated make config: don't edit
-# Linux kernel version: 2.6.22.6
+# Linux kernel version: 2.6.22.12
 #
 # CONFIG_MMU is not set
 # CONFIG_FPU is not set
@@ -8,7 +8,6 @@ CONFIG_RWSEM_GENERIC_SPINLOCK=y
 # CONFIG_RWSEM_XCHGADD_ALGORITHM is not set
 CONFIG_BLACKFIN=y
 CONFIG_ZONE_DMA=y
-CONFIG_BFIN=y
 CONFIG_SEMAPHORE_SLEEPERS=y
 CONFIG_GENERIC_FIND_NEXT_BIT=y
 CONFIG_GENERIC_HWEIGHT=y
@@ -18,7 +17,6 @@ CONFIG_GENERIC_IRQ_PROBE=y
 CONFIG_GENERIC_GPIO=y
 CONFIG_FORCE_MAX_ZONEORDER=14
 CONFIG_GENERIC_CALIBRATE_DELAY=y
-CONFIG_IRQCHIP_DEMUX_GPIO=y
 CONFIG_DEFCONFIG_LIST="/lib/modules/$UNAME_RELEASE/.config"
 
 #
@@ -64,7 +62,6 @@ CONFIG_FUTEX=y
 CONFIG_ANON_INODES=y
 CONFIG_EPOLL=y
 CONFIG_SIGNALFD=y
-CONFIG_TIMERFD=y
 CONFIG_EVENTFD=y
 CONFIG_VM_EVENT_COUNTERS=y
 CONFIG_BIG_ORDER_ALLOC_NOFAIL_MAGIC=3
@@ -117,6 +114,9 @@ CONFIG_PREEMPT_VOLUNTARY=y
 #
 # Processor and Board Settings
 #
+# CONFIG_BF522 is not set
+# CONFIG_BF525 is not set
+# CONFIG_BF527 is not set
 # CONFIG_BF531 is not set
 # CONFIG_BF532 is not set
 CONFIG_BF533=y
@@ -125,10 +125,12 @@ CONFIG_BF533=y
 # CONFIG_BF537 is not set
 # CONFIG_BF542 is not set
 # CONFIG_BF544 is not set
+# CONFIG_BF547 is not set
 # CONFIG_BF548 is not set
 # CONFIG_BF549 is not set
 # CONFIG_BF561 is not set
 # CONFIG_BF_REV_0_0 is not set
+# CONFIG_BF_REV_0_1 is not set
 # CONFIG_BF_REV_0_2 is not set
 CONFIG_BF_REV_0_3=y
 # CONFIG_BF_REV_0_4 is not set
@@ -137,18 +139,12 @@ CONFIG_BF_REV_0_3=y
 # CONFIG_BF_REV_NONE is not set
 CONFIG_BF53x=y
 CONFIG_BFIN_SINGLE_CORE=y
+CONFIG_MEM_MT48LC16M16A2TG_75=y
 CONFIG_BFIN533_EZKIT=y
 # CONFIG_BFIN533_STAMP is not set
-# CONFIG_BFIN537_STAMP is not set
 # CONFIG_BFIN533_BLUETECHNIX_CM is not set
-# CONFIG_BFIN537_BLUETECHNIX_CM is not set
-# CONFIG_BFIN548_EZKIT is not set
-# CONFIG_BFIN561_BLUETECHNIX_CM is not set
-# CONFIG_BFIN561_EZKIT is not set
-# CONFIG_BFIN561_TEPLA is not set
-# CONFIG_PNAV10 is not set
-# CONFIG_GENERIC_BOARD is not set
-CONFIG_MEM_MT48LC16M16A2TG_75=y
+# CONFIG_H8606_HVSISTEMAS is not set
+# CONFIG_GENERIC_BF533_BOARD is not set
 
 #
 # BF533/2/1 Specific Configuration
@@ -198,7 +194,7 @@ CONFIG_CLKIN_HZ=27000000
 # CONFIG_BFIN_KERNEL_CLOCK is not set
 CONFIG_MAX_VCO_HZ=750000000
 CONFIG_MIN_VCO_HZ=50000000
-CONFIG_MAX_SCLK_HZ=133333333
+CONFIG_MAX_SCLK_HZ=133000000
 CONFIG_MIN_SCLK_HZ=27000000
 
 #
@@ -255,6 +251,7 @@ CONFIG_SPLIT_PTLOCK_CPUS=4
 # CONFIG_RESOURCES_64BIT is not set
 CONFIG_ZONE_DMA_FLAG=1
 CONFIG_LARGE_ALLOCS=y
+# CONFIG_BFIN_GPTIMERS is not set
 CONFIG_BFIN_DMA_5XX=y
 # CONFIG_DMA_UNCACHED_2M is not set
 CONFIG_DMA_UNCACHED_1M=y
@@ -276,7 +273,7 @@ CONFIG_L1_MAX_PIECE=16
 #
 
 #
-# EBIU_AMBCTL Global Control
+# EBIU_AMGCTL Global Control
 #
 CONFIG_C_AMCKEN=y
 CONFIG_C_CDPRIO=y
@@ -526,14 +523,6 @@ CONFIG_MTD_COMPLEX_MAPPINGS=y
 CONFIG_MTD_BF5xx=m
 CONFIG_BFIN_FLASH_SIZE=0x400000
 CONFIG_EBIU_FLASH_BASE=0x20000000
-
-#
-# FLASH_EBIU_AMBCTL Control
-#
-CONFIG_BFIN_FLASH_BANK_0=0x7BB0
-CONFIG_BFIN_FLASH_BANK_1=0x7BB0
-CONFIG_BFIN_FLASH_BANK_2=0x7BB0
-CONFIG_BFIN_FLASH_BANK_3=0x7BB0
 # CONFIG_MTD_UCLINUX is not set
 # CONFIG_MTD_PLATRAM is not set
 
@@ -622,6 +611,7 @@ CONFIG_SMC91X=y
 # CONFIG_DM9000 is not set
 CONFIG_NETDEV_1000=y
 CONFIG_NETDEV_10000=y
+# CONFIG_AX88180 is not set
 
 #
 # Wireless LAN
@@ -683,9 +673,9 @@ CONFIG_INPUT_EVDEV=m
 #
 # CONFIG_AD9960 is not set
 # CONFIG_SPI_ADC_BF533 is not set
-# CONFIG_BFIN_PFLAGS is not set
+# CONFIG_BF5xx_PFLAGS is not set
 # CONFIG_BF5xx_PPIFCD is not set
-# CONFIG_BF5xx_TIMERS is not set
+# CONFIG_BFIN_SIMPLE_TIMER is not set
 # CONFIG_BF5xx_PPI is not set
 CONFIG_BFIN_SPORT=y
 # CONFIG_BFIN_TIMER_LATENCY is not set
@@ -708,6 +698,7 @@ CONFIG_SERIAL_BFIN_DMA=y
 # CONFIG_SERIAL_BFIN_PIO is not set
 CONFIG_SERIAL_BFIN_UART0=y
 # CONFIG_BFIN_UART0_CTSRTS is not set
+# CONFIG_SERIAL_BFIN_UART1 is not set
 CONFIG_SERIAL_CORE=y
 CONFIG_SERIAL_CORE_CONSOLE=y
 # CONFIG_SERIAL_BFIN_SPORT is not set
index f59ade980109074728882c93585e084478adc06e..b04e8e533e9afbea51ed34d9f930cc0727f07c2d 100644 (file)
@@ -1,6 +1,6 @@
 #
 # Automatically generated make config: don't edit
-# Linux kernel version: 2.6.22.6
+# Linux kernel version: 2.6.22.12
 #
 # CONFIG_MMU is not set
 # CONFIG_FPU is not set
@@ -8,7 +8,6 @@ CONFIG_RWSEM_GENERIC_SPINLOCK=y
 # CONFIG_RWSEM_XCHGADD_ALGORITHM is not set
 CONFIG_BLACKFIN=y
 CONFIG_ZONE_DMA=y
-CONFIG_BFIN=y
 CONFIG_SEMAPHORE_SLEEPERS=y
 CONFIG_GENERIC_FIND_NEXT_BIT=y
 CONFIG_GENERIC_HWEIGHT=y
@@ -18,7 +17,6 @@ CONFIG_GENERIC_IRQ_PROBE=y
 CONFIG_GENERIC_GPIO=y
 CONFIG_FORCE_MAX_ZONEORDER=14
 CONFIG_GENERIC_CALIBRATE_DELAY=y
-CONFIG_IRQCHIP_DEMUX_GPIO=y
 CONFIG_DEFCONFIG_LIST="/lib/modules/$UNAME_RELEASE/.config"
 
 #
@@ -64,7 +62,6 @@ CONFIG_FUTEX=y
 CONFIG_ANON_INODES=y
 CONFIG_EPOLL=y
 CONFIG_SIGNALFD=y
-CONFIG_TIMERFD=y
 CONFIG_EVENTFD=y
 CONFIG_VM_EVENT_COUNTERS=y
 CONFIG_BIG_ORDER_ALLOC_NOFAIL_MAGIC=3
@@ -117,6 +114,9 @@ CONFIG_PREEMPT_VOLUNTARY=y
 #
 # Processor and Board Settings
 #
+# CONFIG_BF522 is not set
+# CONFIG_BF525 is not set
+# CONFIG_BF527 is not set
 # CONFIG_BF531 is not set
 # CONFIG_BF532 is not set
 CONFIG_BF533=y
@@ -125,10 +125,12 @@ CONFIG_BF533=y
 # CONFIG_BF537 is not set
 # CONFIG_BF542 is not set
 # CONFIG_BF544 is not set
+# CONFIG_BF547 is not set
 # CONFIG_BF548 is not set
 # CONFIG_BF549 is not set
 # CONFIG_BF561 is not set
 # CONFIG_BF_REV_0_0 is not set
+# CONFIG_BF_REV_0_1 is not set
 # CONFIG_BF_REV_0_2 is not set
 CONFIG_BF_REV_0_3=y
 # CONFIG_BF_REV_0_4 is not set
@@ -137,19 +139,13 @@ CONFIG_BF_REV_0_3=y
 # CONFIG_BF_REV_NONE is not set
 CONFIG_BF53x=y
 CONFIG_BFIN_SINGLE_CORE=y
+CONFIG_MEM_MT48LC64M4A2FB_7E=y
+CONFIG_BFIN_SHARED_FLASH_ENET=y
 # CONFIG_BFIN533_EZKIT is not set
 CONFIG_BFIN533_STAMP=y
-# CONFIG_BFIN537_STAMP is not set
 # CONFIG_BFIN533_BLUETECHNIX_CM is not set
-# CONFIG_BFIN537_BLUETECHNIX_CM is not set
-# CONFIG_BFIN548_EZKIT is not set
-# CONFIG_BFIN561_BLUETECHNIX_CM is not set
-# CONFIG_BFIN561_EZKIT is not set
-# CONFIG_BFIN561_TEPLA is not set
-# CONFIG_PNAV10 is not set
-# CONFIG_GENERIC_BOARD is not set
-CONFIG_MEM_MT48LC64M4A2FB_7E=y
-CONFIG_BFIN_SHARED_FLASH_ENET=y
+# CONFIG_H8606_HVSISTEMAS is not set
+# CONFIG_GENERIC_BF533_BOARD is not set
 
 #
 # BF533/2/1 Specific Configuration
@@ -199,7 +195,7 @@ CONFIG_CLKIN_HZ=11059200
 # CONFIG_BFIN_KERNEL_CLOCK is not set
 CONFIG_MAX_VCO_HZ=750000000
 CONFIG_MIN_VCO_HZ=50000000
-CONFIG_MAX_SCLK_HZ=133333333
+CONFIG_MAX_SCLK_HZ=133000000
 CONFIG_MIN_SCLK_HZ=27000000
 
 #
@@ -267,6 +263,7 @@ CONFIG_SPLIT_PTLOCK_CPUS=4
 # CONFIG_RESOURCES_64BIT is not set
 CONFIG_ZONE_DMA_FLAG=1
 CONFIG_LARGE_ALLOCS=y
+# CONFIG_BFIN_GPTIMERS is not set
 CONFIG_BFIN_DMA_5XX=y
 # CONFIG_DMA_UNCACHED_2M is not set
 CONFIG_DMA_UNCACHED_1M=y
@@ -288,7 +285,7 @@ CONFIG_L1_MAX_PIECE=16
 #
 
 #
-# EBIU_AMBCTL Global Control
+# EBIU_AMGCTL Global Control
 #
 CONFIG_C_AMCKEN=y
 CONFIG_C_CDPRIO=y
@@ -634,6 +631,7 @@ CONFIG_SMC91X=y
 # CONFIG_DM9000 is not set
 CONFIG_NETDEV_1000=y
 CONFIG_NETDEV_10000=y
+# CONFIG_AX88180 is not set
 
 #
 # Wireless LAN
@@ -704,9 +702,9 @@ CONFIG_BFIN_TWIKEYPAD_IRQ_PFX=39
 #
 # CONFIG_AD9960 is not set
 # CONFIG_SPI_ADC_BF533 is not set
-# CONFIG_BFIN_PFLAGS is not set
+# CONFIG_BF5xx_PFLAGS is not set
 # CONFIG_BF5xx_PPIFCD is not set
-# CONFIG_BF5xx_TIMERS is not set
+# CONFIG_BFIN_SIMPLE_TIMER is not set
 # CONFIG_BF5xx_PPI is not set
 CONFIG_BFIN_SPORT=y
 # CONFIG_BFIN_TIMER_LATENCY is not set
@@ -732,6 +730,7 @@ CONFIG_SERIAL_BFIN_DMA=y
 # CONFIG_SERIAL_BFIN_PIO is not set
 CONFIG_SERIAL_BFIN_UART0=y
 # CONFIG_BFIN_UART0_CTSRTS is not set
+# CONFIG_SERIAL_BFIN_UART1 is not set
 CONFIG_SERIAL_CORE=y
 CONFIG_SERIAL_CORE_CONSOLE=y
 # CONFIG_SERIAL_BFIN_SPORT is not set
@@ -925,6 +924,7 @@ CONFIG_NTSC=y
 # CONFIG_PAL_YCBCR is not set
 CONFIG_ADV7393_1XMEM=y
 # CONFIG_ADV7393_2XMEM is not set
+# CONFIG_FB_BFIN_T350MCQB is not set
 # CONFIG_FB_S1D13XXX is not set
 # CONFIG_FB_VIRTUAL is not set
 # CONFIG_LOGO is not set
@@ -978,11 +978,6 @@ CONFIG_SND_BFIN_AD73311_SE=4
 #
 # CONFIG_SND_SOC is not set
 
-#
-# SoC Audio for the ADI Blackfin
-#
-# CONFIG_SND_BF5XX_HAVE_COLD_RESET is not set
-
 #
 # Open Sound System
 #
index 07eb63dc25e0d604776bf2f458e520b87edd854a..f812b66318b912642b8ee65e8bdccba97ef09628 100644 (file)
@@ -1,6 +1,6 @@
 #
 # Automatically generated make config: don't edit
-# Linux kernel version: 2.6.22.6
+# Linux kernel version: 2.6.22.12
 #
 # CONFIG_MMU is not set
 # CONFIG_FPU is not set
@@ -8,7 +8,6 @@ CONFIG_RWSEM_GENERIC_SPINLOCK=y
 # CONFIG_RWSEM_XCHGADD_ALGORITHM is not set
 CONFIG_BLACKFIN=y
 CONFIG_ZONE_DMA=y
-CONFIG_BFIN=y
 CONFIG_SEMAPHORE_SLEEPERS=y
 CONFIG_GENERIC_FIND_NEXT_BIT=y
 CONFIG_GENERIC_HWEIGHT=y
@@ -18,7 +17,6 @@ CONFIG_GENERIC_IRQ_PROBE=y
 CONFIG_GENERIC_GPIO=y
 CONFIG_FORCE_MAX_ZONEORDER=14
 CONFIG_GENERIC_CALIBRATE_DELAY=y
-CONFIG_IRQCHIP_DEMUX_GPIO=y
 CONFIG_DEFCONFIG_LIST="/lib/modules/$UNAME_RELEASE/.config"
 
 #
@@ -64,7 +62,6 @@ CONFIG_FUTEX=y
 CONFIG_ANON_INODES=y
 CONFIG_EPOLL=y
 CONFIG_SIGNALFD=y
-CONFIG_TIMERFD=y
 CONFIG_EVENTFD=y
 CONFIG_VM_EVENT_COUNTERS=y
 CONFIG_BIG_ORDER_ALLOC_NOFAIL_MAGIC=3
@@ -117,6 +114,9 @@ CONFIG_PREEMPT_VOLUNTARY=y
 #
 # Processor and Board Settings
 #
+# CONFIG_BF522 is not set
+# CONFIG_BF525 is not set
+# CONFIG_BF527 is not set
 # CONFIG_BF531 is not set
 # CONFIG_BF532 is not set
 # CONFIG_BF533 is not set
@@ -125,10 +125,12 @@ CONFIG_PREEMPT_VOLUNTARY=y
 CONFIG_BF537=y
 # CONFIG_BF542 is not set
 # CONFIG_BF544 is not set
+# CONFIG_BF547 is not set
 # CONFIG_BF548 is not set
 # CONFIG_BF549 is not set
 # CONFIG_BF561 is not set
 # CONFIG_BF_REV_0_0 is not set
+# CONFIG_BF_REV_0_1 is not set
 CONFIG_BF_REV_0_2=y
 # CONFIG_BF_REV_0_3 is not set
 # CONFIG_BF_REV_0_4 is not set
@@ -137,33 +139,8 @@ CONFIG_BF_REV_0_2=y
 # CONFIG_BF_REV_NONE is not set
 CONFIG_BF53x=y
 CONFIG_BFIN_SINGLE_CORE=y
-# CONFIG_BFIN533_EZKIT is not set
-# CONFIG_BFIN533_STAMP is not set
-CONFIG_BFIN537_STAMP=y
-# CONFIG_BFIN533_BLUETECHNIX_CM is not set
-# CONFIG_BFIN537_BLUETECHNIX_CM is not set
-# CONFIG_BFIN548_EZKIT is not set
-# CONFIG_BFIN561_BLUETECHNIX_CM is not set
-# CONFIG_BFIN561_EZKIT is not set
-# CONFIG_BFIN561_TEPLA is not set
-# CONFIG_PNAV10 is not set
-# CONFIG_GENERIC_BOARD is not set
 CONFIG_MEM_MT48LC32M8A2_75=y
 CONFIG_IRQ_PLL_WAKEUP=7
-
-#
-# BF537 Specific Configuration
-#
-
-#
-# Interrupt Priority Assignment
-#
-
-#
-# Priority
-#
-CONFIG_IRQ_DMA_ERROR=7
-CONFIG_IRQ_ERROR=7
 CONFIG_IRQ_RTC=8
 CONFIG_IRQ_PPI=8
 CONFIG_IRQ_SPORT0_RX=9
@@ -176,8 +153,6 @@ CONFIG_IRQ_UART0_RX=10
 CONFIG_IRQ_UART0_TX=10
 CONFIG_IRQ_UART1_RX=10
 CONFIG_IRQ_UART1_TX=10
-CONFIG_IRQ_CAN_RX=11
-CONFIG_IRQ_CAN_TX=11
 CONFIG_IRQ_MAC_RX=11
 CONFIG_IRQ_MAC_TX=11
 CONFIG_IRQ_TMR0=12
@@ -188,11 +163,31 @@ CONFIG_IRQ_TMR4=12
 CONFIG_IRQ_TMR5=12
 CONFIG_IRQ_TMR6=12
 CONFIG_IRQ_TMR7=12
-CONFIG_IRQ_PROG_INTA=12
 CONFIG_IRQ_PORTG_INTB=12
 CONFIG_IRQ_MEM_DMA0=13
 CONFIG_IRQ_MEM_DMA1=13
 CONFIG_IRQ_WATCH=13
+CONFIG_BFIN537_STAMP=y
+# CONFIG_BFIN537_BLUETECHNIX_CM is not set
+# CONFIG_PNAV10 is not set
+# CONFIG_GENERIC_BF537_BOARD is not set
+
+#
+# BF537 Specific Configuration
+#
+
+#
+# Interrupt Priority Assignment
+#
+
+#
+# Priority
+#
+CONFIG_IRQ_DMA_ERROR=7
+CONFIG_IRQ_ERROR=7
+CONFIG_IRQ_CAN_RX=11
+CONFIG_IRQ_CAN_TX=11
+CONFIG_IRQ_PROG_INTA=12
 
 #
 # Board customizations
@@ -206,7 +201,7 @@ CONFIG_CLKIN_HZ=25000000
 # CONFIG_BFIN_KERNEL_CLOCK is not set
 CONFIG_MAX_VCO_HZ=600000000
 CONFIG_MIN_VCO_HZ=50000000
-CONFIG_MAX_SCLK_HZ=133333333
+CONFIG_MAX_SCLK_HZ=133000000
 CONFIG_MIN_SCLK_HZ=27000000
 
 #
@@ -263,6 +258,7 @@ CONFIG_SPLIT_PTLOCK_CPUS=4
 # CONFIG_RESOURCES_64BIT is not set
 CONFIG_ZONE_DMA_FLAG=1
 CONFIG_LARGE_ALLOCS=y
+# CONFIG_BFIN_GPTIMERS is not set
 CONFIG_BFIN_DMA_5XX=y
 # CONFIG_DMA_UNCACHED_2M is not set
 CONFIG_DMA_UNCACHED_1M=y
@@ -284,7 +280,7 @@ CONFIG_L1_MAX_PIECE=16
 #
 
 #
-# EBIU_AMBCTL Global Control
+# EBIU_AMGCTL Global Control
 #
 CONFIG_C_AMCKEN=y
 CONFIG_C_CDPRIO=y
@@ -534,14 +530,6 @@ CONFIG_MTD_COMPLEX_MAPPINGS=y
 CONFIG_MTD_BF5xx=m
 CONFIG_BFIN_FLASH_SIZE=0x400000
 CONFIG_EBIU_FLASH_BASE=0x20000000
-
-#
-# FLASH_EBIU_AMBCTL Control
-#
-CONFIG_BFIN_FLASH_BANK_0=0x7BB0
-CONFIG_BFIN_FLASH_BANK_1=0x7BB0
-CONFIG_BFIN_FLASH_BANK_2=0x7BB0
-CONFIG_BFIN_FLASH_BANK_3=0x7BB0
 # CONFIG_MTD_UCLINUX is not set
 # CONFIG_MTD_PLATRAM is not set
 
@@ -660,6 +648,7 @@ CONFIG_BFIN_RX_DESC_NUM=20
 # CONFIG_DM9000 is not set
 CONFIG_NETDEV_1000=y
 CONFIG_NETDEV_10000=y
+# CONFIG_AX88180 is not set
 
 #
 # Wireless LAN
@@ -730,9 +719,9 @@ CONFIG_BFIN_TWIKEYPAD_IRQ_PFX=72
 #
 # CONFIG_AD9960 is not set
 # CONFIG_SPI_ADC_BF533 is not set
-# CONFIG_BFIN_PFLAGS is not set
+# CONFIG_BF5xx_PFLAGS is not set
 # CONFIG_BF5xx_PPIFCD is not set
-# CONFIG_BF5xx_TIMERS is not set
+# CONFIG_BFIN_SIMPLE_TIMER is not set
 # CONFIG_BF5xx_PPI is not set
 CONFIG_BFIN_SPORT=y
 # CONFIG_BFIN_TIMER_LATENCY is not set
@@ -967,6 +956,7 @@ CONFIG_FB_BF537_LQ035=m
 CONFIG_LQ035_SLAVE_ADDR=0x58
 # CONFIG_FB_BFIN_LANDSCAPE is not set
 # CONFIG_FB_BFIN_BGR is not set
+# CONFIG_FB_BFIN_T350MCQB is not set
 # CONFIG_FB_S1D13XXX is not set
 # CONFIG_FB_VIRTUAL is not set
 # CONFIG_LOGO is not set
@@ -1020,11 +1010,6 @@ CONFIG_SND_BFIN_AD73311_SE=4
 #
 # CONFIG_SND_SOC is not set
 
-#
-# SoC Audio for the ADI Blackfin
-#
-# CONFIG_SND_BF5XX_HAVE_COLD_RESET is not set
-
 #
 # Open Sound System
 #
index 0dd3d2253dc26519bdac1af0e57e733c47ddfe44..48367cc9fe35adf3e39326d9a1a832975dad1fde 100644 (file)
@@ -1,7 +1,6 @@
 #
 # Automatically generated make config: don't edit
-# Linux kernel version: 2.6.22.10
-# Sat Oct 27 02:34:07 2007
+# Linux kernel version: 2.6.22.12
 #
 # CONFIG_MMU is not set
 # CONFIG_FPU is not set
@@ -9,7 +8,6 @@ CONFIG_RWSEM_GENERIC_SPINLOCK=y
 # CONFIG_RWSEM_XCHGADD_ALGORITHM is not set
 CONFIG_BLACKFIN=y
 CONFIG_ZONE_DMA=y
-CONFIG_BFIN=y
 CONFIG_SEMAPHORE_SLEEPERS=y
 CONFIG_GENERIC_FIND_NEXT_BIT=y
 CONFIG_GENERIC_HWEIGHT=y
@@ -19,7 +17,6 @@ CONFIG_GENERIC_IRQ_PROBE=y
 CONFIG_GENERIC_GPIO=y
 CONFIG_FORCE_MAX_ZONEORDER=14
 CONFIG_GENERIC_CALIBRATE_DELAY=y
-CONFIG_IRQCHIP_DEMUX_GPIO=y
 CONFIG_DEFCONFIG_LIST="/lib/modules/$UNAME_RELEASE/.config"
 
 #
@@ -128,6 +125,7 @@ CONFIG_PREEMPT_VOLUNTARY=y
 # CONFIG_BF537 is not set
 # CONFIG_BF542 is not set
 # CONFIG_BF544 is not set
+# CONFIG_BF547 is not set
 # CONFIG_BF548 is not set
 CONFIG_BF549=y
 # CONFIG_BF561 is not set
@@ -141,19 +139,6 @@ CONFIG_BF_REV_0_0=y
 # CONFIG_BF_REV_NONE is not set
 CONFIG_BF54x=y
 CONFIG_BFIN_SINGLE_CORE=y
-# CONFIG_BFIN527_EZKIT is not set
-# CONFIG_BFIN533_EZKIT is not set
-# CONFIG_BFIN533_STAMP is not set
-# CONFIG_BFIN537_STAMP is not set
-# CONFIG_BFIN533_BLUETECHNIX_CM is not set
-# CONFIG_BFIN537_BLUETECHNIX_CM is not set
-CONFIG_BFIN548_EZKIT=y
-# CONFIG_BFIN561_BLUETECHNIX_CM is not set
-# CONFIG_BFIN561_EZKIT is not set
-# CONFIG_BFIN561_TEPLA is not set
-# CONFIG_PNAV10 is not set
-# CONFIG_H8606_HVSISTEMAS is not set
-# CONFIG_GENERIC_BOARD is not set
 CONFIG_IRQ_PLL_WAKEUP=7
 CONFIG_IRQ_RTC=8
 CONFIG_IRQ_SPORT0_RX=9
@@ -180,6 +165,7 @@ CONFIG_IRQ_TIMER7=11
 CONFIG_IRQ_TIMER8=11
 CONFIG_IRQ_TIMER9=11
 CONFIG_IRQ_TIMER10=11
+CONFIG_BFIN548_EZKIT=y
 
 #
 # BF548 Specific Configuration
@@ -279,9 +265,9 @@ CONFIG_PINT3_ASSIGN=0x02020303
 #
 CONFIG_CLKIN_HZ=25000000
 # CONFIG_BFIN_KERNEL_CLOCK is not set
-CONFIG_MAX_VCO_HZ=533333333
+CONFIG_MAX_VCO_HZ=533000000
 CONFIG_MIN_VCO_HZ=50000000
-CONFIG_MAX_SCLK_HZ=133333333
+CONFIG_MAX_SCLK_HZ=133000000
 CONFIG_MIN_SCLK_HZ=27000000
 
 #
@@ -376,6 +362,9 @@ CONFIG_BANK_0=0x7BB0
 CONFIG_BANK_1=0x5554
 CONFIG_BANK_2=0x7BB0
 CONFIG_BANK_3=0x99B3
+CONFIG_EBUI_MBSCTLVAL=0x0
+CONFIG_EBUI_MODEVAL=0x1
+CONFIG_EBUI_FCTLVAL=0x6
 
 #
 # Bus options (PCI, PCMCIA, EISA, MCA, ISA)
@@ -702,6 +691,7 @@ CONFIG_SMSC911X=y
 # CONFIG_DM9000 is not set
 CONFIG_NETDEV_1000=y
 CONFIG_NETDEV_10000=y
+# CONFIG_AX88180 is not set
 
 #
 # Wireless LAN
@@ -1058,6 +1048,8 @@ CONFIG_SND_SOC=y
 CONFIG_SND_BF5XX_SOC=y
 CONFIG_SND_BF5XX_SOC_AC97=y
 CONFIG_SND_BF5XX_SOC_BF548_EZKIT=y
+# CONFIG_SND_BF5XX_SOC_WM8750 is not set
+# CONFIG_SND_BF5XX_SOC_WM8731 is not set
 CONFIG_SND_BF5XX_SPORT_NUM=0
 # CONFIG_SND_BF5XX_HAVE_COLD_RESET is not set
 CONFIG_SND_SOC_AD1980=y
index 277d72dac0f9dae54a6c8939c02e5331eb313533..e9f100b45eb180ba60103f8eec093065715fa8ec 100644 (file)
@@ -1,6 +1,6 @@
 #
 # Automatically generated make config: don't edit
-# Linux kernel version: 2.6.22.6
+# Linux kernel version: 2.6.22.12
 #
 # CONFIG_MMU is not set
 # CONFIG_FPU is not set
@@ -8,7 +8,6 @@ CONFIG_RWSEM_GENERIC_SPINLOCK=y
 # CONFIG_RWSEM_XCHGADD_ALGORITHM is not set
 CONFIG_BLACKFIN=y
 CONFIG_ZONE_DMA=y
-CONFIG_BFIN=y
 CONFIG_SEMAPHORE_SLEEPERS=y
 CONFIG_GENERIC_FIND_NEXT_BIT=y
 CONFIG_GENERIC_HWEIGHT=y
@@ -18,7 +17,6 @@ CONFIG_GENERIC_IRQ_PROBE=y
 CONFIG_GENERIC_GPIO=y
 CONFIG_FORCE_MAX_ZONEORDER=14
 CONFIG_GENERIC_CALIBRATE_DELAY=y
-CONFIG_IRQCHIP_DEMUX_GPIO=y
 CONFIG_DEFCONFIG_LIST="/lib/modules/$UNAME_RELEASE/.config"
 
 #
@@ -64,7 +62,6 @@ CONFIG_FUTEX=y
 CONFIG_ANON_INODES=y
 CONFIG_EPOLL=y
 CONFIG_SIGNALFD=y
-CONFIG_TIMERFD=y
 CONFIG_EVENTFD=y
 CONFIG_VM_EVENT_COUNTERS=y
 CONFIG_BIG_ORDER_ALLOC_NOFAIL_MAGIC=3
@@ -117,6 +114,9 @@ CONFIG_PREEMPT_VOLUNTARY=y
 #
 # Processor and Board Settings
 #
+# CONFIG_BF522 is not set
+# CONFIG_BF525 is not set
+# CONFIG_BF527 is not set
 # CONFIG_BF531 is not set
 # CONFIG_BF532 is not set
 # CONFIG_BF533 is not set
@@ -125,10 +125,12 @@ CONFIG_PREEMPT_VOLUNTARY=y
 # CONFIG_BF537 is not set
 # CONFIG_BF542 is not set
 # CONFIG_BF544 is not set
+# CONFIG_BF547 is not set
 # CONFIG_BF548 is not set
 # CONFIG_BF549 is not set
 CONFIG_BF561=y
 # CONFIG_BF_REV_0_0 is not set
+# CONFIG_BF_REV_0_1 is not set
 # CONFIG_BF_REV_0_2 is not set
 CONFIG_BF_REV_0_3=y
 # CONFIG_BF_REV_0_4 is not set
@@ -136,18 +138,15 @@ CONFIG_BF_REV_0_3=y
 # CONFIG_BF_REV_ANY is not set
 # CONFIG_BF_REV_NONE is not set
 CONFIG_BFIN_DUAL_CORE=y
-# CONFIG_BFIN533_EZKIT is not set
-# CONFIG_BFIN533_STAMP is not set
-# CONFIG_BFIN537_STAMP is not set
-# CONFIG_BFIN533_BLUETECHNIX_CM is not set
-# CONFIG_BFIN537_BLUETECHNIX_CM is not set
-# CONFIG_BFIN548_EZKIT is not set
-# CONFIG_BFIN561_BLUETECHNIX_CM is not set
+CONFIG_MEM_MT48LC16M16A2TG_75=y
+CONFIG_IRQ_PLL_WAKEUP=7
+CONFIG_IRQ_SPORT0_ERROR=7
+CONFIG_IRQ_SPORT1_ERROR=7
+CONFIG_IRQ_SPI_ERROR=7
 CONFIG_BFIN561_EZKIT=y
 # CONFIG_BFIN561_TEPLA is not set
-# CONFIG_PNAV10 is not set
-# CONFIG_GENERIC_BOARD is not set
-CONFIG_MEM_MT48LC16M16A2TG_75=y
+# CONFIG_BFIN561_BLUETECHNIX_CM is not set
+# CONFIG_GENERIC_BF561_BOARD is not set
 
 #
 # BF561 Specific Configuration
@@ -170,15 +169,11 @@ CONFIG_BF561_COREB_RESET=y
 #
 # Priority
 #
-CONFIG_IRQ_PLL_WAKEUP=7
 CONFIG_IRQ_DMA1_ERROR=7
 CONFIG_IRQ_DMA2_ERROR=7
 CONFIG_IRQ_IMDMA_ERROR=7
 CONFIG_IRQ_PPI0_ERROR=7
 CONFIG_IRQ_PPI1_ERROR=7
-CONFIG_IRQ_SPORT0_ERROR=7
-CONFIG_IRQ_SPORT1_ERROR=7
-CONFIG_IRQ_SPI_ERROR=7
 CONFIG_IRQ_UART_ERROR=7
 CONFIG_IRQ_RESERVED_ERROR=7
 CONFIG_IRQ_DMA1_0=8
@@ -243,7 +238,7 @@ CONFIG_CLKIN_HZ=30000000
 # CONFIG_BFIN_KERNEL_CLOCK is not set
 CONFIG_MAX_VCO_HZ=600000000
 CONFIG_MIN_VCO_HZ=50000000
-CONFIG_MAX_SCLK_HZ=133333333
+CONFIG_MAX_SCLK_HZ=133000000
 CONFIG_MIN_SCLK_HZ=27000000
 
 #
@@ -300,6 +295,7 @@ CONFIG_SPLIT_PTLOCK_CPUS=4
 # CONFIG_RESOURCES_64BIT is not set
 CONFIG_ZONE_DMA_FLAG=1
 CONFIG_LARGE_ALLOCS=y
+# CONFIG_BFIN_GPTIMERS is not set
 CONFIG_BFIN_DMA_5XX=y
 # CONFIG_DMA_UNCACHED_2M is not set
 CONFIG_DMA_UNCACHED_1M=y
@@ -321,7 +317,7 @@ CONFIG_L1_MAX_PIECE=16
 #
 
 #
-# EBIU_AMBCTL Global Control
+# EBIU_AMGCTL Global Control
 #
 CONFIG_C_AMCKEN=y
 CONFIG_C_CDPRIO=y
@@ -564,14 +560,6 @@ CONFIG_MTD_COMPLEX_MAPPINGS=y
 CONFIG_MTD_BF5xx=m
 CONFIG_BFIN_FLASH_SIZE=0x0400000
 CONFIG_EBIU_FLASH_BASE=0x20000000
-
-#
-# FLASH_EBIU_AMBCTL Control
-#
-CONFIG_BFIN_FLASH_BANK_0=0x7BB0
-CONFIG_BFIN_FLASH_BANK_1=0x7BB0
-CONFIG_BFIN_FLASH_BANK_2=0x7BB0
-CONFIG_BFIN_FLASH_BANK_3=0x7BB0
 # CONFIG_MTD_UCLINUX is not set
 # CONFIG_MTD_PLATRAM is not set
 
@@ -660,6 +648,7 @@ CONFIG_SMC91X=y
 # CONFIG_DM9000 is not set
 CONFIG_NETDEV_1000=y
 CONFIG_NETDEV_10000=y
+# CONFIG_AX88180 is not set
 
 #
 # Wireless LAN
@@ -721,9 +710,9 @@ CONFIG_INPUT_EVDEV=m
 #
 # CONFIG_AD9960 is not set
 # CONFIG_SPI_ADC_BF533 is not set
-# CONFIG_BFIN_PFLAGS is not set
+# CONFIG_BF5xx_PFLAGS is not set
 # CONFIG_BF5xx_PPIFCD is not set
-# CONFIG_BF5xx_TIMERS is not set
+# CONFIG_BFIN_SIMPLE_TIMER is not set
 # CONFIG_BF5xx_PPI is not set
 # CONFIG_BFIN_SPORT is not set
 # CONFIG_BFIN_TIMER_LATENCY is not set
diff --git a/arch/blackfin/configs/H8606_defconfig b/arch/blackfin/configs/H8606_defconfig
new file mode 100644 (file)
index 0000000..18cbb8c
--- /dev/null
@@ -0,0 +1,1160 @@
+#
+# Automatically generated make config: don't edit
+# Linux kernel version: 2.6.22.12
+#
+# CONFIG_MMU is not set
+# CONFIG_FPU is not set
+CONFIG_RWSEM_GENERIC_SPINLOCK=y
+# CONFIG_RWSEM_XCHGADD_ALGORITHM is not set
+CONFIG_BLACKFIN=y
+CONFIG_ZONE_DMA=y
+CONFIG_SEMAPHORE_SLEEPERS=y
+CONFIG_GENERIC_FIND_NEXT_BIT=y
+CONFIG_GENERIC_HWEIGHT=y
+CONFIG_GENERIC_HARDIRQS=y
+CONFIG_GENERIC_IRQ_PROBE=y
+# CONFIG_GENERIC_TIME is not set
+CONFIG_GENERIC_GPIO=y
+CONFIG_FORCE_MAX_ZONEORDER=14
+CONFIG_GENERIC_CALIBRATE_DELAY=y
+CONFIG_DEFCONFIG_LIST="/lib/modules/$UNAME_RELEASE/.config"
+
+#
+# Code maturity level options
+#
+CONFIG_EXPERIMENTAL=y
+CONFIG_BROKEN_ON_SMP=y
+CONFIG_INIT_ENV_ARG_LIMIT=32
+
+#
+# General setup
+#
+CONFIG_LOCALVERSION=""
+CONFIG_LOCALVERSION_AUTO=y
+CONFIG_SYSVIPC=y
+# CONFIG_IPC_NS is not set
+CONFIG_SYSVIPC_SYSCTL=y
+# CONFIG_POSIX_MQUEUE is not set
+# CONFIG_BSD_PROCESS_ACCT is not set
+# CONFIG_TASKSTATS is not set
+# CONFIG_UTS_NS is not set
+# CONFIG_AUDIT is not set
+# CONFIG_IKCONFIG is not set
+CONFIG_LOG_BUF_SHIFT=14
+CONFIG_SYSFS_DEPRECATED=y
+# CONFIG_RELAY is not set
+# CONFIG_BLK_DEV_INITRD is not set
+# CONFIG_CC_OPTIMIZE_FOR_SIZE is not set
+CONFIG_SYSCTL=y
+CONFIG_EMBEDDED=y
+CONFIG_UID16=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_BASE_FULL=y
+CONFIG_FUTEX=y
+CONFIG_ANON_INODES=y
+CONFIG_EPOLL=y
+CONFIG_SIGNALFD=y
+CONFIG_EVENTFD=y
+CONFIG_VM_EVENT_COUNTERS=y
+CONFIG_BIG_ORDER_ALLOC_NOFAIL_MAGIC=3
+# CONFIG_NP2 is not set
+CONFIG_SLAB=y
+# CONFIG_SLUB is not set
+# CONFIG_SLOB is not set
+CONFIG_RT_MUTEXES=y
+CONFIG_TINY_SHMEM=y
+CONFIG_BASE_SMALL=0
+
+#
+# Loadable module support
+#
+CONFIG_MODULES=y
+CONFIG_MODULE_UNLOAD=y
+# CONFIG_MODULE_FORCE_UNLOAD is not set
+# CONFIG_MODVERSIONS is not set
+# CONFIG_MODULE_SRCVERSION_ALL is not set
+CONFIG_KMOD=y
+
+#
+# Block layer
+#
+CONFIG_BLOCK=y
+# CONFIG_LBD is not set
+# CONFIG_BLK_DEV_IO_TRACE is not set
+# CONFIG_LSF is not set
+
+#
+# IO Schedulers
+#
+CONFIG_IOSCHED_NOOP=y
+CONFIG_IOSCHED_AS=y
+# CONFIG_IOSCHED_DEADLINE is not set
+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_PREEMPT_NONE=y
+# CONFIG_PREEMPT_VOLUNTARY is not set
+# CONFIG_PREEMPT is not set
+
+#
+# Blackfin Processor Options
+#
+
+#
+# Processor and Board Settings
+#
+# CONFIG_BF522 is not set
+# CONFIG_BF525 is not set
+# CONFIG_BF527 is not set
+# CONFIG_BF531 is not set
+CONFIG_BF532=y
+# CONFIG_BF533 is not set
+# CONFIG_BF534 is not set
+# CONFIG_BF536 is not set
+# CONFIG_BF537 is not set
+# CONFIG_BF542 is not set
+# CONFIG_BF544 is not set
+# CONFIG_BF547 is not set
+# CONFIG_BF548 is not set
+# CONFIG_BF549 is not set
+# CONFIG_BF561 is not set
+# CONFIG_BF_REV_0_0 is not set
+# CONFIG_BF_REV_0_1 is not set
+# CONFIG_BF_REV_0_2 is not set
+# CONFIG_BF_REV_0_3 is not set
+# CONFIG_BF_REV_0_4 is not set
+CONFIG_BF_REV_0_5=y
+# CONFIG_BF_REV_ANY is not set
+# CONFIG_BF_REV_NONE is not set
+CONFIG_BF53x=y
+CONFIG_BFIN_SINGLE_CORE=y
+CONFIG_MEM_MT48LC16M16A2TG_75=y
+# CONFIG_BFIN533_EZKIT is not set
+# CONFIG_BFIN533_STAMP is not set
+# CONFIG_BFIN533_BLUETECHNIX_CM is not set
+CONFIG_H8606_HVSISTEMAS=y
+# CONFIG_GENERIC_BF533_BOARD is not set
+
+#
+# BF533/2/1 Specific Configuration
+#
+
+#
+# Interrupt Priority Assignment
+#
+
+#
+# Priority
+#
+CONFIG_UART_ERROR=7
+CONFIG_SPORT0_ERROR=7
+CONFIG_SPI_ERROR=7
+CONFIG_SPORT1_ERROR=7
+CONFIG_PPI_ERROR=7
+CONFIG_DMA_ERROR=7
+CONFIG_PLLWAKE_ERROR=7
+CONFIG_RTC_ERROR=8
+CONFIG_DMA0_PPI=8
+CONFIG_DMA1_SPORT0RX=9
+CONFIG_DMA2_SPORT0TX=9
+CONFIG_DMA3_SPORT1RX=9
+CONFIG_DMA4_SPORT1TX=9
+CONFIG_DMA5_SPI=10
+CONFIG_DMA6_UARTRX=10
+CONFIG_DMA7_UARTTX=10
+CONFIG_TIMER0=11
+CONFIG_TIMER1=11
+CONFIG_TIMER2=11
+CONFIG_PFA=12
+CONFIG_PFB=12
+CONFIG_MEMDMA0=13
+CONFIG_MEMDMA1=13
+CONFIG_WDTIMER=13
+
+#
+# Board customizations
+#
+# CONFIG_CMDLINE_BOOL is not set
+
+#
+# Clock/PLL Setup
+#
+CONFIG_CLKIN_HZ=25000000
+# CONFIG_BFIN_KERNEL_CLOCK is not set
+CONFIG_MAX_VCO_HZ=400000000
+CONFIG_MIN_VCO_HZ=50000000
+CONFIG_MAX_SCLK_HZ=133000000
+CONFIG_MIN_SCLK_HZ=27000000
+
+#
+# Kernel Timer/Scheduler
+#
+# 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
+
+#
+# Memory Setup
+#
+CONFIG_MEM_SIZE=32
+CONFIG_MEM_ADD_WIDTH=9
+CONFIG_BOOT_LOAD=0x1000
+CONFIG_BFIN_SCRATCH_REG_RETN=y
+# CONFIG_BFIN_SCRATCH_REG_RETE is not set
+# CONFIG_BFIN_SCRATCH_REG_CYCLES is not set
+
+#
+# Blackfin Kernel Optimizations
+#
+
+#
+# Memory Optimizations
+#
+CONFIG_I_ENTRY_L1=y
+CONFIG_EXCPT_IRQ_SYSC_L1=y
+CONFIG_DO_IRQ_L1=y
+CONFIG_CORE_TIMER_IRQ_L1=y
+CONFIG_IDLE_L1=y
+CONFIG_SCHEDULE_L1=y
+CONFIG_ARITHMETIC_OPS_L1=y
+CONFIG_ACCESS_OK_L1=y
+CONFIG_MEMSET_L1=y
+CONFIG_MEMCPY_L1=y
+CONFIG_SYS_BFIN_SPINLOCK_L1=y
+# CONFIG_IP_CHECKSUM_L1 is not set
+# CONFIG_CACHELINE_ALIGNED_L1 is not set
+# CONFIG_SYSCALL_TAB_L1 is not set
+# CONFIG_CPLB_SWITCH_TAB_L1 is not set
+CONFIG_RAMKERNEL=y
+# CONFIG_ROMKERNEL is not set
+CONFIG_SELECT_MEMORY_MODEL=y
+CONFIG_FLATMEM_MANUAL=y
+# CONFIG_DISCONTIGMEM_MANUAL is not set
+# CONFIG_SPARSEMEM_MANUAL is not set
+CONFIG_FLATMEM=y
+CONFIG_FLAT_NODE_MEM_MAP=y
+# CONFIG_SPARSEMEM_STATIC is not set
+CONFIG_SPLIT_PTLOCK_CPUS=4
+# CONFIG_RESOURCES_64BIT is not set
+CONFIG_ZONE_DMA_FLAG=1
+CONFIG_LARGE_ALLOCS=y
+CONFIG_BFIN_GPTIMERS=y
+CONFIG_BFIN_DMA_5XX=y
+# CONFIG_DMA_UNCACHED_2M is not set
+CONFIG_DMA_UNCACHED_1M=y
+# CONFIG_DMA_UNCACHED_NONE is not set
+
+#
+# Cache Support
+#
+CONFIG_BFIN_ICACHE=y
+CONFIG_BFIN_DCACHE=y
+# CONFIG_BFIN_DCACHE_BANKA is not set
+CONFIG_BFIN_ICACHE_LOCK=y
+CONFIG_BFIN_WB=y
+# CONFIG_BFIN_WT is not set
+CONFIG_L1_MAX_PIECE=16
+
+#
+# Asynchonous Memory Configuration
+#
+
+#
+# EBIU_AMGCTL Global Control
+#
+CONFIG_C_AMCKEN=y
+CONFIG_C_CDPRIO=y
+# CONFIG_C_AMBEN is not set
+# CONFIG_C_AMBEN_B0 is not set
+# CONFIG_C_AMBEN_B0_B1 is not set
+# CONFIG_C_AMBEN_B0_B1_B2 is not set
+CONFIG_C_AMBEN_ALL=y
+
+#
+# EBIU_AMBCTL Control
+#
+CONFIG_BANK_0=0x7BB0
+CONFIG_BANK_1=0x7BB0
+CONFIG_BANK_2=0x7BB0
+CONFIG_BANK_3=0x99B3
+
+#
+# Bus options (PCI, PCMCIA, EISA, MCA, ISA)
+#
+# CONFIG_PCI is not set
+# CONFIG_ARCH_SUPPORTS_MSI is not set
+
+#
+# PCCARD (PCMCIA/CardBus) support
+#
+# CONFIG_PCCARD is not set
+
+#
+# Executable file formats
+#
+CONFIG_BINFMT_ELF_FDPIC=y
+CONFIG_BINFMT_FLAT=y
+CONFIG_BINFMT_ZFLAT=y
+# CONFIG_BINFMT_SHARED_FLAT is not set
+# CONFIG_BINFMT_MISC is not set
+
+#
+# Power management options
+#
+CONFIG_PM=y
+CONFIG_PM_LEGACY=y
+# CONFIG_PM_DEBUG is not set
+# CONFIG_PM_SYSFS_DEPRECATED is not set
+CONFIG_PM_WAKEUP_GPIO_BY_SIC_IWR=y
+# CONFIG_PM_WAKEUP_BY_GPIO is not set
+# CONFIG_PM_WAKEUP_GPIO_API is not set
+CONFIG_PM_WAKEUP_SIC_IWR=0x100000
+
+#
+# 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_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 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=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_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_NETLABEL 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
+
+#
+# QoS and/or fair queueing
+#
+# CONFIG_NET_SCHED is not set
+
+#
+# Network testing
+#
+# CONFIG_NET_PKTGEN is not set
+# CONFIG_HAMRADIO is not set
+CONFIG_IRDA=m
+
+#
+# IrDA protocols
+#
+CONFIG_IRLAN=m
+CONFIG_IRCOMM=m
+# CONFIG_IRDA_ULTRA is not set
+
+#
+# IrDA options
+#
+CONFIG_IRDA_CACHE_LAST_LSAP=y
+# CONFIG_IRDA_FAST_RR is not set
+# CONFIG_IRDA_DEBUG is not set
+
+#
+# Infrared-port device drivers
+#
+
+#
+# SIR device drivers
+#
+CONFIG_IRTTY_SIR=m
+
+#
+# Dongle support
+#
+# CONFIG_DONGLE is not set
+
+#
+# Old SIR device drivers
+#
+# CONFIG_IRPORT_SIR is not set
+
+#
+# Old Serial dongle support
+#
+
+#
+# FIR device drivers
+#
+# 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
+
+#
+# Device Drivers
+#
+
+#
+# Generic Driver Options
+#
+CONFIG_STANDALONE=y
+CONFIG_PREVENT_FIRMWARE_BUILD=y
+# CONFIG_FW_LOADER is not set
+# CONFIG_SYS_HYPERVISOR is not set
+
+#
+# Connector - unified userspace <-> kernelspace linker
+#
+# 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
+
+#
+# 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
+
+#
+# RAM/ROM/Flash chip drivers
+#
+# CONFIG_MTD_CFI is not set
+# CONFIG_MTD_JEDECPROBE is not set
+CONFIG_MTD_MAP_BANK_WIDTH_1=y
+CONFIG_MTD_MAP_BANK_WIDTH_2=y
+CONFIG_MTD_MAP_BANK_WIDTH_4=y
+# CONFIG_MTD_MAP_BANK_WIDTH_8 is not set
+# CONFIG_MTD_MAP_BANK_WIDTH_16 is not set
+# CONFIG_MTD_MAP_BANK_WIDTH_32 is not set
+CONFIG_MTD_CFI_I1=y
+CONFIG_MTD_CFI_I2=y
+# CONFIG_MTD_CFI_I4 is not set
+# CONFIG_MTD_CFI_I8 is not set
+CONFIG_MTD_RAM=y
+CONFIG_MTD_ROM=y
+# CONFIG_MTD_ABSENT is not set
+
+#
+# Mapping drivers for chip access
+#
+CONFIG_MTD_COMPLEX_MAPPINGS=y
+# CONFIG_MTD_PHYSMAP is not set
+# CONFIG_MTD_BF5xx is not set
+# CONFIG_MTD_UCLINUX is not set
+# CONFIG_MTD_PLATRAM is not set
+
+#
+# Self-contained MTD device drivers
+#
+# CONFIG_MTD_DATAFLASH is not set
+CONFIG_MTD_M25P80=y
+CONFIG_M25PXX_USE_FAST_READ=y
+# 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
+
+#
+# Parallel port support
+#
+# CONFIG_PARPORT is not set
+
+#
+# Plug and Play support
+#
+# CONFIG_PNPACPI is not set
+
+#
+# Block devices
+#
+# 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_RAM=y
+CONFIG_BLK_DEV_RAM_COUNT=16
+CONFIG_BLK_DEV_RAM_SIZE=4096
+CONFIG_BLK_DEV_RAM_BLOCKSIZE=1024
+# CONFIG_CDROM_PKTCDVD is not set
+# CONFIG_ATA_OVER_ETH is not set
+
+#
+# Misc devices
+#
+# CONFIG_IDE is not set
+
+#
+# SCSI device support
+#
+# CONFIG_RAID_ATTRS is not set
+# CONFIG_SCSI is not set
+# CONFIG_SCSI_NETLINK is not set
+# CONFIG_ATA is not set
+
+#
+# Multi-device support (RAID and LVM)
+#
+# CONFIG_MD is not set
+
+#
+# Network device support
+#
+CONFIG_NETDEVICES=y
+# CONFIG_DUMMY is not set
+# CONFIG_BONDING is not set
+# CONFIG_EQUALIZER is not set
+# CONFIG_TUN is not set
+# CONFIG_PHYLIB is not set
+
+#
+# Ethernet (10 or 100Mbit)
+#
+CONFIG_NET_ETHERNET=y
+CONFIG_MII=y
+# CONFIG_SMC91X is not set
+# CONFIG_SMSC911X is not set
+CONFIG_DM9000=y
+CONFIG_NETDEV_1000=y
+CONFIG_NETDEV_10000=y
+# CONFIG_AX88180 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_SHAPER is not set
+# CONFIG_NETCONSOLE is not set
+# CONFIG_NETPOLL is not set
+# CONFIG_NET_POLL_CONTROLLER is not set
+
+#
+# ISDN subsystem
+#
+# CONFIG_ISDN is not set
+
+#
+# Telephony Support
+#
+# CONFIG_PHONE is not set
+
+#
+# Input device support
+#
+CONFIG_INPUT=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_TSDEV is not set
+CONFIG_INPUT_EVDEV=m
+# 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=y
+# CONFIG_INPUT_ATI_REMOTE is not set
+# CONFIG_INPUT_ATI_REMOTE2 is not set
+# CONFIG_INPUT_KEYSPAN_REMOTE is not set
+# CONFIG_INPUT_POWERMATE is not set
+# CONFIG_INPUT_YEALINK is not set
+# CONFIG_INPUT_UINPUT is not set
+# CONFIG_BF53X_PFBUTTONS is not set
+
+#
+# Hardware I/O ports
+#
+# CONFIG_SERIO is not set
+# CONFIG_GAMEPORT is not set
+
+#
+# Character devices
+#
+# CONFIG_AD9960 is not set
+# CONFIG_SPI_ADC_BF533 is not set
+CONFIG_BF5xx_PFLAGS=y
+# CONFIG_BF5xx_PFLAGS_PROC is not set
+# CONFIG_BF5xx_PPIFCD is not set
+CONFIG_BFIN_SIMPLE_TIMER=y
+# CONFIG_BF5xx_PPI is not set
+CONFIG_BFIN_SPORT=y
+CONFIG_BFIN_TIMER_LATENCY=y
+# CONFIG_AD5304 is not set
+# CONFIG_BF5xx_FBDMA is not set
+# 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_BFIN=y
+CONFIG_SERIAL_BFIN_CONSOLE=y
+CONFIG_SERIAL_BFIN_DMA=y
+# CONFIG_SERIAL_BFIN_PIO is not set
+CONFIG_SERIAL_BFIN_UART0=y
+# CONFIG_BFIN_UART0_CTSRTS is not set
+# CONFIG_SERIAL_BFIN_UART1 is not set
+CONFIG_SERIAL_CORE=y
+CONFIG_SERIAL_CORE_CONSOLE=y
+# CONFIG_SERIAL_BFIN_SPORT is not set
+CONFIG_UNIX98_PTYS=y
+# CONFIG_LEGACY_PTYS is not set
+
+#
+# CAN, the car bus and industrial fieldbus
+#
+# CONFIG_CAN4LINUX is not set
+
+#
+# IPMI
+#
+# CONFIG_IPMI_HANDLER is not set
+CONFIG_WATCHDOG=y
+# CONFIG_WATCHDOG_NOWAYOUT is not set
+
+#
+# Watchdog Device Drivers
+#
+# CONFIG_SOFT_WATCHDOG is not set
+# CONFIG_BFIN_WDT is not set
+# CONFIG_HW_RANDOM is not set
+# CONFIG_GEN_RTC is not set
+CONFIG_BLACKFIN_DPMC=y
+# CONFIG_R3964 is not set
+# CONFIG_RAW_DRIVER is not set
+
+#
+# TPM devices
+#
+# CONFIG_TCG_TPM is not set
+# CONFIG_I2C is not set
+
+#
+# SPI support
+#
+CONFIG_SPI=y
+CONFIG_SPI_MASTER=y
+
+#
+# SPI Master Controller Drivers
+#
+CONFIG_SPI_BFIN=y
+# CONFIG_SPI_BITBANG is not set
+
+#
+# SPI Protocol Masters
+#
+CONFIG_SPI_AT25=y
+CONFIG_SPI_SPIDEV=y
+
+#
+# Dallas's 1-wire bus
+#
+# CONFIG_W1 is not set
+CONFIG_HWMON=y
+# CONFIG_HWMON_VID is not set
+# CONFIG_SENSORS_ABITUGURU is not set
+# CONFIG_SENSORS_F71805F is not set
+# CONFIG_SENSORS_LM70 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_HWMON_DEBUG_CHIP 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_BACKLIGHT_LCD_SUPPORT is not set
+
+#
+# Display device support
+#
+# CONFIG_DISPLAY_SUPPORT is not set
+# CONFIG_VGASTATE is not set
+# CONFIG_FB is not set
+
+#
+# Sound
+#
+CONFIG_SOUND=m
+
+#
+# Advanced Linux Sound Architecture
+#
+CONFIG_SND=m
+CONFIG_SND_TIMER=m
+CONFIG_SND_PCM=m
+# CONFIG_SND_SEQUENCER is not set
+CONFIG_SND_OSSEMUL=y
+CONFIG_SND_MIXER_OSS=m
+CONFIG_SND_PCM_OSS=m
+CONFIG_SND_PCM_OSS_PLUGINS=y
+# CONFIG_SND_DYNAMIC_MINORS is not set
+CONFIG_SND_SUPPORT_OLD_API=y
+CONFIG_SND_VERBOSE_PROCFS=y
+# CONFIG_SND_VERBOSE_PRINTK is not set
+# CONFIG_SND_DEBUG is not set
+
+#
+# Generic devices
+#
+# 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
+
+#
+# ALSA Blackfin devices
+#
+CONFIG_SND_BLACKFIN_AD1836=m
+CONFIG_SND_BLACKFIN_AD1836_TDM=y
+# CONFIG_SND_BLACKFIN_AD1836_I2S is not set
+CONFIG_SND_BLACKFIN_AD1836_MULSUB=y
+# CONFIG_SND_BLACKFIN_AD1836_5P1 is not set
+CONFIG_SND_BLACKFIN_SPORT=0
+CONFIG_SND_BLACKFIN_SPI_PFBIT=4
+# CONFIG_SND_BFIN_AD73311 is not set
+
+#
+# System on Chip audio support
+#
+# CONFIG_SND_SOC is not set
+
+#
+# Open Sound System
+#
+# CONFIG_SOUND_PRIME is not set
+
+#
+# HID Devices
+#
+CONFIG_HID=y
+# CONFIG_HID_DEBUG is not set
+
+#
+# USB support
+#
+CONFIG_USB_ARCH_HAS_HCD=y
+# CONFIG_USB_ARCH_HAS_OHCI is not set
+# CONFIG_USB_ARCH_HAS_EHCI is not set
+# CONFIG_USB is not set
+
+#
+# Enable Host or Gadget support to see Inventra options
+#
+
+#
+# NOTE: USB_STORAGE enables SCSI, and 'SCSI disk support'
+#
+
+#
+# USB Gadget Support
+#
+# CONFIG_USB_GADGET is not set
+# CONFIG_MMC is not set
+
+#
+# LED devices
+#
+# CONFIG_NEW_LEDS is not set
+
+#
+# LED drivers
+#
+
+#
+# LED Triggers
+#
+
+#
+# InfiniBand support
+#
+
+#
+# EDAC - error detection and reporting (RAS) (EXPERIMENTAL)
+#
+
+#
+# Real Time Clock
+#
+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
+#
+
+#
+# SPI RTC drivers
+#
+# CONFIG_RTC_DRV_RS5C348 is not set
+# CONFIG_RTC_DRV_MAX6902 is not set
+
+#
+# Platform RTC drivers
+#
+# CONFIG_RTC_DRV_DS1553 is not set
+# CONFIG_RTC_DRV_DS1742 is not set
+# CONFIG_RTC_DRV_M48T86 is not set
+# CONFIG_RTC_DRV_V3020 is not set
+
+#
+# on-CPU RTC drivers
+#
+CONFIG_RTC_DRV_BFIN=y
+
+#
+# DMA Engine support
+#
+# CONFIG_DMA_ENGINE is not set
+
+#
+# DMA Clients
+#
+
+#
+# DMA Devices
+#
+
+#
+# PBX support
+#
+# CONFIG_PBX is not set
+
+#
+# File systems
+#
+CONFIG_EXT2_FS=y
+CONFIG_EXT2_FS_XATTR=y
+# CONFIG_EXT2_FS_POSIX_ACL is not set
+# CONFIG_EXT2_FS_SECURITY is not set
+# CONFIG_EXT3_FS is not set
+# CONFIG_EXT4DEV_FS 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_SYSCTL=y
+CONFIG_SYSFS=y
+# CONFIG_TMPFS is not set
+# CONFIG_HUGETLB_PAGE is not set
+CONFIG_RAMFS=y
+# CONFIG_CONFIGFS_FS is not set
+
+#
+# Miscellaneous filesystems
+#
+# CONFIG_ADFS_FS is not set
+# CONFIG_AFFS_FS is not set
+# CONFIG_HFS_FS is not set
+# CONFIG_HFSPLUS_FS is not set
+# CONFIG_BEFS_FS is not set
+# CONFIG_BFS_FS is not set
+# CONFIG_EFS_FS is not set
+# CONFIG_YAFFS_FS is not set
+CONFIG_JFFS2_FS=y
+CONFIG_JFFS2_FS_DEBUG=0
+CONFIG_JFFS2_FS_WRITEBUFFER=y
+# CONFIG_JFFS2_SUMMARY is not set
+# CONFIG_JFFS2_FS_XATTR is not set
+# CONFIG_JFFS2_COMPRESSION_OPTIONS is not set
+CONFIG_JFFS2_ZLIB=y
+CONFIG_JFFS2_RTIME=y
+# CONFIG_JFFS2_RUBIN 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
+
+#
+# Network File Systems
+#
+CONFIG_NFS_FS=m
+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_LOCKD=m
+CONFIG_LOCKD_V4=y
+CONFIG_NFS_COMMON=y
+CONFIG_SUNRPC=m
+# 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
+# CONFIG_9P_FS is not set
+
+#
+# Partition Types
+#
+# CONFIG_PARTITION_ADVANCED is not set
+CONFIG_MSDOS_PARTITION=y
+
+#
+# Native Language Support
+#
+CONFIG_NLS=m
+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
+
+#
+# Distributed Lock Manager
+#
+# CONFIG_DLM is not set
+
+#
+# Profiling support
+#
+# CONFIG_PROFILING is not set
+
+#
+# Kernel hacking
+#
+# CONFIG_PRINTK_TIME is not set
+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_DEBUG_MMRS is not set
+CONFIG_DEBUG_HUNT_FOR_ZERO=y
+CONFIG_DEBUG_BFIN_HWTRACE_ON=y
+CONFIG_DEBUG_BFIN_HWTRACE_COMPRESSION_OFF=y
+# CONFIG_DEBUG_BFIN_HWTRACE_COMPRESSION_ONE is not set
+# CONFIG_DEBUG_BFIN_HWTRACE_COMPRESSION_TWO is not set
+CONFIG_DEBUG_BFIN_HWTRACE_COMPRESSION=0
+# CONFIG_DEBUG_BFIN_HWTRACE_EXPAND is not set
+# CONFIG_DEBUG_BFIN_NO_KERN_HWTRACE is not set
+# CONFIG_EARLY_PRINTK is not set
+CONFIG_CPLB_INFO=y
+CONFIG_ACCESS_CHECK=y
+
+#
+# Security options
+#
+# CONFIG_KEYS is not set
+CONFIG_SECURITY=y
+# CONFIG_SECURITY_NETWORK is not set
+CONFIG_SECURITY_CAPABILITIES=y
+
+#
+# Cryptographic options
+#
+# CONFIG_CRYPTO 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_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
index 3d403e0b82c21b6487cc99e7e5e88550302b7d81..25709f504d8f6f4f7874c5ccef392e90748c1b6a 100644 (file)
@@ -1,6 +1,6 @@
 #
 # Automatically generated make config: don't edit
-# Linux kernel version: 2.6.22.6
+# Linux kernel version: 2.6.22.12
 #
 # CONFIG_MMU is not set
 # CONFIG_FPU is not set
@@ -8,7 +8,6 @@ CONFIG_RWSEM_GENERIC_SPINLOCK=y
 # CONFIG_RWSEM_XCHGADD_ALGORITHM is not set
 CONFIG_BLACKFIN=y
 CONFIG_ZONE_DMA=y
-CONFIG_BFIN=y
 CONFIG_SEMAPHORE_SLEEPERS=y
 CONFIG_GENERIC_FIND_NEXT_BIT=y
 CONFIG_GENERIC_HWEIGHT=y
@@ -18,7 +17,6 @@ CONFIG_GENERIC_IRQ_PROBE=y
 CONFIG_GENERIC_GPIO=y
 CONFIG_FORCE_MAX_ZONEORDER=14
 CONFIG_GENERIC_CALIBRATE_DELAY=y
-CONFIG_IRQCHIP_DEMUX_GPIO=y
 CONFIG_DEFCONFIG_LIST="/lib/modules/$UNAME_RELEASE/.config"
 
 #
@@ -62,7 +60,6 @@ CONFIG_FUTEX=y
 CONFIG_ANON_INODES=y
 CONFIG_EPOLL=y
 CONFIG_SIGNALFD=y
-CONFIG_TIMERFD=y
 CONFIG_EVENTFD=y
 CONFIG_VM_EVENT_COUNTERS=y
 CONFIG_BIG_ORDER_ALLOC_NOFAIL_MAGIC=9
@@ -115,6 +112,9 @@ CONFIG_PREEMPT_VOLUNTARY=y
 #
 # Processor and Board Settings
 #
+# CONFIG_BF522 is not set
+# CONFIG_BF525 is not set
+# CONFIG_BF527 is not set
 # CONFIG_BF531 is not set
 # CONFIG_BF532 is not set
 # CONFIG_BF533 is not set
@@ -123,10 +123,12 @@ CONFIG_PREEMPT_VOLUNTARY=y
 CONFIG_BF537=y
 # CONFIG_BF542 is not set
 # CONFIG_BF544 is not set
+# CONFIG_BF547 is not set
 # CONFIG_BF548 is not set
 # CONFIG_BF549 is not set
 # CONFIG_BF561 is not set
 # CONFIG_BF_REV_0_0 is not set
+# CONFIG_BF_REV_0_1 is not set
 CONFIG_BF_REV_0_2=y
 # CONFIG_BF_REV_0_3 is not set
 # CONFIG_BF_REV_0_4 is not set
@@ -135,33 +137,8 @@ CONFIG_BF_REV_0_2=y
 # CONFIG_BF_REV_NONE is not set
 CONFIG_BF53x=y
 CONFIG_BFIN_SINGLE_CORE=y
-# CONFIG_BFIN533_EZKIT is not set
-# CONFIG_BFIN533_STAMP is not set
-# CONFIG_BFIN537_STAMP is not set
-# CONFIG_BFIN533_BLUETECHNIX_CM is not set
-# CONFIG_BFIN537_BLUETECHNIX_CM is not set
-# CONFIG_BFIN548_EZKIT is not set
-# CONFIG_BFIN561_BLUETECHNIX_CM is not set
-# CONFIG_BFIN561_EZKIT is not set
-# CONFIG_BFIN561_TEPLA is not set
-CONFIG_PNAV10=y
-# CONFIG_GENERIC_BOARD is not set
 CONFIG_MEM_MT48LC32M8A2_75=y
 CONFIG_IRQ_PLL_WAKEUP=7
-
-#
-# BF537 Specific Configuration
-#
-
-#
-# Interrupt Priority Assignment
-#
-
-#
-# Priority
-#
-CONFIG_IRQ_DMA_ERROR=7
-CONFIG_IRQ_ERROR=7
 CONFIG_IRQ_RTC=8
 CONFIG_IRQ_PPI=8
 CONFIG_IRQ_SPORT0_RX=9
@@ -174,8 +151,6 @@ CONFIG_IRQ_UART0_RX=10
 CONFIG_IRQ_UART0_TX=10
 CONFIG_IRQ_UART1_RX=10
 CONFIG_IRQ_UART1_TX=10
-CONFIG_IRQ_CAN_RX=11
-CONFIG_IRQ_CAN_TX=11
 CONFIG_IRQ_MAC_RX=11
 CONFIG_IRQ_MAC_TX=11
 CONFIG_IRQ_TMR0=12
@@ -186,11 +161,31 @@ CONFIG_IRQ_TMR4=12
 CONFIG_IRQ_TMR5=12
 CONFIG_IRQ_TMR6=12
 CONFIG_IRQ_TMR7=12
-CONFIG_IRQ_PROG_INTA=12
 CONFIG_IRQ_PORTG_INTB=12
 CONFIG_IRQ_MEM_DMA0=13
 CONFIG_IRQ_MEM_DMA1=13
 CONFIG_IRQ_WATCH=13
+# CONFIG_BFIN537_STAMP is not set
+# CONFIG_BFIN537_BLUETECHNIX_CM is not set
+CONFIG_PNAV10=y
+# CONFIG_GENERIC_BF537_BOARD is not set
+
+#
+# BF537 Specific Configuration
+#
+
+#
+# Interrupt Priority Assignment
+#
+
+#
+# Priority
+#
+CONFIG_IRQ_DMA_ERROR=7
+CONFIG_IRQ_ERROR=7
+CONFIG_IRQ_CAN_RX=11
+CONFIG_IRQ_CAN_TX=11
+CONFIG_IRQ_PROG_INTA=12
 
 #
 # Board customizations
@@ -204,7 +199,7 @@ CONFIG_CLKIN_HZ=24576000
 # CONFIG_BFIN_KERNEL_CLOCK is not set
 CONFIG_MAX_VCO_HZ=600000000
 CONFIG_MIN_VCO_HZ=50000000
-CONFIG_MAX_SCLK_HZ=133333333
+CONFIG_MAX_SCLK_HZ=133000000
 CONFIG_MIN_SCLK_HZ=27000000
 
 #
@@ -261,6 +256,7 @@ CONFIG_SPLIT_PTLOCK_CPUS=4
 # CONFIG_RESOURCES_64BIT is not set
 CONFIG_ZONE_DMA_FLAG=1
 CONFIG_LARGE_ALLOCS=y
+# CONFIG_BFIN_GPTIMERS is not set
 CONFIG_BFIN_DMA_5XX=y
 # CONFIG_DMA_UNCACHED_2M is not set
 CONFIG_DMA_UNCACHED_1M=y
@@ -282,7 +278,7 @@ CONFIG_L1_MAX_PIECE=16
 #
 
 #
-# EBIU_AMBCTL Global Control
+# EBIU_AMGCTL Global Control
 #
 CONFIG_C_AMCKEN=y
 CONFIG_C_CDPRIO=y
@@ -593,6 +589,7 @@ CONFIG_BFIN_MAC_RMII=y
 # CONFIG_DM9000 is not set
 CONFIG_NETDEV_1000=y
 CONFIG_NETDEV_10000=y
+# CONFIG_AX88180 is not set
 
 #
 # Wireless LAN
@@ -675,9 +672,9 @@ CONFIG_INPUT_UINPUT=y
 #
 # CONFIG_AD9960 is not set
 # CONFIG_SPI_ADC_BF533 is not set
-# CONFIG_BFIN_PFLAGS is not set
+# CONFIG_BF5xx_PFLAGS is not set
 # CONFIG_BF5xx_PPIFCD is not set
-# CONFIG_BF5xx_TIMERS is not set
+# CONFIG_BFIN_SIMPLE_TIMER is not set
 # CONFIG_BF5xx_PPI is not set
 CONFIG_BFIN_SPORT=y
 # CONFIG_BFIN_TIMER_LATENCY is not set
@@ -897,6 +894,7 @@ CONFIG_FB_BF537_LQ035=y
 CONFIG_LQ035_SLAVE_ADDR=0x58
 CONFIG_FB_BFIN_LANDSCAPE=y
 # CONFIG_FB_BFIN_BGR is not set
+# CONFIG_FB_BFIN_T350MCQB is not set
 # CONFIG_FB_S1D13XXX is not set
 # CONFIG_FB_VIRTUAL is not set
 # CONFIG_LOGO is not set
@@ -938,11 +936,6 @@ CONFIG_SND=m
 #
 # CONFIG_SND_SOC is not set
 
-#
-# SoC Audio for the ADI Blackfin
-#
-# CONFIG_SND_BF5XX_HAVE_COLD_RESET is not set
-
 #
 # Open Sound System
 #
index 503eef4c7fec26b831476be01e98a532a2a25e96..b54446055a43c3360ba8551ef5a80e1205664d4e 100644 (file)
@@ -436,6 +436,7 @@ unsigned long get_dma_curr_desc_ptr(unsigned int channel)
 
        return dma_ch[channel].regs->curr_desc_ptr;
 }
+EXPORT_SYMBOL(get_dma_curr_desc_ptr);
 
 unsigned long get_dma_curr_addr(unsigned int channel)
 {
index 2198afe40f338efae030e7516055cf2596936c6d..0bfbb269e350ce49835acb94e0bd432fef280275 100644 (file)
@@ -37,9 +37,6 @@
 /* platform dependent support */
 
 EXPORT_SYMBOL(__ioremap);
-EXPORT_SYMBOL(strcmp);
-EXPORT_SYMBOL(strncmp);
-EXPORT_SYMBOL(dump_thread);
 
 EXPORT_SYMBOL(ip_fast_csum);
 
@@ -51,6 +48,7 @@ EXPORT_SYMBOL(__down_trylock);
 EXPORT_SYMBOL(__down_interruptible);
 
 EXPORT_SYMBOL(is_in_rom);
+EXPORT_SYMBOL(bfin_return_from_exception);
 
 /* Networking helper routines. */
 EXPORT_SYMBOL(csum_partial_copy);
@@ -60,13 +58,11 @@ EXPORT_SYMBOL(csum_partial_copy);
  * their interface isn't gonna change any time soon now, so
  * it's OK to leave it out of version control.
  */
-EXPORT_SYMBOL(strcpy);
 EXPORT_SYMBOL(memcpy);
 EXPORT_SYMBOL(memset);
 EXPORT_SYMBOL(memcmp);
 EXPORT_SYMBOL(memmove);
 EXPORT_SYMBOL(memchr);
-EXPORT_SYMBOL(get_wchan);
 
 /*
  * libgcc functions - functions that are used internally by the
@@ -102,6 +98,7 @@ EXPORT_SYMBOL(outsw);
 EXPORT_SYMBOL(insw);
 EXPORT_SYMBOL(outsl);
 EXPORT_SYMBOL(insl);
+EXPORT_SYMBOL(insl_16);
 EXPORT_SYMBOL(irq_flags);
 EXPORT_SYMBOL(iounmap);
 EXPORT_SYMBOL(blackfin_dcache_invalidate_range);
index f2db6a5e2b5b987852828d4a95cadf88923d005c..6320bc45fbba6b6d55c1e803bde124732646700a 100644 (file)
 #include <asm/cplb.h>
 #include <asm/cplbinit.h>
 
-u_long icplb_table[MAX_CPLBS+1];
-u_long dcplb_table[MAX_CPLBS+1];
+u_long icplb_table[MAX_CPLBS + 1];
+u_long dcplb_table[MAX_CPLBS + 1];
 
 #ifdef CONFIG_CPLB_SWITCH_TAB_L1
-u_long ipdt_table[MAX_SWITCH_I_CPLBS+1]__attribute__((l1_data));
-u_long dpdt_table[MAX_SWITCH_D_CPLBS+1]__attribute__((l1_data));
-
-#ifdef CONFIG_CPLB_INFO
-u_long ipdt_swapcount_table[MAX_SWITCH_I_CPLBS]__attribute__((l1_data));
-u_long dpdt_swapcount_table[MAX_SWITCH_D_CPLBS]__attribute__((l1_data));
-#endif /* CONFIG_CPLB_INFO */
-
+# define PDT_ATTR __attribute__((l1_data))
 #else
+# define PDT_ATTR
+#endif
 
-u_long ipdt_table[MAX_SWITCH_I_CPLBS+1];
-u_long dpdt_table[MAX_SWITCH_D_CPLBS+1];
+u_long ipdt_table[MAX_SWITCH_I_CPLBS + 1] PDT_ATTR;
+u_long dpdt_table[MAX_SWITCH_D_CPLBS + 1] PDT_ATTR;
 
 #ifdef CONFIG_CPLB_INFO
-u_long ipdt_swapcount_table[MAX_SWITCH_I_CPLBS];
-u_long dpdt_swapcount_table[MAX_SWITCH_D_CPLBS];
-#endif /* CONFIG_CPLB_INFO */
-
-#endif /*CONFIG_CPLB_SWITCH_TAB_L1*/
+u_long ipdt_swapcount_table[MAX_SWITCH_I_CPLBS] PDT_ATTR;
+u_long dpdt_swapcount_table[MAX_SWITCH_D_CPLBS] PDT_ATTR;
+#endif
 
 struct s_cplb {
        struct cplb_tab init_i;
@@ -71,7 +64,7 @@ static struct cplb_desc cplb_data[] = {
 #else
                .valid = 0,
 #endif
-               .name = "ZERO Pointer Saveguard",
+               .name = "Zero Pointer Guard Page",
        },
        {
                .start = L1_CODE_START,
@@ -102,20 +95,20 @@ static struct cplb_desc cplb_data[] = {
                .end = 0,  /* dynamic */
                .psize = 0,
                .attr = INITIAL_T | SWITCH_T | I_CPLB | D_CPLB,
-               .i_conf =  SDRAM_IGENERIC,
-               .d_conf =  SDRAM_DGENERIC,
+               .i_conf = SDRAM_IGENERIC,
+               .d_conf = SDRAM_DGENERIC,
                .valid = 1,
-               .name = "SDRAM Kernel",
+               .name = "Kernel Memory",
        },
        {
                .start = 0, /* dynamic */
                .end = 0, /* dynamic */
                .psize = 0,
                .attr = INITIAL_T | SWITCH_T | D_CPLB,
-               .i_conf =  SDRAM_IGENERIC,
-               .d_conf =  SDRAM_DNON_CHBL,
+               .i_conf = SDRAM_IGENERIC,
+               .d_conf = SDRAM_DNON_CHBL,
                .valid = 1,
-               .name = "SDRAM RAM MTD",
+               .name = "uClinux MTD Memory",
        },
        {
                .start = 0, /* dynamic */
@@ -124,7 +117,7 @@ static struct cplb_desc cplb_data[] = {
                .attr = INITIAL_T | SWITCH_T | D_CPLB,
                .d_conf = SDRAM_DNON_CHBL,
                .valid = 1,
-               .name = "SDRAM Uncached DMA ZONE",
+               .name = "Uncached DMA Zone",
        },
        {
                .start = 0, /* dynamic */
@@ -134,7 +127,7 @@ static struct cplb_desc cplb_data[] = {
                .i_conf = 0, /* dynamic */
                .d_conf = 0, /* dynamic */
                .valid = 1,
-               .name = "SDRAM Reserved Memory",
+               .name = "Reserved Memory",
        },
        {
                .start = ASYNC_BANK0_BASE,
@@ -143,14 +136,14 @@ static struct cplb_desc cplb_data[] = {
                .attr = SWITCH_T | D_CPLB,
                .d_conf = SDRAM_EBIU,
                .valid = 1,
-               .name = "ASYNC Memory",
+               .name = "Asynchronous Memory Banks",
        },
        {
-#if defined(CONFIG_BF561)
-               .start = L2_SRAM,
-               .end = L2_SRAM_END,
+#ifdef L2_START
+               .start = L2_START,
+               .end = L2_START + L2_LENGTH,
                .psize = SIZE_1M,
-               .attr = SWITCH_T | D_CPLB,
+               .attr = SWITCH_T | I_CPLB | D_CPLB,
                .i_conf = L2_MEMORY,
                .d_conf = L2_MEMORY,
                .valid = 1,
@@ -158,13 +151,23 @@ static struct cplb_desc cplb_data[] = {
                .valid = 0,
 #endif
                .name = "L2 Memory",
-       }
+       },
+       {
+               .start = BOOT_ROM_START,
+               .end = BOOT_ROM_START + BOOT_ROM_LENGTH,
+               .psize = SIZE_1M,
+               .attr = SWITCH_T | I_CPLB | D_CPLB,
+               .i_conf = SDRAM_IGENERIC,
+               .d_conf = SDRAM_DGENERIC,
+               .valid = 1,
+               .name = "On-Chip BootROM",
+       },
 };
 
 static u16 __init lock_kernel_check(u32 start, u32 end)
 {
-       if ((start <= (u32) _stext && end >= (u32) _end)
-           || (start >= (u32) _stext && end <= (u32) _end))
+       if ((end   <= (u32) _end && end   >= (u32)_stext) ||
+           (start <= (u32) _end && start >= (u32)_stext))
                return IN_KERNEL;
        return 0;
 }
@@ -350,7 +353,7 @@ void __init generate_cpl_tables(void)
        else
                cplb_data[RES_MEM].i_conf = SDRAM_INON_CHBL;
 
-       for (i = ZERO_P; i <= L2_MEM; i++) {
+       for (i = ZERO_P; i < ARRAY_SIZE(cplb_data); ++i) {
                if (!cplb_data[i].valid)
                        continue;
 
index 6ec518a81113c2571df593dd6fe6f2e08c7a24ec..724f4a5a1d46b3339bdc9047750eb7dffc3e7470 100644 (file)
@@ -205,7 +205,8 @@ asmlinkage void __init early_trap_c(struct pt_regs *fp, void *retaddr)
        if (likely(early_console == NULL))
                setup_early_printk(DEFAULT_EARLY_PORT);
 
-       dump_bfin_regs(fp, retaddr);
+       dump_bfin_mem((void *)fp->retx);
+       show_regs(fp);
        dump_bfin_trace_buffer();
 
        panic("Died early");
index 9124467651c4a794659b147f37e874b603524521..5bf15125f0d6064fa14f6e5ce4b6cccd4847cd59 100644 (file)
@@ -134,27 +134,6 @@ void cpu_idle(void)
        }
 }
 
-void show_regs(struct pt_regs *regs)
-{
-       printk(KERN_NOTICE "\n");
-       printk(KERN_NOTICE
-              "PC: %08lu  Status: %04lu  SysStatus: %04lu  RETS: %08lu\n",
-              regs->pc, regs->astat, regs->seqstat, regs->rets);
-       printk(KERN_NOTICE
-              "A0.x: %08lx  A0.w: %08lx  A1.x: %08lx  A1.w: %08lx\n",
-              regs->a0x, regs->a0w, regs->a1x, regs->a1w);
-       printk(KERN_NOTICE "P0: %08lx  P1: %08lx  P2: %08lx  P3: %08lx\n",
-              regs->p0, regs->p1, regs->p2, regs->p3);
-       printk(KERN_NOTICE "P4: %08lx  P5: %08lx\n", regs->p4, regs->p5);
-       printk(KERN_NOTICE "R0: %08lx  R1: %08lx  R2: %08lx  R3: %08lx\n",
-              regs->r0, regs->r1, regs->r2, regs->r3);
-       printk(KERN_NOTICE "R4: %08lx  R5: %08lx  R6: %08lx  R7: %08lx\n",
-              regs->r4, regs->r5, regs->r6, regs->r7);
-
-       if (!regs->ipend)
-               printk(KERN_NOTICE "USP: %08lx\n", rdusp());
-}
-
 /* Fill in the fpu structure for a core dump.  */
 
 int dump_fpu(struct pt_regs *regs, elf_fpregset_t * fpregs)
@@ -238,51 +217,6 @@ copy_thread(int nr, unsigned long clone_flags,
        return 0;
 }
 
-/*
- * fill in the user structure for a core dump..
- */
-void dump_thread(struct pt_regs *regs, struct user *dump)
-{
-       dump->magic = CMAGIC;
-       dump->start_code = 0;
-       dump->start_stack = rdusp() & ~(PAGE_SIZE - 1);
-       dump->u_tsize = ((unsigned long)current->mm->end_code) >> PAGE_SHIFT;
-       dump->u_dsize = ((unsigned long)(current->mm->brk +
-                                        (PAGE_SIZE - 1))) >> PAGE_SHIFT;
-       dump->u_dsize -= dump->u_tsize;
-       dump->u_ssize = 0;
-
-       if (dump->start_stack < TASK_SIZE)
-               dump->u_ssize =
-                   ((unsigned long)(TASK_SIZE -
-                                    dump->start_stack)) >> PAGE_SHIFT;
-
-       dump->u_ar0 = (struct user_regs_struct *)((int)&dump->regs - (int)dump);
-
-       dump->regs.r0 = regs->r0;
-       dump->regs.r1 = regs->r1;
-       dump->regs.r2 = regs->r2;
-       dump->regs.r3 = regs->r3;
-       dump->regs.r4 = regs->r4;
-       dump->regs.r5 = regs->r5;
-       dump->regs.r6 = regs->r6;
-       dump->regs.r7 = regs->r7;
-       dump->regs.p0 = regs->p0;
-       dump->regs.p1 = regs->p1;
-       dump->regs.p2 = regs->p2;
-       dump->regs.p3 = regs->p3;
-       dump->regs.p4 = regs->p4;
-       dump->regs.p5 = regs->p5;
-       dump->regs.orig_p0 = regs->orig_p0;
-       dump->regs.a0w = regs->a0w;
-       dump->regs.a1w = regs->a1w;
-       dump->regs.a0x = regs->a0x;
-       dump->regs.a1x = regs->a1x;
-       dump->regs.rets = regs->rets;
-       dump->regs.astat = regs->astat;
-       dump->regs.pc = regs->pc;
-}
-
 /*
  * sys_execve() executes a new program.
  */
index 934234f438390d8ddfb11c664528bfe984cc297d..d2822010b7ce4318ef2eed5446c9a7694fb10489 100644 (file)
@@ -43,6 +43,7 @@
 #include <asm/cacheflush.h>
 #include <asm/blackfin.h>
 #include <asm/cplbinit.h>
+#include <asm/div64.h>
 #include <asm/fixed_code.h>
 #include <asm/early_printk.h>
 
@@ -504,13 +505,17 @@ EXPORT_SYMBOL(get_sclk);
 
 unsigned long sclk_to_usecs(unsigned long sclk)
 {
-       return (USEC_PER_SEC * (u64)sclk) / get_sclk();
+       u64 tmp = USEC_PER_SEC * (u64)sclk;
+       do_div(tmp, get_sclk());
+       return tmp;
 }
 EXPORT_SYMBOL(sclk_to_usecs);
 
 unsigned long usecs_to_sclk(unsigned long usecs)
 {
-       return (get_sclk() * (u64)usecs) / USEC_PER_SEC;
+       u64 tmp = get_sclk() * (u64)usecs;
+       do_div(tmp, USEC_PER_SEC);
+       return tmp;
 }
 EXPORT_SYMBOL(usecs_to_sclk);
 
index cfa05436c9723e5f221e323b9e38ffd513730f5a..21a55ef19cbd3d89fe8213a6f1ba442156584178 100644 (file)
@@ -158,7 +158,7 @@ static void decode_address(char *buf, unsigned long address)
        }
 
        /* we were unable to find this address anywhere */
-       sprintf(buf, "[<0x%p>]", (void *)address);
+       sprintf(buf, "<0x%p> /* unknown address */", (void *)address);
 
 done:
        write_unlock_irqrestore(&tasklist_lock, flags);
@@ -169,7 +169,9 @@ asmlinkage void double_fault_c(struct pt_regs *fp)
        console_verbose();
        oops_in_progress = 1;
        printk(KERN_EMERG "\n" KERN_EMERG "Double Fault\n");
-       dump_bfin_regs(fp, (void *)fp->retx);
+       dump_bfin_process(fp);
+       dump_bfin_mem((void *)fp->retx);
+       show_regs(fp);
        panic("Double Fault - unrecoverable event\n");
 
 }
@@ -250,7 +252,7 @@ asmlinkage void trap_c(struct pt_regs *fp)
        case VEC_EXCPT03:
                info.si_code = SEGV_STACKFLOW;
                sig = SIGSEGV;
-               printk(KERN_NOTICE EXC_0x03);
+               printk(KERN_NOTICE EXC_0x03(KERN_NOTICE));
                CHK_DEBUGGER_TRAP();
                break;
        /* 0x04 - User Defined, Caught by default */
@@ -279,7 +281,7 @@ asmlinkage void trap_c(struct pt_regs *fp)
        case VEC_OVFLOW:
                info.si_code = TRAP_TRACEFLOW;
                sig = SIGTRAP;
-               printk(KERN_NOTICE EXC_0x11);
+               printk(KERN_NOTICE EXC_0x11(KERN_NOTICE));
                CHK_DEBUGGER_TRAP();
                break;
        /* 0x12 - Reserved, Caught by default */
@@ -301,36 +303,35 @@ asmlinkage void trap_c(struct pt_regs *fp)
        case VEC_UNDEF_I:
                info.si_code = ILL_ILLOPC;
                sig = SIGILL;
-               printk(KERN_NOTICE EXC_0x21);
+               printk(KERN_NOTICE EXC_0x21(KERN_NOTICE));
                CHK_DEBUGGER_TRAP();
                break;
        /* 0x22 - Illegal Instruction Combination, handled here */
        case VEC_ILGAL_I:
                info.si_code = ILL_ILLPARAOP;
                sig = SIGILL;
-               printk(KERN_NOTICE EXC_0x22);
+               printk(KERN_NOTICE EXC_0x22(KERN_NOTICE));
                CHK_DEBUGGER_TRAP();
                break;
-       /* 0x23 - Data CPLB Protection Violation,
-                normal case is handled in _cplb_hdr */
+       /* 0x23 - Data CPLB protection violation, handled here */
        case VEC_CPLB_VL:
                info.si_code = ILL_CPLB_VI;
-               sig = SIGILL;
-               printk(KERN_NOTICE EXC_0x23);
+               sig = SIGBUS;
+               printk(KERN_NOTICE EXC_0x23(KERN_NOTICE));
                CHK_DEBUGGER_TRAP();
                break;
        /* 0x24 - Data access misaligned, handled here */
        case VEC_MISALI_D:
                info.si_code = BUS_ADRALN;
                sig = SIGBUS;
-               printk(KERN_NOTICE EXC_0x24);
+               printk(KERN_NOTICE EXC_0x24(KERN_NOTICE));
                CHK_DEBUGGER_TRAP();
                break;
        /* 0x25 - Unrecoverable Event, handled here */
        case VEC_UNCOV:
                info.si_code = ILL_ILLEXCPT;
                sig = SIGILL;
-               printk(KERN_NOTICE EXC_0x25);
+               printk(KERN_NOTICE EXC_0x25(KERN_NOTICE));
                CHK_DEBUGGER_TRAP();
                break;
        /* 0x26 - Data CPLB Miss, normal case is handled in _cplb_hdr,
@@ -338,7 +339,7 @@ asmlinkage void trap_c(struct pt_regs *fp)
        case VEC_CPLB_M:
                info.si_code = BUS_ADRALN;
                sig = SIGBUS;
-               printk(KERN_NOTICE EXC_0x26);
+               printk(KERN_NOTICE EXC_0x26(KERN_NOTICE));
                CHK_DEBUGGER_TRAP();
                break;
        /* 0x27 - Data CPLB Multiple Hits - Linux Trap Zero, handled here */
@@ -349,7 +350,7 @@ asmlinkage void trap_c(struct pt_regs *fp)
                printk(KERN_NOTICE "NULL pointer access (probably)\n");
 #else
                sig = SIGILL;
-               printk(KERN_NOTICE EXC_0x27);
+               printk(KERN_NOTICE EXC_0x27(KERN_NOTICE));
 #endif
                CHK_DEBUGGER_TRAP();
                break;
@@ -357,7 +358,7 @@ asmlinkage void trap_c(struct pt_regs *fp)
        case VEC_WATCH:
                info.si_code = TRAP_WATCHPT;
                sig = SIGTRAP;
-               pr_debug(EXC_0x28);
+               pr_debug(EXC_0x28(KERN_DEBUG));
                CHK_DEBUGGER_TRAP_MAYBE();
                /* Check if this is a watchpoint in kernel space */
                if (fp->ipend & 0xffc0)
@@ -379,22 +380,21 @@ asmlinkage void trap_c(struct pt_regs *fp)
        case VEC_MISALI_I:
                info.si_code = BUS_ADRALN;
                sig = SIGBUS;
-               printk(KERN_NOTICE EXC_0x2A);
+               printk(KERN_NOTICE EXC_0x2A(KERN_NOTICE));
                CHK_DEBUGGER_TRAP();
                break;
-       /* 0x2B - Instruction CPLB protection Violation,
-               handled in _cplb_hdr */
+       /* 0x2B - Instruction CPLB protection violation, handled here */
        case VEC_CPLB_I_VL:
                info.si_code = ILL_CPLB_VI;
-               sig = SIGILL;
-               printk(KERN_NOTICE EXC_0x2B);
+               sig = SIGBUS;
+               printk(KERN_NOTICE EXC_0x2B(KERN_NOTICE));
                CHK_DEBUGGER_TRAP();
                break;
        /* 0x2C - Instruction CPLB miss, handled in _cplb_hdr */
        case VEC_CPLB_I_M:
                info.si_code = ILL_CPLB_MISS;
                sig = SIGBUS;
-               printk(KERN_NOTICE EXC_0x2C);
+               printk(KERN_NOTICE EXC_0x2C(KERN_NOTICE));
                CHK_DEBUGGER_TRAP();
                break;
        /* 0x2D - Instruction CPLB Multiple Hits, handled here */
@@ -405,7 +405,7 @@ asmlinkage void trap_c(struct pt_regs *fp)
                printk(KERN_NOTICE "Jump to address 0 - 0x0fff\n");
 #else
                sig = SIGILL;
-               printk(KERN_NOTICE EXC_0x2D);
+               printk(KERN_NOTICE EXC_0x2D(KERN_NOTICE));
 #endif
                CHK_DEBUGGER_TRAP();
                break;
@@ -413,7 +413,7 @@ asmlinkage void trap_c(struct pt_regs *fp)
        case VEC_ILL_RES:
                info.si_code = ILL_PRVOPC;
                sig = SIGILL;
-               printk(KERN_NOTICE EXC_0x2E);
+               printk(KERN_NOTICE EXC_0x2E(KERN_NOTICE));
                CHK_DEBUGGER_TRAP();
                break;
        /* 0x2F - Reserved, Caught by default */
@@ -446,7 +446,9 @@ asmlinkage void trap_c(struct pt_regs *fp)
 
        if (sig != SIGTRAP) {
                unsigned long stack;
-               dump_bfin_regs(fp, (void *)fp->retx);
+               dump_bfin_process(fp);
+               dump_bfin_mem((void *)fp->retx);
+               show_regs(fp);
 
                /* Print out the trace buffer if it makes sense */
 #ifndef CONFIG_DEBUG_BFIN_NO_KERN_HWTRACE
@@ -460,22 +462,25 @@ asmlinkage void trap_c(struct pt_regs *fp)
                show_stack(current, &stack);
                if (oops_in_progress) {
 #ifndef CONFIG_ACCESS_CHECK
-                       printk(KERN_EMERG "Hey - dork - please turn on "
-                               "CONFIG_ACCESS_CHECK\n");
+                       printk(KERN_EMERG "Please turn on "
+                              "CONFIG_ACCESS_CHECK\n");
 #endif
                        panic("Kernel exception");
                }
-
-               /* Ensure that bad return addresses don't end up in an infinite
-                * loop, due to speculative loads/reads
-                */
-               fp->pc = SAFE_USER_INSTRUCTION;
        }
+
        info.si_signo = sig;
        info.si_errno = 0;
        info.si_addr = (void *)fp->pc;
        force_sig_info(sig, &info, current);
 
+       /* Ensure that bad return addresses don't end up in an infinite
+        * loop, due to speculative loads/reads. This needs to be done after
+        * the signal has been sent.
+        */
+       if (trapnr == VEC_CPLB_I_M && sig != SIGTRAP)
+               fp->pc = SAFE_USER_INSTRUCTION;
+
        trace_buffer_restore(j);
        return;
 }
@@ -600,37 +605,48 @@ void dump_stack(void)
        show_stack(current, &stack);
        trace_buffer_restore(tflags);
 }
-
 EXPORT_SYMBOL(dump_stack);
 
-void dump_bfin_regs(struct pt_regs *fp, void *retaddr)
+void dump_bfin_process(struct pt_regs *fp)
 {
-       char buf [150];
+       /* We should be able to look at fp->ipend, but we don't push it on the
+        * stack all the time, so do this until we fix that */
+       unsigned int context = bfin_read_IPEND();
+
+       if (oops_in_progress)
+               printk(KERN_EMERG "Kernel OOPS in progress\n");
+
+       if (context & 0x0020)
+               printk(KERN_NOTICE "Deferred excecption or HW Error context\n");
+       else if (context & 0x3FC0)
+               printk(KERN_NOTICE "Interrupt context\n");
+       else if (context & 0x4000)
+               printk(KERN_NOTICE "Deferred Interrupt context\n");
+       else if (context & 0x8000)
+               printk(KERN_NOTICE "Kernel process context\n");
+
+       if (current->pid && current->mm) {
+               printk(KERN_NOTICE "CURRENT PROCESS:\n");
+               printk(KERN_NOTICE "COMM=%s PID=%d\n",
+                       current->comm, current->pid);
+
+               printk(KERN_NOTICE "TEXT = 0x%p-0x%p  DATA = 0x%p-0x%p\n"
+                       KERN_NOTICE "BSS = 0x%p-0x%p   USER-STACK = 0x%p\n"
+                       KERN_NOTICE "\n",
+                       (void *)current->mm->start_code,
+                       (void *)current->mm->end_code,
+                       (void *)current->mm->start_data,
+                       (void *)current->mm->end_data,
+                       (void *)current->mm->end_data,
+                       (void *)current->mm->brk,
+                       (void *)current->mm->start_stack);
+       } else
+               printk(KERN_NOTICE "\n" KERN_NOTICE
+                    "No Valid process in current context\n");
+}
 
-       if (!oops_in_progress) {
-               if (current->pid && current->mm) {
-                       printk(KERN_NOTICE "\n" KERN_NOTICE "CURRENT PROCESS:\n");
-                       printk(KERN_NOTICE "COMM=%s PID=%d\n",
-                               current->comm, current->pid);
-
-                       printk(KERN_NOTICE "TEXT = 0x%p-0x%p  DATA = 0x%p-0x%p\n"
-                               KERN_NOTICE "BSS = 0x%p-0x%p   USER-STACK = 0x%p\n"
-                               KERN_NOTICE "\n",
-                               (void *)current->mm->start_code,
-                               (void *)current->mm->end_code,
-                               (void *)current->mm->start_data,
-                               (void *)current->mm->end_data,
-                               (void *)current->mm->end_data,
-                               (void *)current->mm->brk,
-                               (void *)current->mm->start_stack);
-               } else {
-                       printk (KERN_NOTICE "\n" KERN_NOTICE
-                            "No Valid pid - Either things are really messed up,"
-                            " or you are in the kernel\n");
-               }
-       } else {
-               printk(KERN_NOTICE "Kernel or interrupt exception\n");
-       }
+void dump_bfin_mem(void *retaddr)
+{
 
        if (retaddr >= (void *)FIXED_CODE_START  && retaddr < (void *)physical_mem_end
 #if L1_CODE_LENGTH != 0
@@ -671,8 +687,13 @@ void dump_bfin_regs(struct pt_regs *fp, void *retaddr)
                printk("\n");
        } else
                printk("\n" KERN_NOTICE
-                       "Cannot look at the [PC] for it is"
-                       " in unreadable memory - sorry\n");
+                       "Cannot look at the [PC] <%p> for it is"
+                       " in unreadable memory - sorry\n", retaddr);
+}
+
+void show_regs(struct pt_regs *fp)
+{
+       char buf [150];
 
        printk(KERN_NOTICE "\n" KERN_NOTICE "SEQUENCER STATUS:\n");
        printk(KERN_NOTICE " SEQSTAT: %08lx  IPEND: %04lx  SYSCFG: %04lx\n",
@@ -686,6 +707,8 @@ void dump_bfin_regs(struct pt_regs *fp, void *retaddr)
        printk(KERN_NOTICE " RETX: %s\n", buf);
        decode_address(buf, fp->rets);
        printk(KERN_NOTICE " RETS: %s\n", buf);
+       decode_address(buf, fp->pc);
+       printk(KERN_NOTICE " PC: %s\n", buf);
 
        if ((long)fp->seqstat & SEQSTAT_EXCAUSE) {
                decode_address(buf, bfin_read_DCPLB_FAULT_ADDR());
@@ -800,7 +823,9 @@ void panic_cplb_error(int cplb_panic, struct pt_regs *fp)
 
        printk(KERN_EMERG "DCPLB_FAULT_ADDR=%p\n", (void *)bfin_read_DCPLB_FAULT_ADDR());
        printk(KERN_EMERG "ICPLB_FAULT_ADDR=%p\n", (void *)bfin_read_ICPLB_FAULT_ADDR());
-       dump_bfin_regs(fp, (void *)fp->retx);
+       dump_bfin_process(fp);
+       dump_bfin_mem((void *)fp->retx);
+       show_regs(fp);
        dump_stack();
        panic("Unrecoverable event\n");
 }
index bfdad52c570b9864824738247381a5e1408c5f5f..635288fc5f5432c2d3d89d1226968c8bd7077c72 100644 (file)
@@ -4,7 +4,7 @@
 
 lib-y := \
        ashldi3.o ashrdi3.o lshrdi3.o \
-       muldi3.o divsi3.o udivsi3.o udivdi3.o modsi3.o umodsi3.o \
+       muldi3.o divsi3.o udivsi3.o modsi3.o umodsi3.o \
        checksum.o memcpy.o memset.o memcmp.o memchr.o memmove.o \
        strcmp.o strcpy.o strncmp.o strncpy.o \
        umulsi3_highpart.o smulsi3_highpart.o \
index a17cc77ac36f2faefcf9ffa8d214691aa7682f2d..df7b8833a0c56abf7a5a4ad6df43253f006331c8 100644 (file)
@@ -77,3 +77,22 @@ ENTRY(_insb)
        sti R3;
        RTS;
 ENDPROC(_insb)
+
+
+
+ENTRY(_insl_16)
+       P0 = R0;        /* P0 = port */
+       cli R3;
+       P1 = R1;        /* P1 = address */
+       P2 = R2;        /* P2 = count */
+       SSYNC;
+       LSETUP( .Llong16_loop_s, .Llong16_loop_e) LC0 = P2;
+.Llong16_loop_s:  R0 = [P0];
+                 W[P1++] = R0;
+                 R0 = R0 >> 16;
+                 W[P1++] = R0;
+                 NOP;
+.Llong16_loop_e:  NOP;
+       sti R3;
+       RTS;
+ENDPROC(_insl_16)
index 4eeefd86907f0ff460f04768b6eaf2c90b97bb52..fde39a1950ce8903124831d8758692cad384f648 100644 (file)
@@ -1,10 +1,19 @@
-#include <linux/types.h>
+/*
+ * Provide symbol in case str func is not inlined.
+ *
+ * Copyright (c) 2006-2007 Analog Devices Inc.
+ *
+ * Licensed under the GPL-2 or later.
+ */
 
 #define strcmp __inline_strcmp
 #include <asm/string.h>
 #undef strcmp
 
+#include <linux/module.h>
+
 int strcmp(const char *dest, const char *src)
 {
        return __inline_strcmp(dest, src);
 }
+EXPORT_SYMBOL(strcmp);
index 534589db725619797bb44c51fe296ea8fbea9bde..2a8836b1f4d37abf3700693d39f8cccbf93c2fe7 100644 (file)
@@ -1,10 +1,19 @@
-#include <linux/types.h>
+/*
+ * Provide symbol in case str func is not inlined.
+ *
+ * Copyright (c) 2006-2007 Analog Devices Inc.
+ *
+ * Licensed under the GPL-2 or later.
+ */
 
 #define strcpy __inline_strcpy
 #include <asm/string.h>
 #undef strcpy
 
+#include <linux/module.h>
+
 char *strcpy(char *dest, const char *src)
 {
        return __inline_strcpy(dest, src);
 }
+EXPORT_SYMBOL(strcpy);
index d791f120bff7388252f3add58d20aade76cc03b2..2aaae78a68e0ae3ef345442b2467d30dd50c82ab 100644 (file)
@@ -1,10 +1,19 @@
-#include <linux/types.h>
+/*
+ * Provide symbol in case str func is not inlined.
+ *
+ * Copyright (c) 2006-2007 Analog Devices Inc.
+ *
+ * Licensed under the GPL-2 or later.
+ */
 
 #define strncmp __inline_strncmp
 #include <asm/string.h>
 #undef strncmp
 
+#include <linux/module.h>
+
 int strncmp(const char *cs, const char *ct, size_t count)
 {
        return __inline_strncmp(cs, ct, count);
 }
+EXPORT_SYMBOL(strncmp);
index 1fecb5c71ffb21ec581d157b81ef2d2d8776bc8c..ea1dc6bf2373c7a6a3485706ef11c47f07a2fcc5 100644 (file)
@@ -1,10 +1,19 @@
-#include <linux/types.h>
+/*
+ * Provide symbol in case str func is not inlined.
+ *
+ * Copyright (c) 2006-2007 Analog Devices Inc.
+ *
+ * Licensed under the GPL-2 or later.
+ */
 
 #define strncpy __inline_strncpy
 #include <asm/string.h>
 #undef strncpy
 
+#include <linux/module.h>
+
 char *strncpy(char *dest, const char *src, size_t n)
 {
        return __inline_strncpy(dest, src, n);
 }
+EXPORT_SYMBOL(strncpy);
diff --git a/arch/blackfin/lib/udivdi3.S b/arch/blackfin/lib/udivdi3.S
deleted file mode 100644 (file)
index ad1ebee..0000000
+++ /dev/null
@@ -1,375 +0,0 @@
-/*
- * udivdi3.S - unsigned long long division
- *
- * Copyright 2003-2007 Analog Devices Inc.
- * Enter bugs at http://blackfin.uclinux.org/
- *
- * Licensed under the GPLv2 or later.
- */
-
-#include <linux/linkage.h>
-
-#define CARRY AC0
-
-#ifdef CONFIG_ARITHMETIC_OPS_L1
-.section .l1.text
-#else
-.text
-#endif
-
-
-ENTRY(___udivdi3)
-   R3 = [SP + 12];
-   [--SP] = (R7:4, P5:3);
-
-   /* Attempt to use divide primitive first; these will handle
-   **  most cases, and they're quick - avoids stalls incurred by
-   ** testing for identities.
-   */
-
-   R4 = R2 | R3;
-   CC = R4 == 0;
-   IF CC JUMP .LDIV_BY_ZERO;
-
-   R4.H = 0x8000;
-   R4 >>>= 16;                  // R4 now 0xFFFF8000
-   R5 = R0 | R2;                // If either dividend or
-   R4 = R5 & R4;                // divisor have bits in
-   CC = R4;                     // top half or low half's sign
-   IF CC JUMP .LIDENTS;          // bit, skip builtins.
-   R4 = R1 | R3;                // Also check top halves
-   CC = R4;
-   IF CC JUMP .LIDENTS;
-
-   /* Can use the builtins. */
-
-   AQ = CC;                     // Clear AQ (CC==0)
-   DIVQ(R0, R2);
-   DIVQ(R0, R2);
-   DIVQ(R0, R2);
-   DIVQ(R0, R2);
-   DIVQ(R0, R2);
-   DIVQ(R0, R2);
-   DIVQ(R0, R2);
-   DIVQ(R0, R2);
-   DIVQ(R0, R2);
-   DIVQ(R0, R2);
-   DIVQ(R0, R2);
-   DIVQ(R0, R2);
-   DIVQ(R0, R2);
-   DIVQ(R0, R2);
-   DIVQ(R0, R2);
-   DIVQ(R0, R2);
-   DIVQ(R0, R2);
-   R0 = R0.L (Z);
-   R1 = 0;
-   (R7:4, P5:3) = [SP++];
-   RTS;
-
-.LIDENTS:
-   /* Test for common identities. Value to be returned is
-   ** placed in R6,R7.
-   */
-                                // Check for 0/y, return 0
-   R4 = R0 | R1;
-   CC = R4 == 0;
-   IF CC JUMP .LRETURN_R0;
-
-                                // Check for x/x, return 1
-   R6 = R0 - R2;                // If x == y, then both R6 and R7 will be zero
-   R7 = R1 - R3;
-   R4 = R6 | R7;                // making R4 zero.
-   R6 += 1;                     // which would now make R6:R7==1.
-   CC = R4 == 0;
-   IF CC JUMP .LRETURN_IDENT;
-
-                                // Check for x/1, return x
-   R6 = R0;
-   R7 = R1;
-   CC = R3 == 0;
-   IF !CC JUMP .Lnexttest;
-   CC = R2 == 1;
-   IF CC JUMP .LRETURN_IDENT;
-
-.Lnexttest:
-   R4.L = ONES R2;              // check for div by power of two which
-   R5.L = ONES R3;              // can be done using a shift
-   R6 = PACK (R5.L, R4.L);
-   CC = R6 == 1;
-   IF CC JUMP .Lpower_of_two_upper_zero;
-   R6 = PACK (R4.L, R5.L);
-   CC = R6 == 1;
-   IF CC JUMP .Lpower_of_two_lower_zero;
-
-                                // Check for x < y, return 0
-   R6 = 0;
-   R7 = R6;
-   CC = R1 < R3 (IU);
-   IF CC JUMP .LRETURN_IDENT;
-   CC = R1 == R3;
-   IF !CC JUMP .Lno_idents;
-   CC = R0 < R2 (IU);
-   IF CC JUMP .LRETURN_IDENT;
-
-.Lno_idents:                    // Idents don't match. Go for the full operation
-
-
-   // If X, or X and Y have high bit set, it'll affect the
-   // results, so shift right one to stop this. Note: we've already
-   // checked that X >= Y, so Y's msb won't be set unless X's
-   // is.
-
-   R4 = 0;
-   CC = R1 < 0;
-   IF !CC JUMP .Lx_msb_clear;
-   CC = !CC;                   // 1 -> 0;
-   R1 = ROT R1 BY -1;          // Shift X >> 1
-   R0 = ROT R0 BY -1;          // lsb -> CC
-   BITSET(R4,31);              // to record only x msb was set
-   CC = R3 < 0;
-   IF !CC JUMP .Ly_msb_clear;
-   CC = !CC;
-   R3 = ROT R3 BY -1;          // Shift Y >> 1
-   R2 = ROT R2 BY -1;
-   BITCLR(R4,31);              // clear bit to record only x msb was set
-
-.Ly_msb_clear:
-.Lx_msb_clear:
-   // Bit 31 in R4 indicates X msb set, but Y msb wasn't, and no bits
-   // were lost, so we should shift result left by one.
-
-   [--SP] = R4;                // save for later
-
-   // In the loop that follows, each iteration we add
-   // either Y' or -Y' to the Remainder. We compute the
-   // negated Y', and store, for convenience. Y' goes
-   // into P0:P1, while -Y' goes into P2:P3.
-
-   P0 = R2;
-   P1 = R3;
-   R2 = -R2;
-   CC = CARRY;
-   CC = !CC;
-   R4 = CC;
-   R3 = -R3;
-   R3 = R3 - R4;
-
-   R6 = 0;                     // remainder = 0
-   R7 = R6;
-
-   [--SP] = R2; P2 = SP;
-   [--SP] = R3; P3 = SP;
-   [--SP] = R6; P5 = SP;       // AQ = 0
-   [--SP] = P1;
-
-   /* In the loop that follows, we use the following
-   ** register assignments:
-   ** R0,R1 X, workspace
-   ** R2,R3 Y, workspace
-   ** R4,R5 partial Div
-   ** R6,R7 partial remainder
-   ** P5 AQ
-   ** The remainder and div form a 128-bit number, with
-   ** the remainder in the high 64-bits.
-   */
-   R4 = R0;                    // Div = X'
-   R5 = R1;
-   R3 = 0;
-
-   P4 = 64;                    // Iterate once per bit
-   LSETUP(.LULST,.LULEND) LC0 = P4;
-.LULST:
-        /* Shift Div and remainder up by one. The bit shifted
-        ** out of the top of the quotient is shifted into the bottom
-        ** of the remainder.
-        */
-        CC = R3;
-        R4 = ROT R4 BY 1;
-        R5 = ROT R5 BY 1 ||        // low q to high q
-             R2 = [P5];            // load saved AQ
-        R6 = ROT R6 BY 1 ||        // high q to low r
-             R0 = [P2];            // load -Y'
-        R7 = ROT R7 BY 1 ||        // low r to high r
-             R1 = [P3];
-
-                                   // Assume add -Y'
-        CC = R2 < 0;               // But if AQ is set...
-        IF CC R0 = P0;             // then add Y' instead
-        IF CC R1 = P1;
-
-        R6 = R6 + R0;              // Rem += (Y' or -Y')
-        CC = CARRY;
-        R0 = CC;
-        R7 = R7 + R1;
-        R7 = R7 + R0 (NS) ||
-             R1 = [SP];
-                                   // Set the next AQ bit
-        R1 = R7 ^ R1;              // from Remainder and Y'
-        R1 = R1 >> 31 ||           // Negate AQ's value, and
-             [P5] = R1;            // save next AQ
-        BITTGL(R1, 0);             // add neg AQ  to the Div
-.LULEND: R4 = R4 + R1;
-
-   R6 = [SP + 16];
-
-   R0 = R4;
-   R1 = R5;
-   CC = BITTST(R6,30);         // Just set CC=0
-   R4 = ROT R0 BY 1;           // but if we had to shift X,
-   R5 = ROT R1 BY 1;           // and didn't shift any bits out,
-   CC = BITTST(R6,31);         // then the result will be half as
-   IF CC R0 = R4;              // much as required, so shift left
-   IF CC R1 = R5;              // one space.
-
-   SP += 20;
-   (R7:4, P5:3) = [SP++];
-   RTS;
-
-.Lpower_of_two:
-   /* Y has a single bit set, which means it's a power of two.
-   ** That means we can perform the division just by shifting
-   ** X to the right the appropriate number of bits
-   */
-
-   /* signbits returns the number of sign bits, minus one.
-   ** 1=>30, 2=>29, ..., 0x40000000=>0. Which means we need
-   ** to shift right n-signbits spaces. It also means 0x80000000
-   ** is a special case, because that *also* gives a signbits of 0
-   */
-.Lpower_of_two_lower_zero:
-   R7 = 0;
-   R6 = R1 >> 31;
-   CC = R3 < 0;
-   IF CC JUMP .LRETURN_IDENT;
-
-   R2.L = SIGNBITS R3;
-   R2 = R2.L (Z);
-   R2 += -62;
-   (R7:4, P5:3) = [SP++];
-   JUMP ___lshftli;
-
-.Lpower_of_two_upper_zero:
-   CC = R2 < 0;
-   IF CC JUMP .Lmaxint_shift;
-
-   R2.L = SIGNBITS R2;
-   R2 = R2.L (Z);
-   R2 += -30;
-   (R7:4, P5:3) = [SP++];
-   JUMP ___lshftli;
-
-.Lmaxint_shift:
-   R2 = -31;
-   (R7:4, P5:3) = [SP++];
-   JUMP ___lshftli;
-
-.LRETURN_IDENT:
-   R0 = R6;
-   R1 = R7;
-.LRETURN_R0:
-   (R7:4, P5:3) = [SP++];
-   RTS;
-.LDIV_BY_ZERO:
-   R0 = ~R2;
-   R1 = R0;
-   (R7:4, P5:3) = [SP++];
-   RTS;
-
-ENDPROC(___udivdi3)
-
-
-ENTRY(___lshftli)
-       CC = R2 == 0;
-       IF CC JUMP .Lfinished;  // nothing to do
-       CC = R2 < 0;
-       IF CC JUMP .Lrshift;
-       R3 = 64;
-       CC = R2 < R3;
-       IF !CC JUMP .Lretzero;
-
-       // We're shifting left, and it's less than 64 bits, so
-       // a valid result will be returned.
-
-       R3 >>= 1;       // R3 now 32
-       CC = R2 < R3;
-
-       IF !CC JUMP .Lzerohalf;
-
-       // We're shifting left, between 1 and 31 bits, which means
-       // some of the low half will be shifted into the high half.
-       // Work out how much.
-
-       R3 = R3 - R2;
-
-       // Save that much data from the bottom half.
-
-       P1 = R7;
-       R7 = R0;
-       R7 >>= R3;
-
-       // Adjust both parts of the parameter.
-
-       R0 <<= R2;
-       R1 <<= R2;
-
-       // And include the bits moved across.
-
-       R1 = R1 | R7;
-       R7 = P1;
-       RTS;
-
-.Lzerohalf:
-       // We're shifting left, between 32 and 63 bits, so the
-       // bottom half will become zero, and the top half will
-       // lose some bits. How many?
-
-       R2 = R2 - R3;   // N - 32
-       R1 = LSHIFT R0 BY R2.L;
-       R0 = R0 - R0;
-       RTS;
-
-.Lretzero:
-       R0 = R0 - R0;
-       R1 = R0;
-.Lfinished:
-       RTS;
-
-.Lrshift:
-       // We're shifting right, but by how much?
-       R2 = -R2;
-       R3 = 64;
-       CC = R2 < R3;
-       IF !CC JUMP .Lretzero;
-
-       // Shifting right less than 64 bits, so some result bits will
-       // be retained.
-
-       R3 >>= 1;       // R3 now 32
-       CC = R2 < R3;
-       IF !CC JUMP .Lsignhalf;
-
-       // Shifting right between 1 and 31 bits, so need to copy
-       // data across words.
-
-       P1 = R7;
-       R3 = R3 - R2;
-       R7 = R1;
-       R7 <<= R3;
-       R1 >>= R2;
-       R0 >>= R2;
-       R0 = R7 | R0;
-       R7 = P1;
-       RTS;
-
-.Lsignhalf:
-       // Shifting right between 32 and 63 bits, so the top half
-       // will become all zero-bits, and the bottom half is some
-       // of the top half. But how much?
-
-       R2 = R2 - R3;
-       R0 = R1;
-       R0 >>= R2;
-       R1 = 0;
-       RTS;
-
-ENDPROC(___lshftli)
index 50321f723dee3936239777e3d95a171ea6dcaf94..5c736837d4bfc727d720ab15ed1076544c159b43 100644 (file)
@@ -1,5 +1,7 @@
 if (BF52x)
 
+source "arch/blackfin/mach-bf527/boards/Kconfig"
+
 menu "BF527 Specific Configuration"
 
 comment "Alternative Multiplexing Scheme"
diff --git a/arch/blackfin/mach-bf527/boards/Kconfig b/arch/blackfin/mach-bf527/boards/Kconfig
new file mode 100644 (file)
index 0000000..6a570ad
--- /dev/null
@@ -0,0 +1,12 @@
+choice
+       prompt "System type"
+       default BFIN527_EZKIT
+       help
+         Select your board!
+
+config BFIN527_EZKIT
+       bool "BF527-EZKIT"
+       help
+         BF527-EZKIT-LITE board support.
+
+endchoice
index 912ac8ebc889e525eb9b7fe41f2c33427f5f23f8..7277d35ef11174e91803f74bf81cd7b88e2b92af 100644 (file)
@@ -1,7 +1,5 @@
 #
-# arch/blackfin/mach-bf532/boards/Makefile
+# arch/blackfin/mach-bf527/boards/Makefile
 #
 
-obj-y                                  += eth_mac.o
-obj-$(CONFIG_BFIN527_EZKIT)            += ezkit.o
-
+obj-$(CONFIG_BFIN527_EZKIT)            += ezkit.o
diff --git a/arch/blackfin/mach-bf527/boards/eth_mac.c b/arch/blackfin/mach-bf527/boards/eth_mac.c
deleted file mode 100644 (file)
index a725cc8..0000000
+++ /dev/null
@@ -1,50 +0,0 @@
-/*
- *  arch/blackfin/mach-bf537/board/eth_mac.c
- *
- *  Copyright (C) 2007 Analog Devices, Inc.
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
- */
-#include <linux/module.h>
-#include <asm/blackfin.h>
-
-#if    defined(CONFIG_GENERIC_BOARD) || defined(CONFIG_BFIN537_STAMP)
-
-/*
- * Currently the MAC address is saved in Flash by U-Boot
- */
-#define FLASH_MAC      0x203f0000
-
-void get_bf537_ether_addr(char *addr)
-{
-       unsigned int flash_mac = (unsigned int) FLASH_MAC;
-       *(u32 *)(&(addr[0])) = bfin_read32(flash_mac);
-       flash_mac += 4;
-       *(u16 *)(&(addr[4])) = bfin_read16(flash_mac);
-}
-
-#else
-
-/*
- * Provide MAC address function for other specific board setting
- */
-void get_bf537_ether_addr(char *addr)
-{
-       printk(KERN_WARNING "%s: No valid Ethernet MAC address found\n", __FILE__);
-}
-
-#endif
-
-EXPORT_SYMBOL(get_bf537_ether_addr);
index bf1bedcc886886894162e48ffdf6c083ff9348c5..003e2ac654d8629665c256e1683571b632517468 100644 (file)
 #include <linux/spi/spi.h>
 #include <linux/spi/flash.h>
 #if defined(CONFIG_USB_ISP1362_HCD) || defined(CONFIG_USB_ISP1362_HCD_MODULE)
-#include <linux/usb_isp1362.h>
+#include <linux/usb/isp1362.h>
 #endif
 #include <linux/pata_platform.h>
 #include <linux/irq.h>
 #include <linux/interrupt.h>
-#include <linux/usb_sl811.h>
+#include <linux/usb/sl811.h>
 #include <asm/cplb.h>
 #include <asm/dma.h>
 #include <asm/bfin5xx_spi.h>
 #include <asm/reboot.h>
 #include <asm/nand.h>
+#include <asm/portmux.h>
 #include <linux/spi/ad7877.h>
 
 /*
@@ -450,6 +451,13 @@ static const struct ad7877_platform_data bfin_ad7877_ts_info = {
 };
 #endif
 
+#if defined(CONFIG_SND_SOC_WM8731) || defined(CONFIG_SND_SOC_WM8731_MODULE) \
+        && defined(CONFIG_SND_SOC_WM8731_SPI)
+static struct bfin5xx_spi_chip spi_wm8731_chip_info = {
+       .enable_dma = 0,
+       .bits_per_word = 16,
+};
+#endif
 static struct spi_board_info bfin_spi_board_info[] __initdata = {
 #if defined(CONFIG_MTD_M25P80) \
        || defined(CONFIG_MTD_M25P80_MODULE)
@@ -551,17 +559,29 @@ static struct spi_board_info bfin_spi_board_info[] __initdata = {
                .platform_data          = &bfin_ad7877_ts_info,
                .irq                    = IRQ_PF6,
                .max_speed_hz   = 12500000,     /* max spi clock (SCK) speed in HZ */
-               .bus_num        = 1,
+               .bus_num        = 0,
                .chip_select  = 1,
                .controller_data = &spi_ad7877_chip_info,
        },
 #endif
+#if defined(CONFIG_SND_SOC_WM8731) || defined(CONFIG_SND_SOC_WM8731_MODULE) \
+        && defined(CONFIG_SND_SOC_WM8731_SPI)
+       {
+               .modalias       = "wm8731",
+               .max_speed_hz   = 3125000,     /* max spi clock (SCK) speed in HZ */
+               .bus_num        = 0,
+               .chip_select    = 5,
+               .controller_data = &spi_wm8731_chip_info,
+               .mode = SPI_MODE_0,
+       },
+#endif
 };
 
 /* SPI controller data */
 static struct bfin5xx_spi_master bfin_spi0_info = {
        .num_chipselect = 8,
        .enable_dma = 1,  /* master has the ability to do dma transfer */
+       .pin_req = {P_SPI0_SCK, P_SPI0_MISO, P_SPI0_MOSI, 0},
 };
 
 /* SPI (0) */
@@ -788,3 +808,14 @@ void native_machine_restart(char *cmd)
        if ((bfin_read_SYSCR() & 0x7) == 0x3)
                bfin_gpio_reset_spi0_ssel1();
 }
+
+/*
+ * Currently the MAC address is saved in Flash by U-Boot
+ */
+#define FLASH_MAC      0x203f0000
+void bfin_get_ether_addr(char *addr)
+{
+       *(u32 *)(&(addr[0])) = bfin_read32(FLASH_MAC);
+       *(u16 *)(&(addr[4])) = bfin_read16(FLASH_MAC + 4);
+}
+EXPORT_SYMBOL(bfin_get_ether_addr);
index 14297b3ed5c33cde4b55de896ca219c353ffeb40..76beb75f12dadcbcca496a42bf88dea013a0795c 100644 (file)
@@ -1,5 +1,7 @@
 if (BF533 || BF532 || BF531)
 
+source "arch/blackfin/mach-bf533/boards/Kconfig"
+
 menu "BF533/2/1 Specific Configuration"
 
 comment "Interrupt Priority Assignment"
index b941550f9568e28b5774f5005fa2e75f8a33fa63..6bcf4047f89c5010660f84b8790ac527275d70d7 100644 (file)
 #include <linux/spi/spi.h>
 #include <linux/spi/flash.h>
 #if defined(CONFIG_USB_ISP1362_HCD) || defined(CONFIG_USB_ISP1362_HCD_MODULE)
-#include <linux/usb_isp1362.h>
+#include <linux/usb/isp1362.h>
 #endif
 #include <linux/pata_platform.h>
 #include <linux/irq.h>
 #include <asm/dma.h>
 #include <asm/bfin5xx_spi.h>
 #include <asm/reboot.h>
+#include <asm/portmux.h>
 
 /*
  * Name the Board for the /proc/cpuinfo
  */
 const char bfin_board_name[] = "HV Sistemas H8606";
 
-#if defined(CONFIG_RTC_DRV_BFIN) || defined(CONFIG_RTC_BFIN_MODULE)
+#if defined(CONFIG_RTC_DRV_BFIN) || defined(CONFIG_RTC_DRV_BFIN_MODULE)
 static struct platform_device rtc_device = {
        .name = "rtc-bfin",
        .id   = -1,
@@ -93,10 +94,6 @@ static struct resource smc91x_resources[] = {
                .end = IRQ_PROG_INTB,
                .flags = IORESOURCE_IRQ | IORESOURCE_IRQ_HIGHLEVEL,
        }, {
-               /*
-                *  denotes the flag pin and is used directly if
-                *  CONFIG_IRQCHIP_DEMUX_GPIO is defined.
-                */
                .start = IRQ_PF7,
                .end = IRQ_PF7,
                .flags = IORESOURCE_IRQ | IORESOURCE_IRQ_HIGHLEVEL,
@@ -269,6 +266,7 @@ static struct resource bfin_spi0_resource[] = {
 static struct bfin5xx_spi_master bfin_spi0_info = {
        .num_chipselect = 8,
        .enable_dma = 1,  /* master has the ability to do dma transfer */
+       .pin_req = {P_SPI0_SCK, P_SPI0_MISO, P_SPI0_MOSI, 0},
 };
 
 static struct platform_device bfin_spi0_device = {
@@ -342,4 +340,4 @@ static int __init H8606_init(void)
        return 0;
 }
 
-arch_initcall(H8606_init);
\ No newline at end of file
+arch_initcall(H8606_init);
diff --git a/arch/blackfin/mach-bf533/boards/Kconfig b/arch/blackfin/mach-bf533/boards/Kconfig
new file mode 100644 (file)
index 0000000..751de51
--- /dev/null
@@ -0,0 +1,34 @@
+choice
+       prompt "System type"
+       default BFIN533_STAMP
+       help
+         Select your board!
+
+config BFIN533_EZKIT
+       bool "BF533-EZKIT"
+       help
+         BF533-EZKIT-LITE board support.
+
+config BFIN533_STAMP
+       bool "BF533-STAMP"
+       help
+         BF533-STAMP board support.
+
+config BFIN533_BLUETECHNIX_CM
+       bool "Bluetechnix CM-BF533"
+       depends on (BF533)
+       help
+         CM-BF533 support for EVAL- and DEV-Board.
+
+config H8606_HVSISTEMAS
+       bool "HV Sistemas H8606"
+       depends on (BF532)
+       help
+         HV Sistemas H8606 board support.
+
+config GENERIC_BF533_BOARD
+       bool "Generic"
+       help
+         Generic or Custom board support.
+
+endchoice
index 2452b456ccbd25479115b5f2002d0dc0616c1648..54f57fb9791e0c501256d30a5a99897c46170d67 100644 (file)
@@ -2,7 +2,7 @@
 # arch/blackfin/mach-bf533/boards/Makefile
 #
 
-obj-$(CONFIG_GENERIC_BOARD)            += generic_board.o
+obj-$(CONFIG_GENERIC_BF533_BOARD)      += generic_board.o
 obj-$(CONFIG_BFIN533_STAMP)            += stamp.o
 obj-$(CONFIG_BFIN533_EZKIT)            += ezkit.o
 obj-$(CONFIG_BFIN533_BLUETECHNIX_CM)   += cm_bf533.o
index a863522a4467129d1d50006671af82280f8b0b9a..21df2f3754975b44ae60746ebe93ddbcfcee7ad6 100644 (file)
 #include <linux/mtd/partitions.h>
 #include <linux/spi/spi.h>
 #include <linux/spi/flash.h>
-#include <linux/usb_isp1362.h>
+#include <linux/usb/isp1362.h>
 #include <linux/pata_platform.h>
 #include <linux/irq.h>
 #include <asm/dma.h>
 #include <asm/bfin5xx_spi.h>
+#include <asm/portmux.h>
 
 /*
  * Name the Board for the /proc/cpuinfo
@@ -175,6 +176,7 @@ static struct resource bfin_spi0_resource[] = {
 static struct bfin5xx_spi_master bfin_spi0_info = {
        .num_chipselect = 8,
        .enable_dma = 1,  /* master has the ability to do dma transfer */
+       .pin_req = {P_SPI0_SCK, P_SPI0_MISO, P_SPI0_MOSI, 0},
 };
 
 static struct platform_device bfin_spi0_device = {
index 34b63920e272ef0321ad5bee525ec80e22f4d567..be852034a68b3e3cfb0f00b82f338e6da1eaac16 100644 (file)
 #include <linux/mtd/partitions.h>
 #include <linux/spi/spi.h>
 #include <linux/spi/flash.h>
-#include <linux/usb_isp1362.h>
+#include <linux/usb/isp1362.h>
 #include <linux/pata_platform.h>
 #include <linux/irq.h>
 #include <asm/dma.h>
 #include <asm/bfin5xx_spi.h>
+#include <asm/portmux.h>
 
 /*
  * Name the Board for the /proc/cpuinfo
@@ -187,6 +188,7 @@ static struct resource bfin_spi0_resource[] = {
 static struct bfin5xx_spi_master bfin_spi0_info = {
        .num_chipselect = 8,
        .enable_dma = 1,  /* master has the ability to do dma transfer */
+       .pin_req = {P_SPI0_SCK, P_SPI0_MISO, P_SPI0_MOSI, 0},
 };
 
 static struct platform_device bfin_spi0_device = {
index 310b7772c458cf512e1dfbf341d9af5fb9666b34..e359a0d6467fd846c66c68e9fce44c480b877582 100644 (file)
@@ -58,10 +58,6 @@ static struct resource smc91x_resources[] = {
                .end = IRQ_PROG_INTB,
                .flags = IORESOURCE_IRQ | IORESOURCE_IRQ_HIGHLEVEL,
        }, {
-               /*
-                *  denotes the flag pin and is used directly if
-                *  CONFIG_IRQCHIP_DEMUX_GPIO is defined.
-                */
                .start = IRQ_PF7,
                .end = IRQ_PF7,
                .flags = IORESOURCE_IRQ | IORESOURCE_IRQ_HIGHLEVEL,
index 62ffa500420fa0aef18ccf0caad1d6d3d050b795..8fde8d8328502a9a39aec4f7c9f64187973442d2 100644 (file)
 #include <linux/spi/spi.h>
 #include <linux/spi/flash.h>
 #if defined(CONFIG_USB_ISP1362_HCD) || defined(CONFIG_USB_ISP1362_HCD_MODULE)
-#include <linux/usb_isp1362.h>
+#include <linux/usb/isp1362.h>
 #endif
 #include <linux/pata_platform.h>
 #include <linux/irq.h>
 #include <asm/dma.h>
 #include <asm/bfin5xx_spi.h>
 #include <asm/reboot.h>
+#include <asm/portmux.h>
 
 /*
  * Name the Board for the /proc/cpuinfo
@@ -286,6 +287,7 @@ static struct resource bfin_spi0_resource[] = {
 static struct bfin5xx_spi_master bfin_spi0_info = {
        .num_chipselect = 8,
        .enable_dma = 1,  /* master has the ability to do dma transfer */
+       .pin_req = {P_SPI0_SCK, P_SPI0_MISO, P_SPI0_MOSI, 0},
 };
 
 static struct platform_device bfin_spi0_device = {
index e6648db0951931a694bd4c28c3b2b6e19889ec31..8255374c04aa5a38ceac476c3cf4d97303c42844 100644 (file)
@@ -1,5 +1,7 @@
 if (BF537 || BF534 || BF536)
 
+source "arch/blackfin/mach-bf537/boards/Kconfig"
+
 menu "BF537 Specific Configuration"
 
 comment "Interrupt Priority Assignment"
diff --git a/arch/blackfin/mach-bf537/boards/Kconfig b/arch/blackfin/mach-bf537/boards/Kconfig
new file mode 100644 (file)
index 0000000..96a1519
--- /dev/null
@@ -0,0 +1,29 @@
+choice
+       prompt "System type"
+       default BFIN537_STAMP
+       help
+         Select your board!
+
+config BFIN537_STAMP
+       bool "BF537-STAMP"
+       help
+         BF537-STAMP board support.
+
+config BFIN537_BLUETECHNIX_CM
+       bool "Bluetechnix CM-BF537"
+       depends on (BF537)
+       help
+         CM-BF537 support for EVAL- and DEV-Board.
+
+config PNAV10
+       bool "PNAV board"
+       depends on (BF537)
+       help
+         PNAV board support.
+
+config GENERIC_BF537_BOARD
+       bool "Generic"
+       help
+         Generic or Custom board support.
+
+endchoice
index 23323cacc3aa423176a901ddafcd53dfd0459e59..94a85174283a7d6f56c4fc272458d239a88a4b32 100644 (file)
@@ -2,8 +2,7 @@
 # arch/blackfin/mach-bf537/boards/Makefile
 #
 
-obj-y                                  += eth_mac.o
-obj-$(CONFIG_GENERIC_BOARD)            += generic_board.o
-obj-$(CONFIG_BFIN537_STAMP)            += stamp.o led.o
-obj-$(CONFIG_BFIN537_BLUETECHNIX_CM)   += cm_bf537.o
-obj-$(CONFIG_PNAV10)                   += pnav10.o
+obj-$(CONFIG_GENERIC_BF537_BOARD)      += generic_board.o
+obj-$(CONFIG_BFIN537_STAMP)            += stamp.o led.o
+obj-$(CONFIG_BFIN537_BLUETECHNIX_CM)   += cm_bf537.o
+obj-$(CONFIG_PNAV10)                   += pnav10.o
index 2915931045e32978bfd4fffd4dea23b0f1623f6a..c0fb06dbc42e65281208206f676d038993978c1b 100644 (file)
 #include <linux/mtd/partitions.h>
 #include <linux/spi/spi.h>
 #include <linux/spi/flash.h>
-#include <linux/usb_isp1362.h>
+#include <linux/usb/isp1362.h>
 #include <linux/pata_platform.h>
 #include <linux/irq.h>
 #include <asm/dma.h>
 #include <asm/bfin5xx_spi.h>
+#include <asm/portmux.h>
 
 /*
  * Name the Board for the /proc/cpuinfo
@@ -194,6 +195,7 @@ static struct resource bfin_spi0_resource[] = {
 static struct bfin5xx_spi_master bfin_spi0_info = {
        .num_chipselect = 8,
        .enable_dma = 1,  /* master has the ability to do dma transfer */
+       .pin_req = {P_SPI0_SCK, P_SPI0_MISO, P_SPI0_MOSI, 0},
 };
 
 static struct platform_device bfin_spi0_device = {
@@ -425,3 +427,10 @@ static int __init cm_bf537_init(void)
 }
 
 arch_initcall(cm_bf537_init);
+
+void bfin_get_ether_addr(char *addr)
+{
+       random_ether_addr(addr);
+       printk(KERN_WARNING "%s:%s: Setting Ethernet MAC to a random one\n", __FILE__, __func__);
+}
+EXPORT_SYMBOL(bfin_get_ether_addr);
diff --git a/arch/blackfin/mach-bf537/boards/eth_mac.c b/arch/blackfin/mach-bf537/boards/eth_mac.c
deleted file mode 100644 (file)
index a725cc8..0000000
+++ /dev/null
@@ -1,50 +0,0 @@
-/*
- *  arch/blackfin/mach-bf537/board/eth_mac.c
- *
- *  Copyright (C) 2007 Analog Devices, Inc.
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
- */
-#include <linux/module.h>
-#include <asm/blackfin.h>
-
-#if    defined(CONFIG_GENERIC_BOARD) || defined(CONFIG_BFIN537_STAMP)
-
-/*
- * Currently the MAC address is saved in Flash by U-Boot
- */
-#define FLASH_MAC      0x203f0000
-
-void get_bf537_ether_addr(char *addr)
-{
-       unsigned int flash_mac = (unsigned int) FLASH_MAC;
-       *(u32 *)(&(addr[0])) = bfin_read32(flash_mac);
-       flash_mac += 4;
-       *(u16 *)(&(addr[4])) = bfin_read16(flash_mac);
-}
-
-#else
-
-/*
- * Provide MAC address function for other specific board setting
- */
-void get_bf537_ether_addr(char *addr)
-{
-       printk(KERN_WARNING "%s: No valid Ethernet MAC address found\n", __FILE__);
-}
-
-#endif
-
-EXPORT_SYMBOL(get_bf537_ether_addr);
index 255da7a984817ce0c1f7180181c6f26b6f5834c5..09f4bfbd23506c4edb5313d28c7a8c22b4e61ed6 100644 (file)
@@ -35,7 +35,7 @@
 #include <linux/spi/spi.h>
 #include <linux/spi/flash.h>
 #if defined(CONFIG_USB_ISP1362_HCD) || defined(CONFIG_USB_ISP1362_HCD_MODULE)
-#include <linux/usb_isp1362.h>
+#include <linux/usb/isp1362.h>
 #endif
 #include <linux/pata_platform.h>
 #include <linux/irq.h>
@@ -44,6 +44,7 @@
 #include <asm/dma.h>
 #include <asm/bfin5xx_spi.h>
 #include <asm/reboot.h>
+#include <asm/portmux.h>
 #include <linux/spi/ad7877.h>
 
 /*
@@ -502,7 +503,7 @@ static struct spi_board_info bfin_spi_board_info[] __initdata = {
                .platform_data          = &bfin_ad7877_ts_info,
                .irq                    = IRQ_PF6,
                .max_speed_hz   = 12500000,     /* max spi clock (SCK) speed in HZ */
-               .bus_num        = 1,
+               .bus_num        = 0,
                .chip_select  = 1,
                .controller_data = &spi_ad7877_chip_info,
        },
@@ -513,6 +514,7 @@ static struct spi_board_info bfin_spi_board_info[] __initdata = {
 static struct bfin5xx_spi_master bfin_spi0_info = {
        .num_chipselect = 8,
        .enable_dma = 1,  /* master has the ability to do dma transfer */
+       .pin_req = {P_SPI0_SCK, P_SPI0_MISO, P_SPI0_MOSI, 0},
 };
 
 /* SPI (0) */
@@ -730,3 +732,10 @@ void native_machine_restart(char *cmd)
        if ((bfin_read_SYSCR() & 0x7) == 0x3)
                bfin_gpio_reset_spi0_ssel1();
 }
+
+void bfin_get_ether_addr(char *addr)
+{
+       random_ether_addr(addr);
+       printk(KERN_WARNING "%s:%s: Setting Ethernet MAC to a random one\n", __FILE__, __func__);
+}
+EXPORT_SYMBOL(bfin_get_ether_addr);
index 87b808926789b46acfb7c5513155dc2f4a05d9b8..fd5f4a6f08e48efbe5f4afc98c80b32752d74a2e 100644 (file)
 #include <linux/spi/spi.h>
 #include <linux/spi/flash.h>
 #if defined(CONFIG_USB_ISP1362_HCD) || defined(CONFIG_USB_ISP1362_HCD_MODULE)
-#include <linux/usb_isp1362.h>
+#include <linux/usb/isp1362.h>
 #endif
 #include <linux/irq.h>
 #include <asm/dma.h>
 #include <asm/bfin5xx_spi.h>
+#include <asm/portmux.h>
 #include <linux/usb/sl811.h>
 
 #include <linux/spi/ad7877.h>
@@ -295,7 +296,7 @@ static struct bfin5xx_spi_chip spi_mmc_chip_info = {
 
 #if defined(CONFIG_TOUCHSCREEN_AD7877) || defined(CONFIG_TOUCHSCREEN_AD7877_MODULE)
 static struct bfin5xx_spi_chip spi_ad7877_chip_info = {
-       .cs_change_per_word = 1,
+       .cs_change_per_word = 0,
        .enable_dma = 0,
        .bits_per_word = 16,
 };
@@ -387,7 +388,7 @@ static struct spi_board_info bfin_spi_board_info[] __initdata = {
        .platform_data          = &bfin_ad7877_ts_info,
        .irq                    = IRQ_PF2,
        .max_speed_hz           = 12500000,     /* max spi clock (SCK) speed in HZ */
-       .bus_num                = 1,
+       .bus_num                = 0,
        .chip_select            = 5,
        .controller_data = &spi_ad7877_chip_info,
 },
@@ -413,6 +414,7 @@ static struct resource bfin_spi0_resource[] = {
 static struct bfin5xx_spi_master bfin_spi0_info = {
        .num_chipselect = 8,
        .enable_dma = 1,  /* master has the ability to do dma transfer */
+       .pin_req = {P_SPI0_SCK, P_SPI0_MISO, P_SPI0_MOSI, 0},
 };
 
 static struct platform_device bfin_spi0_device = {
@@ -508,3 +510,10 @@ static int __init stamp_init(void)
 }
 
 arch_initcall(stamp_init);
+
+void bfin_get_ether_addr(char *addr)
+{
+       random_ether_addr(addr);
+       printk(KERN_WARNING "%s:%s: Setting Ethernet MAC to a random one\n", __FILE__, __func__);
+}
+EXPORT_SYMBOL(bfin_get_ether_addr);
index 5f7b91fbafe81527af220f0e1cb7cc2125d5e9af..07b0dc273d2f0b13ba87a3ec089b52f54af356be 100644 (file)
@@ -35,7 +35,7 @@
 #include <linux/spi/spi.h>
 #include <linux/spi/flash.h>
 #if defined(CONFIG_USB_ISP1362_HCD) || defined(CONFIG_USB_ISP1362_HCD_MODULE)
-#include <linux/usb_isp1362.h>
+#include <linux/usb/isp1362.h>
 #endif
 #include <linux/pata_platform.h>
 #include <linux/irq.h>
@@ -44,6 +44,7 @@
 #include <asm/dma.h>
 #include <asm/bfin5xx_spi.h>
 #include <asm/reboot.h>
+#include <asm/portmux.h>
 #include <linux/spi/ad7877.h>
 
 /*
@@ -182,6 +183,28 @@ static struct platform_device dm9000_device = {
 };
 #endif
 
+#if defined(CONFIG_AX88180) || defined(CONFIG_AX88180_MODULE)
+static struct resource ax88180_resources[] = {
+       [0] = {
+               .start  = 0x20300000,
+               .end    = 0x20300000 + 0x8000,
+               .flags  = IORESOURCE_MEM,
+       },
+       [1] = {
+               .start  = IRQ_PF7,
+               .end    = IRQ_PF7,
+               .flags  = (IORESOURCE_IRQ | IORESOURCE_IRQ_LOWLEVEL),
+       },
+};
+
+static struct platform_device ax88180_device = {
+       .name           = "ax88180",
+       .id             = -1,
+       .num_resources  = ARRAY_SIZE(ax88180_resources),
+       .resource       = ax88180_resources,
+};
+#endif
+
 #if defined(CONFIG_USB_SL811_HCD) || defined(CONFIG_USB_SL811_HCD_MODULE)
 static struct resource sl811_hcd_resources[] = {
        {
@@ -502,7 +525,7 @@ static struct spi_board_info bfin_spi_board_info[] __initdata = {
                .platform_data          = &bfin_ad7877_ts_info,
                .irq                    = IRQ_PF6,
                .max_speed_hz   = 12500000,     /* max spi clock (SCK) speed in HZ */
-               .bus_num        = 1,
+               .bus_num        = 0,
                .chip_select  = 1,
                .controller_data = &spi_ad7877_chip_info,
        },
@@ -513,6 +536,7 @@ static struct spi_board_info bfin_spi_board_info[] __initdata = {
 static struct bfin5xx_spi_master bfin_spi0_info = {
        .num_chipselect = 8,
        .enable_dma = 1,  /* master has the ability to do dma transfer */
+       .pin_req = {P_SPI0_SCK, P_SPI0_MISO, P_SPI0_MOSI, 0},
 };
 
 /* SPI (0) */
@@ -554,15 +578,20 @@ static struct platform_device bfin_fb_adv7393_device = {
 
 #if defined(CONFIG_SERIAL_BFIN) || defined(CONFIG_SERIAL_BFIN_MODULE)
 static struct resource bfin_uart_resources[] = {
+#ifdef CONFIG_SERIAL_BFIN_UART0
        {
                .start = 0xFFC00400,
                .end = 0xFFC004FF,
                .flags = IORESOURCE_MEM,
-       }, {
+       },
+#endif
+#ifdef CONFIG_SERIAL_BFIN_UART1
+       {
                .start = 0xFFC02000,
                .end = 0xFFC020FF,
                .flags = IORESOURCE_MEM,
        },
+#endif
 };
 
 static struct platform_device bfin_uart_device = {
@@ -669,6 +698,10 @@ static struct platform_device *stamp_devices[] __initdata = {
        &dm9000_device,
 #endif
 
+#if defined(CONFIG_AX88180) || defined(CONFIG_AX88180_MODULE)
+       &ax88180_device,
+#endif
+
 #if defined(CONFIG_BFIN_MAC) || defined(CONFIG_BFIN_MAC_MODULE)
        &bfin_mac_device,
 #endif
@@ -730,3 +763,14 @@ void native_machine_restart(char *cmd)
        if ((bfin_read_SYSCR() & 0x7) == 0x3)
                bfin_gpio_reset_spi0_ssel1();
 }
+
+/*
+ * Currently the MAC address is saved in Flash by U-Boot
+ */
+#define FLASH_MAC      0x203f0000
+void bfin_get_ether_addr(char *addr)
+{
+       *(u32 *)(&(addr[0])) = bfin_read32(FLASH_MAC);
+       *(u16 *)(&(addr[4])) = bfin_read16(FLASH_MAC + 4);
+}
+EXPORT_SYMBOL(bfin_get_ether_addr);
index 08d8dc83701c3e7cb3d279f757358155fba662f7..d8bd3b49f150275cf5e32ccbd0c0cfbf648d4e65 100644 (file)
@@ -1,5 +1,7 @@
 if (BF54x)
 
+source "arch/blackfin/mach-bf548/boards/Kconfig"
+
 menu "BF548 Specific Configuration"
 
 config DEB_DMA_URGENT
diff --git a/arch/blackfin/mach-bf548/boards/Kconfig b/arch/blackfin/mach-bf548/boards/Kconfig
new file mode 100644 (file)
index 0000000..0571290
--- /dev/null
@@ -0,0 +1,12 @@
+choice
+       prompt "System type"
+       default BFIN548_EZKIT
+       help
+         Select your board!
+
+config BFIN548_EZKIT
+       bool "BF548-EZKIT"
+       help
+         BFIN548-EZKIT board support.
+
+endchoice
index 486e07c99a515fcb5dcd4be9ca83f88ef02bdc6c..a444cc739578bc8f286a4b06ee7fb74a79ae4d59 100644 (file)
@@ -2,4 +2,4 @@
 # arch/blackfin/mach-bf548/boards/Makefile
 #
 
-obj-$(CONFIG_BFIN548_EZKIT)            += ezkit.o led.o
+obj-$(CONFIG_BFIN548_EZKIT)            += ezkit.o led.o
index 6b6490e66b30dd11086d901acdcf8e4cf6353c1c..d37d6653c4bc574da7f80e3aed9161c40f4890c2 100644 (file)
@@ -42,6 +42,7 @@
 #include <asm/dma.h>
 #include <asm/gpio.h>
 #include <asm/nand.h>
+#include <asm/portmux.h>
 #include <asm/mach/bf54x_keys.h>
 #include <linux/input.h>
 #include <linux/spi/ad7877.h>
@@ -377,7 +378,7 @@ static struct bfin5xx_spi_chip spi_flash_chip_info = {
 
 #if defined(CONFIG_TOUCHSCREEN_AD7877) || defined(CONFIG_TOUCHSCREEN_AD7877_MODULE)
 static struct bfin5xx_spi_chip spi_ad7877_chip_info = {
-       .cs_change_per_word = 1,
+       .cs_change_per_word = 0,
        .enable_dma = 0,
        .bits_per_word = 16,
 };
@@ -453,9 +454,10 @@ static struct resource bfin_spi1_resource[] = {
 };
 
 /* SPI controller data */
-static struct bfin5xx_spi_master bf54x_spi_master_info = {
+static struct bfin5xx_spi_master bf54x_spi_master_info0 = {
        .num_chipselect = 8,
        .enable_dma = 1,  /* master has the ability to do dma transfer */
+       .pin_req = {P_SPI0_SCK, P_SPI0_MISO, P_SPI0_MOSI, 0},
 };
 
 static struct platform_device bf54x_spi_master0 = {
@@ -464,17 +466,23 @@ static struct platform_device bf54x_spi_master0 = {
        .num_resources = ARRAY_SIZE(bfin_spi0_resource),
        .resource = bfin_spi0_resource,
        .dev = {
-               .platform_data = &bf54x_spi_master_info, /* Passed to driver */
+               .platform_data = &bf54x_spi_master_info0, /* Passed to driver */
                },
 };
 
+static struct bfin5xx_spi_master bf54x_spi_master_info1 = {
+       .num_chipselect = 8,
+       .enable_dma = 1,  /* master has the ability to do dma transfer */
+       .pin_req = {P_SPI1_SCK, P_SPI1_MISO, P_SPI1_MOSI, 0},
+};
+
 static struct platform_device bf54x_spi_master1 = {
        .name = "bfin-spi",
        .id = 1, /* Bus number */
        .num_resources = ARRAY_SIZE(bfin_spi1_resource),
        .resource = bfin_spi1_resource,
        .dev = {
-               .platform_data = &bf54x_spi_master_info, /* Passed to driver */
+               .platform_data = &bf54x_spi_master_info1, /* Passed to driver */
                },
 };
 #endif  /* spi master and devices */
@@ -500,6 +508,7 @@ static struct platform_device i2c_bfin_twi0_device = {
        .resource = bfin_twi0_resource,
 };
 
+#if !defined(CONFIG_BF542)     /* The BF542 only has 1 TWI */
 static struct resource bfin_twi1_resource[] = {
        [0] = {
                .start = TWI1_REGBASE,
@@ -520,6 +529,7 @@ static struct platform_device i2c_bfin_twi1_device = {
        .resource = bfin_twi1_resource,
 };
 #endif
+#endif
 
 static struct platform_device *ezkit_devices[] __initdata = {
 #if defined(CONFIG_RTC_DRV_BFIN) || defined(CONFIG_RTC_DRV_BFIN_MODULE)
@@ -569,8 +579,10 @@ static struct platform_device *ezkit_devices[] __initdata = {
 
 #if defined(CONFIG_I2C_BLACKFIN_TWI) || defined(CONFIG_I2C_BLACKFIN_TWI_MODULE)
        &i2c_bfin_twi0_device,
+#if !defined(CONFIG_BF542)
        &i2c_bfin_twi1_device,
 #endif
+#endif
 };
 
 static int __init stamp_init(void)
index 3071c243d42672147e83bfe415ca602c5e2acbb9..74b34c7f36295000a080f33e2d279d7162462da2 100644 (file)
@@ -158,6 +158,27 @@ ENTRY(__stext)
        w[p2] = r0;
        ssync;
 
+       p2.h = hi(EBIU_MBSCTL);
+       p2.l = lo(EBIU_MBSCTL);
+       r0.h = hi(CONFIG_EBIU_MBSCTLVAL);
+       r0.l = lo(CONFIG_EBIU_MBSCTLVAL);
+       [p2] = r0;
+       ssync;
+
+       p2.h = hi(EBIU_MODE);
+       p2.l = lo(EBIU_MODE);
+       r0.h = hi(CONFIG_EBIU_MODEVAL);
+       r0.l = lo(CONFIG_EBIU_MODEVAL);
+       [p2] = r0;
+       ssync;
+
+       p2.h = hi(EBIU_FCTL);
+       p2.l = lo(EBIU_FCTL);
+       r0.h = hi(CONFIG_EBIU_FCTLVAL);
+       r0.l = lo(CONFIG_EBIU_FCTLVAL);
+       [p2] = r0;
+       ssync;
+
        /* This section keeps the processor in supervisor mode
         * during kernel boot.  Switches to user mode at end of boot.
         * See page 3-9 of Hardware Reference manual for documentation.
index 0a17c4cf0059708aaa5052e992c7fda60b6e4468..3f4895450bea0286fcbbe8b5b8b512cb9c8a1434 100644 (file)
@@ -1,4 +1,6 @@
-if BF561
+if (BF561)
+
+source "arch/blackfin/mach-bf561/boards/Kconfig"
 
 menu "BF561 Specific Configuration"
 
diff --git a/arch/blackfin/mach-bf561/boards/Kconfig b/arch/blackfin/mach-bf561/boards/Kconfig
new file mode 100644 (file)
index 0000000..e41a67b
--- /dev/null
@@ -0,0 +1,27 @@
+choice
+       prompt "System type"
+       default BFIN561_EZKIT
+       help
+         Select your board!
+
+config BFIN561_EZKIT
+       bool "BF561-EZKIT"
+       help
+         BF561-EZKIT-LITE board support.
+
+config BFIN561_TEPLA
+       bool "BF561-TEPLA"
+       help
+        BF561-TEPLA board support.
+
+config BFIN561_BLUETECHNIX_CM
+       bool "Bluetechnix CM-BF561"
+       help
+         CM-BF561 support for EVAL- and DEV-Board.
+
+config GENERIC_BF561_BOARD
+       bool "Generic"
+       help
+         Generic or Custom board support.
+
+endchoice
index 495a1cf9d4529dc04ab81e0dcd77d840d84cd8b8..04add010b568459da6d324afd87bf4ae46d40b55 100644 (file)
@@ -2,7 +2,7 @@
 # arch/blackfin/mach-bf561/boards/Makefile
 #
 
-obj-$(CONFIG_GENERIC_BOARD)            += generic_board.o
+obj-$(CONFIG_GENERIC_BF561_BOARD)      += generic_board.o
 obj-$(CONFIG_BFIN561_BLUETECHNIX_CM)   += cm_bf561.o
 obj-$(CONFIG_BFIN561_EZKIT)            += ezkit.o
 obj-$(CONFIG_BFIN561_TEPLA)            += tepla.o
index 97aeb43fd8b46e05eead1e481d0b3dca3507da34..c19cd29b948adfef35900341d2a36502fca7dd75 100644 (file)
 #include <linux/mtd/partitions.h>
 #include <linux/spi/spi.h>
 #include <linux/spi/flash.h>
-#include <linux/usb_isp1362.h>
+#include <linux/usb/isp1362.h>
 #include <linux/pata_platform.h>
 #include <linux/irq.h>
 #include <asm/dma.h>
 #include <asm/bfin5xx_spi.h>
+#include <asm/portmux.h>
 
 /*
  * Name the Board for the /proc/cpuinfo
@@ -182,6 +183,7 @@ static struct resource bfin_spi0_resource[] = {
 static struct bfin5xx_spi_master bfin_spi0_info = {
        .num_chipselect = 8,
        .enable_dma = 1,  /* master has the ability to do dma transfer */
+       .pin_req = {P_SPI0_SCK, P_SPI0_MISO, P_SPI0_MOSI, 0},
 };
 
 static struct platform_device bfin_spi0_device = {
index 059d516cec23e4bc9877d5271cf300bbf3a600c4..4ff8f6e7a11f4c82dad89d309a48fc693c538d8f 100644 (file)
@@ -35,6 +35,7 @@
 #include <linux/pata_platform.h>
 #include <asm/dma.h>
 #include <asm/bfin5xx_spi.h>
+#include <asm/portmux.h>
 
 /*
  * Name the Board for the /proc/cpuinfo
@@ -115,6 +116,28 @@ static struct platform_device smc91x_device = {
 };
 #endif
 
+#if defined(CONFIG_AX88180) || defined(CONFIG_AX88180_MODULE)
+static struct resource ax88180_resources[] = {
+       [0] = {
+               .start  = 0x2c000000,
+               .end    = 0x2c000000 + 0x8000,
+               .flags  = IORESOURCE_MEM,
+       },
+       [1] = {
+               .start  = IRQ_PF10,
+               .end    = IRQ_PF10,
+               .flags  = (IORESOURCE_IRQ | IORESOURCE_IRQ_LOWLEVEL),
+       },
+};
+
+static struct platform_device ax88180_device = {
+       .name           = "ax88180",
+       .id             = -1,
+       .num_resources  = ARRAY_SIZE(ax88180_resources),
+       .resource       = ax88180_resources,
+};
+#endif
+
 #if defined(CONFIG_SERIAL_BFIN) || defined(CONFIG_SERIAL_BFIN_MODULE)
 static struct resource bfin_uart_resources[] = {
        {
@@ -160,6 +183,7 @@ static struct resource bfin_spi0_resource[] = {
 static struct bfin5xx_spi_master bfin_spi0_info = {
        .num_chipselect = 8,
        .enable_dma = 1,  /* master has the ability to do dma transfer */
+       .pin_req = {P_SPI0_SCK, P_SPI0_MISO, P_SPI0_MOSI, 0},
 };
 
 static struct platform_device bfin_spi0_device = {
@@ -226,6 +250,11 @@ static struct platform_device *ezkit_devices[] __initdata = {
 #if defined(CONFIG_SMC91X) || defined(CONFIG_SMC91X_MODULE)
        &smc91x_device,
 #endif
+
+#if defined(CONFIG_AX88180) || defined(CONFIG_AX88180_MODULE)
+       &ax88180_device,
+#endif
+
 #if defined(CONFIG_SPI_BFIN) || defined(CONFIG_SPI_BFIN_MODULE)
        &bfin_spi0_device,
 #endif
index 46816be4b2bab8dac67a052f5bd00f4cddd68b38..fc80c5d059f8b28cbd29471f37c152f7d21e9322 100644 (file)
@@ -48,10 +48,6 @@ static struct resource smc91x_resources[] = {
                .end = IRQ_PROG_INTB,
                .flags = IORESOURCE_IRQ | IORESOURCE_IRQ_HIGHLEVEL,
        }, {
-               /*
-                *  denotes the flag pin and is used directly if
-                *  CONFIG_IRQCHIP_DEMUX_GPIO is defined.
-                */
                .start = IRQ_PF9,
                .end = IRQ_PF9,
                .flags = IORESOURCE_IRQ | IORESOURCE_IRQ_HIGHLEVEL,
index 4a17c6da2a594e10c1c8849a6880adf879669316..ec6a2207c202491f347cd3ab2f45721fb33ec634 100644 (file)
@@ -31,10 +31,6 @@ static struct resource smc91x_resources[] = {
                .end    = IRQ_PROG_INTB,
                .flags  = IORESOURCE_IRQ|IORESOURCE_IRQ_HIGHLEVEL,
        }, {
-               /*
-                *  denotes the flag pin and is used directly if
-                *  CONFIG_IRQCHIP_DEMUX_GPIO is defined.
-                */
                .start  = IRQ_PF7,
                .end    = IRQ_PF7,
                .flags  = IORESOURCE_IRQ|IORESOURCE_IRQ_HIGHLEVEL,
index 785ca981697105973a8079fde7ecddde7179274e..a4f0b428a34da88f1bcd0543973f46f3bf5dbb34 100644 (file)
@@ -91,7 +91,7 @@ static char *cplb_print_entry(char *buf, int type)
        } else
                buf += sprintf(buf, "Data CPLB entry:\n");
 
-       buf += sprintf(buf, "Address\t\tData\tSize\tValid\tLocked\tSwapin\n\tiCount\toCount\n");
+       buf += sprintf(buf, "Address\t\tData\tSize\tValid\tLocked\tSwapin\tiCount\toCount\n");
 
        while (*p_addr != 0xffffffff) {
                entry = cplb_find_entry(cplb_addr, cplb_data, *p_addr, *p_data);
index 946703ef48ffc912a45b93c7c10a05d0ccb848bc..6f909cbfac7b1c340fcbde3f6c4e2aea05fb5dd9 100644 (file)
@@ -73,7 +73,7 @@ ENTRY(_cplb_mgr)
        /* ICPLB Miss Exception. We need to choose one of the
        * currently-installed CPLBs, and replace it with one
        * from the configuration table.
-       */
+       */
 
        P4.L = LO(ICPLB_FAULT_ADDR);
        P4.H = HI(ICPLB_FAULT_ADDR);
@@ -222,7 +222,7 @@ ENTRY(_cplb_mgr)
 
        /* See if failed address > start address */
        CC = R4 <= R0(IU);
-       IF !CC JUMP .Linext;
+       IF !CC JUMP .Linext;
 
        /* extract page size (17:16)*/
        R3 = EXTRACT(R2, R1.L) (Z);
@@ -271,16 +271,27 @@ ENTRY(_cplb_mgr)
 
 /* FAILED CASES*/
 .Lno_page_in_table:
-       ( R7:4,P5:3 ) = [SP++];
        R0 = CPLB_NO_ADDR_MATCH;
-       RTS;
+       JUMP .Lfail_ret;
+
 .Lall_locked:
-       ( R7:4,P5:3 ) = [SP++];
        R0 = CPLB_NO_UNLOCKED;
-       RTS;
+       JUMP .Lfail_ret;
+
 .Lprot_violation:
-       ( R7:4,P5:3 ) = [SP++];
        R0 = CPLB_PROT_VIOL;
+
+.Lfail_ret:
+       /* Make sure we turn protection/cache back on, even in the failing case */
+       BITSET(R5,ENICPLB_P);
+       CLI R2;
+       SSYNC;          /* SSYNC required before writing to IMEM_CONTROL. */
+       .align 8;
+       [P4] = R5;
+       SSYNC;
+       STI R2;
+
+       ( R7:4,P5:3 ) = [SP++];
        RTS;
 
 .Ldcplb_write:
index 1b13fa470977e8d0c13aa3ba722f009f47556445..dc9d3ee2e69113ef9168c5ce4acf501e1057c760 100644 (file)
@@ -33,7 +33,7 @@
  * after a timer-interrupt and after each system call.
  */
 
-
+#include <linux/init.h>
 #include <linux/linkage.h>
 #include <linux/unistd.h>
 #include <asm/blackfin.h>
@@ -71,25 +71,44 @@ ENDPROC(_safe_speculative_execution)
  * This one does not lower the level to IRQ5, and thus can be used to
  * patch up CPLB misses on the kernel stack.
  */
-ENTRY(_ex_dcplb)
 #if ANOMALY_05000261
+#define _ex_dviol _ex_workaround_261
+#define _ex_dmiss _ex_workaround_261
+#define _ex_dmult _ex_workaround_261
+
+ENTRY(_ex_workaround_261)
        /*
         * Work around an anomaly: if we see a new DCPLB fault, return
         * without doing anything.  Then, if we get the same fault again,
         * handle it.
         */
+       P4 = R7;        /* Store EXCAUSE */
        p5.l = _last_cplb_fault_retx;
        p5.h = _last_cplb_fault_retx;
        r7 = [p5];
        r6 = retx;
        [p5] = r6;
        cc = r6 == r7;
-       if !cc jump _return_from_exception;
+       if !cc jump _bfin_return_from_exception;
        /* fall through */
+       R7 = P4;
+       R6 = 0x26;      /* Data CPLB Miss */
+       cc = R6 == R7;
+       if cc jump _ex_dcplb_miss (BP);
+       /* Handle 0x23 Data CPLB Protection Violation
+        * and Data CPLB Multiple Hits - Linux Trap Zero
+        */
+       jump _ex_trap_c;
+ENDPROC(_ex_workaround_261)
+
+#else
+#define _ex_dviol _ex_trap_c
+#define _ex_dmiss _ex_dcplb_miss
+#define _ex_dmult _ex_trap_c
 #endif
-ENDPROC(_ex_dcplb)
 
-ENTRY(_ex_icplb)
+ENTRY(_ex_dcplb_miss)
+ENTRY(_ex_icplb_miss)
        (R7:6,P5:4) = [sp++];
        ASTAT = [sp++];
        SAVE_ALL_SYS
@@ -98,7 +117,7 @@ ENTRY(_ex_icplb)
        RESTORE_ALL_SYS
        SP = EX_SCRATCH_REG;
        rtx;
-ENDPROC(_ex_icplb)
+ENDPROC(_ex_icplb_miss)
 
 ENTRY(_ex_syscall)
        DEBUG_START_HWTRACE(p5, r7)
@@ -120,7 +139,7 @@ ENTRY(_ex_single_step)
        r7 = retx;
        r6 = reti;
        cc = r7 == r6;
-       if cc jump _return_from_exception
+       if cc jump _bfin_return_from_exception
        r7 = syscfg;
        bitclr (r7, 0);
        syscfg = R7;
@@ -137,8 +156,9 @@ ENTRY(_ex_single_step)
        r7 = [p4];
        cc = r6 == r7;
        if !cc jump _ex_trap_c;
+ENDPROC(_ex_single_step)
 
-ENTRY(_return_from_exception)
+ENTRY(_bfin_return_from_exception)
        DEBUG_START_HWTRACE(p5, r7)
 #if ANOMALY_05000257
        R7=LC0;
@@ -150,7 +170,7 @@ ENTRY(_return_from_exception)
        ASTAT = [sp++];
        sp = EX_SCRATCH_REG;
        rtx;
-ENDPROC(_ex_soft_bp)
+ENDPROC(_bfin_return_from_exception)
 
 ENTRY(_handle_bad_cplb)
        /* To get here, we just tried and failed to change a CPLB
@@ -843,7 +863,7 @@ ENTRY(_ex_trace_buff_full)
        LC0 = [sp++];
        P2 = [sp++];
        P3 = [sp++];
-       jump _return_from_exception;
+       jump _bfin_return_from_exception;
 ENDPROC(_ex_trace_buff_full)
 
 #if CONFIG_DEBUG_BFIN_HWTRACE_EXPAND_LEN == 4
@@ -861,7 +881,7 @@ ENTRY(_software_trace_buff)
 #endif /* CONFIG_DEBUG_BFIN_HWTRACE_EXPAND */
 
 #if CONFIG_EARLY_PRINTK
-.section .init.text
+__INIT
 ENTRY(_early_trap)
        SAVE_ALL_SYS
        trace_buffer_stop(p0,r0);
@@ -896,6 +916,7 @@ ENTRY(_early_trap)
        call _early_trap_c;
        SP += 12;
 ENDPROC(_early_trap)
+__FINIT
 #endif /* CONFIG_EARLY_PRINTK */
 
 /*
@@ -908,6 +929,7 @@ ENDPROC(_early_trap)
 #else
 .data
 #endif
+
 ENTRY(_ex_table)
        /* entry for each EXCAUSE[5:0]
         * This table must be in sync with the table in ./kernel/traps.c
@@ -952,16 +974,16 @@ ENTRY(_ex_table)
        .long _ex_trap_c        /* 0x20 - Reserved */
        .long _ex_trap_c        /* 0x21 - Undefined Instruction */
        .long _ex_trap_c        /* 0x22 - Illegal Instruction Combination */
-       .long _ex_dcplb         /* 0x23 - Data CPLB Protection Violation */
+       .long _ex_dviol         /* 0x23 - Data CPLB Protection Violation */
        .long _ex_trap_c        /* 0x24 - Data access misaligned */
        .long _ex_trap_c        /* 0x25 - Unrecoverable Event */
-       .long _ex_dcplb         /* 0x26 - Data CPLB Miss */
-       .long _ex_trap_c        /* 0x27 - Data CPLB Multiple Hits - Linux Trap Zero */
+       .long _ex_dmiss         /* 0x26 - Data CPLB Miss */
+       .long _ex_dmult         /* 0x27 - Data CPLB Multiple Hits - Linux Trap Zero */
        .long _ex_trap_c        /* 0x28 - Emulation Watchpoint */
        .long _ex_trap_c        /* 0x29 - Instruction fetch access error (535 only) */
        .long _ex_trap_c        /* 0x2A - Instruction fetch misaligned */
-       .long _ex_icplb         /* 0x2B - Instruction CPLB protection Violation */
-       .long _ex_icplb         /* 0x2C - Instruction CPLB miss */
+       .long _ex_trap_c        /* 0x2B - Instruction CPLB protection Violation */
+       .long _ex_icplb_miss    /* 0x2C - Instruction CPLB miss */
        .long _ex_trap_c        /* 0x2D - Instruction CPLB Multiple Hits */
        .long _ex_trap_c        /* 0x2E - Illegal use of Supervisor Resource */
        .long _ex_trap_c        /* 0x2E - Illegal use of Supervisor Resource */
index c6b32fe0f6e9f0b2cc12ebcaa3fd28e4e6ed89ef..4de376418a18650d2e956c5337a351384e2fe977 100644 (file)
@@ -30,7 +30,6 @@
 
 #include <asm/blackfin.h>
 #include <asm/mach/irq.h>
-#include <linux/autoconf.h>
 #include <linux/linkage.h>
 #include <asm/entry.h>
 #include <asm/asm-offsets.h>
index c2f05fabedc1c8f47e859d4821cecfe59e17c7b9..4882f0e801a9df1df9b40b36e4404775f1b5cc24 100644 (file)
@@ -181,7 +181,6 @@ static struct irq_chip bf561_internal_irqchip = {
        .unmask = bf561_internal_unmask_irq,
 };
 
-#ifdef CONFIG_IRQCHIP_DEMUX_GPIO
 static unsigned short gpio_enabled[gpio_bank(MAX_BLACKFIN_GPIOS)];
 static unsigned short gpio_edge_triggered[gpio_bank(MAX_BLACKFIN_GPIOS)];
 
@@ -362,8 +361,6 @@ static void bf561_demux_gpio_irq(unsigned int inta_irq,
 
 }
 
-#endif                         /* CONFIG_IRQCHIP_DEMUX_GPIO */
-
 void __init init_exception_vectors(void)
 {
        SSYNC();
@@ -413,26 +410,21 @@ int __init init_arch_irq(void)
                        set_irq_chip(irq, &bf561_core_irqchip);
                else
                        set_irq_chip(irq, &bf561_internal_irqchip);
-#ifdef CONFIG_IRQCHIP_DEMUX_GPIO
+
                if ((irq != IRQ_PROG0_INTA) &&
-                   (irq != IRQ_PROG1_INTA) && (irq != IRQ_PROG2_INTA)) {
-#endif
+                   (irq != IRQ_PROG1_INTA) &&
+                   (irq != IRQ_PROG2_INTA))
                        set_irq_handler(irq, handle_simple_irq);
-#ifdef CONFIG_IRQCHIP_DEMUX_GPIO
-               } else {
+               else
                        set_irq_chained_handler(irq, bf561_demux_gpio_irq);
-               }
-#endif
-
        }
 
-#ifdef CONFIG_IRQCHIP_DEMUX_GPIO
        for (irq = IRQ_PF0; irq <= IRQ_PF47; irq++) {
                set_irq_chip(irq, &bf561_gpio_irqchip);
                /* if configured as edge, then will be changed to do_edge_IRQ */
                set_irq_handler(irq, handle_level_irq);
        }
-#endif
+
        bfin_write_IMASK(0);
        CSYNC();
        ilat = bfin_read_ILAT();
@@ -457,9 +449,8 @@ int __init init_arch_irq(void)
 }
 
 #ifdef CONFIG_DO_IRQ_L1
-void do_irq(int vec, struct pt_regs *fp)__attribute__((l1_text));
+__attribute__((l1_text))
 #endif
-
 void do_irq(int vec, struct pt_regs *fp)
 {
        if (vec == EVT_IVTMR_P) {
index 2d2b63567b301d80c7223e8025e4acab279847ca..147f0731087a031bb2514e29bdecdab7147138fe 100644 (file)
@@ -308,7 +308,7 @@ static void bfin_demux_error_irq(unsigned int int_err_irq,
 }
 #endif                         /* BF537_GENERIC_ERROR_INT_DEMUX */
 
-#if defined(CONFIG_IRQCHIP_DEMUX_GPIO) && !defined(CONFIG_BF54x)
+#if !defined(CONFIG_BF54x)
 
 static unsigned short gpio_enabled[gpio_bank(MAX_BLACKFIN_GPIOS)];
 static unsigned short gpio_edge_triggered[gpio_bank(MAX_BLACKFIN_GPIOS)];
@@ -464,7 +464,7 @@ static void bfin_demux_gpio_irq(unsigned int intb_irq,
        }
 }
 
-#else                          /* CONFIG_IRQCHIP_DEMUX_GPIO */
+#else                          /* CONFIG_BF54x */
 
 #define NR_PINT_SYS_IRQS       4
 #define NR_PINT_BITS           32
@@ -726,7 +726,7 @@ static void bfin_demux_gpio_irq(unsigned int intb_irq,
        }
 
 }
-#endif                         /* CONFIG_IRQCHIP_DEMUX_GPIO */
+#endif
 
 void __init init_exception_vectors(void)
 {
@@ -766,10 +766,10 @@ int __init init_arch_irq(void)
        bfin_write_SIC_IMASK1(SIC_UNMASK_ALL);
        bfin_write_SIC_IWR0(IWR_ENABLE_ALL);
        bfin_write_SIC_IWR1(IWR_ENABLE_ALL);
-#ifdef CONFIG_BF54x
+# ifdef CONFIG_BF54x
        bfin_write_SIC_IMASK2(SIC_UNMASK_ALL);
        bfin_write_SIC_IWR2(IWR_ENABLE_ALL);
-#endif
+# endif
 #else
        bfin_write_SIC_IMASK(SIC_UNMASK_ALL);
        bfin_write_SIC_IWR(IWR_ENABLE_ALL);
@@ -778,13 +778,13 @@ int __init init_arch_irq(void)
 
        local_irq_disable();
 
-#if defined(CONFIG_IRQCHIP_DEMUX_GPIO) && defined(CONFIG_BF54x)
-#ifdef CONFIG_PINTx_REASSIGN
+#ifdef CONFIG_BF54x
+# ifdef CONFIG_PINTx_REASSIGN
        pint[0]->assign = CONFIG_PINT0_ASSIGN;
        pint[1]->assign = CONFIG_PINT1_ASSIGN;
        pint[2]->assign = CONFIG_PINT2_ASSIGN;
        pint[3]->assign = CONFIG_PINT3_ASSIGN;
-#endif
+# endif
        /* Whenever PINTx_ASSIGN is altered init_pint_lut() must be executed! */
        init_pint_lut();
 #endif
@@ -799,18 +799,17 @@ int __init init_arch_irq(void)
 #endif
 
                        switch (irq) {
-#ifdef CONFIG_IRQCHIP_DEMUX_GPIO
 #if defined(CONFIG_BF53x)
                        case IRQ_PROG_INTA:
                                set_irq_chained_handler(irq,
                                                        bfin_demux_gpio_irq);
                                break;
-#if defined(BF537_FAMILY) && !(defined(CONFIG_BFIN_MAC) || defined(CONFIG_BFIN_MAC_MODULE))
+# if defined(BF537_FAMILY) && !(defined(CONFIG_BFIN_MAC) || defined(CONFIG_BFIN_MAC_MODULE))
                        case IRQ_MAC_RX:
                                set_irq_chained_handler(irq,
                                                        bfin_demux_gpio_irq);
                                break;
-#endif
+# endif
 #elif defined(CONFIG_BF54x)
                        case IRQ_PINT0:
                                set_irq_chained_handler(irq,
@@ -841,7 +840,6 @@ int __init init_arch_irq(void)
                                set_irq_chained_handler(irq,
                                                        bfin_demux_gpio_irq);
                                break;
-#endif
 #endif
                        default:
                                set_irq_handler(irq, handle_simple_irq);
@@ -861,7 +859,6 @@ int __init init_arch_irq(void)
        }
 #endif
 
-#ifdef CONFIG_IRQCHIP_DEMUX_GPIO
 #ifndef CONFIG_BF54x
        for (irq = IRQ_PF0; irq < NR_IRQS; irq++) {
 #else
@@ -871,7 +868,7 @@ int __init init_arch_irq(void)
                /* if configured as edge, then will be changed to do_edge_IRQ */
                set_irq_handler(irq, handle_level_irq);
        }
-#endif
+
        bfin_write_IMASK(0);
        CSYNC();
        ilat = bfin_read_ILAT();
@@ -896,9 +893,8 @@ int __init init_arch_irq(void)
 }
 
 #ifdef CONFIG_DO_IRQ_L1
-void do_irq(int vec, struct pt_regs *fp) __attribute__((l1_text));
+__attribute__((l1_text))
 #endif
-
 void do_irq(int vec, struct pt_regs *fp)
 {
        if (vec == EVT_IVTMR_P) {
index f05e3dadaf335c0f28d8fe5c42ade7a514427f69..b22959b197e5c3e3d0643c19653092fa93238072 100644 (file)
@@ -153,27 +153,29 @@ asmlinkage void irq_panic(int reason, struct pt_regs *regs)
                case (SEQSTAT_HWERRCAUSE_SYSTEM_MMR):   /* System MMR Error */
                        info.si_code = BUS_ADRALN;
                        sig = SIGBUS;
-                       printk(KERN_EMERG HWC_x2);
+                       printk(KERN_EMERG HWC_x2(KERN_EMERG));
                        break;
                case (SEQSTAT_HWERRCAUSE_EXTERN_ADDR):  /* External Memory Addressing Error */
                        info.si_code = BUS_ADRERR;
                        sig = SIGBUS;
-                       printk(KERN_EMERG HWC_x3);
+                       printk(KERN_EMERG HWC_x3(KERN_EMERG));
                        break;
                case (SEQSTAT_HWERRCAUSE_PERF_FLOW):    /* Performance Monitor Overflow */
-                       printk(KERN_EMERG HWC_x12);
+                       printk(KERN_EMERG HWC_x12(KERN_EMERG));
                        break;
                case (SEQSTAT_HWERRCAUSE_RAISE_5):      /* RAISE 5 instruction */
-                       printk(KERN_EMERG HWC_x18);
+                       printk(KERN_EMERG HWC_x18(KERN_EMERG));
                        break;
                default:        /* Reserved */
-                       printk(KERN_EMERG HWC_default);
+                       printk(KERN_EMERG HWC_default(KERN_EMERG));
                        break;
                }
        }
 
        regs->ipend = bfin_read_IPEND();
-       dump_bfin_regs(regs, (void *)regs->pc);
+       dump_bfin_process(regs);
+       dump_bfin_mem((void *)regs->pc);
+       show_regs(regs);
        if (0 == (info.si_signo = sig) || 0 == user_mode(regs)) /* in kernelspace */
                panic("Unhandled IRQ or exceptions!\n");
        else {                  /* in userspace */
index b99ea883cd22bdafa38377d1e8d4d66c9a55da93..e41f0e8ecacbd33d463295897aa1454d7b1e6023 100644 (file)
@@ -27,7 +27,6 @@
  * 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
  */
 
-#include <linux/autoconf.h>
 #include <linux/module.h>
 #include <linux/kernel.h>
 #include <linux/types.h>
index faf8b4d3ca01c66f37e5d4d9e4fd43a2d0728c27..e3c0f29281496781f948b6e14414e53aea75eaab 100644 (file)
@@ -542,45 +542,6 @@ config ETRAX_RS485_DISABLE_RECEIVER
          loopback.  Not all products are able to do this in software only.
          Axis 2400/2401 must disable receiver.
 
-config ETRAX_IDE
-       bool "ATA/IDE support"
-       select IDE
-       select BLK_DEV_IDE
-       select BLK_DEV_IDEDISK
-       select BLK_DEV_IDECD
-       select BLK_DEV_IDEDMA
-       select IDE_GENERIC
-       help
-         Enable this to get support for ATA/IDE.
-         You can't use parallel ports or SCSI ports
-         at the same time.
-
-
-config ETRAX_IDE_DELAY
-       int "Delay for drives to regain consciousness"
-       depends on ETRAX_IDE
-       default 15
-       help
-         Number of seconds to wait for IDE drives to spin up after an IDE
-         reset.
-choice
-       prompt "IDE reset pin"
-       depends on ETRAX_IDE
-       default ETRAX_IDE_PB7_RESET
-
-config ETRAX_IDE_PB7_RESET
-       bool "Port_PB_Bit_7"
-       help
-         IDE reset on pin 7 on port B
-
-config ETRAX_IDE_G27_RESET
-       bool "Port_G_Bit_27"
-       help
-         IDE reset on pin 27 on port G
-
-endchoice
-
-
 config ETRAX_USB_HOST
        bool "USB host"
        select USB
index 7f72d7c9e1ce0f2bf6d29a1657d936b12de32e71..9bccb5e2a9607b399245f3a42f9c558d325e16bd 100644 (file)
@@ -582,18 +582,6 @@ config ETRAX_PE_CHANGEABLE_BITS
          that a user can change the value on using ioctl's.
          Bit set = changeable.
 
-config ETRAX_IDE
-       bool "ATA/IDE support"
-       depends on ETRAX_ARCH_V32
-       select IDE
-       select BLK_DEV_IDE
-       select BLK_DEV_IDEDISK
-       select BLK_DEV_IDECD
-       select BLK_DEV_IDEDMA
-       select IDE_GENERIC
-       help
-         Enables the ETRAX IDE driver.
-
 config ETRAX_CARDBUS
         bool "Cardbus support"
         depends on ETRAX_ARCH_V32
index dac4a5f68c2ec5f294301eb5f9108a5702f08570..bd0bdf908d937c58323f35fb8e7acb7897e2c0bf 100644 (file)
@@ -63,7 +63,7 @@ __break_trace_through_exceptions:
 # entry point for Break Exceptions/Interrupts
 #
 ###############################################################################
-       .text
+       .section        .text.break
        .balign         4
        .globl          __entry_break
 __entry_break:
index 1e74f3c5cee27d014d907c269778b018b828b563..f926c70947764ef108d5d3da1bddd44a364e9e14 100644 (file)
@@ -38,7 +38,7 @@
 
 #define nr_syscalls ((syscall_table_size)/4)
 
-       .text
+       .section        .text.entry
        .balign         4
 
 .macro LEDS val
index 3b71e0c863996f66828dea23286c616e695176c8..a17a81d58bf69386638f89b66a01548e22a4b61e 100644 (file)
@@ -76,6 +76,12 @@ SECTIONS
          *(.data.init_task)
   }
 
+  . = ALIGN(4096);
+  .data.page_aligned : { *(.data.idt) }
+
+  . = ALIGN(L1_CACHE_BYTES);
+  .data.cacheline_aligned : { *(.data.cacheline_aligned) }
+
   .trap : {
        /* trap table management - read entry-table.S before modifying */
        . = ALIGN(8192);
@@ -86,28 +92,25 @@ SECTIONS
        *(.trap.break)
   }
 
-  . = ALIGN(4096);
-  .data.page_aligned : { *(.data.idt) }
-
-  . = ALIGN(L1_CACHE_BYTES);
-  .data.cacheline_aligned : { *(.data.cacheline_aligned) }
-
   /* Text and read-only data */
   . = ALIGN(4);
   _text = .;
   _stext = .;
   .text : {
-       *(
-               .text.start .text.*
+       *(.text.start)
+       *(.text.entry)
+       *(.text.break)
+       *(.text.tlbmiss)
+       TEXT_TEXT
+       SCHED_TEXT
+       LOCK_TEXT
 #ifdef CONFIG_DEBUG_INFO
+       *(
        .init.text
        .exit.text
        .exitcall.exit
-#endif
        )
-       TEXT_TEXT
-       SCHED_TEXT
-       LOCK_TEXT
+#endif
        *(.fixup)
        *(.gnu.warning)
        *(.exitcall.exit)
index 04da674683783ebce980973413f3903016d568da..07643482cad2699c256524d24bf344461516f954 100644 (file)
@@ -16,7 +16,7 @@
 #include <asm/highmem.h>
 #include <asm/spr-regs.h>
 
-       .section        .text
+       .section        .text.tlbmiss
        .balign         4
 
        .globl          __entry_insn_mmu_miss
index 34951aa2370b861d0f0b2b8e91cdf70188cadbd3..b916ccfdef843f158f1814cc74d278d389dcec70 100644 (file)
@@ -77,7 +77,7 @@ vmlinux.gz: vmlinux
        $(Q)$(MAKE) $(build)=$(boot) $@
 
 unwcheck: vmlinux
-       -$(Q)READELF=$(READELF) $(srctree)/arch/ia64/scripts/unwcheck.py $<
+       -$(Q)READELF=$(READELF) python $(srctree)/arch/ia64/scripts/unwcheck.py $<
 
 archclean:
        $(Q)$(MAKE) $(clean)=$(boot)
index df6e9968c84541c0dafdd3306b452fa762e3185f..2e805e0cc56059f51074ec738010a81d2232605f 100644 (file)
@@ -33,5 +33,5 @@ $(obj)/vmlinux.bin: vmlinux FORCE
 LDFLAGS_bootloader = -static -T
 
 $(obj)/bootloader: $(src)/bootloader.lds $(obj)/bootloader.o $(obj)/boot_head.o $(obj)/fw-emu.o \
-                   lib/lib.a arch/ia64/lib/lib.a FORCE
+                   lib/lib.a arch/ia64/lib/built-in.o arch/ia64/lib/lib.a FORCE
        $(call if_changed,ld)
index 69ae585310338ddc0f0e3f7578b9e9079ff43824..3977f25a1265031979ad807a961cf06862ffe1ee 100644 (file)
@@ -22,10 +22,11 @@ SECTIONS
   .sdata     : { *(.sdata) }
   _edata  =  .;
 
-  _bss = .;
+  __bss_start = .;
   .sbss      : { *(.sbss) *(.scommon) }
   .bss       : { *(.bss) *(COMMON) }
   . = ALIGN(64 / 8);
+  __bss_stop = .;
   _end = . ;
 
   /* Stabs debugging sections.  */
index 897e2083a3b1b4c77f8dd200d3ab593b377677e8..00b5d08f6da8d67da2f67c9506d1164e72e7e0a7 100644 (file)
@@ -860,7 +860,7 @@ int acpi_map_lsapic(acpi_handle handle, int *pcpu)
        lsapic = (struct acpi_madt_local_sapic *)obj->buffer.pointer;
 
        if ((lsapic->header.type != ACPI_MADT_TYPE_LOCAL_SAPIC) ||
-           (!lsapic->lapic_flags & ACPI_MADT_ENABLED)) {
+           (!(lsapic->lapic_flags & ACPI_MADT_ENABLED))) {
                kfree(buffer.pointer);
                return -EINVAL;
        }
index 8e8f8b6193eea5038fb9bff9a53baa03b7694f7b..242d7934112009340e36724787477bffcda63175 100644 (file)
@@ -370,7 +370,7 @@ efi_get_pal_addr (void)
                        continue;
                }
 
-               if (md->num_pages << EFI_PAGE_SHIFT > IA64_GRANULE_SIZE)
+               if (efi_md_size(md) > IA64_GRANULE_SIZE)
                        panic("Woah!  PAL code size bigger than a granule!");
 
 #if EFI_DEBUG
@@ -378,7 +378,7 @@ efi_get_pal_addr (void)
 
                printk(KERN_INFO "CPU %d: mapping PAL code [0x%lx-0x%lx) into [0x%lx-0x%lx)\n",
                        smp_processor_id(), md->phys_addr,
-                       md->phys_addr + (md->num_pages << EFI_PAGE_SHIFT),
+                       md->phys_addr + efi_md_size(md),
                        vaddr & mask, (vaddr & mask) + IA64_GRANULE_SIZE);
 #endif
                return __va(md->phys_addr);
@@ -523,7 +523,7 @@ efi_init (void)
                        md = p;
                        printk("mem%02u: type=%u, attr=0x%lx, range=[0x%016lx-0x%016lx) (%luMB)\n",
                               i, md->type, md->attribute, md->phys_addr,
-                              md->phys_addr + (md->num_pages << EFI_PAGE_SHIFT),
+                              md->phys_addr + efi_md_size(md),
                               md->num_pages >> (20 - EFI_PAGE_SHIFT));
                }
        }
@@ -656,7 +656,7 @@ efi_memory_descriptor (unsigned long phys_addr)
        for (p = efi_map_start; p < efi_map_end; p += efi_desc_size) {
                md = p;
 
-               if (phys_addr - md->phys_addr < (md->num_pages << EFI_PAGE_SHIFT))
+               if (phys_addr - md->phys_addr < efi_md_size(md))
                         return md;
        }
        return NULL;
@@ -1158,7 +1158,7 @@ efi_initialize_iomem_resources(struct resource *code_resource,
 
                res->name = name;
                res->start = md->phys_addr;
-               res->end = md->phys_addr + (md->num_pages << EFI_PAGE_SHIFT) - 1;
+               res->end = md->phys_addr + efi_md_size(md) - 1;
                res->flags = flags;
 
                if (insert_resource(&iomem_resource, res) < 0)
index 454d7a7dfa9d99e7a8d64382b1adce1ee67945f5..3cb1abc00e24f585119def5e51cc72da0d47ea37 100644 (file)
@@ -30,7 +30,7 @@ SECTIONS
         * the dynamic symbol table et al.  If this amount is insufficient,
         * ld -shared will barf.  Just increase it here.
         */
-       . = GATE_ADDR + 0x500;
+       . = GATE_ADDR + 0x600;
 
        .data.patch             : {
                __start_gate_mckinley_e9_patchlist = .;
index bd17190bebb637ece33a8225381a11f49d31b0eb..c3b4412ccc676a85ee76fb0c3a0a436c85b85f68 100644 (file)
@@ -63,6 +63,9 @@ EXPORT_SYMBOL(__udivdi3);
 EXPORT_SYMBOL(__moddi3);
 EXPORT_SYMBOL(__umoddi3);
 
+#include <asm/page.h>
+EXPORT_SYMBOL(copy_page);
+
 #if defined(CONFIG_MD_RAID456) || defined(CONFIG_MD_RAID456_MODULE)
 extern void xor_ia64_2(void);
 extern void xor_ia64_3(void);
index 274a593830432ba711a32725820f520071426a3d..398e2fd1cd2519ef2d6a2186308cd992073b0ec5 100644 (file)
@@ -199,19 +199,6 @@ static inline int __gsi_to_irq(unsigned int gsi)
        return -1;
 }
 
-/*
- * Translate GSI number to the corresponding IA-64 interrupt vector.  If no
- * entry exists, return -1.
- */
-inline int
-gsi_to_vector (unsigned int gsi)
-{
-       int irq = __gsi_to_irq(gsi);
-       if (check_irq_used(irq) < 0)
-               return -1;
-       return irq_to_vector(irq);
-}
-
 int
 gsi_to_irq (unsigned int gsi)
 {
@@ -429,7 +416,7 @@ iosapic_end_level_irq (unsigned int irq)
 #define iosapic_disable_level_irq      mask_irq
 #define iosapic_ack_level_irq          nop
 
-struct irq_chip irq_type_iosapic_level = {
+static struct irq_chip irq_type_iosapic_level = {
        .name =         "IO-SAPIC-level",
        .startup =      iosapic_startup_level_irq,
        .shutdown =     iosapic_shutdown_level_irq,
@@ -478,7 +465,7 @@ iosapic_ack_edge_irq (unsigned int irq)
 #define iosapic_disable_edge_irq       nop
 #define iosapic_end_edge_irq           nop
 
-struct irq_chip irq_type_iosapic_edge = {
+static struct irq_chip irq_type_iosapic_edge = {
        .name =         "IO-SAPIC-edge",
        .startup =      iosapic_startup_edge_irq,
        .shutdown =     iosapic_disable_edge_irq,
@@ -491,7 +478,7 @@ struct irq_chip irq_type_iosapic_edge = {
        .set_affinity = iosapic_set_affinity
 };
 
-unsigned int
+static unsigned int
 iosapic_version (char __iomem *addr)
 {
        /*
@@ -938,7 +925,7 @@ iosapic_register_platform_intr (u32 int_type, unsigned int gsi,
              case ACPI_INTERRUPT_CPEI:
                irq = vector = IA64_CPE_VECTOR;
                BUG_ON(bind_irq_vector(irq, vector, CPU_MASK_ALL));
-               delivery = IOSAPIC_LOWEST_PRIORITY;
+               delivery = IOSAPIC_FIXED;
                mask = 1;
                break;
              default:
index 5fd65d8302c8561e50cf12a576f0c54569c30d1d..fc4d2676264f363d766ce4d9b6c5f76176fd4cb4 100644 (file)
@@ -182,8 +182,8 @@ static int __kprobes unsupported_inst(uint template, uint  slot,
        qp = kprobe_inst & 0x3f;
        if (is_cmp_ctype_unc_inst(template, slot, major_opcode, kprobe_inst)) {
                if (slot == 1 && qp)  {
-                       printk(KERN_WARNING "Kprobes on cmp unc"
-                                       "instruction on slot 1 at <0x%lx>"
+                       printk(KERN_WARNING "Kprobes on cmp unc "
+                                       "instruction on slot 1 at <0x%lx> "
                                        "is not supported\n", addr);
                        return -EINVAL;
 
@@ -221,8 +221,8 @@ static int __kprobes unsupported_inst(uint template, uint  slot,
                         * bit 12 to be equal to 1
                         */
                        if (slot == 1 && qp) {
-                               printk(KERN_WARNING "Kprobes on test bit"
-                                               "instruction on slot at <0x%lx>"
+                               printk(KERN_WARNING "Kprobes on test bit "
+                                               "instruction on slot at <0x%lx> "
                                                "is not supported\n", addr);
                                return -EINVAL;
                        }
@@ -242,7 +242,7 @@ static int __kprobes unsupported_inst(uint template, uint  slot,
                         */
                        int x6=(kprobe_inst >> 27) & 0x3F;
                        if ((x6 == 0x10) || (x6 == 0x11)) {
-                               printk(KERN_WARNING "Kprobes on"
+                               printk(KERN_WARNING "Kprobes on "
                                        "Indirect Predict is not supported\n");
                                return -EINVAL;
                        }
@@ -430,6 +430,23 @@ int __kprobes trampoline_probe_handler(struct kprobe *p, struct pt_regs *regs)
         *       real return address, and all the rest will point to
         *       kretprobe_trampoline
         */
+       hlist_for_each_entry_safe(ri, node, tmp, head, hlist) {
+               if (ri->task != current)
+                       /* another task is sharing our hash bucket */
+                       continue;
+
+               orig_ret_address = (unsigned long)ri->ret_addr;
+               if (orig_ret_address != trampoline_address)
+                       /*
+                        * This is the real return address. Any other
+                        * instances associated with this task are for
+                        * other calls deeper on the call stack
+                        */
+                       break;
+       }
+
+       regs->cr_iip = orig_ret_address;
+
        hlist_for_each_entry_safe(ri, node, tmp, head, hlist) {
                if (ri->task != current)
                        /* another task is sharing our hash bucket */
@@ -452,8 +469,6 @@ int __kprobes trampoline_probe_handler(struct kprobe *p, struct pt_regs *regs)
 
        kretprobe_assert(ri, orig_ret_address, trampoline_address);
 
-       regs->cr_iip = orig_ret_address;
-
        reset_current_kprobe();
        spin_unlock_irqrestore(&kretprobe_lock, flags);
        preempt_enable_no_resched();
index 2b3751eef5ce716506706134e19b3d520b196119..4ac2b1f1bd3b7fb49b4407c32b0482a5226b7a61 100644 (file)
@@ -95,7 +95,6 @@ static struct resource bss_resource = {
        .name   = "Kernel bss",
        .flags  = IORESOURCE_BUSY | IORESOURCE_MEM
 };
-extern char _text[], _end[], _etext[], _edata[], _bss[];
 
 unsigned long ia64_max_cacheline_size;
 
@@ -206,7 +205,7 @@ static int __init register_memory(void)
        code_resource.end   = ia64_tpa(_etext) - 1;
        data_resource.start = ia64_tpa(_etext);
        data_resource.end   = ia64_tpa(_edata) - 1;
-       bss_resource.start  = ia64_tpa(_bss);
+       bss_resource.start  = ia64_tpa(__bss_start);
        bss_resource.end    = ia64_tpa(_end) - 1;
        efi_initialize_iomem_resources(&code_resource, &data_resource,
                        &bss_resource);
index cdb64cc4d9c85d93ad21b26756047d358387700a..4c730099d58fcbfae6140c4f523bf210426b733b 100644 (file)
@@ -98,7 +98,7 @@ restore_sigcontext (struct sigcontext __user *sc, struct sigscratch *scr)
        if ((flags & IA64_SC_FLAG_FPH_VALID) != 0) {
                struct ia64_psr *psr = ia64_psr(&scr->pt);
 
-               __copy_from_user(current->thread.fph, &sc->sc_fr[32], 96*16);
+               err |= __copy_from_user(current->thread.fph, &sc->sc_fr[32], 96*16);
                psr->mfh = 0;   /* drop signal handler's fph contents... */
                preempt_disable();
                if (psr->dfh)
@@ -244,7 +244,7 @@ static long
 setup_sigcontext (struct sigcontext __user *sc, sigset_t *mask, struct sigscratch *scr)
 {
        unsigned long flags = 0, ifs, cfm, nat;
-       long err;
+       long err = 0;
 
        ifs = scr->pt.cr_ifs;
 
@@ -257,12 +257,12 @@ setup_sigcontext (struct sigcontext __user *sc, sigset_t *mask, struct sigscratc
        ia64_flush_fph(current);
        if ((current->thread.flags & IA64_THREAD_FPH_VALID)) {
                flags |= IA64_SC_FLAG_FPH_VALID;
-               __copy_to_user(&sc->sc_fr[32], current->thread.fph, 96*16);
+               err = __copy_to_user(&sc->sc_fr[32], current->thread.fph, 96*16);
        }
 
        nat = ia64_get_scratch_nat_bits(&scr->pt, scr->scratch_unat);
 
-       err  = __put_user(flags, &sc->sc_flags);
+       err |= __put_user(flags, &sc->sc_flags);
        err |= __put_user(nat, &sc->sc_nat);
        err |= PUT_SIGSET(mask, &sc->sc_mask);
        err |= __put_user(cfm, &sc->sc_cfm);
index 00232b4357ba20eeab9ef1dd82dddbaf489d0a57..757e419ebcf81f0ea1da02916e82d7302dc8395f 100644 (file)
@@ -240,11 +240,12 @@ SECTIONS
   .sdata : AT(ADDR(.sdata) - LOAD_OFFSET)
        { *(.sdata) *(.sdata1) *(.srdata) }
   _edata  =  .;
-  _bss = .;
+  __bss_start = .;
   .sbss : AT(ADDR(.sbss) - LOAD_OFFSET)
        { *(.sbss) *(.scommon) }
   .bss : AT(ADDR(.bss) - LOAD_OFFSET)
        { *(.bss) *(COMMON) }
+  __bss_stop = .;
 
   _end = .;
 
index 46edf8444c7ed0c9d3351e30e2c080e9a8fd7f0a..98771e2a78afdb9040c5c05cdcc8b3cfde9fc44b 100644 (file)
@@ -11,8 +11,8 @@ lib-y := __divsi3.o __udivsi3.o __modsi3.o __umodsi3.o                        \
        flush.o ip_fast_csum.o do_csum.o                                \
        memset.o strlen.o xor.o
 
-lib-$(CONFIG_ITANIUM)  += copy_page.o copy_user.o memcpy.o
-lib-$(CONFIG_MCKINLEY) += copy_page_mck.o memcpy_mck.o
+obj-$(CONFIG_ITANIUM)  += copy_page.o copy_user.o memcpy.o
+obj-$(CONFIG_MCKINLEY) += copy_page_mck.o memcpy_mck.o
 lib-$(CONFIG_PERFMON)  += carta_random.o
 
 AFLAGS___divdi3.o      =
index 1682fc639038e79f64e5a1e1cb96ad846e843035..cef164729db79d77d5b3cb8c694787cf10b8cc6f 100644 (file)
@@ -180,7 +180,7 @@ ia64_tlb_init (void)
        long status;
 
        if ((status = ia64_pal_vm_page_size(&tr_pgbits, &purge.mask)) != 0) {
-               printk(KERN_ERR "PAL_VM_PAGE_SIZE failed with status=%ld;"
+               printk(KERN_ERR "PAL_VM_PAGE_SIZE failed with status=%ld; "
                       "defaulting to architected purge page-sizes.\n", status);
                purge.mask = 0x115557000UL;
        }
old mode 100755 (executable)
new mode 100644 (file)
index 4594770e685a300dbb2ce3e85ab845829a1cf289..c4eb84f9e78119c624889e02b43bbfbcca489730 100644 (file)
@@ -347,7 +347,7 @@ sn_common_bus_fixup(struct pci_bus *bus,
        if (controller->node >= num_online_nodes()) {
                struct pcibus_bussoft *b = SN_PCIBUS_BUSSOFT(bus);
 
-               printk(KERN_WARNING "Device ASIC=%u XID=%u PBUSNUM=%u"
+               printk(KERN_WARNING "Device ASIC=%u XID=%u PBUSNUM=%u "
                       "L_IO=%lx L_MEM=%lx BASE=%lx\n",
                       b->bs_asic_type, b->bs_xid, b->bs_persist_busnum,
                       b->bs_legacy_io, b->bs_legacy_mem, b->bs_base);
@@ -545,19 +545,18 @@ sn_io_late_init(void)
                nasid = NASID_GET(bussoft->bs_base);
                cnode = nasid_to_cnodeid(nasid);
                if ((bussoft->bs_asic_type == PCIIO_ASIC_TYPE_TIOCP) ||
-                   (bussoft->bs_asic_type == PCIIO_ASIC_TYPE_TIOCE)) {
-                       /* TIO PCI Bridge: find nearest node with CPUs */
+                   (bussoft->bs_asic_type == PCIIO_ASIC_TYPE_TIOCE) ||
+                   (bussoft->bs_asic_type == PCIIO_ASIC_TYPE_PIC)) {
+                       /* PCI Bridge: find nearest node with CPUs */
                        int e = sn_hwperf_get_nearest_node(cnode, NULL,
                                                           &near_cnode);
                        if (e < 0) {
                                near_cnode = (cnodeid_t)-1; /* use any node */
-                               printk(KERN_WARNING "pcibr_bus_fixup: failed "
-                                      "to find near node with CPUs to TIO "
+                               printk(KERN_WARNING "sn_io_late_init: failed "
+                                      "to find near node with CPUs for "
                                       "node %d, err=%d\n", cnode, e);
                        }
                        PCI_CONTROLLER(bus)->node = near_cnode;
-               } else if (bussoft->bs_asic_type == PCIIO_ASIC_TYPE_PIC) {
-                       PCI_CONTROLLER(bus)->node = cnode;
                }
        }
 
index a753d79c4e894f1fe2cd04429e28c6e4c103165f..18124542a6ebb695444c9681996147b69ac5d6de 100644 (file)
@@ -36,7 +36,7 @@ sys_rt_sigsuspend(sigset_t __user *unewset, size_t sigsetsize,
                  unsigned long r2, unsigned long r3, unsigned long r4,
                  unsigned long r5, unsigned long r6, struct pt_regs *regs)
 {
-       sigset_t saveset, newset;
+       sigset_t newset;
 
        /* XXX: Don't preclude handling different sized sigset_t's.  */
        if (sigsetsize != sizeof(sigset_t))
@@ -44,21 +44,18 @@ sys_rt_sigsuspend(sigset_t __user *unewset, size_t sigsetsize,
 
        if (copy_from_user(&newset, unewset, sizeof(newset)))
                return -EFAULT;
-       sigdelsetmask(&newset, ~_BLOCKABLE);
+       sigdelsetmask(&newset, sigmask(SIGKILL)|sigmask(SIGSTOP));
 
        spin_lock_irq(&current->sighand->siglock);
-       saveset = current->blocked;
+       current->saved_sigmask = current->blocked;
        current->blocked = newset;
        recalc_sigpending();
        spin_unlock_irq(&current->sighand->siglock);
 
-       regs->r0 = -EINTR;
-       while (1) {
-               current->state = TASK_INTERRUPTIBLE;
-               schedule();
-               if (do_signal(regs, &saveset))
-                       return regs->r0;
-       }
+       current->state = TASK_INTERRUPTIBLE;
+       schedule();
+       set_thread_flag(TIF_RESTORE_SIGMASK);
+       return -ERESTARTNOHAND;
 }
 
 asmlinkage int
index 751ac2a3d120622f74e15246ac5d71d071b1ba2b..95aa79874847135989d141c7aa6bf52f3a3ed2cf 100644 (file)
@@ -284,3 +284,43 @@ ENTRY(sys_call_table)
         .long sys_mq_getsetattr
         .long sys_ni_syscall            /* reserved for kexec */
        .long sys_waitid
+       .long sys_ni_syscall            /* 285 */ /* available */
+       .long sys_add_key
+       .long sys_request_key
+       .long sys_keyctl
+       .long sys_ioprio_set
+       .long sys_ioprio_get            /* 290 */
+       .long sys_inotify_init
+       .long sys_inotify_add_watch
+       .long sys_inotify_rm_watch
+       .long sys_migrate_pages
+       .long sys_openat                /* 295 */
+       .long sys_mkdirat
+       .long sys_mknodat
+       .long sys_fchownat
+       .long sys_futimesat
+       .long sys_fstatat64             /* 300 */
+       .long sys_unlinkat
+       .long sys_renameat
+       .long sys_linkat
+       .long sys_symlinkat
+       .long sys_readlinkat            /* 305 */
+       .long sys_fchmodat
+       .long sys_faccessat
+       .long sys_pselect6
+       .long sys_ppoll
+       .long sys_unshare               /* 310 */
+       .long sys_set_robust_list
+       .long sys_get_robust_list
+       .long sys_splice
+       .long sys_sync_file_range
+       .long sys_tee                   /* 315 */
+       .long sys_vmsplice
+       .long sys_move_pages
+       .long sys_getcpu
+       .long sys_epoll_pwait
+       .long sys_utimensat             /* 320 */
+       .long sys_signalfd
+       .long sys_timerfd
+       .long sys_eventfd
+       .long sys_fallocate
index 880add120eb3208715cb51a82bbd286ccbed877b..8a2a53b33616708a7bbe6815bfd9d58dce42bf98 100644 (file)
@@ -565,7 +565,7 @@ void atari_kbd_leds(unsigned int leds)
 
 static int atari_keyb_done = 0;
 
-int __init atari_keyb_init(void)
+int atari_keyb_init(void)
 {
        if (atari_keyb_done)
                return 0;
@@ -631,6 +631,7 @@ int __init atari_keyb_init(void)
        atari_keyb_done = 1;
        return 0;
 }
+EXPORT_SYMBOL_GPL(atari_keyb_init);
 
 int atari_kbd_translate(unsigned char keycode, unsigned char *keycodep, char raw_mode)
 {
index 2f2ce0c28bc082b0d8d2a9c65ef224ac3509630a..c6fc405a6c8e33348bfe69c1720dada4df2ab4be 100644 (file)
@@ -22,6 +22,7 @@ config MACH_ALCHEMY
 config BASLER_EXCITE
        bool "Basler eXcite smart camera"
        select CEVT_R4K
+       select CSRC_R4K
        select DMA_COHERENT
        select HW_HAS_PCI
        select IRQ_CPU
@@ -49,6 +50,7 @@ config BASLER_EXCITE_PROTOTYPE
 config BCM47XX
        bool "BCM47XX based boards"
        select CEVT_R4K
+       select CSRC_R4K
        select DMA_NONCOHERENT
        select HW_HAS_PCI
        select IRQ_CPU
@@ -66,6 +68,7 @@ config BCM47XX
 config MIPS_COBALT
        bool "Cobalt Server"
        select CEVT_R4K
+       select CSRC_R4K
        select CEVT_GT641XX
        select DMA_NONCOHERENT
        select HW_HAS_PCI
@@ -85,6 +88,7 @@ config MACH_DECSTATION
        bool "DECstations"
        select BOOT_ELF32
        select CEVT_R4K
+       select CSRC_R4K
        select DMA_NONCOHERENT
        select NO_IOPORT
        select IRQ_CPU
@@ -117,6 +121,7 @@ config MACH_JAZZ
        select ARC32
        select ARCH_MAY_HAVE_PC_FDC
        select CEVT_R4K
+       select CSRC_R4K
        select GENERIC_ISA_DMA
        select IRQ_CPU
        select I8253
@@ -137,6 +142,7 @@ config MACH_JAZZ
 config LASAT
        bool "LASAT Networks platforms"
        select CEVT_R4K
+       select CSRC_R4K
        select DMA_NONCOHERENT
        select SYS_HAS_EARLY_PRINTK
        select HW_HAS_PCI
@@ -154,6 +160,7 @@ config LEMOTE_FULONG
        bool "Lemote Fulong mini-PC"
        select ARCH_SPARSEMEM_ENABLE
        select CEVT_R4K
+       select CSRC_R4K
        select SYS_HAS_CPU_LOONGSON2
        select DMA_NONCOHERENT
        select BOOT_ELF32
@@ -179,6 +186,7 @@ config MIPS_ATLAS
        bool "MIPS Atlas board"
        select BOOT_ELF32
        select CEVT_R4K
+       select CSRC_R4K
        select DMA_NONCOHERENT
        select SYS_HAS_EARLY_PRINTK
        select IRQ_CPU
@@ -210,6 +218,7 @@ config MIPS_MALTA
        select ARCH_MAY_HAVE_PC_FDC
        select BOOT_ELF32
        select CEVT_R4K
+       select CSRC_R4K
        select DMA_NONCOHERENT
        select GENERIC_ISA_DMA
        select IRQ_CPU
@@ -241,6 +250,7 @@ config MIPS_MALTA
 config MIPS_SEAD
        bool "MIPS SEAD board"
        select CEVT_R4K
+       select CSRC_R4K
        select IRQ_CPU
        select DMA_NONCOHERENT
        select SYS_HAS_EARLY_PRINTK
@@ -260,6 +270,7 @@ config MIPS_SEAD
 config MIPS_SIM
        bool 'MIPS simulator (MIPSsim)'
        select CEVT_R4K
+       select CSRC_R4K
        select DMA_NONCOHERENT
        select SYS_HAS_EARLY_PRINTK
        select IRQ_CPU
@@ -278,6 +289,7 @@ config MIPS_SIM
 config MARKEINS
        bool "NEC EMMA2RH Mark-eins"
        select CEVT_R4K
+       select CSRC_R4K
        select DMA_NONCOHERENT
        select HW_HAS_PCI
        select IRQ_CPU
@@ -293,6 +305,7 @@ config MARKEINS
 config MACH_VR41XX
        bool "NEC VR4100 series based machines"
        select CEVT_R4K
+       select CSRC_R4K
        select SYS_HAS_CPU_VR41XX
        select GENERIC_HARDIRQS_NO__DO_IRQ
 
@@ -330,6 +343,7 @@ config PMC_MSP
 config PMC_YOSEMITE
        bool "PMC-Sierra Yosemite eval board"
        select CEVT_R4K
+       select CSRC_R4K
        select DMA_COHERENT
        select HW_HAS_PCI
        select IRQ_CPU
@@ -351,6 +365,7 @@ config PMC_YOSEMITE
 config QEMU
        bool "Qemu"
        select CEVT_R4K
+       select CSRC_R4K
        select DMA_COHERENT
        select GENERIC_ISA_DMA
        select HAVE_STD_PC_SERIAL_PORT
@@ -382,9 +397,11 @@ config SGI_IP22
        select ARC32
        select BOOT_ELF32
        select CEVT_R4K
+       select CSRC_R4K
        select DMA_NONCOHERENT
        select HW_HAS_EISA
        select I8253
+       select I8259
        select IP22_CPU_SCACHE
        select IRQ_CPU
        select GENERIC_ISA_DMA_SUPPORT_BROKEN
@@ -427,6 +444,7 @@ config SGI_IP32
        select ARC32
        select BOOT_ELF32
        select CEVT_R4K
+       select CSRC_R4K
        select DMA_NONCOHERENT
        select HW_HAS_PCI
        select IRQ_CPU
@@ -498,6 +516,7 @@ config SIBYTE_SWARM
        select SYS_SUPPORTS_HIGHMEM
        select SYS_SUPPORTS_KGDB
        select SYS_SUPPORTS_LITTLE_ENDIAN
+       select ZONE_DMA32 if 64BIT
 
 config SIBYTE_LITTLESUR
        bool "Sibyte BCM91250C2-LittleSur"
@@ -548,6 +567,7 @@ config SIBYTE_BIGSUR
        select SYS_SUPPORTS_BIG_ENDIAN
        select SYS_SUPPORTS_HIGHMEM
        select SYS_SUPPORTS_LITTLE_ENDIAN
+       select ZONE_DMA32 if 64BIT
 
 config SNI_RM
        bool "SNI RM200/300/400"
@@ -556,6 +576,7 @@ config SNI_RM
        select ARCH_MAY_HAVE_PC_FDC
        select BOOT_ELF32
        select CEVT_R4K
+       select CSRC_R4K
        select DMA_NONCOHERENT
        select GENERIC_ISA_DMA
        select HW_HAS_EISA
@@ -599,6 +620,7 @@ config TOSHIBA_JMR3927
 config TOSHIBA_RBTX4927
        bool "Toshiba RBTX49[23]7 board"
        select CEVT_R4K
+       select CSRC_R4K
        select CEVT_TXX9
        select DMA_NONCOHERENT
        select HAS_TXX9_SERIAL
@@ -621,6 +643,7 @@ config TOSHIBA_RBTX4927
 config TOSHIBA_RBTX4938
        bool "Toshiba RBTX4938 board"
        select CEVT_R4K
+       select CSRC_R4K
        select CEVT_TXX9
        select DMA_NONCOHERENT
        select HAS_TXX9_SERIAL
@@ -642,6 +665,7 @@ config TOSHIBA_RBTX4938
 config WR_PPMC
        bool "Wind River PPMC board"
        select CEVT_R4K
+       select CSRC_R4K
        select IRQ_CPU
        select BOOT_ELF32
        select DMA_NONCOHERENT
@@ -690,6 +714,10 @@ config ARCH_HAS_ILOG2_U64
        bool
        default n
 
+config ARCH_SUPPORTS_OPROFILE
+       bool
+       default y if !MIPS_MT_SMTC
+
 config GENERIC_FIND_NEXT_BIT
        bool
        default y
@@ -752,6 +780,9 @@ config CEVT_TXX9
 config CSRC_BCM1480
        bool
 
+config CSRC_R4K
+       bool
+
 config CSRC_SB1250
        bool
 
@@ -1640,6 +1671,9 @@ config ARCH_DISCONTIGMEM_ENABLE
          or have huge holes in the physical address space for other reasons.
          See <file:Documentation/vm/numa> for more.
 
+config ARCH_POPULATES_NODE_MAP
+       def_bool y
+
 config ARCH_SPARSEMEM_ENABLE
        bool
        select SPARSEMEM_STATIC
@@ -1945,6 +1979,9 @@ config I8253
 config PCSPEAKER
        bool
 
+config ZONE_DMA32
+       bool
+
 source "drivers/pcmcia/Kconfig"
 
 source "drivers/pci/hotplug/Kconfig"
index b36cec58a9a848df2e7be884d85c23c9adb71da1..05d1354aad3a5dca791a46bd017de81a42ff68d8 100644 (file)
@@ -138,6 +138,7 @@ config SOC_AU1X00
        bool
        select 64BIT_PHYS_ADDR
        select CEVT_R4K
+       select CSRC_R4K
        select IRQ_CPU
        select SYS_HAS_CPU_MIPS32_R1
        select SYS_SUPPORTS_32BIT_KERNEL
index 9d6ad43fded6865ad7911bf73896e9423b9d3cb6..edf91f41a78671c3108563b13e5b8cdaadbc11cf 100644 (file)
@@ -859,7 +859,7 @@ dbdma_interrupt(int irq, void *dev_id)
 
        intstat = dbdma_gptr->ddma_intstat;
        au_sync();
-       chan_index = ffs(intstat);
+       chan_index = __ffs(intstat);
 
        ctp = chan_tab_ptr[chan_index];
        cp = ctp->chan_ptr;
index ddfb7f0a17a627f52679b8b13a44e934bb6dc1f8..3c7714f057acf7b01b9d7b4c23db7cff4f6ca1fc 100644 (file)
@@ -462,9 +462,9 @@ static void intc0_req0_irqdispatch(void)
                return;
        }
 #endif
-       bit = ffs(intc0_req0);
+       bit = __ffs(intc0_req0);
        intc0_req0 &= ~(1 << bit);
-       do_IRQ(MIPS_CPU_IRQ_BASE + bit);
+       do_IRQ(AU1000_INTC0_INT_BASE + bit);
 }
 
 
@@ -478,9 +478,9 @@ static void intc0_req1_irqdispatch(void)
        if (!intc0_req1)
                return;
 
-       bit = ffs(intc0_req1);
+       bit = __ffs(intc0_req1);
        intc0_req1 &= ~(1 << bit);
-       do_IRQ(bit);
+       do_IRQ(AU1000_INTC0_INT_BASE + bit);
 }
 
 
@@ -498,9 +498,9 @@ static void intc1_req0_irqdispatch(void)
        if (!intc1_req0)
                return;
 
-       bit = ffs(intc1_req0);
+       bit = __ffs(intc1_req0);
        intc1_req0 &= ~(1 << bit);
-       do_IRQ(MIPS_CPU_IRQ_BASE + 32 + bit);
+       do_IRQ(AU1000_INTC1_INT_BASE + bit);
 }
 
 
@@ -514,9 +514,9 @@ static void intc1_req1_irqdispatch(void)
        if (!intc1_req1)
                return;
 
-       bit = ffs(intc1_req1);
+       bit = __ffs(intc1_req1);
        intc1_req1 &= ~(1 << bit);
-       do_IRQ(MIPS_CPU_IRQ_BASE + 32 + bit);
+       do_IRQ(AU1000_INTC1_INT_BASE + bit);
 }
 
 asmlinkage void plat_irq_dispatch(void)
index c096be4ed4e785f8c2a9a625360aec1b715cefcf..8fcd0df86f93248e4e7a0fdf1eff33fd70647bae 100644 (file)
@@ -74,7 +74,7 @@ irqreturn_t pb1200_cascade_handler( int irq, void *dev_id)
        bcsr->int_status = bisr;
        for( ; bisr; bisr &= (bisr-1) )
        {
-               extirq_nr = PB1200_INT_BEGIN + ffs(bisr);
+               extirq_nr = PB1200_INT_BEGIN + __ffs(bisr);
                /* Ack and dispatch IRQ */
                do_IRQ(extirq_nr);
        }
index 80b0c99c2cfb9af113a3e79518a33825a6e249d2..3c70c9d16d01a6bd10918ad09a025f767e734550 100644 (file)
@@ -76,9 +76,13 @@ CONFIG_RWSEM_GENERIC_SPINLOCK=y
 CONFIG_GENERIC_FIND_NEXT_BIT=y
 CONFIG_GENERIC_HWEIGHT=y
 CONFIG_GENERIC_CALIBRATE_DELAY=y
+CONFIG_GENERIC_CLOCKEVENTS=y
 CONFIG_GENERIC_TIME=y
+CONFIG_GENERIC_CMOS_UPDATE=y
 CONFIG_SCHED_NO_NO_OMIT_FRAME_POINTER=y
 # CONFIG_GENERIC_HARDIRQS_NO__DO_IRQ is not set
+CONFIG_CEVT_BCM1480=y
+CONFIG_CSRC_BCM1480=y
 CONFIG_DMA_COHERENT=y
 CONFIG_CPU_BIG_ENDIAN=y
 # CONFIG_CPU_LITTLE_ENDIAN is not set
@@ -91,6 +95,11 @@ CONFIG_MIPS_L1_CACHE_SHIFT=5
 #
 # CPU selection
 #
+CONFIG_TICK_ONESHOT=y
+CONFIG_NO_HZ=y
+CONFIG_HIGH_RES_TIMERS=y
+CONFIG_GENERIC_CLOCKEVENTS_BUILD=y
+# CONFIG_CPU_LOONGSON2 is not set
 # CONFIG_CPU_MIPS32_R1 is not set
 # CONFIG_CPU_MIPS32_R2 is not set
 # CONFIG_CPU_MIPS64_R1 is not set
index fbd2d802fdfdcf1231939ab0b42f4d0de4ea0934..4b7e43c9f69a84f5d285d2a6868f3f12e0e087f3 100644 (file)
@@ -49,10 +49,13 @@ CONFIG_RWSEM_GENERIC_SPINLOCK=y
 CONFIG_GENERIC_FIND_NEXT_BIT=y
 CONFIG_GENERIC_HWEIGHT=y
 CONFIG_GENERIC_CALIBRATE_DELAY=y
+CONFIG_GENERIC_CLOCKEVENTS=y
 CONFIG_GENERIC_TIME=y
+CONFIG_GENERIC_CMOS_UPDATE=y
 CONFIG_SCHED_NO_NO_OMIT_FRAME_POINTER=y
 # CONFIG_GENERIC_HARDIRQS_NO__DO_IRQ is not set
 CONFIG_ARCH_MAY_HAVE_PC_FDC=y
+CONFIG_CEVT_R4K=y
 CONFIG_DMA_NONCOHERENT=y
 CONFIG_DMA_NEED_PCI_MAP_STATE=y
 CONFIG_EARLY_PRINTK=y
@@ -76,6 +79,10 @@ CONFIG_MIPS_L1_CACHE_SHIFT=5
 #
 # CPU selection
 #
+CONFIG_TICK_ONESHOT=y
+CONFIG_NO_HZ=y
+CONFIG_HIGH_RES_TIMERS=y
+CONFIG_GENERIC_CLOCKEVENTS_BUILD=y
 # CONFIG_CPU_LOONGSON2 is not set
 # CONFIG_CPU_MIPS32_R1 is not set
 CONFIG_CPU_MIPS32_R2=y
@@ -253,6 +260,7 @@ CONFIG_HW_HAS_PCI=y
 CONFIG_PCI=y
 # CONFIG_ARCH_SUPPORTS_MSI is not set
 CONFIG_MMU=y
+CONFIG_I8253=y
 
 #
 # PCCARD (PCMCIA/CardBus) support
index b551535b7e48143dfd437b72d26cf442d1c674b3..ffa08362de170d3c09790b4511c6cdd5f973f6bc 100644 (file)
@@ -14,6 +14,7 @@ obj-$(CONFIG_CEVT_GT641XX)    += cevt-gt641xx.o
 obj-$(CONFIG_CEVT_SB1250)      += cevt-sb1250.o
 obj-$(CONFIG_CEVT_TXX9)                += cevt-txx9.o
 obj-$(CONFIG_CSRC_BCM1480)     += csrc-bcm1480.o
+obj-$(CONFIG_CSRC_R4K)         += csrc-r4k.o
 obj-$(CONFIG_CSRC_SB1250)      += csrc-sb1250.o
 
 binfmt_irix-objs       := irixelf.o irixinv.o irixioctl.o irixsig.o    \
@@ -43,6 +44,7 @@ obj-$(CONFIG_CPU_TX49XX)      += r4k_fpu.o r4k_switch.o
 obj-$(CONFIG_CPU_VR41XX)       += r4k_fpu.o r4k_switch.o
 
 obj-$(CONFIG_SMP)              += smp.o
+obj-$(CONFIG_SMP_UP)           += smp-up.o
 
 obj-$(CONFIG_MIPS_MT)          += mips-mt.o
 obj-$(CONFIG_MIPS_MT_FPAFF)    += mips-mt-fpaff.o
index bab935a3d74b4941216a213d146aea13ab772c5d..24a2d907aa0de4c022c0d5e89227dceae2a8a572 100644 (file)
@@ -219,7 +219,7 @@ static int c0_compare_int_usable(void)
        return 1;
 }
 
-void __cpuinit mips_clockevent_init(void)
+int __cpuinit mips_clockevent_init(void)
 {
        uint64_t mips_freq = mips_hpt_frequency;
        unsigned int cpu = smp_processor_id();
@@ -227,7 +227,7 @@ void __cpuinit mips_clockevent_init(void)
        unsigned int irq;
 
        if (!cpu_has_counter || !mips_hpt_frequency)
-               return;
+               return -ENXIO;
 
 #ifdef CONFIG_MIPS_MT_SMTC
        setup_smtc_dummy_clockevent_device();
@@ -237,11 +237,11 @@ void __cpuinit mips_clockevent_init(void)
         * device.
         */
        if (cpu)
-               return;
+               return 0;
 #endif
 
        if (!c0_compare_int_usable())
-               return;
+               return -ENXIO;
 
        /*
         * With vectored interrupts things are getting platform specific.
@@ -276,8 +276,8 @@ void __cpuinit mips_clockevent_init(void)
 
        clockevents_register_device(cd);
 
-       if (!cp0_timer_irq_installed)
-               return;
+       if (cp0_timer_irq_installed)
+               return 0;
 
        cp0_timer_irq_installed = 1;
 
@@ -287,4 +287,6 @@ void __cpuinit mips_clockevent_init(void)
 #else
        setup_irq(irq, &c0_compare_irqaction);
 #endif
+
+       return 0;
 }
diff --git a/arch/mips/kernel/csrc-r4k.c b/arch/mips/kernel/csrc-r4k.c
new file mode 100644 (file)
index 0000000..0e2b5cd
--- /dev/null
@@ -0,0 +1,33 @@
+/*
+ * 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 by Ralf Baechle
+ */
+#include <linux/clocksource.h>
+#include <linux/init.h>
+
+#include <asm/time.h>
+
+static cycle_t c0_hpt_read(void)
+{
+       return read_c0_count();
+}
+
+static struct clocksource clocksource_mips = {
+       .name           = "MIPS",
+       .read           = c0_hpt_read,
+       .mask           = CLOCKSOURCE_MASK(32),
+       .flags          = CLOCK_SOURCE_IS_CONTINUOUS,
+};
+
+void __init init_mips_clocksource(void)
+{
+       /* Calclate a somewhat reasonable rating value */
+       clocksource_mips.rating = 200 + mips_hpt_frequency / 10000000;
+
+       clocksource_set_clock(&clocksource_mips, mips_hpt_frequency);
+
+       clocksource_register(&clocksource_mips);
+}
index a06a27d6cfcdef8050f57f48d31d933c00b9ddbc..7f6ddcb5d48532657a52b80461644dd05c467551 100644 (file)
@@ -269,7 +269,7 @@ static void __init bootmem_init(void)
 
 static void __init bootmem_init(void)
 {
-       unsigned long reserved_end;
+       unsigned long init_begin, reserved_end;
        unsigned long mapstart = ~0UL;
        unsigned long bootmap_size;
        int i;
@@ -342,6 +342,35 @@ static void __init bootmem_init(void)
         */
        bootmap_size = init_bootmem_node(NODE_DATA(0), mapstart,
                                         min_low_pfn, max_low_pfn);
+
+
+       init_begin = PFN_UP(__pa_symbol(&__init_begin));
+       for (i = 0; i < boot_mem_map.nr_map; i++) {
+               unsigned long start, end;
+
+               start = PFN_UP(boot_mem_map.map[i].addr);
+               end = PFN_DOWN(boot_mem_map.map[i].addr
+                               + boot_mem_map.map[i].size);
+
+               if (start <= init_begin)
+                       start = init_begin;
+               if (start >= end)
+                       continue;
+
+#ifndef CONFIG_HIGHMEM
+               if (end > max_low_pfn)
+                       end = max_low_pfn;
+
+               /*
+                * ... finally, is the area going away?
+                */
+               if (end <= start)
+                       continue;
+#endif
+
+               add_active_range(0, start, end);
+       }
+
        /*
         * Register fully available low RAM pages with the bootmem allocator.
         */
diff --git a/arch/mips/kernel/smp-up.c b/arch/mips/kernel/smp-up.c
new file mode 100644 (file)
index 0000000..ead6c30
--- /dev/null
@@ -0,0 +1,67 @@
+/*
+ * 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, 07 by Ralf Baechle (ralf@linux-mips.org)
+ *
+ * Symmetric Uniprocessor (TM) Support
+ */
+#include <linux/kernel.h>
+#include <linux/sched.h>
+
+/*
+ * Send inter-processor interrupt
+ */
+void up_send_ipi_single(int cpu, unsigned int action)
+{
+       panic(KERN_ERR "%s called", __func__);
+}
+
+static inline void up_send_ipi_mask(cpumask_t mask, unsigned int action)
+{
+       panic(KERN_ERR "%s called", __func__);
+}
+
+/*
+ *  After we've done initial boot, this function is called to allow the
+ *  board code to clean up state, if needed
+ */
+void __cpuinit up_init_secondary(void)
+{
+}
+
+void __cpuinit up_smp_finish(void)
+{
+}
+
+/* Hook for after all CPUs are online */
+void up_cpus_done(void)
+{
+}
+
+/*
+ * Firmware CPU startup hook
+ */
+void __cpuinit up_boot_secondary(int cpu, struct task_struct *idle)
+{
+}
+
+void __init up_smp_setup(void)
+{
+}
+
+void __init up_prepare_cpus(unsigned int max_cpus)
+{
+}
+
+struct plat_smp_ops up_smp_ops = {
+       .send_ipi_single        = up_send_ipi_single,
+       .send_ipi_mask          = up_send_ipi_mask,
+       .init_secondary         = up_init_secondary,
+       .smp_finish             = up_smp_finish,
+       .cpus_done              = up_cpus_done,
+       .boot_secondary         = up_boot_secondary,
+       .smp_setup              = up_smp_setup,
+       .prepare_cpus           = up_prepare_cpus,
+};
index 3284b9b4ecac95d6f31bdae2f829f98d5a7eebcb..52075426c37338a46f7ab3f1990c41030d23ed45 100644 (file)
@@ -50,14 +50,6 @@ int update_persistent_clock(struct timespec now)
        return rtc_mips_set_mmss(now.tv_sec);
 }
 
-/*
- * High precision timer functions for a R4k-compatible timer.
- */
-static cycle_t c0_hpt_read(void)
-{
-       return read_c0_count();
-}
-
 int (*mips_timer_state)(void);
 
 int null_perf_irq(void)
@@ -84,55 +76,6 @@ EXPORT_SYMBOL(perf_irq);
 
 unsigned int mips_hpt_frequency;
 
-static struct clocksource clocksource_mips = {
-       .name           = "MIPS",
-       .read           = c0_hpt_read,
-       .mask           = CLOCKSOURCE_MASK(32),
-       .flags          = CLOCK_SOURCE_IS_CONTINUOUS,
-};
-
-static unsigned int __init calibrate_hpt(void)
-{
-       cycle_t frequency, hpt_start, hpt_end, hpt_count, hz;
-
-       const int loops = HZ / 10;
-       int log_2_loops = 0;
-       int i;
-
-       /*
-        * We want to calibrate for 0.1s, but to avoid a 64-bit
-        * division we round the number of loops up to the nearest
-        * power of 2.
-        */
-       while (loops > 1 << log_2_loops)
-               log_2_loops++;
-       i = 1 << log_2_loops;
-
-       /*
-        * Wait for a rising edge of the timer interrupt.
-        */
-       while (mips_timer_state());
-       while (!mips_timer_state());
-
-       /*
-        * Now see how many high precision timer ticks happen
-        * during the calculated number of periods between timer
-        * interrupts.
-        */
-       hpt_start = clocksource_mips.read();
-       do {
-               while (mips_timer_state());
-               while (!mips_timer_state());
-       } while (--i);
-       hpt_end = clocksource_mips.read();
-
-       hpt_count = (hpt_end - hpt_start) & clocksource_mips.mask;
-       hz = HZ;
-       frequency = hpt_count * hz;
-
-       return frequency >> log_2_loops;
-}
-
 void __init clocksource_set_clock(struct clocksource *cs, unsigned int clock)
 {
        u64 temp;
@@ -166,16 +109,6 @@ void __cpuinit clockevent_set_clock(struct clock_event_device *cd,
        cd->mult = (u32) temp;
 }
 
-static void __init init_mips_clocksource(void)
-{
-       /* Calclate a somewhat reasonable rating value */
-       clocksource_mips.rating = 200 + mips_hpt_frequency / 10000000;
-
-       clocksource_set_clock(&clocksource_mips, mips_hpt_frequency);
-
-       clocksource_register(&clocksource_mips);
-}
-
 void __init __weak plat_time_init(void)
 {
 }
@@ -194,21 +127,42 @@ void __init plat_timer_setup(void)
        BUG();
 }
 
+static __init int cpu_has_mfc0_count_bug(void)
+{
+       switch (current_cpu_type()) {
+       case CPU_R4000PC:
+       case CPU_R4000SC:
+       case CPU_R4000MC:
+               /*
+                * V3.0 is documented as suffering from the mfc0 from count bug.
+                * Afaik this is the last version of the R4000.  Later versions
+                * were marketed as R4400.
+                */
+               return 1;
+
+       case CPU_R4400PC:
+       case CPU_R4400SC:
+       case CPU_R4400MC:
+               /*
+                * The published errata for the R4400 upto 3.0 say the CPU
+                * has the mfc0 from count bug.
+                */
+               if ((current_cpu_data.processor_id & 0xff) <= 0x30)
+                       return 1;
+
+               /*
+                * I don't have erratas for newer R4400 so be paranoid.
+                */
+               return 1;
+       }
+
+       return 0;
+}
+
 void __init time_init(void)
 {
        plat_time_init();
 
-       if (cpu_has_counter && (mips_hpt_frequency || mips_timer_state)) {
-               /* We know counter frequency.  Or we can get it.  */
-               if (!mips_hpt_frequency)
-                       mips_hpt_frequency = calibrate_hpt();
-
-               /* Report the high precision timer rate for a reference.  */
-               printk("Using %u.%03u MHz high precision timer.\n",
-                      ((mips_hpt_frequency + 500) / 1000) / 1000,
-                      ((mips_hpt_frequency + 500) / 1000) % 1000);
+       if (mips_clockevent_init() || !cpu_has_mfc0_count_bug())
                init_mips_clocksource();
-       }
-
-       mips_clockevent_init();
 }
index 38bd33fa2a23ae123a6bb725a58197115d3cc281..c06eb812a95e1dc3d096926ed8ffeac58d900c5e 100644 (file)
@@ -470,7 +470,7 @@ static int apply_r_mips_lo16(struct module *me, uint32_t *location,
                         */
                        if (v != l->value) {
                                printk(KERN_DEBUG "VPE loader: "
-                                      "apply_r_mips_lo16/hi16:         "
+                                      "apply_r_mips_lo16/hi16: \t"
                                       "inconsistent value information\n");
                                return -ENOEXEC;
                        }
@@ -629,7 +629,7 @@ static void simplify_symbols(Elf_Shdr * sechdrs,
                        break;
 
                case SHN_MIPS_SCOMMON:
-                       printk(KERN_DEBUG "simplify_symbols: ignoring SHN_MIPS_SCOMMON"
+                       printk(KERN_DEBUG "simplify_symbols: ignoring SHN_MIPS_SCOMMON "
                               "symbol <%s> st_shndx %d\n", strtab + sym[i].st_name,
                               sym[i].st_shndx);
                        // .sbss section
index 946aee331788a12734bf87bba2b709c23d166a56..cb1b6822711ab90c04591d84e8dc2570f16ba8ec 100644 (file)
@@ -108,6 +108,7 @@ int ieee754si_xcpt(int r, const char *op, ...)
        ax.rv.si = r;
        va_start(ax.ap, op);
        ieee754_xcpt(&ax);
+       va_end(ax.ap);
        return ax.rv.si;
 }
 
@@ -122,5 +123,6 @@ s64 ieee754di_xcpt(s64 r, const char *op, ...)
        ax.rv.di = r;
        va_start(ax.ap, op);
        ieee754_xcpt(&ax);
+       va_end(ax.ap);
        return ax.rv.di;
 }
index 3e214aac4b12f51bd103aca37d0a545395434849..6d2d89f324721115a6577d8726f1f38404d08c9d 100644 (file)
@@ -57,6 +57,7 @@ ieee754dp ieee754dp_xcpt(ieee754dp r, const char *op, ...)
        ax.rv.dp = r;
        va_start(ax.ap, op);
        ieee754_xcpt(&ax);
+       va_end(ax.ap);
        return ax.rv.dp;
 }
 
@@ -83,6 +84,7 @@ ieee754dp ieee754dp_nanxcpt(ieee754dp r, const char *op, ...)
        ax.rv.dp = r;
        va_start(ax.ap, op);
        ieee754_xcpt(&ax);
+       va_end(ax.ap);
        return ax.rv.dp;
 }
 
index adda851cd04f5e19f7b84ad26b9244cc0791622d..463534045ab60ac68243b1bf5a2b104b77ccad83 100644 (file)
@@ -58,6 +58,7 @@ ieee754sp ieee754sp_xcpt(ieee754sp r, const char *op, ...)
        ax.rv.sp = r;
        va_start(ax.ap, op);
        ieee754_xcpt(&ax);
+       va_end(ax.ap);
        return ax.rv.sp;
 }
 
@@ -84,6 +85,7 @@ ieee754sp ieee754sp_nanxcpt(ieee754sp r, const char *op, ...)
        ax.rv.sp = r;
        va_start(ax.ap, op);
        ieee754_xcpt(&ax);
+       va_end(ax.ap);
        return ax.rv.sp;
 }
 
index 5d600054090a5c258a448a77340de12d205fd906..2a0057cfc30de612d4b7359021a6d13b37b4c002 100644 (file)
@@ -37,9 +37,9 @@ void mips_display_message(const char *str)
 
        for (i = 0; i <= 14; i=i+2) {
                 if (*str)
-                        writel(*str++, display + i);
+                        __raw_writel(*str++, display + i);
                 else
-                        writel(' ', display + i);
+                        __raw_writel(' ', display + i);
        }
 }
 
index bfaafa38846f7f2650815ffd845066901efa91d0..e39bbe989da34b85a0ec7dbe703efdbef4e5270a 100644 (file)
@@ -101,9 +101,7 @@ unsigned __init get_c0_compare_int(void)
 
 void __init plat_time_init(void)
 {
-       unsigned int est_freq, flags;
-
-       local_irq_save(flags);
+       unsigned int est_freq;
 
        /* Set Data mode - binary. */
        CMOS_WRITE(CMOS_READ(RTC_CONTROL) | RTC_DM_BINARY, RTC_CONTROL);
@@ -114,6 +112,4 @@ void __init plat_time_init(void)
               (est_freq % 1000000) * 100 / 1000000);
 
        cpu_khz = est_freq / 1000;
-
-       local_irq_restore(flags);
 }
index 33519ce4954043c8c16683ce88fa1b82be36b5e1..ae76795685cc2ee2789596dfbdfeba6c40b47808 100644 (file)
@@ -40,16 +40,38 @@ static inline int cpu_is_noncoherent_r10000(struct device *dev)
               current_cpu_type() == CPU_R12000);
 }
 
+static gfp_t massage_gfp_flags(const struct device *dev, gfp_t gfp)
+{
+       /* ignore region specifiers */
+       gfp &= ~(__GFP_DMA | __GFP_DMA32 | __GFP_HIGHMEM);
+
+#ifdef CONFIG_ZONE_DMA32
+       if (dev == NULL)
+               gfp |= __GFP_DMA;
+       else if (dev->coherent_dma_mask < DMA_BIT_MASK(24))
+               gfp |= __GFP_DMA;
+       else
+#endif
+#ifdef CONFIG_ZONE_DMA32
+            if (dev->coherent_dma_mask < DMA_BIT_MASK(32))
+               gfp |= __GFP_DMA32;
+       else
+#endif
+               ;
+
+       /* Don't invoke OOM killer */
+       gfp |= __GFP_NORETRY;
+
+       return gfp;
+}
+
 void *dma_alloc_noncoherent(struct device *dev, size_t size,
        dma_addr_t * dma_handle, gfp_t gfp)
 {
        void *ret;
 
-       /* ignore region specifiers */
-       gfp &= ~(__GFP_DMA | __GFP_HIGHMEM);
+       gfp = massage_gfp_flags(dev, gfp);
 
-       if (dev == NULL || (dev->coherent_dma_mask < 0xffffffff))
-               gfp |= GFP_DMA;
        ret = (void *) __get_free_pages(gfp, get_order(size));
 
        if (ret != NULL) {
@@ -67,11 +89,8 @@ void *dma_alloc_coherent(struct device *dev, size_t size,
 {
        void *ret;
 
-       /* ignore region specifiers */
-       gfp &= ~(__GFP_DMA | __GFP_HIGHMEM);
+       gfp = massage_gfp_flags(dev, gfp);
 
-       if (dev == NULL || (dev->coherent_dma_mask < 0xffffffff))
-               gfp |= GFP_DMA;
        ret = (void *) __get_free_pages(gfp, get_order(size));
 
        if (ret) {
@@ -343,7 +362,7 @@ int dma_supported(struct device *dev, u64 mask)
         * so we can't guarantee allocations that must be
         * within a tighter range than GFP_DMA..
         */
-       if (mask < 0x00ffffff)
+       if (mask < DMA_BIT_MASK(24))
                return 0;
 
        return 1;
index ec3b9e9f30f4fd2ae5ad9edc9951564889eae58a..480dec04f552cbe086f6fa96aedbaf73ff09ff7c 100644 (file)
@@ -347,11 +347,8 @@ static int __init page_is_ram(unsigned long pagenr)
 
 void __init paging_init(void)
 {
-       unsigned long zones_size[MAX_NR_ZONES] = { 0, };
-#ifndef CONFIG_FLATMEM
-       unsigned long zholes_size[MAX_NR_ZONES] = { 0, };
-       unsigned long i, j, pfn;
-#endif
+       unsigned long max_zone_pfns[MAX_NR_ZONES];
+       unsigned long lastpfn;
 
        pagetable_init();
 
@@ -361,35 +358,27 @@ void __init paging_init(void)
        kmap_coherent_init();
 
 #ifdef CONFIG_ZONE_DMA
-       if (min_low_pfn < MAX_DMA_PFN && MAX_DMA_PFN <= max_low_pfn) {
-               zones_size[ZONE_DMA] = MAX_DMA_PFN - min_low_pfn;
-               zones_size[ZONE_NORMAL] = max_low_pfn - MAX_DMA_PFN;
-       } else if (max_low_pfn < MAX_DMA_PFN)
-               zones_size[ZONE_DMA] = max_low_pfn - min_low_pfn;
-       else
+       max_zone_pfns[ZONE_DMA] = MAX_DMA_PFN;
 #endif
-       zones_size[ZONE_NORMAL] = max_low_pfn - min_low_pfn;
-
+#ifdef CONFIG_ZONE_DMA32
+       max_zone_pfns[ZONE_DMA32] = MAX_DMA32_PFN;
+#endif
+       max_zone_pfns[ZONE_NORMAL] = max_low_pfn;
+       lastpfn = max_low_pfn;
 #ifdef CONFIG_HIGHMEM
-       zones_size[ZONE_HIGHMEM] = highend_pfn - highstart_pfn;
+       max_zone_pfns[ZONE_HIGHMEM] = highend_pfn;
+       lastpfn = highend_pfn;
 
-       if (cpu_has_dc_aliases && zones_size[ZONE_HIGHMEM]) {
+       if (cpu_has_dc_aliases && max_low_pfn != highend_pfn) {
                printk(KERN_WARNING "This processor doesn't support highmem."
-                      " %ldk highmem ignored\n", zones_size[ZONE_HIGHMEM]);
-               zones_size[ZONE_HIGHMEM] = 0;
+                      " %ldk highmem ignored\n",
+                      (highend_pfn - max_low_pfn) << (PAGE_SHIFT - 10));
+               max_zone_pfns[ZONE_HIGHMEM] = max_low_pfn;
+               lastpfn = max_low_pfn;
        }
 #endif
 
-#ifdef CONFIG_FLATMEM
-       free_area_init(zones_size);
-#else
-       pfn = min_low_pfn;
-       for (i = 0; i < MAX_NR_ZONES; i++)
-               for (j = 0; j < zones_size[i]; j++, pfn++)
-                       if (!page_is_ram(pfn))
-                               zholes_size[i]++;
-       free_area_init_node(0, NODE_DATA(0), zones_size, 0, zholes_size);
-#endif
+       free_area_init_nodes(max_zone_pfns);
 }
 
 static struct kcore_list kcore_mem, kcore_vmalloc;
index 423bc2c473df695d01fbbb58d5c0b774cb585970..bdfa07aecd97a51bbe040463c9ead0fda3280161 100644 (file)
@@ -6,6 +6,7 @@
  * Copyright (C) 2004, 05, 06 by Ralf Baechle
  * Copyright (C) 2005 by MIPS Technologies, Inc.
  */
+#include <linux/cpumask.h>
 #include <linux/oprofile.h>
 #include <linux/interrupt.h>
 #include <linux/smp.h>
 #ifdef CONFIG_MIPS_MT_SMP
 #define WHAT           (M_TC_EN_VPE | M_PERFCTL_VPEID(smp_processor_id()))
 #define vpe_id()       smp_processor_id()
+
+/*
+ * The number of bits to shift to convert between counters per core and
+ * counters per VPE.  There is no reasonable interface atm to obtain the
+ * number of VPEs used by Linux and in the 34K this number is fixed to two
+ * anyways so we hardcore a few things here for the moment.  The way it's
+ * done here will ensure that oprofile VSMP kernel will run right on a lesser
+ * core like a 24K also or with maxcpus=1.
+ */
+static inline unsigned int vpe_shift(void)
+{
+       if (num_possible_cpus() > 1)
+               return 1;
+
+       return 0;
+}
+
 #else
+
 #define WHAT           0
 #define vpe_id()       0
+
+static inline unsigned int vpe_shift(void)
+{
+       return 0;
+}
+
 #endif
 
+static inline unsigned int counters_total_to_per_cpu(unsigned int counters)
+{
+       return counters >> vpe_shift();
+}
+
+static inline unsigned int counters_per_cpu_to_total(unsigned int counters)
+{
+       return counters << vpe_shift();
+}
+
 #define __define_perf_accessors(r, n, np)                              \
                                                                        \
 static inline unsigned int r_c0_ ## r ## n(void)                       \
@@ -269,9 +304,7 @@ static int __init mipsxx_init(void)
 
        reset_counters(counters);
 
-#ifdef CONFIG_MIPS_MT_SMP
-       counters >>= 1;
-#endif
+       counters = counters_total_to_per_cpu(counters);
 
        op_model_mipsxx_ops.num_counters = counters;
        switch (current_cpu_type()) {
@@ -330,9 +363,8 @@ static int __init mipsxx_init(void)
 static void mipsxx_exit(void)
 {
        int counters = op_model_mipsxx_ops.num_counters;
-#ifdef CONFIG_MIPS_MT_SMP
-       counters <<= 1;
-#endif
+
+       counters = counters_per_cpu_to_total(counters);
        reset_counters(counters);
 
        perf_irq = null_perf_irq;
index 5443ea3596f8376ceeae25b538fb29498c048bfc..47f316c86ab166bad9635423bf15b865c9eb9465 100644 (file)
@@ -76,8 +76,10 @@ static inline void WRITECFG32(u32 addr, u32 data)
 
 int pcibios_map_irq(const struct pci_dev *dev, u8 slot, u8 pin)
 {
-       This is b0rked.
-       return dev->irq;
+       if (pin == 0)
+               return -1;
+
+       return K_BCM1480_INT_PCI_INTA - 1 + pin;
 }
 
 /* Do platform specific device initialization at pci_enable_device() time */
index 6b293ce0935f020552490de88a0165f9cbb253f1..90261b83db04d492c7839c139a722f43766f7ea5 100644 (file)
@@ -5,12 +5,14 @@ choice
 config PMC_MSP4200_EVAL
        bool "PMC-Sierra MSP4200 Eval Board"
        select CEVT_R4K
+       select CSRC_R4K
        select IRQ_MSP_SLP
        select HW_HAS_PCI
 
 config PMC_MSP4200_GW
        bool "PMC-Sierra MSP4200 VoIP Gateway"
        select CEVT_R4K
+       select CSRC_R4K
        select IRQ_MSP_SLP
        select HW_HAS_PCI
 
index 11f984767880b9e07f1c2b597779aa6ee2da6e79..7df36dbe65c702b039ef4ff6908b821a85302023 100644 (file)
@@ -33,5 +33,5 @@ void __init arch_init_irq(void)
 
        mips_cpu_irq_init();
        init_i8259_irqs();
-       set_c0_status(0x8400);
+       set_c0_status(0x400);
 }
index 26854fb11e7cefea9b007fb3d992517e7944a9d6..1617241d2737e79acbf4fe3684797cb751c83b02 100644 (file)
@@ -36,6 +36,7 @@
 #include <asm/sgi/ioc.h>
 #include <asm/sgi/mc.h>
 #include <asm/sgi/ip22.h>
+#include <asm/i8259.h>
 
 /* I2 has four EISA slots. */
 #define IP22_EISA_MAX_SLOTS      4
@@ -93,126 +94,11 @@ static irqreturn_t ip22_eisa_intr(int irq, void *dev_id)
        return IRQ_NONE;
 }
 
-static void enable_eisa1_irq(unsigned int irq)
-{
-       u8 mask;
-
-       mask = inb(EISA_INT1_MASK);
-       mask &= ~((u8) (1 << irq));
-       outb(mask, EISA_INT1_MASK);
-}
-
-static unsigned int startup_eisa1_irq(unsigned int irq)
-{
-       u8 edge;
-
-       /* Only use edge interrupts for EISA */
-
-       edge = inb(EISA_INT1_EDGE_LEVEL);
-       edge &= ~((u8) (1 << irq));
-       outb(edge, EISA_INT1_EDGE_LEVEL);
-
-       enable_eisa1_irq(irq);
-       return 0;
-}
-
-static void disable_eisa1_irq(unsigned int irq)
-{
-       u8 mask;
-
-       mask = inb(EISA_INT1_MASK);
-       mask |= ((u8) (1 << irq));
-       outb(mask, EISA_INT1_MASK);
-}
-
-static void mask_and_ack_eisa1_irq(unsigned int irq)
-{
-       disable_eisa1_irq(irq);
-
-       outb(0x20, EISA_INT1_CTRL);
-}
-
-static void end_eisa1_irq(unsigned int irq)
-{
-       if (!(irq_desc[irq].status & (IRQ_DISABLED | IRQ_INPROGRESS)))
-               enable_eisa1_irq(irq);
-}
-
-static struct irq_chip ip22_eisa1_irq_type = {
-       .name           = "IP22 EISA",
-       .startup        = startup_eisa1_irq,
-       .ack            = mask_and_ack_eisa1_irq,
-       .mask           = disable_eisa1_irq,
-       .mask_ack       = mask_and_ack_eisa1_irq,
-       .unmask         = enable_eisa1_irq,
-       .end            = end_eisa1_irq,
-};
-
-static void enable_eisa2_irq(unsigned int irq)
-{
-       u8 mask;
-
-       mask = inb(EISA_INT2_MASK);
-       mask &= ~((u8) (1 << (irq - 8)));
-       outb(mask, EISA_INT2_MASK);
-}
-
-static unsigned int startup_eisa2_irq(unsigned int irq)
-{
-       u8 edge;
-
-       /* Only use edge interrupts for EISA */
-
-       edge = inb(EISA_INT2_EDGE_LEVEL);
-       edge &= ~((u8) (1 << (irq - 8)));
-       outb(edge, EISA_INT2_EDGE_LEVEL);
-
-       enable_eisa2_irq(irq);
-       return 0;
-}
-
-static void disable_eisa2_irq(unsigned int irq)
-{
-       u8 mask;
-
-       mask = inb(EISA_INT2_MASK);
-       mask |= ((u8) (1 << (irq - 8)));
-       outb(mask, EISA_INT2_MASK);
-}
-
-static void mask_and_ack_eisa2_irq(unsigned int irq)
-{
-       disable_eisa2_irq(irq);
-
-       outb(0x20, EISA_INT2_CTRL);
-}
-
-static void end_eisa2_irq(unsigned int irq)
-{
-       if (!(irq_desc[irq].status & (IRQ_DISABLED | IRQ_INPROGRESS)))
-               enable_eisa2_irq(irq);
-}
-
-static struct irq_chip ip22_eisa2_irq_type = {
-       .name           = "IP22 EISA",
-       .startup        = startup_eisa2_irq,
-       .ack            = mask_and_ack_eisa2_irq,
-       .mask           = disable_eisa2_irq,
-       .mask_ack       = mask_and_ack_eisa2_irq,
-       .unmask         = enable_eisa2_irq,
-       .end            = end_eisa2_irq,
-};
-
 static struct irqaction eisa_action = {
        .handler        = ip22_eisa_intr,
        .name           = "EISA",
 };
 
-static struct irqaction cascade_action = {
-       .handler        = no_action,
-       .name           = "EISA cascade",
-};
-
 int __init ip22_eisa_init(void)
 {
        int i, c;
@@ -248,29 +134,13 @@ int __init ip22_eisa_init(void)
        outb(1, EISA_EXT_NMI_RESET_CTRL);
        udelay(50);     /* Wait long enough for the dust to settle */
        outb(0, EISA_EXT_NMI_RESET_CTRL);
-       outb(0x11, EISA_INT1_CTRL);
-       outb(0x11, EISA_INT2_CTRL);
-       outb(0, EISA_INT1_MASK);
-       outb(8, EISA_INT2_MASK);
-       outb(4, EISA_INT1_MASK);
-       outb(2, EISA_INT2_MASK);
-       outb(1, EISA_INT1_MASK);
-       outb(1, EISA_INT2_MASK);
-       outb(0xfb, EISA_INT1_MASK);
-       outb(0xff, EISA_INT2_MASK);
        outb(0, EISA_DMA2_WRITE_SINGLE);
 
-       for (i = SGINT_EISA; i < (SGINT_EISA + EISA_MAX_IRQ); i++) {
-               if (i < (SGINT_EISA + 8))
-                       set_irq_chip(i, &ip22_eisa1_irq_type);
-               else
-                       set_irq_chip(i, &ip22_eisa2_irq_type);
-       }
+       init_i8259_irqs();
 
        /* Cannot use request_irq because of kmalloc not being ready at such
         * an early stage. Yes, I've been bitten... */
        setup_irq(SGI_EISA_IRQ, &eisa_action);
-       setup_irq(SGINT_EISA + 2, &cascade_action);
 
        EISA_bus = 1;
        return 0;
index e19d60d5fcc1b9dbdcef9267d98d21b0818f0f92..0177566475d4cd42ae3a68d2eb1c73a4c39789c9 100644 (file)
        for (x=0; x<100000; x++) __asm__ __volatile__(""); })
 
 #define eeprom_cs_on(ptr) ({   \
-       *ptr &= ~EEPROM_DATO;   \
-       *ptr &= ~EEPROM_ECLK;   \
-       *ptr &= ~EEPROM_EPROT;  \
-       delay();                \
-       *ptr |= EEPROM_CSEL;    \
-       *ptr |= EEPROM_ECLK; })
+       __raw_writel(__raw_readl(ptr) & ~EEPROM_DATO, ptr);     \
+       __raw_writel(__raw_readl(ptr) & ~EEPROM_ECLK, ptr);     \
+       __raw_writel(__raw_readl(ptr) & ~EEPROM_EPROT, ptr);    \
+       delay();                                                \
+       __raw_writel(__raw_readl(ptr) | EEPROM_CSEL, ptr);      \
+       __raw_writel(__raw_readl(ptr) | EEPROM_ECLK, ptr); })
 
 
 #define eeprom_cs_off(ptr) ({  \
-       *ptr &= ~EEPROM_ECLK;   \
-       *ptr &= ~EEPROM_CSEL;   \
-       *ptr |= EEPROM_EPROT;   \
-       *ptr |= EEPROM_ECLK; })
+       __raw_writel(__raw_readl(ptr) & ~EEPROM_ECLK, ptr);     \
+       __raw_writel(__raw_readl(ptr) & ~EEPROM_CSEL, ptr);     \
+       __raw_writel(__raw_readl(ptr) | EEPROM_EPROT, ptr);     \
+       __raw_writel(__raw_readl(ptr) | EEPROM_ECLK, ptr); })
 
 #define        BITS_IN_COMMAND 11
 /*
@@ -60,15 +60,17 @@ static inline void eeprom_cmd(unsigned int *ctrl, unsigned cmd, unsigned reg)
        ser_cmd = cmd | (reg << (16 - BITS_IN_COMMAND));
        for (i = 0; i < BITS_IN_COMMAND; i++) {
                if (ser_cmd & (1<<15))  /* if high order bit set */
-                       writel(readl(ctrl) | EEPROM_DATO, ctrl);
+                       __raw_writel(__raw_readl(ctrl) | EEPROM_DATO, ctrl);
                else
-                       writel(readl(ctrl) & ~EEPROM_DATO, ctrl);
-               writel(readl(ctrl) & ~EEPROM_ECLK, ctrl);
-               writel(readl(ctrl) | EEPROM_ECLK, ctrl);
+                       __raw_writel(__raw_readl(ctrl) & ~EEPROM_DATO, ctrl);
+               __raw_writel(__raw_readl(ctrl) & ~EEPROM_ECLK, ctrl);
+               delay();
+               __raw_writel(__raw_readl(ctrl) | EEPROM_ECLK, ctrl);
+               delay();
                ser_cmd <<= 1;
        }
        /* see data sheet timing diagram */
-       writel(readl(ctrl) & ~EEPROM_DATO, ctrl);
+       __raw_writel(__raw_readl(ctrl) & ~EEPROM_DATO, ctrl);
 }
 
 unsigned short ip22_eeprom_read(unsigned int *ctrl, int reg)
@@ -76,18 +78,18 @@ unsigned short ip22_eeprom_read(unsigned int *ctrl, int reg)
        unsigned short res = 0;
        int i;
 
-       writel(readl(ctrl) & ~EEPROM_EPROT, ctrl);
+       __raw_writel(__raw_readl(ctrl) & ~EEPROM_EPROT, ctrl);
        eeprom_cs_on(ctrl);
        eeprom_cmd(ctrl, EEPROM_READ, reg);
 
        /* clock the data ouf of serial mem */
        for (i = 0; i < 16; i++) {
-               writel(readl(ctrl) & ~EEPROM_ECLK, ctrl);
+               __raw_writel(__raw_readl(ctrl) & ~EEPROM_ECLK, ctrl);
                delay();
-               writel(readl(ctrl) | EEPROM_ECLK, ctrl);
+               __raw_writel(__raw_readl(ctrl) | EEPROM_ECLK, ctrl);
                delay();
                res <<= 1;
-               if (readl(ctrl) & EEPROM_DATI)
+               if (__raw_readl(ctrl) & EEPROM_DATI)
                        res |= 1;
        }
 
index 174f09e42f6bd06147b493b2203e2b0854ae11f7..5f389ee26fca034eb5c8f0cc6b961a15d9b3a6fe 100644 (file)
 unsigned long sgi_gfxaddr;
 EXPORT_SYMBOL_GPL(sgi_gfxaddr);
 
-/*
- * Stop-A is originally a Sun thing that isn't standard on IP22 so to avoid
- * accidents it's disabled by default on IP22.
- *
- * FIXME: provide a mechanism to change the value of stop_a_enabled.
- */
-int stop_a_enabled;
-
-void ip22_do_break(void)
-{
-       if (!stop_a_enabled)
-               return;
-
-       printk("\n");
-       ArcEnterInteractiveMode();
-}
-
-EXPORT_SYMBOL(ip22_do_break);
-
 extern void ip22_be_init(void) __init;
 
 void __init plat_mem_setup(void)
index aab17ddd2f3012bfde1ecd847d2f6683f7205c6c..cab7cc22ab67407a8f2f37d4706a574c303ed3fb 100644 (file)
@@ -209,18 +209,18 @@ static unsigned long macepci_mask;
 
 static void enable_macepci_irq(unsigned int irq)
 {
-       macepci_mask |= MACEPCI_CONTROL_INT(irq - 9);
+       macepci_mask |= MACEPCI_CONTROL_INT(irq - MACEPCI_SCSI0_IRQ);
        mace->pci.control = macepci_mask;
-       crime_mask |= 1 << (irq - 1);
+       crime_mask |= 1 << (irq - CRIME_IRQ_BASE);
        crime->imask = crime_mask;
 }
 
 static void disable_macepci_irq(unsigned int irq)
 {
-       crime_mask &= ~(1 << (irq - 1));
+       crime_mask &= ~(1 << (irq - CRIME_IRQ_BASE));
        crime->imask = crime_mask;
        flush_crime_bus();
-       macepci_mask &= ~MACEPCI_CONTROL_INT(irq - 9);
+       macepci_mask &= ~MACEPCI_CONTROL_INT(irq - MACEPCI_SCSI0_IRQ);
        mace->pci.control = macepci_mask;
        flush_mace_bus();
 }
@@ -299,7 +299,7 @@ static void enable_maceisa_irq(unsigned int irq)
        pr_debug("crime_int %08x enabled\n", crime_int);
        crime_mask |= crime_int;
        crime->imask = crime_mask;
-       maceisa_mask |= 1 << (irq - 33);
+       maceisa_mask |= 1 << (irq - MACEISA_AUDIO_SW_IRQ);
        mace->perif.ctrl.imask = maceisa_mask;
 }
 
@@ -307,7 +307,7 @@ static void disable_maceisa_irq(unsigned int irq)
 {
        unsigned int crime_int = 0;
 
-       maceisa_mask &= ~(1 << (irq - 33));
+       maceisa_mask &= ~(1 << (irq - MACEISA_AUDIO_SW_IRQ));
         if (!(maceisa_mask & MACEISA_AUDIO_INT))
                crime_int |= MACE_AUDIO_INT;
         if (!(maceisa_mask & MACEISA_MISC_INT))
@@ -331,7 +331,7 @@ static void mask_and_ack_maceisa_irq(unsigned int irq)
        case MACEISA_SERIAL2_TDMAPR_IRQ:
                /* edge triggered */
                mace_int = mace->perif.ctrl.istat;
-               mace_int &= ~(1 << (irq - 33));
+               mace_int &= ~(1 << (irq - MACEISA_AUDIO_SW_IRQ));
                mace->perif.ctrl.istat = mace_int;
                break;
        }
@@ -359,13 +359,17 @@ static struct irq_chip ip32_maceisa_interrupt = {
 
 static void enable_mace_irq(unsigned int irq)
 {
-       crime_mask |= 1 << (irq - 1);
+       unsigned int bit = irq - CRIME_IRQ_BASE;
+
+       crime_mask |= (1 << bit);
        crime->imask = crime_mask;
 }
 
 static void disable_mace_irq(unsigned int irq)
 {
-       crime_mask &= ~(1 << (irq - 1));
+       unsigned int bit = irq - CRIME_IRQ_BASE;
+
+       crime_mask &= ~(1 << bit);
        crime->imask = crime_mask;
        flush_crime_bus();
 }
@@ -489,7 +493,7 @@ void __init arch_init_irq(void)
        mace->perif.ctrl.imask = 0;
 
        mips_cpu_irq_init();
-       for (irq = MIPS_CPU_IRQ_BASE + 8; irq <= IP32_IRQ_MAX; irq++) {
+       for (irq = CRIME_IRQ_BASE; irq <= IP32_IRQ_MAX; irq++) {
                switch (irq) {
                case MACE_VID_IN1_IRQ ... MACE_PCI_BRIDGE_IRQ:
                        set_irq_chip(irq, &ip32_mace_interrupt);
index eeb089f20c0db183902a47faa22c217aee4765ee..559acc09c819f3c53efbc8327514368f41b5af2e 100644 (file)
@@ -6,6 +6,7 @@ choice
 config CASIO_E55
        bool "CASIO CASSIOPEIA E-10/15/55/65"
        select CEVT_R4K
+       select CSRC_R4K
        select DMA_NONCOHERENT
        select IRQ_CPU
        select ISA
@@ -15,6 +16,7 @@ config CASIO_E55
 config IBM_WORKPAD
        bool "IBM WorkPad z50"
        select CEVT_R4K
+       select CSRC_R4K
        select DMA_NONCOHERENT
        select IRQ_CPU
        select ISA
@@ -24,6 +26,7 @@ config IBM_WORKPAD
 config NEC_CMBVR4133
        bool "NEC CMB-VR4133"
        select CEVT_R4K
+       select CSRC_R4K
        select DMA_NONCOHERENT
        select IRQ_CPU
        select HW_HAS_PCI
@@ -33,6 +36,7 @@ config NEC_CMBVR4133
 config TANBAC_TB022X
        bool "TANBAC VR4131 multichip module and TANBAC VR4131DIMM"
        select CEVT_R4K
+       select CSRC_R4K
        select DMA_NONCOHERENT
        select IRQ_CPU
        select HW_HAS_PCI
@@ -48,6 +52,7 @@ config TANBAC_TB022X
 config VICTOR_MPC30X
        bool "Victor MP-C303/304"
        select CEVT_R4K
+       select CSRC_R4K
        select DMA_NONCOHERENT
        select IRQ_CPU
        select HW_HAS_PCI
@@ -58,6 +63,7 @@ config VICTOR_MPC30X
 config ZAO_CAPCELLA
        bool "ZAO Networks Capcella"
        select CEVT_R4K
+       select CSRC_R4K
        select DMA_NONCOHERENT
        select IRQ_CPU
        select HW_HAS_PCI
index ae4a9b3d4fd6bbde15bd3cea8916e154f1c7794d..e574de4efb36c2e588ad93d8ab6c5637551bdff1 100644 (file)
@@ -70,7 +70,7 @@ kernel-y                      := mm/ kernel/ math-emu/ kernel/init_task.o
 kernel-$(CONFIG_HPUX)          += hpux/
 
 core-y += $(addprefix arch/parisc/, $(kernel-y))
-libs-y += arch/parisc/lib/
+libs-y += arch/parisc/lib/ `$(CC) -print-libgcc-file-name`
 
 drivers-$(CONFIG_OPROFILE)             += arch/parisc/oprofile/
 
index fd6552c4c08c11405adc9b80ce8aab35305c2f8b..4ab83d56974dcc88381ea4267c5ebb71fb69ddac 100644 (file)
@@ -1082,76 +1082,56 @@ void pdc_io_reset_devices(void)
 
 
 /**
- * pdc_iodc_putc - Console character print using IODC.
- * @c: the character to output.
+ * pdc_iodc_print - Console print using IODC.
+ * @str: the string to output.
+ * @count: length of str
  *
  * Note that only these special chars are architected for console IODC io:
  * BEL, BS, CR, and LF. Others are passed through.
  * Since the HP console requires CR+LF to perform a 'newline', we translate
  * "\n" to "\r\n".
  */
-void pdc_iodc_putc(unsigned char c)
+int pdc_iodc_print(unsigned char *str, unsigned count)
 {
-        /* XXX Should we spinlock posx usage */
-        static int posx;        /* for simple TAB-Simulation... */
-        static int __attribute__((aligned(8)))   iodc_retbuf[32];
-        static char __attribute__((aligned(64))) iodc_dbuf[4096];
-        unsigned int n;
+       /* XXX Should we spinlock posx usage */
+       static int posx;        /* for simple TAB-Simulation... */
+       int __attribute__((aligned(8)))   iodc_retbuf[32];
+       char __attribute__((aligned(64))) iodc_dbuf[4096];
+       unsigned int i;
        unsigned long flags;
 
-        switch (c) {
-        case '\n':
-                iodc_dbuf[0] = '\r';
-                iodc_dbuf[1] = '\n';
-                n = 2;
-                posx = 0;
-                break;
-        case '\t':
-                pdc_iodc_putc(' ');
-                while (posx & 7)        /* expand TAB */
-                        pdc_iodc_putc(' ');
-                return;         /* return since IODC can't handle this */
-        case '\b':
-                posx-=2;                /* BS */
-        default:
-                iodc_dbuf[0] = c;
-                n = 1;
-                posx++;
-                break;
-        }
+       memset(iodc_dbuf, 0, 4096);
+       for (i = 0; i < count && i < 2048;) {
+               switch(str[i]) {
+               case '\n':
+                       iodc_dbuf[i+0] = '\r';
+                       iodc_dbuf[i+1] = '\n';
+                       i += 2;
+                       posx = 0;
+                       break;
+               case '\t':
+                       while (posx & 7) {
+                               iodc_dbuf[i] = ' ';
+                               i++, posx++;
+                       }
+                       break;
+               case '\b':      /* BS */
+                       posx -= 2;
+               default:
+                       iodc_dbuf[i] = str[i];
+                       i++, posx++;
+                       break;
+               }
+       }
 
         spin_lock_irqsave(&pdc_lock, flags);
         real32_call(PAGE0->mem_cons.iodc_io,
                     (unsigned long)PAGE0->mem_cons.hpa, ENTRY_IO_COUT,
                     PAGE0->mem_cons.spa, __pa(PAGE0->mem_cons.dp.layers),
-                    __pa(iodc_retbuf), 0, __pa(iodc_dbuf), n, 0);
+                    __pa(iodc_retbuf), 0, __pa(iodc_dbuf), i, 0);
         spin_unlock_irqrestore(&pdc_lock, flags);
-}
 
-/**
- * pdc_iodc_outc - Console character print using IODC (without conversions).
- * @c: the character to output.
- *
- * Write the character directly to the IODC console.
- */
-void pdc_iodc_outc(unsigned char c)
-{
-       unsigned int n;
-       unsigned long flags;
-
-       /* fill buffer with one caracter and print it */
-        static int __attribute__((aligned(8)))   iodc_retbuf[32];
-        static char __attribute__((aligned(64))) iodc_dbuf[4096];
-
-       n = 1;
-       iodc_dbuf[0] = c;
-
-       spin_lock_irqsave(&pdc_lock, flags);
-       real32_call(PAGE0->mem_cons.iodc_io,
-                   (unsigned long)PAGE0->mem_cons.hpa, ENTRY_IO_COUT,
-                   PAGE0->mem_cons.spa, __pa(PAGE0->mem_cons.dp.layers),
-                   __pa(iodc_retbuf), 0, __pa(iodc_dbuf), n, 0);
-       spin_unlock_irqrestore(&pdc_lock, flags);
+       return i;
 }
 
 /**
index 76ce5e3b00505b264f3188fa2329919b3dcbfd45..23ef950df0080a11d0e8c6390d52d948c778ba99 100644 (file)
@@ -397,7 +397,7 @@ static void claim_cpu_irqs(void)
        }
 
        irq_desc[TIMER_IRQ].action = &timer_action;
-       irq_desc[TIMER_IRQ].status |= IRQ_PER_CPU;
+       irq_desc[TIMER_IRQ].status = IRQ_PER_CPU;
 #ifdef CONFIG_SMP
        irq_desc[IPI_IRQ].action = &ipi_action;
        irq_desc[IPI_IRQ].status = IRQ_PER_CPU;
index 671ee5b9950c4826f4fa4c06626109db6a91a747..7aca704e96f00bceecd841f621bc3b70cf5fc895 100644 (file)
@@ -122,9 +122,31 @@ EXPORT_SYMBOL($$divI_12);
 EXPORT_SYMBOL($$divI_14);
 EXPORT_SYMBOL($$divI_15);
 
+extern void __ashrdi3(void);
+extern void __ashldi3(void);
+extern void __lshrdi3(void);
+extern void __muldi3(void);
+
+EXPORT_SYMBOL(__ashrdi3);
+EXPORT_SYMBOL(__ashldi3);
+EXPORT_SYMBOL(__lshrdi3);
+EXPORT_SYMBOL(__muldi3);
+
 asmlinkage void * __canonicalize_funcptr_for_compare(void *);
 EXPORT_SYMBOL(__canonicalize_funcptr_for_compare);
 
+#ifdef CONFIG_64BIT
+extern void __divdi3(void);
+extern void __udivdi3(void);
+extern void __umoddi3(void);
+extern void __moddi3(void);
+
+EXPORT_SYMBOL(__divdi3);
+EXPORT_SYMBOL(__udivdi3);
+EXPORT_SYMBOL(__umoddi3);
+EXPORT_SYMBOL(__moddi3);
+#endif
+
 #ifndef CONFIG_64BIT
 extern void $$dyncall(void);
 EXPORT_SYMBOL($$dyncall);
index aab05767427c66222b0393c9aa38aedef9d00944..33b1f84441b14e4076e077432c1212cd74b681a3 100644 (file)
 
 static void pdc_console_write(struct console *co, const char *s, unsigned count)
 {
-       while(count--)
-               pdc_iodc_putc(*s++);
-}
-
-void pdc_outc(unsigned char c)
-{
-       pdc_iodc_outc(c);
+       pdc_iodc_print(s, count);
 }
 
 void pdc_printf(const char *fmt, ...)
@@ -74,8 +68,7 @@ void pdc_printf(const char *fmt, ...)
        len = vscnprintf(buf, sizeof(buf), fmt, args);
        va_end(args);
 
-       for (i = 0; i < len; i++)
-               pdc_iodc_outc(buf[i]);
+       pdc_iodc_print(buf, len);
 }
 
 int pdc_console_poll_key(struct console *co)
index 7ce406c7daf5d0f429460e1a67fdc6e2498875d9..5f2e6904d14aecb897773538b1eadd001fde93f5 100644 (file)
@@ -4,4 +4,4 @@
 
 lib-y  := lusercopy.o bitops.o checksum.o io.o memset.o fixup.o memcpy.o
 
-obj-y  := libgcc/ milli/ iomap.o
+obj-y  := iomap.o
diff --git a/arch/parisc/lib/libgcc/Makefile b/arch/parisc/lib/libgcc/Makefile
deleted file mode 100644 (file)
index b67a85a..0000000
+++ /dev/null
@@ -1,4 +0,0 @@
-obj-y  := __ashldi3.o __ashrdi3.o __clzsi2.o __divdi3.o __divsi3.o     \
-               __lshrdi3.o __moddi3.o __modsi3.o __udivdi3.o           \
-               __udivmoddi4.o __udivmodsi4.o __udivsi3.o               \
-               __umoddi3.o __umodsi3.o __muldi3.o __umulsidi3.o
diff --git a/arch/parisc/lib/libgcc/__ashldi3.c b/arch/parisc/lib/libgcc/__ashldi3.c
deleted file mode 100644 (file)
index a14a257..0000000
+++ /dev/null
@@ -1,19 +0,0 @@
-#include "libgcc.h"
-
-u64 __ashldi3(u64 v, int cnt)
-{
-       int c = cnt & 31;
-       u32 vl = (u32) v;
-       u32 vh = (u32) (v >> 32);
-
-       if (cnt & 32) {
-               vh = (vl << c);
-               vl = 0;
-       } else {
-               vh = (vh << c) + (vl >> (32 - c));
-               vl = (vl << c);
-       }
-
-       return ((u64) vh << 32) + vl;
-}
-EXPORT_SYMBOL(__ashldi3);
diff --git a/arch/parisc/lib/libgcc/__ashrdi3.c b/arch/parisc/lib/libgcc/__ashrdi3.c
deleted file mode 100644 (file)
index 8636a5a..0000000
+++ /dev/null
@@ -1,19 +0,0 @@
-#include "libgcc.h"
-
-u64 __ashrdi3(u64 v, int cnt)
-{
-       int c = cnt & 31;
-       u32 vl = (u32) v;
-       u32 vh = (u32) (v >> 32);
-
-       if (cnt & 32) {
-               vl = ((s32) vh >> c);
-               vh = (s32) vh >> 31;
-       } else {
-               vl = (vl >> c) + (vh << (32 - c));
-               vh = ((s32) vh >> c);
-       }
-
-       return ((u64) vh << 32) + vl;
-}
-EXPORT_SYMBOL(__ashrdi3);
diff --git a/arch/parisc/lib/libgcc/__clzsi2.c b/arch/parisc/lib/libgcc/__clzsi2.c
deleted file mode 100644 (file)
index a7aa2f5..0000000
+++ /dev/null
@@ -1,30 +0,0 @@
-#include "libgcc.h"
-
-u32 __clzsi2(u32 v)
-{
-       int p = 31;
-
-       if (v & 0xffff0000) {
-               p -= 16;
-               v >>= 16;
-       }
-       if (v & 0xff00) {
-               p -= 8;
-               v >>= 8;
-       }
-       if (v & 0xf0) {
-               p -= 4;
-               v >>= 4;
-       }
-       if (v & 0xc) {
-               p -= 2;
-               v >>= 2;
-       }
-       if (v & 0x2) {
-               p -= 1;
-               v >>= 1;
-       }
-
-       return p;
-}
-EXPORT_SYMBOL(__clzsi2);
diff --git a/arch/parisc/lib/libgcc/__divdi3.c b/arch/parisc/lib/libgcc/__divdi3.c
deleted file mode 100644 (file)
index f23c6fe..0000000
+++ /dev/null
@@ -1,23 +0,0 @@
-#include "libgcc.h"
-
-s64 __divdi3(s64 num, s64 den)
-{
-       int minus = 0;
-       s64 v;
-
-       if (num < 0) {
-               num = -num;
-               minus = 1;
-       }
-       if (den < 0) {
-               den = -den;
-               minus ^= 1;
-       }
-
-       v = __udivmoddi4(num, den, NULL);
-       if (minus)
-               v = -v;
-
-       return v;
-}
-EXPORT_SYMBOL(__divdi3);
diff --git a/arch/parisc/lib/libgcc/__divsi3.c b/arch/parisc/lib/libgcc/__divsi3.c
deleted file mode 100644 (file)
index 730fb53..0000000
+++ /dev/null
@@ -1,23 +0,0 @@
-#include "libgcc.h"
-
-s32 __divsi3(s32 num, s32 den)
-{
-       int minus = 0;
-       s32 v;
-
-       if (num < 0) {
-               num = -num;
-               minus = 1;
-       }
-       if (den < 0) {
-               den = -den;
-               minus ^= 1;
-       }
-
-       v = __udivmodsi4(num, den, NULL);
-       if (minus)
-               v = -v;
-
-       return v;
-}
-EXPORT_SYMBOL(__divsi3);
diff --git a/arch/parisc/lib/libgcc/__lshrdi3.c b/arch/parisc/lib/libgcc/__lshrdi3.c
deleted file mode 100644 (file)
index 4a82070..0000000
+++ /dev/null
@@ -1,19 +0,0 @@
-#include "libgcc.h"
-
-u64 __lshrdi3(u64 v, int cnt)
-{
-       int c = cnt & 31;
-       u32 vl = (u32) v;
-       u32 vh = (u32) (v >> 32);
-
-       if (cnt & 32) {
-               vl = (vh >> c);
-               vh = 0;
-       } else {
-               vl = (vl >> c) + (vh << (32 - c));
-               vh = (vh >> c);
-       }
-
-       return ((u64) vh << 32) + vl;
-}
-EXPORT_SYMBOL(__lshrdi3);
diff --git a/arch/parisc/lib/libgcc/__moddi3.c b/arch/parisc/lib/libgcc/__moddi3.c
deleted file mode 100644 (file)
index ed64bba..0000000
+++ /dev/null
@@ -1,23 +0,0 @@
-#include "libgcc.h"
-
-s64 __moddi3(s64 num, s64 den)
-{
-       int minus = 0;
-       s64 v;
-
-       if (num < 0) {
-               num = -num;
-               minus = 1;
-       }
-       if (den < 0) {
-               den = -den;
-               minus ^= 1;
-       }
-
-       (void)__udivmoddi4(num, den, (u64 *) & v);
-       if (minus)
-               v = -v;
-
-       return v;
-}
-EXPORT_SYMBOL(__moddi3);
diff --git a/arch/parisc/lib/libgcc/__modsi3.c b/arch/parisc/lib/libgcc/__modsi3.c
deleted file mode 100644 (file)
index 62f773e..0000000
+++ /dev/null
@@ -1,23 +0,0 @@
-#include "libgcc.h"
-
-s32 __modsi3(s32 num, s32 den)
-{
-       int minus = 0;
-       s32 v;
-
-       if (num < 0) {
-               num = -num;
-               minus = 1;
-       }
-       if (den < 0) {
-               den = -den;
-               minus ^= 1;
-       }
-
-       (void)__udivmodsi4(num, den, (u32 *) & v);
-       if (minus)
-               v = -v;
-
-       return v;
-}
-EXPORT_SYMBOL(__modsi3);
diff --git a/arch/parisc/lib/libgcc/__muldi3.c b/arch/parisc/lib/libgcc/__muldi3.c
deleted file mode 100644 (file)
index 3308abd..0000000
+++ /dev/null
@@ -1,22 +0,0 @@
-#include "libgcc.h"
-
-union DWunion {
-       struct {
-               s32 high;
-               s32 low;
-       } s;
-       s64 ll;
-};
-
-s64 __muldi3(s64 u, s64 v)
-{
-       const union DWunion uu = { .ll = u };
-       const union DWunion vv = { .ll = v };
-       union DWunion w = { .ll = __umulsidi3(uu.s.low, vv.s.low) };
-
-       w.s.high += ((u32)uu.s.low * (u32)vv.s.high
-               + (u32)uu.s.high * (u32)vv.s.low);
-
-       return w.ll;
-}
-EXPORT_SYMBOL(__muldi3);
diff --git a/arch/parisc/lib/libgcc/__udivdi3.c b/arch/parisc/lib/libgcc/__udivdi3.c
deleted file mode 100644 (file)
index 740023d..0000000
+++ /dev/null
@@ -1,7 +0,0 @@
-#include "libgcc.h"
-
-u64 __udivdi3(u64 num, u64 den)
-{
-       return __udivmoddi4(num, den, NULL);
-}
-EXPORT_SYMBOL(__udivdi3);
diff --git a/arch/parisc/lib/libgcc/__udivmoddi4.c b/arch/parisc/lib/libgcc/__udivmoddi4.c
deleted file mode 100644 (file)
index 2df0caa..0000000
+++ /dev/null
@@ -1,31 +0,0 @@
-#include "libgcc.h"
-
-u64 __udivmoddi4(u64 num, u64 den, u64 * rem_p)
-{
-       u64 quot = 0, qbit = 1;
-
-       if (den == 0) {
-               BUG();
-       }
-
-       /* Left-justify denominator and count shift */
-       while ((s64) den >= 0) {
-               den <<= 1;
-               qbit <<= 1;
-       }
-
-       while (qbit) {
-               if (den <= num) {
-                       num -= den;
-                       quot += qbit;
-               }
-               den >>= 1;
-               qbit >>= 1;
-       }
-
-       if (rem_p)
-               *rem_p = num;
-
-       return quot;
-}
-EXPORT_SYMBOL(__udivmoddi4);
diff --git a/arch/parisc/lib/libgcc/__udivmodsi4.c b/arch/parisc/lib/libgcc/__udivmodsi4.c
deleted file mode 100644 (file)
index 2a2fc28..0000000
+++ /dev/null
@@ -1,31 +0,0 @@
-#include "libgcc.h"
-
-u32 __udivmodsi4(u32 num, u32 den, u32 * rem_p)
-{
-       u32 quot = 0, qbit = 1;
-
-       if (den == 0) {
-               BUG();
-       }
-
-       /* Left-justify denominator and count shift */
-       while ((s32) den >= 0) {
-               den <<= 1;
-               qbit <<= 1;
-       }
-
-       while (qbit) {
-               if (den <= num) {
-                       num -= den;
-                       quot += qbit;
-               }
-               den >>= 1;
-               qbit >>= 1;
-       }
-
-       if (rem_p)
-               *rem_p = num;
-
-       return quot;
-}
-EXPORT_SYMBOL(__udivmodsi4);
diff --git a/arch/parisc/lib/libgcc/__udivsi3.c b/arch/parisc/lib/libgcc/__udivsi3.c
deleted file mode 100644 (file)
index 756a441..0000000
+++ /dev/null
@@ -1,7 +0,0 @@
-#include "libgcc.h"
-
-u32 __udivsi3(u32 num, u32 den)
-{
-       return __udivmodsi4(num, den, NULL);
-}
-EXPORT_SYMBOL(__udivsi3);
diff --git a/arch/parisc/lib/libgcc/__umoddi3.c b/arch/parisc/lib/libgcc/__umoddi3.c
deleted file mode 100644 (file)
index ac744e9..0000000
+++ /dev/null
@@ -1,10 +0,0 @@
-#include "libgcc.h"
-
-u64 __umoddi3(u64 num, u64 den)
-{
-       u64 v;
-
-       (void)__udivmoddi4(num, den, &v);
-       return v;
-}
-EXPORT_SYMBOL(__umoddi3);
diff --git a/arch/parisc/lib/libgcc/__umodsi3.c b/arch/parisc/lib/libgcc/__umodsi3.c
deleted file mode 100644 (file)
index 51f55aa..0000000
+++ /dev/null
@@ -1,10 +0,0 @@
-#include "libgcc.h"
-
-u32 __umodsi3(u32 num, u32 den)
-{
-       u32 v;
-
-       (void)__udivmodsi4(num, den, &v);
-       return v;
-}
-EXPORT_SYMBOL(__umodsi3);
diff --git a/arch/parisc/lib/libgcc/__umulsidi3.c b/arch/parisc/lib/libgcc/__umulsidi3.c
deleted file mode 100644 (file)
index 396f669..0000000
+++ /dev/null
@@ -1,46 +0,0 @@
-#include "libgcc.h"
-
-#define __ll_B ((u32) 1 << (32 / 2))
-#define __ll_lowpart(t) ((u32) (t) & (__ll_B - 1))
-#define __ll_highpart(t) ((u32) (t) >> 16)
-
-#define umul_ppmm(w1, w0, u, v)                                                \
-  do {                                                                 \
-    u32 __x0, __x1, __x2, __x3;                                                \
-    u16 __ul, __vl, __uh, __vh;                                                \
-                                                                       \
-    __ul = __ll_lowpart (u);                                           \
-    __uh = __ll_highpart (u);                                          \
-    __vl = __ll_lowpart (v);                                           \
-    __vh = __ll_highpart (v);                                          \
-                                                                       \
-    __x0 = (u32) __ul * __vl;                                          \
-    __x1 = (u32) __ul * __vh;                                          \
-    __x2 = (u32) __uh * __vl;                                          \
-    __x3 = (u32) __uh * __vh;                                          \
-                                                                       \
-    __x1 += __ll_highpart (__x0);/* this can't give carry */           \
-    __x1 += __x2;               /* but this indeed can */              \
-    if (__x1 < __x2)            /* did we get it? */                   \
-      __x3 += __ll_B;           /* yes, add it in the proper pos.  */  \
-                                                                       \
-    (w1) = __x3 + __ll_highpart (__x1);                                        \
-    (w0) = __ll_lowpart (__x1) * __ll_B + __ll_lowpart (__x0);         \
-  } while (0)
-
-union DWunion {
-       struct {
-               s32 high;
-               s32 low;
-       } s;
-       s64 ll;
-};
-
-u64 __umulsidi3(u32 u, u32 v)
-{
-       union DWunion __w;
-
-       umul_ppmm(__w.s.high, __w.s.low, u, v);
-
-       return __w.ll;
-}
diff --git a/arch/parisc/lib/libgcc/libgcc.h b/arch/parisc/lib/libgcc/libgcc.h
deleted file mode 100644 (file)
index 5a6f7a5..0000000
+++ /dev/null
@@ -1,32 +0,0 @@
-#ifndef _PA_LIBGCC_H_
-#define _PA_LIBGCC_H_
-
-#include <linux/types.h>
-#include <linux/module.h>
-
-/* Cribbed from klibc/libgcc/ */
-u64 __ashldi3(u64 v, int cnt);
-u64 __ashrdi3(u64 v, int cnt);
-
-u32 __clzsi2(u32 v);
-
-s64 __divdi3(s64 num, s64 den);
-s32 __divsi3(s32 num, s32 den);
-
-u64 __lshrdi3(u64 v, int cnt);
-
-s64 __moddi3(s64 num, s64 den);
-s32 __modsi3(s32 num, s32 den);
-
-u64 __udivdi3(u64 num, u64 den);
-u32 __udivsi3(u32 num, u32 den);
-
-u64 __udivmoddi4(u64 num, u64 den, u64 * rem_p);
-u32 __udivmodsi4(u32 num, u32 den, u32 * rem_p);
-
-u64 __umulsidi3(u32 u, u32 v);
-
-u64 __umoddi3(u64 num, u64 den);
-u32 __umodsi3(u32 num, u32 den);
-
-#endif /*_PA_LIBGCC_H_*/
diff --git a/arch/parisc/lib/milli/Makefile b/arch/parisc/lib/milli/Makefile
deleted file mode 100644 (file)
index 9b24e9b..0000000
+++ /dev/null
@@ -1 +0,0 @@
-obj-y  := dyncall.o divI.o divU.o remI.o remU.o div_const.o mulI.o
diff --git a/arch/parisc/lib/milli/divI.S b/arch/parisc/lib/milli/divI.S
deleted file mode 100644 (file)
index ac106b7..0000000
+++ /dev/null
@@ -1,254 +0,0 @@
-/* 32 and 64-bit millicode, original author Hewlett-Packard
-   adapted for gcc by Paul Bame <bame@debian.org>
-   and Alan Modra <alan@linuxcare.com.au>.
-
-   Copyright 2001, 2002, 2003 Free Software Foundation, Inc.
-
-   This file is part of GCC and is released under the terms of
-   of the GNU General Public License as published by the Free Software
-   Foundation; either version 2, or (at your option) any later version.
-   See the file COPYING in the top-level GCC source directory for a copy
-   of the license.  */
-
-#include "milli.h"
-
-#ifdef L_divI
-/* ROUTINES:   $$divI, $$divoI
-
-   Single precision divide for signed binary integers.
-
-   The quotient is truncated towards zero.
-   The sign of the quotient is the XOR of the signs of the dividend and
-   divisor.
-   Divide by zero is trapped.
-   Divide of -2**31 by -1 is trapped for $$divoI but not for $$divI.
-
-   INPUT REGISTERS:
-   .   arg0 == dividend
-   .   arg1 == divisor
-   .   mrp  == return pc
-   .   sr0  == return space when called externally
-
-   OUTPUT REGISTERS:
-   .   arg0 =  undefined
-   .   arg1 =  undefined
-   .   ret1 =  quotient
-
-   OTHER REGISTERS AFFECTED:
-   .   r1   =  undefined
-
-   SIDE EFFECTS:
-   .   Causes a trap under the following conditions:
-   .           divisor is zero  (traps with ADDIT,=  0,25,0)
-   .           dividend==-2**31  and divisor==-1 and routine is $$divoI
-   .                            (traps with ADDO  26,25,0)
-   .   Changes memory at the following places:
-   .           NONE
-
-   PERMISSIBLE CONTEXT:
-   .   Unwindable.
-   .   Suitable for internal or external millicode.
-   .   Assumes the special millicode register conventions.
-
-   DISCUSSION:
-   .   Branchs to other millicode routines using BE
-   .           $$div_# for # being 2,3,4,5,6,7,8,9,10,12,14,15
-   .
-   .   For selected divisors, calls a divide by constant routine written by
-   .   Karl Pettis.  Eligible divisors are 1..15 excluding 11 and 13.
-   .
-   .   The only overflow case is -2**31 divided by -1.
-   .   Both routines return -2**31 but only $$divoI traps.  */
-
-RDEFINE(temp,r1)
-RDEFINE(retreg,ret1)   /*  r29 */
-RDEFINE(temp1,arg0)
-       SUBSPA_MILLI_DIV
-       ATTR_MILLI
-       .import $$divI_2,millicode
-       .import $$divI_3,millicode
-       .import $$divI_4,millicode
-       .import $$divI_5,millicode
-       .import $$divI_6,millicode
-       .import $$divI_7,millicode
-       .import $$divI_8,millicode
-       .import $$divI_9,millicode
-       .import $$divI_10,millicode
-       .import $$divI_12,millicode
-       .import $$divI_14,millicode
-       .import $$divI_15,millicode
-       .export $$divI,millicode
-       .export $$divoI,millicode
-       .proc
-       .callinfo       millicode
-       .entry
-GSYM($$divoI)
-       comib,=,n  -1,arg1,LREF(negative1)      /*  when divisor == -1 */
-GSYM($$divI)
-       ldo     -1(arg1),temp           /*  is there at most one bit set ? */
-       and,<>  arg1,temp,r0            /*  if not, don't use power of 2 divide */
-       addi,>  0,arg1,r0               /*  if divisor > 0, use power of 2 divide */
-       b,n     LREF(neg_denom)
-LSYM(pow2)
-       addi,>= 0,arg0,retreg           /*  if numerator is negative, add the */
-       add     arg0,temp,retreg        /*  (denominaotr -1) to correct for shifts */
-       extru,= arg1,15,16,temp         /*  test denominator with 0xffff0000 */
-       extrs   retreg,15,16,retreg     /*  retreg = retreg >> 16 */
-       or      arg1,temp,arg1          /*  arg1 = arg1 | (arg1 >> 16) */
-       ldi     0xcc,temp1              /*  setup 0xcc in temp1 */
-       extru,= arg1,23,8,temp          /*  test denominator with 0xff00 */
-       extrs   retreg,23,24,retreg     /*  retreg = retreg >> 8 */
-       or      arg1,temp,arg1          /*  arg1 = arg1 | (arg1 >> 8) */
-       ldi     0xaa,temp               /*  setup 0xaa in temp */
-       extru,= arg1,27,4,r0            /*  test denominator with 0xf0 */
-       extrs   retreg,27,28,retreg     /*  retreg = retreg >> 4 */
-       and,=   arg1,temp1,r0           /*  test denominator with 0xcc */
-       extrs   retreg,29,30,retreg     /*  retreg = retreg >> 2 */
-       and,=   arg1,temp,r0            /*  test denominator with 0xaa */
-       extrs   retreg,30,31,retreg     /*  retreg = retreg >> 1 */
-       MILLIRETN
-LSYM(neg_denom)
-       addi,<  0,arg1,r0               /*  if arg1 >= 0, it's not power of 2 */
-       b,n     LREF(regular_seq)
-       sub     r0,arg1,temp            /*  make denominator positive */
-       comb,=,n  arg1,temp,LREF(regular_seq)   /*  test against 0x80000000 and 0 */
-       ldo     -1(temp),retreg         /*  is there at most one bit set ? */
-       and,=   temp,retreg,r0          /*  if so, the denominator is power of 2 */
-       b,n     LREF(regular_seq)
-       sub     r0,arg0,retreg          /*  negate numerator */
-       comb,=,n arg0,retreg,LREF(regular_seq) /*  test against 0x80000000 */
-       copy    retreg,arg0             /*  set up arg0, arg1 and temp  */
-       copy    temp,arg1               /*  before branching to pow2 */
-       b       LREF(pow2)
-       ldo     -1(arg1),temp
-LSYM(regular_seq)
-       comib,>>=,n 15,arg1,LREF(small_divisor)
-       add,>=  0,arg0,retreg           /*  move dividend, if retreg < 0, */
-LSYM(normal)
-       subi    0,retreg,retreg         /*    make it positive */
-       sub     0,arg1,temp             /*  clear carry,  */
-                                       /*    negate the divisor */
-       ds      0,temp,0                /*  set V-bit to the comple- */
-                                       /*    ment of the divisor sign */
-       add     retreg,retreg,retreg    /*  shift msb bit into carry */
-       ds      r0,arg1,temp            /*  1st divide step, if no carry */
-       addc    retreg,retreg,retreg    /*  shift retreg with/into carry */
-       ds      temp,arg1,temp          /*  2nd divide step */
-       addc    retreg,retreg,retreg    /*  shift retreg with/into carry */
-       ds      temp,arg1,temp          /*  3rd divide step */
-       addc    retreg,retreg,retreg    /*  shift retreg with/into carry */
-       ds      temp,arg1,temp          /*  4th divide step */
-       addc    retreg,retreg,retreg    /*  shift retreg with/into carry */
-       ds      temp,arg1,temp          /*  5th divide step */
-       addc    retreg,retreg,retreg    /*  shift retreg with/into carry */
-       ds      temp,arg1,temp          /*  6th divide step */
-       addc    retreg,retreg,retreg    /*  shift retreg with/into carry */
-       ds      temp,arg1,temp          /*  7th divide step */
-       addc    retreg,retreg,retreg    /*  shift retreg with/into carry */
-       ds      temp,arg1,temp          /*  8th divide step */
-       addc    retreg,retreg,retreg    /*  shift retreg with/into carry */
-       ds      temp,arg1,temp          /*  9th divide step */
-       addc    retreg,retreg,retreg    /*  shift retreg with/into carry */
-       ds      temp,arg1,temp          /*  10th divide step */
-       addc    retreg,retreg,retreg    /*  shift retreg with/into carry */
-       ds      temp,arg1,temp          /*  11th divide step */
-       addc    retreg,retreg,retreg    /*  shift retreg with/into carry */
-       ds      temp,arg1,temp          /*  12th divide step */
-       addc    retreg,retreg,retreg    /*  shift retreg with/into carry */
-       ds      temp,arg1,temp          /*  13th divide step */
-       addc    retreg,retreg,retreg    /*  shift retreg with/into carry */
-       ds      temp,arg1,temp          /*  14th divide step */
-       addc    retreg,retreg,retreg    /*  shift retreg with/into carry */
-       ds      temp,arg1,temp          /*  15th divide step */
-       addc    retreg,retreg,retreg    /*  shift retreg with/into carry */
-       ds      temp,arg1,temp          /*  16th divide step */
-       addc    retreg,retreg,retreg    /*  shift retreg with/into carry */
-       ds      temp,arg1,temp          /*  17th divide step */
-       addc    retreg,retreg,retreg    /*  shift retreg with/into carry */
-       ds      temp,arg1,temp          /*  18th divide step */
-       addc    retreg,retreg,retreg    /*  shift retreg with/into carry */
-       ds      temp,arg1,temp          /*  19th divide step */
-       addc    retreg,retreg,retreg    /*  shift retreg with/into carry */
-       ds      temp,arg1,temp          /*  20th divide step */
-       addc    retreg,retreg,retreg    /*  shift retreg with/into carry */
-       ds      temp,arg1,temp          /*  21st divide step */
-       addc    retreg,retreg,retreg    /*  shift retreg with/into carry */
-       ds      temp,arg1,temp          /*  22nd divide step */
-       addc    retreg,retreg,retreg    /*  shift retreg with/into carry */
-       ds      temp,arg1,temp          /*  23rd divide step */
-       addc    retreg,retreg,retreg    /*  shift retreg with/into carry */
-       ds      temp,arg1,temp          /*  24th divide step */
-       addc    retreg,retreg,retreg    /*  shift retreg with/into carry */
-       ds      temp,arg1,temp          /*  25th divide step */
-       addc    retreg,retreg,retreg    /*  shift retreg with/into carry */
-       ds      temp,arg1,temp          /*  26th divide step */
-       addc    retreg,retreg,retreg    /*  shift retreg with/into carry */
-       ds      temp,arg1,temp          /*  27th divide step */
-       addc    retreg,retreg,retreg    /*  shift retreg with/into carry */
-       ds      temp,arg1,temp          /*  28th divide step */
-       addc    retreg,retreg,retreg    /*  shift retreg with/into carry */
-       ds      temp,arg1,temp          /*  29th divide step */
-       addc    retreg,retreg,retreg    /*  shift retreg with/into carry */
-       ds      temp,arg1,temp          /*  30th divide step */
-       addc    retreg,retreg,retreg    /*  shift retreg with/into carry */
-       ds      temp,arg1,temp          /*  31st divide step */
-       addc    retreg,retreg,retreg    /*  shift retreg with/into carry */
-       ds      temp,arg1,temp          /*  32nd divide step, */
-       addc    retreg,retreg,retreg    /*  shift last retreg bit into retreg */
-       xor,>=  arg0,arg1,0             /*  get correct sign of quotient */
-         sub   0,retreg,retreg         /*    based on operand signs */
-       MILLIRETN
-       nop
-
-LSYM(small_divisor)
-
-#if defined(CONFIG_64BIT)
-/*  Clear the upper 32 bits of the arg1 register.  We are working with */
-/*  small divisors (and 32-bit integers)   We must not be mislead  */
-/*  by "1" bits left in the upper 32 bits.  */
-       depd %r0,31,32,%r25
-#endif
-       blr,n   arg1,r0
-       nop
-/*  table for divisor == 0,1, ... ,15 */
-       addit,= 0,arg1,r0       /*  trap if divisor == 0 */
-       nop
-       MILLIRET                /*  divisor == 1 */
-       copy    arg0,retreg
-       MILLI_BEN($$divI_2)     /*  divisor == 2 */
-       nop
-       MILLI_BEN($$divI_3)     /*  divisor == 3 */
-       nop
-       MILLI_BEN($$divI_4)     /*  divisor == 4 */
-       nop
-       MILLI_BEN($$divI_5)     /*  divisor == 5 */
-       nop
-       MILLI_BEN($$divI_6)     /*  divisor == 6 */
-       nop
-       MILLI_BEN($$divI_7)     /*  divisor == 7 */
-       nop
-       MILLI_BEN($$divI_8)     /*  divisor == 8 */
-       nop
-       MILLI_BEN($$divI_9)     /*  divisor == 9 */
-       nop
-       MILLI_BEN($$divI_10)    /*  divisor == 10 */
-       nop
-       b       LREF(normal)            /*  divisor == 11 */
-       add,>=  0,arg0,retreg
-       MILLI_BEN($$divI_12)    /*  divisor == 12 */
-       nop
-       b       LREF(normal)            /*  divisor == 13 */
-       add,>=  0,arg0,retreg
-       MILLI_BEN($$divI_14)    /*  divisor == 14 */
-       nop
-       MILLI_BEN($$divI_15)    /*  divisor == 15 */
-       nop
-
-LSYM(negative1)
-       sub     0,arg0,retreg   /*  result is negation of dividend */
-       MILLIRET
-       addo    arg0,arg1,r0    /*  trap iff dividend==0x80000000 && divisor==-1 */
-       .exit
-       .procend
-       .end
-#endif
diff --git a/arch/parisc/lib/milli/divU.S b/arch/parisc/lib/milli/divU.S
deleted file mode 100644 (file)
index 9287fe2..0000000
+++ /dev/null
@@ -1,235 +0,0 @@
-/* 32 and 64-bit millicode, original author Hewlett-Packard
-   adapted for gcc by Paul Bame <bame@debian.org>
-   and Alan Modra <alan@linuxcare.com.au>.
-
-   Copyright 2001, 2002, 2003 Free Software Foundation, Inc.
-
-   This file is part of GCC and is released under the terms of
-   of the GNU General Public License as published by the Free Software
-   Foundation; either version 2, or (at your option) any later version.
-   See the file COPYING in the top-level GCC source directory for a copy
-   of the license.  */
-
-#include "milli.h"
-
-#ifdef L_divU
-/* ROUTINE:    $$divU
-   .
-   .   Single precision divide for unsigned integers.
-   .
-   .   Quotient is truncated towards zero.
-   .   Traps on divide by zero.
-
-   INPUT REGISTERS:
-   .   arg0 == dividend
-   .   arg1 == divisor
-   .   mrp  == return pc
-   .   sr0  == return space when called externally
-
-   OUTPUT REGISTERS:
-   .   arg0 =  undefined
-   .   arg1 =  undefined
-   .   ret1 =  quotient
-
-   OTHER REGISTERS AFFECTED:
-   .   r1   =  undefined
-
-   SIDE EFFECTS:
-   .   Causes a trap under the following conditions:
-   .           divisor is zero
-   .   Changes memory at the following places:
-   .           NONE
-
-   PERMISSIBLE CONTEXT:
-   .   Unwindable.
-   .   Does not create a stack frame.
-   .   Suitable for internal or external millicode.
-   .   Assumes the special millicode register conventions.
-
-   DISCUSSION:
-   .   Branchs to other millicode routines using BE:
-   .           $$divU_# for 3,5,6,7,9,10,12,14,15
-   .
-   .   For selected small divisors calls the special divide by constant
-   .   routines written by Karl Pettis.  These are: 3,5,6,7,9,10,12,14,15.  */
-
-RDEFINE(temp,r1)
-RDEFINE(retreg,ret1)   /* r29 */
-RDEFINE(temp1,arg0)
-       SUBSPA_MILLI_DIV
-       ATTR_MILLI
-       .export $$divU,millicode
-       .import $$divU_3,millicode
-       .import $$divU_5,millicode
-       .import $$divU_6,millicode
-       .import $$divU_7,millicode
-       .import $$divU_9,millicode
-       .import $$divU_10,millicode
-       .import $$divU_12,millicode
-       .import $$divU_14,millicode
-       .import $$divU_15,millicode
-       .proc
-       .callinfo       millicode
-       .entry
-GSYM($$divU)
-/* The subtract is not nullified since it does no harm and can be used
-   by the two cases that branch back to "normal".  */
-       ldo     -1(arg1),temp           /* is there at most one bit set ? */
-       and,=   arg1,temp,r0            /* if so, denominator is power of 2 */
-       b       LREF(regular_seq)
-       addit,= 0,arg1,0                /* trap for zero dvr */
-       copy    arg0,retreg
-       extru,= arg1,15,16,temp         /* test denominator with 0xffff0000 */
-       extru   retreg,15,16,retreg     /* retreg = retreg >> 16 */
-       or      arg1,temp,arg1          /* arg1 = arg1 | (arg1 >> 16) */
-       ldi     0xcc,temp1              /* setup 0xcc in temp1 */
-       extru,= arg1,23,8,temp          /* test denominator with 0xff00 */
-       extru   retreg,23,24,retreg     /* retreg = retreg >> 8 */
-       or      arg1,temp,arg1          /* arg1 = arg1 | (arg1 >> 8) */
-       ldi     0xaa,temp               /* setup 0xaa in temp */
-       extru,= arg1,27,4,r0            /* test denominator with 0xf0 */
-       extru   retreg,27,28,retreg     /* retreg = retreg >> 4 */
-       and,=   arg1,temp1,r0           /* test denominator with 0xcc */
-       extru   retreg,29,30,retreg     /* retreg = retreg >> 2 */
-       and,=   arg1,temp,r0            /* test denominator with 0xaa */
-       extru   retreg,30,31,retreg     /* retreg = retreg >> 1 */
-       MILLIRETN
-       nop     
-LSYM(regular_seq)
-       comib,>=  15,arg1,LREF(special_divisor)
-       subi    0,arg1,temp             /* clear carry, negate the divisor */
-       ds      r0,temp,r0              /* set V-bit to 1 */
-LSYM(normal)
-       add     arg0,arg0,retreg        /* shift msb bit into carry */
-       ds      r0,arg1,temp            /* 1st divide step, if no carry */
-       addc    retreg,retreg,retreg    /* shift retreg with/into carry */
-       ds      temp,arg1,temp          /* 2nd divide step */
-       addc    retreg,retreg,retreg    /* shift retreg with/into carry */
-       ds      temp,arg1,temp          /* 3rd divide step */
-       addc    retreg,retreg,retreg    /* shift retreg with/into carry */
-       ds      temp,arg1,temp          /* 4th divide step */
-       addc    retreg,retreg,retreg    /* shift retreg with/into carry */
-       ds      temp,arg1,temp          /* 5th divide step */
-       addc    retreg,retreg,retreg    /* shift retreg with/into carry */
-       ds      temp,arg1,temp          /* 6th divide step */
-       addc    retreg,retreg,retreg    /* shift retreg with/into carry */
-       ds      temp,arg1,temp          /* 7th divide step */
-       addc    retreg,retreg,retreg    /* shift retreg with/into carry */
-       ds      temp,arg1,temp          /* 8th divide step */
-       addc    retreg,retreg,retreg    /* shift retreg with/into carry */
-       ds      temp,arg1,temp          /* 9th divide step */
-       addc    retreg,retreg,retreg    /* shift retreg with/into carry */
-       ds      temp,arg1,temp          /* 10th divide step */
-       addc    retreg,retreg,retreg    /* shift retreg with/into carry */
-       ds      temp,arg1,temp          /* 11th divide step */
-       addc    retreg,retreg,retreg    /* shift retreg with/into carry */
-       ds      temp,arg1,temp          /* 12th divide step */
-       addc    retreg,retreg,retreg    /* shift retreg with/into carry */
-       ds      temp,arg1,temp          /* 13th divide step */
-       addc    retreg,retreg,retreg    /* shift retreg with/into carry */
-       ds      temp,arg1,temp          /* 14th divide step */
-       addc    retreg,retreg,retreg    /* shift retreg with/into carry */
-       ds      temp,arg1,temp          /* 15th divide step */
-       addc    retreg,retreg,retreg    /* shift retreg with/into carry */
-       ds      temp,arg1,temp          /* 16th divide step */
-       addc    retreg,retreg,retreg    /* shift retreg with/into carry */
-       ds      temp,arg1,temp          /* 17th divide step */
-       addc    retreg,retreg,retreg    /* shift retreg with/into carry */
-       ds      temp,arg1,temp          /* 18th divide step */
-       addc    retreg,retreg,retreg    /* shift retreg with/into carry */
-       ds      temp,arg1,temp          /* 19th divide step */
-       addc    retreg,retreg,retreg    /* shift retreg with/into carry */
-       ds      temp,arg1,temp          /* 20th divide step */
-       addc    retreg,retreg,retreg    /* shift retreg with/into carry */
-       ds      temp,arg1,temp          /* 21st divide step */
-       addc    retreg,retreg,retreg    /* shift retreg with/into carry */
-       ds      temp,arg1,temp          /* 22nd divide step */
-       addc    retreg,retreg,retreg    /* shift retreg with/into carry */
-       ds      temp,arg1,temp          /* 23rd divide step */
-       addc    retreg,retreg,retreg    /* shift retreg with/into carry */
-       ds      temp,arg1,temp          /* 24th divide step */
-       addc    retreg,retreg,retreg    /* shift retreg with/into carry */
-       ds      temp,arg1,temp          /* 25th divide step */
-       addc    retreg,retreg,retreg    /* shift retreg with/into carry */
-       ds      temp,arg1,temp          /* 26th divide step */
-       addc    retreg,retreg,retreg    /* shift retreg with/into carry */
-       ds      temp,arg1,temp          /* 27th divide step */
-       addc    retreg,retreg,retreg    /* shift retreg with/into carry */
-       ds      temp,arg1,temp          /* 28th divide step */
-       addc    retreg,retreg,retreg    /* shift retreg with/into carry */
-       ds      temp,arg1,temp          /* 29th divide step */
-       addc    retreg,retreg,retreg    /* shift retreg with/into carry */
-       ds      temp,arg1,temp          /* 30th divide step */
-       addc    retreg,retreg,retreg    /* shift retreg with/into carry */
-       ds      temp,arg1,temp          /* 31st divide step */
-       addc    retreg,retreg,retreg    /* shift retreg with/into carry */
-       ds      temp,arg1,temp          /* 32nd divide step, */
-       MILLIRET
-       addc    retreg,retreg,retreg    /* shift last retreg bit into retreg */
-
-/* Handle the cases where divisor is a small constant or has high bit on.  */
-LSYM(special_divisor)
-/*     blr     arg1,r0 */
-/*     comib,>,n  0,arg1,LREF(big_divisor) ; nullify previous instruction */
-
-/* Pratap 8/13/90. The 815 Stirling chip set has a bug that prevents us from
-   generating such a blr, comib sequence. A problem in nullification. So I
-   rewrote this code.  */
-
-#if defined(CONFIG_64BIT)
-/* Clear the upper 32 bits of the arg1 register.  We are working with
-   small divisors (and 32-bit unsigned integers)   We must not be mislead
-   by "1" bits left in the upper 32 bits.  */
-       depd %r0,31,32,%r25
-#endif
-       comib,> 0,arg1,LREF(big_divisor)
-       nop
-       blr     arg1,r0
-       nop
-
-LSYM(zero_divisor)     /* this label is here to provide external visibility */
-       addit,= 0,arg1,0                /* trap for zero dvr */
-       nop
-       MILLIRET                        /* divisor == 1 */
-       copy    arg0,retreg
-       MILLIRET                        /* divisor == 2 */
-       extru   arg0,30,31,retreg
-       MILLI_BEN($$divU_3)             /* divisor == 3 */
-       nop
-       MILLIRET                        /* divisor == 4 */
-       extru   arg0,29,30,retreg
-       MILLI_BEN($$divU_5)             /* divisor == 5 */
-       nop
-       MILLI_BEN($$divU_6)             /* divisor == 6 */
-       nop
-       MILLI_BEN($$divU_7)             /* divisor == 7 */
-       nop
-       MILLIRET                        /* divisor == 8 */
-       extru   arg0,28,29,retreg
-       MILLI_BEN($$divU_9)             /* divisor == 9 */
-       nop
-       MILLI_BEN($$divU_10)            /* divisor == 10 */
-       nop
-       b       LREF(normal)            /* divisor == 11 */
-       ds      r0,temp,r0              /* set V-bit to 1 */
-       MILLI_BEN($$divU_12)            /* divisor == 12 */
-       nop
-       b       LREF(normal)            /* divisor == 13 */
-       ds      r0,temp,r0              /* set V-bit to 1 */
-       MILLI_BEN($$divU_14)            /* divisor == 14 */
-       nop
-       MILLI_BEN($$divU_15)            /* divisor == 15 */
-       nop
-
-/* Handle the case where the high bit is on in the divisor.
-   Compute:    if( dividend>=divisor) quotient=1; else quotient=0;
-   Note:       dividend>==divisor iff dividend-divisor does not borrow
-   and         not borrow iff carry.  */
-LSYM(big_divisor)
-       sub     arg0,arg1,r0
-       MILLIRET
-       addc    r0,r0,retreg
-       .exit
-       .procend
-       .end
-#endif
diff --git a/arch/parisc/lib/milli/div_const.S b/arch/parisc/lib/milli/div_const.S
deleted file mode 100644 (file)
index dd66007..0000000
+++ /dev/null
@@ -1,682 +0,0 @@
-/* 32 and 64-bit millicode, original author Hewlett-Packard
-   adapted for gcc by Paul Bame <bame@debian.org>
-   and Alan Modra <alan@linuxcare.com.au>.
-
-   Copyright 2001, 2002, 2003 Free Software Foundation, Inc.
-
-   This file is part of GCC and is released under the terms of
-   of the GNU General Public License as published by the Free Software
-   Foundation; either version 2, or (at your option) any later version.
-   See the file COPYING in the top-level GCC source directory for a copy
-   of the license.  */
-
-#include "milli.h"
-
-#ifdef L_div_const
-/* ROUTINE:    $$divI_2
-   .           $$divI_3        $$divU_3
-   .           $$divI_4
-   .           $$divI_5        $$divU_5
-   .           $$divI_6        $$divU_6
-   .           $$divI_7        $$divU_7
-   .           $$divI_8
-   .           $$divI_9        $$divU_9
-   .           $$divI_10       $$divU_10
-   .
-   .           $$divI_12       $$divU_12
-   .
-   .           $$divI_14       $$divU_14
-   .           $$divI_15       $$divU_15
-   .           $$divI_16
-   .           $$divI_17       $$divU_17
-   .
-   .   Divide by selected constants for single precision binary integers.
-
-   INPUT REGISTERS:
-   .   arg0 == dividend
-   .   mrp  == return pc
-   .   sr0  == return space when called externally
-
-   OUTPUT REGISTERS:
-   .   arg0 =  undefined
-   .   arg1 =  undefined
-   .   ret1 =  quotient
-
-   OTHER REGISTERS AFFECTED:
-   .   r1   =  undefined
-
-   SIDE EFFECTS:
-   .   Causes a trap under the following conditions: NONE
-   .   Changes memory at the following places:  NONE
-
-   PERMISSIBLE CONTEXT:
-   .   Unwindable.
-   .   Does not create a stack frame.
-   .   Suitable for internal or external millicode.
-   .   Assumes the special millicode register conventions.
-
-   DISCUSSION:
-   .   Calls other millicode routines using mrp:  NONE
-   .   Calls other millicode routines:  NONE  */
-
-
-/* TRUNCATED DIVISION BY SMALL INTEGERS
-
-   We are interested in q(x) = floor(x/y), where x >= 0 and y > 0
-   (with y fixed).
-
-   Let a = floor(z/y), for some choice of z.  Note that z will be
-   chosen so that division by z is cheap.
-
-   Let r be the remainder(z/y).  In other words, r = z - ay.
-
-   Now, our method is to choose a value for b such that
-
-   q'(x) = floor((ax+b)/z)
-
-   is equal to q(x) over as large a range of x as possible.  If the
-   two are equal over a sufficiently large range, and if it is easy to
-   form the product (ax), and it is easy to divide by z, then we can
-   perform the division much faster than the general division algorithm.
-
-   So, we want the following to be true:
-
-   .   For x in the following range:
-   .
-   .       ky <= x < (k+1)y
-   .
-   .   implies that
-   .
-   .       k <= (ax+b)/z < (k+1)
-
-   We want to determine b such that this is true for all k in the
-   range {0..K} for some maximum K.
-
-   Since (ax+b) is an increasing function of x, we can take each
-   bound separately to determine the "best" value for b.
-
-   (ax+b)/z < (k+1)           implies
-
-   (a((k+1)y-1)+b < (k+1)z     implies
-
-   b < a + (k+1)(z-ay)        implies
-
-   b < a + (k+1)r
-
-   This needs to be true for all k in the range {0..K}.  In
-   particular, it is true for k = 0 and this leads to a maximum
-   acceptable value for b.
-
-   b < a+r   or   b <= a+r-1
-
-   Taking the other bound, we have
-
-   k <= (ax+b)/z              implies
-
-   k <= (aky+b)/z             implies
-
-   k(z-ay) <= b                       implies
-
-   kr <= b
-
-   Clearly, the largest range for k will be achieved by maximizing b,
-   when r is not zero. When r is zero, then the simplest choice for b
-   is 0.  When r is not 0, set
-
-   .   b = a+r-1
-
-   Now, by construction, q'(x) = floor((ax+b)/z) = q(x) = floor(x/y)
-   for all x in the range:
-
-   .   0 <= x < (K+1)y
-
-   We need to determine what K is.  Of our two bounds,
-
-   .   b < a+(k+1)r    is satisfied for all k >= 0, by construction.
-
-   The other bound is
-
-   .   kr <= b
-
-   This is always true if r = 0.  If r is not 0 (the usual case), then
-   K = floor((a+r-1)/r), is the maximum value for k.
-
-   Therefore, the formula q'(x) = floor((ax+b)/z) yields the correct
-   answer for q(x) = floor(x/y) when x is in the range
-
-   (0,(K+1)y-1)               K = floor((a+r-1)/r)
-
-   To be most useful, we want (K+1)y-1 = (max x) >= 2**32-1 so that
-   the formula for q'(x) yields the correct value of q(x) for all x
-   representable by a single word in HPPA.
-
-   We are also constrained in that computing the product (ax), adding
-   b, and dividing by z must all be done quickly, otherwise we will be
-   better off going through the general algorithm using the DS
-   instruction, which uses approximately 70 cycles.
-
-   For each y, there is a choice of z which satisfies the constraints
-   for (K+1)y >= 2**32.  We may not, however, be able to satisfy the
-   timing constraints for arbitrary y. It seems that z being equal to
-   a power of 2 or a power of 2 minus 1 is as good as we can do, since
-   it minimizes the time to do division by z.  We want the choice of z
-   to also result in a value for (a) that minimizes the computation of
-   the product (ax).  This is best achieved if (a) has a regular bit
-   pattern (so the multiplication can be done with shifts and adds).
-   The value of (a) also needs to be less than 2**32 so the product is
-   always guaranteed to fit in 2 words.
-
-   In actual practice, the following should be done:
-
-   1) For negative x, you should take the absolute value and remember
-   .  the fact so that the result can be negated.  This obviously does
-   .  not apply in the unsigned case.
-   2) For even y, you should factor out the power of 2 that divides y
-   .  and divide x by it.  You can then proceed by dividing by the
-   .  odd factor of y.
-
-   Here is a table of some odd values of y, and corresponding choices
-   for z which are "good".
-
-    y    z       r      a (hex)     max x (hex)
-
-    3  2**32     1     55555555      100000001
-    5  2**32     1     33333333      100000003
-    7  2**24-1   0       249249     (infinite)
-    9  2**24-1   0       1c71c7     (infinite)
-   11  2**20-1   0        1745d     (infinite)
-   13  2**24-1   0       13b13b     (infinite)
-   15  2**32     1     11111111      10000000d
-   17  2**32     1      f0f0f0f      10000000f
-
-   If r is 1, then b = a+r-1 = a.  This simplifies the computation
-   of (ax+b), since you can compute (x+1)(a) instead.  If r is 0,
-   then b = 0 is ok to use which simplifies (ax+b).
-
-   The bit patterns for 55555555, 33333333, and 11111111 are obviously
-   very regular.  The bit patterns for the other values of a above are:
-
-    y     (hex)          (binary)
-
-    7    249249  001001001001001001001001  << regular >>
-    9    1c71c7  000111000111000111000111  << regular >>
-   11     1745d  000000010111010001011101  << irregular >>
-   13    13b13b  000100111011000100111011  << irregular >>
-
-   The bit patterns for (a) corresponding to (y) of 11 and 13 may be
-   too irregular to warrant using this method.
-
-   When z is a power of 2 minus 1, then the division by z is slightly
-   more complicated, involving an iterative solution.
-
-   The code presented here solves division by 1 through 17, except for
-   11 and 13. There are algorithms for both signed and unsigned
-   quantities given.
-
-   TIMINGS (cycles)
-
-   divisor  positive  negative unsigned
-
-   .   1       2          2         2
-   .   2       4          4         2
-   .   3       19        21        19
-   .   4       4          4         2
-   .   5       18        22        19
-   .   6       19        22        19
-   .   8       4          4         2
-   .  10       18        19        17
-   .  12       18        20        18
-   .  15       16        18        16
-   .  16       4          4         2
-   .  17       16        18        16
-
-   Now, the algorithm for 7, 9, and 14 is an iterative one.  That is,
-   a loop body is executed until the tentative quotient is 0.  The
-   number of times the loop body is executed varies depending on the
-   dividend, but is never more than two times. If the dividend is
-   less than the divisor, then the loop body is not executed at all.
-   Each iteration adds 4 cycles to the timings.
-
-   divisor  positive  negative unsigned
-
-   .   7       19+4n    20+4n     20+4n    n = number of iterations
-   .   9       21+4n    22+4n     21+4n
-   .  14       21+4n    22+4n     20+4n
-
-   To give an idea of how the number of iterations varies, here is a
-   table of dividend versus number of iterations when dividing by 7.
-
-   smallest     largest       required
-   dividend    dividend      iterations
-
-   .   0            6              0
-   .   7        0x6ffffff          1
-   0x1000006   0xffffffff          2
-
-   There is some overlap in the range of numbers requiring 1 and 2
-   iterations. */
-
-RDEFINE(t2,r1)
-RDEFINE(x2,arg0)       /*  r26 */
-RDEFINE(t1,arg1)       /*  r25 */
-RDEFINE(x1,ret1)       /*  r29 */
-
-       SUBSPA_MILLI_DIV
-       ATTR_MILLI
-
-       .proc
-       .callinfo       millicode
-       .entry
-/* NONE of these routines require a stack frame
-   ALL of these routines are unwindable from millicode */
-
-GSYM($$divide_by_constant)
-       .export $$divide_by_constant,millicode
-/*  Provides a "nice" label for the code covered by the unwind descriptor
-    for things like gprof.  */
-
-/* DIVISION BY 2 (shift by 1) */
-GSYM($$divI_2)
-       .export         $$divI_2,millicode
-       comclr,>=       arg0,0,0
-       addi            1,arg0,arg0
-       MILLIRET
-       extrs           arg0,30,31,ret1
-
-
-/* DIVISION BY 4 (shift by 2) */
-GSYM($$divI_4)
-       .export         $$divI_4,millicode
-       comclr,>=       arg0,0,0
-       addi            3,arg0,arg0
-       MILLIRET
-       extrs           arg0,29,30,ret1
-
-
-/* DIVISION BY 8 (shift by 3) */
-GSYM($$divI_8)
-       .export         $$divI_8,millicode
-       comclr,>=       arg0,0,0
-       addi            7,arg0,arg0
-       MILLIRET
-       extrs           arg0,28,29,ret1
-
-/* DIVISION BY 16 (shift by 4) */
-GSYM($$divI_16)
-       .export         $$divI_16,millicode
-       comclr,>=       arg0,0,0
-       addi            15,arg0,arg0
-       MILLIRET
-       extrs           arg0,27,28,ret1
-
-/****************************************************************************
-*
-*      DIVISION BY DIVISORS OF FFFFFFFF, and powers of 2 times these
-*
-*      includes 3,5,15,17 and also 6,10,12
-*
-****************************************************************************/
-
-/* DIVISION BY 3 (use z = 2**32; a = 55555555) */
-
-GSYM($$divI_3)
-       .export         $$divI_3,millicode
-       comb,<,N        x2,0,LREF(neg3)
-
-       addi            1,x2,x2         /* this cannot overflow */
-       extru           x2,1,2,x1       /* multiply by 5 to get started */
-       sh2add          x2,x2,x2
-       b               LREF(pos)
-       addc            x1,0,x1
-
-LSYM(neg3)
-       subi            1,x2,x2         /* this cannot overflow */
-       extru           x2,1,2,x1       /* multiply by 5 to get started */
-       sh2add          x2,x2,x2
-       b               LREF(neg)
-       addc            x1,0,x1
-
-GSYM($$divU_3)
-       .export         $$divU_3,millicode
-       addi            1,x2,x2         /* this CAN overflow */
-       addc            0,0,x1
-       shd             x1,x2,30,t1     /* multiply by 5 to get started */
-       sh2add          x2,x2,x2
-       b               LREF(pos)
-       addc            x1,t1,x1
-
-/* DIVISION BY 5 (use z = 2**32; a = 33333333) */
-
-GSYM($$divI_5)
-       .export         $$divI_5,millicode
-       comb,<,N        x2,0,LREF(neg5)
-
-       addi            3,x2,t1         /* this cannot overflow */
-       sh1add          x2,t1,x2        /* multiply by 3 to get started */
-       b               LREF(pos)
-       addc            0,0,x1
-
-LSYM(neg5)
-       sub             0,x2,x2         /* negate x2                    */
-       addi            1,x2,x2         /* this cannot overflow */
-       shd             0,x2,31,x1      /* get top bit (can be 1)       */
-       sh1add          x2,x2,x2        /* multiply by 3 to get started */
-       b               LREF(neg)
-       addc            x1,0,x1
-
-GSYM($$divU_5)
-       .export         $$divU_5,millicode
-       addi            1,x2,x2         /* this CAN overflow */
-       addc            0,0,x1
-       shd             x1,x2,31,t1     /* multiply by 3 to get started */
-       sh1add          x2,x2,x2
-       b               LREF(pos)
-       addc            t1,x1,x1
-
-/* DIVISION BY 6 (shift to divide by 2 then divide by 3) */
-GSYM($$divI_6)
-       .export         $$divI_6,millicode
-       comb,<,N        x2,0,LREF(neg6)
-       extru           x2,30,31,x2     /* divide by 2                  */
-       addi            5,x2,t1         /* compute 5*(x2+1) = 5*x2+5    */
-       sh2add          x2,t1,x2        /* multiply by 5 to get started */
-       b               LREF(pos)
-       addc            0,0,x1
-
-LSYM(neg6)
-       subi            2,x2,x2         /* negate, divide by 2, and add 1 */
-                                       /* negation and adding 1 are done */
-                                       /* at the same time by the SUBI   */
-       extru           x2,30,31,x2
-       shd             0,x2,30,x1
-       sh2add          x2,x2,x2        /* multiply by 5 to get started */
-       b               LREF(neg)
-       addc            x1,0,x1
-
-GSYM($$divU_6)
-       .export         $$divU_6,millicode
-       extru           x2,30,31,x2     /* divide by 2 */
-       addi            1,x2,x2         /* cannot carry */
-       shd             0,x2,30,x1      /* multiply by 5 to get started */
-       sh2add          x2,x2,x2
-       b               LREF(pos)
-       addc            x1,0,x1
-
-/* DIVISION BY 10 (shift to divide by 2 then divide by 5) */
-GSYM($$divU_10)
-       .export         $$divU_10,millicode
-       extru           x2,30,31,x2     /* divide by 2 */
-       addi            3,x2,t1         /* compute 3*(x2+1) = (3*x2)+3  */
-       sh1add          x2,t1,x2        /* multiply by 3 to get started */
-       addc            0,0,x1
-LSYM(pos)
-       shd             x1,x2,28,t1     /* multiply by 0x11 */
-       shd             x2,0,28,t2
-       add             x2,t2,x2
-       addc            x1,t1,x1
-LSYM(pos_for_17)
-       shd             x1,x2,24,t1     /* multiply by 0x101 */
-       shd             x2,0,24,t2
-       add             x2,t2,x2
-       addc            x1,t1,x1
-
-       shd             x1,x2,16,t1     /* multiply by 0x10001 */
-       shd             x2,0,16,t2
-       add             x2,t2,x2
-       MILLIRET
-       addc            x1,t1,x1
-
-GSYM($$divI_10)
-       .export         $$divI_10,millicode
-       comb,<          x2,0,LREF(neg10)
-       copy            0,x1
-       extru           x2,30,31,x2     /* divide by 2 */
-       addib,TR        1,x2,LREF(pos)  /* add 1 (cannot overflow)     */
-       sh1add          x2,x2,x2        /* multiply by 3 to get started */
-
-LSYM(neg10)
-       subi            2,x2,x2         /* negate, divide by 2, and add 1 */
-                                       /* negation and adding 1 are done */
-                                       /* at the same time by the SUBI   */
-       extru           x2,30,31,x2
-       sh1add          x2,x2,x2        /* multiply by 3 to get started */
-LSYM(neg)
-       shd             x1,x2,28,t1     /* multiply by 0x11 */
-       shd             x2,0,28,t2
-       add             x2,t2,x2
-       addc            x1,t1,x1
-LSYM(neg_for_17)
-       shd             x1,x2,24,t1     /* multiply by 0x101 */
-       shd             x2,0,24,t2
-       add             x2,t2,x2
-       addc            x1,t1,x1
-
-       shd             x1,x2,16,t1     /* multiply by 0x10001 */
-       shd             x2,0,16,t2
-       add             x2,t2,x2
-       addc            x1,t1,x1
-       MILLIRET
-       sub             0,x1,x1
-
-/* DIVISION BY 12 (shift to divide by 4 then divide by 3) */
-GSYM($$divI_12)
-       .export         $$divI_12,millicode
-       comb,<          x2,0,LREF(neg12)
-       copy            0,x1
-       extru           x2,29,30,x2     /* divide by 4                  */
-       addib,tr        1,x2,LREF(pos)  /* compute 5*(x2+1) = 5*x2+5    */
-       sh2add          x2,x2,x2        /* multiply by 5 to get started */
-
-LSYM(neg12)
-       subi            4,x2,x2         /* negate, divide by 4, and add 1 */
-                                       /* negation and adding 1 are done */
-                                       /* at the same time by the SUBI   */
-       extru           x2,29,30,x2
-       b               LREF(neg)
-       sh2add          x2,x2,x2        /* multiply by 5 to get started */
-
-GSYM($$divU_12)
-       .export         $$divU_12,millicode
-       extru           x2,29,30,x2     /* divide by 4   */
-       addi            5,x2,t1         /* cannot carry */
-       sh2add          x2,t1,x2        /* multiply by 5 to get started */
-       b               LREF(pos)
-       addc            0,0,x1
-
-/* DIVISION BY 15 (use z = 2**32; a = 11111111) */
-GSYM($$divI_15)
-       .export         $$divI_15,millicode
-       comb,<          x2,0,LREF(neg15)
-       copy            0,x1
-       addib,tr        1,x2,LREF(pos)+4
-       shd             x1,x2,28,t1
-
-LSYM(neg15)
-       b               LREF(neg)
-       subi            1,x2,x2
-
-GSYM($$divU_15)
-       .export         $$divU_15,millicode
-       addi            1,x2,x2         /* this CAN overflow */
-       b               LREF(pos)
-       addc            0,0,x1
-
-/* DIVISION BY 17 (use z = 2**32; a =  f0f0f0f) */
-GSYM($$divI_17)
-       .export         $$divI_17,millicode
-       comb,<,n        x2,0,LREF(neg17)
-       addi            1,x2,x2         /* this cannot overflow */
-       shd             0,x2,28,t1      /* multiply by 0xf to get started */
-       shd             x2,0,28,t2
-       sub             t2,x2,x2
-       b               LREF(pos_for_17)
-       subb            t1,0,x1
-
-LSYM(neg17)
-       subi            1,x2,x2         /* this cannot overflow */
-       shd             0,x2,28,t1      /* multiply by 0xf to get started */
-       shd             x2,0,28,t2
-       sub             t2,x2,x2
-       b               LREF(neg_for_17)
-       subb            t1,0,x1
-
-GSYM($$divU_17)
-       .export         $$divU_17,millicode
-       addi            1,x2,x2         /* this CAN overflow */
-       addc            0,0,x1
-       shd             x1,x2,28,t1     /* multiply by 0xf to get started */
-LSYM(u17)
-       shd             x2,0,28,t2
-       sub             t2,x2,x2
-       b               LREF(pos_for_17)
-       subb            t1,x1,x1
-
-
-/* DIVISION BY DIVISORS OF FFFFFF, and powers of 2 times these
-   includes 7,9 and also 14
-
-
-   z = 2**24-1
-   r = z mod x = 0
-
-   so choose b = 0
-
-   Also, in order to divide by z = 2**24-1, we approximate by dividing
-   by (z+1) = 2**24 (which is easy), and then correcting.
-
-   (ax) = (z+1)q' + r
-   .   = zq' + (q'+r)
-
-   So to compute (ax)/z, compute q' = (ax)/(z+1) and r = (ax) mod (z+1)
-   Then the true remainder of (ax)/z is (q'+r).  Repeat the process
-   with this new remainder, adding the tentative quotients together,
-   until a tentative quotient is 0 (and then we are done).  There is
-   one last correction to be done.  It is possible that (q'+r) = z.
-   If so, then (q'+r)/(z+1) = 0 and it looks like we are done. But,
-   in fact, we need to add 1 more to the quotient.  Now, it turns
-   out that this happens if and only if the original value x is
-   an exact multiple of y.  So, to avoid a three instruction test at
-   the end, instead use 1 instruction to add 1 to x at the beginning.  */
-
-/* DIVISION BY 7 (use z = 2**24-1; a = 249249) */
-GSYM($$divI_7)
-       .export         $$divI_7,millicode
-       comb,<,n        x2,0,LREF(neg7)
-LSYM(7)
-       addi            1,x2,x2         /* cannot overflow */
-       shd             0,x2,29,x1
-       sh3add          x2,x2,x2
-       addc            x1,0,x1
-LSYM(pos7)
-       shd             x1,x2,26,t1
-       shd             x2,0,26,t2
-       add             x2,t2,x2
-       addc            x1,t1,x1
-
-       shd             x1,x2,20,t1
-       shd             x2,0,20,t2
-       add             x2,t2,x2
-       addc            x1,t1,t1
-
-       /* computed <t1,x2>.  Now divide it by (2**24 - 1)      */
-
-       copy            0,x1
-       shd,=           t1,x2,24,t1     /* tentative quotient  */
-LSYM(1)
-       addb,tr         t1,x1,LREF(2)   /* add to previous quotient   */
-       extru           x2,31,24,x2     /* new remainder (unadjusted) */
-
-       MILLIRETN
-
-LSYM(2)
-       addb,tr         t1,x2,LREF(1)   /* adjust remainder */
-       extru,=         x2,7,8,t1       /* new quotient     */
-
-LSYM(neg7)
-       subi            1,x2,x2         /* negate x2 and add 1 */
-LSYM(8)
-       shd             0,x2,29,x1
-       sh3add          x2,x2,x2
-       addc            x1,0,x1
-
-LSYM(neg7_shift)
-       shd             x1,x2,26,t1
-       shd             x2,0,26,t2
-       add             x2,t2,x2
-       addc            x1,t1,x1
-
-       shd             x1,x2,20,t1
-       shd             x2,0,20,t2
-       add             x2,t2,x2
-       addc            x1,t1,t1
-
-       /* computed <t1,x2>.  Now divide it by (2**24 - 1)      */
-
-       copy            0,x1
-       shd,=           t1,x2,24,t1     /* tentative quotient  */
-LSYM(3)
-       addb,tr         t1,x1,LREF(4)   /* add to previous quotient   */
-       extru           x2,31,24,x2     /* new remainder (unadjusted) */
-
-       MILLIRET
-       sub             0,x1,x1         /* negate result    */
-
-LSYM(4)
-       addb,tr         t1,x2,LREF(3)   /* adjust remainder */
-       extru,=         x2,7,8,t1       /* new quotient     */
-
-GSYM($$divU_7)
-       .export         $$divU_7,millicode
-       addi            1,x2,x2         /* can carry */
-       addc            0,0,x1
-       shd             x1,x2,29,t1
-       sh3add          x2,x2,x2
-       b               LREF(pos7)
-       addc            t1,x1,x1
-
-/* DIVISION BY 9 (use z = 2**24-1; a = 1c71c7) */
-GSYM($$divI_9)
-       .export         $$divI_9,millicode
-       comb,<,n        x2,0,LREF(neg9)
-       addi            1,x2,x2         /* cannot overflow */
-       shd             0,x2,29,t1
-       shd             x2,0,29,t2
-       sub             t2,x2,x2
-       b               LREF(pos7)
-       subb            t1,0,x1
-
-LSYM(neg9)
-       subi            1,x2,x2         /* negate and add 1 */
-       shd             0,x2,29,t1
-       shd             x2,0,29,t2
-       sub             t2,x2,x2
-       b               LREF(neg7_shift)
-       subb            t1,0,x1
-
-GSYM($$divU_9)
-       .export         $$divU_9,millicode
-       addi            1,x2,x2         /* can carry */
-       addc            0,0,x1
-       shd             x1,x2,29,t1
-       shd             x2,0,29,t2
-       sub             t2,x2,x2
-       b               LREF(pos7)
-       subb            t1,x1,x1
-
-/* DIVISION BY 14 (shift to divide by 2 then divide by 7) */
-GSYM($$divI_14)
-       .export         $$divI_14,millicode
-       comb,<,n        x2,0,LREF(neg14)
-GSYM($$divU_14)
-       .export         $$divU_14,millicode
-       b               LREF(7)         /* go to 7 case */
-       extru           x2,30,31,x2     /* divide by 2  */
-
-LSYM(neg14)
-       subi            2,x2,x2         /* negate (and add 2) */
-       b               LREF(8)
-       extru           x2,30,31,x2     /* divide by 2        */
-       .exit
-       .procend
-       .end
-#endif
diff --git a/arch/parisc/lib/milli/dyncall.S b/arch/parisc/lib/milli/dyncall.S
deleted file mode 100644 (file)
index 27f9ca5..0000000
+++ /dev/null
@@ -1,32 +0,0 @@
-/* 32 and 64-bit millicode, original author Hewlett-Packard
-   adapted for gcc by Paul Bame <bame@debian.org>
-   and Alan Modra <alan@linuxcare.com.au>.
-
-   Copyright 2001, 2002, 2003 Free Software Foundation, Inc.
-
-   This file is part of GCC and is released under the terms of
-   of the GNU General Public License as published by the Free Software
-   Foundation; either version 2, or (at your option) any later version.
-   See the file COPYING in the top-level GCC source directory for a copy
-   of the license.  */
-
-#include "milli.h"
-
-#ifdef L_dyncall
-       SUBSPA_MILLI
-       ATTR_DATA
-GSYM($$dyncall)
-       .export $$dyncall,millicode
-       .proc
-       .callinfo       millicode
-       .entry
-       bb,>=,n %r22,30,LREF(1)         ; branch if not plabel address
-       depi    0,31,2,%r22             ; clear the two least significant bits
-       ldw     4(%r22),%r19            ; load new LTP value
-       ldw     0(%r22),%r22            ; load address of target
-LSYM(1)
-       bv      %r0(%r22)               ; branch to the real target
-       stw     %r2,-24(%r30)           ; save return address into frame marker
-       .exit
-       .procend
-#endif
diff --git a/arch/parisc/lib/milli/milli.S b/arch/parisc/lib/milli/milli.S
deleted file mode 100644 (file)
index 47c6cde..0000000
+++ /dev/null
@@ -1,2071 +0,0 @@
-/* 32 and 64-bit millicode, original author Hewlett-Packard
-   adapted for gcc by Paul Bame <bame@debian.org>
-   and Alan Modra <alan@linuxcare.com.au>.
-
-   Copyright 2001, 2002, 2003 Free Software Foundation, Inc.
-
-   This file is part of GCC and is released under the terms of
-   of the GNU General Public License as published by the Free Software
-   Foundation; either version 2, or (at your option) any later version.
-   See the file COPYING in the top-level GCC source directory for a copy
-   of the license.  */
-
-#ifdef CONFIG_64BIT
-        .level  2.0w
-#endif
-
-/* Hardware General Registers.  */
-r0:    .reg    %r0
-r1:    .reg    %r1
-r2:    .reg    %r2
-r3:    .reg    %r3
-r4:    .reg    %r4
-r5:    .reg    %r5
-r6:    .reg    %r6
-r7:    .reg    %r7
-r8:    .reg    %r8
-r9:    .reg    %r9
-r10:   .reg    %r10
-r11:   .reg    %r11
-r12:   .reg    %r12
-r13:   .reg    %r13
-r14:   .reg    %r14
-r15:   .reg    %r15
-r16:   .reg    %r16
-r17:   .reg    %r17
-r18:   .reg    %r18
-r19:   .reg    %r19
-r20:   .reg    %r20
-r21:   .reg    %r21
-r22:   .reg    %r22
-r23:   .reg    %r23
-r24:   .reg    %r24
-r25:   .reg    %r25
-r26:   .reg    %r26
-r27:   .reg    %r27
-r28:   .reg    %r28
-r29:   .reg    %r29
-r30:   .reg    %r30
-r31:   .reg    %r31
-
-/* Hardware Space Registers.  */
-sr0:   .reg    %sr0
-sr1:   .reg    %sr1
-sr2:   .reg    %sr2
-sr3:   .reg    %sr3
-sr4:   .reg    %sr4
-sr5:   .reg    %sr5
-sr6:   .reg    %sr6
-sr7:   .reg    %sr7
-
-/* Hardware Floating Point Registers.  */
-fr0:   .reg    %fr0
-fr1:   .reg    %fr1
-fr2:   .reg    %fr2
-fr3:   .reg    %fr3
-fr4:   .reg    %fr4
-fr5:   .reg    %fr5
-fr6:   .reg    %fr6
-fr7:   .reg    %fr7
-fr8:   .reg    %fr8
-fr9:   .reg    %fr9
-fr10:  .reg    %fr10
-fr11:  .reg    %fr11
-fr12:  .reg    %fr12
-fr13:  .reg    %fr13
-fr14:  .reg    %fr14
-fr15:  .reg    %fr15
-
-/* Hardware Control Registers.  */
-cr11:  .reg    %cr11
-sar:   .reg    %cr11   /* Shift Amount Register */
-
-/* Software Architecture General Registers.  */
-rp:    .reg    r2      /* return pointer */
-#ifdef CONFIG_64BIT
-mrp:   .reg    r2      /* millicode return pointer */
-#else
-mrp:   .reg    r31     /* millicode return pointer */
-#endif
-ret0:  .reg    r28     /* return value */
-ret1:  .reg    r29     /* return value (high part of double) */
-sp:    .reg    r30     /* stack pointer */
-dp:    .reg    r27     /* data pointer */
-arg0:  .reg    r26     /* argument */
-arg1:  .reg    r25     /* argument or high part of double argument */
-arg2:  .reg    r24     /* argument */
-arg3:  .reg    r23     /* argument or high part of double argument */
-
-/* Software Architecture Space Registers.  */
-/*             sr0     ; return link from BLE */
-sret:  .reg    sr1     /* return value */
-sarg:  .reg    sr1     /* argument */
-/*             sr4     ; PC SPACE tracker */
-/*             sr5     ; process private data */
-
-/* Frame Offsets (millicode convention!)  Used when calling other
-   millicode routines.  Stack unwinding is dependent upon these
-   definitions.  */
-r31_slot:      .equ    -20     /* "current RP" slot */
-sr0_slot:      .equ    -16     /* "static link" slot */
-#if defined(CONFIG_64BIT)
-mrp_slot:       .equ    -16    /* "current RP" slot */
-psp_slot:       .equ    -8     /* "previous SP" slot */
-#else
-mrp_slot:      .equ    -20     /* "current RP" slot (replacing "r31_slot") */
-#endif
-
-
-#define DEFINE(name,value)name:        .EQU    value
-#define RDEFINE(name,value)name:       .REG    value
-#ifdef milliext
-#define MILLI_BE(lbl)   BE    lbl(sr7,r0)
-#define MILLI_BEN(lbl)  BE,n  lbl(sr7,r0)
-#define MILLI_BLE(lbl) BLE   lbl(sr7,r0)
-#define MILLI_BLEN(lbl)        BLE,n lbl(sr7,r0)
-#define MILLIRETN      BE,n  0(sr0,mrp)
-#define MILLIRET       BE    0(sr0,mrp)
-#define MILLI_RETN     BE,n  0(sr0,mrp)
-#define MILLI_RET      BE    0(sr0,mrp)
-#else
-#define MILLI_BE(lbl)  B     lbl
-#define MILLI_BEN(lbl)  B,n   lbl
-#define MILLI_BLE(lbl) BL    lbl,mrp
-#define MILLI_BLEN(lbl)        BL,n  lbl,mrp
-#define MILLIRETN      BV,n  0(mrp)
-#define MILLIRET       BV    0(mrp)
-#define MILLI_RETN     BV,n  0(mrp)
-#define MILLI_RET      BV    0(mrp)
-#endif
-
-#define CAT(a,b)       a##b
-
-#define SUBSPA_MILLI    .section .text
-#define SUBSPA_MILLI_DIV .section .text.div,"ax",@progbits! .align 16
-#define SUBSPA_MILLI_MUL .section .text.mul,"ax",@progbits! .align 16
-#define ATTR_MILLI
-#define SUBSPA_DATA     .section .data
-#define ATTR_DATA
-#define GLOBAL          $global$
-#define GSYM(sym)       !sym:
-#define LSYM(sym)       !CAT(.L,sym:)
-#define LREF(sym)       CAT(.L,sym)
-
-#ifdef L_dyncall
-       SUBSPA_MILLI
-       ATTR_DATA
-GSYM($$dyncall)
-       .export $$dyncall,millicode
-       .proc
-       .callinfo       millicode
-       .entry
-       bb,>=,n %r22,30,LREF(1)         ; branch if not plabel address
-       depi    0,31,2,%r22             ; clear the two least significant bits
-       ldw     4(%r22),%r19            ; load new LTP value
-       ldw     0(%r22),%r22            ; load address of target
-LSYM(1)
-       bv      %r0(%r22)               ; branch to the real target
-       stw     %r2,-24(%r30)           ; save return address into frame marker
-       .exit
-       .procend
-#endif
-
-#ifdef L_divI
-/* ROUTINES:   $$divI, $$divoI
-
-   Single precision divide for signed binary integers.
-
-   The quotient is truncated towards zero.
-   The sign of the quotient is the XOR of the signs of the dividend and
-   divisor.
-   Divide by zero is trapped.
-   Divide of -2**31 by -1 is trapped for $$divoI but not for $$divI.
-
-   INPUT REGISTERS:
-   .   arg0 == dividend
-   .   arg1 == divisor
-   .   mrp  == return pc
-   .   sr0  == return space when called externally
-
-   OUTPUT REGISTERS:
-   .   arg0 =  undefined
-   .   arg1 =  undefined
-   .   ret1 =  quotient
-
-   OTHER REGISTERS AFFECTED:
-   .   r1   =  undefined
-
-   SIDE EFFECTS:
-   .   Causes a trap under the following conditions:
-   .           divisor is zero  (traps with ADDIT,=  0,25,0)
-   .           dividend==-2**31  and divisor==-1 and routine is $$divoI
-   .                            (traps with ADDO  26,25,0)
-   .   Changes memory at the following places:
-   .           NONE
-
-   PERMISSIBLE CONTEXT:
-   .   Unwindable.
-   .   Suitable for internal or external millicode.
-   .   Assumes the special millicode register conventions.
-
-   DISCUSSION:
-   .   Branchs to other millicode routines using BE
-   .           $$div_# for # being 2,3,4,5,6,7,8,9,10,12,14,15
-   .
-   .   For selected divisors, calls a divide by constant routine written by
-   .   Karl Pettis.  Eligible divisors are 1..15 excluding 11 and 13.
-   .
-   .   The only overflow case is -2**31 divided by -1.
-   .   Both routines return -2**31 but only $$divoI traps.  */
-
-RDEFINE(temp,r1)
-RDEFINE(retreg,ret1)   /*  r29 */
-RDEFINE(temp1,arg0)
-       SUBSPA_MILLI_DIV
-       ATTR_MILLI
-       .import $$divI_2,millicode
-       .import $$divI_3,millicode
-       .import $$divI_4,millicode
-       .import $$divI_5,millicode
-       .import $$divI_6,millicode
-       .import $$divI_7,millicode
-       .import $$divI_8,millicode
-       .import $$divI_9,millicode
-       .import $$divI_10,millicode
-       .import $$divI_12,millicode
-       .import $$divI_14,millicode
-       .import $$divI_15,millicode
-       .export $$divI,millicode
-       .export $$divoI,millicode
-       .proc
-       .callinfo       millicode
-       .entry
-GSYM($$divoI)
-       comib,=,n  -1,arg1,LREF(negative1)      /*  when divisor == -1 */
-GSYM($$divI)
-       ldo     -1(arg1),temp           /*  is there at most one bit set ? */
-       and,<>  arg1,temp,r0            /*  if not, don't use power of 2 divide */
-       addi,>  0,arg1,r0               /*  if divisor > 0, use power of 2 divide */
-       b,n     LREF(neg_denom)
-LSYM(pow2)
-       addi,>= 0,arg0,retreg           /*  if numerator is negative, add the */
-       add     arg0,temp,retreg        /*  (denominaotr -1) to correct for shifts */
-       extru,= arg1,15,16,temp         /*  test denominator with 0xffff0000 */
-       extrs   retreg,15,16,retreg     /*  retreg = retreg >> 16 */
-       or      arg1,temp,arg1          /*  arg1 = arg1 | (arg1 >> 16) */
-       ldi     0xcc,temp1              /*  setup 0xcc in temp1 */
-       extru,= arg1,23,8,temp          /*  test denominator with 0xff00 */
-       extrs   retreg,23,24,retreg     /*  retreg = retreg >> 8 */
-       or      arg1,temp,arg1          /*  arg1 = arg1 | (arg1 >> 8) */
-       ldi     0xaa,temp               /*  setup 0xaa in temp */
-       extru,= arg1,27,4,r0            /*  test denominator with 0xf0 */
-       extrs   retreg,27,28,retreg     /*  retreg = retreg >> 4 */
-       and,=   arg1,temp1,r0           /*  test denominator with 0xcc */
-       extrs   retreg,29,30,retreg     /*  retreg = retreg >> 2 */
-       and,=   arg1,temp,r0            /*  test denominator with 0xaa */
-       extrs   retreg,30,31,retreg     /*  retreg = retreg >> 1 */
-       MILLIRETN
-LSYM(neg_denom)
-       addi,<  0,arg1,r0               /*  if arg1 >= 0, it's not power of 2 */
-       b,n     LREF(regular_seq)
-       sub     r0,arg1,temp            /*  make denominator positive */
-       comb,=,n  arg1,temp,LREF(regular_seq)   /*  test against 0x80000000 and 0 */
-       ldo     -1(temp),retreg         /*  is there at most one bit set ? */
-       and,=   temp,retreg,r0          /*  if so, the denominator is power of 2 */
-       b,n     LREF(regular_seq)
-       sub     r0,arg0,retreg          /*  negate numerator */
-       comb,=,n arg0,retreg,LREF(regular_seq) /*  test against 0x80000000 */
-       copy    retreg,arg0             /*  set up arg0, arg1 and temp  */
-       copy    temp,arg1               /*  before branching to pow2 */
-       b       LREF(pow2)
-       ldo     -1(arg1),temp
-LSYM(regular_seq)
-       comib,>>=,n 15,arg1,LREF(small_divisor)
-       add,>=  0,arg0,retreg           /*  move dividend, if retreg < 0, */
-LSYM(normal)
-       subi    0,retreg,retreg         /*    make it positive */
-       sub     0,arg1,temp             /*  clear carry,  */
-                                       /*    negate the divisor */
-       ds      0,temp,0                /*  set V-bit to the comple- */
-                                       /*    ment of the divisor sign */
-       add     retreg,retreg,retreg    /*  shift msb bit into carry */
-       ds      r0,arg1,temp            /*  1st divide step, if no carry */
-       addc    retreg,retreg,retreg    /*  shift retreg with/into carry */
-       ds      temp,arg1,temp          /*  2nd divide step */
-       addc    retreg,retreg,retreg    /*  shift retreg with/into carry */
-       ds      temp,arg1,temp          /*  3rd divide step */
-       addc    retreg,retreg,retreg    /*  shift retreg with/into carry */
-       ds      temp,arg1,temp          /*  4th divide step */
-       addc    retreg,retreg,retreg    /*  shift retreg with/into carry */
-       ds      temp,arg1,temp          /*  5th divide step */
-       addc    retreg,retreg,retreg    /*  shift retreg with/into carry */
-       ds      temp,arg1,temp          /*  6th divide step */
-       addc    retreg,retreg,retreg    /*  shift retreg with/into carry */
-       ds      temp,arg1,temp          /*  7th divide step */
-       addc    retreg,retreg,retreg    /*  shift retreg with/into carry */
-       ds      temp,arg1,temp          /*  8th divide step */
-       addc    retreg,retreg,retreg    /*  shift retreg with/into carry */
-       ds      temp,arg1,temp          /*  9th divide step */
-       addc    retreg,retreg,retreg    /*  shift retreg with/into carry */
-       ds      temp,arg1,temp          /*  10th divide step */
-       addc    retreg,retreg,retreg    /*  shift retreg with/into carry */
-       ds      temp,arg1,temp          /*  11th divide step */
-       addc    retreg,retreg,retreg    /*  shift retreg with/into carry */
-       ds      temp,arg1,temp          /*  12th divide step */
-       addc    retreg,retreg,retreg    /*  shift retreg with/into carry */
-       ds      temp,arg1,temp          /*  13th divide step */
-       addc    retreg,retreg,retreg    /*  shift retreg with/into carry */
-       ds      temp,arg1,temp          /*  14th divide step */
-       addc    retreg,retreg,retreg    /*  shift retreg with/into carry */
-       ds      temp,arg1,temp          /*  15th divide step */
-       addc    retreg,retreg,retreg    /*  shift retreg with/into carry */
-       ds      temp,arg1,temp          /*  16th divide step */
-       addc    retreg,retreg,retreg    /*  shift retreg with/into carry */
-       ds      temp,arg1,temp          /*  17th divide step */
-       addc    retreg,retreg,retreg    /*  shift retreg with/into carry */
-       ds      temp,arg1,temp          /*  18th divide step */
-       addc    retreg,retreg,retreg    /*  shift retreg with/into carry */
-       ds      temp,arg1,temp          /*  19th divide step */
-       addc    retreg,retreg,retreg    /*  shift retreg with/into carry */
-       ds      temp,arg1,temp          /*  20th divide step */
-       addc    retreg,retreg,retreg    /*  shift retreg with/into carry */
-       ds      temp,arg1,temp          /*  21st divide step */
-       addc    retreg,retreg,retreg    /*  shift retreg with/into carry */
-       ds      temp,arg1,temp          /*  22nd divide step */
-       addc    retreg,retreg,retreg    /*  shift retreg with/into carry */
-       ds      temp,arg1,temp          /*  23rd divide step */
-       addc    retreg,retreg,retreg    /*  shift retreg with/into carry */
-       ds      temp,arg1,temp          /*  24th divide step */
-       addc    retreg,retreg,retreg    /*  shift retreg with/into carry */
-       ds      temp,arg1,temp          /*  25th divide step */
-       addc    retreg,retreg,retreg    /*  shift retreg with/into carry */
-       ds      temp,arg1,temp          /*  26th divide step */
-       addc    retreg,retreg,retreg    /*  shift retreg with/into carry */
-       ds      temp,arg1,temp          /*  27th divide step */
-       addc    retreg,retreg,retreg    /*  shift retreg with/into carry */
-       ds      temp,arg1,temp          /*  28th divide step */
-       addc    retreg,retreg,retreg    /*  shift retreg with/into carry */
-       ds      temp,arg1,temp          /*  29th divide step */
-       addc    retreg,retreg,retreg    /*  shift retreg with/into carry */
-       ds      temp,arg1,temp          /*  30th divide step */
-       addc    retreg,retreg,retreg    /*  shift retreg with/into carry */
-       ds      temp,arg1,temp          /*  31st divide step */
-       addc    retreg,retreg,retreg    /*  shift retreg with/into carry */
-       ds      temp,arg1,temp          /*  32nd divide step, */
-       addc    retreg,retreg,retreg    /*  shift last retreg bit into retreg */
-       xor,>=  arg0,arg1,0             /*  get correct sign of quotient */
-         sub   0,retreg,retreg         /*    based on operand signs */
-       MILLIRETN
-       nop
-
-LSYM(small_divisor)
-
-#if defined(CONFIG_64BIT)
-/*  Clear the upper 32 bits of the arg1 register.  We are working with */
-/*  small divisors (and 32-bit integers)   We must not be mislead  */
-/*  by "1" bits left in the upper 32 bits.  */
-       depd %r0,31,32,%r25
-#endif
-       blr,n   arg1,r0
-       nop
-/*  table for divisor == 0,1, ... ,15 */
-       addit,= 0,arg1,r0       /*  trap if divisor == 0 */
-       nop
-       MILLIRET                /*  divisor == 1 */
-       copy    arg0,retreg
-       MILLI_BEN($$divI_2)     /*  divisor == 2 */
-       nop
-       MILLI_BEN($$divI_3)     /*  divisor == 3 */
-       nop
-       MILLI_BEN($$divI_4)     /*  divisor == 4 */
-       nop
-       MILLI_BEN($$divI_5)     /*  divisor == 5 */
-       nop
-       MILLI_BEN($$divI_6)     /*  divisor == 6 */
-       nop
-       MILLI_BEN($$divI_7)     /*  divisor == 7 */
-       nop
-       MILLI_BEN($$divI_8)     /*  divisor == 8 */
-       nop
-       MILLI_BEN($$divI_9)     /*  divisor == 9 */
-       nop
-       MILLI_BEN($$divI_10)    /*  divisor == 10 */
-       nop
-       b       LREF(normal)            /*  divisor == 11 */
-       add,>=  0,arg0,retreg
-       MILLI_BEN($$divI_12)    /*  divisor == 12 */
-       nop
-       b       LREF(normal)            /*  divisor == 13 */
-       add,>=  0,arg0,retreg
-       MILLI_BEN($$divI_14)    /*  divisor == 14 */
-       nop
-       MILLI_BEN($$divI_15)    /*  divisor == 15 */
-       nop
-
-LSYM(negative1)
-       sub     0,arg0,retreg   /*  result is negation of dividend */
-       MILLIRET
-       addo    arg0,arg1,r0    /*  trap iff dividend==0x80000000 && divisor==-1 */
-       .exit
-       .procend
-       .end
-#endif
-
-#ifdef L_divU
-/* ROUTINE:    $$divU
-   .
-   .   Single precision divide for unsigned integers.
-   .
-   .   Quotient is truncated towards zero.
-   .   Traps on divide by zero.
-
-   INPUT REGISTERS:
-   .   arg0 == dividend
-   .   arg1 == divisor
-   .   mrp  == return pc
-   .   sr0  == return space when called externally
-
-   OUTPUT REGISTERS:
-   .   arg0 =  undefined
-   .   arg1 =  undefined
-   .   ret1 =  quotient
-
-   OTHER REGISTERS AFFECTED:
-   .   r1   =  undefined
-
-   SIDE EFFECTS:
-   .   Causes a trap under the following conditions:
-   .           divisor is zero
-   .   Changes memory at the following places:
-   .           NONE
-
-   PERMISSIBLE CONTEXT:
-   .   Unwindable.
-   .   Does not create a stack frame.
-   .   Suitable for internal or external millicode.
-   .   Assumes the special millicode register conventions.
-
-   DISCUSSION:
-   .   Branchs to other millicode routines using BE:
-   .           $$divU_# for 3,5,6,7,9,10,12,14,15
-   .
-   .   For selected small divisors calls the special divide by constant
-   .   routines written by Karl Pettis.  These are: 3,5,6,7,9,10,12,14,15.  */
-
-RDEFINE(temp,r1)
-RDEFINE(retreg,ret1)   /* r29 */
-RDEFINE(temp1,arg0)
-       SUBSPA_MILLI_DIV
-       ATTR_MILLI
-       .export $$divU,millicode
-       .import $$divU_3,millicode
-       .import $$divU_5,millicode
-       .import $$divU_6,millicode
-       .import $$divU_7,millicode
-       .import $$divU_9,millicode
-       .import $$divU_10,millicode
-       .import $$divU_12,millicode
-       .import $$divU_14,millicode
-       .import $$divU_15,millicode
-       .proc
-       .callinfo       millicode
-       .entry
-GSYM($$divU)
-/* The subtract is not nullified since it does no harm and can be used
-   by the two cases that branch back to "normal".  */
-       ldo     -1(arg1),temp           /* is there at most one bit set ? */
-       and,=   arg1,temp,r0            /* if so, denominator is power of 2 */
-       b       LREF(regular_seq)
-       addit,= 0,arg1,0                /* trap for zero dvr */
-       copy    arg0,retreg
-       extru,= arg1,15,16,temp         /* test denominator with 0xffff0000 */
-       extru   retreg,15,16,retreg     /* retreg = retreg >> 16 */
-       or      arg1,temp,arg1          /* arg1 = arg1 | (arg1 >> 16) */
-       ldi     0xcc,temp1              /* setup 0xcc in temp1 */
-       extru,= arg1,23,8,temp          /* test denominator with 0xff00 */
-       extru   retreg,23,24,retreg     /* retreg = retreg >> 8 */
-       or      arg1,temp,arg1          /* arg1 = arg1 | (arg1 >> 8) */
-       ldi     0xaa,temp               /* setup 0xaa in temp */
-       extru,= arg1,27,4,r0            /* test denominator with 0xf0 */
-       extru   retreg,27,28,retreg     /* retreg = retreg >> 4 */
-       and,=   arg1,temp1,r0           /* test denominator with 0xcc */
-       extru   retreg,29,30,retreg     /* retreg = retreg >> 2 */
-       and,=   arg1,temp,r0            /* test denominator with 0xaa */
-       extru   retreg,30,31,retreg     /* retreg = retreg >> 1 */
-       MILLIRETN
-       nop     
-LSYM(regular_seq)
-       comib,>=  15,arg1,LREF(special_divisor)
-       subi    0,arg1,temp             /* clear carry, negate the divisor */
-       ds      r0,temp,r0              /* set V-bit to 1 */
-LSYM(normal)
-       add     arg0,arg0,retreg        /* shift msb bit into carry */
-       ds      r0,arg1,temp            /* 1st divide step, if no carry */
-       addc    retreg,retreg,retreg    /* shift retreg with/into carry */
-       ds      temp,arg1,temp          /* 2nd divide step */
-       addc    retreg,retreg,retreg    /* shift retreg with/into carry */
-       ds      temp,arg1,temp          /* 3rd divide step */
-       addc    retreg,retreg,retreg    /* shift retreg with/into carry */
-       ds      temp,arg1,temp          /* 4th divide step */
-       addc    retreg,retreg,retreg    /* shift retreg with/into carry */
-       ds      temp,arg1,temp          /* 5th divide step */
-       addc    retreg,retreg,retreg    /* shift retreg with/into carry */
-       ds      temp,arg1,temp          /* 6th divide step */
-       addc    retreg,retreg,retreg    /* shift retreg with/into carry */
-       ds      temp,arg1,temp          /* 7th divide step */
-       addc    retreg,retreg,retreg    /* shift retreg with/into carry */
-       ds      temp,arg1,temp          /* 8th divide step */
-       addc    retreg,retreg,retreg    /* shift retreg with/into carry */
-       ds      temp,arg1,temp          /* 9th divide step */
-       addc    retreg,retreg,retreg    /* shift retreg with/into carry */
-       ds      temp,arg1,temp          /* 10th divide step */
-       addc    retreg,retreg,retreg    /* shift retreg with/into carry */
-       ds      temp,arg1,temp          /* 11th divide step */
-       addc    retreg,retreg,retreg    /* shift retreg with/into carry */
-       ds      temp,arg1,temp          /* 12th divide step */
-       addc    retreg,retreg,retreg    /* shift retreg with/into carry */
-       ds      temp,arg1,temp          /* 13th divide step */
-       addc    retreg,retreg,retreg    /* shift retreg with/into carry */
-       ds      temp,arg1,temp          /* 14th divide step */
-       addc    retreg,retreg,retreg    /* shift retreg with/into carry */
-       ds      temp,arg1,temp          /* 15th divide step */
-       addc    retreg,retreg,retreg    /* shift retreg with/into carry */
-       ds      temp,arg1,temp          /* 16th divide step */
-       addc    retreg,retreg,retreg    /* shift retreg with/into carry */
-       ds      temp,arg1,temp          /* 17th divide step */
-       addc    retreg,retreg,retreg    /* shift retreg with/into carry */
-       ds      temp,arg1,temp          /* 18th divide step */
-       addc    retreg,retreg,retreg    /* shift retreg with/into carry */
-       ds      temp,arg1,temp          /* 19th divide step */
-       addc    retreg,retreg,retreg    /* shift retreg with/into carry */
-       ds      temp,arg1,temp          /* 20th divide step */
-       addc    retreg,retreg,retreg    /* shift retreg with/into carry */
-       ds      temp,arg1,temp          /* 21st divide step */
-       addc    retreg,retreg,retreg    /* shift retreg with/into carry */
-       ds      temp,arg1,temp          /* 22nd divide step */
-       addc    retreg,retreg,retreg    /* shift retreg with/into carry */
-       ds      temp,arg1,temp          /* 23rd divide step */
-       addc    retreg,retreg,retreg    /* shift retreg with/into carry */
-       ds      temp,arg1,temp          /* 24th divide step */
-       addc    retreg,retreg,retreg    /* shift retreg with/into carry */
-       ds      temp,arg1,temp          /* 25th divide step */
-       addc    retreg,retreg,retreg    /* shift retreg with/into carry */
-       ds      temp,arg1,temp          /* 26th divide step */
-       addc    retreg,retreg,retreg    /* shift retreg with/into carry */
-       ds      temp,arg1,temp          /* 27th divide step */
-       addc    retreg,retreg,retreg    /* shift retreg with/into carry */
-       ds      temp,arg1,temp          /* 28th divide step */
-       addc    retreg,retreg,retreg    /* shift retreg with/into carry */
-       ds      temp,arg1,temp          /* 29th divide step */
-       addc    retreg,retreg,retreg    /* shift retreg with/into carry */
-       ds      temp,arg1,temp          /* 30th divide step */
-       addc    retreg,retreg,retreg    /* shift retreg with/into carry */
-       ds      temp,arg1,temp          /* 31st divide step */
-       addc    retreg,retreg,retreg    /* shift retreg with/into carry */
-       ds      temp,arg1,temp          /* 32nd divide step, */
-       MILLIRET
-       addc    retreg,retreg,retreg    /* shift last retreg bit into retreg */
-
-/* Handle the cases where divisor is a small constant or has high bit on.  */
-LSYM(special_divisor)
-/*     blr     arg1,r0 */
-/*     comib,>,n  0,arg1,LREF(big_divisor) ; nullify previous instruction */
-
-/* Pratap 8/13/90. The 815 Stirling chip set has a bug that prevents us from
-   generating such a blr, comib sequence. A problem in nullification. So I
-   rewrote this code.  */
-
-#if defined(CONFIG_64BIT)
-/* Clear the upper 32 bits of the arg1 register.  We are working with
-   small divisors (and 32-bit unsigned integers)   We must not be mislead
-   by "1" bits left in the upper 32 bits.  */
-       depd %r0,31,32,%r25
-#endif
-       comib,> 0,arg1,LREF(big_divisor)
-       nop
-       blr     arg1,r0
-       nop
-
-LSYM(zero_divisor)     /* this label is here to provide external visibility */
-       addit,= 0,arg1,0                /* trap for zero dvr */
-       nop
-       MILLIRET                        /* divisor == 1 */
-       copy    arg0,retreg
-       MILLIRET                        /* divisor == 2 */
-       extru   arg0,30,31,retreg
-       MILLI_BEN($$divU_3)             /* divisor == 3 */
-       nop
-       MILLIRET                        /* divisor == 4 */
-       extru   arg0,29,30,retreg
-       MILLI_BEN($$divU_5)             /* divisor == 5 */
-       nop
-       MILLI_BEN($$divU_6)             /* divisor == 6 */
-       nop
-       MILLI_BEN($$divU_7)             /* divisor == 7 */
-       nop
-       MILLIRET                        /* divisor == 8 */
-       extru   arg0,28,29,retreg
-       MILLI_BEN($$divU_9)             /* divisor == 9 */
-       nop
-       MILLI_BEN($$divU_10)            /* divisor == 10 */
-       nop
-       b       LREF(normal)            /* divisor == 11 */
-       ds      r0,temp,r0              /* set V-bit to 1 */
-       MILLI_BEN($$divU_12)            /* divisor == 12 */
-       nop
-       b       LREF(normal)            /* divisor == 13 */
-       ds      r0,temp,r0              /* set V-bit to 1 */
-       MILLI_BEN($$divU_14)            /* divisor == 14 */
-       nop
-       MILLI_BEN($$divU_15)            /* divisor == 15 */
-       nop
-
-/* Handle the case where the high bit is on in the divisor.
-   Compute:    if( dividend>=divisor) quotient=1; else quotient=0;
-   Note:       dividend>==divisor iff dividend-divisor does not borrow
-   and         not borrow iff carry.  */
-LSYM(big_divisor)
-       sub     arg0,arg1,r0
-       MILLIRET
-       addc    r0,r0,retreg
-       .exit
-       .procend
-       .end
-#endif
-
-#ifdef L_remI
-/* ROUTINE:    $$remI
-
-   DESCRIPTION:
-   .   $$remI returns the remainder of the division of two signed 32-bit
-   .   integers.  The sign of the remainder is the same as the sign of
-   .   the dividend.
-
-
-   INPUT REGISTERS:
-   .   arg0 == dividend
-   .   arg1 == divisor
-   .   mrp  == return pc
-   .   sr0  == return space when called externally
-
-   OUTPUT REGISTERS:
-   .   arg0 = destroyed
-   .   arg1 = destroyed
-   .   ret1 = remainder
-
-   OTHER REGISTERS AFFECTED:
-   .   r1   = undefined
-
-   SIDE EFFECTS:
-   .   Causes a trap under the following conditions:  DIVIDE BY ZERO
-   .   Changes memory at the following places:  NONE
-
-   PERMISSIBLE CONTEXT:
-   .   Unwindable
-   .   Does not create a stack frame
-   .   Is usable for internal or external microcode
-
-   DISCUSSION:
-   .   Calls other millicode routines via mrp:  NONE
-   .   Calls other millicode routines:  NONE  */
-
-RDEFINE(tmp,r1)
-RDEFINE(retreg,ret1)
-
-       SUBSPA_MILLI
-       ATTR_MILLI
-       .proc
-       .callinfo millicode
-       .entry
-GSYM($$remI)
-GSYM($$remoI)
-       .export $$remI,MILLICODE
-       .export $$remoI,MILLICODE
-       ldo             -1(arg1),tmp            /*  is there at most one bit set ? */
-       and,<>          arg1,tmp,r0             /*  if not, don't use power of 2 */
-       addi,>          0,arg1,r0               /*  if denominator > 0, use power */
-                                               /*  of 2 */
-       b,n             LREF(neg_denom)
-LSYM(pow2)
-       comb,>,n        0,arg0,LREF(neg_num)    /*  is numerator < 0 ? */
-       and             arg0,tmp,retreg         /*  get the result */
-       MILLIRETN
-LSYM(neg_num)
-       subi            0,arg0,arg0             /*  negate numerator */
-       and             arg0,tmp,retreg         /*  get the result */
-       subi            0,retreg,retreg         /*  negate result */
-       MILLIRETN
-LSYM(neg_denom)
-       addi,<          0,arg1,r0               /*  if arg1 >= 0, it's not power */
-                                               /*  of 2 */
-       b,n             LREF(regular_seq)
-       sub             r0,arg1,tmp             /*  make denominator positive */
-       comb,=,n        arg1,tmp,LREF(regular_seq) /*  test against 0x80000000 and 0 */
-       ldo             -1(tmp),retreg          /*  is there at most one bit set ? */
-       and,=           tmp,retreg,r0           /*  if not, go to regular_seq */
-       b,n             LREF(regular_seq)
-       comb,>,n        0,arg0,LREF(neg_num_2)  /*  if arg0 < 0, negate it  */
-       and             arg0,retreg,retreg
-       MILLIRETN
-LSYM(neg_num_2)
-       subi            0,arg0,tmp              /*  test against 0x80000000 */
-       and             tmp,retreg,retreg
-       subi            0,retreg,retreg
-       MILLIRETN
-LSYM(regular_seq)
-       addit,=         0,arg1,0                /*  trap if div by zero */
-       add,>=          0,arg0,retreg           /*  move dividend, if retreg < 0, */
-       sub             0,retreg,retreg         /*    make it positive */
-       sub             0,arg1, tmp             /*  clear carry,  */
-                                               /*    negate the divisor */
-       ds              0, tmp,0                /*  set V-bit to the comple- */
-                                               /*    ment of the divisor sign */
-       or              0,0, tmp                /*  clear  tmp */
-       add             retreg,retreg,retreg    /*  shift msb bit into carry */
-       ds               tmp,arg1, tmp          /*  1st divide step, if no carry */
-                                               /*    out, msb of quotient = 0 */
-       addc            retreg,retreg,retreg    /*  shift retreg with/into carry */
-LSYM(t1)
-       ds               tmp,arg1, tmp          /*  2nd divide step */
-       addc            retreg,retreg,retreg    /*  shift retreg with/into carry */
-       ds               tmp,arg1, tmp          /*  3rd divide step */
-       addc            retreg,retreg,retreg    /*  shift retreg with/into carry */
-       ds               tmp,arg1, tmp          /*  4th divide step */
-       addc            retreg,retreg,retreg    /*  shift retreg with/into carry */
-       ds               tmp,arg1, tmp          /*  5th divide step */
-       addc            retreg,retreg,retreg    /*  shift retreg with/into carry */
-       ds               tmp,arg1, tmp          /*  6th divide step */
-       addc            retreg,retreg,retreg    /*  shift retreg with/into carry */
-       ds               tmp,arg1, tmp          /*  7th divide step */
-       addc            retreg,retreg,retreg    /*  shift retreg with/into carry */
-       ds               tmp,arg1, tmp          /*  8th divide step */
-       addc            retreg,retreg,retreg    /*  shift retreg with/into carry */
-       ds               tmp,arg1, tmp          /*  9th divide step */
-       addc            retreg,retreg,retreg    /*  shift retreg with/into carry */
-       ds               tmp,arg1, tmp          /*  10th divide step */
-       addc            retreg,retreg,retreg    /*  shift retreg with/into carry */
-       ds               tmp,arg1, tmp          /*  11th divide step */
-       addc            retreg,retreg,retreg    /*  shift retreg with/into carry */
-       ds               tmp,arg1, tmp          /*  12th divide step */
-       addc            retreg,retreg,retreg    /*  shift retreg with/into carry */
-       ds               tmp,arg1, tmp          /*  13th divide step */
-       addc            retreg,retreg,retreg    /*  shift retreg with/into carry */
-       ds               tmp,arg1, tmp          /*  14th divide step */
-       addc            retreg,retreg,retreg    /*  shift retreg with/into carry */
-       ds               tmp,arg1, tmp          /*  15th divide step */
-       addc            retreg,retreg,retreg    /*  shift retreg with/into carry */
-       ds               tmp,arg1, tmp          /*  16th divide step */
-       addc            retreg,retreg,retreg    /*  shift retreg with/into carry */
-       ds               tmp,arg1, tmp          /*  17th divide step */
-       addc            retreg,retreg,retreg    /*  shift retreg with/into carry */
-       ds               tmp,arg1, tmp          /*  18th divide step */
-       addc            retreg,retreg,retreg    /*  shift retreg with/into carry */
-       ds               tmp,arg1, tmp          /*  19th divide step */
-       addc            retreg,retreg,retreg    /*  shift retreg with/into carry */
-       ds               tmp,arg1, tmp          /*  20th divide step */
-       addc            retreg,retreg,retreg    /*  shift retreg with/into carry */
-       ds               tmp,arg1, tmp          /*  21st divide step */
-       addc            retreg,retreg,retreg    /*  shift retreg with/into carry */
-       ds               tmp,arg1, tmp          /*  22nd divide step */
-       addc            retreg,retreg,retreg    /*  shift retreg with/into carry */
-       ds               tmp,arg1, tmp          /*  23rd divide step */
-       addc            retreg,retreg,retreg    /*  shift retreg with/into carry */
-       ds               tmp,arg1, tmp          /*  24th divide step */
-       addc            retreg,retreg,retreg    /*  shift retreg with/into carry */
-       ds               tmp,arg1, tmp          /*  25th divide step */
-       addc            retreg,retreg,retreg    /*  shift retreg with/into carry */
-       ds               tmp,arg1, tmp          /*  26th divide step */
-       addc            retreg,retreg,retreg    /*  shift retreg with/into carry */
-       ds               tmp,arg1, tmp          /*  27th divide step */
-       addc            retreg,retreg,retreg    /*  shift retreg with/into carry */
-       ds               tmp,arg1, tmp          /*  28th divide step */
-       addc            retreg,retreg,retreg    /*  shift retreg with/into carry */
-       ds               tmp,arg1, tmp          /*  29th divide step */
-       addc            retreg,retreg,retreg    /*  shift retreg with/into carry */
-       ds               tmp,arg1, tmp          /*  30th divide step */
-       addc            retreg,retreg,retreg    /*  shift retreg with/into carry */
-       ds               tmp,arg1, tmp          /*  31st divide step */
-       addc            retreg,retreg,retreg    /*  shift retreg with/into carry */
-       ds               tmp,arg1, tmp          /*  32nd divide step, */
-       addc            retreg,retreg,retreg    /*  shift last bit into retreg */
-       movb,>=,n        tmp,retreg,LREF(finish) /*  branch if pos.  tmp */
-       add,<           arg1,0,0                /*  if arg1 > 0, add arg1 */
-       add,tr           tmp,arg1,retreg        /*    for correcting remainder tmp */
-       sub              tmp,arg1,retreg        /*  else add absolute value arg1 */
-LSYM(finish)
-       add,>=          arg0,0,0                /*  set sign of remainder */
-       sub             0,retreg,retreg         /*    to sign of dividend */
-       MILLIRET
-       nop
-       .exit
-       .procend
-#ifdef milliext
-       .origin 0x00000200
-#endif
-       .end
-#endif
-
-#ifdef L_remU
-/* ROUTINE:    $$remU
-   .   Single precision divide for remainder with unsigned binary integers.
-   .
-   .   The remainder must be dividend-(dividend/divisor)*divisor.
-   .   Divide by zero is trapped.
-
-   INPUT REGISTERS:
-   .   arg0 == dividend
-   .   arg1 == divisor
-   .   mrp  == return pc
-   .   sr0  == return space when called externally
-
-   OUTPUT REGISTERS:
-   .   arg0 =  undefined
-   .   arg1 =  undefined
-   .   ret1 =  remainder
-
-   OTHER REGISTERS AFFECTED:
-   .   r1   =  undefined
-
-   SIDE EFFECTS:
-   .   Causes a trap under the following conditions:  DIVIDE BY ZERO
-   .   Changes memory at the following places:  NONE
-
-   PERMISSIBLE CONTEXT:
-   .   Unwindable.
-   .   Does not create a stack frame.
-   .   Suitable for internal or external millicode.
-   .   Assumes the special millicode register conventions.
-
-   DISCUSSION:
-   .   Calls other millicode routines using mrp: NONE
-   .   Calls other millicode routines: NONE  */
-
-
-RDEFINE(temp,r1)
-RDEFINE(rmndr,ret1)    /*  r29 */
-       SUBSPA_MILLI
-       ATTR_MILLI
-       .export $$remU,millicode
-       .proc
-       .callinfo       millicode
-       .entry
-GSYM($$remU)
-       ldo     -1(arg1),temp           /*  is there at most one bit set ? */
-       and,=   arg1,temp,r0            /*  if not, don't use power of 2 */
-       b       LREF(regular_seq)
-       addit,= 0,arg1,r0               /*  trap on div by zero */
-       and     arg0,temp,rmndr         /*  get the result for power of 2 */
-       MILLIRETN
-LSYM(regular_seq)
-       comib,>=,n  0,arg1,LREF(special_case)
-       subi    0,arg1,rmndr            /*  clear carry, negate the divisor */
-       ds      r0,rmndr,r0             /*  set V-bit to 1 */
-       add     arg0,arg0,temp          /*  shift msb bit into carry */
-       ds      r0,arg1,rmndr           /*  1st divide step, if no carry */
-       addc    temp,temp,temp          /*  shift temp with/into carry */
-       ds      rmndr,arg1,rmndr                /*  2nd divide step */
-       addc    temp,temp,temp          /*  shift temp with/into carry */
-       ds      rmndr,arg1,rmndr                /*  3rd divide step */
-       addc    temp,temp,temp          /*  shift temp with/into carry */
-       ds      rmndr,arg1,rmndr                /*  4th divide step */
-       addc    temp,temp,temp          /*  shift temp with/into carry */
-       ds      rmndr,arg1,rmndr                /*  5th divide step */
-       addc    temp,temp,temp          /*  shift temp with/into carry */
-       ds      rmndr,arg1,rmndr                /*  6th divide step */
-       addc    temp,temp,temp          /*  shift temp with/into carry */
-       ds      rmndr,arg1,rmndr                /*  7th divide step */
-       addc    temp,temp,temp          /*  shift temp with/into carry */
-       ds      rmndr,arg1,rmndr                /*  8th divide step */
-       addc    temp,temp,temp          /*  shift temp with/into carry */
-       ds      rmndr,arg1,rmndr                /*  9th divide step */
-       addc    temp,temp,temp          /*  shift temp with/into carry */
-       ds      rmndr,arg1,rmndr                /*  10th divide step */
-       addc    temp,temp,temp          /*  shift temp with/into carry */
-       ds      rmndr,arg1,rmndr                /*  11th divide step */
-       addc    temp,temp,temp          /*  shift temp with/into carry */
-       ds      rmndr,arg1,rmndr                /*  12th divide step */
-       addc    temp,temp,temp          /*  shift temp with/into carry */
-       ds      rmndr,arg1,rmndr                /*  13th divide step */
-       addc    temp,temp,temp          /*  shift temp with/into carry */
-       ds      rmndr,arg1,rmndr                /*  14th divide step */
-       addc    temp,temp,temp          /*  shift temp with/into carry */
-       ds      rmndr,arg1,rmndr                /*  15th divide step */
-       addc    temp,temp,temp          /*  shift temp with/into carry */
-       ds      rmndr,arg1,rmndr                /*  16th divide step */
-       addc    temp,temp,temp          /*  shift temp with/into carry */
-       ds      rmndr,arg1,rmndr                /*  17th divide step */
-       addc    temp,temp,temp          /*  shift temp with/into carry */
-       ds      rmndr,arg1,rmndr                /*  18th divide step */
-       addc    temp,temp,temp          /*  shift temp with/into carry */
-       ds      rmndr,arg1,rmndr                /*  19th divide step */
-       addc    temp,temp,temp          /*  shift temp with/into carry */
-       ds      rmndr,arg1,rmndr                /*  20th divide step */
-       addc    temp,temp,temp          /*  shift temp with/into carry */
-       ds      rmndr,arg1,rmndr                /*  21st divide step */
-       addc    temp,temp,temp          /*  shift temp with/into carry */
-       ds      rmndr,arg1,rmndr                /*  22nd divide step */
-       addc    temp,temp,temp          /*  shift temp with/into carry */
-       ds      rmndr,arg1,rmndr                /*  23rd divide step */
-       addc    temp,temp,temp          /*  shift temp with/into carry */
-       ds      rmndr,arg1,rmndr                /*  24th divide step */
-       addc    temp,temp,temp          /*  shift temp with/into carry */
-       ds      rmndr,arg1,rmndr                /*  25th divide step */
-       addc    temp,temp,temp          /*  shift temp with/into carry */
-       ds      rmndr,arg1,rmndr                /*  26th divide step */
-       addc    temp,temp,temp          /*  shift temp with/into carry */
-       ds      rmndr,arg1,rmndr                /*  27th divide step */
-       addc    temp,temp,temp          /*  shift temp with/into carry */
-       ds      rmndr,arg1,rmndr                /*  28th divide step */
-       addc    temp,temp,temp          /*  shift temp with/into carry */
-       ds      rmndr,arg1,rmndr                /*  29th divide step */
-       addc    temp,temp,temp          /*  shift temp with/into carry */
-       ds      rmndr,arg1,rmndr                /*  30th divide step */
-       addc    temp,temp,temp          /*  shift temp with/into carry */
-       ds      rmndr,arg1,rmndr                /*  31st divide step */
-       addc    temp,temp,temp          /*  shift temp with/into carry */
-       ds      rmndr,arg1,rmndr                /*  32nd divide step, */
-       comiclr,<= 0,rmndr,r0
-         add   rmndr,arg1,rmndr        /*  correction */
-       MILLIRETN
-       nop
-
-/* Putting >= on the last DS and deleting COMICLR does not work!  */
-LSYM(special_case)
-       sub,>>= arg0,arg1,rmndr
-         copy  arg0,rmndr
-       MILLIRETN
-       nop
-       .exit
-       .procend
-       .end
-#endif
-
-#ifdef L_div_const
-/* ROUTINE:    $$divI_2
-   .           $$divI_3        $$divU_3
-   .           $$divI_4
-   .           $$divI_5        $$divU_5
-   .           $$divI_6        $$divU_6
-   .           $$divI_7        $$divU_7
-   .           $$divI_8
-   .           $$divI_9        $$divU_9
-   .           $$divI_10       $$divU_10
-   .
-   .           $$divI_12       $$divU_12
-   .
-   .           $$divI_14       $$divU_14
-   .           $$divI_15       $$divU_15
-   .           $$divI_16
-   .           $$divI_17       $$divU_17
-   .
-   .   Divide by selected constants for single precision binary integers.
-
-   INPUT REGISTERS:
-   .   arg0 == dividend
-   .   mrp  == return pc
-   .   sr0  == return space when called externally
-
-   OUTPUT REGISTERS:
-   .   arg0 =  undefined
-   .   arg1 =  undefined
-   .   ret1 =  quotient
-
-   OTHER REGISTERS AFFECTED:
-   .   r1   =  undefined
-
-   SIDE EFFECTS:
-   .   Causes a trap under the following conditions: NONE
-   .   Changes memory at the following places:  NONE
-
-   PERMISSIBLE CONTEXT:
-   .   Unwindable.
-   .   Does not create a stack frame.
-   .   Suitable for internal or external millicode.
-   .   Assumes the special millicode register conventions.
-
-   DISCUSSION:
-   .   Calls other millicode routines using mrp:  NONE
-   .   Calls other millicode routines:  NONE  */
-
-
-/* TRUNCATED DIVISION BY SMALL INTEGERS
-
-   We are interested in q(x) = floor(x/y), where x >= 0 and y > 0
-   (with y fixed).
-
-   Let a = floor(z/y), for some choice of z.  Note that z will be
-   chosen so that division by z is cheap.
-
-   Let r be the remainder(z/y).  In other words, r = z - ay.
-
-   Now, our method is to choose a value for b such that
-
-   q'(x) = floor((ax+b)/z)
-
-   is equal to q(x) over as large a range of x as possible.  If the
-   two are equal over a sufficiently large range, and if it is easy to
-   form the product (ax), and it is easy to divide by z, then we can
-   perform the division much faster than the general division algorithm.
-
-   So, we want the following to be true:
-
-   .   For x in the following range:
-   .
-   .       ky <= x < (k+1)y
-   .
-   .   implies that
-   .
-   .       k <= (ax+b)/z < (k+1)
-
-   We want to determine b such that this is true for all k in the
-   range {0..K} for some maximum K.
-
-   Since (ax+b) is an increasing function of x, we can take each
-   bound separately to determine the "best" value for b.
-
-   (ax+b)/z < (k+1)           implies
-
-   (a((k+1)y-1)+b < (k+1)z     implies
-
-   b < a + (k+1)(z-ay)        implies
-
-   b < a + (k+1)r
-
-   This needs to be true for all k in the range {0..K}.  In
-   particular, it is true for k = 0 and this leads to a maximum
-   acceptable value for b.
-
-   b < a+r   or   b <= a+r-1
-
-   Taking the other bound, we have
-
-   k <= (ax+b)/z              implies
-
-   k <= (aky+b)/z             implies
-
-   k(z-ay) <= b                       implies
-
-   kr <= b
-
-   Clearly, the largest range for k will be achieved by maximizing b,
-   when r is not zero. When r is zero, then the simplest choice for b
-   is 0.  When r is not 0, set
-
-   .   b = a+r-1
-
-   Now, by construction, q'(x) = floor((ax+b)/z) = q(x) = floor(x/y)
-   for all x in the range:
-
-   .   0 <= x < (K+1)y
-
-   We need to determine what K is.  Of our two bounds,
-
-   .   b < a+(k+1)r    is satisfied for all k >= 0, by construction.
-
-   The other bound is
-
-   .   kr <= b
-
-   This is always true if r = 0.  If r is not 0 (the usual case), then
-   K = floor((a+r-1)/r), is the maximum value for k.
-
-   Therefore, the formula q'(x) = floor((ax+b)/z) yields the correct
-   answer for q(x) = floor(x/y) when x is in the range
-
-   (0,(K+1)y-1)               K = floor((a+r-1)/r)
-
-   To be most useful, we want (K+1)y-1 = (max x) >= 2**32-1 so that
-   the formula for q'(x) yields the correct value of q(x) for all x
-   representable by a single word in HPPA.
-
-   We are also constrained in that computing the product (ax), adding
-   b, and dividing by z must all be done quickly, otherwise we will be
-   better off going through the general algorithm using the DS
-   instruction, which uses approximately 70 cycles.
-
-   For each y, there is a choice of z which satisfies the constraints
-   for (K+1)y >= 2**32.  We may not, however, be able to satisfy the
-   timing constraints for arbitrary y. It seems that z being equal to
-   a power of 2 or a power of 2 minus 1 is as good as we can do, since
-   it minimizes the time to do division by z.  We want the choice of z
-   to also result in a value for (a) that minimizes the computation of
-   the product (ax).  This is best achieved if (a) has a regular bit
-   pattern (so the multiplication can be done with shifts and adds).
-   The value of (a) also needs to be less than 2**32 so the product is
-   always guaranteed to fit in 2 words.
-
-   In actual practice, the following should be done:
-
-   1) For negative x, you should take the absolute value and remember
-   .  the fact so that the result can be negated.  This obviously does
-   .  not apply in the unsigned case.
-   2) For even y, you should factor out the power of 2 that divides y
-   .  and divide x by it.  You can then proceed by dividing by the
-   .  odd factor of y.
-
-   Here is a table of some odd values of y, and corresponding choices
-   for z which are "good".
-
-    y    z       r      a (hex)     max x (hex)
-
-    3  2**32     1     55555555      100000001
-    5  2**32     1     33333333      100000003
-    7  2**24-1   0       249249     (infinite)
-    9  2**24-1   0       1c71c7     (infinite)
-   11  2**20-1   0        1745d     (infinite)
-   13  2**24-1   0       13b13b     (infinite)
-   15  2**32     1     11111111      10000000d
-   17  2**32     1      f0f0f0f      10000000f
-
-   If r is 1, then b = a+r-1 = a.  This simplifies the computation
-   of (ax+b), since you can compute (x+1)(a) instead.  If r is 0,
-   then b = 0 is ok to use which simplifies (ax+b).
-
-   The bit patterns for 55555555, 33333333, and 11111111 are obviously
-   very regular.  The bit patterns for the other values of a above are:
-
-    y     (hex)          (binary)
-
-    7    249249  001001001001001001001001  << regular >>
-    9    1c71c7  000111000111000111000111  << regular >>
-   11     1745d  000000010111010001011101  << irregular >>
-   13    13b13b  000100111011000100111011  << irregular >>
-
-   The bit patterns for (a) corresponding to (y) of 11 and 13 may be
-   too irregular to warrant using this method.
-
-   When z is a power of 2 minus 1, then the division by z is slightly
-   more complicated, involving an iterative solution.
-
-   The code presented here solves division by 1 through 17, except for
-   11 and 13. There are algorithms for both signed and unsigned
-   quantities given.
-
-   TIMINGS (cycles)
-
-   divisor  positive  negative unsigned
-
-   .   1       2          2         2
-   .   2       4          4         2
-   .   3       19        21        19
-   .   4       4          4         2
-   .   5       18        22        19
-   .   6       19        22        19
-   .   8       4          4         2
-   .  10       18        19        17
-   .  12       18        20        18
-   .  15       16        18        16
-   .  16       4          4         2
-   .  17       16        18        16
-
-   Now, the algorithm for 7, 9, and 14 is an iterative one.  That is,
-   a loop body is executed until the tentative quotient is 0.  The
-   number of times the loop body is executed varies depending on the
-   dividend, but is never more than two times. If the dividend is
-   less than the divisor, then the loop body is not executed at all.
-   Each iteration adds 4 cycles to the timings.
-
-   divisor  positive  negative unsigned
-
-   .   7       19+4n    20+4n     20+4n    n = number of iterations
-   .   9       21+4n    22+4n     21+4n
-   .  14       21+4n    22+4n     20+4n
-
-   To give an idea of how the number of iterations varies, here is a
-   table of dividend versus number of iterations when dividing by 7.
-
-   smallest     largest       required
-   dividend    dividend      iterations
-
-   .   0            6              0
-   .   7        0x6ffffff          1
-   0x1000006   0xffffffff          2
-
-   There is some overlap in the range of numbers requiring 1 and 2
-   iterations. */
-
-RDEFINE(t2,r1)
-RDEFINE(x2,arg0)       /*  r26 */
-RDEFINE(t1,arg1)       /*  r25 */
-RDEFINE(x1,ret1)       /*  r29 */
-
-       SUBSPA_MILLI_DIV
-       ATTR_MILLI
-
-       .proc
-       .callinfo       millicode
-       .entry
-/* NONE of these routines require a stack frame
-   ALL of these routines are unwindable from millicode */
-
-GSYM($$divide_by_constant)
-       .export $$divide_by_constant,millicode
-/*  Provides a "nice" label for the code covered by the unwind descriptor
-    for things like gprof.  */
-
-/* DIVISION BY 2 (shift by 1) */
-GSYM($$divI_2)
-       .export         $$divI_2,millicode
-       comclr,>=       arg0,0,0
-       addi            1,arg0,arg0
-       MILLIRET
-       extrs           arg0,30,31,ret1
-
-
-/* DIVISION BY 4 (shift by 2) */
-GSYM($$divI_4)
-       .export         $$divI_4,millicode
-       comclr,>=       arg0,0,0
-       addi            3,arg0,arg0
-       MILLIRET
-       extrs           arg0,29,30,ret1
-
-
-/* DIVISION BY 8 (shift by 3) */
-GSYM($$divI_8)
-       .export         $$divI_8,millicode
-       comclr,>=       arg0,0,0
-       addi            7,arg0,arg0
-       MILLIRET
-       extrs           arg0,28,29,ret1
-
-/* DIVISION BY 16 (shift by 4) */
-GSYM($$divI_16)
-       .export         $$divI_16,millicode
-       comclr,>=       arg0,0,0
-       addi            15,arg0,arg0
-       MILLIRET
-       extrs           arg0,27,28,ret1
-
-/****************************************************************************
-*
-*      DIVISION BY DIVISORS OF FFFFFFFF, and powers of 2 times these
-*
-*      includes 3,5,15,17 and also 6,10,12
-*
-****************************************************************************/
-
-/* DIVISION BY 3 (use z = 2**32; a = 55555555) */
-
-GSYM($$divI_3)
-       .export         $$divI_3,millicode
-       comb,<,N        x2,0,LREF(neg3)
-
-       addi            1,x2,x2         /* this cannot overflow */
-       extru           x2,1,2,x1       /* multiply by 5 to get started */
-       sh2add          x2,x2,x2
-       b               LREF(pos)
-       addc            x1,0,x1
-
-LSYM(neg3)
-       subi            1,x2,x2         /* this cannot overflow */
-       extru           x2,1,2,x1       /* multiply by 5 to get started */
-       sh2add          x2,x2,x2
-       b               LREF(neg)
-       addc            x1,0,x1
-
-GSYM($$divU_3)
-       .export         $$divU_3,millicode
-       addi            1,x2,x2         /* this CAN overflow */
-       addc            0,0,x1
-       shd             x1,x2,30,t1     /* multiply by 5 to get started */
-       sh2add          x2,x2,x2
-       b               LREF(pos)
-       addc            x1,t1,x1
-
-/* DIVISION BY 5 (use z = 2**32; a = 33333333) */
-
-GSYM($$divI_5)
-       .export         $$divI_5,millicode
-       comb,<,N        x2,0,LREF(neg5)
-
-       addi            3,x2,t1         /* this cannot overflow */
-       sh1add          x2,t1,x2        /* multiply by 3 to get started */
-       b               LREF(pos)
-       addc            0,0,x1
-
-LSYM(neg5)
-       sub             0,x2,x2         /* negate x2                    */
-       addi            1,x2,x2         /* this cannot overflow */
-       shd             0,x2,31,x1      /* get top bit (can be 1)       */
-       sh1add          x2,x2,x2        /* multiply by 3 to get started */
-       b               LREF(neg)
-       addc            x1,0,x1
-
-GSYM($$divU_5)
-       .export         $$divU_5,millicode
-       addi            1,x2,x2         /* this CAN overflow */
-       addc            0,0,x1
-       shd             x1,x2,31,t1     /* multiply by 3 to get started */
-       sh1add          x2,x2,x2
-       b               LREF(pos)
-       addc            t1,x1,x1
-
-/* DIVISION BY 6 (shift to divide by 2 then divide by 3) */
-GSYM($$divI_6)
-       .export         $$divI_6,millicode
-       comb,<,N        x2,0,LREF(neg6)
-       extru           x2,30,31,x2     /* divide by 2                  */
-       addi            5,x2,t1         /* compute 5*(x2+1) = 5*x2+5    */
-       sh2add          x2,t1,x2        /* multiply by 5 to get started */
-       b               LREF(pos)
-       addc            0,0,x1
-
-LSYM(neg6)
-       subi            2,x2,x2         /* negate, divide by 2, and add 1 */
-                                       /* negation and adding 1 are done */
-                                       /* at the same time by the SUBI   */
-       extru           x2,30,31,x2
-       shd             0,x2,30,x1
-       sh2add          x2,x2,x2        /* multiply by 5 to get started */
-       b               LREF(neg)
-       addc            x1,0,x1
-
-GSYM($$divU_6)
-       .export         $$divU_6,millicode
-       extru           x2,30,31,x2     /* divide by 2 */
-       addi            1,x2,x2         /* cannot carry */
-       shd             0,x2,30,x1      /* multiply by 5 to get started */
-       sh2add          x2,x2,x2
-       b               LREF(pos)
-       addc            x1,0,x1
-
-/* DIVISION BY 10 (shift to divide by 2 then divide by 5) */
-GSYM($$divU_10)
-       .export         $$divU_10,millicode
-       extru           x2,30,31,x2     /* divide by 2 */
-       addi            3,x2,t1         /* compute 3*(x2+1) = (3*x2)+3  */
-       sh1add          x2,t1,x2        /* multiply by 3 to get started */
-       addc            0,0,x1
-LSYM(pos)
-       shd             x1,x2,28,t1     /* multiply by 0x11 */
-       shd             x2,0,28,t2
-       add             x2,t2,x2
-       addc            x1,t1,x1
-LSYM(pos_for_17)
-       shd             x1,x2,24,t1     /* multiply by 0x101 */
-       shd             x2,0,24,t2
-       add             x2,t2,x2
-       addc            x1,t1,x1
-
-       shd             x1,x2,16,t1     /* multiply by 0x10001 */
-       shd             x2,0,16,t2
-       add             x2,t2,x2
-       MILLIRET
-       addc            x1,t1,x1
-
-GSYM($$divI_10)
-       .export         $$divI_10,millicode
-       comb,<          x2,0,LREF(neg10)
-       copy            0,x1
-       extru           x2,30,31,x2     /* divide by 2 */
-       addib,TR        1,x2,LREF(pos)  /* add 1 (cannot overflow)     */
-       sh1add          x2,x2,x2        /* multiply by 3 to get started */
-
-LSYM(neg10)
-       subi            2,x2,x2         /* negate, divide by 2, and add 1 */
-                                       /* negation and adding 1 are done */
-                                       /* at the same time by the SUBI   */
-       extru           x2,30,31,x2
-       sh1add          x2,x2,x2        /* multiply by 3 to get started */
-LSYM(neg)
-       shd             x1,x2,28,t1     /* multiply by 0x11 */
-       shd             x2,0,28,t2
-       add             x2,t2,x2
-       addc            x1,t1,x1
-LSYM(neg_for_17)
-       shd             x1,x2,24,t1     /* multiply by 0x101 */
-       shd             x2,0,24,t2
-       add             x2,t2,x2
-       addc            x1,t1,x1
-
-       shd             x1,x2,16,t1     /* multiply by 0x10001 */
-       shd             x2,0,16,t2
-       add             x2,t2,x2
-       addc            x1,t1,x1
-       MILLIRET
-       sub             0,x1,x1
-
-/* DIVISION BY 12 (shift to divide by 4 then divide by 3) */
-GSYM($$divI_12)
-       .export         $$divI_12,millicode
-       comb,<          x2,0,LREF(neg12)
-       copy            0,x1
-       extru           x2,29,30,x2     /* divide by 4                  */
-       addib,tr        1,x2,LREF(pos)  /* compute 5*(x2+1) = 5*x2+5    */
-       sh2add          x2,x2,x2        /* multiply by 5 to get started */
-
-LSYM(neg12)
-       subi            4,x2,x2         /* negate, divide by 4, and add 1 */
-                                       /* negation and adding 1 are done */
-                                       /* at the same time by the SUBI   */
-       extru           x2,29,30,x2
-       b               LREF(neg)
-       sh2add          x2,x2,x2        /* multiply by 5 to get started */
-
-GSYM($$divU_12)
-       .export         $$divU_12,millicode
-       extru           x2,29,30,x2     /* divide by 4   */
-       addi            5,x2,t1         /* cannot carry */
-       sh2add          x2,t1,x2        /* multiply by 5 to get started */
-       b               LREF(pos)
-       addc            0,0,x1
-
-/* DIVISION BY 15 (use z = 2**32; a = 11111111) */
-GSYM($$divI_15)
-       .export         $$divI_15,millicode
-       comb,<          x2,0,LREF(neg15)
-       copy            0,x1
-       addib,tr        1,x2,LREF(pos)+4
-       shd             x1,x2,28,t1
-
-LSYM(neg15)
-       b               LREF(neg)
-       subi            1,x2,x2
-
-GSYM($$divU_15)
-       .export         $$divU_15,millicode
-       addi            1,x2,x2         /* this CAN overflow */
-       b               LREF(pos)
-       addc            0,0,x1
-
-/* DIVISION BY 17 (use z = 2**32; a =  f0f0f0f) */
-GSYM($$divI_17)
-       .export         $$divI_17,millicode
-       comb,<,n        x2,0,LREF(neg17)
-       addi            1,x2,x2         /* this cannot overflow */
-       shd             0,x2,28,t1      /* multiply by 0xf to get started */
-       shd             x2,0,28,t2
-       sub             t2,x2,x2
-       b               LREF(pos_for_17)
-       subb            t1,0,x1
-
-LSYM(neg17)
-       subi            1,x2,x2         /* this cannot overflow */
-       shd             0,x2,28,t1      /* multiply by 0xf to get started */
-       shd             x2,0,28,t2
-       sub             t2,x2,x2
-       b               LREF(neg_for_17)
-       subb            t1,0,x1
-
-GSYM($$divU_17)
-       .export         $$divU_17,millicode
-       addi            1,x2,x2         /* this CAN overflow */
-       addc            0,0,x1
-       shd             x1,x2,28,t1     /* multiply by 0xf to get started */
-LSYM(u17)
-       shd             x2,0,28,t2
-       sub             t2,x2,x2
-       b               LREF(pos_for_17)
-       subb            t1,x1,x1
-
-
-/* DIVISION BY DIVISORS OF FFFFFF, and powers of 2 times these
-   includes 7,9 and also 14
-
-
-   z = 2**24-1
-   r = z mod x = 0
-
-   so choose b = 0
-
-   Also, in order to divide by z = 2**24-1, we approximate by dividing
-   by (z+1) = 2**24 (which is easy), and then correcting.
-
-   (ax) = (z+1)q' + r
-   .   = zq' + (q'+r)
-
-   So to compute (ax)/z, compute q' = (ax)/(z+1) and r = (ax) mod (z+1)
-   Then the true remainder of (ax)/z is (q'+r).  Repeat the process
-   with this new remainder, adding the tentative quotients together,
-   until a tentative quotient is 0 (and then we are done).  There is
-   one last correction to be done.  It is possible that (q'+r) = z.
-   If so, then (q'+r)/(z+1) = 0 and it looks like we are done. But,
-   in fact, we need to add 1 more to the quotient.  Now, it turns
-   out that this happens if and only if the original value x is
-   an exact multiple of y.  So, to avoid a three instruction test at
-   the end, instead use 1 instruction to add 1 to x at the beginning.  */
-
-/* DIVISION BY 7 (use z = 2**24-1; a = 249249) */
-GSYM($$divI_7)
-       .export         $$divI_7,millicode
-       comb,<,n        x2,0,LREF(neg7)
-LSYM(7)
-       addi            1,x2,x2         /* cannot overflow */
-       shd             0,x2,29,x1
-       sh3add          x2,x2,x2
-       addc            x1,0,x1
-LSYM(pos7)
-       shd             x1,x2,26,t1
-       shd             x2,0,26,t2
-       add             x2,t2,x2
-       addc            x1,t1,x1
-
-       shd             x1,x2,20,t1
-       shd             x2,0,20,t2
-       add             x2,t2,x2
-       addc            x1,t1,t1
-
-       /* computed <t1,x2>.  Now divide it by (2**24 - 1)      */
-
-       copy            0,x1
-       shd,=           t1,x2,24,t1     /* tentative quotient  */
-LSYM(1)
-       addb,tr         t1,x1,LREF(2)   /* add to previous quotient   */
-       extru           x2,31,24,x2     /* new remainder (unadjusted) */
-
-       MILLIRETN
-
-LSYM(2)
-       addb,tr         t1,x2,LREF(1)   /* adjust remainder */
-       extru,=         x2,7,8,t1       /* new quotient     */
-
-LSYM(neg7)
-       subi            1,x2,x2         /* negate x2 and add 1 */
-LSYM(8)
-       shd             0,x2,29,x1
-       sh3add          x2,x2,x2
-       addc            x1,0,x1
-
-LSYM(neg7_shift)
-       shd             x1,x2,26,t1
-       shd             x2,0,26,t2
-       add             x2,t2,x2
-       addc            x1,t1,x1
-
-       shd             x1,x2,20,t1
-       shd             x2,0,20,t2
-       add             x2,t2,x2
-       addc            x1,t1,t1
-
-       /* computed <t1,x2>.  Now divide it by (2**24 - 1)      */
-
-       copy            0,x1
-       shd,=           t1,x2,24,t1     /* tentative quotient  */
-LSYM(3)
-       addb,tr         t1,x1,LREF(4)   /* add to previous quotient   */
-       extru           x2,31,24,x2     /* new remainder (unadjusted) */
-
-       MILLIRET
-       sub             0,x1,x1         /* negate result    */
-
-LSYM(4)
-       addb,tr         t1,x2,LREF(3)   /* adjust remainder */
-       extru,=         x2,7,8,t1       /* new quotient     */
-
-GSYM($$divU_7)
-       .export         $$divU_7,millicode
-       addi            1,x2,x2         /* can carry */
-       addc            0,0,x1
-       shd             x1,x2,29,t1
-       sh3add          x2,x2,x2
-       b               LREF(pos7)
-       addc            t1,x1,x1
-
-/* DIVISION BY 9 (use z = 2**24-1; a = 1c71c7) */
-GSYM($$divI_9)
-       .export         $$divI_9,millicode
-       comb,<,n        x2,0,LREF(neg9)
-       addi            1,x2,x2         /* cannot overflow */
-       shd             0,x2,29,t1
-       shd             x2,0,29,t2
-       sub             t2,x2,x2
-       b               LREF(pos7)
-       subb            t1,0,x1
-
-LSYM(neg9)
-       subi            1,x2,x2         /* negate and add 1 */
-       shd             0,x2,29,t1
-       shd             x2,0,29,t2
-       sub             t2,x2,x2
-       b               LREF(neg7_shift)
-       subb            t1,0,x1
-
-GSYM($$divU_9)
-       .export         $$divU_9,millicode
-       addi            1,x2,x2         /* can carry */
-       addc            0,0,x1
-       shd             x1,x2,29,t1
-       shd             x2,0,29,t2
-       sub             t2,x2,x2
-       b               LREF(pos7)
-       subb            t1,x1,x1
-
-/* DIVISION BY 14 (shift to divide by 2 then divide by 7) */
-GSYM($$divI_14)
-       .export         $$divI_14,millicode
-       comb,<,n        x2,0,LREF(neg14)
-GSYM($$divU_14)
-       .export         $$divU_14,millicode
-       b               LREF(7)         /* go to 7 case */
-       extru           x2,30,31,x2     /* divide by 2  */
-
-LSYM(neg14)
-       subi            2,x2,x2         /* negate (and add 2) */
-       b               LREF(8)
-       extru           x2,30,31,x2     /* divide by 2        */
-       .exit
-       .procend
-       .end
-#endif
-
-#ifdef L_mulI
-/* VERSION "@(#)$$mulI $ Revision: 12.4 $ $ Date: 94/03/17 17:18:51 $" */
-/******************************************************************************
-This routine is used on PA2.0 processors when gcc -mno-fpregs is used
-
-ROUTINE:       $$mulI
-
-
-DESCRIPTION:   
-
-       $$mulI multiplies two single word integers, giving a single 
-       word result.  
-
-
-INPUT REGISTERS:
-
-       arg0 = Operand 1
-       arg1 = Operand 2
-       r31  == return pc
-       sr0  == return space when called externally 
-
-
-OUTPUT REGISTERS:
-
-       arg0 = undefined
-       arg1 = undefined
-       ret1 = result 
-
-OTHER REGISTERS AFFECTED:
-
-       r1   = undefined
-
-SIDE EFFECTS:
-
-       Causes a trap under the following conditions:  NONE
-       Changes memory at the following places:  NONE
-
-PERMISSIBLE CONTEXT:
-
-       Unwindable
-       Does not create a stack frame
-       Is usable for internal or external microcode
-
-DISCUSSION:
-
-       Calls other millicode routines via mrp:  NONE
-       Calls other millicode routines:  NONE
-
-***************************************************************************/
-
-
-#define        a0      %arg0
-#define        a1      %arg1
-#define        t0      %r1
-#define        r       %ret1
-
-#define        a0__128a0       zdep    a0,24,25,a0
-#define        a0__256a0       zdep    a0,23,24,a0
-#define        a1_ne_0_b_l0    comb,<> a1,0,LREF(l0)
-#define        a1_ne_0_b_l1    comb,<> a1,0,LREF(l1)
-#define        a1_ne_0_b_l2    comb,<> a1,0,LREF(l2)
-#define        b_n_ret_t0      b,n     LREF(ret_t0)
-#define        b_e_shift       b       LREF(e_shift)
-#define        b_e_t0ma0       b       LREF(e_t0ma0)
-#define        b_e_t0          b       LREF(e_t0)
-#define        b_e_t0a0        b       LREF(e_t0a0)
-#define        b_e_t02a0       b       LREF(e_t02a0)
-#define        b_e_t04a0       b       LREF(e_t04a0)
-#define        b_e_2t0         b       LREF(e_2t0)
-#define        b_e_2t0a0       b       LREF(e_2t0a0)
-#define        b_e_2t04a0      b       LREF(e2t04a0)
-#define        b_e_3t0         b       LREF(e_3t0)
-#define        b_e_4t0         b       LREF(e_4t0)
-#define        b_e_4t0a0       b       LREF(e_4t0a0)
-#define        b_e_4t08a0      b       LREF(e4t08a0)
-#define        b_e_5t0         b       LREF(e_5t0)
-#define        b_e_8t0         b       LREF(e_8t0)
-#define        b_e_8t0a0       b       LREF(e_8t0a0)
-#define        r__r_a0         add     r,a0,r
-#define        r__r_2a0        sh1add  a0,r,r
-#define        r__r_4a0        sh2add  a0,r,r
-#define        r__r_8a0        sh3add  a0,r,r
-#define        r__r_t0         add     r,t0,r
-#define        r__r_2t0        sh1add  t0,r,r
-#define        r__r_4t0        sh2add  t0,r,r
-#define        r__r_8t0        sh3add  t0,r,r
-#define        t0__3a0         sh1add  a0,a0,t0
-#define        t0__4a0         sh2add  a0,0,t0
-#define        t0__5a0         sh2add  a0,a0,t0
-#define        t0__8a0         sh3add  a0,0,t0
-#define        t0__9a0         sh3add  a0,a0,t0
-#define        t0__16a0        zdep    a0,27,28,t0
-#define        t0__32a0        zdep    a0,26,27,t0
-#define        t0__64a0        zdep    a0,25,26,t0
-#define        t0__128a0       zdep    a0,24,25,t0
-#define        t0__t0ma0       sub     t0,a0,t0
-#define        t0__t0_a0       add     t0,a0,t0
-#define        t0__t0_2a0      sh1add  a0,t0,t0
-#define        t0__t0_4a0      sh2add  a0,t0,t0
-#define        t0__t0_8a0      sh3add  a0,t0,t0
-#define        t0__2t0_a0      sh1add  t0,a0,t0
-#define        t0__3t0         sh1add  t0,t0,t0
-#define        t0__4t0         sh2add  t0,0,t0
-#define        t0__4t0_a0      sh2add  t0,a0,t0
-#define        t0__5t0         sh2add  t0,t0,t0
-#define        t0__8t0         sh3add  t0,0,t0
-#define        t0__8t0_a0      sh3add  t0,a0,t0
-#define        t0__9t0         sh3add  t0,t0,t0
-#define        t0__16t0        zdep    t0,27,28,t0
-#define        t0__32t0        zdep    t0,26,27,t0
-#define        t0__256a0       zdep    a0,23,24,t0
-
-
-       SUBSPA_MILLI
-       ATTR_MILLI
-       .align 16
-       .proc
-       .callinfo millicode
-       .export $$mulI,millicode
-GSYM($$mulI)   
-       combt,<<=       a1,a0,LREF(l4)  /* swap args if unsigned a1>a0 */
-       copy            0,r             /* zero out the result */
-       xor             a0,a1,a0        /* swap a0 & a1 using the */
-       xor             a0,a1,a1        /*  old xor trick */
-       xor             a0,a1,a0
-LSYM(l4)
-       combt,<=        0,a0,LREF(l3)           /* if a0>=0 then proceed like unsigned */
-       zdep            a1,30,8,t0      /* t0 = (a1&0xff)<<1 ********* */
-       sub,>           0,a1,t0         /* otherwise negate both and */
-       combt,<=,n      a0,t0,LREF(l2)  /*  swap back if |a0|<|a1| */
-       sub             0,a0,a1
-       movb,tr,n       t0,a0,LREF(l2)  /* 10th inst.  */
-
-LSYM(l0)       r__r_t0                         /* add in this partial product */
-LSYM(l1)       a0__256a0                       /* a0 <<= 8 ****************** */
-LSYM(l2)       zdep            a1,30,8,t0      /* t0 = (a1&0xff)<<1 ********* */
-LSYM(l3)       blr             t0,0            /* case on these 8 bits ****** */
-               extru           a1,23,24,a1     /* a1 >>= 8 ****************** */
-
-/*16 insts before this.  */
-/*                       a0 <<= 8 ************************** */
-LSYM(x0)       a1_ne_0_b_l2    ! a0__256a0     ! MILLIRETN     ! nop
-LSYM(x1)       a1_ne_0_b_l1    ! r__r_a0       ! MILLIRETN     ! nop
-LSYM(x2)       a1_ne_0_b_l1    ! r__r_2a0      ! MILLIRETN     ! nop
-LSYM(x3)       a1_ne_0_b_l0    ! t0__3a0       ! MILLIRET      ! r__r_t0
-LSYM(x4)       a1_ne_0_b_l1    ! r__r_4a0      ! MILLIRETN     ! nop
-LSYM(x5)       a1_ne_0_b_l0    ! t0__5a0       ! MILLIRET      ! r__r_t0
-LSYM(x6)       t0__3a0         ! a1_ne_0_b_l1  ! r__r_2t0      ! MILLIRETN
-LSYM(x7)       t0__3a0         ! a1_ne_0_b_l0  ! r__r_4a0      ! b_n_ret_t0
-LSYM(x8)       a1_ne_0_b_l1    ! r__r_8a0      ! MILLIRETN     ! nop
-LSYM(x9)       a1_ne_0_b_l0    ! t0__9a0       ! MILLIRET      ! r__r_t0
-LSYM(x10)      t0__5a0         ! a1_ne_0_b_l1  ! r__r_2t0      ! MILLIRETN
-LSYM(x11)      t0__3a0         ! a1_ne_0_b_l0  ! r__r_8a0      ! b_n_ret_t0
-LSYM(x12)      t0__3a0         ! a1_ne_0_b_l1  ! r__r_4t0      ! MILLIRETN
-LSYM(x13)      t0__5a0         ! a1_ne_0_b_l0  ! r__r_8a0      ! b_n_ret_t0
-LSYM(x14)      t0__3a0         ! t0__2t0_a0    ! b_e_shift     ! r__r_2t0
-LSYM(x15)      t0__5a0         ! a1_ne_0_b_l0  ! t0__3t0       ! b_n_ret_t0
-LSYM(x16)      t0__16a0        ! a1_ne_0_b_l1  ! r__r_t0       ! MILLIRETN
-LSYM(x17)      t0__9a0         ! a1_ne_0_b_l0  ! t0__t0_8a0    ! b_n_ret_t0
-LSYM(x18)      t0__9a0         ! a1_ne_0_b_l1  ! r__r_2t0      ! MILLIRETN
-LSYM(x19)      t0__9a0         ! a1_ne_0_b_l0  ! t0__2t0_a0    ! b_n_ret_t0
-LSYM(x20)      t0__5a0         ! a1_ne_0_b_l1  ! r__r_4t0      ! MILLIRETN
-LSYM(x21)      t0__5a0         ! a1_ne_0_b_l0  ! t0__4t0_a0    ! b_n_ret_t0
-LSYM(x22)      t0__5a0         ! t0__2t0_a0    ! b_e_shift     ! r__r_2t0
-LSYM(x23)      t0__5a0         ! t0__2t0_a0    ! b_e_t0        ! t0__2t0_a0
-LSYM(x24)      t0__3a0         ! a1_ne_0_b_l1  ! r__r_8t0      ! MILLIRETN
-LSYM(x25)      t0__5a0         ! a1_ne_0_b_l0  ! t0__5t0       ! b_n_ret_t0
-LSYM(x26)      t0__3a0         ! t0__4t0_a0    ! b_e_shift     ! r__r_2t0
-LSYM(x27)      t0__3a0         ! a1_ne_0_b_l0  ! t0__9t0       ! b_n_ret_t0
-LSYM(x28)      t0__3a0         ! t0__2t0_a0    ! b_e_shift     ! r__r_4t0
-LSYM(x29)      t0__3a0         ! t0__2t0_a0    ! b_e_t0        ! t0__4t0_a0
-LSYM(x30)      t0__5a0         ! t0__3t0       ! b_e_shift     ! r__r_2t0
-LSYM(x31)      t0__32a0        ! a1_ne_0_b_l0  ! t0__t0ma0     ! b_n_ret_t0
-LSYM(x32)      t0__32a0        ! a1_ne_0_b_l1  ! r__r_t0       ! MILLIRETN
-LSYM(x33)      t0__8a0         ! a1_ne_0_b_l0  ! t0__4t0_a0    ! b_n_ret_t0
-LSYM(x34)      t0__16a0        ! t0__t0_a0     ! b_e_shift     ! r__r_2t0
-LSYM(x35)      t0__9a0         ! t0__3t0       ! b_e_t0        ! t0__t0_8a0
-LSYM(x36)      t0__9a0         ! a1_ne_0_b_l1  ! r__r_4t0      ! MILLIRETN
-LSYM(x37)      t0__9a0         ! a1_ne_0_b_l0  ! t0__4t0_a0    ! b_n_ret_t0
-LSYM(x38)      t0__9a0         ! t0__2t0_a0    ! b_e_shift     ! r__r_2t0
-LSYM(x39)      t0__9a0         ! t0__2t0_a0    ! b_e_t0        ! t0__2t0_a0
-LSYM(x40)      t0__5a0         ! a1_ne_0_b_l1  ! r__r_8t0      ! MILLIRETN
-LSYM(x41)      t0__5a0         ! a1_ne_0_b_l0  ! t0__8t0_a0    ! b_n_ret_t0
-LSYM(x42)      t0__5a0         ! t0__4t0_a0    ! b_e_shift     ! r__r_2t0
-LSYM(x43)      t0__5a0         ! t0__4t0_a0    ! b_e_t0        ! t0__2t0_a0
-LSYM(x44)      t0__5a0         ! t0__2t0_a0    ! b_e_shift     ! r__r_4t0
-LSYM(x45)      t0__9a0         ! a1_ne_0_b_l0  ! t0__5t0       ! b_n_ret_t0
-LSYM(x46)      t0__9a0         ! t0__5t0       ! b_e_t0        ! t0__t0_a0
-LSYM(x47)      t0__9a0         ! t0__5t0       ! b_e_t0        ! t0__t0_2a0
-LSYM(x48)      t0__3a0         ! a1_ne_0_b_l0  ! t0__16t0      ! b_n_ret_t0
-LSYM(x49)      t0__9a0         ! t0__5t0       ! b_e_t0        ! t0__t0_4a0
-LSYM(x50)      t0__5a0         ! t0__5t0       ! b_e_shift     ! r__r_2t0
-LSYM(x51)      t0__9a0         ! t0__t0_8a0    ! b_e_t0        ! t0__3t0
-LSYM(x52)      t0__3a0         ! t0__4t0_a0    ! b_e_shift     ! r__r_4t0
-LSYM(x53)      t0__3a0         ! t0__4t0_a0    ! b_e_t0        ! t0__4t0_a0
-LSYM(x54)      t0__9a0         ! t0__3t0       ! b_e_shift     ! r__r_2t0
-LSYM(x55)      t0__9a0         ! t0__3t0       ! b_e_t0        ! t0__2t0_a0
-LSYM(x56)      t0__3a0         ! t0__2t0_a0    ! b_e_shift     ! r__r_8t0
-LSYM(x57)      t0__9a0         ! t0__2t0_a0    ! b_e_t0        ! t0__3t0
-LSYM(x58)      t0__3a0         ! t0__2t0_a0    ! b_e_2t0       ! t0__4t0_a0
-LSYM(x59)      t0__9a0         ! t0__2t0_a0    ! b_e_t02a0     ! t0__3t0
-LSYM(x60)      t0__5a0         ! t0__3t0       ! b_e_shift     ! r__r_4t0
-LSYM(x61)      t0__5a0         ! t0__3t0       ! b_e_t0        ! t0__4t0_a0
-LSYM(x62)      t0__32a0        ! t0__t0ma0     ! b_e_shift     ! r__r_2t0
-LSYM(x63)      t0__64a0        ! a1_ne_0_b_l0  ! t0__t0ma0     ! b_n_ret_t0
-LSYM(x64)      t0__64a0        ! a1_ne_0_b_l1  ! r__r_t0       ! MILLIRETN
-LSYM(x65)      t0__8a0         ! a1_ne_0_b_l0  ! t0__8t0_a0    ! b_n_ret_t0
-LSYM(x66)      t0__32a0        ! t0__t0_a0     ! b_e_shift     ! r__r_2t0
-LSYM(x67)      t0__8a0         ! t0__4t0_a0    ! b_e_t0        ! t0__2t0_a0
-LSYM(x68)      t0__8a0         ! t0__2t0_a0    ! b_e_shift     ! r__r_4t0
-LSYM(x69)      t0__8a0         ! t0__2t0_a0    ! b_e_t0        ! t0__4t0_a0
-LSYM(x70)      t0__64a0        ! t0__t0_4a0    ! b_e_t0        ! t0__t0_2a0
-LSYM(x71)      t0__9a0         ! t0__8t0       ! b_e_t0        ! t0__t0ma0
-LSYM(x72)      t0__9a0         ! a1_ne_0_b_l1  ! r__r_8t0      ! MILLIRETN
-LSYM(x73)      t0__9a0         ! t0__8t0_a0    ! b_e_shift     ! r__r_t0
-LSYM(x74)      t0__9a0         ! t0__4t0_a0    ! b_e_shift     ! r__r_2t0
-LSYM(x75)      t0__9a0         ! t0__4t0_a0    ! b_e_t0        ! t0__2t0_a0
-LSYM(x76)      t0__9a0         ! t0__2t0_a0    ! b_e_shift     ! r__r_4t0
-LSYM(x77)      t0__9a0         ! t0__2t0_a0    ! b_e_t0        ! t0__4t0_a0
-LSYM(x78)      t0__9a0         ! t0__2t0_a0    ! b_e_2t0       ! t0__2t0_a0
-LSYM(x79)      t0__16a0        ! t0__5t0       ! b_e_t0        ! t0__t0ma0
-LSYM(x80)      t0__16a0        ! t0__5t0       ! b_e_shift     ! r__r_t0
-LSYM(x81)      t0__9a0         ! t0__9t0       ! b_e_shift     ! r__r_t0
-LSYM(x82)      t0__5a0         ! t0__8t0_a0    ! b_e_shift     ! r__r_2t0
-LSYM(x83)      t0__5a0         ! t0__8t0_a0    ! b_e_t0        ! t0__2t0_a0
-LSYM(x84)      t0__5a0         ! t0__4t0_a0    ! b_e_shift     ! r__r_4t0
-LSYM(x85)      t0__8a0         ! t0__2t0_a0    ! b_e_t0        ! t0__5t0
-LSYM(x86)      t0__5a0         ! t0__4t0_a0    ! b_e_2t0       ! t0__2t0_a0
-LSYM(x87)      t0__9a0         ! t0__9t0       ! b_e_t02a0     ! t0__t0_4a0
-LSYM(x88)      t0__5a0         ! t0__2t0_a0    ! b_e_shift     ! r__r_8t0
-LSYM(x89)      t0__5a0         ! t0__2t0_a0    ! b_e_t0        ! t0__8t0_a0
-LSYM(x90)      t0__9a0         ! t0__5t0       ! b_e_shift     ! r__r_2t0
-LSYM(x91)      t0__9a0         ! t0__5t0       ! b_e_t0        ! t0__2t0_a0
-LSYM(x92)      t0__5a0         ! t0__2t0_a0    ! b_e_4t0       ! t0__2t0_a0
-LSYM(x93)      t0__32a0        ! t0__t0ma0     ! b_e_t0        ! t0__3t0
-LSYM(x94)      t0__9a0         ! t0__5t0       ! b_e_2t0       ! t0__t0_2a0
-LSYM(x95)      t0__9a0         ! t0__2t0_a0    ! b_e_t0        ! t0__5t0
-LSYM(x96)      t0__8a0         ! t0__3t0       ! b_e_shift     ! r__r_4t0
-LSYM(x97)      t0__8a0         ! t0__3t0       ! b_e_t0        ! t0__4t0_a0
-LSYM(x98)      t0__32a0        ! t0__3t0       ! b_e_t0        ! t0__t0_2a0
-LSYM(x99)      t0__8a0         ! t0__4t0_a0    ! b_e_t0        ! t0__3t0
-LSYM(x100)     t0__5a0         ! t0__5t0       ! b_e_shift     ! r__r_4t0
-LSYM(x101)     t0__5a0         ! t0__5t0       ! b_e_t0        ! t0__4t0_a0
-LSYM(x102)     t0__32a0        ! t0__t0_2a0    ! b_e_t0        ! t0__3t0
-LSYM(x103)     t0__5a0         ! t0__5t0       ! b_e_t02a0     ! t0__4t0_a0
-LSYM(x104)     t0__3a0         ! t0__4t0_a0    ! b_e_shift     ! r__r_8t0
-LSYM(x105)     t0__5a0         ! t0__4t0_a0    ! b_e_t0        ! t0__5t0
-LSYM(x106)     t0__3a0         ! t0__4t0_a0    ! b_e_2t0       ! t0__4t0_a0
-LSYM(x107)     t0__9a0         ! t0__t0_4a0    ! b_e_t02a0     ! t0__8t0_a0
-LSYM(x108)     t0__9a0         ! t0__3t0       ! b_e_shift     ! r__r_4t0
-LSYM(x109)     t0__9a0         ! t0__3t0       ! b_e_t0        ! t0__4t0_a0
-LSYM(x110)     t0__9a0         ! t0__3t0       ! b_e_2t0       ! t0__2t0_a0
-LSYM(x111)     t0__9a0         ! t0__4t0_a0    ! b_e_t0        ! t0__3t0
-LSYM(x112)     t0__3a0         ! t0__2t0_a0    ! b_e_t0        ! t0__16t0
-LSYM(x113)     t0__9a0         ! t0__4t0_a0    ! b_e_t02a0     ! t0__3t0
-LSYM(x114)     t0__9a0         ! t0__2t0_a0    ! b_e_2t0       ! t0__3t0
-LSYM(x115)     t0__9a0         ! t0__2t0_a0    ! b_e_2t0a0     ! t0__3t0
-LSYM(x116)     t0__3a0         ! t0__2t0_a0    ! b_e_4t0       ! t0__4t0_a0
-LSYM(x117)     t0__3a0         ! t0__4t0_a0    ! b_e_t0        ! t0__9t0
-LSYM(x118)     t0__3a0         ! t0__4t0_a0    ! b_e_t0a0      ! t0__9t0
-LSYM(x119)     t0__3a0         ! t0__4t0_a0    ! b_e_t02a0     ! t0__9t0
-LSYM(x120)     t0__5a0         ! t0__3t0       ! b_e_shift     ! r__r_8t0
-LSYM(x121)     t0__5a0         ! t0__3t0       ! b_e_t0        ! t0__8t0_a0
-LSYM(x122)     t0__5a0         ! t0__3t0       ! b_e_2t0       ! t0__4t0_a0
-LSYM(x123)     t0__5a0         ! t0__8t0_a0    ! b_e_t0        ! t0__3t0
-LSYM(x124)     t0__32a0        ! t0__t0ma0     ! b_e_shift     ! r__r_4t0
-LSYM(x125)     t0__5a0         ! t0__5t0       ! b_e_t0        ! t0__5t0
-LSYM(x126)     t0__64a0        ! t0__t0ma0     ! b_e_shift     ! r__r_2t0
-LSYM(x127)     t0__128a0       ! a1_ne_0_b_l0  ! t0__t0ma0     ! b_n_ret_t0
-LSYM(x128)     t0__128a0       ! a1_ne_0_b_l1  ! r__r_t0       ! MILLIRETN
-LSYM(x129)     t0__128a0       ! a1_ne_0_b_l0  ! t0__t0_a0     ! b_n_ret_t0
-LSYM(x130)     t0__64a0        ! t0__t0_a0     ! b_e_shift     ! r__r_2t0
-LSYM(x131)     t0__8a0         ! t0__8t0_a0    ! b_e_t0        ! t0__2t0_a0
-LSYM(x132)     t0__8a0         ! t0__4t0_a0    ! b_e_shift     ! r__r_4t0
-LSYM(x133)     t0__8a0         ! t0__4t0_a0    ! b_e_t0        ! t0__4t0_a0
-LSYM(x134)     t0__8a0         ! t0__4t0_a0    ! b_e_2t0       ! t0__2t0_a0
-LSYM(x135)     t0__9a0         ! t0__5t0       ! b_e_t0        ! t0__3t0
-LSYM(x136)     t0__8a0         ! t0__2t0_a0    ! b_e_shift     ! r__r_8t0
-LSYM(x137)     t0__8a0         ! t0__2t0_a0    ! b_e_t0        ! t0__8t0_a0
-LSYM(x138)     t0__8a0         ! t0__2t0_a0    ! b_e_2t0       ! t0__4t0_a0
-LSYM(x139)     t0__8a0         ! t0__2t0_a0    ! b_e_2t0a0     ! t0__4t0_a0
-LSYM(x140)     t0__3a0         ! t0__2t0_a0    ! b_e_4t0       ! t0__5t0
-LSYM(x141)     t0__8a0         ! t0__2t0_a0    ! b_e_4t0a0     ! t0__2t0_a0
-LSYM(x142)     t0__9a0         ! t0__8t0       ! b_e_2t0       ! t0__t0ma0
-LSYM(x143)     t0__16a0        ! t0__9t0       ! b_e_t0        ! t0__t0ma0
-LSYM(x144)     t0__9a0         ! t0__8t0       ! b_e_shift     ! r__r_2t0
-LSYM(x145)     t0__9a0         ! t0__8t0       ! b_e_t0        ! t0__2t0_a0
-LSYM(x146)     t0__9a0         ! t0__8t0_a0    ! b_e_shift     ! r__r_2t0
-LSYM(x147)     t0__9a0         ! t0__8t0_a0    ! b_e_t0        ! t0__2t0_a0
-LSYM(x148)     t0__9a0         ! t0__4t0_a0    ! b_e_shift     ! r__r_4t0
-LSYM(x149)     t0__9a0         ! t0__4t0_a0    ! b_e_t0        ! t0__4t0_a0
-LSYM(x150)     t0__9a0         ! t0__4t0_a0    ! b_e_2t0       ! t0__2t0_a0
-LSYM(x151)     t0__9a0         ! t0__4t0_a0    ! b_e_2t0a0     ! t0__2t0_a0
-LSYM(x152)     t0__9a0         ! t0__2t0_a0    ! b_e_shift     ! r__r_8t0
-LSYM(x153)     t0__9a0         ! t0__2t0_a0    ! b_e_t0        ! t0__8t0_a0
-LSYM(x154)     t0__9a0         ! t0__2t0_a0    ! b_e_2t0       ! t0__4t0_a0
-LSYM(x155)     t0__32a0        ! t0__t0ma0     ! b_e_t0        ! t0__5t0
-LSYM(x156)     t0__9a0         ! t0__2t0_a0    ! b_e_4t0       ! t0__2t0_a0
-LSYM(x157)     t0__32a0        ! t0__t0ma0     ! b_e_t02a0     ! t0__5t0
-LSYM(x158)     t0__16a0        ! t0__5t0       ! b_e_2t0       ! t0__t0ma0
-LSYM(x159)     t0__32a0        ! t0__5t0       ! b_e_t0        ! t0__t0ma0
-LSYM(x160)     t0__5a0         ! t0__4t0       ! b_e_shift     ! r__r_8t0
-LSYM(x161)     t0__8a0         ! t0__5t0       ! b_e_t0        ! t0__4t0_a0
-LSYM(x162)     t0__9a0         ! t0__9t0       ! b_e_shift     ! r__r_2t0
-LSYM(x163)     t0__9a0         ! t0__9t0       ! b_e_t0        ! t0__2t0_a0
-LSYM(x164)     t0__5a0         ! t0__8t0_a0    ! b_e_shift     ! r__r_4t0
-LSYM(x165)     t0__8a0         ! t0__4t0_a0    ! b_e_t0        ! t0__5t0
-LSYM(x166)     t0__5a0         ! t0__8t0_a0    ! b_e_2t0       ! t0__2t0_a0
-LSYM(x167)     t0__5a0         ! t0__8t0_a0    ! b_e_2t0a0     ! t0__2t0_a0
-LSYM(x168)     t0__5a0         ! t0__4t0_a0    ! b_e_shift     ! r__r_8t0
-LSYM(x169)     t0__5a0         ! t0__4t0_a0    ! b_e_t0        ! t0__8t0_a0
-LSYM(x170)     t0__32a0        ! t0__t0_2a0    ! b_e_t0        ! t0__5t0
-LSYM(x171)     t0__9a0         ! t0__2t0_a0    ! b_e_t0        ! t0__9t0
-LSYM(x172)     t0__5a0         ! t0__4t0_a0    ! b_e_4t0       ! t0__2t0_a0
-LSYM(x173)     t0__9a0         ! t0__2t0_a0    ! b_e_t02a0     ! t0__9t0
-LSYM(x174)     t0__32a0        ! t0__t0_2a0    ! b_e_t04a0     ! t0__5t0
-LSYM(x175)     t0__8a0         ! t0__2t0_a0    ! b_e_5t0       ! t0__2t0_a0
-LSYM(x176)     t0__5a0         ! t0__4t0_a0    ! b_e_8t0       ! t0__t0_a0
-LSYM(x177)     t0__5a0         ! t0__4t0_a0    ! b_e_8t0a0     ! t0__t0_a0
-LSYM(x178)     t0__5a0         ! t0__2t0_a0    ! b_e_2t0       ! t0__8t0_a0
-LSYM(x179)     t0__5a0         ! t0__2t0_a0    ! b_e_2t0a0     ! t0__8t0_a0
-LSYM(x180)     t0__9a0         ! t0__5t0       ! b_e_shift     ! r__r_4t0
-LSYM(x181)     t0__9a0         ! t0__5t0       ! b_e_t0        ! t0__4t0_a0
-LSYM(x182)     t0__9a0         ! t0__5t0       ! b_e_2t0       ! t0__2t0_a0
-LSYM(x183)     t0__9a0         ! t0__5t0       ! b_e_2t0a0     ! t0__2t0_a0
-LSYM(x184)     t0__5a0         ! t0__9t0       ! b_e_4t0       ! t0__t0_a0
-LSYM(x185)     t0__9a0         ! t0__4t0_a0    ! b_e_t0        ! t0__5t0
-LSYM(x186)     t0__32a0        ! t0__t0ma0     ! b_e_2t0       ! t0__3t0
-LSYM(x187)     t0__9a0         ! t0__4t0_a0    ! b_e_t02a0     ! t0__5t0
-LSYM(x188)     t0__9a0         ! t0__5t0       ! b_e_4t0       ! t0__t0_2a0
-LSYM(x189)     t0__5a0         ! t0__4t0_a0    ! b_e_t0        ! t0__9t0
-LSYM(x190)     t0__9a0         ! t0__2t0_a0    ! b_e_2t0       ! t0__5t0
-LSYM(x191)     t0__64a0        ! t0__3t0       ! b_e_t0        ! t0__t0ma0
-LSYM(x192)     t0__8a0         ! t0__3t0       ! b_e_shift     ! r__r_8t0
-LSYM(x193)     t0__8a0         ! t0__3t0       ! b_e_t0        ! t0__8t0_a0
-LSYM(x194)     t0__8a0         ! t0__3t0       ! b_e_2t0       ! t0__4t0_a0
-LSYM(x195)     t0__8a0         ! t0__8t0_a0    ! b_e_t0        ! t0__3t0
-LSYM(x196)     t0__8a0         ! t0__3t0       ! b_e_4t0       ! t0__2t0_a0
-LSYM(x197)     t0__8a0         ! t0__3t0       ! b_e_4t0a0     ! t0__2t0_a0
-LSYM(x198)     t0__64a0        ! t0__t0_2a0    ! b_e_t0        ! t0__3t0
-LSYM(x199)     t0__8a0         ! t0__4t0_a0    ! b_e_2t0a0     ! t0__3t0
-LSYM(x200)     t0__5a0         ! t0__5t0       ! b_e_shift     ! r__r_8t0
-LSYM(x201)     t0__5a0         ! t0__5t0       ! b_e_t0        ! t0__8t0_a0
-LSYM(x202)     t0__5a0         ! t0__5t0       ! b_e_2t0       ! t0__4t0_a0
-LSYM(x203)     t0__5a0         ! t0__5t0       ! b_e_2t0a0     ! t0__4t0_a0
-LSYM(x204)     t0__8a0         ! t0__2t0_a0    ! b_e_4t0       ! t0__3t0
-LSYM(x205)     t0__5a0         ! t0__8t0_a0    ! b_e_t0        ! t0__5t0
-LSYM(x206)     t0__64a0        ! t0__t0_4a0    ! b_e_t02a0     ! t0__3t0
-LSYM(x207)     t0__8a0         ! t0__2t0_a0    ! b_e_3t0       ! t0__4t0_a0
-LSYM(x208)     t0__5a0         ! t0__5t0       ! b_e_8t0       ! t0__t0_a0
-LSYM(x209)     t0__5a0         ! t0__5t0       ! b_e_8t0a0     ! t0__t0_a0
-LSYM(x210)     t0__5a0         ! t0__4t0_a0    ! b_e_2t0       ! t0__5t0
-LSYM(x211)     t0__5a0         ! t0__4t0_a0    ! b_e_2t0a0     ! t0__5t0
-LSYM(x212)     t0__3a0         ! t0__4t0_a0    ! b_e_4t0       ! t0__4t0_a0
-LSYM(x213)     t0__3a0         ! t0__4t0_a0    ! b_e_4t0a0     ! t0__4t0_a0
-LSYM(x214)     t0__9a0         ! t0__t0_4a0    ! b_e_2t04a0    ! t0__8t0_a0
-LSYM(x215)     t0__5a0         ! t0__4t0_a0    ! b_e_5t0       ! t0__2t0_a0
-LSYM(x216)     t0__9a0         ! t0__3t0       ! b_e_shift     ! r__r_8t0
-LSYM(x217)     t0__9a0         ! t0__3t0       ! b_e_t0        ! t0__8t0_a0
-LSYM(x218)     t0__9a0         ! t0__3t0       ! b_e_2t0       ! t0__4t0_a0
-LSYM(x219)     t0__9a0         ! t0__8t0_a0    ! b_e_t0        ! t0__3t0
-LSYM(x220)     t0__3a0         ! t0__9t0       ! b_e_4t0       ! t0__2t0_a0
-LSYM(x221)     t0__3a0         ! t0__9t0       ! b_e_4t0a0     ! t0__2t0_a0
-LSYM(x222)     t0__9a0         ! t0__4t0_a0    ! b_e_2t0       ! t0__3t0
-LSYM(x223)     t0__9a0         ! t0__4t0_a0    ! b_e_2t0a0     ! t0__3t0
-LSYM(x224)     t0__9a0         ! t0__3t0       ! b_e_8t0       ! t0__t0_a0
-LSYM(x225)     t0__9a0         ! t0__5t0       ! b_e_t0        ! t0__5t0
-LSYM(x226)     t0__3a0         ! t0__2t0_a0    ! b_e_t02a0     ! t0__32t0
-LSYM(x227)     t0__9a0         ! t0__5t0       ! b_e_t02a0     ! t0__5t0
-LSYM(x228)     t0__9a0         ! t0__2t0_a0    ! b_e_4t0       ! t0__3t0
-LSYM(x229)     t0__9a0         ! t0__2t0_a0    ! b_e_4t0a0     ! t0__3t0
-LSYM(x230)     t0__9a0         ! t0__5t0       ! b_e_5t0       ! t0__t0_a0
-LSYM(x231)     t0__9a0         ! t0__2t0_a0    ! b_e_3t0       ! t0__4t0_a0
-LSYM(x232)     t0__3a0         ! t0__2t0_a0    ! b_e_8t0       ! t0__4t0_a0
-LSYM(x233)     t0__3a0         ! t0__2t0_a0    ! b_e_8t0a0     ! t0__4t0_a0
-LSYM(x234)     t0__3a0         ! t0__4t0_a0    ! b_e_2t0       ! t0__9t0
-LSYM(x235)     t0__3a0         ! t0__4t0_a0    ! b_e_2t0a0     ! t0__9t0
-LSYM(x236)     t0__9a0         ! t0__2t0_a0    ! b_e_4t08a0    ! t0__3t0
-LSYM(x237)     t0__16a0        ! t0__5t0       ! b_e_3t0       ! t0__t0ma0
-LSYM(x238)     t0__3a0         ! t0__4t0_a0    ! b_e_2t04a0    ! t0__9t0
-LSYM(x239)     t0__16a0        ! t0__5t0       ! b_e_t0ma0     ! t0__3t0
-LSYM(x240)     t0__9a0         ! t0__t0_a0     ! b_e_8t0       ! t0__3t0
-LSYM(x241)     t0__9a0         ! t0__t0_a0     ! b_e_8t0a0     ! t0__3t0
-LSYM(x242)     t0__5a0         ! t0__3t0       ! b_e_2t0       ! t0__8t0_a0
-LSYM(x243)     t0__9a0         ! t0__9t0       ! b_e_t0        ! t0__3t0
-LSYM(x244)     t0__5a0         ! t0__3t0       ! b_e_4t0       ! t0__4t0_a0
-LSYM(x245)     t0__8a0         ! t0__3t0       ! b_e_5t0       ! t0__2t0_a0
-LSYM(x246)     t0__5a0         ! t0__8t0_a0    ! b_e_2t0       ! t0__3t0
-LSYM(x247)     t0__5a0         ! t0__8t0_a0    ! b_e_2t0a0     ! t0__3t0
-LSYM(x248)     t0__32a0        ! t0__t0ma0     ! b_e_shift     ! r__r_8t0
-LSYM(x249)     t0__32a0        ! t0__t0ma0     ! b_e_t0        ! t0__8t0_a0
-LSYM(x250)     t0__5a0         ! t0__5t0       ! b_e_2t0       ! t0__5t0
-LSYM(x251)     t0__5a0         ! t0__5t0       ! b_e_2t0a0     ! t0__5t0
-LSYM(x252)     t0__64a0        ! t0__t0ma0     ! b_e_shift     ! r__r_4t0
-LSYM(x253)     t0__64a0        ! t0__t0ma0     ! b_e_t0        ! t0__4t0_a0
-LSYM(x254)     t0__128a0       ! t0__t0ma0     ! b_e_shift     ! r__r_2t0
-LSYM(x255)     t0__256a0       ! a1_ne_0_b_l0  ! t0__t0ma0     ! b_n_ret_t0
-/*1040 insts before this.  */
-LSYM(ret_t0)   MILLIRET
-LSYM(e_t0)     r__r_t0
-LSYM(e_shift)  a1_ne_0_b_l2
-       a0__256a0       /* a0 <<= 8 *********** */
-       MILLIRETN
-LSYM(e_t0ma0)  a1_ne_0_b_l0
-       t0__t0ma0
-       MILLIRET
-       r__r_t0
-LSYM(e_t0a0)   a1_ne_0_b_l0
-       t0__t0_a0
-       MILLIRET
-       r__r_t0
-LSYM(e_t02a0)  a1_ne_0_b_l0
-       t0__t0_2a0
-       MILLIRET
-       r__r_t0
-LSYM(e_t04a0)  a1_ne_0_b_l0
-       t0__t0_4a0
-       MILLIRET
-       r__r_t0
-LSYM(e_2t0)    a1_ne_0_b_l1
-       r__r_2t0
-       MILLIRETN
-LSYM(e_2t0a0)  a1_ne_0_b_l0
-       t0__2t0_a0
-       MILLIRET
-       r__r_t0
-LSYM(e2t04a0)  t0__t0_2a0
-       a1_ne_0_b_l1
-       r__r_2t0
-       MILLIRETN
-LSYM(e_3t0)    a1_ne_0_b_l0
-       t0__3t0
-       MILLIRET
-       r__r_t0
-LSYM(e_4t0)    a1_ne_0_b_l1
-       r__r_4t0
-       MILLIRETN
-LSYM(e_4t0a0)  a1_ne_0_b_l0
-       t0__4t0_a0
-       MILLIRET
-       r__r_t0
-LSYM(e4t08a0)  t0__t0_2a0
-       a1_ne_0_b_l1
-       r__r_4t0
-       MILLIRETN
-LSYM(e_5t0)    a1_ne_0_b_l0
-       t0__5t0
-       MILLIRET
-       r__r_t0
-LSYM(e_8t0)    a1_ne_0_b_l1
-       r__r_8t0
-       MILLIRETN
-LSYM(e_8t0a0)  a1_ne_0_b_l0
-       t0__8t0_a0
-       MILLIRET
-       r__r_t0
-
-       .procend
-       .end
-#endif
diff --git a/arch/parisc/lib/milli/milli.h b/arch/parisc/lib/milli/milli.h
deleted file mode 100644 (file)
index 19ac79f..0000000
+++ /dev/null
@@ -1,165 +0,0 @@
-/* 32 and 64-bit millicode, original author Hewlett-Packard
-   adapted for gcc by Paul Bame <bame@debian.org>
-   and Alan Modra <alan@linuxcare.com.au>.
-
-   Copyright 2001, 2002, 2003 Free Software Foundation, Inc.
-
-   This file is part of GCC and is released under the terms of
-   of the GNU General Public License as published by the Free Software
-   Foundation; either version 2, or (at your option) any later version.
-   See the file COPYING in the top-level GCC source directory for a copy
-   of the license.  */
-
-#ifndef _PA_MILLI_H_
-#define _PA_MILLI_H_
-
-#define L_dyncall
-#define L_divI
-#define L_divU
-#define L_remI
-#define L_remU
-#define L_div_const
-#define L_mulI
-
-#ifdef CONFIG_64BIT
-        .level  2.0w
-#endif
-
-/* Hardware General Registers.  */
-r0:    .reg    %r0
-r1:    .reg    %r1
-r2:    .reg    %r2
-r3:    .reg    %r3
-r4:    .reg    %r4
-r5:    .reg    %r5
-r6:    .reg    %r6
-r7:    .reg    %r7
-r8:    .reg    %r8
-r9:    .reg    %r9
-r10:   .reg    %r10
-r11:   .reg    %r11
-r12:   .reg    %r12
-r13:   .reg    %r13
-r14:   .reg    %r14
-r15:   .reg    %r15
-r16:   .reg    %r16
-r17:   .reg    %r17
-r18:   .reg    %r18
-r19:   .reg    %r19
-r20:   .reg    %r20
-r21:   .reg    %r21
-r22:   .reg    %r22
-r23:   .reg    %r23
-r24:   .reg    %r24
-r25:   .reg    %r25
-r26:   .reg    %r26
-r27:   .reg    %r27
-r28:   .reg    %r28
-r29:   .reg    %r29
-r30:   .reg    %r30
-r31:   .reg    %r31
-
-/* Hardware Space Registers.  */
-sr0:   .reg    %sr0
-sr1:   .reg    %sr1
-sr2:   .reg    %sr2
-sr3:   .reg    %sr3
-sr4:   .reg    %sr4
-sr5:   .reg    %sr5
-sr6:   .reg    %sr6
-sr7:   .reg    %sr7
-
-/* Hardware Floating Point Registers.  */
-fr0:   .reg    %fr0
-fr1:   .reg    %fr1
-fr2:   .reg    %fr2
-fr3:   .reg    %fr3
-fr4:   .reg    %fr4
-fr5:   .reg    %fr5
-fr6:   .reg    %fr6
-fr7:   .reg    %fr7
-fr8:   .reg    %fr8
-fr9:   .reg    %fr9
-fr10:  .reg    %fr10
-fr11:  .reg    %fr11
-fr12:  .reg    %fr12
-fr13:  .reg    %fr13
-fr14:  .reg    %fr14
-fr15:  .reg    %fr15
-
-/* Hardware Control Registers.  */
-cr11:  .reg    %cr11
-sar:   .reg    %cr11   /* Shift Amount Register */
-
-/* Software Architecture General Registers.  */
-rp:    .reg    r2      /* return pointer */
-#ifdef CONFIG_64BIT
-mrp:   .reg    r2      /* millicode return pointer */
-#else
-mrp:   .reg    r31     /* millicode return pointer */
-#endif
-ret0:  .reg    r28     /* return value */
-ret1:  .reg    r29     /* return value (high part of double) */
-sp:    .reg    r30     /* stack pointer */
-dp:    .reg    r27     /* data pointer */
-arg0:  .reg    r26     /* argument */
-arg1:  .reg    r25     /* argument or high part of double argument */
-arg2:  .reg    r24     /* argument */
-arg3:  .reg    r23     /* argument or high part of double argument */
-
-/* Software Architecture Space Registers.  */
-/*             sr0     ; return link from BLE */
-sret:  .reg    sr1     /* return value */
-sarg:  .reg    sr1     /* argument */
-/*             sr4     ; PC SPACE tracker */
-/*             sr5     ; process private data */
-
-/* Frame Offsets (millicode convention!)  Used when calling other
-   millicode routines.  Stack unwinding is dependent upon these
-   definitions.  */
-r31_slot:      .equ    -20     /* "current RP" slot */
-sr0_slot:      .equ    -16     /* "static link" slot */
-#if defined(CONFIG_64BIT)
-mrp_slot:       .equ    -16    /* "current RP" slot */
-psp_slot:       .equ    -8     /* "previous SP" slot */
-#else
-mrp_slot:      .equ    -20     /* "current RP" slot (replacing "r31_slot") */
-#endif
-
-
-#define DEFINE(name,value)name:        .EQU    value
-#define RDEFINE(name,value)name:       .REG    value
-#ifdef milliext
-#define MILLI_BE(lbl)   BE    lbl(sr7,r0)
-#define MILLI_BEN(lbl)  BE,n  lbl(sr7,r0)
-#define MILLI_BLE(lbl) BLE   lbl(sr7,r0)
-#define MILLI_BLEN(lbl)        BLE,n lbl(sr7,r0)
-#define MILLIRETN      BE,n  0(sr0,mrp)
-#define MILLIRET       BE    0(sr0,mrp)
-#define MILLI_RETN     BE,n  0(sr0,mrp)
-#define MILLI_RET      BE    0(sr0,mrp)
-#else
-#define MILLI_BE(lbl)  B     lbl
-#define MILLI_BEN(lbl)  B,n   lbl
-#define MILLI_BLE(lbl) BL    lbl,mrp
-#define MILLI_BLEN(lbl)        BL,n  lbl,mrp
-#define MILLIRETN      BV,n  0(mrp)
-#define MILLIRET       BV    0(mrp)
-#define MILLI_RETN     BV,n  0(mrp)
-#define MILLI_RET      BV    0(mrp)
-#endif
-
-#define CAT(a,b)       a##b
-
-#define SUBSPA_MILLI    .section .text
-#define SUBSPA_MILLI_DIV .section .text.div,"ax",@progbits! .align 16
-#define SUBSPA_MILLI_MUL .section .text.mul,"ax",@progbits! .align 16
-#define ATTR_MILLI
-#define SUBSPA_DATA     .section .data
-#define ATTR_DATA
-#define GLOBAL          $global$
-#define GSYM(sym)       !sym:
-#define LSYM(sym)       !CAT(.L,sym:)
-#define LREF(sym)       CAT(.L,sym)
-
-#endif /*_PA_MILLI_H_*/
diff --git a/arch/parisc/lib/milli/mulI.S b/arch/parisc/lib/milli/mulI.S
deleted file mode 100644 (file)
index 4c7e0c3..0000000
+++ /dev/null
@@ -1,474 +0,0 @@
-/* 32 and 64-bit millicode, original author Hewlett-Packard
-   adapted for gcc by Paul Bame <bame@debian.org>
-   and Alan Modra <alan@linuxcare.com.au>.
-
-   Copyright 2001, 2002, 2003 Free Software Foundation, Inc.
-
-   This file is part of GCC and is released under the terms of
-   of the GNU General Public License as published by the Free Software
-   Foundation; either version 2, or (at your option) any later version.
-   See the file COPYING in the top-level GCC source directory for a copy
-   of the license.  */
-
-#include "milli.h"
-
-#ifdef L_mulI
-/* VERSION "@(#)$$mulI $ Revision: 12.4 $ $ Date: 94/03/17 17:18:51 $" */
-/******************************************************************************
-This routine is used on PA2.0 processors when gcc -mno-fpregs is used
-
-ROUTINE:       $$mulI
-
-
-DESCRIPTION:   
-
-       $$mulI multiplies two single word integers, giving a single 
-       word result.  
-
-
-INPUT REGISTERS:
-
-       arg0 = Operand 1
-       arg1 = Operand 2
-       r31  == return pc
-       sr0  == return space when called externally 
-
-
-OUTPUT REGISTERS:
-
-       arg0 = undefined
-       arg1 = undefined
-       ret1 = result 
-
-OTHER REGISTERS AFFECTED:
-
-       r1   = undefined
-
-SIDE EFFECTS:
-
-       Causes a trap under the following conditions:  NONE
-       Changes memory at the following places:  NONE
-
-PERMISSIBLE CONTEXT:
-
-       Unwindable
-       Does not create a stack frame
-       Is usable for internal or external microcode
-
-DISCUSSION:
-
-       Calls other millicode routines via mrp:  NONE
-       Calls other millicode routines:  NONE
-
-***************************************************************************/
-
-
-#define        a0      %arg0
-#define        a1      %arg1
-#define        t0      %r1
-#define        r       %ret1
-
-#define        a0__128a0       zdep    a0,24,25,a0
-#define        a0__256a0       zdep    a0,23,24,a0
-#define        a1_ne_0_b_l0    comb,<> a1,0,LREF(l0)
-#define        a1_ne_0_b_l1    comb,<> a1,0,LREF(l1)
-#define        a1_ne_0_b_l2    comb,<> a1,0,LREF(l2)
-#define        b_n_ret_t0      b,n     LREF(ret_t0)
-#define        b_e_shift       b       LREF(e_shift)
-#define        b_e_t0ma0       b       LREF(e_t0ma0)
-#define        b_e_t0          b       LREF(e_t0)
-#define        b_e_t0a0        b       LREF(e_t0a0)
-#define        b_e_t02a0       b       LREF(e_t02a0)
-#define        b_e_t04a0       b       LREF(e_t04a0)
-#define        b_e_2t0         b       LREF(e_2t0)
-#define        b_e_2t0a0       b       LREF(e_2t0a0)
-#define        b_e_2t04a0      b       LREF(e2t04a0)
-#define        b_e_3t0         b       LREF(e_3t0)
-#define        b_e_4t0         b       LREF(e_4t0)
-#define        b_e_4t0a0       b       LREF(e_4t0a0)
-#define        b_e_4t08a0      b       LREF(e4t08a0)
-#define        b_e_5t0         b       LREF(e_5t0)
-#define        b_e_8t0         b       LREF(e_8t0)
-#define        b_e_8t0a0       b       LREF(e_8t0a0)
-#define        r__r_a0         add     r,a0,r
-#define        r__r_2a0        sh1add  a0,r,r
-#define        r__r_4a0        sh2add  a0,r,r
-#define        r__r_8a0        sh3add  a0,r,r
-#define        r__r_t0         add     r,t0,r
-#define        r__r_2t0        sh1add  t0,r,r
-#define        r__r_4t0        sh2add  t0,r,r
-#define        r__r_8t0        sh3add  t0,r,r
-#define        t0__3a0         sh1add  a0,a0,t0
-#define        t0__4a0         sh2add  a0,0,t0
-#define        t0__5a0         sh2add  a0,a0,t0
-#define        t0__8a0         sh3add  a0,0,t0
-#define        t0__9a0         sh3add  a0,a0,t0
-#define        t0__16a0        zdep    a0,27,28,t0
-#define        t0__32a0        zdep    a0,26,27,t0
-#define        t0__64a0        zdep    a0,25,26,t0
-#define        t0__128a0       zdep    a0,24,25,t0
-#define        t0__t0ma0       sub     t0,a0,t0
-#define        t0__t0_a0       add     t0,a0,t0
-#define        t0__t0_2a0      sh1add  a0,t0,t0
-#define        t0__t0_4a0      sh2add  a0,t0,t0
-#define        t0__t0_8a0      sh3add  a0,t0,t0
-#define        t0__2t0_a0      sh1add  t0,a0,t0
-#define        t0__3t0         sh1add  t0,t0,t0
-#define        t0__4t0         sh2add  t0,0,t0
-#define        t0__4t0_a0      sh2add  t0,a0,t0
-#define        t0__5t0         sh2add  t0,t0,t0
-#define        t0__8t0         sh3add  t0,0,t0
-#define        t0__8t0_a0      sh3add  t0,a0,t0
-#define        t0__9t0         sh3add  t0,t0,t0
-#define        t0__16t0        zdep    t0,27,28,t0
-#define        t0__32t0        zdep    t0,26,27,t0
-#define        t0__256a0       zdep    a0,23,24,t0
-
-
-       SUBSPA_MILLI
-       ATTR_MILLI
-       .align 16
-       .proc
-       .callinfo millicode
-       .export $$mulI,millicode
-GSYM($$mulI)   
-       combt,<<=       a1,a0,LREF(l4)  /* swap args if unsigned a1>a0 */
-       copy            0,r             /* zero out the result */
-       xor             a0,a1,a0        /* swap a0 & a1 using the */
-       xor             a0,a1,a1        /*  old xor trick */
-       xor             a0,a1,a0
-LSYM(l4)
-       combt,<=        0,a0,LREF(l3)           /* if a0>=0 then proceed like unsigned */
-       zdep            a1,30,8,t0      /* t0 = (a1&0xff)<<1 ********* */
-       sub,>           0,a1,t0         /* otherwise negate both and */
-       combt,<=,n      a0,t0,LREF(l2)  /*  swap back if |a0|<|a1| */
-       sub             0,a0,a1
-       movb,tr,n       t0,a0,LREF(l2)  /* 10th inst.  */
-
-LSYM(l0)       r__r_t0                         /* add in this partial product */
-LSYM(l1)       a0__256a0                       /* a0 <<= 8 ****************** */
-LSYM(l2)       zdep            a1,30,8,t0      /* t0 = (a1&0xff)<<1 ********* */
-LSYM(l3)       blr             t0,0            /* case on these 8 bits ****** */
-               extru           a1,23,24,a1     /* a1 >>= 8 ****************** */
-
-/*16 insts before this.  */
-/*                       a0 <<= 8 ************************** */
-LSYM(x0)       a1_ne_0_b_l2    ! a0__256a0     ! MILLIRETN     ! nop
-LSYM(x1)       a1_ne_0_b_l1    ! r__r_a0       ! MILLIRETN     ! nop
-LSYM(x2)       a1_ne_0_b_l1    ! r__r_2a0      ! MILLIRETN     ! nop
-LSYM(x3)       a1_ne_0_b_l0    ! t0__3a0       ! MILLIRET      ! r__r_t0
-LSYM(x4)       a1_ne_0_b_l1    ! r__r_4a0      ! MILLIRETN     ! nop
-LSYM(x5)       a1_ne_0_b_l0    ! t0__5a0       ! MILLIRET      ! r__r_t0
-LSYM(x6)       t0__3a0         ! a1_ne_0_b_l1  ! r__r_2t0      ! MILLIRETN
-LSYM(x7)       t0__3a0         ! a1_ne_0_b_l0  ! r__r_4a0      ! b_n_ret_t0
-LSYM(x8)       a1_ne_0_b_l1    ! r__r_8a0      ! MILLIRETN     ! nop
-LSYM(x9)       a1_ne_0_b_l0    ! t0__9a0       ! MILLIRET      ! r__r_t0
-LSYM(x10)      t0__5a0         ! a1_ne_0_b_l1  ! r__r_2t0      ! MILLIRETN
-LSYM(x11)      t0__3a0         ! a1_ne_0_b_l0  ! r__r_8a0      ! b_n_ret_t0
-LSYM(x12)      t0__3a0         ! a1_ne_0_b_l1  ! r__r_4t0      ! MILLIRETN
-LSYM(x13)      t0__5a0         ! a1_ne_0_b_l0  ! r__r_8a0      ! b_n_ret_t0
-LSYM(x14)      t0__3a0         ! t0__2t0_a0    ! b_e_shift     ! r__r_2t0
-LSYM(x15)      t0__5a0         ! a1_ne_0_b_l0  ! t0__3t0       ! b_n_ret_t0
-LSYM(x16)      t0__16a0        ! a1_ne_0_b_l1  ! r__r_t0       ! MILLIRETN
-LSYM(x17)      t0__9a0         ! a1_ne_0_b_l0  ! t0__t0_8a0    ! b_n_ret_t0
-LSYM(x18)      t0__9a0         ! a1_ne_0_b_l1  ! r__r_2t0      ! MILLIRETN
-LSYM(x19)      t0__9a0         ! a1_ne_0_b_l0  ! t0__2t0_a0    ! b_n_ret_t0
-LSYM(x20)      t0__5a0         ! a1_ne_0_b_l1  ! r__r_4t0      ! MILLIRETN
-LSYM(x21)      t0__5a0         ! a1_ne_0_b_l0  ! t0__4t0_a0    ! b_n_ret_t0
-LSYM(x22)      t0__5a0         ! t0__2t0_a0    ! b_e_shift     ! r__r_2t0
-LSYM(x23)      t0__5a0         ! t0__2t0_a0    ! b_e_t0        ! t0__2t0_a0
-LSYM(x24)      t0__3a0         ! a1_ne_0_b_l1  ! r__r_8t0      ! MILLIRETN
-LSYM(x25)      t0__5a0         ! a1_ne_0_b_l0  ! t0__5t0       ! b_n_ret_t0
-LSYM(x26)      t0__3a0         ! t0__4t0_a0    ! b_e_shift     ! r__r_2t0
-LSYM(x27)      t0__3a0         ! a1_ne_0_b_l0  ! t0__9t0       ! b_n_ret_t0
-LSYM(x28)      t0__3a0         ! t0__2t0_a0    ! b_e_shift     ! r__r_4t0
-LSYM(x29)      t0__3a0         ! t0__2t0_a0    ! b_e_t0        ! t0__4t0_a0
-LSYM(x30)      t0__5a0         ! t0__3t0       ! b_e_shift     ! r__r_2t0
-LSYM(x31)      t0__32a0        ! a1_ne_0_b_l0  ! t0__t0ma0     ! b_n_ret_t0
-LSYM(x32)      t0__32a0        ! a1_ne_0_b_l1  ! r__r_t0       ! MILLIRETN
-LSYM(x33)      t0__8a0         ! a1_ne_0_b_l0  ! t0__4t0_a0    ! b_n_ret_t0
-LSYM(x34)      t0__16a0        ! t0__t0_a0     ! b_e_shift     ! r__r_2t0
-LSYM(x35)      t0__9a0         ! t0__3t0       ! b_e_t0        ! t0__t0_8a0
-LSYM(x36)      t0__9a0         ! a1_ne_0_b_l1  ! r__r_4t0      ! MILLIRETN
-LSYM(x37)      t0__9a0         ! a1_ne_0_b_l0  ! t0__4t0_a0    ! b_n_ret_t0
-LSYM(x38)      t0__9a0         ! t0__2t0_a0    ! b_e_shift     ! r__r_2t0
-LSYM(x39)      t0__9a0         ! t0__2t0_a0    ! b_e_t0        ! t0__2t0_a0
-LSYM(x40)      t0__5a0         ! a1_ne_0_b_l1  ! r__r_8t0      ! MILLIRETN
-LSYM(x41)      t0__5a0         ! a1_ne_0_b_l0  ! t0__8t0_a0    ! b_n_ret_t0
-LSYM(x42)      t0__5a0         ! t0__4t0_a0    ! b_e_shift     ! r__r_2t0
-LSYM(x43)      t0__5a0         ! t0__4t0_a0    ! b_e_t0        ! t0__2t0_a0
-LSYM(x44)      t0__5a0         ! t0__2t0_a0    ! b_e_shift     ! r__r_4t0
-LSYM(x45)      t0__9a0         ! a1_ne_0_b_l0  ! t0__5t0       ! b_n_ret_t0
-LSYM(x46)      t0__9a0         ! t0__5t0       ! b_e_t0        ! t0__t0_a0
-LSYM(x47)      t0__9a0         ! t0__5t0       ! b_e_t0        ! t0__t0_2a0
-LSYM(x48)      t0__3a0         ! a1_ne_0_b_l0  ! t0__16t0      ! b_n_ret_t0
-LSYM(x49)      t0__9a0         ! t0__5t0       ! b_e_t0        ! t0__t0_4a0
-LSYM(x50)      t0__5a0         ! t0__5t0       ! b_e_shift     ! r__r_2t0
-LSYM(x51)      t0__9a0         ! t0__t0_8a0    ! b_e_t0        ! t0__3t0
-LSYM(x52)      t0__3a0         ! t0__4t0_a0    ! b_e_shift     ! r__r_4t0
-LSYM(x53)      t0__3a0         ! t0__4t0_a0    ! b_e_t0        ! t0__4t0_a0
-LSYM(x54)      t0__9a0         ! t0__3t0       ! b_e_shift     ! r__r_2t0
-LSYM(x55)      t0__9a0         ! t0__3t0       ! b_e_t0        ! t0__2t0_a0
-LSYM(x56)      t0__3a0         ! t0__2t0_a0    ! b_e_shift     ! r__r_8t0
-LSYM(x57)      t0__9a0         ! t0__2t0_a0    ! b_e_t0        ! t0__3t0
-LSYM(x58)      t0__3a0         ! t0__2t0_a0    ! b_e_2t0       ! t0__4t0_a0
-LSYM(x59)      t0__9a0         ! t0__2t0_a0    ! b_e_t02a0     ! t0__3t0
-LSYM(x60)      t0__5a0         ! t0__3t0       ! b_e_shift     ! r__r_4t0
-LSYM(x61)      t0__5a0         ! t0__3t0       ! b_e_t0        ! t0__4t0_a0
-LSYM(x62)      t0__32a0        ! t0__t0ma0     ! b_e_shift     ! r__r_2t0
-LSYM(x63)      t0__64a0        ! a1_ne_0_b_l0  ! t0__t0ma0     ! b_n_ret_t0
-LSYM(x64)      t0__64a0        ! a1_ne_0_b_l1  ! r__r_t0       ! MILLIRETN
-LSYM(x65)      t0__8a0         ! a1_ne_0_b_l0  ! t0__8t0_a0    ! b_n_ret_t0
-LSYM(x66)      t0__32a0        ! t0__t0_a0     ! b_e_shift     ! r__r_2t0
-LSYM(x67)      t0__8a0         ! t0__4t0_a0    ! b_e_t0        ! t0__2t0_a0
-LSYM(x68)      t0__8a0         ! t0__2t0_a0    ! b_e_shift     ! r__r_4t0
-LSYM(x69)      t0__8a0         ! t0__2t0_a0    ! b_e_t0        ! t0__4t0_a0
-LSYM(x70)      t0__64a0        ! t0__t0_4a0    ! b_e_t0        ! t0__t0_2a0
-LSYM(x71)      t0__9a0         ! t0__8t0       ! b_e_t0        ! t0__t0ma0
-LSYM(x72)      t0__9a0         ! a1_ne_0_b_l1  ! r__r_8t0      ! MILLIRETN
-LSYM(x73)      t0__9a0         ! t0__8t0_a0    ! b_e_shift     ! r__r_t0
-LSYM(x74)      t0__9a0         ! t0__4t0_a0    ! b_e_shift     ! r__r_2t0
-LSYM(x75)      t0__9a0         ! t0__4t0_a0    ! b_e_t0        ! t0__2t0_a0
-LSYM(x76)      t0__9a0         ! t0__2t0_a0    ! b_e_shift     ! r__r_4t0
-LSYM(x77)      t0__9a0         ! t0__2t0_a0    ! b_e_t0        ! t0__4t0_a0
-LSYM(x78)      t0__9a0         ! t0__2t0_a0    ! b_e_2t0       ! t0__2t0_a0
-LSYM(x79)      t0__16a0        ! t0__5t0       ! b_e_t0        ! t0__t0ma0
-LSYM(x80)      t0__16a0        ! t0__5t0       ! b_e_shift     ! r__r_t0
-LSYM(x81)      t0__9a0         ! t0__9t0       ! b_e_shift     ! r__r_t0
-LSYM(x82)      t0__5a0         ! t0__8t0_a0    ! b_e_shift     ! r__r_2t0
-LSYM(x83)      t0__5a0         ! t0__8t0_a0    ! b_e_t0        ! t0__2t0_a0
-LSYM(x84)      t0__5a0         ! t0__4t0_a0    ! b_e_shift     ! r__r_4t0
-LSYM(x85)      t0__8a0         ! t0__2t0_a0    ! b_e_t0        ! t0__5t0
-LSYM(x86)      t0__5a0         ! t0__4t0_a0    ! b_e_2t0       ! t0__2t0_a0
-LSYM(x87)      t0__9a0         ! t0__9t0       ! b_e_t02a0     ! t0__t0_4a0
-LSYM(x88)      t0__5a0         ! t0__2t0_a0    ! b_e_shift     ! r__r_8t0
-LSYM(x89)      t0__5a0         ! t0__2t0_a0    ! b_e_t0        ! t0__8t0_a0
-LSYM(x90)      t0__9a0         ! t0__5t0       ! b_e_shift     ! r__r_2t0
-LSYM(x91)      t0__9a0         ! t0__5t0       ! b_e_t0        ! t0__2t0_a0
-LSYM(x92)      t0__5a0         ! t0__2t0_a0    ! b_e_4t0       ! t0__2t0_a0
-LSYM(x93)      t0__32a0        ! t0__t0ma0     ! b_e_t0        ! t0__3t0
-LSYM(x94)      t0__9a0         ! t0__5t0       ! b_e_2t0       ! t0__t0_2a0
-LSYM(x95)      t0__9a0         ! t0__2t0_a0    ! b_e_t0        ! t0__5t0
-LSYM(x96)      t0__8a0         ! t0__3t0       ! b_e_shift     ! r__r_4t0
-LSYM(x97)      t0__8a0         ! t0__3t0       ! b_e_t0        ! t0__4t0_a0
-LSYM(x98)      t0__32a0        ! t0__3t0       ! b_e_t0        ! t0__t0_2a0
-LSYM(x99)      t0__8a0         ! t0__4t0_a0    ! b_e_t0        ! t0__3t0
-LSYM(x100)     t0__5a0         ! t0__5t0       ! b_e_shift     ! r__r_4t0
-LSYM(x101)     t0__5a0         ! t0__5t0       ! b_e_t0        ! t0__4t0_a0
-LSYM(x102)     t0__32a0        ! t0__t0_2a0    ! b_e_t0        ! t0__3t0
-LSYM(x103)     t0__5a0         ! t0__5t0       ! b_e_t02a0     ! t0__4t0_a0
-LSYM(x104)     t0__3a0         ! t0__4t0_a0    ! b_e_shift     ! r__r_8t0
-LSYM(x105)     t0__5a0         ! t0__4t0_a0    ! b_e_t0        ! t0__5t0
-LSYM(x106)     t0__3a0         ! t0__4t0_a0    ! b_e_2t0       ! t0__4t0_a0
-LSYM(x107)     t0__9a0         ! t0__t0_4a0    ! b_e_t02a0     ! t0__8t0_a0
-LSYM(x108)     t0__9a0         ! t0__3t0       ! b_e_shift     ! r__r_4t0
-LSYM(x109)     t0__9a0         ! t0__3t0       ! b_e_t0        ! t0__4t0_a0
-LSYM(x110)     t0__9a0         ! t0__3t0       ! b_e_2t0       ! t0__2t0_a0
-LSYM(x111)     t0__9a0         ! t0__4t0_a0    ! b_e_t0        ! t0__3t0
-LSYM(x112)     t0__3a0         ! t0__2t0_a0    ! b_e_t0        ! t0__16t0
-LSYM(x113)     t0__9a0         ! t0__4t0_a0    ! b_e_t02a0     ! t0__3t0
-LSYM(x114)     t0__9a0         ! t0__2t0_a0    ! b_e_2t0       ! t0__3t0
-LSYM(x115)     t0__9a0         ! t0__2t0_a0    ! b_e_2t0a0     ! t0__3t0
-LSYM(x116)     t0__3a0         ! t0__2t0_a0    ! b_e_4t0       ! t0__4t0_a0
-LSYM(x117)     t0__3a0         ! t0__4t0_a0    ! b_e_t0        ! t0__9t0
-LSYM(x118)     t0__3a0         ! t0__4t0_a0    ! b_e_t0a0      ! t0__9t0
-LSYM(x119)     t0__3a0         ! t0__4t0_a0    ! b_e_t02a0     ! t0__9t0
-LSYM(x120)     t0__5a0         ! t0__3t0       ! b_e_shift     ! r__r_8t0
-LSYM(x121)     t0__5a0         ! t0__3t0       ! b_e_t0        ! t0__8t0_a0
-LSYM(x122)     t0__5a0         ! t0__3t0       ! b_e_2t0       ! t0__4t0_a0
-LSYM(x123)     t0__5a0         ! t0__8t0_a0    ! b_e_t0        ! t0__3t0
-LSYM(x124)     t0__32a0        ! t0__t0ma0     ! b_e_shift     ! r__r_4t0
-LSYM(x125)     t0__5a0         ! t0__5t0       ! b_e_t0        ! t0__5t0
-LSYM(x126)     t0__64a0        ! t0__t0ma0     ! b_e_shift     ! r__r_2t0
-LSYM(x127)     t0__128a0       ! a1_ne_0_b_l0  ! t0__t0ma0     ! b_n_ret_t0
-LSYM(x128)     t0__128a0       ! a1_ne_0_b_l1  ! r__r_t0       ! MILLIRETN
-LSYM(x129)     t0__128a0       ! a1_ne_0_b_l0  ! t0__t0_a0     ! b_n_ret_t0
-LSYM(x130)     t0__64a0        ! t0__t0_a0     ! b_e_shift     ! r__r_2t0
-LSYM(x131)     t0__8a0         ! t0__8t0_a0    ! b_e_t0        ! t0__2t0_a0
-LSYM(x132)     t0__8a0         ! t0__4t0_a0    ! b_e_shift     ! r__r_4t0
-LSYM(x133)     t0__8a0         ! t0__4t0_a0    ! b_e_t0        ! t0__4t0_a0
-LSYM(x134)     t0__8a0         ! t0__4t0_a0    ! b_e_2t0       ! t0__2t0_a0
-LSYM(x135)     t0__9a0         ! t0__5t0       ! b_e_t0        ! t0__3t0
-LSYM(x136)     t0__8a0         ! t0__2t0_a0    ! b_e_shift     ! r__r_8t0
-LSYM(x137)     t0__8a0         ! t0__2t0_a0    ! b_e_t0        ! t0__8t0_a0
-LSYM(x138)     t0__8a0         ! t0__2t0_a0    ! b_e_2t0       ! t0__4t0_a0
-LSYM(x139)     t0__8a0         ! t0__2t0_a0    ! b_e_2t0a0     ! t0__4t0_a0
-LSYM(x140)     t0__3a0         ! t0__2t0_a0    ! b_e_4t0       ! t0__5t0
-LSYM(x141)     t0__8a0         ! t0__2t0_a0    ! b_e_4t0a0     ! t0__2t0_a0
-LSYM(x142)     t0__9a0         ! t0__8t0       ! b_e_2t0       ! t0__t0ma0
-LSYM(x143)     t0__16a0        ! t0__9t0       ! b_e_t0        ! t0__t0ma0
-LSYM(x144)     t0__9a0         ! t0__8t0       ! b_e_shift     ! r__r_2t0
-LSYM(x145)     t0__9a0         ! t0__8t0       ! b_e_t0        ! t0__2t0_a0
-LSYM(x146)     t0__9a0         ! t0__8t0_a0    ! b_e_shift     ! r__r_2t0
-LSYM(x147)     t0__9a0         ! t0__8t0_a0    ! b_e_t0        ! t0__2t0_a0
-LSYM(x148)     t0__9a0         ! t0__4t0_a0    ! b_e_shift     ! r__r_4t0
-LSYM(x149)     t0__9a0         ! t0__4t0_a0    ! b_e_t0        ! t0__4t0_a0
-LSYM(x150)     t0__9a0         ! t0__4t0_a0    ! b_e_2t0       ! t0__2t0_a0
-LSYM(x151)     t0__9a0         ! t0__4t0_a0    ! b_e_2t0a0     ! t0__2t0_a0
-LSYM(x152)     t0__9a0         ! t0__2t0_a0    ! b_e_shift     ! r__r_8t0
-LSYM(x153)     t0__9a0         ! t0__2t0_a0    ! b_e_t0        ! t0__8t0_a0
-LSYM(x154)     t0__9a0         ! t0__2t0_a0    ! b_e_2t0       ! t0__4t0_a0
-LSYM(x155)     t0__32a0        ! t0__t0ma0     ! b_e_t0        ! t0__5t0
-LSYM(x156)     t0__9a0         ! t0__2t0_a0    ! b_e_4t0       ! t0__2t0_a0
-LSYM(x157)     t0__32a0        ! t0__t0ma0     ! b_e_t02a0     ! t0__5t0
-LSYM(x158)     t0__16a0        ! t0__5t0       ! b_e_2t0       ! t0__t0ma0
-LSYM(x159)     t0__32a0        ! t0__5t0       ! b_e_t0        ! t0__t0ma0
-LSYM(x160)     t0__5a0         ! t0__4t0       ! b_e_shift     ! r__r_8t0
-LSYM(x161)     t0__8a0         ! t0__5t0       ! b_e_t0        ! t0__4t0_a0
-LSYM(x162)     t0__9a0         ! t0__9t0       ! b_e_shift     ! r__r_2t0
-LSYM(x163)     t0__9a0         ! t0__9t0       ! b_e_t0        ! t0__2t0_a0
-LSYM(x164)     t0__5a0         ! t0__8t0_a0    ! b_e_shift     ! r__r_4t0
-LSYM(x165)     t0__8a0         ! t0__4t0_a0    ! b_e_t0        ! t0__5t0
-LSYM(x166)     t0__5a0         ! t0__8t0_a0    ! b_e_2t0       ! t0__2t0_a0
-LSYM(x167)     t0__5a0         ! t0__8t0_a0    ! b_e_2t0a0     ! t0__2t0_a0
-LSYM(x168)     t0__5a0         ! t0__4t0_a0    ! b_e_shift     ! r__r_8t0
-LSYM(x169)     t0__5a0         ! t0__4t0_a0    ! b_e_t0        ! t0__8t0_a0
-LSYM(x170)     t0__32a0        ! t0__t0_2a0    ! b_e_t0        ! t0__5t0
-LSYM(x171)     t0__9a0         ! t0__2t0_a0    ! b_e_t0        ! t0__9t0
-LSYM(x172)     t0__5a0         ! t0__4t0_a0    ! b_e_4t0       ! t0__2t0_a0
-LSYM(x173)     t0__9a0         ! t0__2t0_a0    ! b_e_t02a0     ! t0__9t0
-LSYM(x174)     t0__32a0        ! t0__t0_2a0    ! b_e_t04a0     ! t0__5t0
-LSYM(x175)     t0__8a0         ! t0__2t0_a0    ! b_e_5t0       ! t0__2t0_a0
-LSYM(x176)     t0__5a0         ! t0__4t0_a0    ! b_e_8t0       ! t0__t0_a0
-LSYM(x177)     t0__5a0         ! t0__4t0_a0    ! b_e_8t0a0     ! t0__t0_a0
-LSYM(x178)     t0__5a0         ! t0__2t0_a0    ! b_e_2t0       ! t0__8t0_a0
-LSYM(x179)     t0__5a0         ! t0__2t0_a0    ! b_e_2t0a0     ! t0__8t0_a0
-LSYM(x180)     t0__9a0         ! t0__5t0       ! b_e_shift     ! r__r_4t0
-LSYM(x181)     t0__9a0         ! t0__5t0       ! b_e_t0        ! t0__4t0_a0
-LSYM(x182)     t0__9a0         ! t0__5t0       ! b_e_2t0       ! t0__2t0_a0
-LSYM(x183)     t0__9a0         ! t0__5t0       ! b_e_2t0a0     ! t0__2t0_a0
-LSYM(x184)     t0__5a0         ! t0__9t0       ! b_e_4t0       ! t0__t0_a0
-LSYM(x185)     t0__9a0         ! t0__4t0_a0    ! b_e_t0        ! t0__5t0
-LSYM(x186)     t0__32a0        ! t0__t0ma0     ! b_e_2t0       ! t0__3t0
-LSYM(x187)     t0__9a0         ! t0__4t0_a0    ! b_e_t02a0     ! t0__5t0
-LSYM(x188)     t0__9a0         ! t0__5t0       ! b_e_4t0       ! t0__t0_2a0
-LSYM(x189)     t0__5a0         ! t0__4t0_a0    ! b_e_t0        ! t0__9t0
-LSYM(x190)     t0__9a0         ! t0__2t0_a0    ! b_e_2t0       ! t0__5t0
-LSYM(x191)     t0__64a0        ! t0__3t0       ! b_e_t0        ! t0__t0ma0
-LSYM(x192)     t0__8a0         ! t0__3t0       ! b_e_shift     ! r__r_8t0
-LSYM(x193)     t0__8a0         ! t0__3t0       ! b_e_t0        ! t0__8t0_a0
-LSYM(x194)     t0__8a0         ! t0__3t0       ! b_e_2t0       ! t0__4t0_a0
-LSYM(x195)     t0__8a0         ! t0__8t0_a0    ! b_e_t0        ! t0__3t0
-LSYM(x196)     t0__8a0         ! t0__3t0       ! b_e_4t0       ! t0__2t0_a0
-LSYM(x197)     t0__8a0         ! t0__3t0       ! b_e_4t0a0     ! t0__2t0_a0
-LSYM(x198)     t0__64a0        ! t0__t0_2a0    ! b_e_t0        ! t0__3t0
-LSYM(x199)     t0__8a0         ! t0__4t0_a0    ! b_e_2t0a0     ! t0__3t0
-LSYM(x200)     t0__5a0         ! t0__5t0       ! b_e_shift     ! r__r_8t0
-LSYM(x201)     t0__5a0         ! t0__5t0       ! b_e_t0        ! t0__8t0_a0
-LSYM(x202)     t0__5a0         ! t0__5t0       ! b_e_2t0       ! t0__4t0_a0
-LSYM(x203)     t0__5a0         ! t0__5t0       ! b_e_2t0a0     ! t0__4t0_a0
-LSYM(x204)     t0__8a0         ! t0__2t0_a0    ! b_e_4t0       ! t0__3t0
-LSYM(x205)     t0__5a0         ! t0__8t0_a0    ! b_e_t0        ! t0__5t0
-LSYM(x206)     t0__64a0        ! t0__t0_4a0    ! b_e_t02a0     ! t0__3t0
-LSYM(x207)     t0__8a0         ! t0__2t0_a0    ! b_e_3t0       ! t0__4t0_a0
-LSYM(x208)     t0__5a0         ! t0__5t0       ! b_e_8t0       ! t0__t0_a0
-LSYM(x209)     t0__5a0         ! t0__5t0       ! b_e_8t0a0     ! t0__t0_a0
-LSYM(x210)     t0__5a0         ! t0__4t0_a0    ! b_e_2t0       ! t0__5t0
-LSYM(x211)     t0__5a0         ! t0__4t0_a0    ! b_e_2t0a0     ! t0__5t0
-LSYM(x212)     t0__3a0         ! t0__4t0_a0    ! b_e_4t0       ! t0__4t0_a0
-LSYM(x213)     t0__3a0         ! t0__4t0_a0    ! b_e_4t0a0     ! t0__4t0_a0
-LSYM(x214)     t0__9a0         ! t0__t0_4a0    ! b_e_2t04a0    ! t0__8t0_a0
-LSYM(x215)     t0__5a0         ! t0__4t0_a0    ! b_e_5t0       ! t0__2t0_a0
-LSYM(x216)     t0__9a0         ! t0__3t0       ! b_e_shift     ! r__r_8t0
-LSYM(x217)     t0__9a0         ! t0__3t0       ! b_e_t0        ! t0__8t0_a0
-LSYM(x218)     t0__9a0         ! t0__3t0       ! b_e_2t0       ! t0__4t0_a0
-LSYM(x219)     t0__9a0         ! t0__8t0_a0    ! b_e_t0        ! t0__3t0
-LSYM(x220)     t0__3a0         ! t0__9t0       ! b_e_4t0       ! t0__2t0_a0
-LSYM(x221)     t0__3a0         ! t0__9t0       ! b_e_4t0a0     ! t0__2t0_a0
-LSYM(x222)     t0__9a0         ! t0__4t0_a0    ! b_e_2t0       ! t0__3t0
-LSYM(x223)     t0__9a0         ! t0__4t0_a0    ! b_e_2t0a0     ! t0__3t0
-LSYM(x224)     t0__9a0         ! t0__3t0       ! b_e_8t0       ! t0__t0_a0
-LSYM(x225)     t0__9a0         ! t0__5t0       ! b_e_t0        ! t0__5t0
-LSYM(x226)     t0__3a0         ! t0__2t0_a0    ! b_e_t02a0     ! t0__32t0
-LSYM(x227)     t0__9a0         ! t0__5t0       ! b_e_t02a0     ! t0__5t0
-LSYM(x228)     t0__9a0         ! t0__2t0_a0    ! b_e_4t0       ! t0__3t0
-LSYM(x229)     t0__9a0         ! t0__2t0_a0    ! b_e_4t0a0     ! t0__3t0
-LSYM(x230)     t0__9a0         ! t0__5t0       ! b_e_5t0       ! t0__t0_a0
-LSYM(x231)     t0__9a0         ! t0__2t0_a0    ! b_e_3t0       ! t0__4t0_a0
-LSYM(x232)     t0__3a0         ! t0__2t0_a0    ! b_e_8t0       ! t0__4t0_a0
-LSYM(x233)     t0__3a0         ! t0__2t0_a0    ! b_e_8t0a0     ! t0__4t0_a0
-LSYM(x234)     t0__3a0         ! t0__4t0_a0    ! b_e_2t0       ! t0__9t0
-LSYM(x235)     t0__3a0         ! t0__4t0_a0    ! b_e_2t0a0     ! t0__9t0
-LSYM(x236)     t0__9a0         ! t0__2t0_a0    ! b_e_4t08a0    ! t0__3t0
-LSYM(x237)     t0__16a0        ! t0__5t0       ! b_e_3t0       ! t0__t0ma0
-LSYM(x238)     t0__3a0         ! t0__4t0_a0    ! b_e_2t04a0    ! t0__9t0
-LSYM(x239)     t0__16a0        ! t0__5t0       ! b_e_t0ma0     ! t0__3t0
-LSYM(x240)     t0__9a0         ! t0__t0_a0     ! b_e_8t0       ! t0__3t0
-LSYM(x241)     t0__9a0         ! t0__t0_a0     ! b_e_8t0a0     ! t0__3t0
-LSYM(x242)     t0__5a0         ! t0__3t0       ! b_e_2t0       ! t0__8t0_a0
-LSYM(x243)     t0__9a0         ! t0__9t0       ! b_e_t0        ! t0__3t0
-LSYM(x244)     t0__5a0         ! t0__3t0       ! b_e_4t0       ! t0__4t0_a0
-LSYM(x245)     t0__8a0         ! t0__3t0       ! b_e_5t0       ! t0__2t0_a0
-LSYM(x246)     t0__5a0         ! t0__8t0_a0    ! b_e_2t0       ! t0__3t0
-LSYM(x247)     t0__5a0         ! t0__8t0_a0    ! b_e_2t0a0     ! t0__3t0
-LSYM(x248)     t0__32a0        ! t0__t0ma0     ! b_e_shift     ! r__r_8t0
-LSYM(x249)     t0__32a0        ! t0__t0ma0     ! b_e_t0        ! t0__8t0_a0
-LSYM(x250)     t0__5a0         ! t0__5t0       ! b_e_2t0       ! t0__5t0
-LSYM(x251)     t0__5a0         ! t0__5t0       ! b_e_2t0a0     ! t0__5t0
-LSYM(x252)     t0__64a0        ! t0__t0ma0     ! b_e_shift     ! r__r_4t0
-LSYM(x253)     t0__64a0        ! t0__t0ma0     ! b_e_t0        ! t0__4t0_a0
-LSYM(x254)     t0__128a0       ! t0__t0ma0     ! b_e_shift     ! r__r_2t0
-LSYM(x255)     t0__256a0       ! a1_ne_0_b_l0  ! t0__t0ma0     ! b_n_ret_t0
-/*1040 insts before this.  */
-LSYM(ret_t0)   MILLIRET
-LSYM(e_t0)     r__r_t0
-LSYM(e_shift)  a1_ne_0_b_l2
-       a0__256a0       /* a0 <<= 8 *********** */
-       MILLIRETN
-LSYM(e_t0ma0)  a1_ne_0_b_l0
-       t0__t0ma0
-       MILLIRET
-       r__r_t0
-LSYM(e_t0a0)   a1_ne_0_b_l0
-       t0__t0_a0
-       MILLIRET
-       r__r_t0
-LSYM(e_t02a0)  a1_ne_0_b_l0
-       t0__t0_2a0
-       MILLIRET
-       r__r_t0
-LSYM(e_t04a0)  a1_ne_0_b_l0
-       t0__t0_4a0
-       MILLIRET
-       r__r_t0
-LSYM(e_2t0)    a1_ne_0_b_l1
-       r__r_2t0
-       MILLIRETN
-LSYM(e_2t0a0)  a1_ne_0_b_l0
-       t0__2t0_a0
-       MILLIRET
-       r__r_t0
-LSYM(e2t04a0)  t0__t0_2a0
-       a1_ne_0_b_l1
-       r__r_2t0
-       MILLIRETN
-LSYM(e_3t0)    a1_ne_0_b_l0
-       t0__3t0
-       MILLIRET
-       r__r_t0
-LSYM(e_4t0)    a1_ne_0_b_l1
-       r__r_4t0
-       MILLIRETN
-LSYM(e_4t0a0)  a1_ne_0_b_l0
-       t0__4t0_a0
-       MILLIRET
-       r__r_t0
-LSYM(e4t08a0)  t0__t0_2a0
-       a1_ne_0_b_l1
-       r__r_4t0
-       MILLIRETN
-LSYM(e_5t0)    a1_ne_0_b_l0
-       t0__5t0
-       MILLIRET
-       r__r_t0
-LSYM(e_8t0)    a1_ne_0_b_l1
-       r__r_8t0
-       MILLIRETN
-LSYM(e_8t0a0)  a1_ne_0_b_l0
-       t0__8t0_a0
-       MILLIRET
-       r__r_t0
-
-       .procend
-       .end
-#endif
diff --git a/arch/parisc/lib/milli/remI.S b/arch/parisc/lib/milli/remI.S
deleted file mode 100644 (file)
index 63bc094..0000000
+++ /dev/null
@@ -1,185 +0,0 @@
-/* 32 and 64-bit millicode, original author Hewlett-Packard
-   adapted for gcc by Paul Bame <bame@debian.org>
-   and Alan Modra <alan@linuxcare.com.au>.
-
-   Copyright 2001, 2002, 2003 Free Software Foundation, Inc.
-
-   This file is part of GCC and is released under the terms of
-   of the GNU General Public License as published by the Free Software
-   Foundation; either version 2, or (at your option) any later version.
-   See the file COPYING in the top-level GCC source directory for a copy
-   of the license.  */
-
-#include "milli.h"
-
-#ifdef L_remI
-/* ROUTINE:    $$remI
-
-   DESCRIPTION:
-   .   $$remI returns the remainder of the division of two signed 32-bit
-   .   integers.  The sign of the remainder is the same as the sign of
-   .   the dividend.
-
-
-   INPUT REGISTERS:
-   .   arg0 == dividend
-   .   arg1 == divisor
-   .   mrp  == return pc
-   .   sr0  == return space when called externally
-
-   OUTPUT REGISTERS:
-   .   arg0 = destroyed
-   .   arg1 = destroyed
-   .   ret1 = remainder
-
-   OTHER REGISTERS AFFECTED:
-   .   r1   = undefined
-
-   SIDE EFFECTS:
-   .   Causes a trap under the following conditions:  DIVIDE BY ZERO
-   .   Changes memory at the following places:  NONE
-
-   PERMISSIBLE CONTEXT:
-   .   Unwindable
-   .   Does not create a stack frame
-   .   Is usable for internal or external microcode
-
-   DISCUSSION:
-   .   Calls other millicode routines via mrp:  NONE
-   .   Calls other millicode routines:  NONE  */
-
-RDEFINE(tmp,r1)
-RDEFINE(retreg,ret1)
-
-       SUBSPA_MILLI
-       ATTR_MILLI
-       .proc
-       .callinfo millicode
-       .entry
-GSYM($$remI)
-GSYM($$remoI)
-       .export $$remI,MILLICODE
-       .export $$remoI,MILLICODE
-       ldo             -1(arg1),tmp            /*  is there at most one bit set ? */
-       and,<>          arg1,tmp,r0             /*  if not, don't use power of 2 */
-       addi,>          0,arg1,r0               /*  if denominator > 0, use power */
-                                               /*  of 2 */
-       b,n             LREF(neg_denom)
-LSYM(pow2)
-       comb,>,n        0,arg0,LREF(neg_num)    /*  is numerator < 0 ? */
-       and             arg0,tmp,retreg         /*  get the result */
-       MILLIRETN
-LSYM(neg_num)
-       subi            0,arg0,arg0             /*  negate numerator */
-       and             arg0,tmp,retreg         /*  get the result */
-       subi            0,retreg,retreg         /*  negate result */
-       MILLIRETN
-LSYM(neg_denom)
-       addi,<          0,arg1,r0               /*  if arg1 >= 0, it's not power */
-                                               /*  of 2 */
-       b,n             LREF(regular_seq)
-       sub             r0,arg1,tmp             /*  make denominator positive */
-       comb,=,n        arg1,tmp,LREF(regular_seq) /*  test against 0x80000000 and 0 */
-       ldo             -1(tmp),retreg          /*  is there at most one bit set ? */
-       and,=           tmp,retreg,r0           /*  if not, go to regular_seq */
-       b,n             LREF(regular_seq)
-       comb,>,n        0,arg0,LREF(neg_num_2)  /*  if arg0 < 0, negate it  */
-       and             arg0,retreg,retreg
-       MILLIRETN
-LSYM(neg_num_2)
-       subi            0,arg0,tmp              /*  test against 0x80000000 */
-       and             tmp,retreg,retreg
-       subi            0,retreg,retreg
-       MILLIRETN
-LSYM(regular_seq)
-       addit,=         0,arg1,0                /*  trap if div by zero */
-       add,>=          0,arg0,retreg           /*  move dividend, if retreg < 0, */
-       sub             0,retreg,retreg         /*    make it positive */
-       sub             0,arg1, tmp             /*  clear carry,  */
-                                               /*    negate the divisor */
-       ds              0, tmp,0                /*  set V-bit to the comple- */
-                                               /*    ment of the divisor sign */
-       or              0,0, tmp                /*  clear  tmp */
-       add             retreg,retreg,retreg    /*  shift msb bit into carry */
-       ds               tmp,arg1, tmp          /*  1st divide step, if no carry */
-                                               /*    out, msb of quotient = 0 */
-       addc            retreg,retreg,retreg    /*  shift retreg with/into carry */
-LSYM(t1)
-       ds               tmp,arg1, tmp          /*  2nd divide step */
-       addc            retreg,retreg,retreg    /*  shift retreg with/into carry */
-       ds               tmp,arg1, tmp          /*  3rd divide step */
-       addc            retreg,retreg,retreg    /*  shift retreg with/into carry */
-       ds               tmp,arg1, tmp          /*  4th divide step */
-       addc            retreg,retreg,retreg    /*  shift retreg with/into carry */
-       ds               tmp,arg1, tmp          /*  5th divide step */
-       addc            retreg,retreg,retreg    /*  shift retreg with/into carry */
-       ds               tmp,arg1, tmp          /*  6th divide step */
-       addc            retreg,retreg,retreg    /*  shift retreg with/into carry */
-       ds               tmp,arg1, tmp          /*  7th divide step */
-       addc            retreg,retreg,retreg    /*  shift retreg with/into carry */
-       ds               tmp,arg1, tmp          /*  8th divide step */
-       addc            retreg,retreg,retreg    /*  shift retreg with/into carry */
-       ds               tmp,arg1, tmp          /*  9th divide step */
-       addc            retreg,retreg,retreg    /*  shift retreg with/into carry */
-       ds               tmp,arg1, tmp          /*  10th divide step */
-       addc            retreg,retreg,retreg    /*  shift retreg with/into carry */
-       ds               tmp,arg1, tmp          /*  11th divide step */
-       addc            retreg,retreg,retreg    /*  shift retreg with/into carry */
-       ds               tmp,arg1, tmp          /*  12th divide step */
-       addc            retreg,retreg,retreg    /*  shift retreg with/into carry */
-       ds               tmp,arg1, tmp          /*  13th divide step */
-       addc            retreg,retreg,retreg    /*  shift retreg with/into carry */
-       ds               tmp,arg1, tmp          /*  14th divide step */
-       addc            retreg,retreg,retreg    /*  shift retreg with/into carry */
-       ds               tmp,arg1, tmp          /*  15th divide step */
-       addc            retreg,retreg,retreg    /*  shift retreg with/into carry */
-       ds               tmp,arg1, tmp          /*  16th divide step */
-       addc            retreg,retreg,retreg    /*  shift retreg with/into carry */
-       ds               tmp,arg1, tmp          /*  17th divide step */
-       addc            retreg,retreg,retreg    /*  shift retreg with/into carry */
-       ds               tmp,arg1, tmp          /*  18th divide step */
-       addc            retreg,retreg,retreg    /*  shift retreg with/into carry */
-       ds               tmp,arg1, tmp          /*  19th divide step */
-       addc            retreg,retreg,retreg    /*  shift retreg with/into carry */
-       ds               tmp,arg1, tmp          /*  20th divide step */
-       addc            retreg,retreg,retreg    /*  shift retreg with/into carry */
-       ds               tmp,arg1, tmp          /*  21st divide step */
-       addc            retreg,retreg,retreg    /*  shift retreg with/into carry */
-       ds               tmp,arg1, tmp          /*  22nd divide step */
-       addc            retreg,retreg,retreg    /*  shift retreg with/into carry */
-       ds               tmp,arg1, tmp          /*  23rd divide step */
-       addc            retreg,retreg,retreg    /*  shift retreg with/into carry */
-       ds               tmp,arg1, tmp          /*  24th divide step */
-       addc            retreg,retreg,retreg    /*  shift retreg with/into carry */
-       ds               tmp,arg1, tmp          /*  25th divide step */
-       addc            retreg,retreg,retreg    /*  shift retreg with/into carry */
-       ds               tmp,arg1, tmp          /*  26th divide step */
-       addc            retreg,retreg,retreg    /*  shift retreg with/into carry */
-       ds               tmp,arg1, tmp          /*  27th divide step */
-       addc            retreg,retreg,retreg    /*  shift retreg with/into carry */
-       ds               tmp,arg1, tmp          /*  28th divide step */
-       addc            retreg,retreg,retreg    /*  shift retreg with/into carry */
-       ds               tmp,arg1, tmp          /*  29th divide step */
-       addc            retreg,retreg,retreg    /*  shift retreg with/into carry */
-       ds               tmp,arg1, tmp          /*  30th divide step */
-       addc            retreg,retreg,retreg    /*  shift retreg with/into carry */
-       ds               tmp,arg1, tmp          /*  31st divide step */
-       addc            retreg,retreg,retreg    /*  shift retreg with/into carry */
-       ds               tmp,arg1, tmp          /*  32nd divide step, */
-       addc            retreg,retreg,retreg    /*  shift last bit into retreg */
-       movb,>=,n        tmp,retreg,LREF(finish) /*  branch if pos.  tmp */
-       add,<           arg1,0,0                /*  if arg1 > 0, add arg1 */
-       add,tr           tmp,arg1,retreg        /*    for correcting remainder tmp */
-       sub              tmp,arg1,retreg        /*  else add absolute value arg1 */
-LSYM(finish)
-       add,>=          arg0,0,0                /*  set sign of remainder */
-       sub             0,retreg,retreg         /*    to sign of dividend */
-       MILLIRET
-       nop
-       .exit
-       .procend
-#ifdef milliext
-       .origin 0x00000200
-#endif
-       .end
-#endif
diff --git a/arch/parisc/lib/milli/remU.S b/arch/parisc/lib/milli/remU.S
deleted file mode 100644 (file)
index c0a2d6e..0000000
+++ /dev/null
@@ -1,148 +0,0 @@
-/* 32 and 64-bit millicode, original author Hewlett-Packard
-   adapted for gcc by Paul Bame <bame@debian.org>
-   and Alan Modra <alan@linuxcare.com.au>.
-
-   Copyright 2001, 2002, 2003 Free Software Foundation, Inc.
-
-   This file is part of GCC and is released under the terms of
-   of the GNU General Public License as published by the Free Software
-   Foundation; either version 2, or (at your option) any later version.
-   See the file COPYING in the top-level GCC source directory for a copy
-   of the license.  */
-
-#include "milli.h"
-
-#ifdef L_remU
-/* ROUTINE:    $$remU
-   .   Single precision divide for remainder with unsigned binary integers.
-   .
-   .   The remainder must be dividend-(dividend/divisor)*divisor.
-   .   Divide by zero is trapped.
-
-   INPUT REGISTERS:
-   .   arg0 == dividend
-   .   arg1 == divisor
-   .   mrp  == return pc
-   .   sr0  == return space when called externally
-
-   OUTPUT REGISTERS:
-   .   arg0 =  undefined
-   .   arg1 =  undefined
-   .   ret1 =  remainder
-
-   OTHER REGISTERS AFFECTED:
-   .   r1   =  undefined
-
-   SIDE EFFECTS:
-   .   Causes a trap under the following conditions:  DIVIDE BY ZERO
-   .   Changes memory at the following places:  NONE
-
-   PERMISSIBLE CONTEXT:
-   .   Unwindable.
-   .   Does not create a stack frame.
-   .   Suitable for internal or external millicode.
-   .   Assumes the special millicode register conventions.
-
-   DISCUSSION:
-   .   Calls other millicode routines using mrp: NONE
-   .   Calls other millicode routines: NONE  */
-
-
-RDEFINE(temp,r1)
-RDEFINE(rmndr,ret1)    /*  r29 */
-       SUBSPA_MILLI
-       ATTR_MILLI
-       .export $$remU,millicode
-       .proc
-       .callinfo       millicode
-       .entry
-GSYM($$remU)
-       ldo     -1(arg1),temp           /*  is there at most one bit set ? */
-       and,=   arg1,temp,r0            /*  if not, don't use power of 2 */
-       b       LREF(regular_seq)
-       addit,= 0,arg1,r0               /*  trap on div by zero */
-       and     arg0,temp,rmndr         /*  get the result for power of 2 */
-       MILLIRETN
-LSYM(regular_seq)
-       comib,>=,n  0,arg1,LREF(special_case)
-       subi    0,arg1,rmndr            /*  clear carry, negate the divisor */
-       ds      r0,rmndr,r0             /*  set V-bit to 1 */
-       add     arg0,arg0,temp          /*  shift msb bit into carry */
-       ds      r0,arg1,rmndr           /*  1st divide step, if no carry */
-       addc    temp,temp,temp          /*  shift temp with/into carry */
-       ds      rmndr,arg1,rmndr                /*  2nd divide step */
-       addc    temp,temp,temp          /*  shift temp with/into carry */
-       ds      rmndr,arg1,rmndr                /*  3rd divide step */
-       addc    temp,temp,temp          /*  shift temp with/into carry */
-       ds      rmndr,arg1,rmndr                /*  4th divide step */
-       addc    temp,temp,temp          /*  shift temp with/into carry */
-       ds      rmndr,arg1,rmndr                /*  5th divide step */
-       addc    temp,temp,temp          /*  shift temp with/into carry */
-       ds      rmndr,arg1,rmndr                /*  6th divide step */
-       addc    temp,temp,temp          /*  shift temp with/into carry */
-       ds      rmndr,arg1,rmndr                /*  7th divide step */
-       addc    temp,temp,temp          /*  shift temp with/into carry */
-       ds      rmndr,arg1,rmndr                /*  8th divide step */
-       addc    temp,temp,temp          /*  shift temp with/into carry */
-       ds      rmndr,arg1,rmndr                /*  9th divide step */
-       addc    temp,temp,temp          /*  shift temp with/into carry */
-       ds      rmndr,arg1,rmndr                /*  10th divide step */
-       addc    temp,temp,temp          /*  shift temp with/into carry */
-       ds      rmndr,arg1,rmndr                /*  11th divide step */
-       addc    temp,temp,temp          /*  shift temp with/into carry */
-       ds      rmndr,arg1,rmndr                /*  12th divide step */
-       addc    temp,temp,temp          /*  shift temp with/into carry */
-       ds      rmndr,arg1,rmndr                /*  13th divide step */
-       addc    temp,temp,temp          /*  shift temp with/into carry */
-       ds      rmndr,arg1,rmndr                /*  14th divide step */
-       addc    temp,temp,temp          /*  shift temp with/into carry */
-       ds      rmndr,arg1,rmndr                /*  15th divide step */
-       addc    temp,temp,temp          /*  shift temp with/into carry */
-       ds      rmndr,arg1,rmndr                /*  16th divide step */
-       addc    temp,temp,temp          /*  shift temp with/into carry */
-       ds      rmndr,arg1,rmndr                /*  17th divide step */
-       addc    temp,temp,temp          /*  shift temp with/into carry */
-       ds      rmndr,arg1,rmndr                /*  18th divide step */
-       addc    temp,temp,temp          /*  shift temp with/into carry */
-       ds      rmndr,arg1,rmndr                /*  19th divide step */
-       addc    temp,temp,temp          /*  shift temp with/into carry */
-       ds      rmndr,arg1,rmndr                /*  20th divide step */
-       addc    temp,temp,temp          /*  shift temp with/into carry */
-       ds      rmndr,arg1,rmndr                /*  21st divide step */
-       addc    temp,temp,temp          /*  shift temp with/into carry */
-       ds      rmndr,arg1,rmndr                /*  22nd divide step */
-       addc    temp,temp,temp          /*  shift temp with/into carry */
-       ds      rmndr,arg1,rmndr                /*  23rd divide step */
-       addc    temp,temp,temp          /*  shift temp with/into carry */
-       ds      rmndr,arg1,rmndr                /*  24th divide step */
-       addc    temp,temp,temp          /*  shift temp with/into carry */
-       ds      rmndr,arg1,rmndr                /*  25th divide step */
-       addc    temp,temp,temp          /*  shift temp with/into carry */
-       ds      rmndr,arg1,rmndr                /*  26th divide step */
-       addc    temp,temp,temp          /*  shift temp with/into carry */
-       ds      rmndr,arg1,rmndr                /*  27th divide step */
-       addc    temp,temp,temp          /*  shift temp with/into carry */
-       ds      rmndr,arg1,rmndr                /*  28th divide step */
-       addc    temp,temp,temp          /*  shift temp with/into carry */
-       ds      rmndr,arg1,rmndr                /*  29th divide step */
-       addc    temp,temp,temp          /*  shift temp with/into carry */
-       ds      rmndr,arg1,rmndr                /*  30th divide step */
-       addc    temp,temp,temp          /*  shift temp with/into carry */
-       ds      rmndr,arg1,rmndr                /*  31st divide step */
-       addc    temp,temp,temp          /*  shift temp with/into carry */
-       ds      rmndr,arg1,rmndr                /*  32nd divide step, */
-       comiclr,<= 0,rmndr,r0
-         add   rmndr,arg1,rmndr        /*  correction */
-       MILLIRETN
-       nop
-
-/* Putting >= on the last DS and deleting COMICLR does not work!  */
-LSYM(special_case)
-       sub,>>= arg0,arg1,rmndr
-         copy  arg0,rmndr
-       MILLIRETN
-       nop
-       .exit
-       .procend
-       .end
-#endif
index 18f397ca05efbc27966ee2bfebd50c68dffe0448..232c298c933fa3601b9fa9099b3eeee26e40d514 100644 (file)
@@ -187,6 +187,11 @@ config FORCE_MAX_ZONEORDER
        default "9" if PPC_64K_PAGES
        default "13"
 
+config HUGETLB_PAGE_SIZE_VARIABLE
+       bool
+       depends on HUGETLB_PAGE
+       default y
+
 config MATH_EMULATION
        bool "Math emulation"
        depends on 4xx || 8xx || E200 || PPC_MPC832x || E500
index fcd333c391ec15c285b1c23e370b5c24cf289c0d..c64f3037a13b4a0fd33fc1faec3ab106bf13e8e2 100644 (file)
                };
 
                i2c@3000 {
+                       #address-cells = <1>;
+                       #size-cells = <0>;
                        device_type = "i2c";
                        compatible = "fsl-i2c";
                        reg = <3000 100>;
                        interrupts = <e 8>;
                        interrupt-parent = < &ipic >;
                        dfsrr;
+
+                       rtc@68 {
+                               compatible = "dallas,ds1374";
+                               reg = <68>;
+                       };
                };
 
                serial@4500 {
                        reg = <700 100>;
                        device_type = "ipic";
                };
-               
+
                par_io@1400 {
                        reg = <1400 100>;
                        device_type = "par_io";
                                        3  5  1  0  2  0  /* MDC */
                                        0  d  2  0  1  0        /* RX_CLK (CLK9) */
                                        3 18  2  0  1  0        /* TX_CLK (CLK10) */
-                                       1  1  1  0  1  0        /* TxD1 */
                                        1  0  1  0  1  0        /* TxD0 */
                                        1  1  1  0  1  0        /* TxD1 */
                                        1  2  1  0  1  0        /* TxD2 */
                reg = <e0100000 480>;
                brg-frequency = <0>;
                bus-frequency = <BCD3D80>;
-               
+
                muram@10000 {
                        device_type = "muram";
                        ranges = <0 00010000 00004000>;
-       
+
                        data-only@0 {
                                reg = <0 4000>;
                        };
                        compatible = "ucc_geth";
                        model = "UCC";
                        device-id = <4>;
-                       reg = <3000 200>;
+                       reg = <3200 200>;
                        interrupts = <23>;
                        interrupt-parent = < &qeic >;
                        /*
index e5a84ef9f4b074318bf14e41fef517261a13d7c0..49363f89cb712494e64db301eafb7ebbbbfac187 100644 (file)
                };
 
                i2c@3000 {
+                       #address-cells = <1>;
+                       #size-cells = <0>;
                        device_type = "i2c";
                        compatible = "fsl-i2c";
                        reg = <3000 100>;
                        interrupts = <e 8>;
                        interrupt-parent = < &ipic >;
                        dfsrr;
+
+                       rtc@68 {
+                               compatible = "dallas,ds1374";
+                               reg = <68>;
+                       };
                };
 
                i2c@3100 {
+                       #address-cells = <1>;
+                       #size-cells = <0>;
                        device_type = "i2c";
                        compatible = "fsl-i2c";
                        reg = <3100 100>;
index fbd1573c348b5601bab89a5cbca5b15d7b1521ca..0b2d2b588daa0c907523bb258e8aa11ec628fb25 100644 (file)
                };
 
                i2c@3000 {
+                       #address-cells = <1>;
+                       #size-cells = <0>;
                        device_type = "i2c";
                        compatible = "fsl-i2c";
                        reg = <3000 100>;
                        interrupts = <e 8>;
                        interrupt-parent = < &ipic >;
                        dfsrr;
+
+                       rtc@68 {
+                               compatible = "dallas,ds1374";
+                               reg = <68>;
+                       };
                };
 
                i2c@3100 {
+                       #address-cells = <1>;
+                       #size-cells = <0>;
                        device_type = "i2c";
                        compatible = "fsl-i2c";
                        reg = <3100 100>;
index 3f9d15cf13e0121e919a037b8d686ea6425b9360..6c608de1fc1b53e499bf972a9d6dd48dc2a613db 100644 (file)
                clock-frequency = <1fca055>;
                interrupt-parent = <&mpic>;
                interrupts = <1b 2>;
-               interrupt-map-mask = <fb00 0 0 0>;
+               interrupt-map-mask = <ff00 0 0 1>;
                interrupt-map = <
                        // IDSEL 0x1c  USB
-                       e000 0 0 0 &i8259 c 2
-                       e100 0 0 0 &i8259 9 2
-                       e200 0 0 0 &i8259 a 2
-                       e300 0 0 0 &i8259 b 2
+                       e000 0 0 1 &i8259 c 2
+                       e100 0 0 1 &i8259 9 2
+                       e200 0 0 1 &i8259 a 2
+                       e300 0 0 1 &i8259 b 2
 
                        // IDSEL 0x1d  Audio
-                       e800 0 0 0 &i8259 6 2
+                       e800 0 0 1 &i8259 6 2
 
                        // IDSEL 0x1e Legacy
-                       f000 0 0 0 &i8259 7 2
-                       f100 0 0 0 &i8259 7 2
+                       f000 0 0 1 &i8259 7 2
+                       f100 0 0 1 &i8259 7 2
 
                        // IDSEL 0x1f IDE/SATA
-                       f800 0 0 0 &i8259 e 2
-                       f900 0 0 0 &i8259 5 2
+                       f800 0 0 1 &i8259 e 2
+                       f900 0 0 1 &i8259 5 2
                >;
 
                pcie@0 {
index d638deec76529720f39ad73b630cf45a73a1566e..0eb44fb9647dbccf50177d452d0486af529b51ae 100644 (file)
                clock-frequency = <1fca055>;
                interrupt-parent = <&mpic>;
                interrupts = <18 2>;
-               interrupt-map-mask = <fb00 0 0 0>;
+               interrupt-map-mask = <ff00 0 0 7>;
                interrupt-map = <
-                       /* IDSEL 0x11 - PCI slot 1 */
+                       /* 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
 
-                       /* IDSEL 0x12 - PCI slot 2 */
+                       /* 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
+
+                       /* 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
+
+                       /* 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
+
+                       /* 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
+
+                       /* 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
+
+                       /* 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
+
+                       /* 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
+
+                       /* 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
 
+                       /* 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
+
+                       /* 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
+
+                       /* 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
+
+                       /* 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
+
+                       /* 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
+
+                       /* 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
+
+                       /* 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
+
                        // IDSEL 0x1c  USB
-                       e000 0 0 0 &i8259 c 2
-                       e100 0 0 0 &i8259 9 2
-                       e200 0 0 0 &i8259 a 2
-                       e300 0 0 0 &i8259 b 2
+                       e000 0 0 1 &i8259 c 2
+                       e100 0 0 1 &i8259 9 2
+                       e200 0 0 1 &i8259 a 2
+                       e300 0 0 1 &i8259 b 2
 
                        // IDSEL 0x1d  Audio
-                       e800 0 0 0 &i8259 6 2
+                       e800 0 0 1 &i8259 6 2
 
                        // IDSEL 0x1e Legacy
-                       f000 0 0 0 &i8259 7 2
-                       f100 0 0 0 &i8259 7 2
+                       f000 0 0 1 &i8259 7 2
+                       f100 0 0 1 &i8259 7 2
 
                        // IDSEL 0x1f IDE/SATA
-                       f800 0 0 0 &i8259 e 2
-                       f900 0 0 0 &i8259 5 2
+                       f800 0 0 1 &i8259 e 2
+                       f900 0 0 1 &i8259 5 2
 
                        >;
 
index 367765937a06eb37c0aa026344911e58a7d76209..abb26dc425588aeb38782d7a1a0b459224568000 100644 (file)
                clock-frequency = <1fca055>;
                interrupt-parent = <&mpic>;
                interrupts = <18 2>;
-               interrupt-map-mask = <fb00 0 0 0>;
+               interrupt-map-mask = <ff00 0 0 7>;
                interrupt-map = <
-                       /* IDSEL 0x11 */
-                       8800 0 0 1 &i8259 9 2
-                       8800 0 0 2 &i8259 a 2
-                       8800 0 0 3 &i8259 b 2
-                       8800 0 0 4 &i8259 c 2
-
-                       /* IDSEL 0x12 */
-                       9000 0 0 1 &i8259 a 2
-                       9000 0 0 2 &i8259 b 2
-                       9000 0 0 3 &i8259 c 2
-                       9000 0 0 4 &i8259 9 2
+                       /* 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
+
+                       /* 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
+
+                       /* 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
+
+                       /* 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
+
+                       /* 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
+
+                       /* 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
+
+                       /* 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
+
+                       /* 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
+
+                       /* 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
+
+                       /* 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
+
+                       /* 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
+
+                       /* 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
+
+                       /* 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
+
+                       /* 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
+
+                       /* 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
+
+                       /* 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
 
                        // IDSEL 0x1c  USB
-                       e000 0 0 0 &i8259 c 2
-                       e100 0 0 0 &i8259 9 2
-                       e200 0 0 0 &i8259 a 2
-                       e300 0 0 0 &i8259 b 2
+                       e000 0 0 1 &i8259 c 2
+                       e100 0 0 1 &i8259 9 2
+                       e200 0 0 1 &i8259 a 2
+                       e300 0 0 1 &i8259 b 2
 
                        // IDSEL 0x1d  Audio
-                       e800 0 0 0 &i8259 6 2
+                       e800 0 0 1 &i8259 6 2
 
                        // IDSEL 0x1e Legacy
-                       f000 0 0 0 &i8259 7 2
-                       f100 0 0 0 &i8259 7 2
+                       f000 0 0 1 &i8259 7 2
+                       f100 0 0 1 &i8259 7 2
 
                        // IDSEL 0x1f IDE/SATA
-                       f800 0 0 0 &i8259 e 2
-                       f900 0 0 0 &i8259 5 2
+                       f800 0 0 1 &i8259 e 2
+                       f900 0 0 1 &i8259 5 2
                        >;
 
                pcie@0 {
index 8833dfe2e8b47f97bfc4ee51a0dd8e0e3266ed4c..10784ff45dd60428e10d3f2e8bfba4cfe4fc4d9e 100644 (file)
                                device_type = "rgmii-interface";
                                compatible = "ibm,rgmii-440epx", "ibm,rgmii";
                                reg = <ef601000 8>;
+                               has-mdio;
                        };
 
                        EMAC0: ethernet@ef600e00 {
                                zmii-channel = <0>;
                                rgmii-device = <&RGMII0>;
                                rgmii-channel = <0>;
+                               has-inverted-stacr-oc;
+                               has-new-stacr-staopc;
                        };
 
                        EMAC1: ethernet@ef600f00 {
                                zmii-channel = <1>;
                                rgmii-device = <&RGMII0>;
                                rgmii-channel = <1>;
+                               has-inverted-stacr-oc;
+                               has-new-stacr-staopc;
                        };
                };
        };
index 844808ebf2454a37160d2f2f4d0c2ae99647b53f..76d883e008b62f43092ba8e3df5b7346241ab948 100644 (file)
@@ -1,7 +1,7 @@
 #
 # Automatically generated make config: don't edit
-# Linux kernel version: 2.6.23
-# Fri Oct 19 09:01:11 2007
+# Linux kernel version: 2.6.24-rc4
+# Thu Dec  6 16:48:04 2007
 #
 # CONFIG_PPC64 is not set
 
@@ -69,11 +69,14 @@ 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
@@ -209,6 +212,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_DEBUG is not set
 # CONFIG_PCCARD is not set
 # CONFIG_HOTPLUG_PCI is not set
@@ -287,10 +291,6 @@ CONFIG_DEFAULT_TCP_CONG="cubic"
 # CONFIG_LAPB is not set
 # CONFIG_ECONET is not set
 # CONFIG_WAN_ROUTER is not set
-
-#
-# QoS and/or fair queueing
-#
 # CONFIG_NET_SCHED is not set
 
 #
@@ -690,16 +690,16 @@ CONFIG_PLIST=y
 CONFIG_HAS_IOMEM=y
 CONFIG_HAS_IOPORT=y
 CONFIG_HAS_DMA=y
-
-#
-# Instrumentation Support
-#
+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
@@ -723,10 +723,12 @@ CONFIG_SCHED_DEBUG=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_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
index dcd7c02727c2e713c1dac991faf7b94602322b8a..f3bde8c6c8c6717a9801029334c8fec9c708a459 100644 (file)
@@ -1,7 +1,7 @@
 #
 # Automatically generated make config: don't edit
-# Linux kernel version: 2.6.23-rc3
-# Wed Aug 22 15:19:19 2007
+# Linux kernel version: 2.6.24-rc4
+# Thu Dec  6 16:48:05 2007
 #
 CONFIG_PPC64=y
 
@@ -11,6 +11,7 @@ CONFIG_PPC64=y
 # CONFIG_POWER4_ONLY is not set
 CONFIG_POWER3=y
 CONFIG_POWER4=y
+CONFIG_TUNE_CELL=y
 CONFIG_PPC_FPU=y
 CONFIG_ALTIVEC=y
 CONFIG_PPC_STD_MMU=y
@@ -19,8 +20,13 @@ CONFIG_VIRT_CPU_ACCOUNTING=y
 CONFIG_SMP=y
 CONFIG_NR_CPUS=4
 CONFIG_64BIT=y
+CONFIG_WORD_SIZE=64
 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
@@ -64,13 +70,21 @@ CONFIG_SYSVIPC_SYSCTL=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=y
 CONFIG_IKCONFIG_PROC=y
 CONFIG_LOG_BUF_SHIFT=15
 CONFIG_CGROUPS=y
+# CONFIG_CGROUP_DEBUG is not set
+# CONFIG_CGROUP_NS is not set
 CONFIG_CPUSETS=y
+CONFIG_FAIR_GROUP_SCHED=y
+CONFIG_FAIR_USER_SCHED=y
+# CONFIG_FAIR_CGROUP_SCHED is not set
+# CONFIG_CGROUP_CPUACCT is not set
 CONFIG_SYSFS_DEPRECATED=y
+CONFIG_PROC_PID_CPUSET=y
 # CONFIG_RELAY is not set
 CONFIG_BLK_DEV_INITRD=y
 CONFIG_INITRAMFS_SOURCE=""
@@ -90,7 +104,6 @@ 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
@@ -111,6 +124,7 @@ CONFIG_STOP_MACHINE=y
 CONFIG_BLOCK=y
 # CONFIG_BLK_DEV_IO_TRACE is not set
 # CONFIG_BLK_DEV_BSG is not set
+CONFIG_BLOCK_COMPAT=y
 
 #
 # IO Schedulers
@@ -129,7 +143,6 @@ CONFIG_DEFAULT_IOSCHED="anticipatory"
 # Platform support
 #
 CONFIG_PPC_MULTIPLATFORM=y
-# CONFIG_EMBEDDED6xx is not set
 # CONFIG_PPC_82xx is not set
 # CONFIG_PPC_83xx is not set
 # CONFIG_PPC_86xx is not set
@@ -195,6 +208,8 @@ CONFIG_CPU_FREQ_STAT=y
 # CONFIG_CPU_FREQ_STAT_DETAILS is not set
 CONFIG_CPU_FREQ_DEFAULT_GOV_PERFORMANCE=y
 # CONFIG_CPU_FREQ_DEFAULT_GOV_USERSPACE is not set
+# CONFIG_CPU_FREQ_DEFAULT_GOV_ONDEMAND is not set
+# CONFIG_CPU_FREQ_DEFAULT_GOV_CONSERVATIVE is not set
 CONFIG_CPU_FREQ_GOV_PERFORMANCE=y
 CONFIG_CPU_FREQ_GOV_POWERSAVE=y
 CONFIG_CPU_FREQ_GOV_USERSPACE=y
@@ -211,6 +226,10 @@ CONFIG_AXON_RAM=m
 #
 # Kernel options
 #
+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
@@ -223,6 +242,7 @@ CONFIG_PREEMPT_BKL=y
 CONFIG_BINFMT_ELF=y
 CONFIG_BINFMT_MISC=m
 CONFIG_FORCE_MAX_ZONEORDER=9
+CONFIG_HUGETLB_PAGE_SIZE_VARIABLE=y
 # CONFIG_IOMMU_VMERGE is not set
 CONFIG_ARCH_ENABLE_MEMORY_HOTPLUG=y
 # CONFIG_KEXEC is not set
@@ -243,6 +263,8 @@ CONFIG_NEED_MULTIPLE_NODES=y
 CONFIG_HAVE_MEMORY_PRESENT=y
 # CONFIG_SPARSEMEM_STATIC is not set
 CONFIG_SPARSEMEM_EXTREME=y
+CONFIG_SPARSEMEM_VMEMMAP_ENABLE=y
+CONFIG_SPARSEMEM_VMEMMAP=y
 CONFIG_MEMORY_HOTPLUG=y
 CONFIG_MEMORY_HOTPLUG_SPARSE=y
 CONFIG_SPLIT_PTLOCK_CPUS=4
@@ -275,11 +297,8 @@ 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
-
-#
-# PCCARD (PCMCIA/CardBus) support
-#
 # CONFIG_PCCARD is not set
 # CONFIG_HOTPLUG_PCI is not set
 CONFIG_KERNEL_START=0xc000000000000000
@@ -321,6 +340,7 @@ CONFIG_INET_TUNNEL=y
 CONFIG_INET_XFRM_MODE_TRANSPORT=y
 CONFIG_INET_XFRM_MODE_TUNNEL=y
 # CONFIG_INET_XFRM_MODE_BEET is not set
+CONFIG_INET_LRO=y
 CONFIG_INET_DIAG=y
 CONFIG_INET_TCP_DIAG=y
 # CONFIG_TCP_CONG_ADVANCED is not set
@@ -382,6 +402,7 @@ CONFIG_NETFILTER_XT_MATCH_SCTP=m
 CONFIG_NETFILTER_XT_MATCH_STATISTIC=m
 CONFIG_NETFILTER_XT_MATCH_STRING=m
 CONFIG_NETFILTER_XT_MATCH_TCPMSS=m
+CONFIG_NETFILTER_XT_MATCH_TIME=m
 CONFIG_NETFILTER_XT_MATCH_U32=m
 CONFIG_NETFILTER_XT_MATCH_HASHLIMIT=m
 
@@ -430,10 +451,6 @@ CONFIG_IP_NF_ARP_MANGLE=m
 # CONFIG_LAPB is not set
 # CONFIG_ECONET is not set
 # CONFIG_WAN_ROUTER is not set
-
-#
-# QoS and/or fair queueing
-#
 # CONFIG_NET_SCHED is not set
 CONFIG_NET_CLS_ROUTE=y
 
@@ -463,6 +480,7 @@ CONFIG_NET_CLS_ROUTE=y
 #
 # Generic Driver Options
 #
+CONFIG_UEVENT_HELPER_PATH="/sbin/hotplug"
 CONFIG_STANDALONE=y
 CONFIG_PREVENT_FIRMWARE_BUILD=y
 CONFIG_FW_LOADER=y
@@ -515,6 +533,11 @@ 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_IDEPCI=y
 CONFIG_IDEPCI_SHARE_IRQ=y
 CONFIG_IDEPCI_PCIBUS_ORDER=y
@@ -522,8 +545,6 @@ CONFIG_IDEPCI_PCIBUS_ORDER=y
 CONFIG_BLK_DEV_GENERIC=y
 # CONFIG_BLK_DEV_OPTI621 is not set
 CONFIG_BLK_DEV_IDEDMA_PCI=y
-# CONFIG_BLK_DEV_IDEDMA_FORCED is not set
-# CONFIG_IDEDMA_ONLYDISK is not set
 CONFIG_BLK_DEV_AEC62XX=y
 # CONFIG_BLK_DEV_ALI15X3 is not set
 # CONFIG_BLK_DEV_AMD74XX is not set
@@ -552,7 +573,7 @@ CONFIG_BLK_DEV_SIIMAGE=y
 CONFIG_BLK_DEV_CELLEB=y
 # CONFIG_IDE_ARM is not set
 CONFIG_BLK_DEV_IDEDMA=y
-# CONFIG_IDEDMA_IVB is not set
+CONFIG_IDE_ARCH_OBSOLETE_INIT=y
 # CONFIG_BLK_DEV_HD is not set
 
 #
@@ -593,6 +614,7 @@ CONFIG_SCSI_WAIT_SCAN=m
 # CONFIG_SCSI_ISCSI_ATTRS is not set
 CONFIG_SCSI_SAS_ATTRS=y
 # 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
@@ -668,6 +690,7 @@ CONFIG_SATA_PROMISE=y
 # 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
@@ -699,11 +722,9 @@ CONFIG_DM_ZERO=m
 CONFIG_DM_MULTIPATH=m
 # CONFIG_DM_MULTIPATH_EMC is not set
 # CONFIG_DM_MULTIPATH_RDAC is not set
+# CONFIG_DM_MULTIPATH_HP is not set
 # CONFIG_DM_DELAY is not set
-
-#
-# Fusion MPT device support
-#
+# CONFIG_DM_UEVENT is not set
 CONFIG_FUSION=y
 # CONFIG_FUSION_SPI is not set
 # CONFIG_FUSION_FC is not set
@@ -726,6 +747,8 @@ CONFIG_BONDING=m
 CONFIG_MACVLAN=m
 # CONFIG_EQUALIZER is not set
 CONFIG_TUN=y
+# CONFIG_VETH is not set
+# CONFIG_IP1000 is not set
 # CONFIG_ARCNET is not set
 # CONFIG_PHYLIB is not set
 CONFIG_NET_ETHERNET=y
@@ -736,21 +759,30 @@ CONFIG_MII=y
 # CONFIG_NET_VENDOR_3COM is not set
 # CONFIG_NET_TULIP is not set
 # CONFIG_HP100 is not set
+# CONFIG_IBM_NEW_EMAC 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=m
 CONFIG_E1000_NAPI=y
 # CONFIG_E1000_DISABLE_PACKET_SPLIT 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=m
+# CONFIG_SKGE_DEBUG is not set
 CONFIG_SKY2=m
 # CONFIG_SKY2_DEBUG is not set
+# CONFIG_SK98LIN is not set
 # CONFIG_VIA_VELOCITY is not set
 CONFIG_TIGON3=y
 # CONFIG_BNX2 is not set
@@ -761,12 +793,15 @@ CONFIG_GELIC_NET=m
 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_PASEMI_MAC is not set
 # CONFIG_MLX4_CORE is not set
+# CONFIG_TEHUTI is not set
 # CONFIG_TR is not set
 
 #
@@ -782,7 +817,6 @@ CONFIG_NETDEV_10000=y
 # CONFIG_USB_KAWETH is not set
 # CONFIG_USB_PEGASUS is not set
 # CONFIG_USB_RTL8150 is not set
-# CONFIG_USB_USBNET_MII is not set
 # CONFIG_USB_USBNET is not set
 # CONFIG_WAN is not set
 # CONFIG_FDDI is not set
@@ -812,7 +846,6 @@ CONFIG_INPUT_MOUSEDEV=y
 CONFIG_INPUT_MOUSEDEV_SCREEN_X=1024
 CONFIG_INPUT_MOUSEDEV_SCREEN_Y=768
 # CONFIG_INPUT_JOYDEV is not set
-# CONFIG_INPUT_TSDEV is not set
 # CONFIG_INPUT_EVDEV is not set
 # CONFIG_INPUT_EVBUG is not set
 
@@ -893,32 +926,11 @@ CONFIG_IPMI_DEVICE_INTERFACE=m
 CONFIG_IPMI_SI=m
 CONFIG_IPMI_WATCHDOG=m
 CONFIG_IPMI_POWEROFF=m
-CONFIG_WATCHDOG=y
-# CONFIG_WATCHDOG_NOWAYOUT is not set
-
-#
-# Watchdog Device Drivers
-#
-# CONFIG_SOFT_WATCHDOG is not set
-# CONFIG_WATCHDOG_RTAS is not set
-
-#
-# PCI-based Watchdog Cards
-#
-# CONFIG_PCIPCWATCHDOG is not set
-# CONFIG_WDTPCI is not set
-
-#
-# USB-based Watchdog Cards
-#
-# CONFIG_USBPCWATCHDOG is not set
 # CONFIG_HW_RANDOM 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_AGP is not set
-# CONFIG_DRM is not set
 # CONFIG_RAW_DRIVER is not set
 # CONFIG_HANGCHECK_TIMER is not set
 # CONFIG_TCG_TPM is not set
@@ -986,6 +998,31 @@ CONFIG_I2C_ALGOBIT=y
 # CONFIG_W1 is not set
 # CONFIG_POWER_SUPPLY is not set
 # CONFIG_HWMON is not set
+CONFIG_WATCHDOG=y
+# CONFIG_WATCHDOG_NOWAYOUT is not set
+
+#
+# Watchdog Device Drivers
+#
+# CONFIG_SOFT_WATCHDOG is not set
+# CONFIG_WATCHDOG_RTAS is not set
+
+#
+# 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
@@ -1002,16 +1039,17 @@ CONFIG_I2C_ALGOBIT=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
-# CONFIG_VGASTATE is not set
-CONFIG_VIDEO_OUTPUT_CONTROL=m
-# CONFIG_FB is not set
-# CONFIG_FB_IBM_GXT4500 is not set
 
 #
 # Console display driver support
@@ -1026,6 +1064,7 @@ CONFIG_DUMMY_CONSOLE=y
 CONFIG_HID_SUPPORT=y
 CONFIG_HID=m
 # CONFIG_HID_DEBUG is not set
+# CONFIG_HIDRAW is not set
 
 #
 # USB Input Devices
@@ -1174,19 +1213,6 @@ CONFIG_EDAC=y
 CONFIG_EDAC_MM_EDAC=y
 # CONFIG_RTC_CLASS is not set
 
-#
-# DMA Engine support
-#
-# CONFIG_DMA_ENGINE is not set
-
-#
-# DMA Clients
-#
-
-#
-# DMA Devices
-#
-
 #
 # Userspace I/O
 #
@@ -1253,7 +1279,6 @@ CONFIG_TMPFS=y
 # CONFIG_TMPFS_POSIX_ACL is not set
 CONFIG_HUGETLBFS=y
 CONFIG_HUGETLB_PAGE=y
-CONFIG_RAMFS=y
 # CONFIG_CONFIGFS_FS is not set
 
 #
@@ -1272,10 +1297,7 @@ CONFIG_RAMFS=y
 # CONFIG_QNX4FS_FS is not set
 # CONFIG_SYSV_FS is not set
 # CONFIG_UFS_FS is not set
-
-#
-# Network File Systems
-#
+CONFIG_NETWORK_FILESYSTEMS=y
 CONFIG_NFS_FS=y
 CONFIG_NFS_V3=y
 CONFIG_NFS_V3_ACL=y
@@ -1288,6 +1310,7 @@ CONFIG_LOCKD_V4=y
 CONFIG_NFS_ACL_SUPPORT=y
 CONFIG_NFS_COMMON=y
 CONFIG_SUNRPC=y
+CONFIG_SUNRPC_XPRT_RDMA=m
 # CONFIG_SUNRPC_BIND34 is not set
 # CONFIG_RPCSEC_GSS_KRB5 is not set
 # CONFIG_RPCSEC_GSS_SPKM3 is not set
@@ -1318,10 +1341,6 @@ CONFIG_MSDOS_PARTITION=y
 # CONFIG_KARMA_PARTITION is not set
 CONFIG_EFI_PARTITION=y
 # CONFIG_SYSV68_PARTITION is not set
-
-#
-# Native Language Support
-#
 CONFIG_NLS=m
 CONFIG_NLS_DEFAULT="iso8859-1"
 # CONFIG_NLS_CODEPAGE_437 is not set
@@ -1362,10 +1381,6 @@ CONFIG_NLS_ISO8859_15=m
 # CONFIG_NLS_KOI8_R is not set
 # CONFIG_NLS_KOI8_U is not set
 # CONFIG_NLS_UTF8 is not set
-
-#
-# Distributed Lock Manager
-#
 # CONFIG_DLM is not set
 # CONFIG_UCC_SLOW is not set
 
@@ -1389,19 +1404,17 @@ CONFIG_PLIST=y
 CONFIG_HAS_IOMEM=y
 CONFIG_HAS_IOPORT=y
 CONFIG_HAS_DMA=y
-
-#
-# Instrumentation Support
-#
+CONFIG_INSTRUMENTATION=y
 CONFIG_PROFILING=y
 CONFIG_OPROFILE=m
-CONFIG_OPROFILE_CELL=y
 # 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 is not set
 CONFIG_MAGIC_SYSRQ=y
 # CONFIG_UNUSED_SYMBOLS is not set
@@ -1425,9 +1438,12 @@ 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_FORCED_INLINING is not set
+# 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
@@ -1436,6 +1452,7 @@ CONFIG_XMON=y
 CONFIG_XMON_DEFAULT=y
 CONFIG_XMON_DISASSEMBLY=y
 CONFIG_IRQSTACKS=y
+# CONFIG_VIRQ_DEBUG is not set
 # CONFIG_BOOTX_TEXT is not set
 # CONFIG_PPC_EARLY_DEBUG is not set
 
@@ -1444,6 +1461,7 @@ CONFIG_IRQSTACKS=y
 #
 # 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=m
@@ -1464,6 +1482,7 @@ CONFIG_CRYPTO_ECB=m
 CONFIG_CRYPTO_CBC=m
 CONFIG_CRYPTO_PCBC=m
 # CONFIG_CRYPTO_LRW is not set
+# CONFIG_CRYPTO_XTS is not set
 # CONFIG_CRYPTO_CRYPTD is not set
 CONFIG_CRYPTO_DES=m
 # CONFIG_CRYPTO_FCRYPT is not set
@@ -1477,9 +1496,12 @@ CONFIG_CRYPTO_DES=m
 # 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=m
 # 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
index 2c5969801bd679cb7ee772dfe4a3540f2154356b..421e08ee857a5c98bc84d96357fd352c74f18886 100644 (file)
@@ -1,7 +1,7 @@
 #
 # Automatically generated make config: don't edit
-# Linux kernel version: 2.6.23-rc4
-# Thu Aug 30 16:32:07 2007
+# Linux kernel version: 2.6.24-rc4
+# Thu Dec  6 16:48:07 2007
 #
 CONFIG_PPC64=y
 
@@ -11,6 +11,7 @@ CONFIG_PPC64=y
 # CONFIG_POWER4_ONLY is not set
 CONFIG_POWER3=y
 CONFIG_POWER4=y
+CONFIG_TUNE_CELL=y
 CONFIG_PPC_FPU=y
 CONFIG_ALTIVEC=y
 CONFIG_PPC_STD_MMU=y
@@ -19,8 +20,13 @@ CONFIG_VIRT_CPU_ACCOUNTING=y
 CONFIG_SMP=y
 CONFIG_NR_CPUS=4
 CONFIG_64BIT=y
+CONFIG_WORD_SIZE=64
 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
@@ -63,11 +69,13 @@ CONFIG_SYSVIPC_SYSCTL=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=y
 CONFIG_IKCONFIG_PROC=y
 CONFIG_LOG_BUF_SHIFT=15
-# CONFIG_CPUSETS is not set
+# CONFIG_CGROUPS is not set
+# CONFIG_FAIR_GROUP_SCHED is not set
 CONFIG_SYSFS_DEPRECATED=y
 # CONFIG_RELAY is not set
 CONFIG_BLK_DEV_INITRD=y
@@ -88,7 +96,6 @@ 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
@@ -109,6 +116,7 @@ CONFIG_STOP_MACHINE=y
 CONFIG_BLOCK=y
 # CONFIG_BLK_DEV_IO_TRACE is not set
 CONFIG_BLK_DEV_BSG=y
+CONFIG_BLOCK_COMPAT=y
 
 #
 # IO Schedulers
@@ -127,7 +135,6 @@ CONFIG_DEFAULT_IOSCHED="anticipatory"
 # Platform support
 #
 CONFIG_PPC_MULTIPLATFORM=y
-# CONFIG_EMBEDDED6xx is not set
 # CONFIG_PPC_82xx is not set
 # CONFIG_PPC_83xx is not set
 # CONFIG_PPC_86xx is not set
@@ -160,8 +167,8 @@ CONFIG_PPC_UDBG_BEAT=y
 # 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_PPC_INDIRECT_IO=y
+CONFIG_GENERIC_IOMAP=y
 # CONFIG_CPU_FREQ is not set
 # CONFIG_CPM2 is not set
 # CONFIG_FSL_ULI1575 is not set
@@ -169,6 +176,10 @@ CONFIG_PPC_UDBG_BEAT=y
 #
 # Kernel options
 #
+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
@@ -181,6 +192,7 @@ CONFIG_PREEMPT_BKL=y
 CONFIG_BINFMT_ELF=y
 CONFIG_BINFMT_MISC=m
 CONFIG_FORCE_MAX_ZONEORDER=13
+CONFIG_HUGETLB_PAGE_SIZE_VARIABLE=y
 # CONFIG_IOMMU_VMERGE is not set
 CONFIG_ARCH_ENABLE_MEMORY_HOTPLUG=y
 CONFIG_KEXEC=y
@@ -200,6 +212,8 @@ CONFIG_NEED_MULTIPLE_NODES=y
 CONFIG_HAVE_MEMORY_PRESENT=y
 # CONFIG_SPARSEMEM_STATIC is not set
 CONFIG_SPARSEMEM_EXTREME=y
+CONFIG_SPARSEMEM_VMEMMAP_ENABLE=y
+CONFIG_SPARSEMEM_VMEMMAP=y
 CONFIG_MEMORY_HOTPLUG=y
 CONFIG_MEMORY_HOTPLUG_SPARSE=y
 CONFIG_SPLIT_PTLOCK_CPUS=4
@@ -231,11 +245,8 @@ 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
-
-#
-# PCCARD (PCMCIA/CardBus) support
-#
 # CONFIG_PCCARD is not set
 # CONFIG_HOTPLUG_PCI is not set
 CONFIG_KERNEL_START=0xc000000000000000
@@ -274,6 +285,7 @@ CONFIG_INET_TUNNEL=y
 CONFIG_INET_XFRM_MODE_TRANSPORT=y
 CONFIG_INET_XFRM_MODE_TUNNEL=y
 CONFIG_INET_XFRM_MODE_BEET=y
+CONFIG_INET_LRO=y
 CONFIG_INET_DIAG=y
 CONFIG_INET_TCP_DIAG=y
 # CONFIG_TCP_CONG_ADVANCED is not set
@@ -336,10 +348,6 @@ CONFIG_IP_NF_QUEUE=m
 # CONFIG_LAPB is not set
 # CONFIG_ECONET is not set
 # CONFIG_WAN_ROUTER is not set
-
-#
-# QoS and/or fair queueing
-#
 # CONFIG_NET_SCHED is not set
 
 #
@@ -368,6 +376,7 @@ CONFIG_IP_NF_QUEUE=m
 #
 # Generic Driver Options
 #
+CONFIG_UEVENT_HELPER_PATH="/sbin/hotplug"
 CONFIG_STANDALONE=y
 CONFIG_PREVENT_FIRMWARE_BUILD=y
 CONFIG_FW_LOADER=y
@@ -420,6 +429,11 @@ 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_IDEPCI=y
 CONFIG_IDEPCI_SHARE_IRQ=y
 CONFIG_IDEPCI_PCIBUS_ORDER=y
@@ -427,8 +441,6 @@ CONFIG_IDEPCI_PCIBUS_ORDER=y
 CONFIG_BLK_DEV_GENERIC=y
 # CONFIG_BLK_DEV_OPTI621 is not set
 CONFIG_BLK_DEV_IDEDMA_PCI=y
-# CONFIG_BLK_DEV_IDEDMA_FORCED is not set
-# CONFIG_IDEDMA_ONLYDISK is not set
 # CONFIG_BLK_DEV_AEC62XX is not set
 # CONFIG_BLK_DEV_ALI15X3 is not set
 # CONFIG_BLK_DEV_AMD74XX is not set
@@ -457,7 +469,7 @@ CONFIG_BLK_DEV_IDEDMA_PCI=y
 CONFIG_BLK_DEV_CELLEB=y
 # CONFIG_IDE_ARM is not set
 CONFIG_BLK_DEV_IDEDMA=y
-# CONFIG_IDEDMA_IVB is not set
+CONFIG_IDE_ARCH_OBSOLETE_INIT=y
 # CONFIG_BLK_DEV_HD is not set
 
 #
@@ -498,6 +510,7 @@ CONFIG_SCSI_WAIT_SCAN=m
 # CONFIG_SCSI_ISCSI_ATTRS is not set
 # CONFIG_SCSI_SAS_ATTRS is not set
 # CONFIG_SCSI_SAS_LIBSAS is not set
+# CONFIG_SCSI_SRP_ATTRS is not set
 CONFIG_SCSI_LOWLEVEL=y
 # CONFIG_ISCSI_TCP is not set
 # CONFIG_BLK_DEV_3W_XXXX_RAID is not set
@@ -549,15 +562,10 @@ CONFIG_DM_ZERO=m
 CONFIG_DM_MULTIPATH=m
 # CONFIG_DM_MULTIPATH_EMC is not set
 # CONFIG_DM_MULTIPATH_RDAC is not set
+# CONFIG_DM_MULTIPATH_HP is not set
 # CONFIG_DM_DELAY is not set
-
-#
-# Fusion MPT device support
-#
+# CONFIG_DM_UEVENT is not set
 # CONFIG_FUSION is not set
-# CONFIG_FUSION_SPI is not set
-# CONFIG_FUSION_FC is not set
-# CONFIG_FUSION_SAS is not set
 
 #
 # IEEE 1394 (FireWire) support
@@ -573,6 +581,8 @@ CONFIG_NETDEVICES=y
 # 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
@@ -583,11 +593,17 @@ CONFIG_MII=y
 # 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_NS83820 is not set
 # CONFIG_HAMACHI is not set
 # CONFIG_YELLOWFIN is not set
@@ -595,6 +611,7 @@ CONFIG_NETDEV_1000=y
 # 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
@@ -604,12 +621,15 @@ CONFIG_SPIDER_NET=y
 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_PASEMI_MAC is not set
 # CONFIG_MLX4_CORE is not set
+# CONFIG_TEHUTI is not set
 # CONFIG_TR is not set
 
 #
@@ -625,7 +645,6 @@ CONFIG_NETDEV_10000=y
 # CONFIG_USB_KAWETH is not set
 # CONFIG_USB_PEGASUS is not set
 # CONFIG_USB_RTL8150 is not set
-# CONFIG_USB_USBNET_MII is not set
 # CONFIG_USB_USBNET is not set
 # CONFIG_WAN is not set
 # CONFIG_FDDI is not set
@@ -655,7 +674,6 @@ CONFIG_INPUT_MOUSEDEV=y
 CONFIG_INPUT_MOUSEDEV_SCREEN_X=1024
 CONFIG_INPUT_MOUSEDEV_SCREEN_Y=768
 # CONFIG_INPUT_JOYDEV is not set
-# CONFIG_INPUT_TSDEV is not set
 # CONFIG_INPUT_EVDEV is not set
 # CONFIG_INPUT_EVBUG is not set
 
@@ -725,31 +743,11 @@ CONFIG_UNIX98_PTYS=y
 CONFIG_HVC_DRIVER=y
 CONFIG_HVC_BEAT=y
 # CONFIG_IPMI_HANDLER is not set
-CONFIG_WATCHDOG=y
-# CONFIG_WATCHDOG_NOWAYOUT is not set
-
-#
-# Watchdog Device Drivers
-#
-# CONFIG_SOFT_WATCHDOG is not set
-
-#
-# PCI-based Watchdog Cards
-#
-# CONFIG_PCIPCWATCHDOG is not set
-# CONFIG_WDTPCI is not set
-
-#
-# USB-based Watchdog Cards
-#
-# CONFIG_USBPCWATCHDOG is not set
 # CONFIG_HW_RANDOM 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_AGP is not set
-# CONFIG_DRM is not set
 # CONFIG_RAW_DRIVER is not set
 # CONFIG_HANGCHECK_TIMER is not set
 # CONFIG_TCG_TPM is not set
@@ -817,6 +815,30 @@ CONFIG_I2C_ALGOBIT=y
 # CONFIG_W1 is not set
 # CONFIG_POWER_SUPPLY is not set
 # CONFIG_HWMON is not set
+CONFIG_WATCHDOG=y
+# CONFIG_WATCHDOG_NOWAYOUT is not set
+
+#
+# Watchdog Device Drivers
+#
+# CONFIG_SOFT_WATCHDOG is not set
+
+#
+# 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
@@ -833,16 +855,17 @@ CONFIG_I2C_ALGOBIT=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
-# CONFIG_VGASTATE is not set
-# CONFIG_VIDEO_OUTPUT_CONTROL is not set
-# CONFIG_FB is not set
-# CONFIG_FB_IBM_GXT4500 is not set
 
 #
 # Console display driver support
@@ -857,6 +880,7 @@ CONFIG_DUMMY_CONSOLE=y
 CONFIG_HID_SUPPORT=y
 CONFIG_HID=y
 # CONFIG_HID_DEBUG is not set
+# CONFIG_HIDRAW is not set
 
 #
 # USB Input Devices
@@ -979,19 +1003,6 @@ CONFIG_USB_MON=y
 # CONFIG_EDAC is not set
 # CONFIG_RTC_CLASS is not set
 
-#
-# DMA Engine support
-#
-# CONFIG_DMA_ENGINE is not set
-
-#
-# DMA Clients
-#
-
-#
-# DMA Devices
-#
-
 #
 # Userspace I/O
 #
@@ -1060,7 +1071,6 @@ CONFIG_TMPFS=y
 # CONFIG_TMPFS_POSIX_ACL is not set
 CONFIG_HUGETLBFS=y
 CONFIG_HUGETLB_PAGE=y
-CONFIG_RAMFS=y
 # CONFIG_CONFIGFS_FS is not set
 
 #
@@ -1079,10 +1089,7 @@ CONFIG_RAMFS=y
 # CONFIG_QNX4FS_FS is not set
 # CONFIG_SYSV_FS is not set
 # CONFIG_UFS_FS is not set
-
-#
-# Network File Systems
-#
+CONFIG_NETWORK_FILESYSTEMS=y
 CONFIG_NFS_FS=m
 CONFIG_NFS_V3=y
 CONFIG_NFS_V3_ACL=y
@@ -1130,10 +1137,6 @@ CONFIG_MSDOS_PARTITION=y
 # CONFIG_KARMA_PARTITION is not set
 CONFIG_EFI_PARTITION=y
 # CONFIG_SYSV68_PARTITION is not set
-
-#
-# Native Language Support
-#
 CONFIG_NLS=m
 CONFIG_NLS_DEFAULT="iso8859-1"
 # CONFIG_NLS_CODEPAGE_437 is not set
@@ -1174,10 +1177,6 @@ CONFIG_NLS_ISO8859_15=m
 # CONFIG_NLS_KOI8_R is not set
 # CONFIG_NLS_KOI8_U is not set
 # CONFIG_NLS_UTF8 is not set
-
-#
-# Distributed Lock Manager
-#
 # CONFIG_DLM is not set
 # CONFIG_UCC_SLOW is not set
 
@@ -1197,17 +1196,16 @@ CONFIG_PLIST=y
 CONFIG_HAS_IOMEM=y
 CONFIG_HAS_IOPORT=y
 CONFIG_HAS_DMA=y
-
-#
-# Instrumentation Support
-#
+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
@@ -1231,9 +1229,12 @@ 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_FORCED_INLINING is not set
+# 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
@@ -1242,6 +1243,7 @@ CONFIG_XMON=y
 CONFIG_XMON_DEFAULT=y
 CONFIG_XMON_DISASSEMBLY=y
 CONFIG_IRQSTACKS=y
+# CONFIG_VIRQ_DEBUG is not set
 # CONFIG_BOOTX_TEXT is not set
 CONFIG_PPC_EARLY_DEBUG=y
 # CONFIG_PPC_EARLY_DEBUG_LPAR is not set
@@ -1253,12 +1255,14 @@ CONFIG_PPC_EARLY_DEBUG=y
 # CONFIG_PPC_EARLY_DEBUG_PAS_REALMODE is not set
 CONFIG_PPC_EARLY_DEBUG_BEAT=y
 # CONFIG_PPC_EARLY_DEBUG_44x 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=m
@@ -1279,6 +1283,7 @@ CONFIG_CRYPTO_ECB=m
 CONFIG_CRYPTO_CBC=m
 CONFIG_CRYPTO_PCBC=m
 # CONFIG_CRYPTO_LRW is not set
+# CONFIG_CRYPTO_XTS is not set
 # CONFIG_CRYPTO_CRYPTD is not set
 CONFIG_CRYPTO_DES=m
 # CONFIG_CRYPTO_FCRYPT is not set
@@ -1293,9 +1298,12 @@ CONFIG_CRYPTO_TEA=m
 CONFIG_CRYPTO_ARC4=m
 CONFIG_CRYPTO_KHAZAD=m
 CONFIG_CRYPTO_ANUBIS=m
+# CONFIG_CRYPTO_SEED 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 is not set
 # CONFIG_CRYPTO_HW is not set
+# CONFIG_PPC_CLOCK is not set
index 6f27e57331d5a0c9485afcf06852be6d2cd8cfa4..5989b5d2277e2b6b25b6d238c5e8771719d37d52 100644 (file)
@@ -1,7 +1,7 @@
 #
 # Automatically generated make config: don't edit
-# Linux kernel version: 2.6.23-rc4
-# Thu Aug 30 16:33:50 2007
+# Linux kernel version: 2.6.24-rc4
+# Thu Dec  6 16:48:09 2007
 #
 # CONFIG_PPC64 is not set
 
@@ -22,8 +22,13 @@ CONFIG_PPC_STD_MMU_32=y
 CONFIG_SMP=y
 CONFIG_NR_CPUS=4
 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
@@ -63,11 +68,13 @@ 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=y
 CONFIG_IKCONFIG_PROC=y
 CONFIG_LOG_BUF_SHIFT=15
-# CONFIG_CPUSETS is not set
+# CONFIG_CGROUPS is not set
+# CONFIG_FAIR_GROUP_SCHED is not set
 CONFIG_SYSFS_DEPRECATED=y
 # CONFIG_RELAY is not set
 CONFIG_BLK_DEV_INITRD=y
@@ -88,7 +95,6 @@ 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
@@ -129,7 +135,6 @@ CONFIG_DEFAULT_IOSCHED="anticipatory"
 # Platform support
 #
 CONFIG_PPC_MULTIPLATFORM=y
-# CONFIG_EMBEDDED6xx is not set
 # CONFIG_PPC_82xx is not set
 # CONFIG_PPC_83xx is not set
 # CONFIG_PPC_86xx is not set
@@ -165,6 +170,10 @@ CONFIG_PPC_MPC106=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
@@ -188,6 +197,7 @@ CONFIG_FLATMEM_MANUAL=y
 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
@@ -213,11 +223,8 @@ 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
-
-#
-# PCCARD (PCMCIA/CardBus) support
-#
 # CONFIG_PCCARD is not set
 # CONFIG_HOTPLUG_PCI is not set
 
@@ -232,7 +239,7 @@ CONFIG_ARCH_SUPPORTS_MSI=y
 CONFIG_HIGHMEM_START=0xfe000000
 CONFIG_LOWMEM_SIZE=0x30000000
 CONFIG_KERNEL_START=0xc0000000
-CONFIG_TASK_SIZE=0x80000000
+CONFIG_TASK_SIZE=0xc0000000
 CONFIG_BOOT_LOAD=0x00800000
 
 #
@@ -265,6 +272,7 @@ CONFIG_SYN_COOKIES=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
@@ -327,6 +335,7 @@ CONFIG_NETFILTER_XTABLES=m
 # 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
 
@@ -380,10 +389,6 @@ CONFIG_NF_NAT_SIP=m
 # CONFIG_LAPB is not set
 # CONFIG_ECONET is not set
 # CONFIG_WAN_ROUTER is not set
-
-#
-# QoS and/or fair queueing
-#
 # CONFIG_NET_SCHED is not set
 
 #
@@ -412,6 +417,7 @@ CONFIG_NF_NAT_SIP=m
 #
 # Generic Driver Options
 #
+CONFIG_UEVENT_HELPER_PATH="/sbin/hotplug"
 # CONFIG_STANDALONE is not set
 CONFIG_PREVENT_FIRMWARE_BUILD=y
 # CONFIG_FW_LOADER is not set
@@ -467,6 +473,11 @@ 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_IDEPCI=y
 CONFIG_IDEPCI_SHARE_IRQ=y
 CONFIG_IDEPCI_PCIBUS_ORDER=y
@@ -474,8 +485,6 @@ CONFIG_IDEPCI_PCIBUS_ORDER=y
 CONFIG_BLK_DEV_GENERIC=y
 # CONFIG_BLK_DEV_OPTI621 is not set
 CONFIG_BLK_DEV_IDEDMA_PCI=y
-# CONFIG_BLK_DEV_IDEDMA_FORCED is not set
-# CONFIG_IDEDMA_ONLYDISK is not set
 # CONFIG_BLK_DEV_AEC62XX is not set
 # CONFIG_BLK_DEV_ALI15X3 is not set
 # CONFIG_BLK_DEV_AMD74XX is not set
@@ -502,9 +511,22 @@ CONFIG_BLK_DEV_SL82C105=y
 CONFIG_BLK_DEV_VIA82CXXX=y
 # CONFIG_BLK_DEV_TC86C001 is not set
 # CONFIG_IDE_ARM is not set
-# CONFIG_IDE_CHIPSETS is not set
+
+#
+# Other IDE chipsets support
+#
+
+#
+# Note: most of these also require special kernel boot parameters
+#
+# CONFIG_BLK_DEV_4DRIVES is not set
+# CONFIG_BLK_DEV_ALI14XX is not set
+# CONFIG_BLK_DEV_DTC2278 is not set
+# CONFIG_BLK_DEV_HT6560B is not set
+# CONFIG_BLK_DEV_QD65XX is not set
+# CONFIG_BLK_DEV_UMC8672 is not set
 CONFIG_BLK_DEV_IDEDMA=y
-# CONFIG_IDEDMA_IVB is not set
+CONFIG_IDE_ARCH_OBSOLETE_INIT=y
 # CONFIG_BLK_DEV_HD is not set
 
 #
@@ -544,6 +566,7 @@ 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
@@ -558,6 +581,7 @@ CONFIG_SCSI_LOWLEVEL=y
 # 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_IN2000 is not set
 # CONFIG_SCSI_ARCMSR is not set
 # CONFIG_MEGARAID_NEWGEN is not set
@@ -599,14 +623,7 @@ CONFIG_SCSI_SYM53C8XX_MMIO=y
 # CONFIG_SCSI_SRP is not set
 # CONFIG_ATA is not set
 # CONFIG_MD is not set
-
-#
-# Fusion MPT device support
-#
 # CONFIG_FUSION is not set
-# CONFIG_FUSION_SPI is not set
-# CONFIG_FUSION_FC is not set
-# CONFIG_FUSION_SAS is not set
 
 #
 # IEEE 1394 (FireWire) support
@@ -622,6 +639,8 @@ CONFIG_NETDEVICES=y
 # 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
@@ -644,6 +663,10 @@ CONFIG_DE4X5=y
 # CONFIG_DEPCA is not set
 # CONFIG_HP100 is not set
 # CONFIG_NET_ISA 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=y
 # CONFIG_PCNET32_NAPI is not set
@@ -654,7 +677,6 @@ CONFIG_PCNET32=y
 # CONFIG_B44 is not set
 # CONFIG_FORCEDETH is not set
 # CONFIG_CS89x0 is not set
-# CONFIG_DGRS is not set
 # CONFIG_EEPRO100 is not set
 # CONFIG_E100 is not set
 # CONFIG_FEALNX is not set
@@ -678,6 +700,7 @@ 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
@@ -685,6 +708,7 @@ CONFIG_NETDEV_1000=y
 # 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
@@ -694,11 +718,14 @@ CONFIG_MV643XX_ETH=y
 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
 
 #
@@ -714,7 +741,6 @@ CONFIG_NETDEV_10000=y
 # CONFIG_USB_KAWETH is not set
 # CONFIG_USB_PEGASUS is not set
 # CONFIG_USB_RTL8150 is not set
-# CONFIG_USB_USBNET_MII is not set
 # CONFIG_USB_USBNET is not set
 # CONFIG_WAN is not set
 # CONFIG_FDDI is not set
@@ -754,7 +780,6 @@ CONFIG_INPUT_MOUSEDEV_PSAUX=y
 CONFIG_INPUT_MOUSEDEV_SCREEN_X=1024
 CONFIG_INPUT_MOUSEDEV_SCREEN_Y=768
 # CONFIG_INPUT_JOYDEV is not set
-# CONFIG_INPUT_TSDEV is not set
 CONFIG_INPUT_EVDEV=y
 # CONFIG_INPUT_EVBUG is not set
 
@@ -838,7 +863,6 @@ CONFIG_LEGACY_PTY_COUNT=256
 CONFIG_BRIQ_PANEL=m
 # CONFIG_HVC_RTAS is not set
 # CONFIG_IPMI_HANDLER is not set
-# CONFIG_WATCHDOG is not set
 # CONFIG_HW_RANDOM is not set
 CONFIG_NVRAM=y
 CONFIG_GEN_RTC=y
@@ -846,8 +870,6 @@ CONFIG_GEN_RTC=y
 # CONFIG_DTLK is not set
 # CONFIG_R3964 is not set
 # CONFIG_APPLICOM is not set
-# CONFIG_AGP is not set
-# CONFIG_DRM is not set
 # CONFIG_RAW_DRIVER is not set
 # CONFIG_TCG_TPM is not set
 CONFIG_DEVPORT=y
@@ -918,6 +940,13 @@ CONFIG_I2C_ALGOBIT=y
 # 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
@@ -934,18 +963,8 @@ CONFIG_I2C_ALGOBIT=y
 #
 # Graphics support
 #
-CONFIG_BACKLIGHT_LCD_SUPPORT=y
-CONFIG_LCD_CLASS_DEVICE=m
-CONFIG_BACKLIGHT_CLASS_DEVICE=y
-
-#
-# Display device support
-#
-CONFIG_DISPLAY_SUPPORT=m
-
-#
-# Display hardware drivers
-#
+# CONFIG_AGP is not set
+# CONFIG_DRM is not set
 # CONFIG_VGASTATE is not set
 # CONFIG_VIDEO_OUTPUT_CONTROL is not set
 CONFIG_FB=y
@@ -954,6 +973,7 @@ CONFIG_FB_DDC=y
 CONFIG_FB_CFB_FILLRECT=y
 CONFIG_FB_CFB_COPYAREA=y
 CONFIG_FB_CFB_IMAGEBLIT=y
+# CONFIG_FB_CFB_REV_PIXELS_IN_BYTE is not set
 # CONFIG_FB_SYS_FILLRECT is not set
 # CONFIG_FB_SYS_COPYAREA is not set
 # CONFIG_FB_SYS_IMAGEBLIT is not set
@@ -1009,6 +1029,19 @@ CONFIG_FB_3DFX=y
 # CONFIG_FB_PM3 is not set
 # CONFIG_FB_IBM_GXT4500 is not set
 # CONFIG_FB_VIRTUAL is not set
+CONFIG_BACKLIGHT_LCD_SUPPORT=y
+CONFIG_LCD_CLASS_DEVICE=m
+CONFIG_BACKLIGHT_CLASS_DEVICE=y
+# CONFIG_BACKLIGHT_CORGI is not set
+
+#
+# Display device support
+#
+CONFIG_DISPLAY_SUPPORT=m
+
+#
+# Display hardware drivers
+#
 
 #
 # Console display driver support
@@ -1035,6 +1068,7 @@ CONFIG_LOGO_LINUX_CLUT224=y
 CONFIG_HID_SUPPORT=y
 CONFIG_HID=y
 # CONFIG_HID_DEBUG is not set
+# CONFIG_HIDRAW is not set
 
 #
 # USB Input Devices
@@ -1157,19 +1191,6 @@ CONFIG_USB_MON=y
 # CONFIG_EDAC is not set
 # CONFIG_RTC_CLASS is not set
 
-#
-# DMA Engine support
-#
-# CONFIG_DMA_ENGINE is not set
-
-#
-# DMA Clients
-#
-
-#
-# DMA Devices
-#
-
 #
 # Userspace I/O
 #
@@ -1187,7 +1208,6 @@ CONFIG_EXT3_FS_XATTR=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 is not set
 # CONFIG_JFS_FS is not set
@@ -1233,7 +1253,6 @@ CONFIG_SYSFS=y
 CONFIG_TMPFS=y
 # CONFIG_TMPFS_POSIX_ACL is not set
 # CONFIG_HUGETLB_PAGE is not set
-CONFIG_RAMFS=y
 # CONFIG_CONFIGFS_FS is not set
 
 #
@@ -1252,10 +1271,7 @@ CONFIG_RAMFS=y
 # CONFIG_QNX4FS_FS is not set
 # CONFIG_SYSV_FS is not set
 # CONFIG_UFS_FS is not set
-
-#
-# Network File Systems
-#
+CONFIG_NETWORK_FILESYSTEMS=y
 # CONFIG_NFS_FS is not set
 # CONFIG_NFSD is not set
 # CONFIG_SMB_FS is not set
@@ -1285,10 +1301,6 @@ CONFIG_MSDOS_PARTITION=y
 # CONFIG_KARMA_PARTITION is not set
 # CONFIG_EFI_PARTITION is not set
 # CONFIG_SYSV68_PARTITION is not set
-
-#
-# Native Language Support
-#
 CONFIG_NLS=y
 CONFIG_NLS_DEFAULT="iso8859-1"
 # CONFIG_NLS_CODEPAGE_437 is not set
@@ -1329,10 +1341,6 @@ CONFIG_NLS_ISO8859_1=m
 # CONFIG_NLS_KOI8_R is not set
 # CONFIG_NLS_KOI8_U is not set
 # CONFIG_NLS_UTF8 is not set
-
-#
-# Distributed Lock Manager
-#
 # CONFIG_DLM is not set
 # CONFIG_UCC_SLOW is not set
 
@@ -1352,17 +1360,16 @@ CONFIG_PLIST=y
 CONFIG_HAS_IOMEM=y
 CONFIG_HAS_IOPORT=y
 CONFIG_HAS_DMA=y
-
-#
-# Instrumentation Support
-#
+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
@@ -1387,9 +1394,12 @@ 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_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
@@ -1406,6 +1416,7 @@ CONFIG_XMON_DISASSEMBLY=y
 #
 # CONFIG_KEYS is not set
 # CONFIG_SECURITY is not set
+# CONFIG_SECURITY_FILE_CAPABILITIES is not set
 CONFIG_CRYPTO=y
 CONFIG_CRYPTO_ALGAPI=m
 CONFIG_CRYPTO_BLKCIPHER=m
@@ -1425,6 +1436,7 @@ CONFIG_CRYPTO_ECB=m
 CONFIG_CRYPTO_CBC=m
 CONFIG_CRYPTO_PCBC=m
 # CONFIG_CRYPTO_LRW is not set
+# CONFIG_CRYPTO_XTS is not set
 # CONFIG_CRYPTO_CRYPTD is not set
 # CONFIG_CRYPTO_DES is not set
 # CONFIG_CRYPTO_FCRYPT is not set
@@ -1438,9 +1450,12 @@ CONFIG_CRYPTO_PCBC=m
 CONFIG_CRYPTO_ARC4=m
 # 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 is not set
+# CONFIG_PPC_CLOCK is not set
index d3ef642811ef2604cb9d472f114f6d1371a244bd..b84298ce42be870156282a18392fca08f753fe07 100644 (file)
@@ -1,7 +1,7 @@
 #
 # Automatically generated make config: don't edit
-# Linux kernel version: 2.6.23
-# Thu Oct 18 08:01:57 2007
+# Linux kernel version: 2.6.24-rc4
+# Thu Dec  6 16:48:11 2007
 #
 # CONFIG_PPC64 is not set
 
@@ -43,7 +43,7 @@ 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 is not set
+CONFIG_PPC_UDBG_16550=y
 # CONFIG_GENERIC_TBSYNC is not set
 CONFIG_AUDIT_ARCH=y
 CONFIG_GENERIC_BUG=y
@@ -68,11 +68,14 @@ 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
@@ -206,6 +209,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_DEBUG is not set
 # CONFIG_PCCARD is not set
 # CONFIG_HOTPLUG_PCI is not set
@@ -284,10 +288,6 @@ CONFIG_DEFAULT_TCP_CONG="cubic"
 # CONFIG_LAPB is not set
 # CONFIG_ECONET is not set
 # CONFIG_WAN_ROUTER is not set
-
-#
-# QoS and/or fair queueing
-#
 # CONFIG_NET_SCHED is not set
 
 #
@@ -568,7 +568,6 @@ CONFIG_UNIX98_PTYS=y
 CONFIG_LEGACY_PTYS=y
 CONFIG_LEGACY_PTY_COUNT=256
 # CONFIG_IPMI_HANDLER is not set
-# CONFIG_WATCHDOG is not set
 # CONFIG_HW_RANDOM is not set
 # CONFIG_NVRAM is not set
 # CONFIG_GEN_RTC is not set
@@ -587,6 +586,7 @@ CONFIG_DEVPORT=y
 # CONFIG_W1 is not set
 # CONFIG_POWER_SUPPLY is not set
 # CONFIG_HWMON is not set
+# CONFIG_WATCHDOG is not set
 
 #
 # Sonics Silicon Backplane
@@ -772,16 +772,13 @@ CONFIG_PLIST=y
 CONFIG_HAS_IOMEM=y
 CONFIG_HAS_IOPORT=y
 CONFIG_HAS_DMA=y
-
-#
-# Instrumentation Support
-#
-# CONFIG_PROFILING is not set
+# CONFIG_INSTRUMENTATION 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
@@ -805,10 +802,12 @@ 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_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
index d8ee3c0dcadff4de7d51cacf4b75552ef9fe99ff..a1f98200d9e39827450382edcd6ab7f20b8c0747 100644 (file)
@@ -1,7 +1,7 @@
 #
 # Automatically generated make config: don't edit
-# Linux kernel version: 2.6.23-rc6
-# Fri Sep 14 14:59:56 2007
+# Linux kernel version: 2.6.24-rc4
+# Thu Dec  6 16:48:13 2007
 #
 # CONFIG_PPC64 is not set
 
@@ -18,8 +18,13 @@ CONFIG_8xx=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
@@ -59,9 +64,12 @@ CONFIG_SYSVIPC_SYSCTL=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 is not set
 CONFIG_SYSFS_DEPRECATED=y
 # CONFIG_RELAY is not set
 # CONFIG_BLK_DEV_INITRD is not set
@@ -81,7 +89,6 @@ CONFIG_BUG=y
 CONFIG_ANON_INODES=y
 CONFIG_EPOLL=y
 CONFIG_SIGNALFD=y
-CONFIG_TIMERFD=y
 CONFIG_EVENTFD=y
 CONFIG_SHMEM=y
 # CONFIG_VM_EVENT_COUNTERS is not set
@@ -158,6 +165,10 @@ CONFIG_CPM=y
 # 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=y
 # CONFIG_HZ_250 is not set
 # CONFIG_HZ_300 is not set
@@ -169,6 +180,7 @@ CONFIG_PREEMPT_NONE=y
 CONFIG_BINFMT_ELF=y
 # CONFIG_BINFMT_MISC is not set
 # CONFIG_MATH_EMULATION is not set
+CONFIG_8XX_MINIMAL_FPEMU=y
 CONFIG_ARCH_ENABLE_MEMORY_HOTPLUG=y
 CONFIG_ARCH_FLATMEM_ENABLE=y
 CONFIG_ARCH_POPULATES_NODE_MAP=y
@@ -179,6 +191,7 @@ CONFIG_FLATMEM_MANUAL=y
 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
@@ -204,10 +217,6 @@ CONFIG_FSL_SOC=y
 # CONFIG_PCI_SYSCALL is not set
 # CONFIG_PCI_QSPAN is not set
 # CONFIG_ARCH_SUPPORTS_MSI is not set
-
-#
-# PCCARD (PCMCIA/CardBus) support
-#
 # CONFIG_PCCARD is not set
 
 #
@@ -259,6 +268,7 @@ CONFIG_SYN_COOKIES=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
@@ -284,10 +294,6 @@ CONFIG_DEFAULT_TCP_CONG="cubic"
 # CONFIG_LAPB is not set
 # CONFIG_ECONET is not set
 # CONFIG_WAN_ROUTER is not set
-
-#
-# QoS and/or fair queueing
-#
 # CONFIG_NET_SCHED is not set
 
 #
@@ -316,6 +322,7 @@ CONFIG_DEFAULT_TCP_CONG="cubic"
 #
 # Generic Driver Options
 #
+CONFIG_UEVENT_HELPER_PATH="/sbin/hotplug"
 CONFIG_STANDALONE=y
 CONFIG_PREVENT_FIRMWARE_BUILD=y
 # CONFIG_FW_LOADER is not set
@@ -339,6 +346,7 @@ CONFIG_MTD_BLOCK=y
 # 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
@@ -418,6 +426,7 @@ CONFIG_NETDEVICES=y
 # CONFIG_MACVLAN is not set
 # CONFIG_EQUALIZER is not set
 # CONFIG_TUN is not set
+# CONFIG_VETH is not set
 CONFIG_PHYLIB=y
 
 #
@@ -436,9 +445,15 @@ CONFIG_LXT_PHY=y
 # 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_FS_ENET=y
 # CONFIG_FS_ENET_HAS_SCC is not set
 CONFIG_FS_ENET_HAS_FEC=y
+CONFIG_FS_ENET_MDIO_FEC=y
 # CONFIG_NETDEV_1000 is not set
 # CONFIG_NETDEV_10000 is not set
 
@@ -496,7 +511,6 @@ CONFIG_SERIAL_CPM_SMC2=y
 CONFIG_UNIX98_PTYS=y
 # CONFIG_LEGACY_PTYS is not set
 # CONFIG_IPMI_HANDLER is not set
-# CONFIG_WATCHDOG is not set
 CONFIG_HW_RANDOM=y
 # CONFIG_NVRAM is not set
 CONFIG_GEN_RTC=y
@@ -514,6 +528,13 @@ CONFIG_GEN_RTC=y
 # 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
@@ -530,16 +551,15 @@ CONFIG_DAB=y
 #
 # 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
-# CONFIG_VGASTATE is not set
-# CONFIG_VIDEO_OUTPUT_CONTROL is not set
-# CONFIG_FB is not set
-# CONFIG_FB_IBM_GXT4500 is not set
 
 #
 # Sound
@@ -551,19 +571,6 @@ CONFIG_DAB=y
 # CONFIG_EDAC is not set
 # CONFIG_RTC_CLASS is not set
 
-#
-# DMA Engine support
-#
-# CONFIG_DMA_ENGINE is not set
-
-#
-# DMA Clients
-#
-
-#
-# DMA Devices
-#
-
 #
 # Userspace I/O
 #
@@ -613,7 +620,6 @@ CONFIG_SYSFS=y
 CONFIG_TMPFS=y
 # CONFIG_TMPFS_POSIX_ACL is not set
 # CONFIG_HUGETLB_PAGE is not set
-CONFIG_RAMFS=y
 # CONFIG_CONFIGFS_FS is not set
 
 #
@@ -633,10 +639,7 @@ CONFIG_CRAMFS=y
 # CONFIG_QNX4FS_FS is not set
 # CONFIG_SYSV_FS is not set
 # CONFIG_UFS_FS is not set
-
-#
-# Network File Systems
-#
+CONFIG_NETWORK_FILESYSTEMS=y
 CONFIG_NFS_FS=y
 CONFIG_NFS_V3=y
 # CONFIG_NFS_V3_ACL is not set
@@ -678,15 +681,7 @@ CONFIG_MSDOS_PARTITION=y
 # CONFIG_KARMA_PARTITION is not set
 # CONFIG_EFI_PARTITION is not set
 # CONFIG_SYSV68_PARTITION is not set
-
-#
-# Native Language Support
-#
 # CONFIG_NLS is not set
-
-#
-# Distributed Lock Manager
-#
 # CONFIG_DLM is not set
 # CONFIG_UCC_SLOW is not set
 
@@ -703,16 +698,13 @@ CONFIG_ZLIB_INFLATE=y
 CONFIG_HAS_IOMEM=y
 CONFIG_HAS_IOPORT=y
 CONFIG_HAS_DMA=y
-
-#
-# Instrumentation Support
-#
-# CONFIG_PROFILING is not set
+# CONFIG_INSTRUMENTATION 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
@@ -734,8 +726,11 @@ CONFIG_DEBUG_BUGVERBOSE=y
 CONFIG_DEBUG_INFO=y
 # 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_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
@@ -748,4 +743,7 @@ CONFIG_FORCED_INLINING=y
 #
 # 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
+CONFIG_PPC_LIB_RHEAP=y
index 0a6fa1fc9766d31dba00328bfb36a29dbcdfe793..3673dd23120cbf55c9d740ae06441031fd35bcaf 100644 (file)
@@ -1,7 +1,7 @@
 #
 # Automatically generated make config: don't edit
-# Linux kernel version: 2.6.23-rc4
-# Thu Aug 30 16:34:59 2007
+# Linux kernel version: 2.6.24-rc4
+# Thu Dec  6 16:48:15 2007
 #
 CONFIG_PPC64=y
 
@@ -10,6 +10,7 @@ CONFIG_PPC64=y
 #
 CONFIG_POWER4_ONLY=y
 CONFIG_POWER4=y
+# CONFIG_TUNE_CELL is not set
 CONFIG_PPC_FPU=y
 CONFIG_ALTIVEC=y
 CONFIG_PPC_STD_MMU=y
@@ -18,8 +19,13 @@ CONFIG_VIRT_CPU_ACCOUNTING=y
 CONFIG_SMP=y
 CONFIG_NR_CPUS=4
 CONFIG_64BIT=y
+CONFIG_WORD_SIZE=64
 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
@@ -63,11 +69,15 @@ 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=y
 CONFIG_IKCONFIG_PROC=y
 CONFIG_LOG_BUF_SHIFT=17
-# CONFIG_CPUSETS is not set
+# 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
@@ -88,7 +98,6 @@ 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
@@ -109,6 +118,7 @@ CONFIG_STOP_MACHINE=y
 CONFIG_BLOCK=y
 # CONFIG_BLK_DEV_IO_TRACE is not set
 CONFIG_BLK_DEV_BSG=y
+CONFIG_BLOCK_COMPAT=y
 
 #
 # IO Schedulers
@@ -127,7 +137,6 @@ CONFIG_DEFAULT_IOSCHED="anticipatory"
 # Platform support
 #
 CONFIG_PPC_MULTIPLATFORM=y
-# CONFIG_EMBEDDED6xx is not set
 # CONFIG_PPC_82xx is not set
 # CONFIG_PPC_83xx is not set
 # CONFIG_PPC_86xx is not set
@@ -164,6 +173,8 @@ CONFIG_CPU_FREQ_STAT=y
 # CONFIG_CPU_FREQ_STAT_DETAILS is not set
 CONFIG_CPU_FREQ_DEFAULT_GOV_PERFORMANCE=y
 # CONFIG_CPU_FREQ_DEFAULT_GOV_USERSPACE is not set
+# CONFIG_CPU_FREQ_DEFAULT_GOV_ONDEMAND is not set
+# CONFIG_CPU_FREQ_DEFAULT_GOV_CONSERVATIVE is not set
 CONFIG_CPU_FREQ_GOV_PERFORMANCE=y
 CONFIG_CPU_FREQ_GOV_POWERSAVE=y
 CONFIG_CPU_FREQ_GOV_USERSPACE=y
@@ -180,6 +191,10 @@ CONFIG_CPU_FREQ_PMAC64=y
 #
 # Kernel options
 #
+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
@@ -192,6 +207,7 @@ CONFIG_PREEMPT_NONE=y
 CONFIG_BINFMT_ELF=y
 # CONFIG_BINFMT_MISC is not set
 CONFIG_FORCE_MAX_ZONEORDER=13
+CONFIG_HUGETLB_PAGE_SIZE_VARIABLE=y
 CONFIG_IOMMU_VMERGE=y
 # CONFIG_HOTPLUG_CPU is not set
 CONFIG_ARCH_ENABLE_MEMORY_HOTPLUG=y
@@ -210,6 +226,7 @@ CONFIG_FLATMEM_MANUAL=y
 CONFIG_FLATMEM=y
 CONFIG_FLAT_NODE_MEM_MAP=y
 # CONFIG_SPARSEMEM_STATIC is not set
+CONFIG_SPARSEMEM_VMEMMAP_ENABLE=y
 CONFIG_SPLIT_PTLOCK_CPUS=4
 CONFIG_RESOURCES_64BIT=y
 CONFIG_ZONE_DMA_FLAG=1
@@ -221,6 +238,7 @@ CONFIG_PROC_DEVICETREE=y
 # CONFIG_CMDLINE_BOOL is not set
 # CONFIG_PM is not set
 CONFIG_SUSPEND_SMP_POSSIBLE=y
+CONFIG_HIBERNATION_SMP_POSSIBLE=y
 CONFIG_SECCOMP=y
 # CONFIG_WANT_DEVICE_TREE is not set
 CONFIG_ISA_DMA_API=y
@@ -237,11 +255,8 @@ CONFIG_PCI_SYSCALL=y
 # CONFIG_PCIEPORTBUS is not set
 CONFIG_ARCH_SUPPORTS_MSI=y
 CONFIG_PCI_MSI=y
+CONFIG_PCI_LEGACY=y
 # CONFIG_PCI_DEBUG is not set
-
-#
-# PCCARD (PCMCIA/CardBus) support
-#
 # CONFIG_PCCARD is not set
 # CONFIG_HOTPLUG_PCI is not set
 CONFIG_KERNEL_START=0xc000000000000000
@@ -281,6 +296,7 @@ CONFIG_INET_TUNNEL=y
 CONFIG_INET_XFRM_MODE_TRANSPORT=y
 CONFIG_INET_XFRM_MODE_TUNNEL=y
 CONFIG_INET_XFRM_MODE_BEET=y
+CONFIG_INET_LRO=y
 CONFIG_INET_DIAG=y
 CONFIG_INET_TCP_DIAG=y
 # CONFIG_TCP_CONG_ADVANCED is not set
@@ -340,10 +356,6 @@ CONFIG_LLC=y
 # CONFIG_LAPB is not set
 # CONFIG_ECONET is not set
 # CONFIG_WAN_ROUTER is not set
-
-#
-# QoS and/or fair queueing
-#
 # CONFIG_NET_SCHED is not set
 
 #
@@ -372,6 +384,7 @@ CONFIG_LLC=y
 #
 # Generic Driver Options
 #
+CONFIG_UEVENT_HELPER_PATH="/sbin/hotplug"
 CONFIG_STANDALONE=y
 CONFIG_PREVENT_FIRMWARE_BUILD=y
 CONFIG_FW_LOADER=y
@@ -426,15 +439,17 @@ 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_IDEPCI=y
 # CONFIG_IDEPCI_SHARE_IRQ is not set
 CONFIG_IDEPCI_PCIBUS_ORDER=y
-# CONFIG_BLK_DEV_OFFBOARD is not set
 # CONFIG_BLK_DEV_GENERIC is not set
 # CONFIG_BLK_DEV_OPTI621 is not set
 CONFIG_BLK_DEV_IDEDMA_PCI=y
-# CONFIG_BLK_DEV_IDEDMA_FORCED is not set
-# CONFIG_IDEDMA_ONLYDISK is not set
 # CONFIG_BLK_DEV_AEC62XX is not set
 # CONFIG_BLK_DEV_ALI15X3 is not set
 # CONFIG_BLK_DEV_AMD74XX is not set
@@ -465,7 +480,7 @@ CONFIG_BLK_DEV_IDE_PMAC_ATA100FIRST=y
 CONFIG_BLK_DEV_IDEDMA_PMAC=y
 # CONFIG_IDE_ARM is not set
 CONFIG_BLK_DEV_IDEDMA=y
-# CONFIG_IDEDMA_IVB is not set
+CONFIG_IDE_ARCH_OBSOLETE_INIT=y
 # CONFIG_BLK_DEV_HD is not set
 
 #
@@ -506,6 +521,7 @@ CONFIG_SCSI_SPI_ATTRS=y
 # CONFIG_SCSI_ISCSI_ATTRS is not set
 # CONFIG_SCSI_SAS_ATTRS is not set
 # CONFIG_SCSI_SAS_LIBSAS is not set
+# CONFIG_SCSI_SRP_ATTRS is not set
 CONFIG_SCSI_LOWLEVEL=y
 # CONFIG_ISCSI_TCP is not set
 # CONFIG_BLK_DEV_3W_XXXX_RAID is not set
@@ -581,6 +597,7 @@ CONFIG_SATA_SVW=y
 # 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
@@ -610,14 +627,8 @@ CONFIG_DM_MIRROR=m
 CONFIG_DM_ZERO=m
 # CONFIG_DM_MULTIPATH is not set
 # CONFIG_DM_DELAY is not set
-
-#
-# Fusion MPT device support
-#
+# CONFIG_DM_UEVENT is not set
 # CONFIG_FUSION is not set
-# CONFIG_FUSION_SPI is not set
-# CONFIG_FUSION_FC is not set
-# CONFIG_FUSION_SAS is not set
 
 #
 # IEEE 1394 (FireWire) support
@@ -664,6 +675,8 @@ CONFIG_BONDING=m
 # CONFIG_MACVLAN is not set
 # CONFIG_EQUALIZER is not set
 CONFIG_TUN=m
+# CONFIG_VETH is not set
+# CONFIG_IP1000 is not set
 # CONFIG_ARCNET is not set
 # CONFIG_PHYLIB is not set
 CONFIG_NET_ETHERNET=y
@@ -674,7 +687,12 @@ CONFIG_SUNGEM=y
 # 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=y
 CONFIG_ACENIC_OMIT_TIGON_I=y
@@ -682,6 +700,7 @@ CONFIG_ACENIC_OMIT_TIGON_I=y
 CONFIG_E1000=y
 # CONFIG_E1000_NAPI is not set
 # CONFIG_E1000_DISABLE_PACKET_SPLIT is not set
+# CONFIG_E1000E is not set
 # CONFIG_NS83820 is not set
 # CONFIG_HAMACHI is not set
 # CONFIG_YELLOWFIN is not set
@@ -689,6 +708,7 @@ CONFIG_E1000=y
 # 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=y
 # CONFIG_BNX2 is not set
@@ -697,12 +717,15 @@ CONFIG_TIGON3=y
 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_PASEMI_MAC is not set
 # CONFIG_MLX4_CORE is not set
+# CONFIG_TEHUTI is not set
 CONFIG_TR=y
 CONFIG_IBMOL=y
 # CONFIG_3C359 is not set
@@ -721,7 +744,6 @@ CONFIG_USB_CATC=m
 CONFIG_USB_KAWETH=m
 CONFIG_USB_PEGASUS=m
 CONFIG_USB_RTL8150=m
-# CONFIG_USB_USBNET_MII is not set
 CONFIG_USB_USBNET=m
 # CONFIG_USB_NET_AX8817X is not set
 CONFIG_USB_NET_CDCETHER=m
@@ -771,7 +793,6 @@ CONFIG_INPUT_MOUSEDEV=y
 CONFIG_INPUT_MOUSEDEV_SCREEN_X=1024
 CONFIG_INPUT_MOUSEDEV_SCREEN_Y=768
 CONFIG_INPUT_JOYDEV=m
-# CONFIG_INPUT_TSDEV is not set
 CONFIG_INPUT_EVDEV=y
 # CONFIG_INPUT_EVBUG is not set
 
@@ -828,15 +849,11 @@ CONFIG_UNIX98_PTYS=y
 CONFIG_LEGACY_PTYS=y
 CONFIG_LEGACY_PTY_COUNT=256
 # CONFIG_IPMI_HANDLER is not set
-# CONFIG_WATCHDOG is not set
 # CONFIG_HW_RANDOM 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_AGP=m
-CONFIG_AGP_UNINORTH=m
-# CONFIG_DRM is not set
 CONFIG_RAW_DRIVER=y
 CONFIG_MAX_RAW_DEVS=256
 # CONFIG_HANGCHECK_TIMER is not set
@@ -906,6 +923,13 @@ CONFIG_I2C_POWERMAC=y
 # 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
@@ -923,14 +947,9 @@ CONFIG_DAB=y
 #
 # Graphics support
 #
-CONFIG_BACKLIGHT_LCD_SUPPORT=y
-CONFIG_LCD_CLASS_DEVICE=m
-CONFIG_BACKLIGHT_CLASS_DEVICE=y
-
-#
-# Display device support
-#
-# CONFIG_DISPLAY_SUPPORT is not set
+CONFIG_AGP=m
+CONFIG_AGP_UNINORTH=m
+# CONFIG_DRM is not set
 CONFIG_VGASTATE=y
 CONFIG_VIDEO_OUTPUT_CONTROL=m
 CONFIG_FB=y
@@ -939,6 +958,7 @@ CONFIG_FB_DDC=y
 CONFIG_FB_CFB_FILLRECT=y
 CONFIG_FB_CFB_COPYAREA=y
 CONFIG_FB_CFB_IMAGEBLIT=y
+# CONFIG_FB_CFB_REV_PIXELS_IN_BYTE is not set
 # CONFIG_FB_SYS_FILLRECT is not set
 # CONFIG_FB_SYS_COPYAREA is not set
 # CONFIG_FB_SYS_IMAGEBLIT is not set
@@ -986,6 +1006,15 @@ CONFIG_FB_RADEON_BACKLIGHT=y
 # CONFIG_FB_PM3 is not set
 # CONFIG_FB_IBM_GXT4500 is not set
 # CONFIG_FB_VIRTUAL is not set
+CONFIG_BACKLIGHT_LCD_SUPPORT=y
+CONFIG_LCD_CLASS_DEVICE=m
+CONFIG_BACKLIGHT_CLASS_DEVICE=y
+# CONFIG_BACKLIGHT_CORGI is not set
+
+#
+# Display device support
+#
+# CONFIG_DISPLAY_SUPPORT is not set
 
 #
 # Console display driver support
@@ -1143,6 +1172,7 @@ CONFIG_SND_USB_AUDIO=m
 CONFIG_HID_SUPPORT=y
 CONFIG_HID=y
 # CONFIG_HID_DEBUG is not set
+# CONFIG_HIDRAW is not set
 
 #
 # USB Input Devices
@@ -1239,6 +1269,7 @@ CONFIG_USB_SERIAL_GENERIC=y
 # CONFIG_USB_SERIAL_AIRPRIME is not set
 # CONFIG_USB_SERIAL_ARK3116 is not set
 CONFIG_USB_SERIAL_BELKIN=m
+# CONFIG_USB_SERIAL_CH341 is not set
 # CONFIG_USB_SERIAL_WHITEHEAT is not set
 CONFIG_USB_SERIAL_DIGI_ACCELEPORT=m
 # CONFIG_USB_SERIAL_CP2101 is not set
@@ -1325,19 +1356,6 @@ CONFIG_USB_APPLEDISPLAY=m
 # CONFIG_EDAC is not set
 # CONFIG_RTC_CLASS is not set
 
-#
-# DMA Engine support
-#
-# CONFIG_DMA_ENGINE is not set
-
-#
-# DMA Clients
-#
-
-#
-# DMA Devices
-#
-
 #
 # Userspace I/O
 #
@@ -1415,7 +1433,6 @@ CONFIG_TMPFS=y
 # CONFIG_TMPFS_POSIX_ACL is not set
 CONFIG_HUGETLBFS=y
 CONFIG_HUGETLB_PAGE=y
-CONFIG_RAMFS=y
 # CONFIG_CONFIGFS_FS is not set
 
 #
@@ -1434,10 +1451,7 @@ CONFIG_CRAMFS=y
 # CONFIG_QNX4FS_FS is not set
 # CONFIG_SYSV_FS is not set
 # CONFIG_UFS_FS is not set
-
-#
-# Network File Systems
-#
+CONFIG_NETWORK_FILESYSTEMS=y
 CONFIG_NFS_FS=y
 CONFIG_NFS_V3=y
 CONFIG_NFS_V3_ACL=y
@@ -1491,10 +1505,6 @@ CONFIG_MSDOS_PARTITION=y
 # CONFIG_KARMA_PARTITION is not set
 # CONFIG_EFI_PARTITION is not set
 # CONFIG_SYSV68_PARTITION is not set
-
-#
-# Native Language Support
-#
 CONFIG_NLS=y
 CONFIG_NLS_DEFAULT="iso8859-1"
 CONFIG_NLS_CODEPAGE_437=y
@@ -1535,10 +1545,6 @@ CONFIG_NLS_ISO8859_15=y
 # CONFIG_NLS_KOI8_R is not set
 # CONFIG_NLS_KOI8_U is not set
 CONFIG_NLS_UTF8=y
-
-#
-# Distributed Lock Manager
-#
 # CONFIG_DLM is not set
 # CONFIG_UCC_SLOW is not set
 
@@ -1558,18 +1564,17 @@ CONFIG_PLIST=y
 CONFIG_HAS_IOMEM=y
 CONFIG_HAS_IOPORT=y
 CONFIG_HAS_DMA=y
-
-#
-# Instrumentation Support
-#
+CONFIG_INSTRUMENTATION=y
 CONFIG_PROFILING=y
 CONFIG_OPROFILE=y
 # 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
@@ -1593,14 +1598,18 @@ 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_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 is not set
 CONFIG_IRQSTACKS=y
+# CONFIG_VIRQ_DEBUG is not set
 CONFIG_BOOTX_TEXT=y
 # CONFIG_PPC_EARLY_DEBUG is not set
 
@@ -1609,6 +1618,7 @@ CONFIG_BOOTX_TEXT=y
 #
 # 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
@@ -1629,6 +1639,7 @@ 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_CRYPTD is not set
 CONFIG_CRYPTO_DES=y
 # CONFIG_CRYPTO_FCRYPT is not set
@@ -1643,9 +1654,12 @@ CONFIG_CRYPTO_TEA=m
 CONFIG_CRYPTO_ARC4=m
 CONFIG_CRYPTO_KHAZAD=m
 CONFIG_CRYPTO_ANUBIS=m
+# CONFIG_CRYPTO_SEED 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 is not set
 # CONFIG_CRYPTO_HW is not set
+# CONFIG_PPC_CLOCK is not set
index 11009185d2309fad140bceebd6c04c4ef332eda4..a211a79959ca867b3210f4461c64df9f486c6ff7 100644 (file)
@@ -1,7 +1,7 @@
 #
 # Automatically generated make config: don't edit
-# Linux kernel version: 2.6.23-rc4
-# Thu Aug 30 16:35:41 2007
+# Linux kernel version: 2.6.24-rc4
+# Thu Dec  6 16:48:17 2007
 #
 # CONFIG_PPC64 is not set
 
@@ -15,13 +15,19 @@ CONFIG_6xx=y
 # CONFIG_44x is not set
 # CONFIG_E200 is not set
 CONFIG_PPC_FPU=y
+# CONFIG_ALTIVEC 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_IRQ_PER_CPU=y
 CONFIG_RWSEM_XCHGADD_ALGORITHM=y
@@ -61,9 +67,12 @@ CONFIG_SYSVIPC_SYSCTL=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 is not set
 CONFIG_SYSFS_DEPRECATED=y
 # CONFIG_RELAY is not set
 CONFIG_BLK_DEV_INITRD=y
@@ -84,7 +93,6 @@ 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
@@ -122,16 +130,21 @@ CONFIG_DEFAULT_IOSCHED="anticipatory"
 #
 # Platform support
 #
-# CONFIG_PPC_MULTIPLATFORM is not set
-CONFIG_EMBEDDED6xx=y
+CONFIG_PPC_MULTIPLATFORM=y
 # CONFIG_PPC_82xx is not set
 # CONFIG_PPC_83xx is not set
 # CONFIG_PPC_86xx is not set
+CONFIG_CLASSIC32=y
+# CONFIG_PPC_CHRP is not set
 # CONFIG_PPC_MPC52xx is not set
 # CONFIG_PPC_MPC5200 is not set
+# CONFIG_PPC_EFIKA is not set
+# CONFIG_PPC_LITE5200 is not set
+# CONFIG_PPC_PMAC is not set
 # CONFIG_PPC_CELL is not set
 # CONFIG_PPC_CELL_NATIVE is not set
 # CONFIG_PQ2ADS is not set
+CONFIG_EMBEDDED6xx=y
 # CONFIG_LINKSTATION is not set
 # CONFIG_MPC7448HPC2 is not set
 CONFIG_PPC_HOLLY=y
@@ -147,6 +160,7 @@ CONFIG_MPIC_WEIRD=y
 # CONFIG_PPC_INDIRECT_IO is not set
 # CONFIG_GENERIC_IOMAP is not set
 # CONFIG_CPU_FREQ is not set
+# CONFIG_TAU is not set
 # CONFIG_CPM2 is not set
 # CONFIG_FSL_ULI1575 is not set
 
@@ -154,6 +168,10 @@ CONFIG_MPIC_WEIRD=y
 # 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
@@ -165,6 +183,7 @@ CONFIG_PREEMPT_NONE=y
 CONFIG_BINFMT_ELF=y
 CONFIG_BINFMT_MISC=y
 CONFIG_ARCH_ENABLE_MEMORY_HOTPLUG=y
+# CONFIG_KEXEC is not set
 CONFIG_ARCH_FLATMEM_ENABLE=y
 CONFIG_ARCH_POPULATES_NODE_MAP=y
 CONFIG_SELECT_MEMORY_MODEL=y
@@ -174,6 +193,7 @@ CONFIG_FLATMEM_MANUAL=y
 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
@@ -183,6 +203,8 @@ CONFIG_PROC_DEVICETREE=y
 CONFIG_CMDLINE_BOOL=y
 CONFIG_CMDLINE="console=ttyS0,115200"
 # CONFIG_PM is not set
+CONFIG_SUSPEND_UP_POSSIBLE=y
+CONFIG_HIBERNATION_UP_POSSIBLE=y
 # CONFIG_SECCOMP is not set
 CONFIG_WANT_DEVICE_TREE=y
 CONFIG_DEVICE_TREE="holly.dts"
@@ -200,11 +222,8 @@ 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
-
-#
-# PCCARD (PCMCIA/CardBus) support
-#
 # CONFIG_PCCARD is not set
 # CONFIG_HOTPLUG_PCI is not set
 
@@ -219,7 +238,7 @@ CONFIG_ARCH_SUPPORTS_MSI=y
 CONFIG_HIGHMEM_START=0xfe000000
 CONFIG_LOWMEM_SIZE=0x30000000
 CONFIG_KERNEL_START=0xc0000000
-CONFIG_TASK_SIZE=0x80000000
+CONFIG_TASK_SIZE=0xc0000000
 CONFIG_BOOT_LOAD=0x00800000
 
 #
@@ -259,6 +278,7 @@ CONFIG_SYN_COOKIES=y
 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
@@ -284,10 +304,6 @@ CONFIG_DEFAULT_TCP_CONG="cubic"
 # CONFIG_LAPB is not set
 # CONFIG_ECONET is not set
 # CONFIG_WAN_ROUTER is not set
-
-#
-# QoS and/or fair queueing
-#
 # CONFIG_NET_SCHED is not set
 
 #
@@ -316,6 +332,7 @@ CONFIG_DEFAULT_TCP_CONG="cubic"
 #
 # Generic Driver Options
 #
+CONFIG_UEVENT_HELPER_PATH="/sbin/hotplug"
 CONFIG_STANDALONE=y
 CONFIG_PREVENT_FIRMWARE_BUILD=y
 # CONFIG_FW_LOADER is not set
@@ -386,6 +403,7 @@ CONFIG_SCSI_WAIT_SCAN=m
 # 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
@@ -397,6 +415,7 @@ CONFIG_SCSI_LOWLEVEL=y
 # 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
@@ -464,6 +483,7 @@ CONFIG_ATA=y
 # 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
@@ -478,14 +498,7 @@ CONFIG_ATA=y
 # CONFIG_PATA_WINBOND is not set
 # CONFIG_PATA_PLATFORM is not set
 # CONFIG_MD is not set
-
-#
-# Fusion MPT device support
-#
 # CONFIG_FUSION is not set
-# CONFIG_FUSION_SPI is not set
-# CONFIG_FUSION_FC is not set
-# CONFIG_FUSION_SAS is not set
 
 #
 # IEEE 1394 (FireWire) support
@@ -501,6 +514,8 @@ CONFIG_NETDEVICES=y
 # 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=y
 
@@ -517,6 +532,7 @@ CONFIG_PHYLIB=y
 # CONFIG_BROADCOM_PHY is not set
 # CONFIG_ICPLUS_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
@@ -527,11 +543,17 @@ CONFIG_VORTEX=y
 # CONFIG_TYPHOON 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_NS83820 is not set
 # CONFIG_HAMACHI is not set
 # CONFIG_YELLOWFIN is not set
@@ -539,20 +561,25 @@ CONFIG_NETDEV_1000=y
 # 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_TSI108_ETH=y
+# CONFIG_MV643XX_ETH 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
 
 #
@@ -585,7 +612,6 @@ CONFIG_INPUT=y
 #
 # CONFIG_INPUT_MOUSEDEV is not set
 # CONFIG_INPUT_JOYDEV is not set
-# CONFIG_INPUT_TSDEV is not set
 # CONFIG_INPUT_EVDEV is not set
 # CONFIG_INPUT_EVBUG is not set
 
@@ -637,15 +663,12 @@ CONFIG_UNIX98_PTYS=y
 CONFIG_LEGACY_PTYS=y
 CONFIG_LEGACY_PTY_COUNT=256
 # CONFIG_IPMI_HANDLER is not set
-# CONFIG_WATCHDOG 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_AGP is not set
-# CONFIG_DRM is not set
 # CONFIG_RAW_DRIVER is not set
 # CONFIG_TCG_TPM is not set
 CONFIG_DEVPORT=y
@@ -660,9 +683,9 @@ CONFIG_DEVPORT=y
 # CONFIG_POWER_SUPPLY is not set
 CONFIG_HWMON=y
 # CONFIG_HWMON_VID is not set
-# CONFIG_SENSORS_ABITUGURU is not set
-# CONFIG_SENSORS_ABITUGURU3 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
@@ -675,6 +698,13 @@ CONFIG_HWMON=y
 # 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
@@ -691,16 +721,17 @@ CONFIG_HWMON=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
-# CONFIG_VGASTATE is not set
-# CONFIG_VIDEO_OUTPUT_CONTROL is not set
-# CONFIG_FB is not set
-# CONFIG_FB_IBM_GXT4500 is not set
 
 #
 # Sound
@@ -709,6 +740,7 @@ CONFIG_HWMON=y
 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
@@ -729,19 +761,6 @@ CONFIG_USB_ARCH_HAS_EHCI=y
 # CONFIG_EDAC is not set
 # CONFIG_RTC_CLASS is not set
 
-#
-# DMA Engine support
-#
-# CONFIG_DMA_ENGINE is not set
-
-#
-# DMA Clients
-#
-
-#
-# DMA Devices
-#
-
 #
 # Userspace I/O
 #
@@ -759,7 +778,6 @@ CONFIG_EXT3_FS_XATTR=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 is not set
 # CONFIG_JFS_FS is not set
@@ -800,7 +818,6 @@ CONFIG_SYSFS=y
 CONFIG_TMPFS=y
 # CONFIG_TMPFS_POSIX_ACL is not set
 # CONFIG_HUGETLB_PAGE is not set
-CONFIG_RAMFS=y
 # CONFIG_CONFIGFS_FS is not set
 
 #
@@ -819,10 +836,7 @@ CONFIG_RAMFS=y
 # CONFIG_QNX4FS_FS is not set
 # CONFIG_SYSV_FS is not set
 # CONFIG_UFS_FS is not set
-
-#
-# Network File Systems
-#
+CONFIG_NETWORK_FILESYSTEMS=y
 CONFIG_NFS_FS=y
 # CONFIG_NFS_V3 is not set
 # CONFIG_NFS_V4 is not set
@@ -862,15 +876,7 @@ CONFIG_MSDOS_PARTITION=y
 # CONFIG_KARMA_PARTITION is not set
 # CONFIG_EFI_PARTITION is not set
 # CONFIG_SYSV68_PARTITION is not set
-
-#
-# Native Language Support
-#
 # CONFIG_NLS is not set
-
-#
-# Distributed Lock Manager
-#
 # CONFIG_DLM is not set
 # CONFIG_UCC_SLOW is not set
 
@@ -888,17 +894,13 @@ CONFIG_PLIST=y
 CONFIG_HAS_IOMEM=y
 CONFIG_HAS_IOPORT=y
 CONFIG_HAS_DMA=y
-
-#
-# Instrumentation Support
-#
-# CONFIG_PROFILING is not set
-# CONFIG_KPROBES is not set
+# CONFIG_INSTRUMENTATION 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
@@ -922,9 +924,12 @@ CONFIG_DETECT_SOFTLOCKUP=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_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
@@ -933,6 +938,7 @@ CONFIG_XMON=y
 CONFIG_XMON_DEFAULT=y
 CONFIG_XMON_DISASSEMBLY=y
 # CONFIG_BDI_SWITCH is not set
+# CONFIG_BOOTX_TEXT is not set
 # CONFIG_PPC_EARLY_DEBUG is not set
 
 #
@@ -940,4 +946,6 @@ CONFIG_XMON_DISASSEMBLY=y
 #
 # 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
index d78e3a6fc68cdf066e2c5cd8b8b769b118153b6a..4a87745c78036e96a8f102e89fd1dd54414353ac 100644 (file)
@@ -1,7 +1,7 @@
 #
 # Automatically generated make config: don't edit
-# Linux kernel version: 2.6.23-rc4
-# Thu Aug 30 16:37:16 2007
+# Linux kernel version: 2.6.24-rc3
+# Wed Nov 21 11:19:59 2007
 #
 CONFIG_PPC64=y
 
@@ -11,6 +11,7 @@ CONFIG_PPC64=y
 # CONFIG_POWER4_ONLY is not set
 CONFIG_POWER3=y
 CONFIG_POWER4=y
+# CONFIG_TUNE_CELL is not set
 CONFIG_PPC_FPU=y
 # CONFIG_ALTIVEC is not set
 CONFIG_PPC_STD_MMU=y
@@ -19,8 +20,13 @@ CONFIG_VIRT_CPU_ACCOUNTING=y
 CONFIG_SMP=y
 CONFIG_NR_CPUS=32
 CONFIG_64BIT=y
+CONFIG_WORD_SIZE=64
 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
@@ -63,12 +69,17 @@ 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=y
 CONFIG_AUDITSYSCALL=y
+CONFIG_AUDIT_TREE=y
 CONFIG_IKCONFIG=y
 CONFIG_IKCONFIG_PROC=y
 CONFIG_LOG_BUF_SHIFT=17
-# CONFIG_CPUSETS is not set
+# 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
@@ -89,7 +100,6 @@ 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
@@ -110,6 +120,7 @@ CONFIG_STOP_MACHINE=y
 CONFIG_BLOCK=y
 # CONFIG_BLK_DEV_IO_TRACE is not set
 CONFIG_BLK_DEV_BSG=y
+CONFIG_BLOCK_COMPAT=y
 
 #
 # IO Schedulers
@@ -128,7 +139,6 @@ CONFIG_DEFAULT_IOSCHED="anticipatory"
 # Platform support
 #
 CONFIG_PPC_MULTIPLATFORM=y
-# CONFIG_EMBEDDED6xx is not set
 # CONFIG_PPC_82xx is not set
 # CONFIG_PPC_83xx is not set
 # CONFIG_PPC_86xx is not set
@@ -172,6 +182,10 @@ CONFIG_GENERIC_IOMAP=y
 #
 # Kernel options
 #
+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
@@ -201,6 +215,7 @@ CONFIG_FLATMEM_MANUAL=y
 CONFIG_FLATMEM=y
 CONFIG_FLAT_NODE_MEM_MAP=y
 # CONFIG_SPARSEMEM_STATIC is not set
+CONFIG_SPARSEMEM_VMEMMAP_ENABLE=y
 CONFIG_SPLIT_PTLOCK_CPUS=4
 CONFIG_RESOURCES_64BIT=y
 CONFIG_ZONE_DMA_FLAG=1
@@ -227,11 +242,8 @@ 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
-
-#
-# PCCARD (PCMCIA/CardBus) support
-#
 # CONFIG_PCCARD is not set
 # CONFIG_HOTPLUG_PCI is not set
 CONFIG_KERNEL_START=0xc000000000000000
@@ -271,6 +283,7 @@ CONFIG_INET_TUNNEL=y
 CONFIG_INET_XFRM_MODE_TRANSPORT=y
 CONFIG_INET_XFRM_MODE_TUNNEL=y
 CONFIG_INET_XFRM_MODE_BEET=m
+# CONFIG_INET_LRO is not set
 CONFIG_INET_DIAG=y
 CONFIG_INET_TCP_DIAG=y
 # CONFIG_TCP_CONG_ADVANCED is not set
@@ -338,6 +351,7 @@ CONFIG_NETFILTER_XT_MATCH_SCTP=m
 # CONFIG_NETFILTER_XT_MATCH_STATISTIC is not set
 CONFIG_NETFILTER_XT_MATCH_STRING=m
 CONFIG_NETFILTER_XT_MATCH_TCPMSS=m
+CONFIG_NETFILTER_XT_MATCH_TIME=m
 # CONFIG_NETFILTER_XT_MATCH_U32 is not set
 # CONFIG_NETFILTER_XT_MATCH_HASHLIMIT is not set
 
@@ -403,10 +417,6 @@ CONFIG_LLC=y
 # CONFIG_LAPB is not set
 # CONFIG_ECONET is not set
 # CONFIG_WAN_ROUTER is not set
-
-#
-# QoS and/or fair queueing
-#
 # CONFIG_NET_SCHED is not set
 CONFIG_NET_CLS_ROUTE=y
 
@@ -436,6 +446,7 @@ CONFIG_NET_CLS_ROUTE=y
 #
 # Generic Driver Options
 #
+CONFIG_UEVENT_HELPER_PATH="/sbin/hotplug"
 CONFIG_STANDALONE=y
 CONFIG_PREVENT_FIRMWARE_BUILD=y
 CONFIG_FW_LOADER=m
@@ -508,6 +519,7 @@ CONFIG_SCSI_FC_ATTRS=y
 CONFIG_SCSI_SAS_ATTRS=m
 CONFIG_SCSI_SAS_LIBSAS=m
 CONFIG_SCSI_SAS_LIBSAS_DEBUG=y
+CONFIG_SCSI_SRP_ATTRS=m
 CONFIG_SCSI_LOWLEVEL=y
 # CONFIG_ISCSI_TCP is not set
 # CONFIG_BLK_DEV_3W_XXXX_RAID is not set
@@ -559,14 +571,8 @@ CONFIG_DM_MIRROR=m
 CONFIG_DM_ZERO=m
 # CONFIG_DM_MULTIPATH is not set
 # CONFIG_DM_DELAY is not set
-
-#
-# Fusion MPT device support
-#
+# CONFIG_DM_UEVENT is not set
 # CONFIG_FUSION is not set
-# CONFIG_FUSION_SPI is not set
-# CONFIG_FUSION_FC is not set
-# CONFIG_FUSION_SAS is not set
 
 #
 # IEEE 1394 (FireWire) support
@@ -582,6 +588,8 @@ CONFIG_BONDING=m
 # CONFIG_MACVLAN is not set
 # CONFIG_EQUALIZER is not set
 CONFIG_TUN=m
+# CONFIG_VETH is not set
+# CONFIG_IP1000 is not set
 # CONFIG_ARCNET is not set
 # CONFIG_PHYLIB is not set
 CONFIG_NET_ETHERNET=y
@@ -592,6 +600,10 @@ CONFIG_MII=y
 # 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=y
 CONFIG_PCNET32_NAPI=y
@@ -599,7 +611,6 @@ CONFIG_PCNET32_NAPI=y
 # CONFIG_ADAPTEC_STARFIRE is not set
 # CONFIG_B44 is not set
 # CONFIG_FORCEDETH is not set
-# CONFIG_DGRS is not set
 # CONFIG_EEPRO100 is not set
 CONFIG_E100=y
 # CONFIG_FEALNX is not set
@@ -619,6 +630,7 @@ CONFIG_ACENIC=m
 CONFIG_E1000=m
 # CONFIG_E1000_NAPI is not set
 # CONFIG_E1000_DISABLE_PACKET_SPLIT is not set
+# CONFIG_E1000E is not set
 # CONFIG_NS83820 is not set
 # CONFIG_HAMACHI is not set
 # CONFIG_YELLOWFIN is not set
@@ -626,6 +638,7 @@ CONFIG_E1000=m
 # 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
@@ -634,12 +647,15 @@ CONFIG_E1000=m
 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_PASEMI_MAC is not set
 # CONFIG_MLX4_CORE is not set
+# CONFIG_TEHUTI is not set
 CONFIG_TR=y
 CONFIG_IBMOL=y
 # CONFIG_3C359 is not set
@@ -669,6 +685,7 @@ CONFIG_SLHC=m
 # CONFIG_NET_FC is not set
 # CONFIG_SHAPER is not set
 CONFIG_NETCONSOLE=y
+# CONFIG_NETCONSOLE_DYNAMIC is not set
 CONFIG_NETPOLL=y
 CONFIG_NETPOLL_TRAP=y
 CONFIG_NET_POLL_CONTROLLER=y
@@ -690,7 +707,6 @@ CONFIG_INPUT_MOUSEDEV=y
 CONFIG_INPUT_MOUSEDEV_SCREEN_X=1024
 CONFIG_INPUT_MOUSEDEV_SCREEN_Y=768
 # CONFIG_INPUT_JOYDEV is not set
-# CONFIG_INPUT_TSDEV is not set
 # CONFIG_INPUT_EVDEV is not set
 # CONFIG_INPUT_EVBUG is not set
 
@@ -736,14 +752,11 @@ CONFIG_LEGACY_PTY_COUNT=256
 CONFIG_HVC_DRIVER=y
 CONFIG_HVC_ISERIES=y
 # CONFIG_IPMI_HANDLER is not set
-# CONFIG_WATCHDOG is not set
 # CONFIG_HW_RANDOM 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_AGP is not set
-# CONFIG_DRM is not set
 CONFIG_RAW_DRIVER=y
 CONFIG_MAX_RAW_DEVS=256
 # CONFIG_HANGCHECK_TIMER is not set
@@ -759,6 +772,13 @@ CONFIG_DEVPORT=y
 # 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
@@ -775,16 +795,17 @@ CONFIG_DEVPORT=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
-# CONFIG_VGASTATE is not set
-# CONFIG_VIDEO_OUTPUT_CONTROL is not set
-# CONFIG_FB is not set
-# CONFIG_FB_IBM_GXT4500 is not set
 
 #
 # Console display driver support
@@ -805,19 +826,6 @@ CONFIG_DUMMY_CONSOLE=y
 # CONFIG_EDAC is not set
 # CONFIG_RTC_CLASS is not set
 
-#
-# DMA Engine support
-#
-# CONFIG_DMA_ENGINE is not set
-
-#
-# DMA Clients
-#
-
-#
-# DMA Devices
-#
-
 #
 # Userspace I/O
 #
@@ -902,7 +910,6 @@ CONFIG_TMPFS=y
 CONFIG_TMPFS_POSIX_ACL=y
 # CONFIG_HUGETLBFS is not set
 # CONFIG_HUGETLB_PAGE is not set
-CONFIG_RAMFS=y
 CONFIG_CONFIGFS_FS=m
 
 #
@@ -921,10 +928,7 @@ CONFIG_CRAMFS=y
 # CONFIG_QNX4FS_FS is not set
 # CONFIG_SYSV_FS is not set
 # CONFIG_UFS_FS is not set
-
-#
-# Network File Systems
-#
+CONFIG_NETWORK_FILESYSTEMS=y
 CONFIG_NFS_FS=y
 CONFIG_NFS_V3=y
 CONFIG_NFS_V3_ACL=y
@@ -963,10 +967,6 @@ CONFIG_CIFS_POSIX=y
 #
 # CONFIG_PARTITION_ADVANCED is not set
 CONFIG_MSDOS_PARTITION=y
-
-#
-# Native Language Support
-#
 CONFIG_NLS=y
 CONFIG_NLS_DEFAULT="iso8859-1"
 CONFIG_NLS_CODEPAGE_437=y
@@ -1007,10 +1007,6 @@ CONFIG_NLS_ISO8859_1=y
 # CONFIG_NLS_KOI8_R is not set
 # CONFIG_NLS_KOI8_U is not set
 # CONFIG_NLS_UTF8 is not set
-
-#
-# Distributed Lock Manager
-#
 CONFIG_DLM=m
 # CONFIG_DLM_DEBUG is not set
 # CONFIG_UCC_SLOW is not set
@@ -1035,17 +1031,16 @@ CONFIG_PLIST=y
 CONFIG_HAS_IOMEM=y
 CONFIG_HAS_IOPORT=y
 CONFIG_HAS_DMA=y
-
-#
-# Instrumentation Support
-#
+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
@@ -1069,14 +1064,18 @@ 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_FORCED_INLINING is not set
+# 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=y
 CONFIG_DEBUG_STACK_USAGE=y
 # CONFIG_DEBUG_PAGEALLOC is not set
 # CONFIG_DEBUGGER is not set
 CONFIG_IRQSTACKS=y
+# CONFIG_VIRQ_DEBUG is not set
 # CONFIG_BOOTX_TEXT is not set
 # CONFIG_PPC_EARLY_DEBUG is not set
 
@@ -1085,8 +1084,10 @@ CONFIG_IRQSTACKS=y
 #
 # 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_AEAD=m
 CONFIG_CRYPTO_BLKCIPHER=y
 CONFIG_CRYPTO_HASH=y
 CONFIG_CRYPTO_MANAGER=y
@@ -1105,6 +1106,7 @@ 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_CRYPTD is not set
 CONFIG_CRYPTO_DES=y
 # CONFIG_CRYPTO_FCRYPT is not set
@@ -1119,9 +1121,12 @@ CONFIG_CRYPTO_TEA=m
 CONFIG_CRYPTO_ARC4=m
 CONFIG_CRYPTO_KHAZAD=m
 CONFIG_CRYPTO_ANUBIS=m
+CONFIG_CRYPTO_SEED=m
 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_HW is not set
+# CONFIG_PPC_CLOCK is not set
index fd1c530aa3ecb2c0ddedb47d40278b58bf7d1b31..28dee12031f5e221aa065226fc1fd56bd023e7f4 100644 (file)
@@ -1,7 +1,7 @@
 #
 # Automatically generated make config: don't edit
-# Linux kernel version: 2.6.23-rc9
-# Thu Oct 11 19:05:15 2007
+# Linux kernel version: 2.6.24-rc4
+# Thu Dec  6 16:48:20 2007
 #
 # CONFIG_PPC64 is not set
 
@@ -65,9 +65,12 @@ 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 is not set
 CONFIG_SYSFS_DEPRECATED=y
 # CONFIG_RELAY is not set
 CONFIG_BLK_DEV_INITRD=y
@@ -154,6 +157,7 @@ CONFIG_KILAUEA=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
@@ -175,6 +179,7 @@ CONFIG_FLATMEM_MANUAL=y
 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
@@ -198,10 +203,6 @@ CONFIG_ZONE_DMA=y
 # CONFIG_PCI_DOMAINS is not set
 # CONFIG_PCI_SYSCALL is not set
 # CONFIG_ARCH_SUPPORTS_MSI is not set
-
-#
-# PCCARD (PCMCIA/CardBus) support
-#
 # CONFIG_PCCARD is not set
 
 #
@@ -215,7 +216,7 @@ CONFIG_ZONE_DMA=y
 CONFIG_HIGHMEM_START=0xfe000000
 CONFIG_LOWMEM_SIZE=0x30000000
 CONFIG_KERNEL_START=0xc0000000
-CONFIG_TASK_SIZE=0x80000000
+CONFIG_TASK_SIZE=0xc0000000
 CONFIG_CONSISTENT_START=0xff100000
 CONFIG_CONSISTENT_SIZE=0x00200000
 CONFIG_BOOT_LOAD=0x00400000
@@ -252,6 +253,7 @@ CONFIG_IP_PNP_BOOTP=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
@@ -277,10 +279,6 @@ CONFIG_DEFAULT_TCP_CONG="cubic"
 # CONFIG_LAPB is not set
 # CONFIG_ECONET is not set
 # CONFIG_WAN_ROUTER is not set
-
-#
-# QoS and/or fair queueing
-#
 # CONFIG_NET_SCHED is not set
 
 #
@@ -309,6 +307,7 @@ CONFIG_DEFAULT_TCP_CONG="cubic"
 #
 # Generic Driver Options
 #
+CONFIG_UEVENT_HELPER_PATH="/sbin/hotplug"
 CONFIG_STANDALONE=y
 CONFIG_PREVENT_FIRMWARE_BUILD=y
 CONFIG_FW_LOADER=y
@@ -336,6 +335,7 @@ CONFIG_MTD_BLOCK=m
 # 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
@@ -425,6 +425,7 @@ CONFIG_NETDEVICES=y
 # CONFIG_MACVLAN is not set
 # CONFIG_EQUALIZER is not set
 # CONFIG_TUN is not set
+# CONFIG_VETH is not set
 # CONFIG_NET_ETHERNET is not set
 # CONFIG_NETDEV_1000 is not set
 # CONFIG_NETDEV_10000 is not set
@@ -485,7 +486,6 @@ CONFIG_UNIX98_PTYS=y
 CONFIG_LEGACY_PTYS=y
 CONFIG_LEGACY_PTY_COUNT=256
 # CONFIG_IPMI_HANDLER is not set
-# CONFIG_WATCHDOG is not set
 # CONFIG_HW_RANDOM is not set
 # CONFIG_NVRAM is not set
 # CONFIG_GEN_RTC is not set
@@ -502,6 +502,13 @@ CONFIG_LEGACY_PTY_COUNT=256
 # 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
@@ -518,16 +525,15 @@ CONFIG_LEGACY_PTY_COUNT=256
 #
 # 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
-# CONFIG_VGASTATE is not set
-# CONFIG_VIDEO_OUTPUT_CONTROL is not set
-# CONFIG_FB is not set
-# CONFIG_FB_IBM_GXT4500 is not set
 
 #
 # Sound
@@ -539,19 +545,6 @@ CONFIG_LEGACY_PTY_COUNT=256
 # CONFIG_EDAC is not set
 # CONFIG_RTC_CLASS is not set
 
-#
-# DMA Engine support
-#
-# CONFIG_DMA_ENGINE is not set
-
-#
-# DMA Clients
-#
-
-#
-# DMA Devices
-#
-
 #
 # Userspace I/O
 #
@@ -604,7 +597,6 @@ CONFIG_SYSFS=y
 CONFIG_TMPFS=y
 # CONFIG_TMPFS_POSIX_ACL is not set
 # CONFIG_HUGETLB_PAGE is not set
-CONFIG_RAMFS=y
 # CONFIG_CONFIGFS_FS is not set
 
 #
@@ -624,10 +616,7 @@ CONFIG_CRAMFS=y
 # CONFIG_QNX4FS_FS is not set
 # CONFIG_SYSV_FS is not set
 # CONFIG_UFS_FS is not set
-
-#
-# Network File Systems
-#
+CONFIG_NETWORK_FILESYSTEMS=y
 CONFIG_NFS_FS=y
 CONFIG_NFS_V3=y
 # CONFIG_NFS_V3_ACL is not set
@@ -653,15 +642,7 @@ CONFIG_SUNRPC=y
 #
 # CONFIG_PARTITION_ADVANCED is not set
 CONFIG_MSDOS_PARTITION=y
-
-#
-# Native Language Support
-#
 # CONFIG_NLS is not set
-
-#
-# Distributed Lock Manager
-#
 # CONFIG_DLM is not set
 # CONFIG_UCC_SLOW is not set
 
@@ -680,16 +661,13 @@ CONFIG_PLIST=y
 CONFIG_HAS_IOMEM=y
 CONFIG_HAS_IOPORT=y
 CONFIG_HAS_DMA=y
-
-#
-# Instrumentation Support
-#
-# CONFIG_PROFILING is not set
+# CONFIG_INSTRUMENTATION 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
@@ -713,9 +691,12 @@ 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_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
@@ -728,6 +709,7 @@ CONFIG_FORCED_INLINING=y
 #
 # 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
@@ -747,6 +729,7 @@ 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
@@ -760,10 +743,12 @@ CONFIG_CRYPTO_DES=y
 # 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
index 401033aefd40e7194dcfd484bd0e710654b4e43d..7b4280811fb9cec76d4efd01a6fdd8e7fd73d06c 100644 (file)
@@ -1,7 +1,7 @@
 #
 # Automatically generated make config: don't edit
-# Linux kernel version: 2.6.23-rc4
-# Tue Aug 28 21:24:38 2007
+# Linux kernel version: 2.6.24-rc4
+# Thu Dec  6 16:48:22 2007
 #
 # CONFIG_PPC64 is not set
 
@@ -15,13 +15,19 @@ CONFIG_6xx=y
 # CONFIG_44x is not set
 # CONFIG_E200 is not set
 CONFIG_PPC_FPU=y
+# CONFIG_ALTIVEC 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_IRQ_PER_CPU=y
 CONFIG_RWSEM_XCHGADD_ALGORITHM=y
@@ -61,10 +67,13 @@ 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=y
 CONFIG_IKCONFIG_PROC=y
 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_BLK_DEV_INITRD=y
@@ -85,7 +94,6 @@ 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
@@ -124,16 +132,21 @@ CONFIG_DEFAULT_IOSCHED="anticipatory"
 #
 # Platform support
 #
-# CONFIG_PPC_MULTIPLATFORM is not set
-CONFIG_EMBEDDED6xx=y
+CONFIG_PPC_MULTIPLATFORM=y
 # CONFIG_PPC_82xx is not set
 # CONFIG_PPC_83xx is not set
 # CONFIG_PPC_86xx is not set
+CONFIG_CLASSIC32=y
+# CONFIG_PPC_CHRP is not set
 # CONFIG_PPC_MPC52xx is not set
 # CONFIG_PPC_MPC5200 is not set
+# CONFIG_PPC_EFIKA is not set
+# CONFIG_PPC_LITE5200 is not set
+# CONFIG_PPC_PMAC is not set
 # CONFIG_PPC_CELL is not set
 # CONFIG_PPC_CELL_NATIVE is not set
 # CONFIG_PQ2ADS is not set
+CONFIG_EMBEDDED6xx=y
 CONFIG_LINKSTATION=y
 # CONFIG_MPC7448HPC2 is not set
 # CONFIG_PPC_HOLLY is not set
@@ -151,6 +164,7 @@ CONFIG_MPIC=y
 # CONFIG_PPC_INDIRECT_IO is not set
 # CONFIG_GENERIC_IOMAP is not set
 # CONFIG_CPU_FREQ is not set
+# CONFIG_TAU is not set
 # CONFIG_CPM2 is not set
 # CONFIG_FSL_ULI1575 is not set
 
@@ -158,6 +172,10 @@ CONFIG_MPIC=y
 # 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=y
 # CONFIG_HZ_250 is not set
 # CONFIG_HZ_300 is not set
@@ -169,6 +187,7 @@ CONFIG_PREEMPT_NONE=y
 CONFIG_BINFMT_ELF=y
 # CONFIG_BINFMT_MISC is not set
 CONFIG_ARCH_ENABLE_MEMORY_HOTPLUG=y
+# CONFIG_KEXEC is not set
 CONFIG_ARCH_FLATMEM_ENABLE=y
 CONFIG_ARCH_POPULATES_NODE_MAP=y
 CONFIG_SELECT_MEMORY_MODEL=y
@@ -178,6 +197,7 @@ CONFIG_FLATMEM_MANUAL=y
 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
@@ -186,6 +206,8 @@ CONFIG_VIRT_TO_BUS=y
 CONFIG_PROC_DEVICETREE=y
 # CONFIG_CMDLINE_BOOL is not set
 # CONFIG_PM is not set
+CONFIG_SUSPEND_UP_POSSIBLE=y
+CONFIG_HIBERNATION_UP_POSSIBLE=y
 CONFIG_SECCOMP=y
 # CONFIG_WANT_DEVICE_TREE is not set
 CONFIG_ISA_DMA_API=y
@@ -203,11 +225,8 @@ 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
-
-#
-# PCCARD (PCMCIA/CardBus) support
-#
 # CONFIG_PCCARD is not set
 # CONFIG_HOTPLUG_PCI is not set
 
@@ -222,7 +241,7 @@ CONFIG_ARCH_SUPPORTS_MSI=y
 CONFIG_HIGHMEM_START=0xfe000000
 CONFIG_LOWMEM_SIZE=0x30000000
 CONFIG_KERNEL_START=0xc0000000
-CONFIG_TASK_SIZE=0x80000000
+CONFIG_TASK_SIZE=0xc0000000
 CONFIG_BOOT_LOAD=0x00800000
 
 #
@@ -262,6 +281,7 @@ CONFIG_IP_PNP_BOOTP=y
 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
@@ -330,6 +350,7 @@ CONFIG_NETFILTER_XT_MATCH_STATE=m
 # 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
 
@@ -390,10 +411,6 @@ CONFIG_IP_NF_ARP_MANGLE=m
 # CONFIG_LAPB is not set
 # CONFIG_ECONET is not set
 # CONFIG_WAN_ROUTER is not set
-
-#
-# QoS and/or fair queueing
-#
 # CONFIG_NET_SCHED is not set
 
 #
@@ -428,6 +445,7 @@ CONFIG_IEEE80211_SOFTMAC_DEBUG=y
 #
 # Generic Driver Options
 #
+CONFIG_UEVENT_HELPER_PATH="/sbin/hotplug"
 CONFIG_STANDALONE=y
 CONFIG_PREVENT_FIRMWARE_BUILD=y
 CONFIG_FW_LOADER=m
@@ -453,6 +471,7 @@ CONFIG_MTD_BLOCK=y
 # 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
@@ -493,6 +512,7 @@ CONFIG_MTD_PHYSMAP_START=0xffc00000
 CONFIG_MTD_PHYSMAP_LEN=0x400000
 CONFIG_MTD_PHYSMAP_BANKWIDTH=1
 # CONFIG_MTD_PHYSMAP_OF is not set
+# CONFIG_MTD_INTEL_VR_NOR is not set
 # CONFIG_MTD_PLATRAM is not set
 
 #
@@ -580,6 +600,7 @@ CONFIG_SCSI_WAIT_SCAN=m
 # 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
@@ -591,6 +612,7 @@ CONFIG_SCSI_LOWLEVEL=y
 # 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
@@ -658,6 +680,7 @@ CONFIG_PATA_IT821X=y
 # 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
@@ -671,14 +694,7 @@ CONFIG_PATA_SIL680=y
 # CONFIG_PATA_VIA is not set
 # CONFIG_PATA_WINBOND is not set
 # CONFIG_MD is not set
-
-#
-# Fusion MPT device support
-#
 # CONFIG_FUSION is not set
-# CONFIG_FUSION_SPI is not set
-# CONFIG_FUSION_FC is not set
-# CONFIG_FUSION_SAS is not set
 
 #
 # IEEE 1394 (FireWire) support
@@ -694,6 +710,8 @@ CONFIG_NETDEVICES=y
 # CONFIG_MACVLAN is not set
 # CONFIG_EQUALIZER is not set
 CONFIG_TUN=m
+# CONFIG_VETH is not set
+# CONFIG_IP1000 is not set
 # CONFIG_ARCNET is not set
 # CONFIG_PHYLIB is not set
 CONFIG_NET_ETHERNET=y
@@ -713,11 +731,17 @@ CONFIG_TULIP_MMIO=y
 # CONFIG_DM9102 is not set
 # CONFIG_ULI526X 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_NS83820 is not set
 # CONFIG_HAMACHI is not set
 # CONFIG_YELLOWFIN is not set
@@ -726,19 +750,24 @@ CONFIG_R8169=y
 # 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_MV643XX_ETH 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
 
 #
@@ -754,7 +783,6 @@ CONFIG_NETDEV_10000=y
 # CONFIG_USB_KAWETH is not set
 # CONFIG_USB_PEGASUS is not set
 # CONFIG_USB_RTL8150 is not set
-# CONFIG_USB_USBNET_MII is not set
 # CONFIG_USB_USBNET is not set
 # CONFIG_WAN is not set
 # CONFIG_FDDI is not set
@@ -764,6 +792,7 @@ CONFIG_NETDEV_10000=y
 # CONFIG_NET_FC is not set
 # CONFIG_SHAPER is not set
 CONFIG_NETCONSOLE=y
+# CONFIG_NETCONSOLE_DYNAMIC is not set
 CONFIG_NETPOLL=y
 # CONFIG_NETPOLL_TRAP is not set
 CONFIG_NET_POLL_CONTROLLER=y
@@ -785,7 +814,6 @@ CONFIG_INPUT_MOUSEDEV=y
 CONFIG_INPUT_MOUSEDEV_SCREEN_X=1024
 CONFIG_INPUT_MOUSEDEV_SCREEN_Y=768
 # CONFIG_INPUT_JOYDEV is not set
-# CONFIG_INPUT_TSDEV is not set
 CONFIG_INPUT_EVDEV=m
 # CONFIG_INPUT_EVBUG is not set
 
@@ -846,14 +874,11 @@ CONFIG_UNIX98_PTYS=y
 CONFIG_LEGACY_PTYS=y
 CONFIG_LEGACY_PTY_COUNT=256
 # CONFIG_IPMI_HANDLER is not set
-# CONFIG_WATCHDOG 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_AGP is not set
-# CONFIG_DRM is not set
 # CONFIG_RAW_DRIVER is not set
 # CONFIG_TCG_TPM is not set
 CONFIG_DEVPORT=y
@@ -923,8 +948,6 @@ CONFIG_SENSORS_EEPROM=m
 # CONFIG_POWER_SUPPLY is not set
 CONFIG_HWMON=y
 # CONFIG_HWMON_VID is not set
-# CONFIG_SENSORS_ABITUGURU is not set
-# CONFIG_SENSORS_ABITUGURU3 is not set
 # CONFIG_SENSORS_AD7418 is not set
 # CONFIG_SENSORS_ADM1021 is not set
 # CONFIG_SENSORS_ADM1025 is not set
@@ -932,12 +955,13 @@ CONFIG_HWMON=y
 # CONFIG_SENSORS_ADM1029 is not set
 # CONFIG_SENSORS_ADM1031 is not set
 # CONFIG_SENSORS_ADM9240 is not set
-# CONFIG_SENSORS_ASB100 is not set
+# CONFIG_SENSORS_ADT7470 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_FSCHER is not set
-# CONFIG_SENSORS_FSCPOS 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
@@ -973,6 +997,13 @@ CONFIG_HWMON=y
 # 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
@@ -989,16 +1020,17 @@ CONFIG_HWMON=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
-# CONFIG_VGASTATE is not set
-CONFIG_VIDEO_OUTPUT_CONTROL=m
-# CONFIG_FB is not set
-# CONFIG_FB_IBM_GXT4500 is not set
 
 #
 # Console display driver support
@@ -1013,6 +1045,7 @@ CONFIG_DUMMY_CONSOLE=y
 CONFIG_HID_SUPPORT=y
 CONFIG_HID=m
 # CONFIG_HID_DEBUG is not set
+# CONFIG_HIDRAW is not set
 
 #
 # USB Input Devices
@@ -1076,6 +1109,7 @@ CONFIG_USB_STORAGE=m
 # CONFIG_USB_STORAGE_DEBUG is not set
 # CONFIG_USB_STORAGE_DATAFAB is not set
 # CONFIG_USB_STORAGE_FREECOM is not set
+# CONFIG_USB_STORAGE_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
@@ -1107,6 +1141,7 @@ CONFIG_USB_SERIAL_CONSOLE=y
 # 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_WHITEHEAT is not set
 # CONFIG_USB_SERIAL_DIGI_ACCELEPORT is not set
 # CONFIG_USB_SERIAL_CP2101 is not set
@@ -1196,6 +1231,7 @@ CONFIG_RTC_INTF_DEV=y
 # 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=y
@@ -1224,19 +1260,6 @@ CONFIG_RTC_DRV_RS5C372=y
 # on-CPU RTC drivers
 #
 
-#
-# DMA Engine support
-#
-# CONFIG_DMA_ENGINE is not set
-
-#
-# DMA Clients
-#
-
-#
-# DMA Devices
-#
-
 #
 # Userspace I/O
 #
@@ -1254,7 +1277,6 @@ CONFIG_EXT3_FS_XATTR=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 is not set
 # CONFIG_JFS_FS is not set
@@ -1307,7 +1329,6 @@ CONFIG_SYSFS=y
 CONFIG_TMPFS=y
 # CONFIG_TMPFS_POSIX_ACL is not set
 # CONFIG_HUGETLB_PAGE is not set
-CONFIG_RAMFS=y
 # CONFIG_CONFIGFS_FS is not set
 
 #
@@ -1327,10 +1348,7 @@ CONFIG_RAMFS=y
 # CONFIG_QNX4FS_FS is not set
 # CONFIG_SYSV_FS is not set
 # CONFIG_UFS_FS is not set
-
-#
-# Network File Systems
-#
+CONFIG_NETWORK_FILESYSTEMS=y
 CONFIG_NFS_FS=y
 CONFIG_NFS_V3=y
 CONFIG_NFS_V3_ACL=y
@@ -1368,10 +1386,6 @@ CONFIG_CIFS=m
 #
 # CONFIG_PARTITION_ADVANCED is not set
 CONFIG_MSDOS_PARTITION=y
-
-#
-# Native Language Support
-#
 CONFIG_NLS=m
 CONFIG_NLS_DEFAULT="iso8859-1"
 CONFIG_NLS_CODEPAGE_437=m
@@ -1412,10 +1426,6 @@ CONFIG_NLS_ISO8859_1=m
 # CONFIG_NLS_KOI8_R is not set
 # CONFIG_NLS_KOI8_U is not set
 CONFIG_NLS_UTF8=m
-
-#
-# Distributed Lock Manager
-#
 # CONFIG_DLM is not set
 # CONFIG_UCC_SLOW is not set
 
@@ -1437,18 +1447,13 @@ CONFIG_PLIST=y
 CONFIG_HAS_IOMEM=y
 CONFIG_HAS_IOPORT=y
 CONFIG_HAS_DMA=y
-
-#
-# Instrumentation Support
-#
-CONFIG_PROFILING=y
-CONFIG_OPROFILE=m
-# CONFIG_KPROBES is not set
+# CONFIG_INSTRUMENTATION 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
@@ -1472,14 +1477,18 @@ 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_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 is not set
 # CONFIG_BDI_SWITCH is not set
+# CONFIG_BOOTX_TEXT is not set
 # CONFIG_PPC_EARLY_DEBUG is not set
 
 #
@@ -1487,6 +1496,7 @@ CONFIG_FORCED_INLINING=y
 #
 # 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
@@ -1506,6 +1516,7 @@ 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_CRYPTD is not set
 CONFIG_CRYPTO_DES=y
 # CONFIG_CRYPTO_FCRYPT is not set
@@ -1520,9 +1531,12 @@ CONFIG_CRYPTO_AES=m
 CONFIG_CRYPTO_ARC4=m
 # CONFIG_CRYPTO_KHAZAD is not set
 # CONFIG_CRYPTO_ANUBIS is not set
+# CONFIG_CRYPTO_SEED 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 is not set
+# CONFIG_CRYPTO_AUTHENC is not set
 CONFIG_CRYPTO_HW=y
+# CONFIG_PPC_CLOCK is not set
index dd78ed955eb0f341f2fb045fc9085dbb72372a80..02bb7e5d8ed51f970f8151b97eeb13383569afc0 100644 (file)
@@ -1,7 +1,7 @@
 #
 # Automatically generated make config: don't edit
-# Linux kernel version: 2.6.23-rc4
-# Tue Aug 28 21:24:38 2007
+# Linux kernel version: 2.6.24-rc4
+# Thu Dec  6 16:48:24 2007
 #
 # CONFIG_PPC64 is not set
 
@@ -21,8 +21,13 @@ 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_IRQ_PER_CPU=y
 CONFIG_RWSEM_XCHGADD_ALGORITHM=y
@@ -62,9 +67,12 @@ CONFIG_SYSVIPC_SYSCTL=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 is not set
 CONFIG_SYSFS_DEPRECATED=y
 # CONFIG_RELAY is not set
 CONFIG_BLK_DEV_INITRD=y
@@ -83,7 +91,6 @@ 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
@@ -123,7 +130,6 @@ CONFIG_DEFAULT_IOSCHED="anticipatory"
 # Platform support
 #
 CONFIG_PPC_MULTIPLATFORM=y
-# CONFIG_EMBEDDED6xx is not set
 # CONFIG_PPC_82xx is not set
 # CONFIG_PPC_83xx is not set
 # CONFIG_PPC_86xx is not set
@@ -138,6 +144,7 @@ CONFIG_PPC_LITE5200=y
 # CONFIG_PPC_CELL is not set
 # CONFIG_PPC_CELL_NATIVE is not set
 # CONFIG_PQ2ADS is not set
+# CONFIG_EMBEDDED6xx is not set
 # CONFIG_MPIC is not set
 # CONFIG_MPIC_WEIRD is not set
 # CONFIG_PPC_I8259 is not set
@@ -151,11 +158,19 @@ CONFIG_PPC_LITE5200=y
 # CONFIG_TAU is not set
 # CONFIG_CPM2 is not set
 # CONFIG_FSL_ULI1575 is not set
+CONFIG_PPC_BESTCOMM=y
+CONFIG_PPC_BESTCOMM_ATA=y
+CONFIG_PPC_BESTCOMM_FEC=y
+CONFIG_PPC_BESTCOMM_GEN_BD=y
 
 #
 # 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
@@ -177,6 +192,7 @@ CONFIG_FLATMEM_MANUAL=y
 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
@@ -188,10 +204,13 @@ CONFIG_PM=y
 # CONFIG_PM_LEGACY is not set
 # CONFIG_PM_DEBUG is not set
 CONFIG_PM_SLEEP=y
+CONFIG_SUSPEND_UP_POSSIBLE=y
 CONFIG_SUSPEND=y
+CONFIG_HIBERNATION_UP_POSSIBLE=y
 # CONFIG_HIBERNATION is not set
 CONFIG_SECCOMP=y
-# CONFIG_WANT_DEVICE_TREE is not set
+CONFIG_WANT_DEVICE_TREE=y
+CONFIG_DEVICE_TREE=""
 CONFIG_ISA_DMA_API=y
 
 #
@@ -207,11 +226,8 @@ 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
-
-#
-# PCCARD (PCMCIA/CardBus) support
-#
 # CONFIG_PCCARD is not set
 # CONFIG_HOTPLUG_PCI is not set
 
@@ -226,7 +242,7 @@ CONFIG_ARCH_SUPPORTS_MSI=y
 CONFIG_HIGHMEM_START=0xfe000000
 CONFIG_LOWMEM_SIZE=0x30000000
 CONFIG_KERNEL_START=0xc0000000
-CONFIG_TASK_SIZE=0x80000000
+CONFIG_TASK_SIZE=0xc0000000
 CONFIG_BOOT_LOAD=0x00800000
 
 #
@@ -266,6 +282,7 @@ CONFIG_SYN_COOKIES=y
 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
@@ -291,10 +308,6 @@ CONFIG_DEFAULT_TCP_CONG="cubic"
 # CONFIG_LAPB is not set
 # CONFIG_ECONET is not set
 # CONFIG_WAN_ROUTER is not set
-
-#
-# QoS and/or fair queueing
-#
 # CONFIG_NET_SCHED is not set
 
 #
@@ -323,6 +336,7 @@ CONFIG_DEFAULT_TCP_CONG="cubic"
 #
 # Generic Driver Options
 #
+CONFIG_UEVENT_HELPER_PATH="/sbin/hotplug"
 CONFIG_STANDALONE=y
 CONFIG_PREVENT_FIRMWARE_BUILD=y
 # CONFIG_FW_LOADER is not set
@@ -393,6 +407,7 @@ CONFIG_SCSI_WAIT_SCAN=m
 # 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
@@ -404,6 +419,7 @@ CONFIG_SCSI_LOWLEVEL=y
 # 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
@@ -472,6 +488,7 @@ CONFIG_PATA_MPC52xx=y
 # 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
@@ -486,14 +503,7 @@ CONFIG_PATA_MPC52xx=y
 # CONFIG_PATA_WINBOND is not set
 # CONFIG_PATA_PLATFORM is not set
 # CONFIG_MD is not set
-
-#
-# Fusion MPT device support
-#
 # CONFIG_FUSION is not set
-# CONFIG_FUSION_SPI is not set
-# CONFIG_FUSION_FC is not set
-# CONFIG_FUSION_SAS is not set
 
 #
 # IEEE 1394 (FireWire) support
@@ -509,12 +519,15 @@ CONFIG_NETDEVICES=y
 # 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_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_NS83820 is not set
 # CONFIG_HAMACHI is not set
 # CONFIG_YELLOWFIN is not set
@@ -522,6 +535,7 @@ CONFIG_NETDEV_1000=y
 # 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
@@ -531,11 +545,14 @@ CONFIG_NETDEV_1000=y
 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
 
 #
@@ -592,14 +609,11 @@ CONFIG_UNIX98_PTYS=y
 CONFIG_LEGACY_PTYS=y
 CONFIG_LEGACY_PTY_COUNT=256
 # CONFIG_IPMI_HANDLER is not set
-# CONFIG_WATCHDOG 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_AGP is not set
-# CONFIG_DRM is not set
 # CONFIG_RAW_DRIVER is not set
 # CONFIG_TCG_TPM is not set
 CONFIG_DEVPORT=y
@@ -613,6 +627,13 @@ CONFIG_DEVPORT=y
 # 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
@@ -629,16 +650,17 @@ CONFIG_DEVPORT=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
-# CONFIG_VGASTATE is not set
-CONFIG_VIDEO_OUTPUT_CONTROL=m
-# CONFIG_FB is not set
-# CONFIG_FB_IBM_GXT4500 is not set
 
 #
 # Sound
@@ -664,19 +686,6 @@ CONFIG_USB_ARCH_HAS_EHCI=y
 # CONFIG_EDAC is not set
 # CONFIG_RTC_CLASS is not set
 
-#
-# DMA Engine support
-#
-# CONFIG_DMA_ENGINE is not set
-
-#
-# DMA Clients
-#
-
-#
-# DMA Devices
-#
-
 #
 # Userspace I/O
 #
@@ -694,7 +703,6 @@ CONFIG_EXT3_FS_XATTR=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 is not set
 # CONFIG_JFS_FS is not set
@@ -735,7 +743,6 @@ CONFIG_SYSFS=y
 CONFIG_TMPFS=y
 # CONFIG_TMPFS_POSIX_ACL is not set
 # CONFIG_HUGETLB_PAGE is not set
-CONFIG_RAMFS=y
 # CONFIG_CONFIGFS_FS is not set
 
 #
@@ -754,10 +761,7 @@ CONFIG_RAMFS=y
 # CONFIG_QNX4FS_FS is not set
 # CONFIG_SYSV_FS is not set
 # CONFIG_UFS_FS is not set
-
-#
-# Network File Systems
-#
+CONFIG_NETWORK_FILESYSTEMS=y
 # CONFIG_NFS_FS is not set
 # CONFIG_NFSD is not set
 # CONFIG_SMB_FS is not set
@@ -771,15 +775,7 @@ CONFIG_RAMFS=y
 #
 # CONFIG_PARTITION_ADVANCED is not set
 CONFIG_MSDOS_PARTITION=y
-
-#
-# Native Language Support
-#
 # CONFIG_NLS is not set
-
-#
-# Distributed Lock Manager
-#
 # CONFIG_DLM is not set
 # CONFIG_UCC_SLOW is not set
 
@@ -796,16 +792,13 @@ CONFIG_PLIST=y
 CONFIG_HAS_IOMEM=y
 CONFIG_HAS_IOPORT=y
 CONFIG_HAS_DMA=y
-
-#
-# Instrumentation Support
-#
-# CONFIG_PROFILING is not set
+# CONFIG_INSTRUMENTATION is not set
 
 #
 # Kernel hacking
 #
 CONFIG_PRINTK_TIME=y
+CONFIG_ENABLE_WARN_DEPRECATED=y
 CONFIG_ENABLE_MUST_CHECK=y
 # CONFIG_MAGIC_SYSRQ is not set
 # CONFIG_UNUSED_SYMBOLS is not set
@@ -829,9 +822,12 @@ CONFIG_SCHED_DEBUG=y
 CONFIG_DEBUG_INFO=y
 # 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
@@ -845,4 +841,7 @@ CONFIG_FORCED_INLINING=y
 #
 # 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=y
+CONFIG_PPC_LIB_RHEAP=y
index 84b9ab4a5a92e307a71b55add53d885afd7145eb..8b810d056440b2c15bb29205f15a14ed341ecda5 100644 (file)
@@ -1,7 +1,7 @@
 #
 # Automatically generated make config: don't edit
-# Linux kernel version: 2.6.23-rc4
-# Thu Aug 30 16:38:16 2007
+# Linux kernel version: 2.6.24-rc4
+# Thu Dec  6 16:48:26 2007
 #
 CONFIG_PPC64=y
 
@@ -10,6 +10,7 @@ CONFIG_PPC64=y
 #
 CONFIG_POWER4_ONLY=y
 CONFIG_POWER4=y
+# CONFIG_TUNE_CELL is not set
 CONFIG_PPC_FPU=y
 # CONFIG_ALTIVEC is not set
 CONFIG_PPC_STD_MMU=y
@@ -18,8 +19,13 @@ CONFIG_VIRT_CPU_ACCOUNTING=y
 CONFIG_SMP=y
 CONFIG_NR_CPUS=4
 CONFIG_64BIT=y
+CONFIG_WORD_SIZE=64
 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
@@ -62,11 +68,13 @@ 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=y
 CONFIG_IKCONFIG_PROC=y
 CONFIG_LOG_BUF_SHIFT=17
-# CONFIG_CPUSETS is not set
+# CONFIG_CGROUPS is not set
+# CONFIG_FAIR_GROUP_SCHED is not set
 CONFIG_SYSFS_DEPRECATED=y
 # CONFIG_RELAY is not set
 # CONFIG_BLK_DEV_INITRD is not set
@@ -86,7 +94,6 @@ 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
@@ -107,6 +114,7 @@ CONFIG_STOP_MACHINE=y
 CONFIG_BLOCK=y
 # CONFIG_BLK_DEV_IO_TRACE is not set
 # CONFIG_BLK_DEV_BSG is not set
+CONFIG_BLOCK_COMPAT=y
 
 #
 # IO Schedulers
@@ -125,7 +133,6 @@ CONFIG_DEFAULT_IOSCHED="anticipatory"
 # Platform support
 #
 CONFIG_PPC_MULTIPLATFORM=y
-# CONFIG_EMBEDDED6xx is not set
 # CONFIG_PPC_82xx is not set
 # CONFIG_PPC_83xx is not set
 # CONFIG_PPC_86xx is not set
@@ -165,6 +172,10 @@ CONFIG_PPC_970_NAP=y
 #
 # Kernel options
 #
+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
@@ -177,6 +188,7 @@ CONFIG_PREEMPT_NONE=y
 CONFIG_BINFMT_ELF=y
 # CONFIG_BINFMT_MISC is not set
 CONFIG_FORCE_MAX_ZONEORDER=13
+CONFIG_HUGETLB_PAGE_SIZE_VARIABLE=y
 CONFIG_IOMMU_VMERGE=y
 CONFIG_ARCH_ENABLE_MEMORY_HOTPLUG=y
 CONFIG_KEXEC=y
@@ -194,6 +206,7 @@ CONFIG_FLATMEM_MANUAL=y
 CONFIG_FLATMEM=y
 CONFIG_FLAT_NODE_MEM_MAP=y
 # CONFIG_SPARSEMEM_STATIC is not set
+CONFIG_SPARSEMEM_VMEMMAP_ENABLE=y
 CONFIG_SPLIT_PTLOCK_CPUS=4
 CONFIG_RESOURCES_64BIT=y
 CONFIG_ZONE_DMA_FLAG=1
@@ -220,11 +233,8 @@ CONFIG_PCI_SYSCALL=y
 # CONFIG_PCIEPORTBUS is not set
 CONFIG_ARCH_SUPPORTS_MSI=y
 CONFIG_PCI_MSI=y
+CONFIG_PCI_LEGACY=y
 # CONFIG_PCI_DEBUG is not set
-
-#
-# PCCARD (PCMCIA/CardBus) support
-#
 # CONFIG_PCCARD is not set
 # CONFIG_HOTPLUG_PCI is not set
 CONFIG_KERNEL_START=0xc000000000000000
@@ -266,6 +276,7 @@ CONFIG_IP_PNP_DHCP=y
 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
@@ -291,10 +302,6 @@ CONFIG_DEFAULT_TCP_CONG="cubic"
 # CONFIG_LAPB is not set
 # CONFIG_ECONET is not set
 # CONFIG_WAN_ROUTER is not set
-
-#
-# QoS and/or fair queueing
-#
 # CONFIG_NET_SCHED is not set
 
 #
@@ -323,6 +330,7 @@ CONFIG_DEFAULT_TCP_CONG="cubic"
 #
 # Generic Driver Options
 #
+CONFIG_UEVENT_HELPER_PATH="/sbin/hotplug"
 CONFIG_STANDALONE=y
 CONFIG_PREVENT_FIRMWARE_BUILD=y
 # CONFIG_FW_LOADER is not set
@@ -373,6 +381,11 @@ 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_IDEPCI=y
 CONFIG_IDEPCI_SHARE_IRQ=y
 CONFIG_IDEPCI_PCIBUS_ORDER=y
@@ -380,8 +393,6 @@ CONFIG_IDEPCI_PCIBUS_ORDER=y
 CONFIG_BLK_DEV_GENERIC=y
 # CONFIG_BLK_DEV_OPTI621 is not set
 CONFIG_BLK_DEV_IDEDMA_PCI=y
-# CONFIG_BLK_DEV_IDEDMA_FORCED is not set
-# CONFIG_IDEDMA_ONLYDISK is not set
 # CONFIG_BLK_DEV_AEC62XX is not set
 # CONFIG_BLK_DEV_ALI15X3 is not set
 CONFIG_BLK_DEV_AMD74XX=y
@@ -409,7 +420,7 @@ CONFIG_BLK_DEV_AMD74XX=y
 # CONFIG_BLK_DEV_TC86C001 is not set
 # CONFIG_IDE_ARM is not set
 CONFIG_BLK_DEV_IDEDMA=y
-# CONFIG_IDEDMA_IVB is not set
+CONFIG_IDE_ARCH_OBSOLETE_INIT=y
 # CONFIG_BLK_DEV_HD is not set
 
 #
@@ -421,10 +432,6 @@ CONFIG_BLK_DEV_IDEDMA=y
 # CONFIG_SCSI_NETLINK is not set
 # CONFIG_ATA is not set
 # CONFIG_MD is not set
-
-#
-# Fusion MPT device support
-#
 # CONFIG_FUSION is not set
 
 #
@@ -441,6 +448,8 @@ CONFIG_NETDEVICES=y
 # 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
@@ -451,6 +460,10 @@ CONFIG_MII=y
 # 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=y
@@ -458,7 +471,6 @@ CONFIG_AMD8111_ETH=y
 # CONFIG_ADAPTEC_STARFIRE is not set
 # CONFIG_B44 is not set
 # CONFIG_FORCEDETH is not set
-# CONFIG_DGRS is not set
 # CONFIG_EEPRO100 is not set
 # CONFIG_E100 is not set
 # CONFIG_FEALNX is not set
@@ -477,6 +489,7 @@ CONFIG_NETDEV_1000=y
 CONFIG_E1000=y
 # CONFIG_E1000_NAPI is not set
 # CONFIG_E1000_DISABLE_PACKET_SPLIT is not set
+# CONFIG_E1000E is not set
 # CONFIG_NS83820 is not set
 # CONFIG_HAMACHI is not set
 # CONFIG_YELLOWFIN is not set
@@ -484,6 +497,7 @@ CONFIG_E1000=y
 # 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=y
 # CONFIG_BNX2 is not set
@@ -492,12 +506,15 @@ CONFIG_TIGON3=y
 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_PASEMI_MAC is not set
 # CONFIG_MLX4_CORE is not set
+# CONFIG_TEHUTI is not set
 # CONFIG_TR is not set
 
 #
@@ -513,7 +530,6 @@ CONFIG_NETDEV_10000=y
 # CONFIG_USB_KAWETH is not set
 CONFIG_USB_PEGASUS=y
 # CONFIG_USB_RTL8150 is not set
-# CONFIG_USB_USBNET_MII is not set
 # CONFIG_USB_USBNET is not set
 # CONFIG_WAN is not set
 # CONFIG_FDDI is not set
@@ -542,7 +558,6 @@ CONFIG_INPUT_MOUSEDEV=y
 CONFIG_INPUT_MOUSEDEV_SCREEN_X=1600
 CONFIG_INPUT_MOUSEDEV_SCREEN_Y=1200
 # CONFIG_INPUT_JOYDEV is not set
-# CONFIG_INPUT_TSDEV is not set
 # CONFIG_INPUT_EVDEV is not set
 # CONFIG_INPUT_EVBUG is not set
 
@@ -594,14 +609,11 @@ CONFIG_LEGACY_PTY_COUNT=256
 CONFIG_HVC_DRIVER=y
 CONFIG_HVC_RTAS=y
 # CONFIG_IPMI_HANDLER is not set
-# CONFIG_WATCHDOG is not set
 # CONFIG_HW_RANDOM 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_AGP is not set
-# CONFIG_DRM is not set
 # CONFIG_RAW_DRIVER is not set
 # CONFIG_HANGCHECK_TIMER is not set
 # CONFIG_TCG_TPM is not set
@@ -669,6 +681,13 @@ CONFIG_I2C_AMD8111=y
 # 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
@@ -685,16 +704,17 @@ CONFIG_I2C_AMD8111=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
-# CONFIG_VGASTATE is not set
-# CONFIG_VIDEO_OUTPUT_CONTROL is not set
-# CONFIG_FB is not set
-# CONFIG_FB_IBM_GXT4500 is not set
 
 #
 # Console display driver support
@@ -709,6 +729,7 @@ CONFIG_DUMMY_CONSOLE=y
 CONFIG_HID_SUPPORT=y
 CONFIG_HID=y
 # CONFIG_HID_DEBUG is not set
+# CONFIG_HIDRAW is not set
 
 #
 # USB Input Devices
@@ -784,6 +805,7 @@ CONFIG_USB_SERIAL_GENERIC=y
 # 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_WHITEHEAT is not set
 # CONFIG_USB_SERIAL_DIGI_ACCELEPORT is not set
 # CONFIG_USB_SERIAL_CP2101 is not set
@@ -869,19 +891,6 @@ CONFIG_USB_EZUSB=y
 # CONFIG_EDAC is not set
 # CONFIG_RTC_CLASS is not set
 
-#
-# DMA Engine support
-#
-# CONFIG_DMA_ENGINE is not set
-
-#
-# DMA Clients
-#
-
-#
-# DMA Devices
-#
-
 #
 # Userspace I/O
 #
@@ -942,7 +951,6 @@ CONFIG_TMPFS=y
 # CONFIG_TMPFS_POSIX_ACL is not set
 CONFIG_HUGETLBFS=y
 CONFIG_HUGETLB_PAGE=y
-CONFIG_RAMFS=y
 # CONFIG_CONFIGFS_FS is not set
 
 #
@@ -961,10 +969,7 @@ CONFIG_CRAMFS=y
 # CONFIG_QNX4FS_FS is not set
 # CONFIG_SYSV_FS is not set
 # CONFIG_UFS_FS is not set
-
-#
-# Network File Systems
-#
+CONFIG_NETWORK_FILESYSTEMS=y
 CONFIG_NFS_FS=y
 CONFIG_NFS_V3=y
 CONFIG_NFS_V3_ACL=y
@@ -1008,10 +1013,6 @@ CONFIG_MSDOS_PARTITION=y
 # CONFIG_KARMA_PARTITION is not set
 # CONFIG_EFI_PARTITION is not set
 # CONFIG_SYSV68_PARTITION is not set
-
-#
-# Native Language Support
-#
 CONFIG_NLS=y
 CONFIG_NLS_DEFAULT="utf-8"
 # CONFIG_NLS_CODEPAGE_437 is not set
@@ -1052,10 +1053,6 @@ CONFIG_NLS_DEFAULT="utf-8"
 # CONFIG_NLS_KOI8_R is not set
 # CONFIG_NLS_KOI8_U is not set
 CONFIG_NLS_UTF8=y
-
-#
-# Distributed Lock Manager
-#
 # CONFIG_DLM is not set
 # CONFIG_UCC_SLOW is not set
 
@@ -1074,17 +1071,13 @@ CONFIG_PLIST=y
 CONFIG_HAS_IOMEM=y
 CONFIG_HAS_IOPORT=y
 CONFIG_HAS_DMA=y
-
-#
-# Instrumentation Support
-#
-# CONFIG_PROFILING is not set
-# CONFIG_KPROBES is not set
+# CONFIG_INSTRUMENTATION 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
@@ -1108,9 +1101,12 @@ 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_FORCED_INLINING is not set
+# 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=y
 CONFIG_DEBUG_STACK_USAGE=y
 # CONFIG_DEBUG_PAGEALLOC is not set
@@ -1119,6 +1115,7 @@ CONFIG_XMON=y
 CONFIG_XMON_DEFAULT=y
 CONFIG_XMON_DISASSEMBLY=y
 # CONFIG_IRQSTACKS is not set
+# CONFIG_VIRQ_DEBUG is not set
 CONFIG_BOOTX_TEXT=y
 # CONFIG_PPC_EARLY_DEBUG is not set
 
@@ -1127,6 +1124,7 @@ CONFIG_BOOTX_TEXT=y
 #
 # 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
@@ -1146,6 +1144,7 @@ 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_CRYPTD is not set
 CONFIG_CRYPTO_DES=y
 # CONFIG_CRYPTO_FCRYPT is not set
@@ -1159,9 +1158,12 @@ CONFIG_CRYPTO_DES=y
 # 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 is not set
+# CONFIG_PPC_CLOCK is not set
index 87ae894551b719fc438b20dfd719990b1de6f01b..b0266de48491054a999b1e90368bec0f2f0cdb24 100644 (file)
@@ -1,7 +1,7 @@
 #
 # Automatically generated make config: don't edit
-# Linux kernel version: 2.6.23-rc4
-# Tue Aug 28 21:24:39 2007
+# Linux kernel version: 2.6.24-rc4
+# Thu Dec  6 16:48:28 2007
 #
 # CONFIG_PPC64 is not set
 
@@ -15,13 +15,19 @@ CONFIG_6xx=y
 # 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 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_IRQ_PER_CPU=y
 CONFIG_RWSEM_XCHGADD_ALGORITHM=y
@@ -61,9 +67,12 @@ CONFIG_SYSVIPC_SYSCTL=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 is not set
 CONFIG_SYSFS_DEPRECATED=y
 # CONFIG_RELAY is not set
 CONFIG_BLK_DEV_INITRD=y
@@ -83,7 +92,6 @@ 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
@@ -117,16 +125,21 @@ CONFIG_DEFAULT_IOSCHED="anticipatory"
 #
 # Platform support
 #
-# CONFIG_PPC_MULTIPLATFORM is not set
-CONFIG_EMBEDDED6xx=y
+CONFIG_PPC_MULTIPLATFORM=y
 # CONFIG_PPC_82xx is not set
 # CONFIG_PPC_83xx is not set
 # CONFIG_PPC_86xx is not set
+CONFIG_CLASSIC32=y
+# CONFIG_PPC_CHRP is not set
 # CONFIG_PPC_MPC52xx is not set
 # CONFIG_PPC_MPC5200 is not set
+# CONFIG_PPC_EFIKA is not set
+# CONFIG_PPC_LITE5200 is not set
+# CONFIG_PPC_PMAC is not set
 # CONFIG_PPC_CELL is not set
 # CONFIG_PPC_CELL_NATIVE is not set
 # CONFIG_PQ2ADS is not set
+CONFIG_EMBEDDED6xx=y
 # CONFIG_LINKSTATION is not set
 CONFIG_MPC7448HPC2=y
 # CONFIG_PPC_HOLLY is not set
@@ -142,6 +155,7 @@ CONFIG_MPIC_WEIRD=y
 # CONFIG_PPC_INDIRECT_IO is not set
 # CONFIG_GENERIC_IOMAP is not set
 # CONFIG_CPU_FREQ is not set
+# CONFIG_TAU is not set
 # CONFIG_CPM2 is not set
 # CONFIG_FSL_ULI1575 is not set
 
@@ -149,6 +163,10 @@ CONFIG_MPIC_WEIRD=y
 # 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
@@ -160,6 +178,7 @@ CONFIG_PREEMPT_NONE=y
 CONFIG_BINFMT_ELF=y
 CONFIG_BINFMT_MISC=y
 CONFIG_ARCH_ENABLE_MEMORY_HOTPLUG=y
+# CONFIG_KEXEC is not set
 CONFIG_ARCH_FLATMEM_ENABLE=y
 CONFIG_ARCH_POPULATES_NODE_MAP=y
 CONFIG_SELECT_MEMORY_MODEL=y
@@ -169,6 +188,7 @@ CONFIG_FLATMEM_MANUAL=y
 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
@@ -177,8 +197,11 @@ CONFIG_VIRT_TO_BUS=y
 CONFIG_PROC_DEVICETREE=y
 # CONFIG_CMDLINE_BOOL is not set
 # CONFIG_PM is not set
+CONFIG_SUSPEND_UP_POSSIBLE=y
+CONFIG_HIBERNATION_UP_POSSIBLE=y
 # CONFIG_SECCOMP is not set
-# CONFIG_WANT_DEVICE_TREE is not set
+CONFIG_WANT_DEVICE_TREE=y
+CONFIG_DEVICE_TREE=""
 CONFIG_ISA_DMA_API=y
 
 #
@@ -193,10 +216,7 @@ CONFIG_PCI_SYSCALL=y
 # CONFIG_PCIEPORTBUS is not set
 CONFIG_ARCH_SUPPORTS_MSI=y
 # CONFIG_PCI_MSI is not set
-
-#
-# PCCARD (PCMCIA/CardBus) support
-#
+CONFIG_PCI_LEGACY=y
 # CONFIG_PCCARD is not set
 # CONFIG_HOTPLUG_PCI is not set
 
@@ -211,7 +231,7 @@ CONFIG_ARCH_SUPPORTS_MSI=y
 CONFIG_HIGHMEM_START=0xfe000000
 CONFIG_LOWMEM_SIZE=0x30000000
 CONFIG_KERNEL_START=0xc0000000
-CONFIG_TASK_SIZE=0x80000000
+CONFIG_TASK_SIZE=0xc0000000
 CONFIG_BOOT_LOAD=0x00800000
 
 #
@@ -251,6 +271,7 @@ CONFIG_SYN_COOKIES=y
 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
@@ -276,10 +297,6 @@ CONFIG_DEFAULT_TCP_CONG="cubic"
 # CONFIG_LAPB is not set
 # CONFIG_ECONET is not set
 # CONFIG_WAN_ROUTER is not set
-
-#
-# QoS and/or fair queueing
-#
 # CONFIG_NET_SCHED is not set
 
 #
@@ -308,6 +325,7 @@ CONFIG_DEFAULT_TCP_CONG="cubic"
 #
 # Generic Driver Options
 #
+CONFIG_UEVENT_HELPER_PATH="/sbin/hotplug"
 CONFIG_STANDALONE=y
 CONFIG_PREVENT_FIRMWARE_BUILD=y
 # CONFIG_FW_LOADER is not set
@@ -375,6 +393,7 @@ CONFIG_BLK_DEV_SD=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
@@ -386,6 +405,7 @@ CONFIG_SCSI_LOWLEVEL=y
 # 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
@@ -453,6 +473,7 @@ CONFIG_SATA_MV=y
 # 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
@@ -467,14 +488,7 @@ CONFIG_SATA_MV=y
 # CONFIG_PATA_WINBOND is not set
 # CONFIG_PATA_PLATFORM is not set
 # CONFIG_MD is not set
-
-#
-# Fusion MPT device support
-#
 # CONFIG_FUSION is not set
-# CONFIG_FUSION_SPI is not set
-# CONFIG_FUSION_FC is not set
-# CONFIG_FUSION_SAS is not set
 
 #
 # IEEE 1394 (FireWire) support
@@ -490,6 +504,8 @@ CONFIG_NETDEVICES=y
 # 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=y
 
@@ -506,6 +522,7 @@ CONFIG_PHYLIB=y
 # CONFIG_BROADCOM_PHY is not set
 # CONFIG_ICPLUS_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
@@ -514,13 +531,16 @@ CONFIG_MII=y
 # 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_DGRS is not set
 # CONFIG_EEPRO100 is not set
 CONFIG_E100=y
 # CONFIG_FEALNX is not set
@@ -542,6 +562,7 @@ 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
@@ -549,20 +570,25 @@ CONFIG_NETDEV_1000=y
 # 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_TSI108_ETH=y
+# CONFIG_MV643XX_ETH 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
 
 #
@@ -595,7 +621,6 @@ CONFIG_INPUT=y
 #
 # CONFIG_INPUT_MOUSEDEV is not set
 # CONFIG_INPUT_JOYDEV is not set
-# CONFIG_INPUT_TSDEV is not set
 # CONFIG_INPUT_EVDEV is not set
 # CONFIG_INPUT_EVBUG is not set
 
@@ -643,15 +668,12 @@ CONFIG_UNIX98_PTYS=y
 CONFIG_LEGACY_PTYS=y
 CONFIG_LEGACY_PTY_COUNT=256
 # CONFIG_IPMI_HANDLER is not set
-# CONFIG_WATCHDOG 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_AGP is not set
-# CONFIG_DRM is not set
 # CONFIG_RAW_DRIVER is not set
 # CONFIG_TCG_TPM is not set
 CONFIG_DEVPORT=y
@@ -666,9 +688,9 @@ CONFIG_DEVPORT=y
 # CONFIG_POWER_SUPPLY is not set
 CONFIG_HWMON=y
 # CONFIG_HWMON_VID is not set
-# CONFIG_SENSORS_ABITUGURU is not set
-# CONFIG_SENSORS_ABITUGURU3 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
@@ -681,6 +703,13 @@ CONFIG_HWMON=y
 # 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
@@ -697,16 +726,17 @@ 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
-# CONFIG_VGASTATE is not set
-CONFIG_VIDEO_OUTPUT_CONTROL=y
-# CONFIG_FB is not set
-# CONFIG_FB_IBM_GXT4500 is not set
 
 #
 # Sound
@@ -715,6 +745,7 @@ CONFIG_VIDEO_OUTPUT_CONTROL=y
 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
@@ -735,19 +766,6 @@ CONFIG_USB_ARCH_HAS_EHCI=y
 # CONFIG_EDAC is not set
 # CONFIG_RTC_CLASS is not set
 
-#
-# DMA Engine support
-#
-# CONFIG_DMA_ENGINE is not set
-
-#
-# DMA Clients
-#
-
-#
-# DMA Devices
-#
-
 #
 # Userspace I/O
 #
@@ -765,7 +783,6 @@ CONFIG_EXT3_FS_XATTR=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 is not set
 # CONFIG_JFS_FS is not set
@@ -806,7 +823,6 @@ CONFIG_SYSFS=y
 CONFIG_TMPFS=y
 # CONFIG_TMPFS_POSIX_ACL is not set
 # CONFIG_HUGETLB_PAGE is not set
-CONFIG_RAMFS=y
 # CONFIG_CONFIGFS_FS is not set
 
 #
@@ -825,10 +841,7 @@ CONFIG_RAMFS=y
 # CONFIG_QNX4FS_FS is not set
 # CONFIG_SYSV_FS is not set
 # CONFIG_UFS_FS is not set
-
-#
-# Network File Systems
-#
+CONFIG_NETWORK_FILESYSTEMS=y
 CONFIG_NFS_FS=y
 # CONFIG_NFS_V3 is not set
 # CONFIG_NFS_V4 is not set
@@ -868,15 +881,7 @@ CONFIG_MSDOS_PARTITION=y
 # CONFIG_KARMA_PARTITION is not set
 # CONFIG_EFI_PARTITION is not set
 # CONFIG_SYSV68_PARTITION is not set
-
-#
-# Native Language Support
-#
 # CONFIG_NLS is not set
-
-#
-# Distributed Lock Manager
-#
 # CONFIG_DLM is not set
 # CONFIG_UCC_SLOW is not set
 
@@ -894,23 +899,23 @@ CONFIG_PLIST=y
 CONFIG_HAS_IOMEM=y
 CONFIG_HAS_IOPORT=y
 CONFIG_HAS_DMA=y
-
-#
-# Instrumentation Support
-#
-# CONFIG_PROFILING is not set
+# CONFIG_INSTRUMENTATION is not set
 
 #
 # 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_DEBUG_BUGVERBOSE is not set
+# CONFIG_SAMPLES is not set
+# CONFIG_BOOTX_TEXT is not set
 # CONFIG_PPC_EARLY_DEBUG is not set
 
 #
@@ -918,4 +923,6 @@ CONFIG_ENABLE_MUST_CHECK=y
 #
 # 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
index 865a942ecc6956663bd88ce67cae2f1b26cf5d91..a31b7a030a6b87e48563f8bb2ebc7eeff76aeb4f 100644 (file)
@@ -1,7 +1,7 @@
 #
 # Automatically generated make config: don't edit
-# Linux kernel version: 2.6.23-rc4
-# Wed Sep  5 12:43:23 2007
+# Linux kernel version: 2.6.24-rc4
+# Thu Dec  6 16:48:30 2007
 #
 # CONFIG_PPC64 is not set
 
@@ -20,8 +20,13 @@ 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_IRQ_PER_CPU=y
 CONFIG_RWSEM_XCHGADD_ALGORITHM=y
@@ -63,6 +68,8 @@ CONFIG_SYSVIPC_SYSCTL=y
 CONFIG_IKCONFIG=y
 CONFIG_IKCONFIG_PROC=y
 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_BLK_DEV_INITRD is not set
@@ -81,7 +88,6 @@ 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
@@ -115,7 +121,6 @@ CONFIG_DEFAULT_IOSCHED="anticipatory"
 # Platform support
 #
 # CONFIG_PPC_MULTIPLATFORM is not set
-# CONFIG_EMBEDDED6xx is not set
 CONFIG_PPC_82xx=y
 # CONFIG_PPC_83xx is not set
 # CONFIG_PPC_86xx is not set
@@ -124,6 +129,7 @@ CONFIG_PPC_82xx=y
 # CONFIG_PPC_CELL is not set
 # CONFIG_PPC_CELL_NATIVE is not set
 CONFIG_MPC8272_ADS=y
+# CONFIG_PQ2FADS is not set
 CONFIG_PQ2ADS=y
 CONFIG_8260=y
 CONFIG_8272=y
@@ -147,6 +153,10 @@ CONFIG_CPM=y
 # 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
@@ -163,6 +173,7 @@ CONFIG_ARCH_POPULATES_NODE_MAP=y
 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
@@ -171,9 +182,10 @@ CONFIG_VIRT_TO_BUS=y
 CONFIG_PROC_DEVICETREE=y
 # CONFIG_CMDLINE_BOOL is not set
 # CONFIG_PM is not set
+CONFIG_SUSPEND_UP_POSSIBLE=y
+CONFIG_HIBERNATION_UP_POSSIBLE=y
 CONFIG_SECCOMP=y
 CONFIG_WANT_DEVICE_TREE=y
-# CONFIG_BUILD_RAW_IMAGE is not set
 CONFIG_DEVICE_TREE="mpc8272ads.dts"
 CONFIG_ISA_DMA_API=y
 
@@ -190,11 +202,8 @@ CONFIG_PCI_8260=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
-
-#
-# PCCARD (PCMCIA/CardBus) support
-#
 # CONFIG_PCCARD is not set
 
 #
@@ -208,7 +217,7 @@ CONFIG_ARCH_SUPPORTS_MSI=y
 CONFIG_HIGHMEM_START=0xfe000000
 CONFIG_LOWMEM_SIZE=0x30000000
 CONFIG_KERNEL_START=0xc0000000
-CONFIG_TASK_SIZE=0x80000000
+CONFIG_TASK_SIZE=0xc0000000
 CONFIG_BOOT_LOAD=0x00400000
 
 #
@@ -245,6 +254,7 @@ CONFIG_INET_TUNNEL=y
 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
@@ -288,10 +298,6 @@ CONFIG_NETFILTER=y
 # CONFIG_LLC2 is not set
 # CONFIG_IPX is not set
 # CONFIG_ATALK is not set
-
-#
-# QoS and/or fair queueing
-#
 # CONFIG_NET_SCHED is not set
 
 #
@@ -317,6 +323,7 @@ CONFIG_NETFILTER=y
 #
 # Generic Driver Options
 #
+CONFIG_UEVENT_HELPER_PATH="/sbin/hotplug"
 CONFIG_STANDALONE=y
 CONFIG_PREVENT_FIRMWARE_BUILD=y
 # CONFIG_FW_LOADER is not set
@@ -340,6 +347,7 @@ CONFIG_MTD_BLOCK=y
 # 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
@@ -378,6 +386,7 @@ CONFIG_MTD_CFI_UTIL=y
 # CONFIG_MTD_PHYSMAP is not set
 CONFIG_MTD_PHYSMAP_OF=y
 # CONFIG_MTD_SBC8240 is not set
+# CONFIG_MTD_INTEL_VR_NOR is not set
 # CONFIG_MTD_PLATRAM is not set
 
 #
@@ -429,10 +438,6 @@ CONFIG_BLK_DEV_LOOP=y
 # CONFIG_SCSI_NETLINK is not set
 # CONFIG_ATA is not set
 # CONFIG_MD is not set
-
-#
-# Fusion MPT device support
-#
 # CONFIG_FUSION is not set
 
 #
@@ -451,6 +456,7 @@ CONFIG_NETDEVICES=y
 # CONFIG_BONDING is not set
 # CONFIG_EQUALIZER is not set
 CONFIG_TUN=y
+# CONFIG_VETH is not set
 # CONFIG_ARCNET is not set
 CONFIG_PHYLIB=y
 
@@ -476,20 +482,28 @@ CONFIG_MII=y
 # 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 is not set
+# CONFIG_E1000E is not set
 # CONFIG_NS83820 is not set
 # CONFIG_HAMACHI 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
@@ -497,11 +511,14 @@ CONFIG_NETDEV_1000=y
 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
 
 #
@@ -539,7 +556,6 @@ CONFIG_INPUT_MOUSEDEV_PSAUX=y
 CONFIG_INPUT_MOUSEDEV_SCREEN_X=1024
 CONFIG_INPUT_MOUSEDEV_SCREEN_Y=768
 # CONFIG_INPUT_JOYDEV is not set
-# CONFIG_INPUT_TSDEV is not set
 CONFIG_INPUT_EVDEV=y
 # CONFIG_INPUT_EVBUG is not set
 
@@ -609,14 +625,11 @@ CONFIG_UNIX98_PTYS=y
 CONFIG_LEGACY_PTYS=y
 CONFIG_LEGACY_PTY_COUNT=256
 # CONFIG_IPMI_HANDLER is not set
-# CONFIG_WATCHDOG 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_AGP is not set
-# CONFIG_DRM is not set
 # CONFIG_RAW_DRIVER is not set
 CONFIG_DEVPORT=y
 # CONFIG_I2C is not set
@@ -629,6 +642,13 @@ CONFIG_DEVPORT=y
 # 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
@@ -645,16 +665,17 @@ 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
-# CONFIG_VGASTATE is not set
-# CONFIG_VIDEO_OUTPUT_CONTROL is not set
-# CONFIG_FB is not set
-# CONFIG_FB_IBM_GXT4500 is not set
 
 #
 # Sound
@@ -667,19 +688,6 @@ CONFIG_DAB=y
 # CONFIG_INFINIBAND is not set
 # CONFIG_RTC_CLASS is not set
 
-#
-# DMA Engine support
-#
-# CONFIG_DMA_ENGINE is not set
-
-#
-# DMA Clients
-#
-
-#
-# DMA Devices
-#
-
 #
 # Userspace I/O
 #
@@ -696,7 +704,6 @@ CONFIG_EXT3_FS_XATTR=y
 # CONFIG_EXT3_FS_POSIX_ACL is not set
 # CONFIG_EXT3_FS_SECURITY 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
@@ -736,7 +743,6 @@ CONFIG_SYSFS=y
 CONFIG_TMPFS=y
 # CONFIG_TMPFS_POSIX_ACL is not set
 # CONFIG_HUGETLB_PAGE is not set
-CONFIG_RAMFS=y
 
 #
 # Miscellaneous filesystems
@@ -749,10 +755,7 @@ CONFIG_CRAMFS=y
 # CONFIG_QNX4FS_FS is not set
 # CONFIG_SYSV_FS is not set
 # CONFIG_UFS_FS is not set
-
-#
-# Network File Systems
-#
+CONFIG_NETWORK_FILESYSTEMS=y
 CONFIG_NFS_FS=y
 CONFIG_NFS_V3=y
 CONFIG_NFS_V3_ACL=y
@@ -790,10 +793,6 @@ CONFIG_MSDOS_PARTITION=y
 # CONFIG_KARMA_PARTITION is not set
 # CONFIG_EFI_PARTITION is not set
 # CONFIG_SYSV68_PARTITION is not set
-
-#
-# Native Language Support
-#
 CONFIG_NLS=y
 CONFIG_NLS_DEFAULT="iso8859-1"
 CONFIG_NLS_CODEPAGE_437=y
@@ -852,11 +851,13 @@ CONFIG_PLIST=y
 CONFIG_HAS_IOMEM=y
 CONFIG_HAS_IOPORT=y
 CONFIG_HAS_DMA=y
+# CONFIG_INSTRUMENTATION 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
@@ -880,8 +881,11 @@ CONFIG_DEBUG_BUGVERBOSE=y
 CONFIG_DEBUG_INFO=y
 # 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_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
@@ -924,8 +928,12 @@ CONFIG_CRYPTO_DES=y
 # 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_AUTHENC is not set
 # CONFIG_CRYPTO_HW is not set
+# CONFIG_PPC_CLOCK is not set
+CONFIG_PPC_LIB_RHEAP=y
index 259d40d1eb5adcaf63572567d7cf981d98ccc8ec..c9af905bbb1de40d688aeea8f0b818f62599e4a0 100644 (file)
@@ -1,7 +1,7 @@
 #
 # Automatically generated make config: don't edit
-# Linux kernel version: 2.6.23-rc4
-# Tue Aug 28 21:24:39 2007
+# Linux kernel version: 2.6.24-rc4
+# Thu Dec  6 16:48:31 2007
 #
 # CONFIG_PPC64 is not set
 
@@ -21,8 +21,13 @@ 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_IRQ_PER_CPU=y
 CONFIG_RWSEM_XCHGADD_ALGORITHM=y
@@ -62,9 +67,12 @@ CONFIG_SYSVIPC_SYSCTL=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 is not set
 CONFIG_SYSFS_DEPRECATED=y
 # CONFIG_RELAY is not set
 CONFIG_BLK_DEV_INITRD=y
@@ -83,7 +91,6 @@ 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
@@ -123,7 +130,6 @@ CONFIG_DEFAULT_IOSCHED="anticipatory"
 # Platform support
 #
 # CONFIG_PPC_MULTIPLATFORM is not set
-# CONFIG_EMBEDDED6xx is not set
 # CONFIG_PPC_82xx is not set
 CONFIG_PPC_83xx=y
 # CONFIG_PPC_86xx is not set
@@ -156,6 +162,10 @@ CONFIG_PPC_MPC831x=y
 # 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
@@ -176,6 +186,7 @@ CONFIG_FLATMEM_MANUAL=y
 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
@@ -184,6 +195,8 @@ CONFIG_VIRT_TO_BUS=y
 CONFIG_PROC_DEVICETREE=y
 # CONFIG_CMDLINE_BOOL is not set
 # CONFIG_PM is not set
+CONFIG_SUSPEND_UP_POSSIBLE=y
+CONFIG_HIBERNATION_UP_POSSIBLE=y
 CONFIG_SECCOMP=y
 CONFIG_WANT_DEVICE_TREE=y
 CONFIG_DEVICE_TREE=""
@@ -202,11 +215,8 @@ 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
-
-#
-# PCCARD (PCMCIA/CardBus) support
-#
 # CONFIG_PCCARD is not set
 # CONFIG_HOTPLUG_PCI is not set
 
@@ -221,7 +231,7 @@ CONFIG_ARCH_SUPPORTS_MSI=y
 CONFIG_HIGHMEM_START=0xfe000000
 CONFIG_LOWMEM_SIZE=0x30000000
 CONFIG_KERNEL_START=0xc0000000
-CONFIG_TASK_SIZE=0x80000000
+CONFIG_TASK_SIZE=0xc0000000
 CONFIG_BOOT_LOAD=0x00800000
 
 #
@@ -261,6 +271,7 @@ CONFIG_SYN_COOKIES=y
 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
@@ -286,10 +297,6 @@ CONFIG_DEFAULT_TCP_CONG="cubic"
 # CONFIG_LAPB is not set
 # CONFIG_ECONET is not set
 # CONFIG_WAN_ROUTER is not set
-
-#
-# QoS and/or fair queueing
-#
 # CONFIG_NET_SCHED is not set
 
 #
@@ -318,6 +325,7 @@ CONFIG_DEFAULT_TCP_CONG="cubic"
 #
 # Generic Driver Options
 #
+CONFIG_UEVENT_HELPER_PATH="/sbin/hotplug"
 CONFIG_STANDALONE=y
 CONFIG_PREVENT_FIRMWARE_BUILD=y
 # CONFIG_FW_LOADER is not set
@@ -342,6 +350,7 @@ CONFIG_MTD_CHAR=y
 # 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
@@ -377,6 +386,7 @@ 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
 
 #
@@ -466,6 +476,7 @@ 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
@@ -477,6 +488,7 @@ CONFIG_SCSI_LOWLEVEL=y
 # 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
@@ -512,14 +524,7 @@ CONFIG_MD_RAID1=y
 # CONFIG_MD_MULTIPATH is not set
 # CONFIG_MD_FAULTY is not set
 # CONFIG_BLK_DEV_DM is not set
-
-#
-# Fusion MPT device support
-#
 # CONFIG_FUSION is not set
-# CONFIG_FUSION_SPI is not set
-# CONFIG_FUSION_FC is not set
-# CONFIG_FUSION_SAS is not set
 
 #
 # IEEE 1394 (FireWire) support
@@ -535,6 +540,8 @@ CONFIG_NETDEVICES=y
 # 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=y
 
@@ -551,6 +558,7 @@ CONFIG_CICADA_PHY=y
 # CONFIG_BROADCOM_PHY is not set
 # CONFIG_ICPLUS_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
@@ -559,13 +567,16 @@ CONFIG_MII=y
 # 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_DGRS is not set
 # CONFIG_EEPRO100 is not set
 CONFIG_E100=y
 # CONFIG_FEALNX is not set
@@ -583,6 +594,7 @@ 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
@@ -590,6 +602,7 @@ CONFIG_NETDEV_1000=y
 # 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
@@ -600,11 +613,14 @@ CONFIG_GFAR_NAPI=y
 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
 
 #
@@ -620,7 +636,6 @@ CONFIG_NETDEV_10000=y
 # CONFIG_USB_KAWETH is not set
 # CONFIG_USB_PEGASUS is not set
 # CONFIG_USB_RTL8150 is not set
-# CONFIG_USB_USBNET_MII is not set
 # CONFIG_USB_USBNET is not set
 # CONFIG_WAN is not set
 # CONFIG_FDDI is not set
@@ -647,7 +662,6 @@ CONFIG_INPUT=y
 #
 # CONFIG_INPUT_MOUSEDEV is not set
 # CONFIG_INPUT_JOYDEV is not set
-# CONFIG_INPUT_TSDEV is not set
 # CONFIG_INPUT_EVDEV is not set
 # CONFIG_INPUT_EVBUG is not set
 
@@ -695,32 +709,11 @@ CONFIG_UNIX98_PTYS=y
 CONFIG_LEGACY_PTYS=y
 CONFIG_LEGACY_PTY_COUNT=256
 # CONFIG_IPMI_HANDLER 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
 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_AGP is not set
-# CONFIG_DRM is not set
 # CONFIG_RAW_DRIVER is not set
 # CONFIG_TCG_TPM is not set
 CONFIG_DEVPORT=y
@@ -804,8 +797,6 @@ CONFIG_SPI_MPC83xx=y
 # CONFIG_POWER_SUPPLY is not set
 CONFIG_HWMON=y
 # CONFIG_HWMON_VID is not set
-# CONFIG_SENSORS_ABITUGURU is not set
-# CONFIG_SENSORS_ABITUGURU3 is not set
 # CONFIG_SENSORS_AD7418 is not set
 # CONFIG_SENSORS_ADM1021 is not set
 # CONFIG_SENSORS_ADM1025 is not set
@@ -813,12 +804,13 @@ CONFIG_HWMON=y
 # CONFIG_SENSORS_ADM1029 is not set
 # CONFIG_SENSORS_ADM1031 is not set
 # CONFIG_SENSORS_ADM9240 is not set
-# CONFIG_SENSORS_ASB100 is not set
+# CONFIG_SENSORS_ADT7470 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_FSCHER is not set
-# CONFIG_SENSORS_FSCPOS 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
@@ -855,6 +847,31 @@ CONFIG_HWMON=y
 # CONFIG_SENSORS_W83627HF is not set
 # CONFIG_SENSORS_W83627EHF is not set
 # CONFIG_HWMON_DEBUG_CHIP 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
@@ -872,16 +889,17 @@ 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
-# CONFIG_VGASTATE is not set
-CONFIG_VIDEO_OUTPUT_CONTROL=m
-# CONFIG_FB is not set
-# CONFIG_FB_IBM_GXT4500 is not set
 
 #
 # Sound
@@ -890,6 +908,7 @@ CONFIG_VIDEO_OUTPUT_CONTROL=m
 CONFIG_HID_SUPPORT=y
 CONFIG_HID=y
 # CONFIG_HID_DEBUG is not set
+# CONFIG_HIDRAW is not set
 
 #
 # USB Input Devices
@@ -954,6 +973,7 @@ 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
@@ -1015,6 +1035,7 @@ CONFIG_USB_GADGET=y
 # 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
@@ -1057,6 +1078,7 @@ CONFIG_RTC_INTF_DEV_UIE_EMUL=y
 # 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
@@ -1087,21 +1109,6 @@ CONFIG_RTC_DRV_DS1307=y
 # on-CPU RTC drivers
 #
 
-#
-# DMA Engine support
-#
-CONFIG_DMA_ENGINE=y
-
-#
-# DMA Clients
-#
-CONFIG_NET_DMA=y
-
-#
-# DMA Devices
-#
-CONFIG_INTEL_IOATDMA=y
-
 #
 # Userspace I/O
 #
@@ -1119,7 +1126,6 @@ CONFIG_EXT3_FS_XATTR=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 is not set
 # CONFIG_JFS_FS is not set
@@ -1160,7 +1166,6 @@ CONFIG_SYSFS=y
 CONFIG_TMPFS=y
 # CONFIG_TMPFS_POSIX_ACL is not set
 # CONFIG_HUGETLB_PAGE is not set
-CONFIG_RAMFS=y
 # CONFIG_CONFIGFS_FS is not set
 
 #
@@ -1180,10 +1185,7 @@ CONFIG_RAMFS=y
 # CONFIG_QNX4FS_FS is not set
 # CONFIG_SYSV_FS is not set
 # CONFIG_UFS_FS is not set
-
-#
-# Network File Systems
-#
+CONFIG_NETWORK_FILESYSTEMS=y
 CONFIG_NFS_FS=y
 CONFIG_NFS_V3=y
 # CONFIG_NFS_V3_ACL is not set
@@ -1226,15 +1228,7 @@ CONFIG_MSDOS_PARTITION=y
 # CONFIG_KARMA_PARTITION is not set
 # CONFIG_EFI_PARTITION is not set
 # CONFIG_SYSV68_PARTITION is not set
-
-#
-# Native Language Support
-#
 # CONFIG_NLS is not set
-
-#
-# Distributed Lock Manager
-#
 # CONFIG_DLM is not set
 # CONFIG_UCC_SLOW is not set
 
@@ -1252,16 +1246,13 @@ CONFIG_PLIST=y
 CONFIG_HAS_IOMEM=y
 CONFIG_HAS_IOPORT=y
 CONFIG_HAS_DMA=y
-
-#
-# Instrumentation Support
-#
-# CONFIG_PROFILING is not set
+# CONFIG_INSTRUMENTATION is not set
 
 #
 # 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
@@ -1285,9 +1276,12 @@ CONFIG_SCHED_DEBUG=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_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
@@ -1300,6 +1294,7 @@ CONFIG_FORCED_INLINING=y
 #
 # 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
@@ -1319,6 +1314,7 @@ CONFIG_CRYPTO_MD5=y
 CONFIG_CRYPTO_CBC=y
 CONFIG_CRYPTO_PCBC=m
 # 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
@@ -1332,9 +1328,12 @@ CONFIG_CRYPTO_DES=y
 # 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
index dd68d1818d6b3ce0fa55eec1c82936e731f4a56d..2d8951b1096e605ad2795008641736519bfaaed1 100644 (file)
@@ -1,7 +1,7 @@
 #
 # Automatically generated make config: don't edit
-# Linux kernel version: 2.6.23-rc4
-# Tue Aug 28 21:24:40 2007
+# Linux kernel version: 2.6.24-rc4
+# Thu Dec  6 16:48:33 2007
 #
 # CONFIG_PPC64 is not set
 
@@ -21,8 +21,13 @@ 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_IRQ_PER_CPU=y
 CONFIG_RWSEM_XCHGADD_ALGORITHM=y
@@ -62,9 +67,12 @@ CONFIG_SYSVIPC_SYSCTL=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 is not set
 CONFIG_SYSFS_DEPRECATED=y
 # CONFIG_RELAY is not set
 CONFIG_BLK_DEV_INITRD=y
@@ -83,7 +91,6 @@ 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
@@ -123,7 +130,6 @@ CONFIG_DEFAULT_IOSCHED="anticipatory"
 # Platform support
 #
 # CONFIG_PPC_MULTIPLATFORM is not set
-# CONFIG_EMBEDDED6xx is not set
 # CONFIG_PPC_82xx is not set
 CONFIG_PPC_83xx=y
 # CONFIG_PPC_86xx is not set
@@ -157,6 +163,10 @@ CONFIG_QUICC_ENGINE=y
 # 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
@@ -178,6 +188,7 @@ CONFIG_FLATMEM_MANUAL=y
 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
@@ -186,6 +197,8 @@ CONFIG_VIRT_TO_BUS=y
 CONFIG_PROC_DEVICETREE=y
 # CONFIG_CMDLINE_BOOL is not set
 # CONFIG_PM is not set
+CONFIG_SUSPEND_UP_POSSIBLE=y
+CONFIG_HIBERNATION_UP_POSSIBLE=y
 CONFIG_SECCOMP=y
 CONFIG_WANT_DEVICE_TREE=y
 CONFIG_DEVICE_TREE=""
@@ -204,10 +217,7 @@ CONFIG_PCI_SYSCALL=y
 # CONFIG_PCIEPORTBUS is not set
 CONFIG_ARCH_SUPPORTS_MSI=y
 # CONFIG_PCI_MSI is not set
-
-#
-# PCCARD (PCMCIA/CardBus) support
-#
+CONFIG_PCI_LEGACY=y
 # CONFIG_PCCARD is not set
 # CONFIG_HOTPLUG_PCI is not set
 
@@ -222,7 +232,7 @@ CONFIG_ARCH_SUPPORTS_MSI=y
 CONFIG_HIGHMEM_START=0xfe000000
 CONFIG_LOWMEM_SIZE=0x30000000
 CONFIG_KERNEL_START=0xc0000000
-CONFIG_TASK_SIZE=0x80000000
+CONFIG_TASK_SIZE=0xc0000000
 CONFIG_BOOT_LOAD=0x00800000
 
 #
@@ -262,6 +272,7 @@ CONFIG_SYN_COOKIES=y
 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
@@ -287,10 +298,6 @@ CONFIG_DEFAULT_TCP_CONG="cubic"
 # CONFIG_LAPB is not set
 # CONFIG_ECONET is not set
 # CONFIG_WAN_ROUTER is not set
-
-#
-# QoS and/or fair queueing
-#
 # CONFIG_NET_SCHED is not set
 
 #
@@ -319,6 +326,7 @@ CONFIG_DEFAULT_TCP_CONG="cubic"
 #
 # Generic Driver Options
 #
+CONFIG_UEVENT_HELPER_PATH="/sbin/hotplug"
 CONFIG_STANDALONE=y
 CONFIG_PREVENT_FIRMWARE_BUILD=y
 # CONFIG_FW_LOADER is not set
@@ -387,6 +395,7 @@ CONFIG_SCSI_WAIT_SCAN=m
 # 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
@@ -398,6 +407,7 @@ CONFIG_SCSI_LOWLEVEL=y
 # 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
@@ -424,14 +434,7 @@ CONFIG_SCSI_LOWLEVEL=y
 # CONFIG_SCSI_SRP is not set
 # CONFIG_ATA is not set
 # CONFIG_MD is not set
-
-#
-# Fusion MPT device support
-#
 # CONFIG_FUSION is not set
-# CONFIG_FUSION_SPI is not set
-# CONFIG_FUSION_FC is not set
-# CONFIG_FUSION_SAS is not set
 
 #
 # IEEE 1394 (FireWire) support
@@ -447,6 +450,8 @@ CONFIG_NETDEVICES=y
 # 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=y
 
@@ -463,6 +468,7 @@ CONFIG_DAVICOM_PHY=y
 # CONFIG_BROADCOM_PHY is not set
 # CONFIG_ICPLUS_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
@@ -471,11 +477,17 @@ CONFIG_MII=y
 # 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_NS83820 is not set
 # CONFIG_HAMACHI is not set
 # CONFIG_YELLOWFIN is not set
@@ -483,6 +495,7 @@ CONFIG_NETDEV_1000=y
 # 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
@@ -497,11 +510,14 @@ CONFIG_UCC_GETH=y
 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
 
 #
@@ -534,7 +550,6 @@ CONFIG_INPUT=y
 #
 # CONFIG_INPUT_MOUSEDEV is not set
 # CONFIG_INPUT_JOYDEV is not set
-# CONFIG_INPUT_TSDEV is not set
 # CONFIG_INPUT_EVDEV is not set
 # CONFIG_INPUT_EVBUG is not set
 
@@ -582,28 +597,12 @@ CONFIG_UNIX98_PTYS=y
 CONFIG_LEGACY_PTYS=y
 CONFIG_LEGACY_PTY_COUNT=256
 # CONFIG_IPMI_HANDLER 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
 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_AGP is not set
-# CONFIG_DRM is not set
 # CONFIG_RAW_DRIVER is not set
 # CONFIG_TCG_TPM is not set
 CONFIG_DEVPORT=y
@@ -672,8 +671,6 @@ CONFIG_I2C_MPC=y
 # CONFIG_POWER_SUPPLY is not set
 CONFIG_HWMON=y
 # CONFIG_HWMON_VID is not set
-# CONFIG_SENSORS_ABITUGURU is not set
-# CONFIG_SENSORS_ABITUGURU3 is not set
 # CONFIG_SENSORS_AD7418 is not set
 # CONFIG_SENSORS_ADM1021 is not set
 # CONFIG_SENSORS_ADM1025 is not set
@@ -681,12 +678,13 @@ CONFIG_HWMON=y
 # CONFIG_SENSORS_ADM1029 is not set
 # CONFIG_SENSORS_ADM1031 is not set
 # CONFIG_SENSORS_ADM9240 is not set
-# CONFIG_SENSORS_ASB100 is not set
+# CONFIG_SENSORS_ADT7470 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_FSCHER is not set
-# CONFIG_SENSORS_FSCPOS 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
@@ -722,6 +720,26 @@ CONFIG_HWMON=y
 # CONFIG_SENSORS_W83627HF is not set
 # CONFIG_SENSORS_W83627EHF is not set
 # CONFIG_HWMON_DEBUG_CHIP 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
@@ -738,16 +756,17 @@ 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
-# CONFIG_VGASTATE is not set
-CONFIG_VIDEO_OUTPUT_CONTROL=m
-# CONFIG_FB is not set
-# CONFIG_FB_IBM_GXT4500 is not set
 
 #
 # Sound
@@ -756,6 +775,7 @@ CONFIG_VIDEO_OUTPUT_CONTROL=m
 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
@@ -774,19 +794,52 @@ CONFIG_USB_ARCH_HAS_EHCI=y
 # CONFIG_NEW_LEDS is not set
 # CONFIG_INFINIBAND is not set
 # CONFIG_EDAC is not set
-# CONFIG_RTC_CLASS 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
 
 #
-# DMA Engine support
+# RTC interfaces
 #
-# CONFIG_DMA_ENGINE is not set
+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
 
 #
-# DMA Clients
+# 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
+
 #
+# SPI RTC drivers
+#
+
+#
+# Platform RTC drivers
+#
+# CONFIG_RTC_DRV_CMOS is not set
+# CONFIG_RTC_DRV_DS1553 is not set
+# CONFIG_RTC_DRV_STK17TA8 is not set
+# CONFIG_RTC_DRV_DS1742 is not set
+# CONFIG_RTC_DRV_M48T86 is not set
+# CONFIG_RTC_DRV_M48T59 is not set
+# CONFIG_RTC_DRV_V3020 is not set
 
 #
-# DMA Devices
+# on-CPU RTC drivers
 #
 
 #
@@ -806,7 +859,6 @@ CONFIG_EXT3_FS_XATTR=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 is not set
 # CONFIG_JFS_FS is not set
@@ -847,7 +899,6 @@ CONFIG_SYSFS=y
 CONFIG_TMPFS=y
 # CONFIG_TMPFS_POSIX_ACL is not set
 # CONFIG_HUGETLB_PAGE is not set
-CONFIG_RAMFS=y
 # CONFIG_CONFIGFS_FS is not set
 
 #
@@ -866,10 +917,7 @@ CONFIG_RAMFS=y
 # CONFIG_QNX4FS_FS is not set
 # CONFIG_SYSV_FS is not set
 # CONFIG_UFS_FS is not set
-
-#
-# Network File Systems
-#
+CONFIG_NETWORK_FILESYSTEMS=y
 CONFIG_NFS_FS=y
 CONFIG_NFS_V3=y
 # CONFIG_NFS_V3_ACL is not set
@@ -908,15 +956,7 @@ CONFIG_PARTITION_ADVANCED=y
 # CONFIG_KARMA_PARTITION is not set
 # CONFIG_EFI_PARTITION is not set
 # CONFIG_SYSV68_PARTITION is not set
-
-#
-# Native Language Support
-#
 # CONFIG_NLS is not set
-
-#
-# Distributed Lock Manager
-#
 # CONFIG_DLM is not set
 # CONFIG_UCC_SLOW is not set
 CONFIG_UCC_FAST=y
@@ -936,23 +976,22 @@ CONFIG_PLIST=y
 CONFIG_HAS_IOMEM=y
 CONFIG_HAS_IOPORT=y
 CONFIG_HAS_DMA=y
-
-#
-# Instrumentation Support
-#
-# CONFIG_PROFILING is not set
+# CONFIG_INSTRUMENTATION is not set
 
 #
 # 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_DEBUG_BUGVERBOSE is not set
+# CONFIG_SAMPLES is not set
 # CONFIG_PPC_EARLY_DEBUG is not set
 
 #
@@ -960,6 +999,7 @@ CONFIG_ENABLE_MUST_CHECK=y
 #
 # 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
@@ -979,6 +1019,7 @@ 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_CRYPTD is not set
 CONFIG_CRYPTO_DES=y
 # CONFIG_CRYPTO_FCRYPT is not set
@@ -992,9 +1033,13 @@ CONFIG_CRYPTO_DES=y
 # 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
+CONFIG_PPC_LIB_RHEAP=y
index 4f391028c79c5414cc964001f6feb8d464af706f..761718a63b7cf298dba667a932ad15f73f6eba8c 100644 (file)
@@ -1,7 +1,7 @@
 #
 # Automatically generated make config: don't edit
-# Linux kernel version: 2.6.23-rc4
-# Tue Aug 28 21:27:19 2007
+# Linux kernel version: 2.6.24-rc4
+# Thu Dec  6 16:48:35 2007
 #
 # CONFIG_PPC64 is not set
 
@@ -21,8 +21,13 @@ 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_IRQ_PER_CPU=y
 CONFIG_RWSEM_XCHGADD_ALGORITHM=y
@@ -62,9 +67,12 @@ CONFIG_SYSVIPC_SYSCTL=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 is not set
 CONFIG_SYSFS_DEPRECATED=y
 # CONFIG_RELAY is not set
 CONFIG_BLK_DEV_INITRD=y
@@ -83,7 +91,6 @@ 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
@@ -123,7 +130,6 @@ CONFIG_DEFAULT_IOSCHED="anticipatory"
 # Platform support
 #
 # CONFIG_PPC_MULTIPLATFORM is not set
-# CONFIG_EMBEDDED6xx is not set
 # CONFIG_PPC_82xx is not set
 CONFIG_PPC_83xx=y
 # CONFIG_PPC_86xx is not set
@@ -157,6 +163,10 @@ CONFIG_QUICC_ENGINE=y
 # 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
@@ -178,6 +188,7 @@ CONFIG_FLATMEM_MANUAL=y
 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
@@ -186,6 +197,8 @@ CONFIG_VIRT_TO_BUS=y
 CONFIG_PROC_DEVICETREE=y
 # CONFIG_CMDLINE_BOOL is not set
 # CONFIG_PM is not set
+CONFIG_SUSPEND_UP_POSSIBLE=y
+CONFIG_HIBERNATION_UP_POSSIBLE=y
 CONFIG_SECCOMP=y
 CONFIG_WANT_DEVICE_TREE=y
 CONFIG_DEVICE_TREE=""
@@ -204,10 +217,7 @@ CONFIG_PCI_SYSCALL=y
 # CONFIG_PCIEPORTBUS is not set
 CONFIG_ARCH_SUPPORTS_MSI=y
 # CONFIG_PCI_MSI is not set
-
-#
-# PCCARD (PCMCIA/CardBus) support
-#
+CONFIG_PCI_LEGACY=y
 # CONFIG_PCCARD is not set
 # CONFIG_HOTPLUG_PCI is not set
 
@@ -222,7 +232,7 @@ CONFIG_ARCH_SUPPORTS_MSI=y
 CONFIG_HIGHMEM_START=0xfe000000
 CONFIG_LOWMEM_SIZE=0x30000000
 CONFIG_KERNEL_START=0xc0000000
-CONFIG_TASK_SIZE=0x80000000
+CONFIG_TASK_SIZE=0xc0000000
 CONFIG_BOOT_LOAD=0x00800000
 
 #
@@ -262,6 +272,7 @@ CONFIG_SYN_COOKIES=y
 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
@@ -287,10 +298,6 @@ CONFIG_DEFAULT_TCP_CONG="cubic"
 # CONFIG_LAPB is not set
 # CONFIG_ECONET is not set
 # CONFIG_WAN_ROUTER is not set
-
-#
-# QoS and/or fair queueing
-#
 # CONFIG_NET_SCHED is not set
 
 #
@@ -319,6 +326,7 @@ CONFIG_DEFAULT_TCP_CONG="cubic"
 #
 # Generic Driver Options
 #
+CONFIG_UEVENT_HELPER_PATH="/sbin/hotplug"
 CONFIG_STANDALONE=y
 CONFIG_PREVENT_FIRMWARE_BUILD=y
 # CONFIG_FW_LOADER is not set
@@ -388,6 +396,7 @@ CONFIG_SCSI_WAIT_SCAN=m
 # 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
@@ -399,6 +408,7 @@ CONFIG_SCSI_LOWLEVEL=y
 # 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
@@ -425,14 +435,7 @@ CONFIG_SCSI_LOWLEVEL=y
 # CONFIG_SCSI_SRP is not set
 # CONFIG_ATA is not set
 # CONFIG_MD is not set
-
-#
-# Fusion MPT device support
-#
 # CONFIG_FUSION is not set
-# CONFIG_FUSION_SPI is not set
-# CONFIG_FUSION_FC is not set
-# CONFIG_FUSION_SAS is not set
 
 #
 # IEEE 1394 (FireWire) support
@@ -448,6 +451,8 @@ CONFIG_NETDEVICES=y
 # 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=y
 
@@ -464,6 +469,7 @@ CONFIG_PHYLIB=y
 # CONFIG_BROADCOM_PHY is not set
 CONFIG_ICPLUS_PHY=y
 # CONFIG_FIXED_PHY is not set
+# CONFIG_MDIO_BITBANG is not set
 CONFIG_NET_ETHERNET=y
 CONFIG_MII=y
 # CONFIG_HAPPYMEAL is not set
@@ -472,13 +478,19 @@ CONFIG_MII=y
 # 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 is not set
 # CONFIG_E1000_DISABLE_PACKET_SPLIT is not set
+# CONFIG_E1000E is not set
 # CONFIG_NS83820 is not set
 # CONFIG_HAMACHI is not set
 # CONFIG_YELLOWFIN is not set
@@ -486,6 +498,7 @@ CONFIG_E1000=y
 # 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
@@ -500,11 +513,14 @@ CONFIG_UGETH_NAPI=y
 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
 
 #
@@ -520,7 +536,6 @@ CONFIG_NETDEV_10000=y
 # CONFIG_USB_KAWETH is not set
 # CONFIG_USB_PEGASUS is not set
 # CONFIG_USB_RTL8150 is not set
-# CONFIG_USB_USBNET_MII is not set
 # CONFIG_USB_USBNET is not set
 # CONFIG_WAN is not set
 # CONFIG_FDDI is not set
@@ -547,7 +562,6 @@ CONFIG_INPUT=y
 #
 # CONFIG_INPUT_MOUSEDEV is not set
 # CONFIG_INPUT_JOYDEV is not set
-# CONFIG_INPUT_TSDEV is not set
 # CONFIG_INPUT_EVDEV is not set
 # CONFIG_INPUT_EVBUG is not set
 
@@ -595,33 +609,12 @@ CONFIG_UNIX98_PTYS=y
 CONFIG_LEGACY_PTYS=y
 CONFIG_LEGACY_PTY_COUNT=256
 # CONFIG_IPMI_HANDLER 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
 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_AGP is not set
-# CONFIG_DRM is not set
 # CONFIG_RAW_DRIVER is not set
 # CONFIG_TCG_TPM is not set
 CONFIG_DEVPORT=y
@@ -685,14 +678,25 @@ CONFIG_I2C_MPC=y
 #
 # SPI support
 #
-# CONFIG_SPI is not set
-# CONFIG_SPI_MASTER is not set
+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_ABITUGURU is not set
-# CONFIG_SENSORS_ABITUGURU3 is not set
 # CONFIG_SENSORS_AD7418 is not set
 # CONFIG_SENSORS_ADM1021 is not set
 # CONFIG_SENSORS_ADM1025 is not set
@@ -700,16 +704,18 @@ CONFIG_HWMON=y
 # CONFIG_SENSORS_ADM1029 is not set
 # CONFIG_SENSORS_ADM1031 is not set
 # CONFIG_SENSORS_ADM9240 is not set
-# CONFIG_SENSORS_ASB100 is not set
+# CONFIG_SENSORS_ADT7470 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_FSCHER is not set
-# CONFIG_SENSORS_FSCPOS 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
@@ -741,6 +747,31 @@ CONFIG_HWMON=y
 # CONFIG_SENSORS_W83627HF is not set
 # CONFIG_SENSORS_W83627EHF is not set
 # CONFIG_HWMON_DEBUG_CHIP 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
@@ -758,16 +789,17 @@ 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
-# CONFIG_VGASTATE is not set
-CONFIG_VIDEO_OUTPUT_CONTROL=m
-# CONFIG_FB is not set
-# CONFIG_FB_IBM_GXT4500 is not set
 
 #
 # Sound
@@ -776,6 +808,7 @@ CONFIG_VIDEO_OUTPUT_CONTROL=m
 CONFIG_HID_SUPPORT=y
 CONFIG_HID=y
 # CONFIG_HID_DEBUG is not set
+# CONFIG_HIDRAW is not set
 
 #
 # USB Input Devices
@@ -839,6 +872,7 @@ 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
@@ -896,24 +930,28 @@ CONFIG_USB_MON=y
 # 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
-
-#
-# DMA Engine support
-#
-# CONFIG_DMA_ENGINE is not set
+CONFIG_MMC=y
+# CONFIG_MMC_DEBUG is not set
+# CONFIG_MMC_UNSAFE_RESUME is not set
 
 #
-# DMA Clients
+# MMC/SD Card Drivers
 #
+CONFIG_MMC_BLOCK=y
+CONFIG_MMC_BLOCK_BOUNCE=y
+# CONFIG_SDIO_UART is not set
 
 #
-# DMA Devices
+# 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_NEW_LEDS is not set
+# CONFIG_INFINIBAND is not set
+# CONFIG_EDAC is not set
+# CONFIG_RTC_CLASS is not set
 
 #
 # Userspace I/O
@@ -932,7 +970,6 @@ CONFIG_EXT3_FS_XATTR=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 is not set
 # CONFIG_JFS_FS is not set
@@ -976,7 +1013,6 @@ CONFIG_SYSFS=y
 CONFIG_TMPFS=y
 # CONFIG_TMPFS_POSIX_ACL is not set
 # CONFIG_HUGETLB_PAGE is not set
-CONFIG_RAMFS=y
 # CONFIG_CONFIGFS_FS is not set
 
 #
@@ -995,10 +1031,7 @@ CONFIG_RAMFS=y
 # CONFIG_QNX4FS_FS is not set
 # CONFIG_SYSV_FS is not set
 # CONFIG_UFS_FS is not set
-
-#
-# Network File Systems
-#
+CONFIG_NETWORK_FILESYSTEMS=y
 CONFIG_NFS_FS=y
 CONFIG_NFS_V3=y
 # CONFIG_NFS_V3_ACL is not set
@@ -1042,10 +1075,6 @@ CONFIG_LDM_PARTITION=y
 # CONFIG_KARMA_PARTITION is not set
 # CONFIG_EFI_PARTITION is not set
 # CONFIG_SYSV68_PARTITION is not set
-
-#
-# Native Language Support
-#
 CONFIG_NLS=y
 CONFIG_NLS_DEFAULT="iso8859-1"
 CONFIG_NLS_CODEPAGE_437=y
@@ -1086,10 +1115,6 @@ CONFIG_NLS_ISO8859_1=y
 # CONFIG_NLS_KOI8_R is not set
 # CONFIG_NLS_KOI8_U is not set
 # CONFIG_NLS_UTF8 is not set
-
-#
-# Distributed Lock Manager
-#
 # CONFIG_DLM is not set
 # CONFIG_UCC_SLOW is not set
 CONFIG_UCC_FAST=y
@@ -1101,31 +1126,30 @@ CONFIG_UCC=y
 CONFIG_BITREVERSE=y
 # CONFIG_CRC_CCITT is not set
 # CONFIG_CRC16 is not set
-# CONFIG_CRC_ITU_T is not set
+CONFIG_CRC_ITU_T=y
 CONFIG_CRC32=y
-# CONFIG_CRC7 is not set
+CONFIG_CRC7=y
 # CONFIG_LIBCRC32C is not set
 CONFIG_PLIST=y
 CONFIG_HAS_IOMEM=y
 CONFIG_HAS_IOPORT=y
 CONFIG_HAS_DMA=y
-
-#
-# Instrumentation Support
-#
-# CONFIG_PROFILING is not set
+# CONFIG_INSTRUMENTATION is not set
 
 #
 # 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_DEBUG_BUGVERBOSE is not set
+# CONFIG_SAMPLES is not set
 # CONFIG_PPC_EARLY_DEBUG is not set
 
 #
@@ -1133,6 +1157,7 @@ CONFIG_ENABLE_MUST_CHECK=y
 #
 # 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
@@ -1152,6 +1177,7 @@ 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_CRYPTD is not set
 CONFIG_CRYPTO_DES=y
 # CONFIG_CRYPTO_FCRYPT is not set
@@ -1165,9 +1191,13 @@ CONFIG_CRYPTO_DES=y
 # 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
+CONFIG_PPC_LIB_RHEAP=y
index eb28dd85cb2b6b0b1f5b665f3aed6ecf3e416275..6feb86e2b786bd06e45acd145dc31f569e3332ed 100644 (file)
@@ -1,7 +1,7 @@
 #
 # Automatically generated make config: don't edit
-# Linux kernel version: 2.6.23-rc4
-# Tue Aug 28 21:24:41 2007
+# Linux kernel version: 2.6.24-rc4
+# Thu Dec  6 16:48:37 2007
 #
 # CONFIG_PPC64 is not set
 
@@ -21,8 +21,13 @@ 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_IRQ_PER_CPU=y
 CONFIG_RWSEM_XCHGADD_ALGORITHM=y
@@ -62,9 +67,12 @@ CONFIG_SYSVIPC_SYSCTL=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 is not set
 CONFIG_SYSFS_DEPRECATED=y
 # CONFIG_RELAY is not set
 CONFIG_BLK_DEV_INITRD=y
@@ -83,7 +91,6 @@ 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
@@ -123,7 +130,6 @@ CONFIG_DEFAULT_IOSCHED="anticipatory"
 # Platform support
 #
 # CONFIG_PPC_MULTIPLATFORM is not set
-# CONFIG_EMBEDDED6xx is not set
 # CONFIG_PPC_82xx is not set
 CONFIG_PPC_83xx=y
 # CONFIG_PPC_86xx is not set
@@ -156,6 +162,10 @@ CONFIG_MPC834x=y
 # 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
@@ -176,6 +186,7 @@ CONFIG_FLATMEM_MANUAL=y
 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
@@ -184,6 +195,8 @@ CONFIG_VIRT_TO_BUS=y
 CONFIG_PROC_DEVICETREE=y
 # CONFIG_CMDLINE_BOOL is not set
 # CONFIG_PM is not set
+CONFIG_SUSPEND_UP_POSSIBLE=y
+CONFIG_HIBERNATION_UP_POSSIBLE=y
 CONFIG_SECCOMP=y
 CONFIG_WANT_DEVICE_TREE=y
 CONFIG_DEVICE_TREE=""
@@ -202,10 +215,7 @@ CONFIG_PCI_SYSCALL=y
 # CONFIG_PCIEPORTBUS is not set
 CONFIG_ARCH_SUPPORTS_MSI=y
 # CONFIG_PCI_MSI is not set
-
-#
-# PCCARD (PCMCIA/CardBus) support
-#
+CONFIG_PCI_LEGACY=y
 # CONFIG_PCCARD is not set
 # CONFIG_HOTPLUG_PCI is not set
 
@@ -220,7 +230,7 @@ CONFIG_ARCH_SUPPORTS_MSI=y
 CONFIG_HIGHMEM_START=0xfe000000
 CONFIG_LOWMEM_SIZE=0x30000000
 CONFIG_KERNEL_START=0xc0000000
-CONFIG_TASK_SIZE=0x80000000
+CONFIG_TASK_SIZE=0xc0000000
 CONFIG_BOOT_LOAD=0x00800000
 
 #
@@ -260,6 +270,7 @@ CONFIG_SYN_COOKIES=y
 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
@@ -285,10 +296,6 @@ CONFIG_DEFAULT_TCP_CONG="cubic"
 # CONFIG_LAPB is not set
 # CONFIG_ECONET is not set
 # CONFIG_WAN_ROUTER is not set
-
-#
-# QoS and/or fair queueing
-#
 # CONFIG_NET_SCHED is not set
 
 #
@@ -317,6 +324,7 @@ CONFIG_DEFAULT_TCP_CONG="cubic"
 #
 # Generic Driver Options
 #
+CONFIG_UEVENT_HELPER_PATH="/sbin/hotplug"
 CONFIG_STANDALONE=y
 CONFIG_PREVENT_FIRMWARE_BUILD=y
 # CONFIG_FW_LOADER is not set
@@ -339,6 +347,7 @@ CONFIG_MTD_CHAR=y
 # 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
@@ -374,6 +383,7 @@ 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
 
 #
@@ -467,6 +477,7 @@ 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
@@ -478,6 +489,7 @@ CONFIG_SCSI_LOWLEVEL=y
 # 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
@@ -545,6 +557,7 @@ CONFIG_SATA_SIL=y
 # 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
@@ -568,14 +581,7 @@ CONFIG_MD_RAID1=y
 # CONFIG_MD_MULTIPATH is not set
 # CONFIG_MD_FAULTY is not set
 # CONFIG_BLK_DEV_DM is not set
-
-#
-# Fusion MPT device support
-#
 # CONFIG_FUSION is not set
-# CONFIG_FUSION_SPI is not set
-# CONFIG_FUSION_FC is not set
-# CONFIG_FUSION_SAS is not set
 
 #
 # IEEE 1394 (FireWire) support
@@ -591,6 +597,8 @@ CONFIG_NETDEVICES=y
 # 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=y
 
@@ -607,11 +615,13 @@ CONFIG_CICADA_PHY=y
 # CONFIG_BROADCOM_PHY is not set
 # CONFIG_ICPLUS_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_NS83820 is not set
 # CONFIG_HAMACHI is not set
 # CONFIG_YELLOWFIN is not set
@@ -619,6 +629,7 @@ CONFIG_NETDEV_1000=y
 # 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
@@ -629,11 +640,14 @@ CONFIG_GFAR_NAPI=y
 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
 
 #
@@ -649,7 +663,6 @@ CONFIG_NETDEV_10000=y
 # CONFIG_USB_KAWETH is not set
 # CONFIG_USB_PEGASUS is not set
 # CONFIG_USB_RTL8150 is not set
-# CONFIG_USB_USBNET_MII is not set
 # CONFIG_USB_USBNET is not set
 # CONFIG_WAN is not set
 # CONFIG_FDDI is not set
@@ -703,32 +716,11 @@ CONFIG_UNIX98_PTYS=y
 CONFIG_LEGACY_PTYS=y
 CONFIG_LEGACY_PTY_COUNT=256
 # CONFIG_IPMI_HANDLER 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
 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_AGP is not set
-# CONFIG_DRM is not set
 # CONFIG_RAW_DRIVER is not set
 # CONFIG_TCG_TPM is not set
 CONFIG_DEVPORT=y
@@ -810,6 +802,31 @@ CONFIG_SPI_MPC83xx=y
 # CONFIG_W1 is not set
 # CONFIG_POWER_SUPPLY is not set
 # CONFIG_HWMON 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
@@ -827,16 +844,17 @@ 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
-# CONFIG_VGASTATE is not set
-CONFIG_VIDEO_OUTPUT_CONTROL=m
-# CONFIG_FB is not set
-# CONFIG_FB_IBM_GXT4500 is not set
 
 #
 # Sound
@@ -867,7 +885,7 @@ CONFIG_USB_EHCI_ROOT_HUB_TT=y
 CONFIG_USB_EHCI_FSL=y
 # CONFIG_USB_ISP116X_HCD is not set
 # CONFIG_USB_OHCI_HCD is not set
-# CONFIG_USB_UHCI_HCD is not set
+CONFIG_USB_UHCI_HCD=y
 # CONFIG_USB_SL811_HCD is not set
 # CONFIG_USB_R8A66597_HCD is not set
 
@@ -888,6 +906,7 @@ 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
@@ -968,6 +987,7 @@ CONFIG_RTC_INTF_DEV_UIE_EMUL=y
 # 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
@@ -998,21 +1018,6 @@ CONFIG_RTC_DRV_DS1307=y
 # on-CPU RTC drivers
 #
 
-#
-# DMA Engine support
-#
-CONFIG_DMA_ENGINE=y
-
-#
-# DMA Clients
-#
-CONFIG_NET_DMA=y
-
-#
-# DMA Devices
-#
-CONFIG_INTEL_IOATDMA=y
-
 #
 # Userspace I/O
 #
@@ -1030,7 +1035,6 @@ CONFIG_EXT3_FS_XATTR=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 is not set
 # CONFIG_JFS_FS is not set
@@ -1074,7 +1078,6 @@ CONFIG_SYSFS=y
 CONFIG_TMPFS=y
 # CONFIG_TMPFS_POSIX_ACL is not set
 # CONFIG_HUGETLB_PAGE is not set
-CONFIG_RAMFS=y
 # CONFIG_CONFIGFS_FS is not set
 
 #
@@ -1094,10 +1097,7 @@ CONFIG_RAMFS=y
 # CONFIG_QNX4FS_FS is not set
 # CONFIG_SYSV_FS is not set
 # CONFIG_UFS_FS is not set
-
-#
-# Network File Systems
-#
+CONFIG_NETWORK_FILESYSTEMS=y
 CONFIG_NFS_FS=y
 CONFIG_NFS_V3=y
 # CONFIG_NFS_V3_ACL is not set
@@ -1140,10 +1140,6 @@ CONFIG_MSDOS_PARTITION=y
 # CONFIG_KARMA_PARTITION is not set
 # CONFIG_EFI_PARTITION is not set
 # CONFIG_SYSV68_PARTITION is not set
-
-#
-# Native Language Support
-#
 CONFIG_NLS=y
 CONFIG_NLS_DEFAULT="iso8859-1"
 # CONFIG_NLS_CODEPAGE_437 is not set
@@ -1184,10 +1180,6 @@ CONFIG_NLS_DEFAULT="iso8859-1"
 # CONFIG_NLS_KOI8_R is not set
 # CONFIG_NLS_KOI8_U is not set
 # CONFIG_NLS_UTF8 is not set
-
-#
-# Distributed Lock Manager
-#
 # CONFIG_DLM is not set
 # CONFIG_UCC_SLOW is not set
 
@@ -1205,23 +1197,22 @@ CONFIG_PLIST=y
 CONFIG_HAS_IOMEM=y
 CONFIG_HAS_IOPORT=y
 CONFIG_HAS_DMA=y
-
-#
-# Instrumentation Support
-#
-# CONFIG_PROFILING is not set
+# CONFIG_INSTRUMENTATION is not set
 
 #
 # 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_DEBUG_BUGVERBOSE is not set
+# CONFIG_SAMPLES is not set
 # CONFIG_PPC_EARLY_DEBUG is not set
 
 #
@@ -1229,6 +1220,7 @@ CONFIG_ENABLE_MUST_CHECK=y
 #
 # 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
@@ -1248,6 +1240,7 @@ CONFIG_CRYPTO_MD5=y
 CONFIG_CRYPTO_CBC=y
 CONFIG_CRYPTO_PCBC=m
 # 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
@@ -1261,9 +1254,12 @@ CONFIG_CRYPTO_DES=y
 # 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
index 22b95462c9138c1726448ad21ec60e60b69cfe3e..67cb09cc3ace2078ead27b5b55fa211c13a9d583 100644 (file)
@@ -1,7 +1,7 @@
 #
 # Automatically generated make config: don't edit
-# Linux kernel version: 2.6.23-rc4
-# Tue Aug 28 21:24:41 2007
+# Linux kernel version: 2.6.24-rc4
+# Thu Dec  6 16:48:39 2007
 #
 # CONFIG_PPC64 is not set
 
@@ -21,8 +21,13 @@ 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_IRQ_PER_CPU=y
 CONFIG_RWSEM_XCHGADD_ALGORITHM=y
@@ -62,9 +67,12 @@ CONFIG_SYSVIPC_SYSCTL=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 is not set
 CONFIG_SYSFS_DEPRECATED=y
 # CONFIG_RELAY is not set
 CONFIG_BLK_DEV_INITRD=y
@@ -83,7 +91,6 @@ 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
@@ -123,7 +130,6 @@ CONFIG_DEFAULT_IOSCHED="anticipatory"
 # Platform support
 #
 # CONFIG_PPC_MULTIPLATFORM is not set
-# CONFIG_EMBEDDED6xx is not set
 # CONFIG_PPC_82xx is not set
 CONFIG_PPC_83xx=y
 # CONFIG_PPC_86xx is not set
@@ -156,6 +162,10 @@ CONFIG_MPC834x=y
 # 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
@@ -176,6 +186,7 @@ CONFIG_FLATMEM_MANUAL=y
 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
@@ -184,6 +195,8 @@ CONFIG_VIRT_TO_BUS=y
 CONFIG_PROC_DEVICETREE=y
 # CONFIG_CMDLINE_BOOL is not set
 # CONFIG_PM is not set
+CONFIG_SUSPEND_UP_POSSIBLE=y
+CONFIG_HIBERNATION_UP_POSSIBLE=y
 CONFIG_SECCOMP=y
 CONFIG_WANT_DEVICE_TREE=y
 CONFIG_DEVICE_TREE=""
@@ -202,10 +215,7 @@ CONFIG_PCI_SYSCALL=y
 # CONFIG_PCIEPORTBUS is not set
 CONFIG_ARCH_SUPPORTS_MSI=y
 # CONFIG_PCI_MSI is not set
-
-#
-# PCCARD (PCMCIA/CardBus) support
-#
+CONFIG_PCI_LEGACY=y
 # CONFIG_PCCARD is not set
 # CONFIG_HOTPLUG_PCI is not set
 
@@ -220,7 +230,7 @@ CONFIG_ARCH_SUPPORTS_MSI=y
 CONFIG_HIGHMEM_START=0xfe000000
 CONFIG_LOWMEM_SIZE=0x30000000
 CONFIG_KERNEL_START=0xc0000000
-CONFIG_TASK_SIZE=0x80000000
+CONFIG_TASK_SIZE=0xc0000000
 CONFIG_BOOT_LOAD=0x00800000
 
 #
@@ -260,6 +270,7 @@ CONFIG_SYN_COOKIES=y
 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
@@ -285,10 +296,6 @@ CONFIG_DEFAULT_TCP_CONG="cubic"
 # CONFIG_LAPB is not set
 # CONFIG_ECONET is not set
 # CONFIG_WAN_ROUTER is not set
-
-#
-# QoS and/or fair queueing
-#
 # CONFIG_NET_SCHED is not set
 
 #
@@ -317,6 +324,7 @@ CONFIG_DEFAULT_TCP_CONG="cubic"
 #
 # Generic Driver Options
 #
+CONFIG_UEVENT_HELPER_PATH="/sbin/hotplug"
 CONFIG_STANDALONE=y
 CONFIG_PREVENT_FIRMWARE_BUILD=y
 # CONFIG_FW_LOADER is not set
@@ -339,6 +347,7 @@ CONFIG_MTD_CHAR=y
 # 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
@@ -374,6 +383,7 @@ 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
 
 #
@@ -413,6 +423,7 @@ 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
@@ -462,6 +473,7 @@ 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
@@ -473,6 +485,7 @@ CONFIG_SCSI_LOWLEVEL=y
 # 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
@@ -499,14 +512,7 @@ CONFIG_SCSI_LOWLEVEL=y
 # CONFIG_SCSI_SRP is not set
 # CONFIG_ATA is not set
 # CONFIG_MD is not set
-
-#
-# Fusion MPT device support
-#
 # CONFIG_FUSION is not set
-# CONFIG_FUSION_SPI is not set
-# CONFIG_FUSION_FC is not set
-# CONFIG_FUSION_SAS is not set
 
 #
 # IEEE 1394 (FireWire) support
@@ -522,6 +528,8 @@ CONFIG_NETDEVICES=y
 # 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=y
 
@@ -538,11 +546,13 @@ CONFIG_CICADA_PHY=y
 # CONFIG_BROADCOM_PHY is not set
 # CONFIG_ICPLUS_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_NS83820 is not set
 # CONFIG_HAMACHI is not set
 # CONFIG_YELLOWFIN is not set
@@ -550,6 +560,7 @@ CONFIG_NETDEV_1000=y
 # 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
@@ -560,11 +571,14 @@ CONFIG_GFAR_NAPI=y
 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
 
 #
@@ -572,6 +586,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_FDDI is not set
 # CONFIG_HIPPI is not set
@@ -624,27 +647,11 @@ CONFIG_UNIX98_PTYS=y
 CONFIG_LEGACY_PTYS=y
 CONFIG_LEGACY_PTY_COUNT=256
 # CONFIG_IPMI_HANDLER 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
 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_AGP is not set
-# CONFIG_DRM is not set
 # CONFIG_RAW_DRIVER is not set
 # CONFIG_TCG_TPM is not set
 CONFIG_DEVPORT=y
@@ -682,6 +689,7 @@ CONFIG_I2C_MPC=y
 # 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
@@ -725,6 +733,31 @@ CONFIG_SPI_MPC83xx=y
 # CONFIG_W1 is not set
 # CONFIG_POWER_SUPPLY is not set
 # CONFIG_HWMON 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
@@ -737,20 +770,22 @@ CONFIG_SPI_MPC83xx=y
 # 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
-# CONFIG_VGASTATE is not set
-CONFIG_VIDEO_OUTPUT_CONTROL=m
-# CONFIG_FB is not set
-# CONFIG_FB_IBM_GXT4500 is not set
 
 #
 # Sound
@@ -760,14 +795,101 @@ 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
+CONFIG_USB=y
+# CONFIG_USB_DEBUG 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_SPLIT_ISO is not set
 CONFIG_USB_EHCI_ROOT_HUB_TT=y
+# CONFIG_USB_EHCI_TT_NEWSCHED is not set
 CONFIG_USB_EHCI_FSL=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
+#
+
+#
+# USB Serial Converter support
+#
+# 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
+
+#
+# USB DSL modem support
+#
+
 #
 # USB Gadget Support
 #
@@ -795,6 +917,7 @@ CONFIG_RTC_INTF_DEV_UIE_EMUL=y
 # 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
@@ -825,21 +948,6 @@ CONFIG_RTC_DRV_DS1307=y
 # on-CPU RTC drivers
 #
 
-#
-# DMA Engine support
-#
-CONFIG_DMA_ENGINE=y
-
-#
-# DMA Clients
-#
-CONFIG_NET_DMA=y
-
-#
-# DMA Devices
-#
-CONFIG_INTEL_IOATDMA=y
-
 #
 # Userspace I/O
 #
@@ -857,7 +965,6 @@ CONFIG_EXT3_FS_XATTR=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 is not set
 # CONFIG_JFS_FS is not set
@@ -901,7 +1008,6 @@ CONFIG_SYSFS=y
 CONFIG_TMPFS=y
 # CONFIG_TMPFS_POSIX_ACL is not set
 # CONFIG_HUGETLB_PAGE is not set
-CONFIG_RAMFS=y
 # CONFIG_CONFIGFS_FS is not set
 
 #
@@ -921,10 +1027,7 @@ CONFIG_RAMFS=y
 # CONFIG_QNX4FS_FS is not set
 # CONFIG_SYSV_FS is not set
 # CONFIG_UFS_FS is not set
-
-#
-# Network File Systems
-#
+CONFIG_NETWORK_FILESYSTEMS=y
 CONFIG_NFS_FS=y
 CONFIG_NFS_V3=y
 # CONFIG_NFS_V3_ACL is not set
@@ -967,10 +1070,6 @@ CONFIG_MSDOS_PARTITION=y
 # CONFIG_KARMA_PARTITION is not set
 # CONFIG_EFI_PARTITION is not set
 # CONFIG_SYSV68_PARTITION is not set
-
-#
-# Native Language Support
-#
 CONFIG_NLS=y
 CONFIG_NLS_DEFAULT="iso8859-1"
 # CONFIG_NLS_CODEPAGE_437 is not set
@@ -1011,10 +1110,6 @@ CONFIG_NLS_DEFAULT="iso8859-1"
 # CONFIG_NLS_KOI8_R is not set
 # CONFIG_NLS_KOI8_U is not set
 # CONFIG_NLS_UTF8 is not set
-
-#
-# Distributed Lock Manager
-#
 # CONFIG_DLM is not set
 # CONFIG_UCC_SLOW is not set
 
@@ -1032,23 +1127,22 @@ CONFIG_PLIST=y
 CONFIG_HAS_IOMEM=y
 CONFIG_HAS_IOPORT=y
 CONFIG_HAS_DMA=y
-
-#
-# Instrumentation Support
-#
-# CONFIG_PROFILING is not set
+# CONFIG_INSTRUMENTATION is not set
 
 #
 # 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_DEBUG_BUGVERBOSE is not set
+# CONFIG_SAMPLES is not set
 # CONFIG_PPC_EARLY_DEBUG is not set
 
 #
@@ -1056,6 +1150,7 @@ CONFIG_ENABLE_MUST_CHECK=y
 #
 # 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
@@ -1075,6 +1170,7 @@ CONFIG_CRYPTO_MD5=y
 CONFIG_CRYPTO_CBC=y
 CONFIG_CRYPTO_PCBC=m
 # 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
@@ -1088,9 +1184,12 @@ CONFIG_CRYPTO_DES=y
 # 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
index e59a88e954865597775bcfcd0bf49fa846dea700..217539f3ecefef79653208add1406bd6542dbd0b 100644 (file)
@@ -1,7 +1,7 @@
 #
 # Automatically generated make config: don't edit
-# Linux kernel version: 2.6.23-rc4
-# Tue Aug 28 21:24:41 2007
+# Linux kernel version: 2.6.24-rc4
+# Thu Dec  6 16:48:41 2007
 #
 # CONFIG_PPC64 is not set
 
@@ -21,8 +21,13 @@ 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_IRQ_PER_CPU=y
 CONFIG_RWSEM_XCHGADD_ALGORITHM=y
@@ -62,9 +67,12 @@ CONFIG_SYSVIPC_SYSCTL=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 is not set
 CONFIG_SYSFS_DEPRECATED=y
 # CONFIG_RELAY is not set
 CONFIG_BLK_DEV_INITRD=y
@@ -83,7 +91,6 @@ 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
@@ -123,7 +130,6 @@ CONFIG_DEFAULT_IOSCHED="anticipatory"
 # Platform support
 #
 # CONFIG_PPC_MULTIPLATFORM is not set
-# CONFIG_EMBEDDED6xx is not set
 # CONFIG_PPC_82xx is not set
 CONFIG_PPC_83xx=y
 # CONFIG_PPC_86xx is not set
@@ -156,6 +162,10 @@ CONFIG_MPC834x=y
 # 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
@@ -176,6 +186,7 @@ CONFIG_FLATMEM_MANUAL=y
 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
@@ -184,6 +195,8 @@ CONFIG_VIRT_TO_BUS=y
 CONFIG_PROC_DEVICETREE=y
 # CONFIG_CMDLINE_BOOL is not set
 # CONFIG_PM is not set
+CONFIG_SUSPEND_UP_POSSIBLE=y
+CONFIG_HIBERNATION_UP_POSSIBLE=y
 CONFIG_SECCOMP=y
 CONFIG_WANT_DEVICE_TREE=y
 CONFIG_DEVICE_TREE=""
@@ -202,10 +215,7 @@ CONFIG_PCI_SYSCALL=y
 # CONFIG_PCIEPORTBUS is not set
 CONFIG_ARCH_SUPPORTS_MSI=y
 # CONFIG_PCI_MSI is not set
-
-#
-# PCCARD (PCMCIA/CardBus) support
-#
+CONFIG_PCI_LEGACY=y
 # CONFIG_PCCARD is not set
 # CONFIG_HOTPLUG_PCI is not set
 
@@ -220,7 +230,7 @@ CONFIG_ARCH_SUPPORTS_MSI=y
 CONFIG_HIGHMEM_START=0xfe000000
 CONFIG_LOWMEM_SIZE=0x30000000
 CONFIG_KERNEL_START=0xc0000000
-CONFIG_TASK_SIZE=0x80000000
+CONFIG_TASK_SIZE=0xc0000000
 CONFIG_BOOT_LOAD=0x00800000
 
 #
@@ -260,6 +270,7 @@ CONFIG_SYN_COOKIES=y
 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
@@ -285,10 +296,6 @@ CONFIG_DEFAULT_TCP_CONG="cubic"
 # CONFIG_LAPB is not set
 # CONFIG_ECONET is not set
 # CONFIG_WAN_ROUTER is not set
-
-#
-# QoS and/or fair queueing
-#
 # CONFIG_NET_SCHED is not set
 
 #
@@ -317,6 +324,7 @@ CONFIG_DEFAULT_TCP_CONG="cubic"
 #
 # Generic Driver Options
 #
+CONFIG_UEVENT_HELPER_PATH="/sbin/hotplug"
 CONFIG_STANDALONE=y
 CONFIG_PREVENT_FIRMWARE_BUILD=y
 # CONFIG_FW_LOADER is not set
@@ -358,10 +366,6 @@ CONFIG_MISC_DEVICES=y
 # CONFIG_SCSI_NETLINK is not set
 # CONFIG_ATA is not set
 # CONFIG_MD is not set
-
-#
-# Fusion MPT device support
-#
 # CONFIG_FUSION is not set
 
 #
@@ -378,6 +382,8 @@ CONFIG_NETDEVICES=y
 # 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=y
 
@@ -394,6 +400,7 @@ CONFIG_MARVELL_PHY=y
 # CONFIG_BROADCOM_PHY is not set
 # CONFIG_ICPLUS_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
@@ -402,13 +409,16 @@ CONFIG_MII=y
 # 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_DGRS is not set
 # CONFIG_EEPRO100 is not set
 CONFIG_E100=y
 # CONFIG_FEALNX is not set
@@ -426,6 +436,7 @@ 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
@@ -433,6 +444,7 @@ CONFIG_NETDEV_1000=y
 # 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
@@ -443,11 +455,14 @@ CONFIG_GIANFAR=y
 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
 
 #
@@ -479,7 +494,6 @@ CONFIG_INPUT=y
 #
 # CONFIG_INPUT_MOUSEDEV is not set
 # CONFIG_INPUT_JOYDEV is not set
-# CONFIG_INPUT_TSDEV is not set
 # CONFIG_INPUT_EVDEV is not set
 # CONFIG_INPUT_EVBUG is not set
 
@@ -527,28 +541,12 @@ CONFIG_UNIX98_PTYS=y
 CONFIG_LEGACY_PTYS=y
 CONFIG_LEGACY_PTY_COUNT=256
 # CONFIG_IPMI_HANDLER 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
 # 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_AGP is not set
-# CONFIG_DRM is not set
 # CONFIG_RAW_DRIVER is not set
 # CONFIG_TCG_TPM is not set
 CONFIG_DEVPORT=y
@@ -617,8 +615,6 @@ CONFIG_I2C_MPC=y
 # CONFIG_POWER_SUPPLY is not set
 CONFIG_HWMON=y
 # CONFIG_HWMON_VID is not set
-# CONFIG_SENSORS_ABITUGURU is not set
-# CONFIG_SENSORS_ABITUGURU3 is not set
 # CONFIG_SENSORS_AD7418 is not set
 # CONFIG_SENSORS_ADM1021 is not set
 # CONFIG_SENSORS_ADM1025 is not set
@@ -626,12 +622,13 @@ CONFIG_HWMON=y
 # CONFIG_SENSORS_ADM1029 is not set
 # CONFIG_SENSORS_ADM1031 is not set
 # CONFIG_SENSORS_ADM9240 is not set
-# CONFIG_SENSORS_ASB100 is not set
+# CONFIG_SENSORS_ADT7470 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_FSCHER is not set
-# CONFIG_SENSORS_FSCPOS 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
@@ -667,6 +664,26 @@ CONFIG_HWMON=y
 # CONFIG_SENSORS_W83627HF is not set
 # CONFIG_SENSORS_W83627EHF is not set
 # CONFIG_HWMON_DEBUG_CHIP 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
@@ -683,16 +700,17 @@ 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
-# CONFIG_VGASTATE is not set
-CONFIG_VIDEO_OUTPUT_CONTROL=m
-# CONFIG_FB is not set
-# CONFIG_FB_IBM_GXT4500 is not set
 
 #
 # Sound
@@ -701,6 +719,7 @@ CONFIG_VIDEO_OUTPUT_CONTROL=m
 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
@@ -721,19 +740,52 @@ CONFIG_USB_EHCI_FSL=y
 # CONFIG_NEW_LEDS is not set
 # CONFIG_INFINIBAND is not set
 # CONFIG_EDAC is not set
-# CONFIG_RTC_CLASS 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
 
 #
-# DMA Engine support
+# SPI RTC drivers
 #
-# CONFIG_DMA_ENGINE is not set
 
 #
-# DMA Clients
+# Platform RTC drivers
 #
+# CONFIG_RTC_DRV_CMOS is not set
+# CONFIG_RTC_DRV_DS1553 is not set
+# CONFIG_RTC_DRV_STK17TA8 is not set
+# CONFIG_RTC_DRV_DS1742 is not set
+# CONFIG_RTC_DRV_M48T86 is not set
+# CONFIG_RTC_DRV_M48T59 is not set
+# CONFIG_RTC_DRV_V3020 is not set
 
 #
-# DMA Devices
+# on-CPU RTC drivers
 #
 
 #
@@ -753,7 +805,6 @@ CONFIG_EXT3_FS_XATTR=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 is not set
 # CONFIG_JFS_FS is not set
@@ -794,7 +845,6 @@ CONFIG_SYSFS=y
 CONFIG_TMPFS=y
 # CONFIG_TMPFS_POSIX_ACL is not set
 # CONFIG_HUGETLB_PAGE is not set
-CONFIG_RAMFS=y
 # CONFIG_CONFIGFS_FS is not set
 
 #
@@ -813,10 +863,7 @@ CONFIG_RAMFS=y
 # CONFIG_QNX4FS_FS is not set
 # CONFIG_SYSV_FS is not set
 # CONFIG_UFS_FS is not set
-
-#
-# Network File Systems
-#
+CONFIG_NETWORK_FILESYSTEMS=y
 CONFIG_NFS_FS=y
 CONFIG_NFS_V3=y
 # CONFIG_NFS_V3_ACL is not set
@@ -855,15 +902,7 @@ CONFIG_PARTITION_ADVANCED=y
 # CONFIG_KARMA_PARTITION is not set
 # CONFIG_EFI_PARTITION is not set
 # CONFIG_SYSV68_PARTITION is not set
-
-#
-# Native Language Support
-#
 # CONFIG_NLS is not set
-
-#
-# Distributed Lock Manager
-#
 # CONFIG_DLM is not set
 # CONFIG_UCC_SLOW is not set
 
@@ -881,23 +920,22 @@ CONFIG_PLIST=y
 CONFIG_HAS_IOMEM=y
 CONFIG_HAS_IOPORT=y
 CONFIG_HAS_DMA=y
-
-#
-# Instrumentation Support
-#
-# CONFIG_PROFILING is not set
+# CONFIG_INSTRUMENTATION is not set
 
 #
 # 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_DEBUG_BUGVERBOSE is not set
+# CONFIG_SAMPLES is not set
 # CONFIG_PPC_EARLY_DEBUG is not set
 
 #
@@ -905,6 +943,7 @@ CONFIG_ENABLE_MUST_CHECK=y
 #
 # 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
@@ -924,6 +963,7 @@ 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_CRYPTD is not set
 CONFIG_CRYPTO_DES=y
 # CONFIG_CRYPTO_FCRYPT is not set
@@ -937,9 +977,12 @@ CONFIG_CRYPTO_DES=y
 # 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
index 75657528518e7339ab9bd72aeefff5120692f838..c44fc56263e234692c03dd1e77ed51d98d8a5d1d 100644 (file)
@@ -1,7 +1,7 @@
 #
 # Automatically generated make config: don't edit
-# Linux kernel version: 2.6.23-rc4
-# Tue Aug 28 21:24:42 2007
+# Linux kernel version: 2.6.24-rc4
+# Thu Dec  6 16:48:43 2007
 #
 # CONFIG_PPC64 is not set
 
@@ -21,8 +21,13 @@ 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_IRQ_PER_CPU=y
 CONFIG_RWSEM_XCHGADD_ALGORITHM=y
@@ -62,9 +67,12 @@ CONFIG_SYSVIPC_SYSCTL=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 is not set
 CONFIG_SYSFS_DEPRECATED=y
 # CONFIG_RELAY is not set
 CONFIG_BLK_DEV_INITRD=y
@@ -83,7 +91,6 @@ 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
@@ -123,7 +130,6 @@ CONFIG_DEFAULT_IOSCHED="anticipatory"
 # Platform support
 #
 # CONFIG_PPC_MULTIPLATFORM is not set
-# CONFIG_EMBEDDED6xx is not set
 # CONFIG_PPC_82xx is not set
 CONFIG_PPC_83xx=y
 # CONFIG_PPC_86xx is not set
@@ -157,6 +163,10 @@ CONFIG_QUICC_ENGINE=y
 # 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
@@ -177,6 +187,7 @@ CONFIG_FLATMEM_MANUAL=y
 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
@@ -185,6 +196,8 @@ CONFIG_VIRT_TO_BUS=y
 CONFIG_PROC_DEVICETREE=y
 # CONFIG_CMDLINE_BOOL is not set
 # CONFIG_PM is not set
+CONFIG_SUSPEND_UP_POSSIBLE=y
+CONFIG_HIBERNATION_UP_POSSIBLE=y
 CONFIG_SECCOMP=y
 CONFIG_WANT_DEVICE_TREE=y
 CONFIG_DEVICE_TREE=""
@@ -203,10 +216,7 @@ CONFIG_PCI_SYSCALL=y
 # CONFIG_PCIEPORTBUS is not set
 CONFIG_ARCH_SUPPORTS_MSI=y
 # CONFIG_PCI_MSI is not set
-
-#
-# PCCARD (PCMCIA/CardBus) support
-#
+CONFIG_PCI_LEGACY=y
 # CONFIG_PCCARD is not set
 # CONFIG_HOTPLUG_PCI is not set
 
@@ -221,7 +231,7 @@ CONFIG_ARCH_SUPPORTS_MSI=y
 CONFIG_HIGHMEM_START=0xfe000000
 CONFIG_LOWMEM_SIZE=0x30000000
 CONFIG_KERNEL_START=0xc0000000
-CONFIG_TASK_SIZE=0x80000000
+CONFIG_TASK_SIZE=0xc0000000
 CONFIG_BOOT_LOAD=0x00800000
 
 #
@@ -261,6 +271,7 @@ CONFIG_SYN_COOKIES=y
 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
@@ -286,10 +297,6 @@ CONFIG_DEFAULT_TCP_CONG="cubic"
 # CONFIG_LAPB is not set
 # CONFIG_ECONET is not set
 # CONFIG_WAN_ROUTER is not set
-
-#
-# QoS and/or fair queueing
-#
 # CONFIG_NET_SCHED is not set
 
 #
@@ -318,6 +325,7 @@ CONFIG_DEFAULT_TCP_CONG="cubic"
 #
 # Generic Driver Options
 #
+CONFIG_UEVENT_HELPER_PATH="/sbin/hotplug"
 CONFIG_STANDALONE=y
 CONFIG_PREVENT_FIRMWARE_BUILD=y
 # CONFIG_FW_LOADER is not set
@@ -386,6 +394,7 @@ CONFIG_SCSI_WAIT_SCAN=m
 # 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
@@ -397,6 +406,7 @@ CONFIG_SCSI_LOWLEVEL=y
 # 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
@@ -423,14 +433,7 @@ CONFIG_SCSI_LOWLEVEL=y
 # CONFIG_SCSI_SRP is not set
 # CONFIG_ATA is not set
 # CONFIG_MD is not set
-
-#
-# Fusion MPT device support
-#
 # CONFIG_FUSION is not set
-# CONFIG_FUSION_SPI is not set
-# CONFIG_FUSION_FC is not set
-# CONFIG_FUSION_SAS is not set
 
 #
 # IEEE 1394 (FireWire) support
@@ -446,6 +449,8 @@ CONFIG_NETDEVICES=y
 # 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=y
 
@@ -462,6 +467,7 @@ CONFIG_MARVELL_PHY=y
 # CONFIG_BROADCOM_PHY is not set
 # CONFIG_ICPLUS_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
@@ -470,11 +476,17 @@ CONFIG_MII=y
 # 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_NS83820 is not set
 # CONFIG_HAMACHI is not set
 # CONFIG_YELLOWFIN is not set
@@ -482,6 +494,7 @@ CONFIG_NETDEV_1000=y
 # 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
@@ -496,11 +509,14 @@ CONFIG_UCC_GETH=y
 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
 
 #
@@ -533,7 +549,6 @@ CONFIG_INPUT=y
 #
 # CONFIG_INPUT_MOUSEDEV is not set
 # CONFIG_INPUT_JOYDEV is not set
-# CONFIG_INPUT_TSDEV is not set
 # CONFIG_INPUT_EVDEV is not set
 # CONFIG_INPUT_EVBUG is not set
 
@@ -581,28 +596,12 @@ CONFIG_UNIX98_PTYS=y
 CONFIG_LEGACY_PTYS=y
 CONFIG_LEGACY_PTY_COUNT=256
 # CONFIG_IPMI_HANDLER 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
 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_AGP is not set
-# CONFIG_DRM is not set
 # CONFIG_RAW_DRIVER is not set
 # CONFIG_TCG_TPM is not set
 CONFIG_DEVPORT=y
@@ -671,8 +670,6 @@ CONFIG_I2C_MPC=y
 # CONFIG_POWER_SUPPLY is not set
 CONFIG_HWMON=y
 # CONFIG_HWMON_VID is not set
-# CONFIG_SENSORS_ABITUGURU is not set
-# CONFIG_SENSORS_ABITUGURU3 is not set
 # CONFIG_SENSORS_AD7418 is not set
 # CONFIG_SENSORS_ADM1021 is not set
 # CONFIG_SENSORS_ADM1025 is not set
@@ -680,12 +677,13 @@ CONFIG_HWMON=y
 # CONFIG_SENSORS_ADM1029 is not set
 # CONFIG_SENSORS_ADM1031 is not set
 # CONFIG_SENSORS_ADM9240 is not set
-# CONFIG_SENSORS_ASB100 is not set
+# CONFIG_SENSORS_ADT7470 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_FSCHER is not set
-# CONFIG_SENSORS_FSCPOS 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
@@ -721,6 +719,26 @@ CONFIG_HWMON=y
 # CONFIG_SENSORS_W83627HF is not set
 # CONFIG_SENSORS_W83627EHF is not set
 # CONFIG_HWMON_DEBUG_CHIP 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
@@ -737,16 +755,17 @@ 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
-# CONFIG_VGASTATE is not set
-CONFIG_VIDEO_OUTPUT_CONTROL=m
-# CONFIG_FB is not set
-# CONFIG_FB_IBM_GXT4500 is not set
 
 #
 # Sound
@@ -755,6 +774,7 @@ CONFIG_VIDEO_OUTPUT_CONTROL=m
 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
@@ -773,19 +793,52 @@ CONFIG_USB_ARCH_HAS_EHCI=y
 # CONFIG_NEW_LEDS is not set
 # CONFIG_INFINIBAND is not set
 # CONFIG_EDAC is not set
-# CONFIG_RTC_CLASS 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
 
 #
-# DMA Engine support
+# RTC interfaces
 #
-# CONFIG_DMA_ENGINE is not set
+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
 
 #
-# DMA Clients
+# 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
+
 #
+# SPI RTC drivers
+#
+
+#
+# Platform RTC drivers
+#
+# CONFIG_RTC_DRV_CMOS is not set
+# CONFIG_RTC_DRV_DS1553 is not set
+# CONFIG_RTC_DRV_STK17TA8 is not set
+# CONFIG_RTC_DRV_DS1742 is not set
+# CONFIG_RTC_DRV_M48T86 is not set
+# CONFIG_RTC_DRV_M48T59 is not set
+# CONFIG_RTC_DRV_V3020 is not set
 
 #
-# DMA Devices
+# on-CPU RTC drivers
 #
 
 #
@@ -805,7 +858,6 @@ CONFIG_EXT3_FS_XATTR=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 is not set
 # CONFIG_JFS_FS is not set
@@ -846,7 +898,6 @@ CONFIG_SYSFS=y
 CONFIG_TMPFS=y
 # CONFIG_TMPFS_POSIX_ACL is not set
 # CONFIG_HUGETLB_PAGE is not set
-CONFIG_RAMFS=y
 # CONFIG_CONFIGFS_FS is not set
 
 #
@@ -865,10 +916,7 @@ CONFIG_RAMFS=y
 # CONFIG_QNX4FS_FS is not set
 # CONFIG_SYSV_FS is not set
 # CONFIG_UFS_FS is not set
-
-#
-# Network File Systems
-#
+CONFIG_NETWORK_FILESYSTEMS=y
 CONFIG_NFS_FS=y
 CONFIG_NFS_V3=y
 # CONFIG_NFS_V3_ACL is not set
@@ -907,15 +955,7 @@ CONFIG_PARTITION_ADVANCED=y
 # CONFIG_KARMA_PARTITION is not set
 # CONFIG_EFI_PARTITION is not set
 # CONFIG_SYSV68_PARTITION is not set
-
-#
-# Native Language Support
-#
 # CONFIG_NLS is not set
-
-#
-# Distributed Lock Manager
-#
 # CONFIG_DLM is not set
 # CONFIG_UCC_SLOW is not set
 CONFIG_UCC_FAST=y
@@ -935,23 +975,22 @@ CONFIG_PLIST=y
 CONFIG_HAS_IOMEM=y
 CONFIG_HAS_IOPORT=y
 CONFIG_HAS_DMA=y
-
-#
-# Instrumentation Support
-#
-# CONFIG_PROFILING is not set
+# CONFIG_INSTRUMENTATION is not set
 
 #
 # 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_DEBUG_BUGVERBOSE is not set
+# CONFIG_SAMPLES is not set
 # CONFIG_PPC_EARLY_DEBUG is not set
 
 #
@@ -959,6 +998,7 @@ CONFIG_ENABLE_MUST_CHECK=y
 #
 # 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
@@ -978,6 +1018,7 @@ 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_CRYPTD is not set
 CONFIG_CRYPTO_DES=y
 # CONFIG_CRYPTO_FCRYPT is not set
@@ -991,9 +1032,13 @@ CONFIG_CRYPTO_DES=y
 # 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
+CONFIG_PPC_LIB_RHEAP=y
index b953b2c514534b8efdfa5be95d014d5d8275de2b..3791e29e7d062d88c012408a3cf87d2ab802e962 100644 (file)
@@ -1,7 +1,7 @@
 #
 # Automatically generated make config: don't edit
-# Linux kernel version: 2.6.23-rc4
-# Tue Aug 28 21:24:42 2007
+# Linux kernel version: 2.6.24-rc4
+# Thu Dec  6 16:48:44 2007
 #
 # CONFIG_PPC64 is not set
 
@@ -22,8 +22,13 @@ CONFIG_FSL_BOOKE=y
 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_IRQ_PER_CPU=y
 CONFIG_RWSEM_XCHGADD_ALGORITHM=y
@@ -63,9 +68,12 @@ CONFIG_SYSVIPC_SYSCTL=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 is not set
 CONFIG_SYSFS_DEPRECATED=y
 # CONFIG_RELAY is not set
 CONFIG_BLK_DEV_INITRD=y
@@ -86,7 +94,6 @@ 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
@@ -129,7 +136,7 @@ CONFIG_MPC8540_ADS=y
 # CONFIG_MPC8560_ADS is not set
 # CONFIG_MPC85xx_CDS is not set
 # CONFIG_MPC85xx_MDS is not set
-# CONFIG_MPC8544_DS is not set
+# CONFIG_MPC85xx_DS is not set
 CONFIG_MPC8540=y
 CONFIG_MPC85xx=y
 CONFIG_MPIC=y
@@ -149,6 +156,10 @@ CONFIG_MPIC=y
 # 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
@@ -170,6 +181,7 @@ CONFIG_FLATMEM_MANUAL=y
 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
@@ -178,6 +190,8 @@ CONFIG_VIRT_TO_BUS=y
 CONFIG_PROC_DEVICETREE=y
 # CONFIG_CMDLINE_BOOL is not set
 # CONFIG_PM is not set
+CONFIG_SUSPEND_UP_POSSIBLE=y
+CONFIG_HIBERNATION_UP_POSSIBLE=y
 # CONFIG_SECCOMP is not set
 CONFIG_WANT_DEVICE_TREE=y
 CONFIG_DEVICE_TREE=""
@@ -193,10 +207,6 @@ CONFIG_FSL_SOC=y
 # CONFIG_PCI_DOMAINS is not set
 # CONFIG_PCI_SYSCALL is not set
 # CONFIG_ARCH_SUPPORTS_MSI is not set
-
-#
-# PCCARD (PCMCIA/CardBus) support
-#
 # CONFIG_PCCARD is not set
 
 #
@@ -210,7 +220,7 @@ CONFIG_FSL_SOC=y
 CONFIG_HIGHMEM_START=0xfe000000
 CONFIG_LOWMEM_SIZE=0x30000000
 CONFIG_KERNEL_START=0xc0000000
-CONFIG_TASK_SIZE=0x80000000
+CONFIG_TASK_SIZE=0xc0000000
 CONFIG_BOOT_LOAD=0x00800000
 
 #
@@ -250,6 +260,7 @@ CONFIG_SYN_COOKIES=y
 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
@@ -275,10 +286,6 @@ CONFIG_DEFAULT_TCP_CONG="cubic"
 # CONFIG_LAPB is not set
 # CONFIG_ECONET is not set
 # CONFIG_WAN_ROUTER is not set
-
-#
-# QoS and/or fair queueing
-#
 # CONFIG_NET_SCHED is not set
 
 #
@@ -307,6 +314,7 @@ CONFIG_DEFAULT_TCP_CONG="cubic"
 #
 # Generic Driver Options
 #
+CONFIG_UEVENT_HELPER_PATH="/sbin/hotplug"
 CONFIG_STANDALONE=y
 CONFIG_PREVENT_FIRMWARE_BUILD=y
 # CONFIG_FW_LOADER is not set
@@ -350,6 +358,7 @@ CONFIG_NETDEVICES=y
 # CONFIG_MACVLAN is not set
 # CONFIG_EQUALIZER is not set
 # CONFIG_TUN is not set
+# CONFIG_VETH is not set
 CONFIG_PHYLIB=y
 
 #
@@ -365,8 +374,14 @@ CONFIG_PHYLIB=y
 # CONFIG_BROADCOM_PHY is not set
 # CONFIG_ICPLUS_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_GIANFAR=y
 CONFIG_GFAR_NAPI=y
@@ -399,7 +414,6 @@ CONFIG_INPUT=y
 #
 # CONFIG_INPUT_MOUSEDEV is not set
 # CONFIG_INPUT_JOYDEV is not set
-# CONFIG_INPUT_TSDEV is not set
 # CONFIG_INPUT_EVDEV is not set
 # CONFIG_INPUT_EVBUG is not set
 
@@ -446,7 +460,6 @@ CONFIG_UNIX98_PTYS=y
 CONFIG_LEGACY_PTYS=y
 CONFIG_LEGACY_PTY_COUNT=256
 # CONFIG_IPMI_HANDLER is not set
-# CONFIG_WATCHDOG is not set
 # CONFIG_HW_RANDOM is not set
 # CONFIG_NVRAM is not set
 CONFIG_GEN_RTC=y
@@ -465,9 +478,8 @@ CONFIG_GEN_RTC=y
 # CONFIG_POWER_SUPPLY is not set
 CONFIG_HWMON=y
 # CONFIG_HWMON_VID is not set
-# CONFIG_SENSORS_ABITUGURU is not set
-# CONFIG_SENSORS_ABITUGURU3 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
@@ -477,6 +489,13 @@ CONFIG_HWMON=y
 # 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
@@ -493,16 +512,15 @@ 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
-# CONFIG_VGASTATE is not set
-CONFIG_VIDEO_OUTPUT_CONTROL=y
-# CONFIG_FB is not set
-# CONFIG_FB_IBM_GXT4500 is not set
 
 #
 # Sound
@@ -511,6 +529,7 @@ CONFIG_VIDEO_OUTPUT_CONTROL=y
 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
@@ -529,19 +548,6 @@ CONFIG_USB_SUPPORT=y
 # CONFIG_EDAC is not set
 # CONFIG_RTC_CLASS is not set
 
-#
-# DMA Engine support
-#
-# CONFIG_DMA_ENGINE is not set
-
-#
-# DMA Clients
-#
-
-#
-# DMA Devices
-#
-
 #
 # Userspace I/O
 #
@@ -559,7 +565,6 @@ CONFIG_EXT3_FS_XATTR=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 is not set
 # CONFIG_JFS_FS is not set
@@ -600,7 +605,6 @@ CONFIG_SYSFS=y
 CONFIG_TMPFS=y
 # CONFIG_TMPFS_POSIX_ACL is not set
 # CONFIG_HUGETLB_PAGE is not set
-CONFIG_RAMFS=y
 # CONFIG_CONFIGFS_FS is not set
 
 #
@@ -619,10 +623,7 @@ CONFIG_RAMFS=y
 # CONFIG_QNX4FS_FS is not set
 # CONFIG_SYSV_FS is not set
 # CONFIG_UFS_FS is not set
-
-#
-# Network File Systems
-#
+CONFIG_NETWORK_FILESYSTEMS=y
 CONFIG_NFS_FS=y
 # CONFIG_NFS_V3 is not set
 # CONFIG_NFS_V4 is not set
@@ -658,15 +659,7 @@ CONFIG_PARTITION_ADVANCED=y
 # CONFIG_KARMA_PARTITION is not set
 # CONFIG_EFI_PARTITION is not set
 # CONFIG_SYSV68_PARTITION is not set
-
-#
-# Native Language Support
-#
 # CONFIG_NLS is not set
-
-#
-# Distributed Lock Manager
-#
 # CONFIG_DLM is not set
 # CONFIG_UCC_SLOW is not set
 
@@ -684,16 +677,13 @@ CONFIG_PLIST=y
 CONFIG_HAS_IOMEM=y
 CONFIG_HAS_IOPORT=y
 CONFIG_HAS_DMA=y
-
-#
-# Instrumentation Support
-#
-# CONFIG_PROFILING is not set
+# CONFIG_INSTRUMENTATION is not set
 
 #
 # 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
@@ -717,8 +707,11 @@ CONFIG_DEBUG_MUTEXES=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_FORCED_INLINING=y
+# CONFIG_BOOT_PRINTK_DELAY 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
@@ -731,4 +724,6 @@ CONFIG_FORCED_INLINING=y
 #
 # 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
index 9a3e08bcd188e7833dc0f00f609c3baa44c23938..18623a8ee75c747c141103a56f8e1444cd096ca0 100644 (file)
@@ -1,7 +1,7 @@
 #
 # Automatically generated make config: don't edit
-# Linux kernel version: 2.6.23-rc4
-# Wed Aug 29 16:41:04 2007
+# Linux kernel version: 2.6.24-rc4
+# Thu Dec  6 16:48:46 2007
 #
 # CONFIG_PPC64 is not set
 
@@ -22,8 +22,13 @@ CONFIG_FSL_BOOKE=y
 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_IRQ_PER_CPU=y
 CONFIG_RWSEM_XCHGADD_ALGORITHM=y
@@ -64,11 +69,14 @@ CONFIG_BSD_PROCESS_ACCT=y
 # CONFIG_BSD_PROCESS_ACCT_V3 is not set
 # CONFIG_TASKSTATS is not set
 # CONFIG_USER_NS is not set
+# CONFIG_PID_NS 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_FAIR_GROUP_SCHED is not set
 CONFIG_SYSFS_DEPRECATED=y
 # CONFIG_RELAY is not set
 CONFIG_BLK_DEV_INITRD=y
@@ -89,7 +97,6 @@ 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
@@ -156,6 +163,10 @@ 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
@@ -177,6 +188,7 @@ CONFIG_FLATMEM_MANUAL=y
 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
@@ -185,6 +197,8 @@ CONFIG_VIRT_TO_BUS=y
 CONFIG_PROC_DEVICETREE=y
 # CONFIG_CMDLINE_BOOL is not set
 # CONFIG_PM is not set
+CONFIG_SUSPEND_UP_POSSIBLE=y
+CONFIG_HIBERNATION_UP_POSSIBLE=y
 CONFIG_SECCOMP=y
 CONFIG_WANT_DEVICE_TREE=y
 CONFIG_DEVICE_TREE=""
@@ -194,6 +208,7 @@ 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
@@ -203,11 +218,8 @@ 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
-
-#
-# PCCARD (PCMCIA/CardBus) support
-#
 # CONFIG_PCCARD is not set
 # CONFIG_HOTPLUG_PCI is not set
 
@@ -222,7 +234,7 @@ CONFIG_ARCH_SUPPORTS_MSI=y
 CONFIG_HIGHMEM_START=0xfe000000
 CONFIG_LOWMEM_SIZE=0x30000000
 CONFIG_KERNEL_START=0xc0000000
-CONFIG_TASK_SIZE=0x80000000
+CONFIG_TASK_SIZE=0xc0000000
 CONFIG_BOOT_LOAD=0x00800000
 
 #
@@ -271,6 +283,7 @@ 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
@@ -315,10 +328,6 @@ CONFIG_SCTP_HMAC_MD5=y
 # CONFIG_LAPB is not set
 # CONFIG_ECONET is not set
 # CONFIG_WAN_ROUTER is not set
-
-#
-# QoS and/or fair queueing
-#
 # CONFIG_NET_SCHED is not set
 
 #
@@ -348,6 +357,7 @@ CONFIG_FIB_RULES=y
 #
 # Generic Driver Options
 #
+CONFIG_UEVENT_HELPER_PATH="/sbin/hotplug"
 CONFIG_STANDALONE=y
 CONFIG_PREVENT_FIRMWARE_BUILD=y
 CONFIG_FW_LOADER=y
@@ -420,6 +430,7 @@ CONFIG_SCSI_WAIT_SCAN=m
 # 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
@@ -431,6 +442,7 @@ CONFIG_SCSI_LOWLEVEL=y
 # 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
@@ -498,6 +510,7 @@ CONFIG_PATA_ALI=y
 # 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
@@ -512,14 +525,7 @@ CONFIG_PATA_ALI=y
 # CONFIG_PATA_WINBOND is not set
 # CONFIG_PATA_PLATFORM is not set
 # CONFIG_MD is not set
-
-#
-# Fusion MPT device support
-#
 # CONFIG_FUSION is not set
-# CONFIG_FUSION_SPI is not set
-# CONFIG_FUSION_FC is not set
-# CONFIG_FUSION_SAS is not set
 
 #
 # IEEE 1394 (FireWire) support
@@ -535,6 +541,8 @@ CONFIG_DUMMY=y
 # 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=y
 
@@ -551,6 +559,7 @@ CONFIG_VITESSE_PHY=y
 # CONFIG_BROADCOM_PHY is not set
 # CONFIG_ICPLUS_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
@@ -559,11 +568,17 @@ CONFIG_MII=y
 # 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_NS83820 is not set
 # CONFIG_HAMACHI is not set
 # CONFIG_YELLOWFIN is not set
@@ -571,6 +586,7 @@ CONFIG_NETDEV_1000=y
 # 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
@@ -581,11 +597,14 @@ CONFIG_GFAR_NAPI=y
 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
 
 #
@@ -601,7 +620,6 @@ CONFIG_NETDEV_10000=y
 # CONFIG_USB_KAWETH is not set
 # CONFIG_USB_PEGASUS is not set
 # CONFIG_USB_RTL8150 is not set
-# CONFIG_USB_USBNET_MII is not set
 # CONFIG_USB_USBNET is not set
 # CONFIG_WAN is not set
 # CONFIG_FDDI is not set
@@ -628,7 +646,6 @@ CONFIG_INPUT=y
 #
 # CONFIG_INPUT_MOUSEDEV is not set
 # CONFIG_INPUT_JOYDEV is not set
-# CONFIG_INPUT_TSDEV is not set
 # CONFIG_INPUT_EVDEV is not set
 # CONFIG_INPUT_EVBUG is not set
 
@@ -688,15 +705,12 @@ CONFIG_UNIX98_PTYS=y
 CONFIG_LEGACY_PTYS=y
 CONFIG_LEGACY_PTY_COUNT=256
 # CONFIG_IPMI_HANDLER is not set
-# CONFIG_WATCHDOG is not set
 # CONFIG_HW_RANDOM is not set
 CONFIG_NVRAM=y
 CONFIG_GEN_RTC=y
 CONFIG_GEN_RTC_X=y
 # CONFIG_R3964 is not set
 # CONFIG_APPLICOM is not set
-# CONFIG_AGP is not set
-# CONFIG_DRM is not set
 # CONFIG_RAW_DRIVER is not set
 # CONFIG_TCG_TPM is not set
 CONFIG_DEVPORT=y
@@ -765,6 +779,13 @@ CONFIG_SENSORS_EEPROM=y
 # 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
@@ -859,6 +880,7 @@ CONFIG_DVB_CAPTURE_DRIVERS=y
 # 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
@@ -868,6 +890,9 @@ CONFIG_DVB_CAPTURE_DRIVERS=y
 # CONFIG_DVB_TDA827X 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
 
 #
 # Miscellaneous devices
@@ -881,16 +906,17 @@ 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
-# CONFIG_VGASTATE is not set
-CONFIG_VIDEO_OUTPUT_CONTROL=y
-# CONFIG_FB is not set
-# CONFIG_FB_IBM_GXT4500 is not set
 
 #
 # Console display driver support
@@ -1022,6 +1048,7 @@ 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
@@ -1082,6 +1109,7 @@ 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
@@ -1162,6 +1190,7 @@ CONFIG_RTC_INTF_DEV=y
 # 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
@@ -1190,19 +1219,6 @@ CONFIG_RTC_DRV_CMOS=y
 # on-CPU RTC drivers
 #
 
-#
-# DMA Engine support
-#
-# CONFIG_DMA_ENGINE is not set
-
-#
-# DMA Clients
-#
-
-#
-# DMA Devices
-#
-
 #
 # Userspace I/O
 #
@@ -1220,7 +1236,6 @@ CONFIG_EXT3_FS_XATTR=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 is not set
 # CONFIG_JFS_FS is not set
@@ -1269,7 +1284,6 @@ CONFIG_SYSFS=y
 CONFIG_TMPFS=y
 # CONFIG_TMPFS_POSIX_ACL is not set
 # CONFIG_HUGETLB_PAGE is not set
-CONFIG_RAMFS=y
 # CONFIG_CONFIGFS_FS is not set
 
 #
@@ -1292,10 +1306,7 @@ CONFIG_SYSV_FS=m
 CONFIG_UFS_FS=m
 # CONFIG_UFS_FS_WRITE is not set
 # CONFIG_UFS_DEBUG is not set
-
-#
-# Network File Systems
-#
+CONFIG_NETWORK_FILESYSTEMS=y
 CONFIG_NFS_FS=y
 CONFIG_NFS_V3=y
 # CONFIG_NFS_V3_ACL is not set
@@ -1341,10 +1352,6 @@ CONFIG_MSDOS_PARTITION=y
 # CONFIG_KARMA_PARTITION is not set
 # CONFIG_EFI_PARTITION is not set
 # CONFIG_SYSV68_PARTITION is not set
-
-#
-# Native Language Support
-#
 CONFIG_NLS=y
 CONFIG_NLS_DEFAULT="iso8859-1"
 # CONFIG_NLS_CODEPAGE_437 is not set
@@ -1385,10 +1392,6 @@ CONFIG_NLS_DEFAULT="iso8859-1"
 # CONFIG_NLS_KOI8_R is not set
 # CONFIG_NLS_KOI8_U is not set
 CONFIG_NLS_UTF8=m
-
-#
-# Distributed Lock Manager
-#
 # CONFIG_DLM is not set
 # CONFIG_UCC_SLOW is not set
 
@@ -1407,16 +1410,13 @@ CONFIG_PLIST=y
 CONFIG_HAS_IOMEM=y
 CONFIG_HAS_IOPORT=y
 CONFIG_HAS_DMA=y
-
-#
-# Instrumentation Support
-#
-# CONFIG_PROFILING is not set
+# CONFIG_INSTRUMENTATION is not set
 
 #
 # 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
@@ -1441,9 +1441,12 @@ CONFIG_SCHED_DEBUG=y
 CONFIG_DEBUG_INFO=y
 # 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
@@ -1456,6 +1459,7 @@ CONFIG_FORCED_INLINING=y
 #
 # 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
@@ -1466,7 +1470,7 @@ CONFIG_CRYPTO_HMAC=y
 # CONFIG_CRYPTO_NULL is not set
 # CONFIG_CRYPTO_MD4 is not set
 CONFIG_CRYPTO_MD5=y
-# CONFIG_CRYPTO_SHA1 is not set
+CONFIG_CRYPTO_SHA1=m
 # CONFIG_CRYPTO_SHA256 is not set
 # CONFIG_CRYPTO_SHA512 is not set
 # CONFIG_CRYPTO_WP512 is not set
@@ -1476,6 +1480,7 @@ CONFIG_CRYPTO_MD5=y
 CONFIG_CRYPTO_CBC=y
 CONFIG_CRYPTO_PCBC=m
 # 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
@@ -1489,9 +1494,12 @@ CONFIG_CRYPTO_DES=y
 # 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
index 0211e6b68e1a325b6fcb88555409eda09f496c88..51f9693bacd4a6dd9a9ec360b7c21ca40fc523fa 100644 (file)
@@ -1,7 +1,7 @@
 #
 # Automatically generated make config: don't edit
-# Linux kernel version: 2.6.23-rc9
-# Thu Oct 11 09:16:32 2007
+# Linux kernel version: 2.6.24-rc4
+# Thu Dec  6 16:48:48 2007
 #
 # CONFIG_PPC64 is not set
 
@@ -68,9 +68,12 @@ CONFIG_SYSVIPC_SYSCTL=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 is not set
 CONFIG_SYSFS_DEPRECATED=y
 # CONFIG_RELAY is not set
 CONFIG_BLK_DEV_INITRD=y
@@ -158,6 +161,7 @@ CONFIG_CPM=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
@@ -179,6 +183,7 @@ CONFIG_FLATMEM_MANUAL=y
 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
@@ -207,11 +212,8 @@ 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
-
-#
-# PCCARD (PCMCIA/CardBus) support
-#
 # CONFIG_PCCARD is not set
 # CONFIG_HOTPLUG_PCI is not set
 
@@ -226,7 +228,7 @@ CONFIG_PCI_DEBUG=y
 CONFIG_HIGHMEM_START=0xfe000000
 CONFIG_LOWMEM_SIZE=0x30000000
 CONFIG_KERNEL_START=0xc0000000
-CONFIG_TASK_SIZE=0x80000000
+CONFIG_TASK_SIZE=0xc0000000
 CONFIG_BOOT_LOAD=0x00800000
 
 #
@@ -266,6 +268,7 @@ CONFIG_SYN_COOKIES=y
 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
@@ -291,10 +294,6 @@ CONFIG_DEFAULT_TCP_CONG="cubic"
 # CONFIG_LAPB is not set
 # CONFIG_ECONET is not set
 # CONFIG_WAN_ROUTER is not set
-
-#
-# QoS and/or fair queueing
-#
 # CONFIG_NET_SCHED is not set
 
 #
@@ -323,6 +322,7 @@ CONFIG_DEFAULT_TCP_CONG="cubic"
 #
 # Generic Driver Options
 #
+CONFIG_UEVENT_HELPER_PATH="/sbin/hotplug"
 CONFIG_STANDALONE=y
 CONFIG_PREVENT_FIRMWARE_BUILD=y
 # CONFIG_FW_LOADER is not set
@@ -366,10 +366,6 @@ CONFIG_MISC_DEVICES=y
 # CONFIG_SCSI_NETLINK is not set
 # CONFIG_ATA is not set
 # CONFIG_MD is not set
-
-#
-# Fusion MPT device support
-#
 # CONFIG_FUSION is not set
 
 #
@@ -386,6 +382,8 @@ CONFIG_NETDEVICES=y
 # 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=y
 
@@ -402,6 +400,7 @@ CONFIG_DAVICOM_PHY=y
 # CONFIG_BROADCOM_PHY is not set
 # CONFIG_ICPLUS_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
@@ -410,16 +409,23 @@ CONFIG_MII=y
 # 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_NS83820 is not set
 # CONFIG_HAMACHI is not set
 # CONFIG_YELLOWFIN is not set
@@ -438,11 +444,14 @@ CONFIG_GFAR_NAPI=y
 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
 
 #
@@ -474,7 +483,6 @@ CONFIG_INPUT=y
 #
 # CONFIG_INPUT_MOUSEDEV is not set
 # CONFIG_INPUT_JOYDEV is not set
-# CONFIG_INPUT_TSDEV is not set
 # CONFIG_INPUT_EVDEV is not set
 # CONFIG_INPUT_EVBUG is not set
 
@@ -524,15 +532,12 @@ CONFIG_UNIX98_PTYS=y
 CONFIG_LEGACY_PTYS=y
 CONFIG_LEGACY_PTY_COUNT=256
 # CONFIG_IPMI_HANDLER is not set
-# CONFIG_WATCHDOG 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_AGP is not set
-# CONFIG_DRM is not set
 # CONFIG_RAW_DRIVER is not set
 # CONFIG_TCG_TPM is not set
 CONFIG_DEVPORT=y
@@ -547,9 +552,9 @@ CONFIG_DEVPORT=y
 # CONFIG_POWER_SUPPLY is not set
 CONFIG_HWMON=y
 # CONFIG_HWMON_VID is not set
-# CONFIG_SENSORS_ABITUGURU is not set
-# CONFIG_SENSORS_ABITUGURU3 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
@@ -562,6 +567,13 @@ CONFIG_HWMON=y
 # 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
@@ -578,16 +590,17 @@ 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
-# CONFIG_VGASTATE is not set
-CONFIG_VIDEO_OUTPUT_CONTROL=y
-# CONFIG_FB is not set
-# CONFIG_FB_IBM_GXT4500 is not set
 
 #
 # Sound
@@ -596,6 +609,7 @@ CONFIG_VIDEO_OUTPUT_CONTROL=y
 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
@@ -616,19 +630,6 @@ CONFIG_USB_ARCH_HAS_EHCI=y
 # CONFIG_EDAC is not set
 # CONFIG_RTC_CLASS is not set
 
-#
-# DMA Engine support
-#
-# CONFIG_DMA_ENGINE is not set
-
-#
-# DMA Clients
-#
-
-#
-# DMA Devices
-#
-
 #
 # Userspace I/O
 #
@@ -646,7 +647,6 @@ CONFIG_EXT3_FS_XATTR=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 is not set
 # CONFIG_JFS_FS is not set
@@ -687,7 +687,6 @@ CONFIG_SYSFS=y
 CONFIG_TMPFS=y
 # CONFIG_TMPFS_POSIX_ACL is not set
 # CONFIG_HUGETLB_PAGE is not set
-CONFIG_RAMFS=y
 # CONFIG_CONFIGFS_FS is not set
 
 #
@@ -706,10 +705,7 @@ CONFIG_RAMFS=y
 # CONFIG_QNX4FS_FS is not set
 # CONFIG_SYSV_FS is not set
 # CONFIG_UFS_FS is not set
-
-#
-# Network File Systems
-#
+CONFIG_NETWORK_FILESYSTEMS=y
 CONFIG_NFS_FS=y
 # CONFIG_NFS_V3 is not set
 # CONFIG_NFS_V4 is not set
@@ -745,15 +741,7 @@ CONFIG_PARTITION_ADVANCED=y
 # CONFIG_KARMA_PARTITION is not set
 # CONFIG_EFI_PARTITION is not set
 # CONFIG_SYSV68_PARTITION is not set
-
-#
-# Native Language Support
-#
 # CONFIG_NLS is not set
-
-#
-# Distributed Lock Manager
-#
 # CONFIG_DLM is not set
 # CONFIG_UCC_SLOW is not set
 
@@ -771,16 +759,13 @@ CONFIG_PLIST=y
 CONFIG_HAS_IOMEM=y
 CONFIG_HAS_IOPORT=y
 CONFIG_HAS_DMA=y
-
-#
-# Instrumentation Support
-#
-# CONFIG_PROFILING is not set
+# CONFIG_INSTRUMENTATION is not set
 
 #
 # 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
@@ -804,8 +789,11 @@ CONFIG_DEBUG_MUTEXES=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_FORCED_INLINING=y
+# CONFIG_BOOT_PRINTK_DELAY 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
@@ -819,5 +807,7 @@ CONFIG_FORCED_INLINING=y
 #
 # 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
+CONFIG_PPC_LIB_RHEAP=y
index 883d8af9debd1549f653862324d10eefa382ab50..f51b58ae329af3cbe9c910416c78f90faa6e55d6 100644 (file)
@@ -1,7 +1,7 @@
 #
 # Automatically generated make config: don't edit
-# Linux kernel version: 2.6.23-rc4
-# Tue Aug 28 21:24:43 2007
+# Linux kernel version: 2.6.24-rc4
+# Thu Dec  6 16:48:50 2007
 #
 # CONFIG_PPC64 is not set
 
@@ -22,8 +22,13 @@ CONFIG_FSL_BOOKE=y
 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_IRQ_PER_CPU=y
 CONFIG_RWSEM_XCHGADD_ALGORITHM=y
@@ -63,9 +68,12 @@ CONFIG_SYSVIPC_SYSCTL=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 is not set
 CONFIG_SYSFS_DEPRECATED=y
 # CONFIG_RELAY is not set
 CONFIG_BLK_DEV_INITRD=y
@@ -84,7 +92,6 @@ 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
@@ -132,7 +139,7 @@ CONFIG_DEFAULT_IOSCHED="anticipatory"
 # CONFIG_MPC8560_ADS is not set
 # CONFIG_MPC85xx_CDS is not set
 CONFIG_MPC85xx_MDS=y
-# CONFIG_MPC8544_DS is not set
+# CONFIG_MPC85xx_DS is not set
 CONFIG_MPC85xx=y
 CONFIG_MPIC=y
 # CONFIG_MPIC_WEIRD is not set
@@ -144,6 +151,7 @@ CONFIG_MPIC=y
 # 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
 
@@ -151,6 +159,10 @@ CONFIG_MPIC=y
 # 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
@@ -172,6 +184,7 @@ CONFIG_FLATMEM_MANUAL=y
 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
@@ -180,6 +193,8 @@ CONFIG_VIRT_TO_BUS=y
 CONFIG_PROC_DEVICETREE=y
 # CONFIG_CMDLINE_BOOL is not set
 # CONFIG_PM is not set
+CONFIG_SUSPEND_UP_POSSIBLE=y
+CONFIG_HIBERNATION_UP_POSSIBLE=y
 CONFIG_SECCOMP=y
 CONFIG_WANT_DEVICE_TREE=y
 CONFIG_DEVICE_TREE=""
@@ -198,11 +213,8 @@ 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
-
-#
-# PCCARD (PCMCIA/CardBus) support
-#
 # CONFIG_PCCARD is not set
 # CONFIG_HOTPLUG_PCI is not set
 
@@ -217,7 +229,7 @@ CONFIG_ARCH_SUPPORTS_MSI=y
 CONFIG_HIGHMEM_START=0xfe000000
 CONFIG_LOWMEM_SIZE=0x30000000
 CONFIG_KERNEL_START=0xc0000000
-CONFIG_TASK_SIZE=0x80000000
+CONFIG_TASK_SIZE=0xc0000000
 CONFIG_BOOT_LOAD=0x00800000
 
 #
@@ -257,6 +269,7 @@ CONFIG_SYN_COOKIES=y
 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
@@ -282,10 +295,6 @@ CONFIG_DEFAULT_TCP_CONG="cubic"
 # CONFIG_LAPB is not set
 # CONFIG_ECONET is not set
 # CONFIG_WAN_ROUTER is not set
-
-#
-# QoS and/or fair queueing
-#
 # CONFIG_NET_SCHED is not set
 
 #
@@ -314,6 +323,7 @@ CONFIG_DEFAULT_TCP_CONG="cubic"
 #
 # Generic Driver Options
 #
+CONFIG_UEVENT_HELPER_PATH="/sbin/hotplug"
 CONFIG_STANDALONE=y
 CONFIG_PREVENT_FIRMWARE_BUILD=y
 # CONFIG_FW_LOADER is not set
@@ -384,6 +394,7 @@ CONFIG_SCSI_WAIT_SCAN=m
 # 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
@@ -395,6 +406,7 @@ CONFIG_SCSI_LOWLEVEL=y
 # 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
@@ -421,14 +433,7 @@ CONFIG_SCSI_LOWLEVEL=y
 # CONFIG_SCSI_SRP is not set
 # CONFIG_ATA is not set
 # CONFIG_MD is not set
-
-#
-# Fusion MPT device support
-#
 # CONFIG_FUSION is not set
-# CONFIG_FUSION_SPI is not set
-# CONFIG_FUSION_FC is not set
-# CONFIG_FUSION_SAS is not set
 
 #
 # IEEE 1394 (FireWire) support
@@ -444,6 +449,8 @@ CONFIG_NETDEVICES=y
 # 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=y
 
@@ -460,6 +467,7 @@ CONFIG_MARVELL_PHY=y
 # CONFIG_BROADCOM_PHY is not set
 # CONFIG_ICPLUS_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
@@ -468,11 +476,17 @@ CONFIG_MII=y
 # 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_NS83820 is not set
 # CONFIG_HAMACHI is not set
 # CONFIG_YELLOWFIN is not set
@@ -480,21 +494,26 @@ CONFIG_NETDEV_1000=y
 # 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_TR is not set
 
 #
@@ -527,7 +546,6 @@ CONFIG_INPUT=y
 #
 # CONFIG_INPUT_MOUSEDEV is not set
 # CONFIG_INPUT_JOYDEV is not set
-# CONFIG_INPUT_TSDEV is not set
 # CONFIG_INPUT_EVDEV is not set
 # CONFIG_INPUT_EVBUG is not set
 
@@ -576,28 +594,12 @@ CONFIG_UNIX98_PTYS=y
 CONFIG_LEGACY_PTYS=y
 CONFIG_LEGACY_PTY_COUNT=256
 # CONFIG_IPMI_HANDLER 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
 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_AGP is not set
-# CONFIG_DRM is not set
 # CONFIG_RAW_DRIVER is not set
 # CONFIG_TCG_TPM is not set
 CONFIG_DEVPORT=y
@@ -666,8 +668,6 @@ CONFIG_I2C_MPC=y
 # CONFIG_POWER_SUPPLY is not set
 CONFIG_HWMON=y
 # CONFIG_HWMON_VID is not set
-# CONFIG_SENSORS_ABITUGURU is not set
-# CONFIG_SENSORS_ABITUGURU3 is not set
 # CONFIG_SENSORS_AD7418 is not set
 # CONFIG_SENSORS_ADM1021 is not set
 # CONFIG_SENSORS_ADM1025 is not set
@@ -675,12 +675,13 @@ CONFIG_HWMON=y
 # CONFIG_SENSORS_ADM1029 is not set
 # CONFIG_SENSORS_ADM1031 is not set
 # CONFIG_SENSORS_ADM9240 is not set
-# CONFIG_SENSORS_ASB100 is not set
+# CONFIG_SENSORS_ADT7470 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_FSCHER is not set
-# CONFIG_SENSORS_FSCPOS 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
@@ -716,6 +717,26 @@ CONFIG_HWMON=y
 # CONFIG_SENSORS_W83627HF is not set
 # CONFIG_SENSORS_W83627EHF is not set
 # CONFIG_HWMON_DEBUG_CHIP 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
@@ -732,16 +753,17 @@ 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
-# CONFIG_VGASTATE is not set
-CONFIG_VIDEO_OUTPUT_CONTROL=m
-# CONFIG_FB is not set
-# CONFIG_FB_IBM_GXT4500 is not set
 
 #
 # Sound
@@ -750,6 +772,7 @@ CONFIG_VIDEO_OUTPUT_CONTROL=m
 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
@@ -768,19 +791,52 @@ CONFIG_USB_ARCH_HAS_EHCI=y
 # CONFIG_NEW_LEDS is not set
 # CONFIG_INFINIBAND is not set
 # CONFIG_EDAC is not set
-# CONFIG_RTC_CLASS 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
 
 #
-# DMA Engine support
+# RTC interfaces
 #
-# CONFIG_DMA_ENGINE is not set
+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
 
 #
-# DMA Clients
+# 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
+
 #
+# SPI RTC drivers
+#
+
+#
+# Platform RTC drivers
+#
+# CONFIG_RTC_DRV_CMOS is not set
+# CONFIG_RTC_DRV_DS1553 is not set
+# CONFIG_RTC_DRV_STK17TA8 is not set
+# CONFIG_RTC_DRV_DS1742 is not set
+# CONFIG_RTC_DRV_M48T86 is not set
+# CONFIG_RTC_DRV_M48T59 is not set
+# CONFIG_RTC_DRV_V3020 is not set
 
 #
-# DMA Devices
+# on-CPU RTC drivers
 #
 
 #
@@ -800,7 +856,6 @@ CONFIG_EXT3_FS_XATTR=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 is not set
 # CONFIG_JFS_FS is not set
@@ -841,7 +896,6 @@ CONFIG_SYSFS=y
 CONFIG_TMPFS=y
 # CONFIG_TMPFS_POSIX_ACL is not set
 # CONFIG_HUGETLB_PAGE is not set
-CONFIG_RAMFS=y
 # CONFIG_CONFIGFS_FS is not set
 
 #
@@ -860,10 +914,7 @@ CONFIG_RAMFS=y
 # CONFIG_QNX4FS_FS is not set
 # CONFIG_SYSV_FS is not set
 # CONFIG_UFS_FS is not set
-
-#
-# Network File Systems
-#
+CONFIG_NETWORK_FILESYSTEMS=y
 CONFIG_NFS_FS=y
 CONFIG_NFS_V3=y
 # CONFIG_NFS_V3_ACL is not set
@@ -902,15 +953,7 @@ CONFIG_PARTITION_ADVANCED=y
 # CONFIG_KARMA_PARTITION is not set
 # CONFIG_EFI_PARTITION is not set
 # CONFIG_SYSV68_PARTITION is not set
-
-#
-# Native Language Support
-#
 # CONFIG_NLS is not set
-
-#
-# Distributed Lock Manager
-#
 # CONFIG_DLM is not set
 # CONFIG_UCC_SLOW is not set
 
@@ -928,17 +971,13 @@ CONFIG_PLIST=y
 CONFIG_HAS_IOMEM=y
 CONFIG_HAS_IOPORT=y
 CONFIG_HAS_DMA=y
-
-#
-# Instrumentation Support
-#
-CONFIG_PROFILING=y
-CONFIG_OPROFILE=y
+# CONFIG_INSTRUMENTATION is not set
 
 #
 # 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
@@ -962,9 +1001,12 @@ CONFIG_SCHED_DEBUG=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_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
@@ -981,12 +1023,14 @@ CONFIG_PPC_EARLY_DEBUG=y
 # 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_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
@@ -1006,6 +1050,7 @@ 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_CRYPTD is not set
 CONFIG_CRYPTO_DES=y
 # CONFIG_CRYPTO_FCRYPT is not set
@@ -1019,9 +1064,13 @@ CONFIG_CRYPTO_DES=y
 # 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
+CONFIG_PPC_LIB_RHEAP=y
index 4e85b2e88525fb49d2d434caf4693e7d816420b8..b40802d17e03d546208518935d3503d4b1914aa0 100644 (file)
@@ -1,7 +1,7 @@
 #
 # Automatically generated make config: don't edit
-# Linux kernel version: 2.6.23-rc4
-# Tue Sep 11 01:19:35 2007
+# Linux kernel version: 2.6.24-rc4
+# Thu Dec  6 16:48:52 2007
 #
 # CONFIG_PPC64 is not set
 
@@ -22,8 +22,13 @@ CONFIG_FSL_BOOKE=y
 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_IRQ_PER_CPU=y
 CONFIG_RWSEM_XCHGADD_ALGORITHM=y
@@ -64,11 +69,14 @@ CONFIG_BSD_PROCESS_ACCT=y
 # CONFIG_BSD_PROCESS_ACCT_V3 is not set
 # CONFIG_TASKSTATS is not set
 # CONFIG_USER_NS is not set
+# CONFIG_PID_NS 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_FAIR_GROUP_SCHED is not set
 CONFIG_SYSFS_DEPRECATED=y
 # CONFIG_RELAY is not set
 CONFIG_BLK_DEV_INITRD=y
@@ -89,7 +97,6 @@ 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
@@ -156,6 +163,10 @@ 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
@@ -177,6 +188,7 @@ CONFIG_FLATMEM_MANUAL=y
 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
@@ -185,6 +197,8 @@ CONFIG_VIRT_TO_BUS=y
 CONFIG_PROC_DEVICETREE=y
 # CONFIG_CMDLINE_BOOL is not set
 # CONFIG_PM is not set
+CONFIG_SUSPEND_UP_POSSIBLE=y
+CONFIG_HIBERNATION_UP_POSSIBLE=y
 CONFIG_SECCOMP=y
 CONFIG_WANT_DEVICE_TREE=y
 CONFIG_DEVICE_TREE=""
@@ -194,6 +208,7 @@ 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
@@ -203,11 +218,8 @@ 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
-
-#
-# PCCARD (PCMCIA/CardBus) support
-#
 # CONFIG_PCCARD is not set
 # CONFIG_HOTPLUG_PCI is not set
 
@@ -222,7 +234,7 @@ CONFIG_ARCH_SUPPORTS_MSI=y
 CONFIG_HIGHMEM_START=0xfe000000
 CONFIG_LOWMEM_SIZE=0x30000000
 CONFIG_KERNEL_START=0xc0000000
-CONFIG_TASK_SIZE=0x80000000
+CONFIG_TASK_SIZE=0xc0000000
 CONFIG_BOOT_LOAD=0x00800000
 
 #
@@ -271,6 +283,7 @@ 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
@@ -315,10 +328,6 @@ CONFIG_SCTP_HMAC_MD5=y
 # CONFIG_LAPB is not set
 # CONFIG_ECONET is not set
 # CONFIG_WAN_ROUTER is not set
-
-#
-# QoS and/or fair queueing
-#
 # CONFIG_NET_SCHED is not set
 
 #
@@ -348,6 +357,7 @@ CONFIG_FIB_RULES=y
 #
 # Generic Driver Options
 #
+CONFIG_UEVENT_HELPER_PATH="/sbin/hotplug"
 CONFIG_STANDALONE=y
 CONFIG_PREVENT_FIRMWARE_BUILD=y
 CONFIG_FW_LOADER=y
@@ -420,6 +430,7 @@ CONFIG_SCSI_WAIT_SCAN=m
 # 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
@@ -431,6 +442,7 @@ CONFIG_SCSI_LOWLEVEL=y
 # 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
@@ -498,6 +510,7 @@ CONFIG_PATA_ALI=y
 # 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
@@ -512,14 +525,7 @@ CONFIG_PATA_ALI=y
 # CONFIG_PATA_WINBOND is not set
 # CONFIG_PATA_PLATFORM is not set
 # CONFIG_MD is not set
-
-#
-# Fusion MPT device support
-#
 # CONFIG_FUSION is not set
-# CONFIG_FUSION_SPI is not set
-# CONFIG_FUSION_FC is not set
-# CONFIG_FUSION_SAS is not set
 
 #
 # IEEE 1394 (FireWire) support
@@ -535,6 +541,8 @@ CONFIG_DUMMY=y
 # 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=y
 
@@ -551,6 +559,7 @@ CONFIG_VITESSE_PHY=y
 # CONFIG_BROADCOM_PHY is not set
 # CONFIG_ICPLUS_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
@@ -559,11 +568,17 @@ CONFIG_MII=y
 # 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_NS83820 is not set
 # CONFIG_HAMACHI is not set
 # CONFIG_YELLOWFIN is not set
@@ -571,6 +586,7 @@ CONFIG_NETDEV_1000=y
 # 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
@@ -581,11 +597,14 @@ CONFIG_GFAR_NAPI=y
 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
 
 #
@@ -601,7 +620,6 @@ CONFIG_NETDEV_10000=y
 # CONFIG_USB_KAWETH is not set
 # CONFIG_USB_PEGASUS is not set
 # CONFIG_USB_RTL8150 is not set
-# CONFIG_USB_USBNET_MII is not set
 # CONFIG_USB_USBNET is not set
 # CONFIG_WAN is not set
 # CONFIG_FDDI is not set
@@ -628,7 +646,6 @@ CONFIG_INPUT=y
 #
 # CONFIG_INPUT_MOUSEDEV is not set
 # CONFIG_INPUT_JOYDEV is not set
-# CONFIG_INPUT_TSDEV is not set
 # CONFIG_INPUT_EVDEV is not set
 # CONFIG_INPUT_EVBUG is not set
 
@@ -688,15 +705,12 @@ CONFIG_UNIX98_PTYS=y
 CONFIG_LEGACY_PTYS=y
 CONFIG_LEGACY_PTY_COUNT=256
 # CONFIG_IPMI_HANDLER is not set
-# CONFIG_WATCHDOG is not set
 # CONFIG_HW_RANDOM is not set
 CONFIG_NVRAM=y
 CONFIG_GEN_RTC=y
 CONFIG_GEN_RTC_X=y
 # CONFIG_R3964 is not set
 # CONFIG_APPLICOM is not set
-# CONFIG_AGP is not set
-# CONFIG_DRM is not set
 # CONFIG_RAW_DRIVER is not set
 # CONFIG_TCG_TPM is not set
 CONFIG_DEVPORT=y
@@ -765,6 +779,13 @@ CONFIG_SENSORS_EEPROM=y
 # 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
@@ -859,6 +880,7 @@ CONFIG_DVB_CAPTURE_DRIVERS=y
 # 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
@@ -868,6 +890,9 @@ CONFIG_DVB_CAPTURE_DRIVERS=y
 # CONFIG_DVB_TDA827X 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
 
 #
 # Miscellaneous devices
@@ -881,16 +906,17 @@ 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
-# CONFIG_VGASTATE is not set
-CONFIG_VIDEO_OUTPUT_CONTROL=y
-# CONFIG_FB is not set
-# CONFIG_FB_IBM_GXT4500 is not set
 
 #
 # Console display driver support
@@ -1022,6 +1048,7 @@ 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
@@ -1082,6 +1109,7 @@ 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
@@ -1162,6 +1190,7 @@ CONFIG_RTC_INTF_DEV=y
 # 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
@@ -1190,19 +1219,6 @@ CONFIG_RTC_DRV_CMOS=y
 # on-CPU RTC drivers
 #
 
-#
-# DMA Engine support
-#
-# CONFIG_DMA_ENGINE is not set
-
-#
-# DMA Clients
-#
-
-#
-# DMA Devices
-#
-
 #
 # Userspace I/O
 #
@@ -1220,7 +1236,6 @@ CONFIG_EXT3_FS_XATTR=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 is not set
 # CONFIG_JFS_FS is not set
@@ -1269,7 +1284,6 @@ CONFIG_SYSFS=y
 CONFIG_TMPFS=y
 # CONFIG_TMPFS_POSIX_ACL is not set
 # CONFIG_HUGETLB_PAGE is not set
-CONFIG_RAMFS=y
 # CONFIG_CONFIGFS_FS is not set
 
 #
@@ -1292,10 +1306,7 @@ CONFIG_SYSV_FS=m
 CONFIG_UFS_FS=m
 # CONFIG_UFS_FS_WRITE is not set
 # CONFIG_UFS_DEBUG is not set
-
-#
-# Network File Systems
-#
+CONFIG_NETWORK_FILESYSTEMS=y
 CONFIG_NFS_FS=y
 CONFIG_NFS_V3=y
 # CONFIG_NFS_V3_ACL is not set
@@ -1341,10 +1352,6 @@ CONFIG_MSDOS_PARTITION=y
 # CONFIG_KARMA_PARTITION is not set
 # CONFIG_EFI_PARTITION is not set
 # CONFIG_SYSV68_PARTITION is not set
-
-#
-# Native Language Support
-#
 CONFIG_NLS=y
 CONFIG_NLS_DEFAULT="iso8859-1"
 # CONFIG_NLS_CODEPAGE_437 is not set
@@ -1385,10 +1392,6 @@ CONFIG_NLS_DEFAULT="iso8859-1"
 # CONFIG_NLS_KOI8_R is not set
 # CONFIG_NLS_KOI8_U is not set
 CONFIG_NLS_UTF8=m
-
-#
-# Distributed Lock Manager
-#
 # CONFIG_DLM is not set
 # CONFIG_UCC_SLOW is not set
 
@@ -1407,16 +1410,13 @@ CONFIG_PLIST=y
 CONFIG_HAS_IOMEM=y
 CONFIG_HAS_IOPORT=y
 CONFIG_HAS_DMA=y
-
-#
-# Instrumentation Support
-#
-# CONFIG_PROFILING is not set
+# CONFIG_INSTRUMENTATION is not set
 
 #
 # 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
@@ -1441,9 +1441,12 @@ CONFIG_SCHED_DEBUG=y
 CONFIG_DEBUG_INFO=y
 # 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
@@ -1456,6 +1459,7 @@ CONFIG_FORCED_INLINING=y
 #
 # 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
@@ -1466,7 +1470,7 @@ CONFIG_CRYPTO_HMAC=y
 # CONFIG_CRYPTO_NULL is not set
 # CONFIG_CRYPTO_MD4 is not set
 CONFIG_CRYPTO_MD5=y
-# CONFIG_CRYPTO_SHA1 is not set
+CONFIG_CRYPTO_SHA1=m
 # CONFIG_CRYPTO_SHA256 is not set
 # CONFIG_CRYPTO_SHA512 is not set
 # CONFIG_CRYPTO_WP512 is not set
@@ -1476,6 +1480,7 @@ CONFIG_CRYPTO_MD5=y
 CONFIG_CRYPTO_CBC=y
 CONFIG_CRYPTO_PCBC=m
 # 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
@@ -1489,9 +1494,12 @@ CONFIG_CRYPTO_DES=y
 # 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
index a4f33d11054258a51ea7c7bdc30175a2aeef106f..2f9ad589b004099297724a286dd86c587f8afc03 100644 (file)
@@ -1,7 +1,7 @@
 #
 # Automatically generated make config: don't edit
-# Linux kernel version: 2.6.23-rc4
-# Tue Aug 28 21:24:43 2007
+# Linux kernel version: 2.6.24-rc4
+# Thu Dec  6 16:48:54 2007
 #
 # CONFIG_PPC64 is not set
 
@@ -22,8 +22,13 @@ CONFIG_FSL_BOOKE=y
 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_IRQ_PER_CPU=y
 CONFIG_RWSEM_XCHGADD_ALGORITHM=y
@@ -63,9 +68,12 @@ CONFIG_SYSVIPC_SYSCTL=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 is not set
 CONFIG_SYSFS_DEPRECATED=y
 # CONFIG_RELAY is not set
 CONFIG_BLK_DEV_INITRD=y
@@ -86,7 +94,6 @@ 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
@@ -129,7 +136,7 @@ CONFIG_DEFAULT_IOSCHED="anticipatory"
 # CONFIG_MPC8560_ADS is not set
 CONFIG_MPC85xx_CDS=y
 # CONFIG_MPC85xx_MDS is not set
-# CONFIG_MPC8544_DS is not set
+# CONFIG_MPC85xx_DS is not set
 CONFIG_MPC8540=y
 CONFIG_MPC85xx=y
 CONFIG_MPIC=y
@@ -149,6 +156,10 @@ CONFIG_PPC_I8259=y
 # 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
@@ -170,6 +181,7 @@ CONFIG_FLATMEM_MANUAL=y
 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
@@ -178,6 +190,8 @@ CONFIG_VIRT_TO_BUS=y
 CONFIG_PROC_DEVICETREE=y
 # CONFIG_CMDLINE_BOOL is not set
 # CONFIG_PM is not set
+CONFIG_SUSPEND_UP_POSSIBLE=y
+CONFIG_HIBERNATION_UP_POSSIBLE=y
 # CONFIG_SECCOMP is not set
 CONFIG_WANT_DEVICE_TREE=y
 CONFIG_DEVICE_TREE=""
@@ -196,11 +210,8 @@ 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
-
-#
-# PCCARD (PCMCIA/CardBus) support
-#
 # CONFIG_PCCARD is not set
 # CONFIG_HOTPLUG_PCI is not set
 
@@ -215,7 +226,7 @@ CONFIG_ARCH_SUPPORTS_MSI=y
 CONFIG_HIGHMEM_START=0xfe000000
 CONFIG_LOWMEM_SIZE=0x30000000
 CONFIG_KERNEL_START=0xc0000000
-CONFIG_TASK_SIZE=0x80000000
+CONFIG_TASK_SIZE=0xc0000000
 CONFIG_BOOT_LOAD=0x00800000
 
 #
@@ -255,6 +266,7 @@ CONFIG_SYN_COOKIES=y
 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
@@ -280,10 +292,6 @@ CONFIG_DEFAULT_TCP_CONG="cubic"
 # CONFIG_LAPB is not set
 # CONFIG_ECONET is not set
 # CONFIG_WAN_ROUTER is not set
-
-#
-# QoS and/or fair queueing
-#
 # CONFIG_NET_SCHED is not set
 
 #
@@ -312,6 +320,7 @@ CONFIG_DEFAULT_TCP_CONG="cubic"
 #
 # Generic Driver Options
 #
+CONFIG_UEVENT_HELPER_PATH="/sbin/hotplug"
 CONFIG_STANDALONE=y
 CONFIG_PREVENT_FIRMWARE_BUILD=y
 # CONFIG_FW_LOADER is not set
@@ -364,6 +373,11 @@ 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_IDEPCI=y
 CONFIG_IDEPCI_SHARE_IRQ=y
 CONFIG_IDEPCI_PCIBUS_ORDER=y
@@ -371,8 +385,6 @@ CONFIG_IDEPCI_PCIBUS_ORDER=y
 CONFIG_BLK_DEV_GENERIC=y
 # CONFIG_BLK_DEV_OPTI621 is not set
 CONFIG_BLK_DEV_IDEDMA_PCI=y
-# CONFIG_BLK_DEV_IDEDMA_FORCED is not set
-# CONFIG_IDEDMA_ONLYDISK is not set
 # CONFIG_BLK_DEV_AEC62XX is not set
 # CONFIG_BLK_DEV_ALI15X3 is not set
 # CONFIG_BLK_DEV_AMD74XX is not set
@@ -400,7 +412,7 @@ CONFIG_BLK_DEV_VIA82CXXX=y
 # CONFIG_BLK_DEV_TC86C001 is not set
 # CONFIG_IDE_ARM is not set
 CONFIG_BLK_DEV_IDEDMA=y
-# CONFIG_IDEDMA_IVB is not set
+CONFIG_IDE_ARCH_OBSOLETE_INIT=y
 # CONFIG_BLK_DEV_HD is not set
 
 #
@@ -412,10 +424,6 @@ CONFIG_BLK_DEV_IDEDMA=y
 # CONFIG_SCSI_NETLINK is not set
 # CONFIG_ATA is not set
 # CONFIG_MD is not set
-
-#
-# Fusion MPT device support
-#
 # CONFIG_FUSION is not set
 
 #
@@ -432,6 +440,8 @@ CONFIG_NETDEVICES=y
 # 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=y
 
@@ -448,6 +458,7 @@ CONFIG_PHYLIB=y
 # CONFIG_BROADCOM_PHY is not set
 # CONFIG_ICPLUS_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
@@ -456,13 +467,19 @@ CONFIG_MII=y
 # 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_NS83820 is not set
 # CONFIG_HAMACHI is not set
 # CONFIG_YELLOWFIN is not set
@@ -470,6 +487,7 @@ CONFIG_E1000_NAPI=y
 # 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
@@ -480,11 +498,14 @@ CONFIG_GFAR_NAPI=y
 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
 
 #
@@ -516,7 +537,6 @@ CONFIG_INPUT=y
 #
 # CONFIG_INPUT_MOUSEDEV is not set
 # CONFIG_INPUT_JOYDEV is not set
-# CONFIG_INPUT_TSDEV is not set
 # CONFIG_INPUT_EVDEV is not set
 # CONFIG_INPUT_EVBUG is not set
 
@@ -565,15 +585,12 @@ CONFIG_UNIX98_PTYS=y
 CONFIG_LEGACY_PTYS=y
 CONFIG_LEGACY_PTY_COUNT=256
 # CONFIG_IPMI_HANDLER is not set
-# CONFIG_WATCHDOG 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_AGP is not set
-# CONFIG_DRM is not set
 # CONFIG_RAW_DRIVER is not set
 # CONFIG_TCG_TPM is not set
 CONFIG_DEVPORT=y
@@ -588,9 +605,9 @@ CONFIG_DEVPORT=y
 # CONFIG_POWER_SUPPLY is not set
 CONFIG_HWMON=y
 # CONFIG_HWMON_VID is not set
-# CONFIG_SENSORS_ABITUGURU is not set
-# CONFIG_SENSORS_ABITUGURU3 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
@@ -603,6 +620,13 @@ CONFIG_HWMON=y
 # 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
@@ -619,16 +643,17 @@ 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
-# CONFIG_VGASTATE is not set
-CONFIG_VIDEO_OUTPUT_CONTROL=y
-# CONFIG_FB is not set
-# CONFIG_FB_IBM_GXT4500 is not set
 
 #
 # Sound
@@ -637,6 +662,7 @@ CONFIG_VIDEO_OUTPUT_CONTROL=y
 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
@@ -657,19 +683,6 @@ CONFIG_USB_ARCH_HAS_EHCI=y
 # CONFIG_EDAC is not set
 # CONFIG_RTC_CLASS is not set
 
-#
-# DMA Engine support
-#
-# CONFIG_DMA_ENGINE is not set
-
-#
-# DMA Clients
-#
-
-#
-# DMA Devices
-#
-
 #
 # Userspace I/O
 #
@@ -687,7 +700,6 @@ CONFIG_EXT3_FS_XATTR=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 is not set
 # CONFIG_JFS_FS is not set
@@ -728,7 +740,6 @@ CONFIG_SYSFS=y
 CONFIG_TMPFS=y
 # CONFIG_TMPFS_POSIX_ACL is not set
 # CONFIG_HUGETLB_PAGE is not set
-CONFIG_RAMFS=y
 # CONFIG_CONFIGFS_FS is not set
 
 #
@@ -747,10 +758,7 @@ CONFIG_RAMFS=y
 # CONFIG_QNX4FS_FS is not set
 # CONFIG_SYSV_FS is not set
 # CONFIG_UFS_FS is not set
-
-#
-# Network File Systems
-#
+CONFIG_NETWORK_FILESYSTEMS=y
 CONFIG_NFS_FS=y
 # CONFIG_NFS_V3 is not set
 # CONFIG_NFS_V4 is not set
@@ -786,15 +794,7 @@ CONFIG_PARTITION_ADVANCED=y
 # CONFIG_KARMA_PARTITION is not set
 # CONFIG_EFI_PARTITION is not set
 # CONFIG_SYSV68_PARTITION is not set
-
-#
-# Native Language Support
-#
 # CONFIG_NLS is not set
-
-#
-# Distributed Lock Manager
-#
 # CONFIG_DLM is not set
 # CONFIG_UCC_SLOW is not set
 
@@ -812,16 +812,13 @@ CONFIG_PLIST=y
 CONFIG_HAS_IOMEM=y
 CONFIG_HAS_IOPORT=y
 CONFIG_HAS_DMA=y
-
-#
-# Instrumentation Support
-#
-# CONFIG_PROFILING is not set
+# CONFIG_INSTRUMENTATION is not set
 
 #
 # 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
@@ -845,8 +842,11 @@ CONFIG_DEBUG_MUTEXES=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_FORCED_INLINING=y
+# CONFIG_BOOT_PRINTK_DELAY 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
@@ -859,4 +859,6 @@ CONFIG_FORCED_INLINING=y
 #
 # 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
index 0483211f52beede3c2c7b0942d70a99e52361dcb..9614d24f832a6d7d333dd4780477c62d6ef194b2 100644 (file)
@@ -1,7 +1,7 @@
 #
 # Automatically generated make config: don't edit
-# Linux kernel version: 2.6.23-rc6
-# Tue Oct  2 11:42:56 2007
+# Linux kernel version: 2.6.24-rc4
+# Thu Dec  6 16:48:56 2007
 #
 # CONFIG_PPC64 is not set
 
@@ -21,8 +21,13 @@ 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_IRQ_PER_CPU=y
 CONFIG_RWSEM_XCHGADD_ALGORITHM=y
@@ -61,10 +66,13 @@ CONFIG_LOCALVERSION=""
 # 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=y
 CONFIG_IKCONFIG_PROC=y
 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_BLK_DEV_INITRD=y
@@ -119,7 +127,6 @@ CONFIG_DEFAULT_IOSCHED="deadline"
 # Platform support
 #
 # CONFIG_PPC_MULTIPLATFORM is not set
-# CONFIG_EMBEDDED6xx is not set
 # CONFIG_PPC_82xx is not set
 # CONFIG_PPC_83xx is not set
 CONFIG_PPC_86xx=y
@@ -148,6 +155,10 @@ CONFIG_MPIC=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 is not set
 # CONFIG_HZ_300 is not set
@@ -168,6 +179,7 @@ CONFIG_FLATMEM_MANUAL=y
 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
@@ -197,11 +209,8 @@ CONFIG_PCIEPORTBUS=y
 CONFIG_PCIEAER=y
 CONFIG_ARCH_SUPPORTS_MSI=y
 # CONFIG_PCI_MSI is not set
+CONFIG_PCI_LEGACY=y
 CONFIG_PCI_DEBUG=y
-
-#
-# PCCARD (PCMCIA/CardBus) support
-#
 # CONFIG_PCCARD is not set
 # CONFIG_HOTPLUG_PCI is not set
 
@@ -216,7 +225,7 @@ CONFIG_PCI_DEBUG=y
 CONFIG_HIGHMEM_START=0xfe000000
 CONFIG_LOWMEM_SIZE=0x30000000
 CONFIG_KERNEL_START=0xc0000000
-CONFIG_TASK_SIZE=0x80000000
+CONFIG_TASK_SIZE=0xc0000000
 CONFIG_BOOT_LOAD=0x00800000
 
 #
@@ -255,6 +264,7 @@ CONFIG_INET_TUNNEL=y
 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
@@ -294,10 +304,6 @@ CONFIG_IPV6_SIT=y
 # CONFIG_LAPB is not set
 # CONFIG_ECONET is not set
 # CONFIG_WAN_ROUTER is not set
-
-#
-# QoS and/or fair queueing
-#
 # CONFIG_NET_SCHED is not set
 
 #
@@ -326,6 +332,7 @@ CONFIG_IPV6_SIT=y
 #
 # Generic Driver Options
 #
+CONFIG_UEVENT_HELPER_PATH="/sbin/hotplug"
 CONFIG_STANDALONE=y
 CONFIG_PREVENT_FIRMWARE_BUILD=y
 CONFIG_FW_LOADER=y
@@ -399,6 +406,7 @@ CONFIG_CHR_DEV_SG=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
@@ -410,6 +418,7 @@ CONFIG_SCSI_LOWLEVEL=y
 # 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
@@ -477,6 +486,7 @@ CONFIG_PATA_ALI=y
 # 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
@@ -491,14 +501,7 @@ CONFIG_PATA_ALI=y
 # CONFIG_PATA_WINBOND is not set
 # CONFIG_PATA_PLATFORM is not set
 # CONFIG_MD is not set
-
-#
-# Fusion MPT device support
-#
 # CONFIG_FUSION is not set
-# CONFIG_FUSION_SPI is not set
-# CONFIG_FUSION_FC is not set
-# CONFIG_FUSION_SAS is not set
 
 #
 # IEEE 1394 (FireWire) support
@@ -514,6 +517,8 @@ CONFIG_DUMMY=y
 # 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=y
 
@@ -530,6 +535,7 @@ CONFIG_PHYLIB=y
 # CONFIG_BROADCOM_PHY is not set
 # CONFIG_ICPLUS_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
@@ -547,13 +553,16 @@ CONFIG_TULIP_MMIO=y
 # CONFIG_DM9102 is not set
 # CONFIG_ULI526X 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_DGRS is not set
 # CONFIG_EEPRO100 is not set
 # CONFIG_E100 is not set
 # CONFIG_FEALNX is not set
@@ -575,6 +584,7 @@ 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
@@ -592,11 +602,14 @@ CONFIG_NETDEV_1000=y
 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
 
 #
@@ -629,7 +642,6 @@ CONFIG_INPUT=y
 #
 # CONFIG_INPUT_MOUSEDEV is not set
 # CONFIG_INPUT_JOYDEV is not set
-# CONFIG_INPUT_TSDEV is not set
 # CONFIG_INPUT_EVDEV is not set
 # CONFIG_INPUT_EVBUG is not set
 
@@ -688,14 +700,11 @@ CONFIG_SERIAL_OF_PLATFORM=y
 CONFIG_UNIX98_PTYS=y
 # CONFIG_LEGACY_PTYS is not set
 # CONFIG_IPMI_HANDLER is not set
-# CONFIG_WATCHDOG 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_AGP is not set
-# CONFIG_DRM is not set
 # CONFIG_RAW_DRIVER is not set
 # CONFIG_TCG_TPM is not set
 CONFIG_DEVPORT=y
@@ -709,6 +718,13 @@ CONFIG_DEVPORT=y
 # 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
@@ -725,16 +741,17 @@ 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
-# CONFIG_VGASTATE is not set
-CONFIG_VIDEO_OUTPUT_CONTROL=y
-# CONFIG_FB is not set
-# CONFIG_FB_IBM_GXT4500 is not set
 
 #
 # Console display driver support
@@ -750,6 +767,7 @@ CONFIG_DUMMY_CONSOLE=y
 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
@@ -770,19 +788,6 @@ CONFIG_USB_ARCH_HAS_EHCI=y
 # CONFIG_EDAC is not set
 # CONFIG_RTC_CLASS is not set
 
-#
-# DMA Engine support
-#
-# CONFIG_DMA_ENGINE is not set
-
-#
-# DMA Clients
-#
-
-#
-# DMA Devices
-#
-
 #
 # Userspace I/O
 #
@@ -800,7 +805,6 @@ CONFIG_EXT3_FS_XATTR=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 is not set
 # CONFIG_JFS_FS is not set
@@ -840,7 +844,6 @@ CONFIG_SYSFS=y
 CONFIG_TMPFS=y
 # CONFIG_TMPFS_POSIX_ACL is not set
 # CONFIG_HUGETLB_PAGE is not set
-CONFIG_RAMFS=y
 # CONFIG_CONFIGFS_FS is not set
 
 #
@@ -859,10 +862,7 @@ CONFIG_RAMFS=y
 # CONFIG_QNX4FS_FS is not set
 # CONFIG_SYSV_FS is not set
 # CONFIG_UFS_FS is not set
-
-#
-# Network File Systems
-#
+CONFIG_NETWORK_FILESYSTEMS=y
 CONFIG_NFS_FS=y
 CONFIG_NFS_V3=y
 # CONFIG_NFS_V3_ACL is not set
@@ -908,10 +908,6 @@ CONFIG_LDM_PARTITION=y
 # CONFIG_KARMA_PARTITION is not set
 # CONFIG_EFI_PARTITION is not set
 # CONFIG_SYSV68_PARTITION is not set
-
-#
-# Native Language Support
-#
 CONFIG_NLS=y
 CONFIG_NLS_DEFAULT="iso8859-1"
 # CONFIG_NLS_CODEPAGE_437 is not set
@@ -952,10 +948,6 @@ CONFIG_NLS_DEFAULT="iso8859-1"
 # CONFIG_NLS_KOI8_R is not set
 # CONFIG_NLS_KOI8_U is not set
 # CONFIG_NLS_UTF8 is not set
-
-#
-# Distributed Lock Manager
-#
 # CONFIG_DLM is not set
 # CONFIG_UCC_SLOW is not set
 
@@ -973,16 +965,13 @@ CONFIG_PLIST=y
 CONFIG_HAS_IOMEM=y
 CONFIG_HAS_IOPORT=y
 CONFIG_HAS_DMA=y
-
-#
-# Instrumentation Support
-#
-# CONFIG_PROFILING is not set
+# CONFIG_INSTRUMENTATION is not set
 
 #
 # 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
@@ -1007,8 +996,11 @@ CONFIG_DEBUG_BUGVERBOSE=y
 CONFIG_DEBUG_INFO=y
 # 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_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
@@ -1021,4 +1013,6 @@ CONFIG_FORCED_INLINING=y
 #
 # 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
index ed214fcd8abe29a0d1915c1badeeb0850512f102..ff092fc4c6be50a8577a95f15d6728bc4df4bdd0 100644 (file)
@@ -1,7 +1,7 @@
 #
 # Automatically generated make config: don't edit
-# Linux kernel version: 2.6.23-rc4
-# Wed Aug 29 16:16:23 2007
+# Linux kernel version: 2.6.24-rc4
+# Thu Dec  6 16:48:58 2007
 #
 # CONFIG_PPC64 is not set
 
@@ -22,8 +22,13 @@ CONFIG_PPC_STD_MMU_32=y
 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_IRQ_PER_CPU=y
 CONFIG_RWSEM_XCHGADD_ALGORITHM=y
@@ -64,12 +69,14 @@ CONFIG_BSD_PROCESS_ACCT=y
 # CONFIG_BSD_PROCESS_ACCT_V3 is not set
 # CONFIG_TASKSTATS is not set
 # CONFIG_USER_NS is not set
+# CONFIG_PID_NS is not set
 CONFIG_AUDIT=y
 # CONFIG_AUDITSYSCALL is not set
 CONFIG_IKCONFIG=y
 CONFIG_IKCONFIG_PROC=y
 CONFIG_LOG_BUF_SHIFT=14
-# CONFIG_CPUSETS is not set
+# CONFIG_CGROUPS is not set
+# CONFIG_FAIR_GROUP_SCHED is not set
 CONFIG_SYSFS_DEPRECATED=y
 # CONFIG_RELAY is not set
 CONFIG_BLK_DEV_INITRD=y
@@ -90,7 +97,6 @@ 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
@@ -131,7 +137,6 @@ CONFIG_DEFAULT_IOSCHED="cfq"
 # Platform support
 #
 # CONFIG_PPC_MULTIPLATFORM is not set
-# CONFIG_EMBEDDED6xx is not set
 # CONFIG_PPC_82xx is not set
 # CONFIG_PPC_83xx is not set
 CONFIG_PPC_86xx=y
@@ -141,6 +146,7 @@ CONFIG_PPC_86xx=y
 # CONFIG_PPC_CELL_NATIVE is not set
 # CONFIG_PQ2ADS is not set
 CONFIG_MPC8641_HPCN=y
+# CONFIG_MPC8610_HPCD is not set
 CONFIG_MPC8641=y
 CONFIG_MPIC=y
 # CONFIG_MPIC_WEIRD is not set
@@ -159,6 +165,10 @@ 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 is not set
 # CONFIG_HZ_300 is not set
@@ -181,6 +191,7 @@ CONFIG_FLATMEM_MANUAL=y
 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
@@ -207,11 +218,8 @@ 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
-
-#
-# PCCARD (PCMCIA/CardBus) support
-#
 # CONFIG_PCCARD is not set
 # CONFIG_HOTPLUG_PCI is not set
 
@@ -226,7 +234,7 @@ CONFIG_ARCH_SUPPORTS_MSI=y
 CONFIG_HIGHMEM_START=0xfe000000
 CONFIG_LOWMEM_SIZE=0x30000000
 CONFIG_KERNEL_START=0xc0000000
-CONFIG_TASK_SIZE=0x80000000
+CONFIG_TASK_SIZE=0xc0000000
 CONFIG_BOOT_LOAD=0x00800000
 
 #
@@ -275,6 +283,7 @@ 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
@@ -319,10 +328,6 @@ CONFIG_SCTP_HMAC_MD5=y
 # CONFIG_LAPB is not set
 # CONFIG_ECONET is not set
 # CONFIG_WAN_ROUTER is not set
-
-#
-# QoS and/or fair queueing
-#
 # CONFIG_NET_SCHED is not set
 
 #
@@ -352,6 +357,7 @@ CONFIG_FIB_RULES=y
 #
 # Generic Driver Options
 #
+CONFIG_UEVENT_HELPER_PATH="/sbin/hotplug"
 CONFIG_STANDALONE=y
 CONFIG_PREVENT_FIRMWARE_BUILD=y
 CONFIG_FW_LOADER=y
@@ -424,6 +430,7 @@ CONFIG_SCSI_WAIT_SCAN=m
 # 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
@@ -435,6 +442,7 @@ CONFIG_SCSI_LOWLEVEL=y
 # 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
@@ -502,6 +510,7 @@ CONFIG_PATA_ALI=y
 # 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
@@ -516,14 +525,7 @@ CONFIG_PATA_ALI=y
 # CONFIG_PATA_WINBOND is not set
 # CONFIG_PATA_PLATFORM is not set
 # CONFIG_MD is not set
-
-#
-# Fusion MPT device support
-#
 # CONFIG_FUSION is not set
-# CONFIG_FUSION_SPI is not set
-# CONFIG_FUSION_FC is not set
-# CONFIG_FUSION_SAS is not set
 
 #
 # IEEE 1394 (FireWire) support
@@ -539,6 +541,8 @@ CONFIG_DUMMY=y
 # 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=y
 
@@ -555,6 +559,7 @@ CONFIG_VITESSE_PHY=y
 # CONFIG_BROADCOM_PHY is not set
 # CONFIG_ICPLUS_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
@@ -563,11 +568,17 @@ CONFIG_MII=y
 # 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_NS83820 is not set
 # CONFIG_HAMACHI is not set
 # CONFIG_YELLOWFIN is not set
@@ -575,6 +586,7 @@ CONFIG_NETDEV_1000=y
 # 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
@@ -585,11 +597,14 @@ CONFIG_GFAR_NAPI=y
 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
 
 #
@@ -605,7 +620,6 @@ CONFIG_NETDEV_10000=y
 # CONFIG_USB_KAWETH is not set
 # CONFIG_USB_PEGASUS is not set
 # CONFIG_USB_RTL8150 is not set
-# CONFIG_USB_USBNET_MII is not set
 # CONFIG_USB_USBNET is not set
 # CONFIG_WAN is not set
 # CONFIG_FDDI is not set
@@ -632,7 +646,6 @@ CONFIG_INPUT=y
 #
 # CONFIG_INPUT_MOUSEDEV is not set
 # CONFIG_INPUT_JOYDEV is not set
-# CONFIG_INPUT_TSDEV is not set
 # CONFIG_INPUT_EVDEV is not set
 # CONFIG_INPUT_EVBUG is not set
 
@@ -692,15 +705,12 @@ CONFIG_UNIX98_PTYS=y
 CONFIG_LEGACY_PTYS=y
 CONFIG_LEGACY_PTY_COUNT=256
 # CONFIG_IPMI_HANDLER is not set
-# CONFIG_WATCHDOG is not set
 # CONFIG_HW_RANDOM is not set
 CONFIG_NVRAM=y
 CONFIG_GEN_RTC=y
 CONFIG_GEN_RTC_X=y
 # CONFIG_R3964 is not set
 # CONFIG_APPLICOM is not set
-# CONFIG_AGP is not set
-# CONFIG_DRM is not set
 # CONFIG_RAW_DRIVER is not set
 # CONFIG_TCG_TPM is not set
 CONFIG_DEVPORT=y
@@ -769,6 +779,13 @@ CONFIG_SENSORS_EEPROM=y
 # 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
@@ -863,6 +880,7 @@ CONFIG_DVB_CAPTURE_DRIVERS=y
 # 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
@@ -872,6 +890,9 @@ CONFIG_DVB_CAPTURE_DRIVERS=y
 # CONFIG_DVB_TDA827X 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
 
 #
 # Miscellaneous devices
@@ -885,16 +906,17 @@ 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
-# CONFIG_VGASTATE is not set
-CONFIG_VIDEO_OUTPUT_CONTROL=y
-# CONFIG_FB is not set
-# CONFIG_FB_IBM_GXT4500 is not set
 
 #
 # Console display driver support
@@ -1026,6 +1048,7 @@ 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
@@ -1086,6 +1109,7 @@ 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
@@ -1166,6 +1190,7 @@ CONFIG_RTC_INTF_DEV=y
 # 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
@@ -1194,19 +1219,6 @@ CONFIG_RTC_DRV_CMOS=y
 # on-CPU RTC drivers
 #
 
-#
-# DMA Engine support
-#
-# CONFIG_DMA_ENGINE is not set
-
-#
-# DMA Clients
-#
-
-#
-# DMA Devices
-#
-
 #
 # Userspace I/O
 #
@@ -1224,7 +1236,6 @@ CONFIG_EXT3_FS_XATTR=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 is not set
 # CONFIG_JFS_FS is not set
@@ -1273,7 +1284,6 @@ CONFIG_SYSFS=y
 CONFIG_TMPFS=y
 # CONFIG_TMPFS_POSIX_ACL is not set
 # CONFIG_HUGETLB_PAGE is not set
-CONFIG_RAMFS=y
 # CONFIG_CONFIGFS_FS is not set
 
 #
@@ -1296,10 +1306,7 @@ CONFIG_SYSV_FS=m
 CONFIG_UFS_FS=m
 # CONFIG_UFS_FS_WRITE is not set
 # CONFIG_UFS_DEBUG is not set
-
-#
-# Network File Systems
-#
+CONFIG_NETWORK_FILESYSTEMS=y
 CONFIG_NFS_FS=y
 CONFIG_NFS_V3=y
 # CONFIG_NFS_V3_ACL is not set
@@ -1345,10 +1352,6 @@ CONFIG_MSDOS_PARTITION=y
 # CONFIG_KARMA_PARTITION is not set
 # CONFIG_EFI_PARTITION is not set
 # CONFIG_SYSV68_PARTITION is not set
-
-#
-# Native Language Support
-#
 CONFIG_NLS=y
 CONFIG_NLS_DEFAULT="iso8859-1"
 # CONFIG_NLS_CODEPAGE_437 is not set
@@ -1389,10 +1392,6 @@ CONFIG_NLS_DEFAULT="iso8859-1"
 # CONFIG_NLS_KOI8_R is not set
 # CONFIG_NLS_KOI8_U is not set
 CONFIG_NLS_UTF8=m
-
-#
-# Distributed Lock Manager
-#
 # CONFIG_DLM is not set
 # CONFIG_UCC_SLOW is not set
 
@@ -1411,17 +1410,13 @@ CONFIG_PLIST=y
 CONFIG_HAS_IOMEM=y
 CONFIG_HAS_IOPORT=y
 CONFIG_HAS_DMA=y
-
-#
-# Instrumentation Support
-#
-# CONFIG_PROFILING is not set
-# CONFIG_KPROBES is not set
+# CONFIG_INSTRUMENTATION is not set
 
 #
 # 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
@@ -1446,9 +1441,12 @@ CONFIG_SCHED_DEBUG=y
 CONFIG_DEBUG_INFO=y
 # 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
@@ -1461,6 +1459,7 @@ CONFIG_FORCED_INLINING=y
 #
 # 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
@@ -1471,7 +1470,7 @@ CONFIG_CRYPTO_HMAC=y
 # CONFIG_CRYPTO_NULL is not set
 # CONFIG_CRYPTO_MD4 is not set
 CONFIG_CRYPTO_MD5=y
-# CONFIG_CRYPTO_SHA1 is not set
+CONFIG_CRYPTO_SHA1=m
 # CONFIG_CRYPTO_SHA256 is not set
 # CONFIG_CRYPTO_SHA512 is not set
 # CONFIG_CRYPTO_WP512 is not set
@@ -1481,6 +1480,7 @@ CONFIG_CRYPTO_MD5=y
 CONFIG_CRYPTO_CBC=y
 CONFIG_CRYPTO_PCBC=m
 # 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
@@ -1494,9 +1494,12 @@ CONFIG_CRYPTO_DES=y
 # 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
index 070b0a5b9c0d28996aea4ad946b605dc84e941ab..a7ef231f2ab2c0343552a488a476d78b8f0618d3 100644 (file)
@@ -1,7 +1,7 @@
 #
 # Automatically generated make config: don't edit
-# Linux kernel version: 2.6.23-rc4
-# Tue Aug 28 21:24:44 2007
+# Linux kernel version: 2.6.24-rc4
+# Thu Dec  6 16:48:59 2007
 #
 # CONFIG_PPC64 is not set
 
@@ -18,8 +18,13 @@ CONFIG_8xx=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
@@ -58,9 +63,12 @@ CONFIG_SYSVIPC_SYSCTL=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 is not set
 CONFIG_SYSFS_DEPRECATED=y
 # CONFIG_RELAY is not set
 # CONFIG_BLK_DEV_INITRD is not set
@@ -79,7 +87,6 @@ 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 is not set
@@ -121,6 +128,7 @@ CONFIG_CPM1=y
 # CONFIG_MPC8XXFADS is not set
 CONFIG_MPC86XADS=y
 # CONFIG_MPC885ADS is not set
+# CONFIG_PPC_EP88XC is not set
 
 #
 # MPC8xx CPM Options
@@ -131,6 +139,7 @@ CONFIG_MPC86XADS=y
 #
 CONFIG_8xx_COPYBACK=y
 CONFIG_8xx_CPU6=y
+CONFIG_8xx_CPU15=y
 CONFIG_NO_UCODE_PATCH=y
 # CONFIG_USB_SOF_UCODE_PATCH is not set
 # CONFIG_I2C_SPI_UCODE_PATCH is not set
@@ -148,11 +157,16 @@ CONFIG_NO_UCODE_PATCH=y
 # CONFIG_CPU_FREQ is not set
 # CONFIG_CPM2 is not set
 # CONFIG_FSL_ULI1575 is not set
+CONFIG_CPM=y
 
 #
 # 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 is not set
 # CONFIG_HZ_300 is not set
@@ -174,6 +188,7 @@ CONFIG_FLATMEM_MANUAL=y
 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
@@ -182,8 +197,11 @@ CONFIG_VIRT_TO_BUS=y
 # CONFIG_PROC_DEVICETREE is not set
 # CONFIG_CMDLINE_BOOL is not set
 # CONFIG_PM is not set
+CONFIG_SUSPEND_UP_POSSIBLE=y
+CONFIG_HIBERNATION_UP_POSSIBLE=y
 # CONFIG_SECCOMP is not set
-# CONFIG_WANT_DEVICE_TREE is not set
+CONFIG_WANT_DEVICE_TREE=y
+CONFIG_DEVICE_TREE=""
 CONFIG_ISA_DMA_API=y
 
 #
@@ -197,10 +215,6 @@ CONFIG_FSL_SOC=y
 # CONFIG_PCI_QSPAN is not set
 # CONFIG_ARCH_SUPPORTS_MSI is not set
 
-#
-# PCCARD (PCMCIA/CardBus) support
-#
-
 #
 # Advanced setup
 #
@@ -213,7 +227,7 @@ CONFIG_HIGHMEM_START=0xfe000000
 CONFIG_LOWMEM_SIZE=0x30000000
 CONFIG_KERNEL_START=0xc0000000
 CONFIG_TASK_SIZE=0x80000000
-CONFIG_CONSISTENT_START=0xff100000
+CONFIG_CONSISTENT_START=0xfd000000
 CONFIG_CONSISTENT_SIZE=0x00200000
 CONFIG_BOOT_LOAD=0x00400000
 
@@ -254,6 +268,7 @@ CONFIG_SYN_COOKIES=y
 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
@@ -279,10 +294,6 @@ CONFIG_DEFAULT_TCP_CONG="cubic"
 # CONFIG_LAPB is not set
 # CONFIG_ECONET is not set
 # CONFIG_WAN_ROUTER is not set
-
-#
-# QoS and/or fair queueing
-#
 # CONFIG_NET_SCHED is not set
 
 #
@@ -348,6 +359,7 @@ CONFIG_NETDEVICES=y
 # CONFIG_MACVLAN is not set
 # CONFIG_EQUALIZER is not set
 # CONFIG_TUN is not set
+# CONFIG_VETH is not set
 CONFIG_PHYLIB=y
 
 #
@@ -365,11 +377,20 @@ CONFIG_PHYLIB=y
 CONFIG_FIXED_PHY=y
 CONFIG_FIXED_MII_10_FDX=y
 CONFIG_FIXED_MII_100_FDX=y
+# CONFIG_FIXED_MII_1000_FDX is not set
+CONFIG_FIXED_MII_AMNT=1
+# 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_FS_ENET=y
 CONFIG_FS_ENET_HAS_SCC=y
 CONFIG_FS_ENET_HAS_FEC=y
+CONFIG_FS_ENET_MDIO_FEC=y
 CONFIG_NETDEV_1000=y
 CONFIG_NETDEV_10000=y
 
@@ -403,7 +424,6 @@ CONFIG_INPUT_MOUSEDEV_PSAUX=y
 CONFIG_INPUT_MOUSEDEV_SCREEN_X=1024
 CONFIG_INPUT_MOUSEDEV_SCREEN_Y=768
 # CONFIG_INPUT_JOYDEV is not set
-# CONFIG_INPUT_TSDEV is not set
 # CONFIG_INPUT_EVDEV is not set
 # CONFIG_INPUT_EVBUG is not set
 
@@ -470,7 +490,6 @@ CONFIG_SERIAL_CPM_SMC2=y
 CONFIG_UNIX98_PTYS=y
 # CONFIG_LEGACY_PTYS is not set
 # CONFIG_IPMI_HANDLER is not set
-# CONFIG_WATCHDOG is not set
 CONFIG_HW_RANDOM=y
 # CONFIG_NVRAM is not set
 CONFIG_GEN_RTC=y
@@ -489,9 +508,8 @@ CONFIG_GEN_RTC=y
 # CONFIG_POWER_SUPPLY is not set
 CONFIG_HWMON=y
 # CONFIG_HWMON_VID is not set
-# CONFIG_SENSORS_ABITUGURU is not set
-# CONFIG_SENSORS_ABITUGURU3 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
@@ -501,6 +519,13 @@ CONFIG_HWMON=y
 # 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
@@ -517,16 +542,15 @@ 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
-# CONFIG_VGASTATE is not set
-CONFIG_VIDEO_OUTPUT_CONTROL=y
-# CONFIG_FB is not set
-# CONFIG_FB_IBM_GXT4500 is not set
 
 #
 # Sound
@@ -535,6 +559,7 @@ CONFIG_VIDEO_OUTPUT_CONTROL=y
 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
@@ -553,19 +578,6 @@ CONFIG_USB_SUPPORT=y
 # CONFIG_EDAC is not set
 # CONFIG_RTC_CLASS is not set
 
-#
-# DMA Engine support
-#
-# CONFIG_DMA_ENGINE is not set
-
-#
-# DMA Clients
-#
-
-#
-# DMA Devices
-#
-
 #
 # Userspace I/O
 #
@@ -585,7 +597,6 @@ CONFIG_EXT3_FS_XATTR=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 is not set
 # CONFIG_JFS_FS is not set
@@ -626,7 +637,6 @@ CONFIG_SYSFS=y
 CONFIG_TMPFS=y
 # CONFIG_TMPFS_POSIX_ACL is not set
 # CONFIG_HUGETLB_PAGE is not set
-CONFIG_RAMFS=y
 # CONFIG_CONFIGFS_FS is not set
 
 #
@@ -645,10 +655,7 @@ CONFIG_CRAMFS=y
 # CONFIG_QNX4FS_FS is not set
 # CONFIG_SYSV_FS is not set
 # CONFIG_UFS_FS is not set
-
-#
-# Network File Systems
-#
+CONFIG_NETWORK_FILESYSTEMS=y
 CONFIG_NFS_FS=y
 CONFIG_NFS_V3=y
 # CONFIG_NFS_V3_ACL is not set
@@ -690,15 +697,7 @@ CONFIG_MSDOS_PARTITION=y
 # CONFIG_KARMA_PARTITION is not set
 # CONFIG_EFI_PARTITION is not set
 # CONFIG_SYSV68_PARTITION is not set
-
-#
-# Native Language Support
-#
 # CONFIG_NLS is not set
-
-#
-# Distributed Lock Manager
-#
 # CONFIG_DLM is not set
 # CONFIG_UCC_SLOW is not set
 
@@ -717,22 +716,21 @@ CONFIG_PLIST=y
 CONFIG_HAS_IOMEM=y
 CONFIG_HAS_IOPORT=y
 CONFIG_HAS_DMA=y
-
-#
-# Instrumentation Support
-#
-# CONFIG_PROFILING is not set
+# CONFIG_INSTRUMENTATION is not set
 
 #
 # 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_SAMPLES is not set
 # CONFIG_PPC_EARLY_DEBUG is not set
 
 #
@@ -740,4 +738,7 @@ CONFIG_ENABLE_MUST_CHECK=y
 #
 # 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
+CONFIG_PPC_LIB_RHEAP=y
index 482d99db68705184b9d838fd02251b635f427df8..22f8171d6d45ea1189ebfe1a14078f66bffc8b46 100644 (file)
@@ -1,7 +1,7 @@
 #
 # Automatically generated make config: don't edit
-# Linux kernel version: 2.6.23-rc3
-# Mon Aug 27 15:23:16 2007
+# Linux kernel version: 2.6.24-rc4
+# Thu Dec  6 16:49:01 2007
 #
 # CONFIG_PPC64 is not set
 
@@ -18,8 +18,13 @@ CONFIG_8xx=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
@@ -59,9 +64,12 @@ CONFIG_SYSVIPC_SYSCTL=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 is not set
 CONFIG_SYSFS_DEPRECATED=y
 # CONFIG_RELAY is not set
 # CONFIG_BLK_DEV_INITRD is not set
@@ -81,7 +89,6 @@ CONFIG_BUG=y
 CONFIG_ANON_INODES=y
 CONFIG_EPOLL=y
 CONFIG_SIGNALFD=y
-CONFIG_TIMERFD=y
 CONFIG_EVENTFD=y
 CONFIG_SHMEM=y
 # CONFIG_VM_EVENT_COUNTERS is not set
@@ -158,11 +165,17 @@ CONFIG_NO_UCODE_PATCH=y
 # CONFIG_CPU_FREQ is not set
 # CONFIG_CPM2 is not set
 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=y
+CONFIG_NO_HZ=y
+CONFIG_HIGH_RES_TIMERS=y
+CONFIG_GENERIC_CLOCKEVENTS_BUILD=y
 CONFIG_HZ_100=y
 # CONFIG_HZ_250 is not set
 # CONFIG_HZ_300 is not set
@@ -174,6 +187,7 @@ CONFIG_PREEMPT_NONE=y
 CONFIG_BINFMT_ELF=y
 # CONFIG_BINFMT_MISC is not set
 # CONFIG_MATH_EMULATION is not set
+CONFIG_8XX_MINIMAL_FPEMU=y
 CONFIG_ARCH_ENABLE_MEMORY_HOTPLUG=y
 CONFIG_ARCH_FLATMEM_ENABLE=y
 CONFIG_ARCH_POPULATES_NODE_MAP=y
@@ -184,6 +198,7 @@ CONFIG_FLATMEM_MANUAL=y
 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
@@ -192,6 +207,8 @@ CONFIG_VIRT_TO_BUS=y
 CONFIG_PROC_DEVICETREE=y
 # CONFIG_CMDLINE_BOOL is not set
 # CONFIG_PM is not set
+CONFIG_SUSPEND_UP_POSSIBLE=y
+CONFIG_HIBERNATION_UP_POSSIBLE=y
 # CONFIG_SECCOMP is not set
 CONFIG_WANT_DEVICE_TREE=y
 CONFIG_DEVICE_TREE="mpc885ads.dts"
@@ -207,10 +224,6 @@ CONFIG_FSL_SOC=y
 # CONFIG_PCI_SYSCALL is not set
 # CONFIG_PCI_QSPAN is not set
 # CONFIG_ARCH_SUPPORTS_MSI is not set
-
-#
-# PCCARD (PCMCIA/CardBus) support
-#
 # CONFIG_PCCARD is not set
 
 #
@@ -225,7 +238,7 @@ CONFIG_HIGHMEM_START=0xfe000000
 CONFIG_LOWMEM_SIZE=0x30000000
 CONFIG_KERNEL_START=0xc0000000
 CONFIG_TASK_SIZE=0x80000000
-CONFIG_CONSISTENT_START=0xff100000
+CONFIG_CONSISTENT_START=0xfd000000
 CONFIG_CONSISTENT_SIZE=0x00200000
 CONFIG_BOOT_LOAD=0x00400000
 
@@ -262,6 +275,7 @@ CONFIG_SYN_COOKIES=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
@@ -287,10 +301,6 @@ CONFIG_DEFAULT_TCP_CONG="cubic"
 # CONFIG_LAPB is not set
 # CONFIG_ECONET is not set
 # CONFIG_WAN_ROUTER is not set
-
-#
-# QoS and/or fair queueing
-#
 # CONFIG_NET_SCHED is not set
 
 #
@@ -319,6 +329,7 @@ CONFIG_DEFAULT_TCP_CONG="cubic"
 #
 # Generic Driver Options
 #
+CONFIG_UEVENT_HELPER_PATH="/sbin/hotplug"
 CONFIG_STANDALONE=y
 CONFIG_PREVENT_FIRMWARE_BUILD=y
 # CONFIG_FW_LOADER is not set
@@ -342,6 +353,7 @@ CONFIG_MTD_BLOCK=y
 # 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
@@ -425,6 +437,7 @@ CONFIG_NETDEVICES=y
 # CONFIG_MACVLAN is not set
 # CONFIG_EQUALIZER is not set
 # CONFIG_TUN is not set
+# CONFIG_VETH is not set
 CONFIG_PHYLIB=y
 
 #
@@ -443,9 +456,15 @@ CONFIG_DAVICOM_PHY=y
 # 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_FS_ENET=y
 # CONFIG_FS_ENET_HAS_SCC is not set
 CONFIG_FS_ENET_HAS_FEC=y
+CONFIG_FS_ENET_MDIO_FEC=y
 # CONFIG_NETDEV_1000 is not set
 # CONFIG_NETDEV_10000 is not set
 
@@ -503,7 +522,6 @@ CONFIG_SERIAL_CPM_SMC2=y
 CONFIG_UNIX98_PTYS=y
 # CONFIG_LEGACY_PTYS is not set
 # CONFIG_IPMI_HANDLER is not set
-# CONFIG_WATCHDOG is not set
 CONFIG_HW_RANDOM=y
 # CONFIG_NVRAM is not set
 CONFIG_GEN_RTC=y
@@ -521,6 +539,13 @@ CONFIG_GEN_RTC=y
 # 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
@@ -537,16 +562,15 @@ CONFIG_DAB=y
 #
 # 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
-# CONFIG_VGASTATE is not set
-# CONFIG_VIDEO_OUTPUT_CONTROL is not set
-# CONFIG_FB is not set
-# CONFIG_FB_IBM_GXT4500 is not set
 
 #
 # Sound
@@ -558,19 +582,6 @@ CONFIG_DAB=y
 # CONFIG_EDAC is not set
 # CONFIG_RTC_CLASS is not set
 
-#
-# DMA Engine support
-#
-# CONFIG_DMA_ENGINE is not set
-
-#
-# DMA Clients
-#
-
-#
-# DMA Devices
-#
-
 #
 # Userspace I/O
 #
@@ -620,7 +631,6 @@ CONFIG_SYSFS=y
 CONFIG_TMPFS=y
 # CONFIG_TMPFS_POSIX_ACL is not set
 # CONFIG_HUGETLB_PAGE is not set
-CONFIG_RAMFS=y
 # CONFIG_CONFIGFS_FS is not set
 
 #
@@ -640,10 +650,7 @@ CONFIG_CRAMFS=y
 # CONFIG_QNX4FS_FS is not set
 # CONFIG_SYSV_FS is not set
 # CONFIG_UFS_FS is not set
-
-#
-# Network File Systems
-#
+CONFIG_NETWORK_FILESYSTEMS=y
 CONFIG_NFS_FS=y
 CONFIG_NFS_V3=y
 # CONFIG_NFS_V3_ACL is not set
@@ -685,15 +692,7 @@ CONFIG_MSDOS_PARTITION=y
 # CONFIG_KARMA_PARTITION is not set
 # CONFIG_EFI_PARTITION is not set
 # CONFIG_SYSV68_PARTITION is not set
-
-#
-# Native Language Support
-#
 # CONFIG_NLS is not set
-
-#
-# Distributed Lock Manager
-#
 # CONFIG_DLM is not set
 # CONFIG_UCC_SLOW is not set
 
@@ -710,16 +709,13 @@ CONFIG_ZLIB_INFLATE=y
 CONFIG_HAS_IOMEM=y
 CONFIG_HAS_IOPORT=y
 CONFIG_HAS_DMA=y
-
-#
-# Instrumentation Support
-#
-# CONFIG_PROFILING is not set
+# CONFIG_INSTRUMENTATION 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
@@ -741,8 +737,11 @@ CONFIG_DEBUG_BUGVERBOSE=y
 CONFIG_DEBUG_INFO=y
 # 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_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
@@ -755,4 +754,7 @@ CONFIG_FORCED_INLINING=y
 #
 # 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
+CONFIG_PPC_LIB_RHEAP=y
index 78c968aade4ed2617866b0efecfdad548557156d..292de3d6ce9214d9260d08aa88d91662bed51b50 100644 (file)
@@ -1,7 +1,7 @@
 #
 # Automatically generated make config: don't edit
-# Linux kernel version: 2.6.24-rc2
-# Tue Nov  6 23:23:50 2007
+# Linux kernel version: 2.6.24-rc4
+# Thu Dec  6 16:49:03 2007
 #
 CONFIG_PPC64=y
 
@@ -68,6 +68,7 @@ CONFIG_SYSVIPC_SYSCTL=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=17
@@ -211,6 +212,7 @@ CONFIG_PREEMPT_NONE=y
 CONFIG_BINFMT_ELF=y
 # CONFIG_BINFMT_MISC is not set
 CONFIG_FORCE_MAX_ZONEORDER=9
+CONFIG_HUGETLB_PAGE_SIZE_VARIABLE=y
 CONFIG_IOMMU_VMERGE=y
 CONFIG_ARCH_ENABLE_MEMORY_HOTPLUG=y
 # CONFIG_KEXEC is not set
@@ -774,7 +776,6 @@ CONFIG_PASEMI_MAC=y
 # CONFIG_USB_KAWETH is not set
 # CONFIG_USB_PEGASUS is not set
 # CONFIG_USB_RTL8150 is not set
-# CONFIG_USB_USBNET_MII is not set
 # CONFIG_USB_USBNET is not set
 # CONFIG_NET_PCMCIA is not set
 # CONFIG_WAN is not set
@@ -958,6 +959,7 @@ CONFIG_HWMON_VID=y
 # CONFIG_SENSORS_ADT7470 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
index 8e5988c4a1646042d8516303828524b8b3ad45dc..5416be4419bba49e0a0084e81aa3f122c4a73916 100644 (file)
@@ -1,7 +1,7 @@
 #
 # Automatically generated make config: don't edit
-# Linux kernel version: 2.6.23-rc4
-# Thu Aug 30 16:44:46 2007
+# Linux kernel version: 2.6.24-rc4
+# Thu Dec  6 16:49:05 2007
 #
 # CONFIG_PPC64 is not set
 
@@ -21,8 +21,13 @@ 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_IRQ_PER_CPU=y
 CONFIG_RWSEM_XCHGADD_ALGORITHM=y
@@ -63,10 +68,15 @@ 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=y
 CONFIG_IKCONFIG_PROC=y
 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
@@ -87,7 +97,6 @@ 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
@@ -127,7 +136,6 @@ CONFIG_DEFAULT_IOSCHED="anticipatory"
 # Platform support
 #
 CONFIG_PPC_MULTIPLATFORM=y
-# CONFIG_EMBEDDED6xx is not set
 # CONFIG_PPC_82xx is not set
 # CONFIG_PPC_83xx is not set
 # CONFIG_PPC_86xx is not set
@@ -141,6 +149,7 @@ CONFIG_PPC_PMAC=y
 # CONFIG_PPC_CELL is not set
 # CONFIG_PPC_CELL_NATIVE is not set
 # CONFIG_PQ2ADS is not set
+# CONFIG_EMBEDDED6xx is not set
 CONFIG_PPC_NATIVE=y
 CONFIG_MPIC=y
 # CONFIG_MPIC_WEIRD is not set
@@ -158,6 +167,8 @@ CONFIG_CPU_FREQ_STAT=y
 # CONFIG_CPU_FREQ_STAT_DETAILS is not set
 CONFIG_CPU_FREQ_DEFAULT_GOV_PERFORMANCE=y
 # CONFIG_CPU_FREQ_DEFAULT_GOV_USERSPACE is not set
+# CONFIG_CPU_FREQ_DEFAULT_GOV_ONDEMAND is not set
+# CONFIG_CPU_FREQ_DEFAULT_GOV_CONSERVATIVE is not set
 CONFIG_CPU_FREQ_GOV_PERFORMANCE=y
 CONFIG_CPU_FREQ_GOV_POWERSAVE=y
 CONFIG_CPU_FREQ_GOV_USERSPACE=y
@@ -177,6 +188,10 @@ CONFIG_PPC601_SYNC_FIX=y
 # 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
@@ -198,6 +213,7 @@ CONFIG_FLATMEM_MANUAL=y
 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
@@ -210,7 +226,9 @@ CONFIG_PM=y
 CONFIG_PM_DEBUG=y
 # CONFIG_PM_VERBOSE is not set
 CONFIG_PM_SLEEP=y
+CONFIG_SUSPEND_UP_POSSIBLE=y
 CONFIG_SUSPEND=y
+CONFIG_HIBERNATION_UP_POSSIBLE=y
 CONFIG_HIBERNATION=y
 CONFIG_PM_STD_PARTITION=""
 CONFIG_APM_EMULATION=y
@@ -230,11 +248,8 @@ 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
-
-#
-# PCCARD (PCMCIA/CardBus) support
-#
 CONFIG_PCCARD=m
 # CONFIG_PCMCIA_DEBUG is not set
 CONFIG_PCMCIA=m
@@ -267,7 +282,7 @@ CONFIG_PCCARD_NONSTATIC=m
 CONFIG_HIGHMEM_START=0xfe000000
 CONFIG_LOWMEM_SIZE=0x30000000
 CONFIG_KERNEL_START=0xc0000000
-CONFIG_TASK_SIZE=0x80000000
+CONFIG_TASK_SIZE=0xc0000000
 CONFIG_BOOT_LOAD=0x00800000
 
 #
@@ -305,6 +320,7 @@ CONFIG_INET_ESP=y
 # CONFIG_INET_XFRM_MODE_TRANSPORT is not set
 # CONFIG_INET_XFRM_MODE_TUNNEL is not set
 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
@@ -372,6 +388,7 @@ CONFIG_NETFILTER_XT_MATCH_SCTP=m
 # CONFIG_NETFILTER_XT_MATCH_STATISTIC is not set
 CONFIG_NETFILTER_XT_MATCH_STRING=m
 CONFIG_NETFILTER_XT_MATCH_TCPMSS=m
+CONFIG_NETFILTER_XT_MATCH_TIME=m
 CONFIG_NETFILTER_XT_MATCH_U32=m
 # CONFIG_NETFILTER_XT_MATCH_HASHLIMIT is not set
 
@@ -448,13 +465,9 @@ CONFIG_IP_DCCP_CCID3_RTO=100
 # CONFIG_LAPB is not set
 # CONFIG_ECONET is not set
 # CONFIG_WAN_ROUTER is not set
-
-#
-# QoS and/or fair queueing
-#
 # CONFIG_NET_SCHED is not set
-CONFIG_NET_SCH_FIFO=y
 CONFIG_NET_CLS_ROUTE=y
+CONFIG_NET_SCH_FIFO=y
 
 #
 # Network testing
@@ -492,6 +505,8 @@ CONFIG_IRTTY_SIR=m
 #
 # CONFIG_DONGLE is not set
 # CONFIG_KINGSUN_DONGLE is not set
+# CONFIG_KSDAZZLE_DONGLE is not set
+# CONFIG_KS959_DONGLE is not set
 
 #
 # Old SIR device drivers
@@ -545,8 +560,10 @@ CONFIG_BT_HCIBFUSB=m
 # Wireless
 #
 CONFIG_CFG80211=m
+CONFIG_NL80211=y
 CONFIG_WIRELESS_EXT=y
 CONFIG_MAC80211=m
+CONFIG_MAC80211_RCSIMPLE=y
 CONFIG_MAC80211_LEDS=y
 # CONFIG_MAC80211_DEBUG is not set
 CONFIG_IEEE80211=m
@@ -565,6 +582,7 @@ CONFIG_IEEE80211_CRYPT_TKIP=m
 #
 # Generic Driver Options
 #
+CONFIG_UEVENT_HELPER_PATH="/sbin/hotplug"
 # CONFIG_STANDALONE is not set
 CONFIG_PREVENT_FIRMWARE_BUILD=y
 CONFIG_FW_LOADER=y
@@ -622,6 +640,11 @@ CONFIG_IDE_PROC_FS=y
 # IDE chipset support/bugfixes
 #
 # CONFIG_IDE_GENERIC is not set
+# CONFIG_BLK_DEV_PLATFORM is not set
+
+#
+# PCI IDE chipsets support
+#
 CONFIG_BLK_DEV_IDEPCI=y
 CONFIG_IDEPCI_SHARE_IRQ=y
 CONFIG_IDEPCI_PCIBUS_ORDER=y
@@ -629,8 +652,6 @@ CONFIG_IDEPCI_PCIBUS_ORDER=y
 CONFIG_BLK_DEV_GENERIC=y
 # CONFIG_BLK_DEV_OPTI621 is not set
 CONFIG_BLK_DEV_IDEDMA_PCI=y
-# CONFIG_BLK_DEV_IDEDMA_FORCED is not set
-# CONFIG_IDEDMA_ONLYDISK is not set
 # CONFIG_BLK_DEV_AEC62XX is not set
 # CONFIG_BLK_DEV_ALI15X3 is not set
 # CONFIG_BLK_DEV_AMD74XX is not set
@@ -661,7 +682,7 @@ CONFIG_BLK_DEV_IDE_PMAC_ATA100FIRST=y
 CONFIG_BLK_DEV_IDEDMA_PMAC=y
 # CONFIG_IDE_ARM is not set
 CONFIG_BLK_DEV_IDEDMA=y
-# CONFIG_IDEDMA_IVB is not set
+CONFIG_IDE_ARCH_OBSOLETE_INIT=y
 # CONFIG_BLK_DEV_HD is not set
 
 #
@@ -702,6 +723,7 @@ CONFIG_SCSI_FC_ATTRS=y
 # CONFIG_SCSI_ISCSI_ATTRS is not set
 # CONFIG_SCSI_SAS_ATTRS is not set
 # CONFIG_SCSI_SAS_LIBSAS is not set
+# CONFIG_SCSI_SRP_ATTRS is not set
 CONFIG_SCSI_LOWLEVEL=y
 # CONFIG_ISCSI_TCP is not set
 # CONFIG_BLK_DEV_3W_XXXX_RAID is not set
@@ -718,6 +740,7 @@ CONFIG_SCSI_AIC7XXX_OLD=m
 # 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
@@ -769,14 +792,8 @@ CONFIG_DM_MIRROR=m
 CONFIG_DM_ZERO=m
 # CONFIG_DM_MULTIPATH is not set
 # CONFIG_DM_DELAY is not set
-
-#
-# Fusion MPT device support
-#
+# CONFIG_DM_UEVENT is not set
 # CONFIG_FUSION is not set
-# CONFIG_FUSION_SPI is not set
-# CONFIG_FUSION_FC is not set
-# CONFIG_FUSION_SAS is not set
 
 #
 # IEEE 1394 (FireWire) support
@@ -830,6 +847,8 @@ CONFIG_DUMMY=m
 # CONFIG_MACVLAN is not set
 # CONFIG_EQUALIZER is not set
 CONFIG_TUN=m
+# CONFIG_VETH is not set
+# CONFIG_IP1000 is not set
 # CONFIG_ARCNET is not set
 # CONFIG_PHYLIB is not set
 CONFIG_NET_ETHERNET=y
@@ -843,6 +862,10 @@ CONFIG_SUNGEM=y
 # 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=y
 # CONFIG_PCNET32_NAPI is not set
@@ -850,7 +873,6 @@ CONFIG_PCNET32=y
 # CONFIG_ADAPTEC_STARFIRE is not set
 # CONFIG_B44 is not set
 # CONFIG_FORCEDETH is not set
-# CONFIG_DGRS is not set
 # CONFIG_EEPRO100 is not set
 # CONFIG_E100 is not set
 # CONFIG_FEALNX is not set
@@ -868,6 +890,7 @@ 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
@@ -875,6 +898,7 @@ CONFIG_NETDEV_1000=y
 # 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
@@ -884,11 +908,14 @@ CONFIG_NETDEV_1000=y
 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
 
 #
@@ -907,15 +934,41 @@ CONFIG_APPLE_AIRPORT=m
 # CONFIG_TMD_HERMES is not set
 # CONFIG_NORTEL_HERMES is not set
 CONFIG_PCI_HERMES=m
-# CONFIG_ATMEL is not set
 CONFIG_PCMCIA_HERMES=m
 # CONFIG_PCMCIA_SPECTRUM is not set
+# CONFIG_ATMEL is not set
 # CONFIG_AIRO_CS is not set
 # CONFIG_PCMCIA_WL3501 is not set
 CONFIG_PRISM54=m
 # CONFIG_USB_ZD1201 is not set
 # CONFIG_RTL8187 is not set
+# CONFIG_ADM8211 is not set
+CONFIG_P54_COMMON=m
+# CONFIG_P54_USB is not set
+# CONFIG_P54_PCI is not set
+# CONFIG_IWLWIFI is not set
 # CONFIG_HOSTAP is not set
+CONFIG_B43=m
+CONFIG_B43_PCI_AUTOSELECT=y
+CONFIG_B43_PCICORE_AUTOSELECT=y
+# CONFIG_B43_PCMCIA is not set
+CONFIG_B43_LEDS=y
+# CONFIG_B43_DEBUG is not set
+CONFIG_B43_DMA=y
+CONFIG_B43_PIO=y
+CONFIG_B43_DMA_AND_PIO_MODE=y
+# CONFIG_B43_DMA_MODE is not set
+# CONFIG_B43_PIO_MODE is not set
+CONFIG_B43LEGACY=m
+CONFIG_B43LEGACY_PCI_AUTOSELECT=y
+CONFIG_B43LEGACY_PCICORE_AUTOSELECT=y
+CONFIG_B43LEGACY_DEBUG=y
+CONFIG_B43LEGACY_DMA=y
+CONFIG_B43LEGACY_PIO=y
+CONFIG_B43LEGACY_DMA_AND_PIO_MODE=y
+# CONFIG_B43LEGACY_DMA_MODE is not set
+# CONFIG_B43LEGACY_PIO_MODE is not set
+# CONFIG_RT2X00 is not set
 
 #
 # USB Network Adapters
@@ -924,7 +977,6 @@ CONFIG_PRISM54=m
 # CONFIG_USB_KAWETH is not set
 # CONFIG_USB_PEGASUS is not set
 # CONFIG_USB_RTL8150 is not set
-CONFIG_USB_USBNET_MII=m
 CONFIG_USB_USBNET=m
 CONFIG_USB_NET_AX8817X=m
 CONFIG_USB_NET_CDCETHER=m
@@ -975,7 +1027,6 @@ CONFIG_INPUT_MOUSEDEV_PSAUX=y
 CONFIG_INPUT_MOUSEDEV_SCREEN_X=1024
 CONFIG_INPUT_MOUSEDEV_SCREEN_Y=768
 # CONFIG_INPUT_JOYDEV is not set
-# CONFIG_INPUT_TSDEV is not set
 CONFIG_INPUT_EVDEV=y
 # CONFIG_INPUT_EVBUG is not set
 
@@ -1034,29 +1085,19 @@ CONFIG_SERIAL_8250_RUNTIME_UARTS=4
 # CONFIG_SERIAL_UARTLITE is not set
 CONFIG_SERIAL_CORE=m
 CONFIG_SERIAL_PMACZILOG=m
+CONFIG_SERIAL_PMACZILOG_TTYS=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_WATCHDOG is not set
-# CONFIG_HW_RANDOM is not set
+CONFIG_HW_RANDOM=m
 CONFIG_NVRAM=y
 CONFIG_GEN_RTC=y
 # CONFIG_GEN_RTC_X is not set
 # CONFIG_R3964 is not set
 # CONFIG_APPLICOM is not set
-CONFIG_AGP=m
-CONFIG_AGP_UNINORTH=m
-CONFIG_DRM=m
-# CONFIG_DRM_TDFX is not set
-CONFIG_DRM_R128=m
-CONFIG_DRM_RADEON=m
-# CONFIG_DRM_MGA is not set
-# CONFIG_DRM_SIS is not set
-# CONFIG_DRM_VIA is not set
-# CONFIG_DRM_SAVAGE is not set
 
 #
 # PCMCIA character devices
@@ -1138,6 +1179,20 @@ CONFIG_APM_POWER=y
 # CONFIG_BATTERY_DS2760 is not set
 CONFIG_BATTERY_PMU=y
 # CONFIG_HWMON is not set
+# CONFIG_WATCHDOG is not set
+
+#
+# Sonics Silicon Backplane
+#
+CONFIG_SSB_POSSIBLE=y
+CONFIG_SSB=m
+CONFIG_SSB_PCIHOST_POSSIBLE=y
+CONFIG_SSB_PCIHOST=y
+CONFIG_SSB_PCMCIAHOST_POSSIBLE=y
+# CONFIG_SSB_PCMCIAHOST is not set
+# CONFIG_SSB_DEBUG is not set
+CONFIG_SSB_DRIVER_PCICORE_POSSIBLE=y
+CONFIG_SSB_DRIVER_PCICORE=y
 
 #
 # Multifunction device drivers
@@ -1154,18 +1209,16 @@ CONFIG_BATTERY_PMU=y
 #
 # Graphics support
 #
-CONFIG_BACKLIGHT_LCD_SUPPORT=y
-CONFIG_LCD_CLASS_DEVICE=m
-CONFIG_BACKLIGHT_CLASS_DEVICE=y
-
-#
-# Display device support
-#
-CONFIG_DISPLAY_SUPPORT=y
-
-#
-# Display hardware drivers
-#
+CONFIG_AGP=m
+CONFIG_AGP_UNINORTH=m
+CONFIG_DRM=m
+# CONFIG_DRM_TDFX is not set
+CONFIG_DRM_R128=m
+CONFIG_DRM_RADEON=m
+# 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=y
 # CONFIG_VIDEO_OUTPUT_CONTROL is not set
 CONFIG_FB=y
@@ -1174,6 +1227,7 @@ CONFIG_FB_DDC=y
 CONFIG_FB_CFB_FILLRECT=y
 CONFIG_FB_CFB_COPYAREA=y
 CONFIG_FB_CFB_IMAGEBLIT=y
+# CONFIG_FB_CFB_REV_PIXELS_IN_BYTE is not set
 # CONFIG_FB_SYS_FILLRECT is not set
 # CONFIG_FB_SYS_COPYAREA is not set
 # CONFIG_FB_SYS_IMAGEBLIT is not set
@@ -1199,6 +1253,7 @@ CONFIG_FB_CT65550=y
 # CONFIG_FB_ASILIANT is not set
 CONFIG_FB_IMSTT=y
 # CONFIG_FB_VGA16 is not set
+# CONFIG_FB_UVESA is not set
 # CONFIG_FB_S1D13XXX is not set
 CONFIG_FB_NVIDIA=y
 CONFIG_FB_NVIDIA_I2C=y
@@ -1236,6 +1291,19 @@ CONFIG_FB_3DFX=y
 # CONFIG_FB_PM3 is not set
 # CONFIG_FB_IBM_GXT4500 is not set
 # CONFIG_FB_VIRTUAL is not set
+CONFIG_BACKLIGHT_LCD_SUPPORT=y
+CONFIG_LCD_CLASS_DEVICE=m
+CONFIG_BACKLIGHT_CLASS_DEVICE=y
+# CONFIG_BACKLIGHT_CORGI is not set
+
+#
+# Display device support
+#
+CONFIG_DISPLAY_SUPPORT=y
+
+#
+# Display hardware drivers
+#
 
 #
 # Console display driver support
@@ -1399,6 +1467,7 @@ CONFIG_SND_USB_AUDIO=m
 CONFIG_HID_SUPPORT=y
 CONFIG_HID=y
 # CONFIG_HID_DEBUG is not set
+# CONFIG_HIDRAW is not set
 
 #
 # USB Input Devices
@@ -1488,6 +1557,7 @@ CONFIG_USB_SERIAL=m
 # 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_WHITEHEAT is not set
 # CONFIG_USB_SERIAL_DIGI_ACCELEPORT is not set
 # CONFIG_USB_SERIAL_CP2101 is not set
@@ -1586,19 +1656,6 @@ CONFIG_LEDS_TRIGGER_IDE_DISK=y
 # CONFIG_EDAC is not set
 # CONFIG_RTC_CLASS is not set
 
-#
-# DMA Engine support
-#
-# CONFIG_DMA_ENGINE is not set
-
-#
-# DMA Clients
-#
-
-#
-# DMA Devices
-#
-
 #
 # Userspace I/O
 #
@@ -1616,7 +1673,6 @@ 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 is not set
 # CONFIG_JFS_FS is not set
@@ -1663,7 +1719,6 @@ CONFIG_SYSFS=y
 CONFIG_TMPFS=y
 # CONFIG_TMPFS_POSIX_ACL is not set
 # CONFIG_HUGETLB_PAGE is not set
-CONFIG_RAMFS=y
 # CONFIG_CONFIGFS_FS is not set
 
 #
@@ -1682,10 +1737,7 @@ CONFIG_HFSPLUS_FS=m
 # CONFIG_QNX4FS_FS is not set
 # CONFIG_SYSV_FS is not set
 # CONFIG_UFS_FS is not set
-
-#
-# Network File Systems
-#
+CONFIG_NETWORK_FILESYSTEMS=y
 CONFIG_NFS_FS=y
 CONFIG_NFS_V3=y
 CONFIG_NFS_V3_ACL=y
@@ -1735,10 +1787,6 @@ CONFIG_MSDOS_PARTITION=y
 # CONFIG_KARMA_PARTITION is not set
 # CONFIG_EFI_PARTITION is not set
 # CONFIG_SYSV68_PARTITION is not set
-
-#
-# Native Language Support
-#
 CONFIG_NLS=y
 CONFIG_NLS_DEFAULT="iso8859-1"
 CONFIG_NLS_CODEPAGE_437=m
@@ -1779,10 +1827,6 @@ CONFIG_NLS_ISO8859_1=m
 # CONFIG_NLS_KOI8_R is not set
 # CONFIG_NLS_KOI8_U is not set
 CONFIG_NLS_UTF8=m
-
-#
-# Distributed Lock Manager
-#
 # CONFIG_DLM is not set
 # CONFIG_UCC_SLOW is not set
 
@@ -1806,18 +1850,17 @@ CONFIG_PLIST=y
 CONFIG_HAS_IOMEM=y
 CONFIG_HAS_IOPORT=y
 CONFIG_HAS_DMA=y
-
-#
-# Instrumentation Support
-#
+CONFIG_INSTRUMENTATION=y
 CONFIG_PROFILING=y
 CONFIG_OPROFILE=y
 # 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
@@ -1841,9 +1884,12 @@ 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_FORCED_INLINING is not set
+# 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_DEBUGGER=y
@@ -1859,6 +1905,7 @@ CONFIG_BOOTX_TEXT=y
 #
 # 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
@@ -1879,6 +1926,7 @@ 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_CRYPTD is not set
 CONFIG_CRYPTO_DES=y
 # CONFIG_CRYPTO_FCRYPT is not set
@@ -1893,9 +1941,12 @@ CONFIG_CRYPTO_TEA=m
 CONFIG_CRYPTO_ARC4=m
 CONFIG_CRYPTO_KHAZAD=m
 CONFIG_CRYPTO_ANUBIS=m
+# CONFIG_CRYPTO_SEED 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 is not set
+# CONFIG_CRYPTO_AUTHENC is not set
 CONFIG_CRYPTO_HW=y
+# CONFIG_PPC_CLOCK is not set
index 3e90c835fe12ad21a3938720d18fff5509e6d007..5760b9f033ea794ad9ff5c129bccd94242d53d61 100644 (file)
@@ -1,7 +1,7 @@
 #
 # Automatically generated make config: don't edit
-# Linux kernel version: 2.6.24-rc2
-# Tue Nov  6 23:43:56 2007
+# Linux kernel version: 2.6.24-rc4
+# Thu Dec  6 16:49:07 2007
 #
 CONFIG_PPC64=y
 
@@ -73,6 +73,7 @@ CONFIG_TASKSTATS=y
 CONFIG_TASK_DELAY_ACCT=y
 # CONFIG_TASK_XACCT is not set
 # CONFIG_USER_NS is not set
+# CONFIG_PID_NS is not set
 # CONFIG_AUDIT is not set
 CONFIG_IKCONFIG=y
 CONFIG_IKCONFIG_PROC=y
@@ -80,11 +81,11 @@ CONFIG_LOG_BUF_SHIFT=17
 CONFIG_CGROUPS=y
 # CONFIG_CGROUP_DEBUG is not set
 # CONFIG_CGROUP_NS is not set
-# CONFIG_CGROUP_CPUACCT is not set
 CONFIG_CPUSETS=y
 CONFIG_FAIR_GROUP_SCHED=y
 CONFIG_FAIR_USER_SCHED=y
 # CONFIG_FAIR_CGROUP_SCHED is not set
+# CONFIG_CGROUP_CPUACCT is not set
 CONFIG_SYSFS_DEPRECATED=y
 CONFIG_PROC_PID_CPUSET=y
 CONFIG_RELAY=y
@@ -258,6 +259,7 @@ CONFIG_PREEMPT_NONE=y
 CONFIG_BINFMT_ELF=y
 CONFIG_BINFMT_MISC=m
 CONFIG_FORCE_MAX_ZONEORDER=13
+CONFIG_HUGETLB_PAGE_SIZE_VARIABLE=y
 CONFIG_IOMMU_VMERGE=y
 CONFIG_HOTPLUG_CPU=y
 CONFIG_ARCH_ENABLE_MEMORY_HOTPLUG=y
@@ -955,7 +957,6 @@ CONFIG_IBMOL=y
 # CONFIG_USB_KAWETH is not set
 # CONFIG_USB_PEGASUS is not set
 # CONFIG_USB_RTL8150 is not set
-# CONFIG_USB_USBNET_MII is not set
 # CONFIG_USB_USBNET is not set
 # CONFIG_NET_PCMCIA is not set
 # CONFIG_WAN is not set
index 9191f557b044fcb34fac310d22806b6ac2ec9ea4..142d206d6870e4a7db3448f07bf5e3d7d43fddfa 100644 (file)
@@ -1,7 +1,7 @@
 #
 # Automatically generated make config: don't edit
-# Linux kernel version: 2.6.23-rc4
-# Thu Aug 30 11:58:17 2007
+# Linux kernel version: 2.6.24-rc4
+# Thu Dec  6 16:49:09 2007
 #
 # CONFIG_PPC64 is not set
 
@@ -20,8 +20,13 @@ 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_IRQ_PER_CPU=y
 CONFIG_RWSEM_XCHGADD_ALGORITHM=y
@@ -63,6 +68,8 @@ CONFIG_SYSVIPC_SYSCTL=y
 CONFIG_IKCONFIG=y
 CONFIG_IKCONFIG_PROC=y
 CONFIG_LOG_BUF_SHIFT=14
+# CONFIG_CGROUPS is not set
+# CONFIG_FAIR_GROUP_SCHED is not set
 # CONFIG_SYSFS_DEPRECATED is not set
 # CONFIG_RELAY is not set
 CONFIG_BLK_DEV_INITRD=y
@@ -82,7 +89,6 @@ 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
@@ -116,7 +122,6 @@ CONFIG_DEFAULT_IOSCHED="anticipatory"
 # Platform support
 #
 # CONFIG_PPC_MULTIPLATFORM is not set
-# CONFIG_EMBEDDED6xx is not set
 CONFIG_PPC_82xx=y
 # CONFIG_PPC_83xx is not set
 # CONFIG_PPC_86xx is not set
@@ -126,7 +131,6 @@ CONFIG_PPC_82xx=y
 # CONFIG_PPC_CELL_NATIVE is not set
 # CONFIG_MPC8272_ADS is not set
 CONFIG_PQ2FADS=y
-# CONFIG_EP8248E is not set
 CONFIG_PQ2ADS=y
 CONFIG_8260=y
 CONFIG_PQ2_ADS_PCI_PIC=y
@@ -149,6 +153,10 @@ CONFIG_CPM=y
 # 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
@@ -165,6 +173,7 @@ CONFIG_ARCH_POPULATES_NODE_MAP=y
 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
@@ -173,6 +182,8 @@ CONFIG_VIRT_TO_BUS=y
 CONFIG_PROC_DEVICETREE=y
 # CONFIG_CMDLINE_BOOL is not set
 # CONFIG_PM is not set
+CONFIG_SUSPEND_UP_POSSIBLE=y
+CONFIG_HIBERNATION_UP_POSSIBLE=y
 CONFIG_SECCOMP=y
 CONFIG_WANT_DEVICE_TREE=y
 CONFIG_DEVICE_TREE="pq2fads.dts"
@@ -192,11 +203,8 @@ CONFIG_PCI_8260=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
-
-#
-# PCCARD (PCMCIA/CardBus) support
-#
 # CONFIG_PCCARD is not set
 
 #
@@ -210,7 +218,7 @@ CONFIG_ARCH_SUPPORTS_MSI=y
 CONFIG_HIGHMEM_START=0xfe000000
 CONFIG_LOWMEM_SIZE=0x30000000
 CONFIG_KERNEL_START=0xc0000000
-CONFIG_TASK_SIZE=0x80000000
+CONFIG_TASK_SIZE=0xc0000000
 CONFIG_BOOT_LOAD=0x00400000
 
 #
@@ -247,6 +255,7 @@ CONFIG_INET_TUNNEL=y
 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
@@ -290,10 +299,6 @@ CONFIG_NETFILTER=y
 # CONFIG_LLC2 is not set
 # CONFIG_IPX is not set
 # CONFIG_ATALK is not set
-
-#
-# QoS and/or fair queueing
-#
 # CONFIG_NET_SCHED is not set
 
 #
@@ -319,6 +324,7 @@ CONFIG_NETFILTER=y
 #
 # Generic Driver Options
 #
+CONFIG_UEVENT_HELPER_PATH="/sbin/hotplug"
 CONFIG_STANDALONE=y
 CONFIG_PREVENT_FIRMWARE_BUILD=y
 # CONFIG_FW_LOADER is not set
@@ -342,6 +348,7 @@ CONFIG_MTD_BLOCK=y
 # 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
@@ -380,6 +387,7 @@ CONFIG_MTD_CFI_UTIL=y
 # CONFIG_MTD_PHYSMAP is not set
 CONFIG_MTD_PHYSMAP_OF=y
 # CONFIG_MTD_SBC8240 is not set
+# CONFIG_MTD_INTEL_VR_NOR is not set
 # CONFIG_MTD_PLATRAM is not set
 
 #
@@ -442,10 +450,40 @@ CONFIG_IDE_PROC_FS=y
 # IDE chipset support/bugfixes
 #
 # CONFIG_IDE_GENERIC is not set
-# CONFIG_BLK_DEV_IDEPCI is not set
+# CONFIG_BLK_DEV_PLATFORM is not set
+
+#
+# PCI IDE chipsets support
+#
 # CONFIG_IDEPCI_PCIBUS_ORDER is not set
+# CONFIG_BLK_DEV_GENERIC 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_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_IDE_ARM is not set
 # CONFIG_BLK_DEV_IDEDMA is not set
+CONFIG_IDE_ARCH_OBSOLETE_INIT=y
 # CONFIG_BLK_DEV_HD is not set
 
 #
@@ -457,10 +495,6 @@ CONFIG_IDE_PROC_FS=y
 # CONFIG_SCSI_NETLINK is not set
 # CONFIG_ATA is not set
 # CONFIG_MD is not set
-
-#
-# Fusion MPT device support
-#
 # CONFIG_FUSION is not set
 
 #
@@ -479,6 +513,7 @@ CONFIG_NETDEVICES=y
 # CONFIG_BONDING is not set
 # CONFIG_EQUALIZER is not set
 CONFIG_TUN=y
+# CONFIG_VETH is not set
 # CONFIG_ARCNET is not set
 CONFIG_PHYLIB=y
 
@@ -504,20 +539,28 @@ CONFIG_MII=y
 # 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 is not set
+# CONFIG_E1000E is not set
 # CONFIG_NS83820 is not set
 # CONFIG_HAMACHI 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
@@ -525,11 +568,14 @@ CONFIG_NETDEV_1000=y
 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
 
 #
@@ -567,7 +613,6 @@ CONFIG_INPUT_MOUSEDEV_PSAUX=y
 CONFIG_INPUT_MOUSEDEV_SCREEN_X=1024
 CONFIG_INPUT_MOUSEDEV_SCREEN_Y=768
 # CONFIG_INPUT_JOYDEV is not set
-# CONFIG_INPUT_TSDEV is not set
 CONFIG_INPUT_EVDEV=y
 # CONFIG_INPUT_EVBUG is not set
 
@@ -638,14 +683,11 @@ CONFIG_UNIX98_PTYS=y
 CONFIG_LEGACY_PTYS=y
 CONFIG_LEGACY_PTY_COUNT=256
 # CONFIG_IPMI_HANDLER is not set
-# CONFIG_WATCHDOG 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_AGP is not set
-# CONFIG_DRM is not set
 # CONFIG_RAW_DRIVER is not set
 CONFIG_DEVPORT=y
 # CONFIG_I2C is not set
@@ -658,6 +700,13 @@ CONFIG_DEVPORT=y
 # 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
@@ -674,16 +723,17 @@ 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
-# CONFIG_VGASTATE is not set
-CONFIG_VIDEO_OUTPUT_CONTROL=y
-# CONFIG_FB is not set
-# CONFIG_FB_IBM_GXT4500 is not set
 
 #
 # Sound
@@ -707,6 +757,7 @@ CONFIG_USB_GADGET=y
 # 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 is not set
 # CONFIG_USB_GADGET_PXA2XX is not set
@@ -730,19 +781,6 @@ CONFIG_USB_ETH=y
 # CONFIG_INFINIBAND is not set
 # CONFIG_RTC_CLASS is not set
 
-#
-# DMA Engine support
-#
-# CONFIG_DMA_ENGINE is not set
-
-#
-# DMA Clients
-#
-
-#
-# DMA Devices
-#
-
 #
 # Userspace I/O
 #
@@ -759,7 +797,6 @@ CONFIG_EXT3_FS_XATTR=y
 # CONFIG_EXT3_FS_POSIX_ACL is not set
 # CONFIG_EXT3_FS_SECURITY 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
@@ -799,7 +836,6 @@ CONFIG_SYSFS=y
 CONFIG_TMPFS=y
 # CONFIG_TMPFS_POSIX_ACL is not set
 # CONFIG_HUGETLB_PAGE is not set
-CONFIG_RAMFS=y
 
 #
 # Miscellaneous filesystems
@@ -812,10 +848,7 @@ CONFIG_CRAMFS=y
 # CONFIG_QNX4FS_FS is not set
 # CONFIG_SYSV_FS is not set
 # CONFIG_UFS_FS is not set
-
-#
-# Network File Systems
-#
+CONFIG_NETWORK_FILESYSTEMS=y
 CONFIG_NFS_FS=y
 CONFIG_NFS_V3=y
 CONFIG_NFS_V3_ACL=y
@@ -853,10 +886,6 @@ CONFIG_MSDOS_PARTITION=y
 # CONFIG_KARMA_PARTITION is not set
 # CONFIG_EFI_PARTITION is not set
 # CONFIG_SYSV68_PARTITION is not set
-
-#
-# Native Language Support
-#
 CONFIG_NLS=y
 CONFIG_NLS_DEFAULT="iso8859-1"
 CONFIG_NLS_CODEPAGE_437=y
@@ -915,11 +944,13 @@ CONFIG_PLIST=y
 CONFIG_HAS_IOMEM=y
 CONFIG_HAS_IOPORT=y
 CONFIG_HAS_DMA=y
+# CONFIG_INSTRUMENTATION 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
@@ -943,8 +974,11 @@ CONFIG_DEBUG_BUGVERBOSE=y
 CONFIG_DEBUG_INFO=y
 # 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_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
@@ -952,16 +986,6 @@ CONFIG_FORCED_INLINING=y
 # CONFIG_KGDB_CONSOLE is not set
 CONFIG_BDI_SWITCH=y
 # CONFIG_PPC_EARLY_DEBUG is not set
-# 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_CPM is not set
 
 #
 # Security options
@@ -997,8 +1021,12 @@ CONFIG_CRYPTO_DES=y
 # 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_AUTHENC is not set
 CONFIG_CRYPTO_HW=y
+# CONFIG_PPC_CLOCK is not set
+CONFIG_PPC_LIB_RHEAP=y
index 3e87faf9b5c26867dd4bbc440b0c1c228cbf1b84..46b2579d38b14b52062f2d58fd76e4f6fbc67da6 100644 (file)
@@ -1,7 +1,7 @@
 #
 # Automatically generated make config: don't edit
-# Linux kernel version: 2.6.23-rc4
-# Tue Aug 28 21:24:45 2007
+# Linux kernel version: 2.6.24-rc4
+# Thu Dec  6 16:49:11 2007
 #
 # CONFIG_PPC64 is not set
 
@@ -15,6 +15,7 @@ CONFIG_6xx=y
 # 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
@@ -22,8 +23,13 @@ CONFIG_PPC_STD_MMU_32=y
 CONFIG_NOT_COHERENT_CACHE=y
 CONFIG_CHECK_CACHE_COHERENCY=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
@@ -63,9 +69,12 @@ 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 is not set
 # CONFIG_SYSFS_DEPRECATED is not set
 # CONFIG_RELAY is not set
 CONFIG_BLK_DEV_INITRD=y
@@ -85,7 +94,6 @@ 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
@@ -119,16 +127,21 @@ CONFIG_DEFAULT_IOSCHED="anticipatory"
 #
 # Platform support
 #
-# CONFIG_PPC_MULTIPLATFORM is not set
-CONFIG_EMBEDDED6xx=y
+CONFIG_PPC_MULTIPLATFORM=y
 # CONFIG_PPC_82xx is not set
 # CONFIG_PPC_83xx is not set
 # CONFIG_PPC_86xx is not set
+CONFIG_CLASSIC32=y
+# CONFIG_PPC_CHRP is not set
 # CONFIG_PPC_MPC52xx is not set
 # CONFIG_PPC_MPC5200 is not set
+# CONFIG_PPC_EFIKA is not set
+# CONFIG_PPC_LITE5200 is not set
+# CONFIG_PPC_PMAC is not set
 # CONFIG_PPC_CELL is not set
 # CONFIG_PPC_CELL_NATIVE is not set
 # CONFIG_PQ2ADS is not set
+CONFIG_EMBEDDED6xx=y
 # CONFIG_LINKSTATION is not set
 # CONFIG_MPC7448HPC2 is not set
 # CONFIG_PPC_HOLLY is not set
@@ -144,6 +157,7 @@ CONFIG_MV64X60=y
 # CONFIG_PPC_INDIRECT_IO is not set
 # CONFIG_GENERIC_IOMAP is not set
 # CONFIG_CPU_FREQ is not set
+# CONFIG_TAU is not set
 # CONFIG_CPM2 is not set
 # CONFIG_FSL_ULI1575 is not set
 
@@ -151,6 +165,10 @@ CONFIG_MV64X60=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
@@ -172,6 +190,7 @@ CONFIG_FLATMEM_MANUAL=y
 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
@@ -180,6 +199,8 @@ CONFIG_VIRT_TO_BUS=y
 CONFIG_PROC_DEVICETREE=y
 # CONFIG_CMDLINE_BOOL is not set
 # CONFIG_PM is not set
+CONFIG_SUSPEND_UP_POSSIBLE=y
+CONFIG_HIBERNATION_UP_POSSIBLE=y
 # CONFIG_SECCOMP is not set
 CONFIG_WANT_DEVICE_TREE=y
 CONFIG_DEVICE_TREE="prpmc2800.dts"
@@ -197,10 +218,7 @@ CONFIG_PCI_SYSCALL=y
 # CONFIG_PCIEPORTBUS is not set
 CONFIG_ARCH_SUPPORTS_MSI=y
 # CONFIG_PCI_MSI is not set
-
-#
-# PCCARD (PCMCIA/CardBus) support
-#
+CONFIG_PCI_LEGACY=y
 # CONFIG_PCCARD is not set
 # CONFIG_HOTPLUG_PCI is not set
 
@@ -215,7 +233,7 @@ CONFIG_ARCH_SUPPORTS_MSI=y
 CONFIG_HIGHMEM_START=0xfe000000
 CONFIG_LOWMEM_SIZE=0x30000000
 CONFIG_KERNEL_START=0xc0000000
-CONFIG_TASK_SIZE=0x80000000
+CONFIG_TASK_SIZE=0xc0000000
 CONFIG_CONSISTENT_START=0xff100000
 CONFIG_CONSISTENT_SIZE=0x00200000
 CONFIG_BOOT_LOAD=0x00800000
@@ -257,6 +275,7 @@ CONFIG_SYN_COOKIES=y
 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
@@ -282,10 +301,6 @@ CONFIG_DEFAULT_TCP_CONG="cubic"
 # CONFIG_LAPB is not set
 # CONFIG_ECONET is not set
 # CONFIG_WAN_ROUTER is not set
-
-#
-# QoS and/or fair queueing
-#
 # CONFIG_NET_SCHED is not set
 
 #
@@ -314,6 +329,7 @@ CONFIG_DEFAULT_TCP_CONG="cubic"
 #
 # Generic Driver Options
 #
+CONFIG_UEVENT_HELPER_PATH="/sbin/hotplug"
 CONFIG_STANDALONE=y
 CONFIG_PREVENT_FIRMWARE_BUILD=y
 # CONFIG_FW_LOADER is not set
@@ -337,6 +353,7 @@ CONFIG_MTD_BLOCK=y
 # 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
@@ -369,6 +386,7 @@ CONFIG_MTD_CFI_UTIL=y
 # 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
 
 #
@@ -438,6 +456,11 @@ 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_IDEPCI=y
 # CONFIG_IDEPCI_SHARE_IRQ is not set
 CONFIG_IDEPCI_PCIBUS_ORDER=y
@@ -445,8 +468,6 @@ CONFIG_IDEPCI_PCIBUS_ORDER=y
 CONFIG_BLK_DEV_GENERIC=y
 # CONFIG_BLK_DEV_OPTI621 is not set
 CONFIG_BLK_DEV_IDEDMA_PCI=y
-# CONFIG_BLK_DEV_IDEDMA_FORCED is not set
-# CONFIG_IDEDMA_ONLYDISK is not set
 # CONFIG_BLK_DEV_AEC62XX is not set
 # CONFIG_BLK_DEV_ALI15X3 is not set
 # CONFIG_BLK_DEV_AMD74XX is not set
@@ -474,7 +495,7 @@ CONFIG_BLK_DEV_PDC202XX_NEW=y
 # CONFIG_BLK_DEV_TC86C001 is not set
 # CONFIG_IDE_ARM is not set
 CONFIG_BLK_DEV_IDEDMA=y
-# CONFIG_IDEDMA_IVB is not set
+CONFIG_IDE_ARCH_OBSOLETE_INIT=y
 # CONFIG_BLK_DEV_HD is not set
 
 #
@@ -512,6 +533,7 @@ CONFIG_BLK_DEV_SD=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
@@ -523,6 +545,7 @@ CONFIG_SCSI_LOWLEVEL=y
 # 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
@@ -590,6 +613,7 @@ CONFIG_SATA_MV=y
 # 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
@@ -603,14 +627,7 @@ CONFIG_SATA_MV=y
 # CONFIG_PATA_VIA is not set
 # CONFIG_PATA_WINBOND is not set
 # CONFIG_MD is not set
-
-#
-# Fusion MPT device support
-#
 # CONFIG_FUSION is not set
-# CONFIG_FUSION_SPI is not set
-# CONFIG_FUSION_FC is not set
-# CONFIG_FUSION_SAS is not set
 
 #
 # IEEE 1394 (FireWire) support
@@ -628,6 +645,8 @@ CONFIG_NETDEVICES=y
 # 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=y
 
@@ -644,6 +663,7 @@ CONFIG_PHYLIB=y
 # CONFIG_BROADCOM_PHY is not set
 # CONFIG_ICPLUS_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
@@ -652,13 +672,16 @@ CONFIG_MII=y
 # 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_DGRS is not set
 # CONFIG_EEPRO100 is not set
 CONFIG_E100=y
 # CONFIG_FEALNX is not set
@@ -682,6 +705,7 @@ CONFIG_NETDEV_1000=y
 CONFIG_E1000=y
 # CONFIG_E1000_NAPI is not set
 # CONFIG_E1000_DISABLE_PACKET_SPLIT is not set
+# CONFIG_E1000E is not set
 # CONFIG_NS83820 is not set
 # CONFIG_HAMACHI is not set
 # CONFIG_YELLOWFIN is not set
@@ -689,6 +713,7 @@ CONFIG_E1000=y
 # 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
@@ -698,11 +723,14 @@ CONFIG_MV643XX_ETH=y
 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
 
 #
@@ -718,7 +746,6 @@ CONFIG_NETDEV_10000=y
 # CONFIG_USB_KAWETH is not set
 # CONFIG_USB_PEGASUS is not set
 # CONFIG_USB_RTL8150 is not set
-# CONFIG_USB_USBNET_MII is not set
 # CONFIG_USB_USBNET is not set
 # CONFIG_WAN is not set
 # CONFIG_FDDI is not set
@@ -748,7 +775,6 @@ CONFIG_INPUT_MOUSEDEV_PSAUX=y
 CONFIG_INPUT_MOUSEDEV_SCREEN_X=1024
 CONFIG_INPUT_MOUSEDEV_SCREEN_Y=768
 # CONFIG_INPUT_JOYDEV is not set
-# CONFIG_INPUT_TSDEV is not set
 # CONFIG_INPUT_EVDEV is not set
 # CONFIG_INPUT_EVBUG is not set
 
@@ -795,15 +821,12 @@ CONFIG_UNIX98_PTYS=y
 CONFIG_LEGACY_PTYS=y
 CONFIG_LEGACY_PTY_COUNT=256
 # CONFIG_IPMI_HANDLER is not set
-# CONFIG_WATCHDOG 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_AGP is not set
-# CONFIG_DRM is not set
 # CONFIG_RAW_DRIVER is not set
 # CONFIG_TCG_TPM is not set
 CONFIG_DEVPORT=y
@@ -873,8 +896,6 @@ CONFIG_I2C_MV64XXX=y
 # CONFIG_POWER_SUPPLY is not set
 CONFIG_HWMON=y
 # CONFIG_HWMON_VID is not set
-# CONFIG_SENSORS_ABITUGURU is not set
-# CONFIG_SENSORS_ABITUGURU3 is not set
 # CONFIG_SENSORS_AD7418 is not set
 # CONFIG_SENSORS_ADM1021 is not set
 # CONFIG_SENSORS_ADM1025 is not set
@@ -882,12 +903,13 @@ CONFIG_HWMON=y
 # CONFIG_SENSORS_ADM1029 is not set
 # CONFIG_SENSORS_ADM1031 is not set
 # CONFIG_SENSORS_ADM9240 is not set
-# CONFIG_SENSORS_ASB100 is not set
+# CONFIG_SENSORS_ADT7470 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_FSCHER is not set
-# CONFIG_SENSORS_FSCPOS 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
@@ -923,6 +945,13 @@ CONFIG_HWMON=y
 # 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
@@ -939,16 +968,17 @@ CONFIG_HWMON=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
-# CONFIG_VGASTATE is not set
-CONFIG_VIDEO_OUTPUT_CONTROL=y
-# CONFIG_FB is not set
-# CONFIG_FB_IBM_GXT4500 is not set
 
 #
 # Console display driver support
@@ -964,6 +994,7 @@ CONFIG_DUMMY_CONSOLE=y
 CONFIG_HID_SUPPORT=y
 CONFIG_HID=y
 # CONFIG_HID_DEBUG is not set
+# CONFIG_HIDRAW is not set
 
 #
 # USB Input Devices
@@ -1091,6 +1122,7 @@ CONFIG_RTC_INTF_DEV=y
 # 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=y
 # CONFIG_RTC_DRV_RS5C372 is not set
@@ -1119,19 +1151,6 @@ CONFIG_RTC_DRV_MAX6900=y
 # on-CPU RTC drivers
 #
 
-#
-# DMA Engine support
-#
-# CONFIG_DMA_ENGINE is not set
-
-#
-# DMA Clients
-#
-
-#
-# DMA Devices
-#
-
 #
 # Userspace I/O
 #
@@ -1149,7 +1168,6 @@ CONFIG_EXT3_FS_XATTR=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 is not set
 # CONFIG_JFS_FS is not set
@@ -1190,7 +1208,6 @@ CONFIG_SYSFS=y
 CONFIG_TMPFS=y
 # CONFIG_TMPFS_POSIX_ACL is not set
 # CONFIG_HUGETLB_PAGE is not set
-CONFIG_RAMFS=y
 # CONFIG_CONFIGFS_FS is not set
 
 #
@@ -1210,10 +1227,7 @@ CONFIG_RAMFS=y
 # CONFIG_QNX4FS_FS is not set
 # CONFIG_SYSV_FS is not set
 # CONFIG_UFS_FS is not set
-
-#
-# Network File Systems
-#
+CONFIG_NETWORK_FILESYSTEMS=y
 CONFIG_NFS_FS=y
 # CONFIG_NFS_V3 is not set
 # CONFIG_NFS_V4 is not set
@@ -1253,15 +1267,7 @@ CONFIG_MSDOS_PARTITION=y
 # CONFIG_KARMA_PARTITION is not set
 # CONFIG_EFI_PARTITION is not set
 # CONFIG_SYSV68_PARTITION is not set
-
-#
-# Native Language Support
-#
 # CONFIG_NLS is not set
-
-#
-# Distributed Lock Manager
-#
 # CONFIG_DLM is not set
 # CONFIG_UCC_SLOW is not set
 
@@ -1279,23 +1285,23 @@ CONFIG_PLIST=y
 CONFIG_HAS_IOMEM=y
 CONFIG_HAS_IOPORT=y
 CONFIG_HAS_DMA=y
-
-#
-# Instrumentation Support
-#
-# CONFIG_PROFILING is not set
+# CONFIG_INSTRUMENTATION is not set
 
 #
 # 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_DEBUG_BUGVERBOSE=y
+# CONFIG_SAMPLES is not set
+# CONFIG_BOOTX_TEXT is not set
 # CONFIG_PPC_EARLY_DEBUG is not set
 
 #
@@ -1303,4 +1309,6 @@ CONFIG_DEBUG_BUGVERBOSE=y
 #
 # 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
index 3566c448bdc0cf6ac55c63069a183812bfd0635a..5bd547ecd60af86eb1b584e3d47d797d08453333 100644 (file)
@@ -1,7 +1,7 @@
 #
 # Automatically generated make config: don't edit
-# Linux kernel version: 2.6.23-rc2
-# Tue Aug  7 19:17:26 2007
+# Linux kernel version: 2.6.24-rc4
+# Tue Dec  4 22:49:57 2007
 #
 CONFIG_PPC64=y
 
@@ -11,6 +11,7 @@ CONFIG_PPC64=y
 # CONFIG_POWER4_ONLY is not set
 CONFIG_POWER3=y
 CONFIG_POWER4=y
+CONFIG_TUNE_CELL=y
 CONFIG_PPC_FPU=y
 CONFIG_ALTIVEC=y
 CONFIG_PPC_STD_MMU=y
@@ -19,8 +20,13 @@ CONFIG_VIRT_CPU_ACCOUNTING=y
 CONFIG_SMP=y
 CONFIG_NR_CPUS=2
 CONFIG_64BIT=y
+CONFIG_WORD_SIZE=64
 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
@@ -59,14 +65,18 @@ CONFIG_LOCALVERSION_AUTO=y
 CONFIG_SWAP=y
 CONFIG_SYSVIPC=y
 CONFIG_SYSVIPC_SYSCTL=y
-# CONFIG_POSIX_MQUEUE is not set
+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=17
-# CONFIG_CPUSETS is not set
+# 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
@@ -87,13 +97,11 @@ 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_SLAB=y
+# CONFIG_SLUB is not set
 # CONFIG_SLOB is not set
 CONFIG_RT_MUTEXES=y
 # CONFIG_TINY_SHMEM is not set
@@ -108,6 +116,7 @@ CONFIG_STOP_MACHINE=y
 CONFIG_BLOCK=y
 # CONFIG_BLK_DEV_IO_TRACE is not set
 CONFIG_BLK_DEV_BSG=y
+CONFIG_BLOCK_COMPAT=y
 
 #
 # IO Schedulers
@@ -126,7 +135,6 @@ CONFIG_DEFAULT_IOSCHED="anticipatory"
 # Platform support
 #
 CONFIG_PPC_MULTIPLATFORM=y
-# CONFIG_EMBEDDED6xx is not set
 # CONFIG_PPC_82xx is not set
 # CONFIG_PPC_83xx is not set
 # CONFIG_PPC_86xx is not set
@@ -176,10 +184,15 @@ CONFIG_SPU_BASE=y
 # 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_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
@@ -211,6 +224,8 @@ CONFIG_SPARSEMEM=y
 CONFIG_HAVE_MEMORY_PRESENT=y
 # CONFIG_SPARSEMEM_STATIC is not set
 CONFIG_SPARSEMEM_EXTREME=y
+CONFIG_SPARSEMEM_VMEMMAP_ENABLE=y
+CONFIG_SPARSEMEM_VMEMMAP=y
 CONFIG_MEMORY_HOTPLUG=y
 CONFIG_MEMORY_HOTPLUG_SPARSE=y
 CONFIG_SPLIT_PTLOCK_CPUS=4
@@ -237,10 +252,6 @@ CONFIG_GENERIC_ISA_DMA=y
 # CONFIG_PCI_DOMAINS is not set
 # CONFIG_PCI_SYSCALL is not set
 # CONFIG_ARCH_SUPPORTS_MSI is not set
-
-#
-# PCCARD (PCMCIA/CardBus) support
-#
 # CONFIG_PCCARD is not set
 CONFIG_KERNEL_START=0xc000000000000000
 
@@ -280,6 +291,7 @@ 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 is not set
 # CONFIG_TCP_CONG_ADVANCED is not set
 CONFIG_TCP_CONG_CUBIC=y
@@ -318,10 +330,6 @@ CONFIG_IPV6_SIT=y
 # CONFIG_LAPB is not set
 # CONFIG_ECONET is not set
 # CONFIG_WAN_ROUTER is not set
-
-#
-# QoS and/or fair queueing
-#
 # CONFIG_NET_SCHED is not set
 
 #
@@ -330,26 +338,7 @@ CONFIG_IPV6_SIT=y
 # CONFIG_NET_PKTGEN is not set
 # CONFIG_HAMRADIO is not set
 # CONFIG_IRDA is not set
-CONFIG_BT=m
-CONFIG_BT_L2CAP=m
-CONFIG_BT_SCO=m
-CONFIG_BT_RFCOMM=m
-CONFIG_BT_RFCOMM_TTY=y
-# CONFIG_BT_BNEP is not set
-CONFIG_BT_HIDP=m
-
-#
-# Bluetooth device drivers
-#
-CONFIG_BT_HCIUSB=m
-CONFIG_BT_HCIUSB_SCO=y
-CONFIG_BT_HCIUART=m
-CONFIG_BT_HCIUART_H4=y
-CONFIG_BT_HCIUART_BCSP=y
-# CONFIG_BT_HCIBCM203X is not set
-# CONFIG_BT_HCIBPA10X is not set
-# CONFIG_BT_HCIBFUSB is not set
-# CONFIG_BT_HCIVHCI is not set
+# CONFIG_BT is not set
 # CONFIG_AF_RXRPC is not set
 
 #
@@ -358,7 +347,13 @@ CONFIG_BT_HCIUART_BCSP=y
 # CONFIG_CFG80211 is not set
 CONFIG_WIRELESS_EXT=y
 # CONFIG_MAC80211 is not set
-# CONFIG_IEEE80211 is not set
+CONFIG_IEEE80211=m
+# CONFIG_IEEE80211_DEBUG is not set
+CONFIG_IEEE80211_CRYPT_WEP=m
+CONFIG_IEEE80211_CRYPT_CCMP=m
+CONFIG_IEEE80211_CRYPT_TKIP=m
+CONFIG_IEEE80211_SOFTMAC=m
+# CONFIG_IEEE80211_SOFTMAC_DEBUG is not set
 # CONFIG_RFKILL is not set
 # CONFIG_NET_9P is not set
 
@@ -369,9 +364,10 @@ CONFIG_WIRELESS_EXT=y
 #
 # Generic Driver Options
 #
+CONFIG_UEVENT_HELPER_PATH="/sbin/hotplug"
 CONFIG_STANDALONE=y
 CONFIG_PREVENT_FIRMWARE_BUILD=y
-# CONFIG_FW_LOADER is not set
+CONFIG_FW_LOADER=m
 # CONFIG_DEBUG_DRIVER is not set
 # CONFIG_DEBUG_DEVRES is not set
 # CONFIG_SYS_HYPERVISOR is not set
@@ -434,6 +430,7 @@ CONFIG_SCSI_WAIT_SCAN=m
 # CONFIG_SCSI_ISCSI_ATTRS is not set
 # CONFIG_SCSI_SAS_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
@@ -445,8 +442,15 @@ CONFIG_NETDEVICES=y
 # CONFIG_MACVLAN is not set
 # CONFIG_EQUALIZER is not set
 # CONFIG_TUN is not set
-# CONFIG_NET_ETHERNET is not set
+# CONFIG_VETH is not set
+# CONFIG_PHYLIB is not set
+CONFIG_NET_ETHERNET=y
 CONFIG_MII=m
+# 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_GELIC_NET=y
 # CONFIG_NETDEV_10000 is not set
@@ -455,7 +459,12 @@ CONFIG_GELIC_NET=y
 # Wireless LAN
 #
 # CONFIG_WLAN_PRE80211 is not set
-# CONFIG_WLAN_80211 is not set
+CONFIG_WLAN_80211=y
+# CONFIG_LIBERTAS is not set
+# CONFIG_USB_ZD1201 is not set
+# CONFIG_HOSTAP is not set
+CONFIG_ZD1211RW=m
+# CONFIG_ZD1211RW_DEBUG is not set
 
 #
 # USB Network Adapters
@@ -464,8 +473,8 @@ CONFIG_GELIC_NET=y
 # CONFIG_USB_KAWETH is not set
 CONFIG_USB_PEGASUS=m
 # CONFIG_USB_RTL8150 is not set
-CONFIG_USB_USBNET_MII=m
 CONFIG_USB_USBNET=m
+CONFIG_USB_NET_AX8817X=m
 # CONFIG_USB_NET_CDCETHER is not set
 # CONFIG_USB_NET_DM9601 is not set
 # CONFIG_USB_NET_GL620A is not set
@@ -499,9 +508,8 @@ CONFIG_INPUT_MOUSEDEV=y
 # CONFIG_INPUT_MOUSEDEV_PSAUX is not set
 CONFIG_INPUT_MOUSEDEV_SCREEN_X=1024
 CONFIG_INPUT_MOUSEDEV_SCREEN_Y=768
-# CONFIG_INPUT_JOYDEV is not set
-# CONFIG_INPUT_TSDEV is not set
-# CONFIG_INPUT_EVDEV is not set
+CONFIG_INPUT_JOYDEV=m
+CONFIG_INPUT_EVDEV=m
 # CONFIG_INPUT_EVBUG is not set
 
 #
@@ -561,7 +569,6 @@ CONFIG_UNIX98_PTYS=y
 CONFIG_LEGACY_PTYS=y
 CONFIG_LEGACY_PTY_COUNT=16
 # CONFIG_IPMI_HANDLER is not set
-# CONFIG_WATCHDOG is not set
 # CONFIG_HW_RANDOM is not set
 CONFIG_GEN_RTC=y
 # CONFIG_GEN_RTC_X is not set
@@ -579,6 +586,13 @@ CONFIG_GEN_RTC=y
 # 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
@@ -595,12 +609,6 @@ CONFIG_GEN_RTC=y
 #
 # Graphics support
 #
-# CONFIG_BACKLIGHT_LCD_SUPPORT is not set
-
-#
-# Display device support
-#
-# CONFIG_DISPLAY_SUPPORT is not set
 # CONFIG_VGASTATE is not set
 CONFIG_VIDEO_OUTPUT_CONTROL=m
 CONFIG_FB=y
@@ -609,6 +617,7 @@ CONFIG_FB=y
 # CONFIG_FB_CFB_FILLRECT is not set
 # CONFIG_FB_CFB_COPYAREA is not set
 # CONFIG_FB_CFB_IMAGEBLIT is not set
+# CONFIG_FB_CFB_REV_PIXELS_IN_BYTE is not set
 CONFIG_FB_SYS_FILLRECT=y
 CONFIG_FB_SYS_COPYAREA=y
 CONFIG_FB_SYS_IMAGEBLIT=y
@@ -628,8 +637,14 @@ CONFIG_FB_DEFERRED_IO=y
 # CONFIG_FB_S1D13XXX is not set
 # CONFIG_FB_IBM_GXT4500 is not set
 CONFIG_FB_PS3=y
-CONFIG_FB_PS3_DEFAULT_SIZE_M=18
+CONFIG_FB_PS3_DEFAULT_SIZE_M=9
 # CONFIG_FB_VIRTUAL is not set
+# CONFIG_BACKLIGHT_LCD_SUPPORT is not set
+
+#
+# Display device support
+#
+# CONFIG_DISPLAY_SUPPORT is not set
 
 #
 # Console display driver support
@@ -713,6 +728,7 @@ CONFIG_SND_PS3_DEFAULT_START_DELAY=2000
 CONFIG_HID_SUPPORT=y
 CONFIG_HID=y
 # CONFIG_HID_DEBUG is not set
+# CONFIG_HIDRAW is not set
 
 #
 # USB Input Devices
@@ -776,12 +792,14 @@ CONFIG_USB_STORAGE=m
 # CONFIG_USB_STORAGE_DEBUG is not set
 # CONFIG_USB_STORAGE_DATAFAB is not set
 # CONFIG_USB_STORAGE_FREECOM is not set
+# CONFIG_USB_STORAGE_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_ONETOUCH is not set
 # CONFIG_USB_STORAGE_KARMA is not set
 # CONFIG_USB_LIBUSUAL is not set
 
@@ -838,19 +856,6 @@ CONFIG_USB_MON=y
 # CONFIG_EDAC is not set
 # CONFIG_RTC_CLASS is not set
 
-#
-# DMA Engine support
-#
-# CONFIG_DMA_ENGINE is not set
-
-#
-# DMA Clients
-#
-
-#
-# DMA Devices
-#
-
 #
 # Userspace I/O
 #
@@ -868,7 +873,6 @@ CONFIG_EXT3_FS_XATTR=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 is not set
 # CONFIG_JFS_FS is not set
@@ -881,6 +885,8 @@ CONFIG_FS_MBCACHE=y
 CONFIG_INOTIFY=y
 CONFIG_INOTIFY_USER=y
 CONFIG_QUOTA=y
+# CONFIG_QUOTA_NETLINK_INTERFACE is not set
+CONFIG_PRINT_QUOTA_WARNING=y
 # CONFIG_QFMT_V1 is not set
 CONFIG_QFMT_V2=y
 CONFIG_QUOTACTL=y
@@ -919,7 +925,6 @@ CONFIG_TMPFS=y
 # CONFIG_TMPFS_POSIX_ACL is not set
 # CONFIG_HUGETLBFS is not set
 # CONFIG_HUGETLB_PAGE is not set
-CONFIG_RAMFS=y
 # CONFIG_CONFIGFS_FS is not set
 
 #
@@ -938,10 +943,7 @@ CONFIG_RAMFS=y
 # CONFIG_QNX4FS_FS is not set
 # CONFIG_SYSV_FS is not set
 # CONFIG_UFS_FS is not set
-
-#
-# Network File Systems
-#
+CONFIG_NETWORK_FILESYSTEMS=y
 CONFIG_NFS_FS=y
 CONFIG_NFS_V3=y
 # CONFIG_NFS_V3_ACL is not set
@@ -973,10 +975,6 @@ CONFIG_CIFS=m
 #
 # CONFIG_PARTITION_ADVANCED is not set
 CONFIG_MSDOS_PARTITION=y
-
-#
-# Native Language Support
-#
 CONFIG_NLS=y
 CONFIG_NLS_DEFAULT="iso8859-1"
 CONFIG_NLS_CODEPAGE_437=y
@@ -1017,10 +1015,6 @@ CONFIG_NLS_ISO8859_1=y
 # CONFIG_NLS_KOI8_R is not set
 # CONFIG_NLS_KOI8_U is not set
 # CONFIG_NLS_UTF8 is not set
-
-#
-# Distributed Lock Manager
-#
 # CONFIG_DLM is not set
 # CONFIG_UCC_SLOW is not set
 
@@ -1038,17 +1032,16 @@ CONFIG_PLIST=y
 CONFIG_HAS_IOMEM=y
 CONFIG_HAS_IOPORT=y
 CONFIG_HAS_DMA=y
-
-#
-# Instrumentation Support
-#
+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
@@ -1060,7 +1053,7 @@ 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_SLAB is not set
 # CONFIG_DEBUG_RT_MUTEXES is not set
 # CONFIG_RT_MUTEX_TESTER is not set
 CONFIG_DEBUG_SPINLOCK=y
@@ -1072,9 +1065,12 @@ CONFIG_DEBUG_BUGVERBOSE=y
 CONFIG_DEBUG_INFO=y
 # CONFIG_DEBUG_VM is not set
 CONFIG_DEBUG_LIST=y
+# 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=y
 # CONFIG_DEBUG_STACK_USAGE is not set
 # CONFIG_DEBUG_PAGEALLOC is not set
@@ -1088,6 +1084,7 @@ CONFIG_IRQSTACKS=y
 #
 # 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
@@ -1107,22 +1104,26 @@ 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_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_AES=m
 # 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_ARC4=m
 # 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_MICHAEL_MIC=m
 # 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
index 62a38406b62f8a6336e053f27df9c8d90e215a0c..92bbf51ad4f06c84d18693ecd97011858ddc7114 100644 (file)
@@ -1,7 +1,7 @@
 #
 # Automatically generated make config: don't edit
-# Linux kernel version: 2.6.23-rc4
-# Thu Aug 30 16:50:02 2007
+# Linux kernel version: 2.6.24-rc4
+# Thu Dec  6 16:49:15 2007
 #
 CONFIG_PPC64=y
 
@@ -11,6 +11,7 @@ CONFIG_PPC64=y
 # CONFIG_POWER4_ONLY is not set
 CONFIG_POWER3=y
 CONFIG_POWER4=y
+# CONFIG_TUNE_CELL is not set
 CONFIG_PPC_FPU=y
 CONFIG_ALTIVEC=y
 CONFIG_PPC_STD_MMU=y
@@ -19,8 +20,13 @@ CONFIG_VIRT_CPU_ACCOUNTING=y
 CONFIG_SMP=y
 CONFIG_NR_CPUS=128
 CONFIG_64BIT=y
+CONFIG_WORD_SIZE=64
 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
@@ -66,14 +72,23 @@ CONFIG_TASK_DELAY_ACCT=y
 CONFIG_TASK_XACCT=y
 CONFIG_TASK_IO_ACCOUNTING=y
 # CONFIG_USER_NS is not set
+# CONFIG_PID_NS is not set
 CONFIG_AUDIT=y
 CONFIG_AUDITSYSCALL=y
+CONFIG_AUDIT_TREE=y
 CONFIG_IKCONFIG=y
 CONFIG_IKCONFIG_PROC=y
 CONFIG_LOG_BUF_SHIFT=17
 CONFIG_CGROUPS=y
+# CONFIG_CGROUP_DEBUG is not set
+CONFIG_CGROUP_NS=y
 CONFIG_CPUSETS=y
+CONFIG_FAIR_GROUP_SCHED=y
+# CONFIG_FAIR_USER_SCHED is not set
+CONFIG_FAIR_CGROUP_SCHED=y
+CONFIG_CGROUP_CPUACCT=y
 CONFIG_SYSFS_DEPRECATED=y
+CONFIG_PROC_PID_CPUSET=y
 # CONFIG_RELAY is not set
 CONFIG_BLK_DEV_INITRD=y
 CONFIG_INITRAMFS_SOURCE=""
@@ -93,7 +108,6 @@ 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
@@ -114,6 +128,7 @@ CONFIG_STOP_MACHINE=y
 CONFIG_BLOCK=y
 # CONFIG_BLK_DEV_IO_TRACE is not set
 CONFIG_BLK_DEV_BSG=y
+CONFIG_BLOCK_COMPAT=y
 
 #
 # IO Schedulers
@@ -132,7 +147,6 @@ CONFIG_DEFAULT_IOSCHED="anticipatory"
 # Platform support
 #
 CONFIG_PPC_MULTIPLATFORM=y
-# CONFIG_EMBEDDED6xx is not set
 # CONFIG_PPC_82xx is not set
 # CONFIG_PPC_83xx is not set
 # CONFIG_PPC_86xx is not set
@@ -194,6 +208,7 @@ CONFIG_PREEMPT_NONE=y
 CONFIG_BINFMT_ELF=y
 CONFIG_BINFMT_MISC=m
 CONFIG_FORCE_MAX_ZONEORDER=13
+CONFIG_HUGETLB_PAGE_SIZE_VARIABLE=y
 CONFIG_IOMMU_VMERGE=y
 CONFIG_HOTPLUG_CPU=y
 CONFIG_ARCH_ENABLE_MEMORY_HOTPLUG=y
@@ -215,6 +230,8 @@ CONFIG_NEED_MULTIPLE_NODES=y
 CONFIG_HAVE_MEMORY_PRESENT=y
 # CONFIG_SPARSEMEM_STATIC is not set
 CONFIG_SPARSEMEM_EXTREME=y
+CONFIG_SPARSEMEM_VMEMMAP_ENABLE=y
+CONFIG_SPARSEMEM_VMEMMAP=y
 # CONFIG_MEMORY_HOTPLUG is not set
 CONFIG_SPLIT_PTLOCK_CPUS=4
 CONFIG_MIGRATION=y
@@ -245,11 +262,8 @@ CONFIG_PCI_SYSCALL=y
 # CONFIG_PCIEPORTBUS is not set
 CONFIG_ARCH_SUPPORTS_MSI=y
 CONFIG_PCI_MSI=y
+CONFIG_PCI_LEGACY=y
 # CONFIG_PCI_DEBUG is not set
-
-#
-# PCCARD (PCMCIA/CardBus) support
-#
 # CONFIG_PCCARD is not set
 CONFIG_HOTPLUG_PCI=m
 # CONFIG_HOTPLUG_PCI_FAKE is not set
@@ -294,6 +308,7 @@ CONFIG_INET_TUNNEL=y
 CONFIG_INET_XFRM_MODE_TRANSPORT=y
 CONFIG_INET_XFRM_MODE_TUNNEL=y
 CONFIG_INET_XFRM_MODE_BEET=y
+CONFIG_INET_LRO=y
 CONFIG_INET_DIAG=y
 CONFIG_INET_TCP_DIAG=y
 # CONFIG_TCP_CONG_ADVANCED is not set
@@ -360,6 +375,7 @@ CONFIG_NETFILTER_XT_MATCH_STATE=m
 CONFIG_NETFILTER_XT_MATCH_STATISTIC=m
 CONFIG_NETFILTER_XT_MATCH_STRING=m
 CONFIG_NETFILTER_XT_MATCH_TCPMSS=m
+CONFIG_NETFILTER_XT_MATCH_TIME=m
 CONFIG_NETFILTER_XT_MATCH_U32=m
 CONFIG_NETFILTER_XT_MATCH_HASHLIMIT=m
 
@@ -414,10 +430,6 @@ CONFIG_LLC=y
 # CONFIG_LAPB is not set
 # CONFIG_ECONET is not set
 # CONFIG_WAN_ROUTER is not set
-
-#
-# QoS and/or fair queueing
-#
 # CONFIG_NET_SCHED is not set
 CONFIG_NET_CLS_ROUTE=y
 
@@ -448,6 +460,7 @@ CONFIG_NET_CLS_ROUTE=y
 #
 # Generic Driver Options
 #
+CONFIG_UEVENT_HELPER_PATH="/sbin/hotplug"
 CONFIG_STANDALONE=y
 CONFIG_PREVENT_FIRMWARE_BUILD=y
 CONFIG_FW_LOADER=y
@@ -508,6 +521,11 @@ 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_IDEPCI=y
 CONFIG_IDEPCI_SHARE_IRQ=y
 CONFIG_IDEPCI_PCIBUS_ORDER=y
@@ -515,8 +533,6 @@ CONFIG_IDEPCI_PCIBUS_ORDER=y
 CONFIG_BLK_DEV_GENERIC=y
 # CONFIG_BLK_DEV_OPTI621 is not set
 CONFIG_BLK_DEV_IDEDMA_PCI=y
-# CONFIG_BLK_DEV_IDEDMA_FORCED is not set
-# CONFIG_IDEDMA_ONLYDISK is not set
 # CONFIG_BLK_DEV_AEC62XX is not set
 # CONFIG_BLK_DEV_ALI15X3 is not set
 CONFIG_BLK_DEV_AMD74XX=y
@@ -544,7 +560,7 @@ CONFIG_BLK_DEV_AMD74XX=y
 # CONFIG_BLK_DEV_TC86C001 is not set
 # CONFIG_IDE_ARM is not set
 CONFIG_BLK_DEV_IDEDMA=y
-# CONFIG_IDEDMA_IVB is not set
+CONFIG_IDE_ARCH_OBSOLETE_INIT=y
 # CONFIG_BLK_DEV_HD is not set
 
 #
@@ -585,6 +601,7 @@ CONFIG_SCSI_FC_ATTRS=y
 CONFIG_SCSI_ISCSI_ATTRS=m
 CONFIG_SCSI_SAS_ATTRS=m
 # CONFIG_SCSI_SAS_LIBSAS is not set
+CONFIG_SCSI_SRP_ATTRS=y
 CONFIG_SCSI_LOWLEVEL=y
 # CONFIG_ISCSI_TCP is not set
 # CONFIG_BLK_DEV_3W_XXXX_RAID is not set
@@ -669,6 +686,7 @@ CONFIG_ATA=y
 # 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
@@ -699,15 +717,10 @@ CONFIG_DM_ZERO=m
 CONFIG_DM_MULTIPATH=m
 CONFIG_DM_MULTIPATH_EMC=m
 # CONFIG_DM_MULTIPATH_RDAC is not set
+# CONFIG_DM_MULTIPATH_HP is not set
 # CONFIG_DM_DELAY is not set
-
-#
-# Fusion MPT device support
-#
+# CONFIG_DM_UEVENT is not set
 # CONFIG_FUSION is not set
-# CONFIG_FUSION_SPI is not set
-# CONFIG_FUSION_FC is not set
-# CONFIG_FUSION_SAS is not set
 
 #
 # IEEE 1394 (FireWire) support
@@ -723,6 +736,8 @@ CONFIG_BONDING=m
 # CONFIG_MACVLAN is not set
 # CONFIG_EQUALIZER is not set
 CONFIG_TUN=m
+# CONFIG_VETH is not set
+# CONFIG_IP1000 is not set
 # CONFIG_ARCNET is not set
 # CONFIG_PHYLIB is not set
 CONFIG_NET_ETHERNET=y
@@ -736,6 +751,10 @@ CONFIG_VORTEX=y
 # CONFIG_NET_TULIP is not set
 # CONFIG_HP100 is not set
 CONFIG_IBMVETH=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_NET_PCI=y
 CONFIG_PCNET32=y
 # CONFIG_PCNET32_NAPI is not set
@@ -743,7 +762,6 @@ CONFIG_PCNET32=y
 # CONFIG_ADAPTEC_STARFIRE is not set
 # CONFIG_B44 is not set
 # CONFIG_FORCEDETH is not set
-# CONFIG_DGRS is not set
 # CONFIG_EEPRO100 is not set
 CONFIG_E100=y
 # CONFIG_FEALNX is not set
@@ -764,6 +782,7 @@ CONFIG_ACENIC_OMIT_TIGON_I=y
 CONFIG_E1000=y
 # CONFIG_E1000_NAPI is not set
 # CONFIG_E1000_DISABLE_PACKET_SPLIT is not set
+# CONFIG_E1000E is not set
 # CONFIG_NS83820 is not set
 # CONFIG_HAMACHI is not set
 # CONFIG_YELLOWFIN is not set
@@ -771,6 +790,7 @@ CONFIG_E1000=y
 # 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=y
 # CONFIG_BNX2 is not set
@@ -780,14 +800,17 @@ CONFIG_NETDEV_10000=y
 # CONFIG_CHELSIO_T1 is not set
 # CONFIG_CHELSIO_T3 is not set
 CONFIG_EHEA=m
+# CONFIG_IXGBE is not set
 CONFIG_IXGB=m
 # CONFIG_IXGB_NAPI is not set
 CONFIG_S2IO=m
 # CONFIG_S2IO_NAPI is not set
 # CONFIG_MYRI10GE is not set
 # CONFIG_NETXEN_NIC is not set
+# CONFIG_NIU is not set
 # CONFIG_PASEMI_MAC is not set
 # CONFIG_MLX4_CORE is not set
+# CONFIG_TEHUTI is not set
 CONFIG_TR=y
 CONFIG_IBMOL=y
 # CONFIG_3C359 is not set
@@ -806,7 +829,6 @@ CONFIG_IBMOL=y
 # CONFIG_USB_KAWETH is not set
 # CONFIG_USB_PEGASUS is not set
 # CONFIG_USB_RTL8150 is not set
-# CONFIG_USB_USBNET_MII is not set
 # CONFIG_USB_USBNET is not set
 # CONFIG_WAN is not set
 # CONFIG_FDDI is not set
@@ -827,6 +849,7 @@ CONFIG_SLHC=m
 # CONFIG_NET_FC is not set
 # CONFIG_SHAPER is not set
 CONFIG_NETCONSOLE=y
+# CONFIG_NETCONSOLE_DYNAMIC is not set
 CONFIG_NETPOLL=y
 CONFIG_NETPOLL_TRAP=y
 CONFIG_NET_POLL_CONTROLLER=y
@@ -848,7 +871,6 @@ CONFIG_INPUT_MOUSEDEV=y
 CONFIG_INPUT_MOUSEDEV_SCREEN_X=1024
 CONFIG_INPUT_MOUSEDEV_SCREEN_Y=768
 # CONFIG_INPUT_JOYDEV is not set
-# CONFIG_INPUT_TSDEV is not set
 # CONFIG_INPUT_EVDEV is not set
 # CONFIG_INPUT_EVBUG is not set
 
@@ -935,14 +957,11 @@ CONFIG_HVC_CONSOLE=y
 CONFIG_HVC_RTAS=y
 CONFIG_HVCS=m
 # CONFIG_IPMI_HANDLER is not set
-# CONFIG_WATCHDOG is not set
 # CONFIG_HW_RANDOM 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_AGP is not set
-# CONFIG_DRM is not set
 CONFIG_RAW_DRIVER=y
 CONFIG_MAX_RAW_DEVS=1024
 # CONFIG_HANGCHECK_TIMER is not set
@@ -1012,6 +1031,13 @@ CONFIG_I2C_ALGOBIT=y
 # 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
@@ -1028,18 +1054,8 @@ CONFIG_I2C_ALGOBIT=y
 #
 # Graphics support
 #
-CONFIG_BACKLIGHT_LCD_SUPPORT=y
-CONFIG_LCD_CLASS_DEVICE=m
-CONFIG_BACKLIGHT_CLASS_DEVICE=y
-
-#
-# Display device support
-#
-CONFIG_DISPLAY_SUPPORT=y
-
-#
-# Display hardware drivers
-#
+# CONFIG_AGP is not set
+# CONFIG_DRM is not set
 # CONFIG_VGASTATE is not set
 # CONFIG_VIDEO_OUTPUT_CONTROL is not set
 CONFIG_FB=y
@@ -1048,6 +1064,7 @@ CONFIG_FB_DDC=y
 CONFIG_FB_CFB_FILLRECT=y
 CONFIG_FB_CFB_COPYAREA=y
 CONFIG_FB_CFB_IMAGEBLIT=y
+# CONFIG_FB_CFB_REV_PIXELS_IN_BYTE is not set
 # CONFIG_FB_SYS_FILLRECT is not set
 # CONFIG_FB_SYS_COPYAREA is not set
 # CONFIG_FB_SYS_IMAGEBLIT is not set
@@ -1097,6 +1114,19 @@ CONFIG_FB_RADEON_BACKLIGHT=y
 # CONFIG_FB_PM3 is not set
 CONFIG_FB_IBM_GXT4500=y
 # CONFIG_FB_VIRTUAL is not set
+CONFIG_BACKLIGHT_LCD_SUPPORT=y
+CONFIG_LCD_CLASS_DEVICE=m
+CONFIG_BACKLIGHT_CLASS_DEVICE=y
+# CONFIG_BACKLIGHT_CORGI is not set
+
+#
+# Display device support
+#
+CONFIG_DISPLAY_SUPPORT=y
+
+#
+# Display hardware drivers
+#
 
 #
 # Console display driver support
@@ -1121,6 +1151,7 @@ CONFIG_LOGO_LINUX_CLUT224=y
 CONFIG_HID_SUPPORT=y
 CONFIG_HID=y
 # CONFIG_HID_DEBUG is not set
+# CONFIG_HIDRAW is not set
 
 #
 # USB Input Devices
@@ -1258,19 +1289,6 @@ CONFIG_INFINIBAND_SRP=m
 # CONFIG_INFINIBAND_ISER is not set
 # CONFIG_EDAC is not set
 # CONFIG_RTC_CLASS is not set
-
-#
-# DMA Engine support
-#
-# CONFIG_DMA_ENGINE is not set
-
-#
-# DMA Clients
-#
-
-#
-# DMA Devices
-#
 # CONFIG_AUXDISPLAY is not set
 
 #
@@ -1315,6 +1333,7 @@ CONFIG_XFS_POSIX_ACL=y
 # CONFIG_GFS2_FS is not set
 CONFIG_OCFS2_FS=m
 CONFIG_OCFS2_DEBUG_MASKLOG=y
+# CONFIG_OCFS2_DEBUG_FS is not set
 # CONFIG_MINIX_FS is not set
 # CONFIG_ROMFS_FS is not set
 CONFIG_INOTIFY=y
@@ -1355,7 +1374,6 @@ CONFIG_TMPFS=y
 # CONFIG_TMPFS_POSIX_ACL is not set
 CONFIG_HUGETLBFS=y
 CONFIG_HUGETLB_PAGE=y
-CONFIG_RAMFS=y
 CONFIG_CONFIGFS_FS=m
 
 #
@@ -1374,10 +1392,7 @@ CONFIG_CRAMFS=y
 # CONFIG_QNX4FS_FS is not set
 # CONFIG_SYSV_FS is not set
 # CONFIG_UFS_FS is not set
-
-#
-# Network File Systems
-#
+CONFIG_NETWORK_FILESYSTEMS=y
 CONFIG_NFS_FS=y
 CONFIG_NFS_V3=y
 CONFIG_NFS_V3_ACL=y
@@ -1396,6 +1411,7 @@ CONFIG_NFS_ACL_SUPPORT=y
 CONFIG_NFS_COMMON=y
 CONFIG_SUNRPC=y
 CONFIG_SUNRPC_GSS=y
+CONFIG_SUNRPC_XPRT_RDMA=m
 # CONFIG_SUNRPC_BIND34 is not set
 CONFIG_RPCSEC_GSS_KRB5=y
 CONFIG_RPCSEC_GSS_SPKM3=m
@@ -1416,10 +1432,6 @@ CONFIG_CIFS_POSIX=y
 #
 # CONFIG_PARTITION_ADVANCED is not set
 CONFIG_MSDOS_PARTITION=y
-
-#
-# Native Language Support
-#
 CONFIG_NLS=y
 CONFIG_NLS_DEFAULT="iso8859-1"
 CONFIG_NLS_CODEPAGE_437=y
@@ -1460,10 +1472,6 @@ CONFIG_NLS_ISO8859_1=y
 # CONFIG_NLS_KOI8_R is not set
 # CONFIG_NLS_KOI8_U is not set
 # CONFIG_NLS_UTF8 is not set
-
-#
-# Distributed Lock Manager
-#
 # CONFIG_DLM is not set
 # CONFIG_UCC_SLOW is not set
 
@@ -1487,18 +1495,17 @@ CONFIG_PLIST=y
 CONFIG_HAS_IOMEM=y
 CONFIG_HAS_IOPORT=y
 CONFIG_HAS_DMA=y
-
-#
-# Instrumentation Support
-#
+CONFIG_INSTRUMENTATION=y
 CONFIG_PROFILING=y
 CONFIG_OPROFILE=y
 CONFIG_KPROBES=y
+CONFIG_MARKERS=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
@@ -1522,10 +1529,13 @@ 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_FORCED_INLINING=y
+# CONFIG_BOOT_PRINTK_DELAY is not set
 # CONFIG_RCU_TORTURE_TEST is not set
 # CONFIG_LKDTM is not set
 # CONFIG_FAULT_INJECTION is not set
+# CONFIG_SAMPLES is not set
 CONFIG_DEBUG_STACKOVERFLOW=y
 # CONFIG_DEBUG_STACK_USAGE is not set
 # CONFIG_DEBUG_PAGEALLOC is not set
@@ -1535,6 +1545,7 @@ CONFIG_XMON=y
 CONFIG_XMON_DEFAULT=y
 CONFIG_XMON_DISASSEMBLY=y
 CONFIG_IRQSTACKS=y
+CONFIG_VIRQ_DEBUG=y
 # CONFIG_BOOTX_TEXT is not set
 # CONFIG_PPC_EARLY_DEBUG is not set
 
@@ -1543,6 +1554,7 @@ CONFIG_IRQSTACKS=y
 #
 # 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
@@ -1563,6 +1575,7 @@ 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_CRYPTD is not set
 CONFIG_CRYPTO_DES=y
 # CONFIG_CRYPTO_FCRYPT is not set
@@ -1577,9 +1590,12 @@ CONFIG_CRYPTO_TEA=m
 CONFIG_CRYPTO_ARC4=m
 CONFIG_CRYPTO_KHAZAD=m
 CONFIG_CRYPTO_ANUBIS=m
+# CONFIG_CRYPTO_SEED 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 is not set
 # CONFIG_CRYPTO_HW is not set
+# CONFIG_PPC_CLOCK is not set
index 45a4ca0e0d7d4f0e7fe93d61bf83ed12eeabca0f..bc3c086ddfc0d2e94debde76e32c6f6675a610c6 100644 (file)
@@ -1,7 +1,7 @@
 #
 # Automatically generated make config: don't edit
-# Linux kernel version: 2.6.23-rc6
-# Fri Sep 14 13:20:06 2007
+# Linux kernel version: 2.6.24-rc4
+# Thu Dec  6 16:49:17 2007
 #
 # CONFIG_PPC64 is not set
 
@@ -22,8 +22,13 @@ 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
@@ -64,9 +69,12 @@ 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 is not set
 CONFIG_SYSFS_DEPRECATED=y
 # CONFIG_RELAY is not set
 CONFIG_BLK_DEV_INITRD=y
@@ -87,7 +95,6 @@ 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
@@ -153,6 +160,10 @@ CONFIG_440A=y
 # 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
@@ -174,6 +185,7 @@ CONFIG_FLATMEM_MANUAL=y
 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
@@ -198,11 +210,8 @@ 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
-
-#
-# PCCARD (PCMCIA/CardBus) support
-#
 # CONFIG_PCCARD is not set
 # CONFIG_HOTPLUG_PCI is not set
 
@@ -217,7 +226,7 @@ CONFIG_ARCH_SUPPORTS_MSI=y
 CONFIG_HIGHMEM_START=0xfe000000
 CONFIG_LOWMEM_SIZE=0x30000000
 CONFIG_KERNEL_START=0xc0000000
-CONFIG_TASK_SIZE=0x80000000
+CONFIG_TASK_SIZE=0xc0000000
 CONFIG_CONSISTENT_START=0xff100000
 CONFIG_CONSISTENT_SIZE=0x00200000
 CONFIG_BOOT_LOAD=0x01000000
@@ -254,6 +263,7 @@ CONFIG_IP_PNP_BOOTP=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
@@ -279,10 +289,6 @@ CONFIG_DEFAULT_TCP_CONG="cubic"
 # CONFIG_LAPB is not set
 # CONFIG_ECONET is not set
 # CONFIG_WAN_ROUTER is not set
-
-#
-# QoS and/or fair queueing
-#
 # CONFIG_NET_SCHED is not set
 
 #
@@ -311,6 +317,7 @@ CONFIG_DEFAULT_TCP_CONG="cubic"
 #
 # Generic Driver Options
 #
+CONFIG_UEVENT_HELPER_PATH="/sbin/hotplug"
 CONFIG_STANDALONE=y
 CONFIG_PREVENT_FIRMWARE_BUILD=y
 CONFIG_FW_LOADER=y
@@ -338,6 +345,7 @@ CONFIG_MTD_CHAR=y
 # 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
@@ -370,6 +378,7 @@ CONFIG_MTD_CFI_UTIL=y
 # 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
 
 #
@@ -429,10 +438,6 @@ CONFIG_MISC_DEVICES=y
 # CONFIG_SCSI_NETLINK is not set
 # CONFIG_ATA is not set
 # CONFIG_MD is not set
-
-#
-# Fusion MPT device support
-#
 # CONFIG_FUSION is not set
 
 #
@@ -451,12 +456,18 @@ CONFIG_NETDEVICES=y
 # 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_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_NS83820 is not set
 # CONFIG_HAMACHI is not set
 # CONFIG_YELLOWFIN is not set
@@ -464,6 +475,7 @@ CONFIG_NETDEV_1000=y
 # 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
@@ -472,11 +484,14 @@ CONFIG_NETDEV_1000=y
 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
 
 #
@@ -539,14 +554,11 @@ CONFIG_UNIX98_PTYS=y
 CONFIG_LEGACY_PTYS=y
 CONFIG_LEGACY_PTY_COUNT=256
 # CONFIG_IPMI_HANDLER is not set
-# CONFIG_WATCHDOG 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_AGP is not set
-# CONFIG_DRM is not set
 # CONFIG_RAW_DRIVER is not set
 # CONFIG_TCG_TPM is not set
 CONFIG_DEVPORT=y
@@ -560,6 +572,13 @@ CONFIG_DEVPORT=y
 # 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
@@ -576,16 +595,17 @@ 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
-# CONFIG_VGASTATE is not set
-CONFIG_VIDEO_OUTPUT_CONTROL=m
-# CONFIG_FB is not set
-# CONFIG_FB_IBM_GXT4500 is not set
 
 #
 # Sound
@@ -611,19 +631,6 @@ CONFIG_USB_ARCH_HAS_EHCI=y
 # CONFIG_EDAC is not set
 # CONFIG_RTC_CLASS is not set
 
-#
-# DMA Engine support
-#
-# CONFIG_DMA_ENGINE is not set
-
-#
-# DMA Clients
-#
-
-#
-# DMA Devices
-#
-
 #
 # Userspace I/O
 #
@@ -676,7 +683,6 @@ CONFIG_SYSFS=y
 CONFIG_TMPFS=y
 # CONFIG_TMPFS_POSIX_ACL is not set
 # CONFIG_HUGETLB_PAGE is not set
-CONFIG_RAMFS=y
 # CONFIG_CONFIGFS_FS is not set
 
 #
@@ -692,10 +698,12 @@ CONFIG_RAMFS=y
 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
@@ -704,10 +712,7 @@ CONFIG_CRAMFS=y
 # CONFIG_QNX4FS_FS is not set
 # CONFIG_SYSV_FS is not set
 # CONFIG_UFS_FS is not set
-
-#
-# Network File Systems
-#
+CONFIG_NETWORK_FILESYSTEMS=y
 CONFIG_NFS_FS=y
 CONFIG_NFS_V3=y
 # CONFIG_NFS_V3_ACL is not set
@@ -733,15 +738,7 @@ CONFIG_SUNRPC=y
 #
 # CONFIG_PARTITION_ADVANCED is not set
 CONFIG_MSDOS_PARTITION=y
-
-#
-# Native Language Support
-#
 # CONFIG_NLS is not set
-
-#
-# Distributed Lock Manager
-#
 # CONFIG_DLM is not set
 # CONFIG_UCC_SLOW is not set
 
@@ -761,16 +758,13 @@ CONFIG_PLIST=y
 CONFIG_HAS_IOMEM=y
 CONFIG_HAS_IOPORT=y
 CONFIG_HAS_DMA=y
-
-#
-# Instrumentation Support
-#
-# CONFIG_PROFILING is not set
+# CONFIG_INSTRUMENTATION 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
@@ -794,9 +788,12 @@ CONFIG_SCHED_DEBUG=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_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
@@ -814,6 +811,7 @@ CONFIG_PPC_EARLY_DEBUG=y
 # 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_CPM is not set
 CONFIG_PPC_EARLY_DEBUG_44x_PHYSLOW=0xef600300
 CONFIG_PPC_EARLY_DEBUG_44x_PHYSHIGH=0x1
 
@@ -822,6 +820,7 @@ CONFIG_PPC_EARLY_DEBUG_44x_PHYSHIGH=0x1
 #
 # 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
@@ -841,6 +840,7 @@ 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
@@ -854,9 +854,12 @@ CONFIG_CRYPTO_DES=y
 # 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
index 02896ecba490d684f75098573da216033a785658..79344639b7c92a5a1add6eda3ffad9024d15c1fb 100644 (file)
@@ -1,7 +1,7 @@
 #
 # Automatically generated make config: don't edit
-# Linux kernel version: 2.6.23
-# Thu Oct 18 12:54:18 2007
+# Linux kernel version: 2.6.24-rc4
+# Thu Dec  6 16:49:33 2007
 #
 # CONFIG_PPC64 is not set
 
@@ -65,11 +65,14 @@ 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
@@ -281,10 +284,6 @@ CONFIG_DEFAULT_TCP_CONG="cubic"
 # CONFIG_LAPB is not set
 # CONFIG_ECONET is not set
 # CONFIG_WAN_ROUTER is not set
-
-#
-# QoS and/or fair queueing
-#
 # CONFIG_NET_SCHED is not set
 
 #
@@ -507,7 +506,6 @@ CONFIG_UNIX98_PTYS=y
 CONFIG_LEGACY_PTYS=y
 CONFIG_LEGACY_PTY_COUNT=256
 # CONFIG_IPMI_HANDLER is not set
-# CONFIG_WATCHDOG is not set
 # CONFIG_HW_RANDOM is not set
 # CONFIG_NVRAM is not set
 # CONFIG_GEN_RTC is not set
@@ -524,6 +522,7 @@ CONFIG_LEGACY_PTY_COUNT=256
 # CONFIG_W1 is not set
 # CONFIG_POWER_SUPPLY is not set
 # CONFIG_HWMON is not set
+# CONFIG_WATCHDOG is not set
 
 #
 # Sonics Silicon Backplane
@@ -694,16 +693,13 @@ CONFIG_PLIST=y
 CONFIG_HAS_IOMEM=y
 CONFIG_HAS_IOPORT=y
 CONFIG_HAS_DMA=y
-
-#
-# Instrumentation Support
-#
-# CONFIG_PROFILING is not set
+# CONFIG_INSTRUMENTATION 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
@@ -727,10 +723,12 @@ 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_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
index 2c8e756d19a39846db6f9c986dcce7ebbd099c39..ed083feaf6f9763df72e9458d40552c4927ba611 100644 (file)
@@ -284,6 +284,10 @@ int main(void)
        DEFINE(CFG_SYSCALL_MAP32, offsetof(struct vdso_data, syscall_map_32));
        DEFINE(WTOM_CLOCK_SEC, offsetof(struct vdso_data, wtom_clock_sec));
        DEFINE(WTOM_CLOCK_NSEC, offsetof(struct vdso_data, wtom_clock_nsec));
+       DEFINE(CFG_ICACHE_BLOCKSZ, offsetof(struct vdso_data, icache_block_size));
+       DEFINE(CFG_DCACHE_BLOCKSZ, offsetof(struct vdso_data, dcache_block_size));
+       DEFINE(CFG_ICACHE_LOGBLOCKSZ, offsetof(struct vdso_data, icache_log_block_size));
+       DEFINE(CFG_DCACHE_LOGBLOCKSZ, offsetof(struct vdso_data, dcache_log_block_size));
 #ifdef CONFIG_PPC64
        DEFINE(CFG_SYSCALL_MAP64, offsetof(struct vdso_data, syscall_map_64));
        DEFINE(TVAL64_TV_SEC, offsetof(struct timeval, tv_sec));
@@ -322,8 +326,7 @@ int main(void)
        DEFINE(VMALLOC_START_VSID, KERNEL_VSID(VMALLOC_START));
 #endif
 
-#ifdef CONFIG_PPC64
        DEFINE(PGD_TABLE_SIZE, PGD_TABLE_SIZE);
-#endif
+
        return 0;
 }
index a5b13ae7fd20d6a225cee77942c7b26f19ab8f58..0f4fac51202007492fdc219e99533d119bcc3339 100644 (file)
@@ -1311,7 +1311,7 @@ empty_zero_page:
 
        .globl  swapper_pg_dir
 swapper_pg_dir:
-       .space  4096
+       .space  PGD_TABLE_SIZE
 
        .globl intercept_table
 intercept_table:
index cfefc2df8f2a082ee94718af19d6ddbc07eee84a..8552e67e3a8bebc9da26b01840dd996e1b2f6d0f 100644 (file)
@@ -994,7 +994,7 @@ empty_zero_page:
        .space  4096
        .globl  swapper_pg_dir
 swapper_pg_dir:
-       .space  4096
+       .space  PGD_TABLE_SIZE
 
 
 /* Stack for handling critical exceptions from kernel mode */
index 409db6123924fde81088c3a39d40a5e520280041..56aba84c1f6ebda212cb07a4374afdbe65c1f09a 100644 (file)
@@ -722,7 +722,7 @@ empty_zero_page:
  */
        .globl  swapper_pg_dir
 swapper_pg_dir:
-       .space  8192
+       .space  PGD_TABLE_SIZE
 
 /* Reserved 4k for the critical exception stack & 4k for the machine
  * check stack per CPU for kernel mode exceptions */
index 4b9822728aeab30ff6c685f00c36c1e3423139f5..7aecb39a5a45e806b62fc7d236f820609d398a24 100644 (file)
@@ -1035,7 +1035,7 @@ empty_zero_page:
        .space  4096
        .globl  swapper_pg_dir
 swapper_pg_dir:
-       .space  4096
+       .space  PGD_TABLE_SIZE
 
 /* Reserved 4k for the critical exception stack & 4k for the machine
  * check stack per CPU for kernel mode exceptions */
index 41e13f4cc6e3da1e34ac662d4f558f5fa668fccd..b9d88374f14f07abe21e51367110e6c82129ba99 100644 (file)
@@ -350,7 +350,7 @@ struct task_struct *__switch_to(struct task_struct *prev,
        local_irq_save(flags);
 
        account_system_vtime(current);
-       account_process_tick(current, 0);
+       account_process_vtime(current);
        calculate_steal_time();
 
        last = _switch(old_thread, new_thread);
index 214780798289212eda799ebcbdde8025602e7c53..52e95c2158c02418789d3e238b96b31ee42aa9d1 100644 (file)
@@ -19,6 +19,9 @@
 #include <linux/init.h>
 #include <linux/capability.h>
 #include <linux/delay.h>
+#include <linux/smp.h>
+#include <linux/completion.h>
+#include <linux/cpumask.h>
 
 #include <asm/prom.h>
 #include <asm/rtas.h>
@@ -34,6 +37,8 @@
 #include <asm/lmb.h>
 #include <asm/udbg.h>
 #include <asm/syscalls.h>
+#include <asm/smp.h>
+#include <asm/atomic.h>
 
 struct rtas_t rtas = {
        .lock = SPIN_LOCK_UNLOCKED
@@ -41,8 +46,10 @@ struct rtas_t rtas = {
 EXPORT_SYMBOL(rtas);
 
 struct rtas_suspend_me_data {
-       long waiting;
-       struct rtas_args *args;
+       atomic_t working; /* number of cpus accessing this struct */
+       int token; /* ibm,suspend-me */
+       int error;
+       struct completion *complete; /* wait on this until working == 0 */
 };
 
 DEFINE_SPINLOCK(rtas_data_buf_lock);
@@ -657,50 +664,62 @@ static int ibm_suspend_me_token = RTAS_UNKNOWN_SERVICE;
 #ifdef CONFIG_PPC_PSERIES
 static void rtas_percpu_suspend_me(void *info)
 {
-       int i;
        long rc;
-       long flags;
+       unsigned long msr_save;
+       int cpu;
        struct rtas_suspend_me_data *data =
                (struct rtas_suspend_me_data *)info;
 
-       /*
-        * We use "waiting" to indicate our state.  As long
-        * as it is >0, we are still trying to all join up.
-        * If it goes to 0, we have successfully joined up and
-        * one thread got H_CONTINUE.  If any error happens,
-        * we set it to <0.
-        */
-       local_irq_save(flags);
-       do {
-               rc = plpar_hcall_norets(H_JOIN);
-               smp_rmb();
-       } while (rc == H_SUCCESS && data->waiting > 0);
-       if (rc == H_SUCCESS)
-               goto out;
+       atomic_inc(&data->working);
+
+       /* really need to ensure MSR.EE is off for H_JOIN */
+       msr_save = mfmsr();
+       mtmsr(msr_save & ~(MSR_EE));
+
+       rc = plpar_hcall_norets(H_JOIN);
+
+       mtmsr(msr_save);
 
-       if (rc == H_CONTINUE) {
-               data->waiting = 0;
-               data->args->args[data->args->nargs] =
-                       rtas_call(ibm_suspend_me_token, 0, 1, NULL);
-               for_each_possible_cpu(i)
-                       plpar_hcall_norets(H_PROD,i);
+       if (rc == H_SUCCESS) {
+               /* This cpu was prodded and the suspend is complete. */
+               goto out;
+       } else if (rc == H_CONTINUE) {
+               /* All other cpus are in H_JOIN, this cpu does
+                * the suspend.
+                */
+               printk(KERN_DEBUG "calling ibm,suspend-me on cpu %i\n",
+                      smp_processor_id());
+               data->error = rtas_call(data->token, 0, 1, NULL);
+
+               if (data->error)
+                       printk(KERN_DEBUG "ibm,suspend-me returned %d\n",
+                              data->error);
        } else {
-               data->waiting = -EBUSY;
-               printk(KERN_ERR "Error on H_JOIN hypervisor call\n");
+               printk(KERN_ERR "H_JOIN on cpu %i failed with rc = %ld\n",
+                      smp_processor_id(), rc);
+               data->error = rc;
        }
-
+       /* This cpu did the suspend or got an error; in either case,
+        * we need to prod all other other cpus out of join state.
+        * Extra prods are harmless.
+        */
+       for_each_online_cpu(cpu)
+               plpar_hcall_norets(H_PROD, get_hard_smp_processor_id(cpu));
 out:
-       local_irq_restore(flags);
-       return;
+       if (atomic_dec_return(&data->working) == 0)
+               complete(data->complete);
 }
 
 static int rtas_ibm_suspend_me(struct rtas_args *args)
 {
-       int i;
        long state;
        long rc;
        unsigned long retbuf[PLPAR_HCALL_BUFSIZE];
        struct rtas_suspend_me_data data;
+       DECLARE_COMPLETION_ONSTACK(done);
+
+       if (!rtas_service_present("ibm,suspend-me"))
+               return -ENOSYS;
 
        /* Make sure the state is valid */
        rc = plpar_hcall(H_VASI_STATE, retbuf,
@@ -721,25 +740,23 @@ static int rtas_ibm_suspend_me(struct rtas_args *args)
                return 0;
        }
 
-       data.waiting = 1;
-       data.args = args;
+       atomic_set(&data.working, 0);
+       data.token = rtas_token("ibm,suspend-me");
+       data.error = 0;
+       data.complete = &done;
 
        /* Call function on all CPUs.  One of us will make the
         * rtas call
         */
        if (on_each_cpu(rtas_percpu_suspend_me, &data, 1, 0))
-               data.waiting = -EINVAL;
+               data.error = -EINVAL;
 
-       if (data.waiting != 0)
-               printk(KERN_ERR "Error doing global join\n");
+       wait_for_completion(&done);
 
-       /* Prod each CPU.  This won't hurt, and will wake
-        * anyone we successfully put to sleep with H_JOIN.
-        */
-       for_each_possible_cpu(i)
-               plpar_hcall_norets(H_PROD, i);
+       if (data.error != 0)
+               printk(KERN_ERR "Error doing global join\n");
 
-       return data.waiting;
+       return data.error;
 }
 #else /* CONFIG_PPC_PSERIES */
 static int rtas_ibm_suspend_me(struct rtas_args *args)
index c0d77723ba1141124733e05ab64b93343957a7fe..a925a8eae121e1946c8d39959775b4b07de1c561 100644 (file)
@@ -241,8 +241,9 @@ void account_system_vtime(struct task_struct *tsk)
                /* deltascaled includes both user and system time.
                 * Hence scale it based on the purr ratio to estimate
                 * the system time */
-               deltascaled = deltascaled * get_paca()->system_time /
-                       (get_paca()->system_time + get_paca()->user_time);
+               if (get_paca()->user_time)
+                       deltascaled = deltascaled * get_paca()->system_time /
+                            (get_paca()->system_time + get_paca()->user_time);
                delta += get_paca()->system_time;
                get_paca()->system_time = 0;
        }
index 2322ba5cce4ce23c3eca48336686518671d05283..3702df7dc567e160f08cfe09b5b825b5298a0f94 100644 (file)
@@ -699,11 +699,22 @@ static int __init vdso_init(void)
        vdso_data->icache_size = ppc64_caches.isize;
        vdso_data->icache_line_size = ppc64_caches.iline_size;
 
+       /* XXXOJN: Blocks should be added to ppc64_caches and used instead */
+       vdso_data->dcache_block_size = ppc64_caches.dline_size;
+       vdso_data->icache_block_size = ppc64_caches.iline_size;
+       vdso_data->dcache_log_block_size = ppc64_caches.log_dline_size;
+       vdso_data->icache_log_block_size = ppc64_caches.log_iline_size;
+
        /*
         * Calculate the size of the 64 bits vDSO
         */
        vdso64_pages = (&vdso64_end - &vdso64_start) >> PAGE_SHIFT;
        DBG("vdso64_kbase: %p, 0x%x pages\n", vdso64_kbase, vdso64_pages);
+#else
+       vdso_data->dcache_block_size = L1_CACHE_BYTES;
+       vdso_data->dcache_log_block_size = L1_CACHE_SHIFT;
+       vdso_data->icache_block_size = L1_CACHE_BYTES;
+       vdso_data->icache_log_block_size = L1_CACHE_SHIFT;
 #endif /* CONFIG_PPC64 */
 
 
index 9cb319992c3888dab15552977dab9dd4e0c4ec6e..1ba6feb71b313fd1b1208cc827f617a8f2692390 100644 (file)
  *
  * Flushes the data cache & invalidate the instruction cache for the
  * provided range [start, end[
- *
- * Note: all CPUs supported by this kernel have a 128 bytes cache
- * line size so we don't have to peek that info from the datapage
  */
 V_FUNCTION_BEGIN(__kernel_sync_dicache)
   .cfi_startproc
-       li      r5,127
-       andc    r6,r3,r5                /* round low to line bdy */
+       mflr    r12
+  .cfi_register lr,r12
+       mr      r11,r3
+       bl      __get_datapage@local
+       mtlr    r12
+       mr      r10,r3
+
+       lwz     r7,CFG_DCACHE_BLOCKSZ(r10)
+       addi    r5,r7,-1
+       andc    r6,r11,r5               /* round low to line bdy */
        subf    r8,r6,r4                /* compute length */
        add     r8,r8,r5                /* ensure we get enough */
-       srwi.   r8,r8,7                 /* compute line count */
+       lwz     r9,CFG_DCACHE_LOGBLOCKSZ(r10)
+       srw.    r8,r8,r9                /* compute line count */
        crclr   cr0*4+so
        beqlr                           /* nothing to do? */
        mtctr   r8
-       mr      r3,r6
-1:     dcbst   0,r3
-       addi    r3,r3,128
+1:     dcbst   0,r6
+       add     r6,r6,r7
        bdnz    1b
        sync
+
+/* Now invalidate the instruction cache */
+
+       lwz     r7,CFG_ICACHE_BLOCKSZ(r10)
+       addi    r5,r7,-1
+       andc    r6,r11,r5               /* round low to line bdy */
+       subf    r8,r6,r4                /* compute length */
+       add     r8,r8,r5
+       lwz     r9,CFG_ICACHE_LOGBLOCKSZ(r10)
+       srw.    r8,r8,r9                /* compute line count */
+       crclr   cr0*4+so
+       beqlr                           /* nothing to do? */
        mtctr   r8
-1:     icbi    0,r6
-       addi    r6,r6,128
-       bdnz    1b
+2:     icbi    0,r6
+       add     r6,r6,r7
+       bdnz    2b
        isync
        li      r3,0
        blr
index 66a36d3cc6ad13ae02173f6b41a52fba3e043086..69c5af2b3c96cfd46a85a2c250a9727e585fcabf 100644 (file)
  *
  * Flushes the data cache & invalidate the instruction cache for the
  * provided range [start, end[
- *
- * Note: all CPUs supported by this kernel have a 128 bytes cache
- * line size so we don't have to peek that info from the datapage
  */
 V_FUNCTION_BEGIN(__kernel_sync_dicache)
   .cfi_startproc
-       li      r5,127
-       andc    r6,r3,r5                /* round low to line bdy */
+       mflr    r12
+  .cfi_register lr,r12
+       mr      r11,r3
+       bl      V_LOCAL_FUNC(__get_datapage)
+       mtlr    r12
+       mr      r10,r3
+
+       lwz     r7,CFG_DCACHE_BLOCKSZ(r10)
+       addi    r5,r7,-1
+       andc    r6,r11,r5               /* round low to line bdy */
        subf    r8,r6,r4                /* compute length */
        add     r8,r8,r5                /* ensure we get enough */
-       srwi.   r8,r8,7                 /* compute line count */
+       lwz     r9,CFG_DCACHE_LOGBLOCKSZ(r10)
+       srw.    r8,r8,r9                /* compute line count */
        crclr   cr0*4+so
        beqlr                           /* nothing to do? */
        mtctr   r8
-       mr      r3,r6
-1:     dcbst   0,r3
-       addi    r3,r3,128
+1:     dcbst   0,r6
+       add     r6,r6,r7
        bdnz    1b
        sync
+
+/* Now invalidate the instruction cache */
+
+       lwz     r7,CFG_ICACHE_BLOCKSZ(r10)
+       addi    r5,r7,-1
+       andc    r6,r11,r5               /* round low to line bdy */
+       subf    r8,r6,r4                /* compute length */
+       add     r8,r8,r5
+       lwz     r9,CFG_ICACHE_LOGBLOCKSZ(r10)
+       srw.    r8,r8,r9                /* compute line count */
+       crclr   cr0*4+so
+       beqlr                           /* nothing to do? */
        mtctr   r8
-1:     icbi    0,r6
-       addi    r6,r6,128
-       bdnz    1b
+2:     icbi    0,r6
+       add     r6,r6,r7
+       bdnz    2b
        isync
        li      r3,0
        blr
index 81eb96ec13b2de917bb8d12666aeed587f4b8838..5402fb6b3aae2b49377d56016996e02e7ded55b8 100644 (file)
@@ -464,7 +464,7 @@ void update_mmu_cache(struct vm_area_struct *vma, unsigned long address,
                 * we invalidate the TLB here, thus avoiding dcbst
                 * misbehaviour.
                 */
-               _tlbie(address);
+               _tlbie(address, 0 /* 8xx doesn't care about PID */);
 #endif
                if (!PageReserved(page)
                    && !test_bit(PG_arch_1, &page->flags)) {
index eb3a732e91db28a5bb17b2c1711992906e597ae4..ebfd13dc9d19f1a8d437d12adb06269a385855b4 100644 (file)
@@ -56,7 +56,7 @@ extern unsigned long total_lowmem;
  * architectures.  -- Dan
  */
 #if defined(CONFIG_8xx)
-#define flush_HPTE(X, va, pg)  _tlbie(va)
+#define flush_HPTE(X, va, pg)  _tlbie(va, 0 /* 8xx doesn't care about PID */)
 #define MMU_init_hw()          do { } while(0)
 #define mmu_mapin_ram()                (0UL)
 
index 9e85bda762166a7c16e54cabcab97114815fbbf7..50448d5de9d247c9657c66a85e76f225483fc4f4 100644 (file)
@@ -20,6 +20,7 @@
 #include <asm/lmb.h>
 #include <asm/abs_addr.h>
 #include <asm/firmware.h>
+#include <asm/iseries/hv_call.h>
 
 struct stab_entry {
        unsigned long esid_data;
index eb0c136b1c4408f2bd64fe8c403389a17a7c8440..ff6db243179887cccc3f5da9da5c564e2b1fb418 100644 (file)
  */
 
 #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/of_platform.h>
 
 static struct of_device_id walnut_of_bus[] = {
        { .compatible = "ibm,plb3", },
index 470e1a3fd755cced07b812f6507908daab22fcd1..be23f112184f66be1b175cc612f5a7ae2e142ec1 100644 (file)
  * 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/of_platform.h>
 #include "44x.h"
 
 static struct of_device_id bamboo_of_bus[] = {
index 40e18fcb666c09ba0f1d7822ded77d560182cc5c..6cd3476767cc3b8583332dd8e351166ebc761d97 100644 (file)
  */
 
 #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/of_platform.h>
 
 #include "44x.h"
 
index 30700b31d43b7687d94495e0653fffb0e7c88a9c..21a9dd14f297c87175e81d88c1b6f997aed03ab7 100644 (file)
  * 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/of_platform.h>
 #include "44x.h"
 
 static struct of_device_id sequoia_of_bus[] = {
index 972fa8528a8c606614767ec12f2539c8c001cad6..39ee7a13b25a61622dab10bf9f95c75f9299b03b 100644 (file)
@@ -90,10 +90,11 @@ static void __init mpc832x_sys_setup_arch(void)
 
        if ((np = of_find_compatible_node(NULL, "network", "ucc_geth"))
                        != NULL){
-               /* Reset the Ethernet PHY */
-               bcsr_regs[9] &= ~0x20;
+               /* Reset the Ethernet PHYs */
+#define BCSR8_FETH_RST 0x50
+               bcsr_regs[8] &= ~BCSR8_FETH_RST;
                udelay(1000);
-               bcsr_regs[9] |= 0x20;
+               bcsr_regs[8] |= BCSR8_FETH_RST;
                iounmap(bcsr_regs);
                of_node_put(np);
        }
@@ -145,30 +146,6 @@ static void __init mpc832x_sys_init_IRQ(void)
 #endif                         /* CONFIG_QUICC_ENGINE */
 }
 
-#if defined(CONFIG_I2C_MPC) && defined(CONFIG_SENSORS_DS1374)
-extern ulong ds1374_get_rtc_time(void);
-extern int ds1374_set_rtc_time(ulong);
-
-static int __init mpc832x_rtc_hookup(void)
-{
-       struct timespec tv;
-
-       if (!machine_is(mpc832x_mds))
-               return 0;
-
-       ppc_md.get_rtc_time = ds1374_get_rtc_time;
-       ppc_md.set_rtc_time = ds1374_set_rtc_time;
-
-       tv.tv_nsec = 0;
-       tv.tv_sec = (ppc_md.get_rtc_time) ();
-       do_settimeofday(&tv);
-
-       return 0;
-}
-
-late_initcall(mpc832x_rtc_hookup);
-#endif
-
 /*
  * Called very early, MMU is off, device-tree isn't unflattened
  */
index fbca336aa0ae8466f0b94cd0c96adf57bca636f3..d4bd04001b99567035247758b1d22919955b56ae 100644 (file)
  */
 
 #include <linux/pci.h>
+#include <linux/interrupt.h>
 #include <linux/spi/spi.h>
+#include <linux/spi/mmc_spi.h>
+#include <linux/mmc/host.h>
 
 #include <asm/of_platform.h>
 #include <asm/time.h>
@@ -46,15 +49,16 @@ static void mpc83xx_spi_deactivate_cs(u8 cs, u8 polarity)
        par_io_data_set(3, 13, !polarity);
 }
 
+static struct mmc_spi_platform_data mpc832x_mmc_pdata = {
+       .ocr_mask = MMC_VDD_33_34,
+};
+
 static struct spi_board_info mpc832x_spi_boardinfo = {
        .bus_num = 0x4c0,
        .chip_select = 0,
        .max_speed_hz = 50000000,
-       /*
-        * XXX: This is spidev (spi in userspace) stub, should
-        * be replaced by "mmc_spi" when mmc_spi will hit mainline.
-        */
-       .modalias = "spidev",
+       .modalias = "mmc_spi",
+       .platform_data = &mpc832x_mmc_pdata,
 };
 
 static int __init mpc832x_spi_init(void)
index 00aed7c2269ea4e56cc74950cb3ccf92736d04a8..a81bb3ce6b94460faf95cffe7f8a88e45696e289 100644 (file)
@@ -106,30 +106,6 @@ static void __init mpc834x_mds_init_IRQ(void)
        ipic_set_default_priority();
 }
 
-#if defined(CONFIG_I2C_MPC) && defined(CONFIG_SENSORS_DS1374)
-extern ulong ds1374_get_rtc_time(void);
-extern int ds1374_set_rtc_time(ulong);
-
-static int __init mpc834x_rtc_hookup(void)
-{
-       struct timespec tv;
-
-       if (!machine_is(mpc834x_mds))
-               return 0;
-
-       ppc_md.get_rtc_time = ds1374_get_rtc_time;
-       ppc_md.set_rtc_time = ds1374_set_rtc_time;
-
-       tv.tv_nsec = 0;
-       tv.tv_sec = (ppc_md.get_rtc_time) ();
-       do_settimeofday(&tv);
-
-       return 0;
-}
-
-late_initcall(mpc834x_rtc_hookup);
-#endif
-
 /*
  * Called very early, MMU is off, device-tree isn't unflattened
  */
index 0f3855c95ff5c6c0a4bc5d1caf78bfb2d6561be0..e40012f8f4886b323a83442baabf5dc720185d8a 100644 (file)
@@ -96,14 +96,39 @@ static void __init mpc836x_mds_setup_arch(void)
 
        if ((np = of_find_compatible_node(NULL, "network", "ucc_geth"))
                        != NULL){
+               uint svid;
+
                /* Reset the Ethernet PHY */
-               bcsr_regs[9] &= ~0x20;
+#define BCSR9_GETHRST 0x20
+               clrbits8(&bcsr_regs[9], BCSR9_GETHRST);
                udelay(1000);
-               bcsr_regs[9] |= 0x20;
+               setbits8(&bcsr_regs[9], BCSR9_GETHRST);
+
+               /* handle mpc8360ea rev.2.1 erratum 2: RGMII Timing */
+               svid = mfspr(SPRN_SVR);
+               if (svid == 0x80480021) {
+                       void __iomem *immap;
+
+                       immap = ioremap(get_immrbase() + 0x14a8, 8);
+
+                       /*
+                        * IMMR + 0x14A8[4:5] = 11 (clk delay for UCC 2)
+                        * IMMR + 0x14A8[18:19] = 11 (clk delay for UCC 1)
+                        */
+                       setbits32(immap, 0x0c003000);
+
+                       /*
+                        * IMMR + 0x14AC[20:27] = 10101010
+                        * (data delay for both UCC's)
+                        */
+                       clrsetbits_be32(immap + 4, 0xff0, 0xaa0);
+
+                       iounmap(immap);
+               }
+
                iounmap(bcsr_regs);
                of_node_put(np);
        }
-
 #endif                         /* CONFIG_QUICC_ENGINE */
 }
 
@@ -152,30 +177,6 @@ static void __init mpc836x_mds_init_IRQ(void)
 #endif                         /* CONFIG_QUICC_ENGINE */
 }
 
-#if defined(CONFIG_I2C_MPC) && defined(CONFIG_SENSORS_DS1374)
-extern ulong ds1374_get_rtc_time(void);
-extern int ds1374_set_rtc_time(ulong);
-
-static int __init mpc8360_rtc_hookup(void)
-{
-       struct timespec tv;
-
-       if (!machine_is(mpc836x_mds))
-               return 0;
-
-       ppc_md.get_rtc_time = ds1374_get_rtc_time;
-       ppc_md.set_rtc_time = ds1374_set_rtc_time;
-
-       tv.tv_nsec = 0;
-       tv.tv_sec = (ppc_md.get_rtc_time) ();
-       do_settimeofday(&tv);
-
-       return 0;
-}
-
-late_initcall(mpc8360_rtc_hookup);
-#endif
-
 /*
  * Called very early, MMU is off, device-tree isn't unflattened
  */
index eafe7605cdaca6f3d10b8966c8682ceeec0167c3..b45160f8d084b3e248abfeaa1853b6dabfa2cb7e 100644 (file)
@@ -130,7 +130,7 @@ int mpc831x_usb_cfg(void)
        out_be32(immap + MPC83XX_SCCR_OFFS, temp);
 
        /* Configure pin mux for ULPI.  There is no pin mux for UTMI */
-       if (!strcmp(prop, "ulpi")) {
+       if (prop && !strcmp(prop, "ulpi")) {
                temp = in_be32(immap + MPC83XX_SICRL_OFFS);
                temp &= ~MPC831X_SICRL_USB_MASK;
                temp |= MPC831X_SICRL_USB_ULPI;
@@ -153,13 +153,13 @@ int mpc831x_usb_cfg(void)
        usb_regs = ioremap(res.start, res.end - res.start + 1);
 
        /* Using on-chip PHY */
-       if (!strcmp(prop, "utmi_wide") ||
-                       !strcmp(prop, "utmi")) {
+       if (prop && (!strcmp(prop, "utmi_wide") ||
+                    !strcmp(prop, "utmi"))) {
                /* Set UTMI_PHY_EN, REFSEL to 48MHZ */
                out_be32(usb_regs + FSL_USB2_CONTROL_OFFS,
                                CONTROL_UTMI_PHY_EN | CONTROL_REFSEL_48MHZ);
        /* Using external UPLI PHY */
-       } else if (!strcmp(prop, "ulpi")) {
+       } else if (prop && !strcmp(prop, "ulpi")) {
                /* Set PHY_CLK_SEL to ULPI */
                temp = CONTROL_PHY_CLK_SEL_ULPI;
 #ifdef CONFIG_USB_OTG
index 0966d093db4321925baf4fb6057c1760c01a1bf6..c0e968a4c21116d5ffd4a8bfb8ed7182cc79f15d 100644 (file)
@@ -171,6 +171,7 @@ static int spufs_rmdir(struct inode *parent, struct dentry *dir)
 {
        /* remove all entries */
        spufs_prune_dir(dir);
+       d_drop(dir);
 
        return simple_rmdir(parent, dir);
 }
index e43465d34d29aac181ae728042fe3b86164358d3..0340a342f7726c8a721eacf36491f2c604d50cce 100644 (file)
@@ -317,8 +317,12 @@ chrp_find_bridges(void)
 /* SL82C105 IDE Control/Status Register */
 #define SL82C105_IDECSR                0x40
 
-/* Fixup for Winbond ATA quirk, required for briq */
-void chrp_pci_fixup_winbond_ata(struct pci_dev *sl82c105)
+/* Fixup for Winbond ATA quirk, required for briq mostly because the
+ * 8259 is configured for level sensitive IRQ 14 and so wants the
+ * ATA controller to be set to fully native mode or bad things
+ * will happen.
+ */
+static void __devinit chrp_pci_fixup_winbond_ata(struct pci_dev *sl82c105)
 {
        u8 progif;
 
@@ -334,10 +338,15 @@ void chrp_pci_fixup_winbond_ata(struct pci_dev *sl82c105)
                sl82c105->class |= 0x05;
                /* Disable SL82C105 second port */
                pci_write_config_word(sl82c105, SL82C105_IDECSR, 0x0003);
+               /* Clear IO BARs, they will be reassigned */
+               pci_write_config_dword(sl82c105, PCI_BASE_ADDRESS_0, 0);
+               pci_write_config_dword(sl82c105, PCI_BASE_ADDRESS_1, 0);
+               pci_write_config_dword(sl82c105, PCI_BASE_ADDRESS_2, 0);
+               pci_write_config_dword(sl82c105, PCI_BASE_ADDRESS_3, 0);
        }
 }
-DECLARE_PCI_FIXUP_FINAL(PCI_VENDOR_ID_WINBOND, PCI_DEVICE_ID_WINBOND_82C105,
-               chrp_pci_fixup_winbond_ata);
+DECLARE_PCI_FIXUP_EARLY(PCI_VENDOR_ID_WINBOND, PCI_DEVICE_ID_WINBOND_82C105,
+                       chrp_pci_fixup_winbond_ata);
 
 /* Pegasos2 firmware version 20040810 configures the built-in IDE controller
  * in legacy mode, but sets the PCI registers to PCI native mode.
@@ -345,7 +354,7 @@ DECLARE_PCI_FIXUP_FINAL(PCI_VENDOR_ID_WINBOND, PCI_DEVICE_ID_WINBOND_82C105,
  * mode as well. The same fixup must be done to the class-code property in
  * the IDE node /pci@80000000/ide@C,1
  */
-static void chrp_pci_fixup_vt8231_ata(struct pci_dev *viaide)
+static void __devinit chrp_pci_fixup_vt8231_ata(struct pci_dev *viaide)
 {
        u8 progif;
        struct pci_dev *viaisa;
@@ -366,4 +375,4 @@ static void chrp_pci_fixup_vt8231_ata(struct pci_dev *viaide)
 
        pci_dev_put(viaisa);
 }
-DECLARE_PCI_FIXUP_FINAL(PCI_VENDOR_ID_VIA, PCI_DEVICE_ID_VIA_82C586_1, chrp_pci_fixup_vt8231_ata);
+DECLARE_PCI_FIXUP_EARLY(PCI_VENDOR_ID_VIA, PCI_DEVICE_ID_VIA_82C586_1, chrp_pci_fixup_vt8231_ata);
index e484cac750955bbdec66800ab00fb832136dfc81..653a5eb91c905049610d7168044c26da5f9e642e 100644 (file)
@@ -144,6 +144,7 @@ static int __init prpmc2800_probe(void)
                strncpy(prpmc2800_platform_name, m,
                        min((int)len, PLATFORM_NAME_MAX - 1));
 
+       _set_L2CR(_get_L2CR() | L2CR_L2E);
        return 1;
 }
 
index 3a5d112af5e096632657e59dce37252ef5b7a243..3d62060498b4256151a3e63aa28e94350552fcec 100644 (file)
@@ -214,7 +214,7 @@ static __init void pas_init_IRQ(void)
        printk(KERN_DEBUG "OpenPIC addr: %lx\n", openpic_addr);
 
        mpic = mpic_alloc(mpic_node, openpic_addr,
-                         MPIC_PRIMARY|MPIC_LARGE_VECTORS|MPIC_WANTS_RESET,
+                         MPIC_PRIMARY|MPIC_LARGE_VECTORS,
                          0, 0, " PAS-OPIC  ");
        BUG_ON(!mpic);
 
index ec49099830d55b0fe5c256180b3ac8b3c7f4eafb..f852ae3e0ee42a016adc6155b2f5c37942f6dbc5 100644 (file)
@@ -1243,15 +1243,22 @@ void pmac_pci_fixup_pciata(struct pci_dev* dev)
  good:
        pci_read_config_byte(dev, PCI_CLASS_PROG, &progif);
        if ((progif & 5) != 5) {
-               printk(KERN_INFO "Forcing PCI IDE into native mode: %s\n",
+               printk(KERN_INFO "PCI: %s Forcing PCI IDE into native mode\n",
                       pci_name(dev));
                (void) pci_write_config_byte(dev, PCI_CLASS_PROG, progif|5);
                if (pci_read_config_byte(dev, PCI_CLASS_PROG, &progif) ||
                    (progif & 5) != 5)
                        printk(KERN_ERR "Rewrite of PROGIF failed !\n");
+               else {
+                       /* Clear IO BARs, they will be reassigned */
+                       pci_write_config_dword(dev, PCI_BASE_ADDRESS_0, 0);
+                       pci_write_config_dword(dev, PCI_BASE_ADDRESS_1, 0);
+                       pci_write_config_dword(dev, PCI_BASE_ADDRESS_2, 0);
+                       pci_write_config_dword(dev, PCI_BASE_ADDRESS_3, 0);
+               }
        }
 }
-DECLARE_PCI_FIXUP_FINAL(PCI_ANY_ID, PCI_ANY_ID, pmac_pci_fixup_pciata);
+DECLARE_PCI_FIXUP_EARLY(PCI_ANY_ID, PCI_ANY_ID, pmac_pci_fixup_pciata);
 #endif
 
 /*
index 16e4e401b8203f1668dd83c0c0ee0d1bfb8b54d5..306a9d07491de3ea786695ba205472c1155589d0 100644 (file)
@@ -21,7 +21,7 @@ config PPC_SPLPAR
 
 config EEH
        bool "PCI Extended Error Handling (EEH)" if EMBEDDED
-       depends on PPC_PSERIES
+       depends on PPC_PSERIES && PCI
        default y if !EMBEDDED
 
 config SCANLOG
index 5149716c734d9cf605ed9d8cc2cff65f7c7cee9b..847a5496b86985b194c1c46fbd8dcd26ccdfa89f 100644 (file)
@@ -97,6 +97,22 @@ static void uic_ack_irq(unsigned int virq)
        spin_unlock_irqrestore(&uic->lock, flags);
 }
 
+static void uic_mask_ack_irq(unsigned int virq)
+{
+       struct uic *uic = get_irq_chip_data(virq);
+       unsigned int src = uic_irq_to_hw(virq);
+       unsigned long flags;
+       u32 er, sr;
+
+       sr = 1 << (31-src);
+       spin_lock_irqsave(&uic->lock, flags);
+       er = mfdcr(uic->dcrbase + UIC_ER);
+       er &= ~sr;
+       mtdcr(uic->dcrbase + UIC_ER, er);
+       mtdcr(uic->dcrbase + UIC_SR, sr);
+       spin_unlock_irqrestore(&uic->lock, flags);
+}
+
 static int uic_set_irq_type(unsigned int virq, unsigned int flow_type)
 {
        struct uic *uic = get_irq_chip_data(virq);
@@ -152,7 +168,7 @@ static struct irq_chip uic_irq_chip = {
        .typename       = " UIC  ",
        .unmask         = uic_unmask_irq,
        .mask           = uic_mask_irq,
-/*     .mask_ack       = uic_mask_irq_and_ack, */
+       .mask_ack       = uic_mask_ack_irq,
        .ack            = uic_ack_irq,
        .set_type       = uic_set_irq_type,
 };
index 69bad91a6b656d5504f112147fa7d43d4054b46c..d66cacdb95be69d0090e11ac27f4b8a665b9a5e9 100644 (file)
@@ -719,7 +719,7 @@ CONFIG_DEBUG_INFO=y
 CONFIG_FORCED_INLINING=y
 # CONFIG_RCU_TORTURE_TEST is not set
 # CONFIG_KGDB is not set
-CONFIG_XMON=y
+# CONFIG_XMON is not set
 # CONFIG_BDI_SWITCH is not set
 # CONFIG_SERIAL_TEXT_DEBUG is not set
 
index a78896ea456066ecbfea77d066a99cbf99f4e311..71bcfa7ab7f7f11edde0c48128fa7b35dd4326d9 100644 (file)
@@ -720,7 +720,7 @@ CONFIG_DEBUG_INFO=y
 CONFIG_FORCED_INLINING=y
 # CONFIG_RCU_TORTURE_TEST is not set
 # CONFIG_KGDB is not set
-CONFIG_XMON=y
+# CONFIG_XMON is not set
 # CONFIG_BDI_SWITCH is not set
 # CONFIG_SERIAL_TEXT_DEBUG is not set
 
index aac88c2f3db9d7d07b9b6e63e431f4fdb6a328b1..5255bd80aa6b2ec10fd7cb2c6aa5bd5d978368f7 100644 (file)
@@ -312,7 +312,14 @@ early_init(int r3, int r4, int r5)
         * Identify the CPU type and fix up code sections
         * that depend on which cpu we have.
         */
+#if defined(CONFIG_440EP) && defined(CONFIG_PPC_FPU)
+       /* We pass the virtual PVR here for 440EP as 440EP and 440GR have
+        * identical PVRs and there is no reliable way to check for the FPU
+        */
+       spec = identify_cpu(offset, (mfspr(SPRN_PVR) | 0x8));
+#else
        spec = identify_cpu(offset, mfspr(SPRN_PVR));
+#endif
        do_feature_fixups(spec->cpu_features,
                          PTRRELOC(&__start___ftr_fixup),
                          PTRRELOC(&__stop___ftr_fixup));
index 390dd1995c2a4ee2e7cbe4267227b76069e02eba..dd898d32480ef981d65267637da2bfecfa083641 100644 (file)
@@ -561,7 +561,7 @@ void update_mmu_cache(struct vm_area_struct *vma, unsigned long address,
                 * That means the zeroed TLB has to be invalidated
                 * whenever a page miss occurs.
                 */
-               _tlbie(address);
+               _tlbie(address, 0 /* 8xx doesn't care about PID */);
 #endif
                if (!PageReserved(page)
                    && !test_bit(PG_arch_1, &page->flags)) {
index f1d4f2109a994a44eada0c0736f58c1143ff819a..b298b60c202f814281ea68b21dc6c5464b3b48c9 100644 (file)
@@ -49,7 +49,7 @@ extern unsigned int num_tlbcam_entries;
  * architectures.  -- Dan
  */
 #if defined(CONFIG_8xx)
-#define flush_HPTE(X, va, pg)  _tlbie(va)
+#define flush_HPTE(X, va, pg)  _tlbie(va, 0 /* 8xx doesn't care about PID */)
 #define MMU_init_hw()          do { } while(0)
 #define mmu_mapin_ram()                (0UL)
 
index 01aa043ff381354cb38fea8f13b06e0ddd7b8fb7..650888b00fb0074c37031e6f285bee0ab68746a0 100644 (file)
 
 #if defined(CONFIG_XILINX_ML300)
   #include "xparameters_ml300.h"
+  #define XPAR_INTC_0_AC97_CONTROLLER_REF_0_PLAYBACK_VEC_ID \
+       XPAR_DCR_INTC_0_OPB_AC97_CONTROLLER_REF_0_PLAYBACK_INTERRUPT_INTR
+  #define XPAR_INTC_0_AC97_CONTROLLER_REF_0_RECORD_VEC_ID \
+       XPAR_DCR_INTC_0_OPB_AC97_CONTROLLER_REF_0_RECORD_INTERRUPT_INTR
 #elif defined(CONFIG_XILINX_ML403)
   #include "xparameters_ml403.h"
+  #define XPAR_INTC_0_AC97_CONTROLLER_REF_0_PLAYBACK_VEC_ID \
+       XPAR_OPB_INTC_0_OPB_AC97_CONTROLLER_REF_0_PLAYBACK_INTERRUPT_INTR
+  #define XPAR_INTC_0_AC97_CONTROLLER_REF_0_RECORD_VEC_ID \
+       XPAR_OPB_INTC_0_OPB_AC97_CONTROLLER_REF_0_RECORD_INTERRUPT_INTR
 #else
   /* Add other board xparameter includes here before the #else */
   #error No xparameters_*.h file included
index a83b0baea011f17811cda760540dab989e1f631c..66a44ff0d9263acdc1732e358ab82f60ddf2ecf6 100644 (file)
@@ -211,6 +211,7 @@ static void __init yucca_setup_pcie_fpga_rootpoint(int port)
                break;
 
        default:
+               iounmap(pcie_reg_fpga_base);
                return;
        }
 
index ace4ec08de5118f5e68fc4286f19ec8f5b27d094..7322781be1c6b4755a1d274ba9a7d504ac648184 100644 (file)
        }, \
 }
 
+#define XPAR_AC97_CONTROLLER_REFERENCE(num) { \
+       .name = "ml403_ac97cr", \
+       .id = num, \
+       .num_resources = 3, \
+       .resource = (struct resource[]) { \
+               { \
+                       .start = XPAR_OPB_AC97_CONTROLLER_REF_##num##_BASEADDR, \
+                       .end = XPAR_OPB_AC97_CONTROLLER_REF_##num##_HIGHADDR, \
+                       .flags = IORESOURCE_MEM, \
+               }, \
+               { \
+                       .start = XPAR_INTC_0_AC97_CONTROLLER_REF_##num##_PLAYBACK_VEC_ID, \
+                       .end = XPAR_INTC_0_AC97_CONTROLLER_REF_##num##_PLAYBACK_VEC_ID, \
+                       .flags = IORESOURCE_IRQ, \
+               }, \
+               { \
+                       .start = XPAR_INTC_0_AC97_CONTROLLER_REF_##num##_RECORD_VEC_ID, \
+                       .end = XPAR_INTC_0_AC97_CONTROLLER_REF_##num##_RECORD_VEC_ID, \
+                       .flags = IORESOURCE_IRQ, \
+               }, \
+       }, \
+}
+
 /* UART 8250 driver platform data table */
 struct plat_serial8250_port virtex_serial_platform_data[] = {
 #if defined(XPAR_UARTNS550_0_BASEADDR)
@@ -173,6 +196,14 @@ struct platform_device virtex_platform_devices[] = {
 #if defined(XPAR_TFT_3_BASEADDR)
        XPAR_TFT(3),
 #endif
+
+       /* AC97 Controller Reference instances */
+#if defined(XPAR_OPB_AC97_CONTROLLER_REF_0_BASEADDR)
+       XPAR_AC97_CONTROLLER_REFERENCE(0),
+#endif
+#if defined(XPAR_OPB_AC97_CONTROLLER_REF_1_BASEADDR)
+       XPAR_AC97_CONTROLLER_REFERENCE(1),
+#endif
 };
 
 /* Early serial support functions */
index 4069b81f7f1d159f1fb2b6fc1bc6b9f7d788a8a0..db3ae8505103812a49b0d7e5a675251ec005f928 100644 (file)
@@ -45,7 +45,6 @@ struct appldata_ops {
        int    active;                          /* monitoring status */
 
        /* fill in from here */
-       unsigned int ctl_nr;                    /* sysctl ID */
        char name[APPLDATA_PROC_NAME_LENGTH];   /* name of /proc fs node */
        unsigned char record_nr;                /* Record Nr. for Product ID */
        void (*callback)(void *data);           /* callback function */
index ac61cf43a7d950b36cf1316165ea499c63c6283d..655d52543e2d24b1d12d168c037feaeb0b660c84 100644 (file)
@@ -53,29 +53,26 @@ static int appldata_interval_handler(ctl_table *ctl, int write,
 static struct ctl_table_header *appldata_sysctl_header;
 static struct ctl_table appldata_table[] = {
        {
-               .ctl_name       = CTL_APPLDATA_TIMER,
                .procname       = "timer",
                .mode           = S_IRUGO | S_IWUSR,
                .proc_handler   = &appldata_timer_handler,
        },
        {
-               .ctl_name       = CTL_APPLDATA_INTERVAL,
                .procname       = "interval",
                .mode           = S_IRUGO | S_IWUSR,
                .proc_handler   = &appldata_interval_handler,
        },
-       { .ctl_name = 0 }
+       { },
 };
 
 static struct ctl_table appldata_dir_table[] = {
        {
-               .ctl_name       = CTL_APPLDATA,
                .procname       = appldata_proc_name,
                .maxlen         = 0,
                .mode           = S_IRUGO | S_IXUGO,
                .child          = appldata_table,
        },
-       { .ctl_name = 0 }
+       { },
 };
 
 /*
@@ -441,75 +438,38 @@ out:
  */
 int appldata_register_ops(struct appldata_ops *ops)
 {
-       struct list_head *lh;
-       struct appldata_ops *tmp_ops;
-       int i;
-
-       i = 0;
+       if ((ops->size > APPLDATA_MAX_REC_SIZE) || (ops->size < 0))
+               return -EINVAL;
 
-       if ((ops->size > APPLDATA_MAX_REC_SIZE) ||
-               (ops->size < 0)){
-               P_ERROR("Invalid size of %s record = %i, maximum = %i!\n",
-                       ops->name, ops->size, APPLDATA_MAX_REC_SIZE);
-               return -ENOMEM;
-       }
-       if ((ops->ctl_nr == CTL_APPLDATA) ||
-           (ops->ctl_nr == CTL_APPLDATA_TIMER) ||
-           (ops->ctl_nr == CTL_APPLDATA_INTERVAL)) {
-               P_ERROR("ctl_nr %i already in use!\n", ops->ctl_nr);
-               return -EBUSY;
-       }
-       ops->ctl_table = kzalloc(4*sizeof(struct ctl_table), GFP_KERNEL);
-       if (ops->ctl_table == NULL) {
-               P_ERROR("Not enough memory for %s ctl_table!\n", ops->name);
+       ops->ctl_table = kzalloc(4 * sizeof(struct ctl_table), GFP_KERNEL);
+       if (!ops->ctl_table)
                return -ENOMEM;
-       }
 
        spin_lock(&appldata_ops_lock);
-       list_for_each(lh, &appldata_ops_list) {
-               tmp_ops = list_entry(lh, struct appldata_ops, list);
-               P_DEBUG("register_ops loop: %i) name = %s, ctl = %i\n",
-                       ++i, tmp_ops->name, tmp_ops->ctl_nr);
-               P_DEBUG("Comparing %s (ctl %i) with %s (ctl %i)\n",
-                       tmp_ops->name, tmp_ops->ctl_nr, ops->name,
-                       ops->ctl_nr);
-               if (strncmp(tmp_ops->name, ops->name,
-                               APPLDATA_PROC_NAME_LENGTH) == 0) {
-                       P_ERROR("Name \"%s\" already registered!\n", ops->name);
-                       kfree(ops->ctl_table);
-                       spin_unlock(&appldata_ops_lock);
-                       return -EBUSY;
-               }
-               if (tmp_ops->ctl_nr == ops->ctl_nr) {
-                       P_ERROR("ctl_nr %i already registered!\n", ops->ctl_nr);
-                       kfree(ops->ctl_table);
-                       spin_unlock(&appldata_ops_lock);
-                       return -EBUSY;
-               }
-       }
        list_add(&ops->list, &appldata_ops_list);
        spin_unlock(&appldata_ops_lock);
 
-       ops->ctl_table[0].ctl_name = CTL_APPLDATA;
        ops->ctl_table[0].procname = appldata_proc_name;
        ops->ctl_table[0].maxlen   = 0;
        ops->ctl_table[0].mode     = S_IRUGO | S_IXUGO;
        ops->ctl_table[0].child    = &ops->ctl_table[2];
 
-       ops->ctl_table[1].ctl_name = 0;
-
-       ops->ctl_table[2].ctl_name = ops->ctl_nr;
        ops->ctl_table[2].procname = ops->name;
        ops->ctl_table[2].mode     = S_IRUGO | S_IWUSR;
        ops->ctl_table[2].proc_handler = appldata_generic_handler;
        ops->ctl_table[2].data = ops;
 
-       ops->ctl_table[3].ctl_name = 0;
-
        ops->sysctl_header = register_sysctl_table(ops->ctl_table);
-
+       if (!ops->sysctl_header)
+               goto out;
        P_INFO("%s-ops registered!\n", ops->name);
        return 0;
+out:
+       spin_lock(&appldata_ops_lock);
+       list_del(&ops->list);
+       spin_unlock(&appldata_ops_lock);
+       kfree(ops->ctl_table);
+       return -ENOMEM;
 }
 
 /*
@@ -519,15 +479,11 @@ int appldata_register_ops(struct appldata_ops *ops)
  */
 void appldata_unregister_ops(struct appldata_ops *ops)
 {
-       void *table;
        spin_lock(&appldata_ops_lock);
        list_del(&ops->list);
-       /* at that point any incoming access will fail */
-       table = ops->ctl_table;
-       ops->ctl_table = NULL;
        spin_unlock(&appldata_ops_lock);
        unregister_sysctl_table(ops->sysctl_header);
-       kfree(table);
+       kfree(ops->ctl_table);
        P_INFO("%s-ops unregistered!\n", ops->name);
 }
 /********************** module-ops management <END> **************************/
index 697eb30a68a329dd6bfdb842efd037503bbe42bb..51181ccdb87b255699a3857f24d0ddac80e45699 100644 (file)
@@ -147,7 +147,6 @@ static void appldata_get_mem_data(void *data)
 
 
 static struct appldata_ops ops = {
-       .ctl_nr    = CTL_APPLDATA_MEM,
        .name      = "mem",
        .record_nr = APPLDATA_RECORD_MEM_ID,
        .size      = sizeof(struct appldata_mem_data),
index 6c1815a47714389e0f6664722e7c3563907a930a..4d8344336001c8d90edeb7b731fd6558a726d016 100644 (file)
@@ -142,7 +142,6 @@ static void appldata_get_net_sum_data(void *data)
 
 
 static struct appldata_ops ops = {
-       .ctl_nr    = CTL_APPLDATA_NET_SUM,
        .name      = "net_sum",
        .record_nr = APPLDATA_RECORD_NET_SUM_ID,
        .size      = sizeof(struct appldata_net_sum_data),
index 76a15523ae9e0e4c81f3bb3ce4dd7ed88c9880db..6b3eafe104533587e9e439a5852d5020164959ca 100644 (file)
@@ -82,7 +82,6 @@ struct appldata_os_data {
 static struct appldata_os_data *appldata_os_data;
 
 static struct appldata_ops ops = {
-       .ctl_nr    = CTL_APPLDATA_OS,
        .name      = "os",
        .record_nr = APPLDATA_RECORD_OS_ID,
        .owner     = THIS_MODULE,
index 8bf4ae1150be6775b2c348af2ee56a2786dd320c..1b3af7dab8161bf08ec6fd3d5110170b2c89f914 100644 (file)
@@ -200,7 +200,7 @@ static noinline __init void find_memory_chunks(unsigned long memsize)
                cc = __tprot(addr);
                while (cc == old_cc) {
                        addr += CHUNK_INCR;
-                       if (addr >= memsize)
+                       if (memsize && addr >= memsize)
                                break;
 #ifndef CONFIG_64BIT
                        if (addr == ADDR2G)
index 139ca153d5cc1dece7d4ac3679946d29a9baada9..1a6dac8df6fb1942a96418ad4d76014be051bdda 100644 (file)
@@ -69,13 +69,31 @@ STACK_SIZE  = 1 << STACK_SHIFT
        basr    %r14,%r1
        .endm
 
-       .macro  LOCKDEP_SYS_EXIT
-       l       %r1,BASED(.Llockdep_sys_exit)
+       .macro  TRACE_IRQS_CHECK
+       tm      SP_PSW(%r15),0x03       # irqs enabled?
+       jz      0f
+       l       %r1,BASED(.Ltrace_irq_on)
        basr    %r14,%r1
+       j       1f
+0:     l       %r1,BASED(.Ltrace_irq_off)
+       basr    %r14,%r1
+1:
        .endm
 #else
 #define TRACE_IRQS_ON
 #define TRACE_IRQS_OFF
+#define TRACE_IRQS_CHECK
+#endif
+
+#ifdef CONFIG_LOCKDEP
+       .macro  LOCKDEP_SYS_EXIT
+       tm      SP_PSW+1(%r15),0x01     # returning to user ?
+       jz      0f
+       l       %r1,BASED(.Llockdep_sys_exit)
+       basr    %r14,%r1
+0:
+       .endm
+#else
 #define LOCKDEP_SYS_EXIT
 #endif
 
@@ -234,8 +252,6 @@ sysc_saveall:
        lh      %r7,0x8a          # get svc number from lowcore
 #ifdef CONFIG_VIRT_CPU_ACCOUNTING
 sysc_vtime:
-       tm      SP_PSW+1(%r15),0x01     # interrupting from user ?
-       bz      BASED(sysc_do_svc)
        UPDATE_VTIME __LC_EXIT_TIMER,__LC_SYNC_ENTER_TIMER,__LC_USER_TIMER
 sysc_stime:
        UPDATE_VTIME __LC_LAST_UPDATE_TIMER,__LC_EXIT_TIMER,__LC_SYSTEM_TIMER
@@ -263,19 +279,34 @@ sysc_do_restart:
 
 sysc_return:
        tm      SP_PSW+1(%r15),0x01     # returning to user ?
-       bno     BASED(sysc_leave)
+       bno     BASED(sysc_restore)
        tm      __TI_flags+3(%r9),_TIF_WORK_SVC
        bnz     BASED(sysc_work)  # there is work to do (signals etc.)
+sysc_restore:
+#ifdef CONFIG_TRACE_IRQFLAGS
+       la      %r1,BASED(sysc_restore_trace_psw)
+       lpsw    0(%r1)
+sysc_restore_trace:
+       TRACE_IRQS_CHECK
        LOCKDEP_SYS_EXIT
+#endif
 sysc_leave:
        RESTORE_ALL __LC_RETURN_PSW,1
+sysc_done:
+
+#ifdef CONFIG_TRACE_IRQFLAGS
+       .align  8
+       .globl  sysc_restore_trace_psw
+sysc_restore_trace_psw:
+       .long   0, sysc_restore_trace + 0x80000000
+#endif
 
 #
 # recheck if there is more work to do
 #
 sysc_work_loop:
        tm      __TI_flags+3(%r9),_TIF_WORK_SVC
-       bz      BASED(sysc_leave)       # there is no work to do
+       bz      BASED(sysc_restore)     # there is no work to do
 #
 # One of the work bits is on. Find out which one.
 #
@@ -290,8 +321,8 @@ sysc_work:
        bo      BASED(sysc_restart)
        tm      __TI_flags+3(%r9),_TIF_SINGLE_STEP
        bo      BASED(sysc_singlestep)
-       LOCKDEP_SYS_EXIT
-       b       BASED(sysc_leave)
+       b       BASED(sysc_restore)
+sysc_work_done:
 
 #
 # _TIF_NEED_RESCHED is set, call schedule
@@ -458,6 +489,7 @@ pgm_check_handler:
 pgm_no_vtime:
 #endif
        l       %r9,__LC_THREAD_INFO    # load pointer to thread_info struct
+       TRACE_IRQS_OFF
        l       %r3,__LC_PGM_ILC        # load program interruption code
        la      %r8,0x7f
        nr      %r8,%r3
@@ -497,6 +529,7 @@ pgm_per_std:
 pgm_no_vtime2:
 #endif
        l       %r9,__LC_THREAD_INFO    # load pointer to thread_info struct
+       TRACE_IRQS_OFF
        l       %r1,__TI_task(%r9)
        mvc     __THREAD_per+__PER_atmid(2,%r1),__LC_PER_ATMID
        mvc     __THREAD_per+__PER_address(4,%r1),__LC_PER_ADDRESS
@@ -517,15 +550,13 @@ pgm_svcper:
        SAVE_ALL_SYNC __LC_SVC_OLD_PSW,__LC_SAVE_AREA
        CREATE_STACK_FRAME __LC_SVC_OLD_PSW,__LC_SAVE_AREA
 #ifdef CONFIG_VIRT_CPU_ACCOUNTING
-       tm      SP_PSW+1(%r15),0x01     # interrupting from user ?
-       bz      BASED(pgm_no_vtime3)
        UPDATE_VTIME __LC_EXIT_TIMER,__LC_SYNC_ENTER_TIMER,__LC_USER_TIMER
        UPDATE_VTIME __LC_LAST_UPDATE_TIMER,__LC_EXIT_TIMER,__LC_SYSTEM_TIMER
        mvc     __LC_LAST_UPDATE_TIMER(8),__LC_SYNC_ENTER_TIMER
-pgm_no_vtime3:
 #endif
        lh      %r7,0x8a                # get svc number from lowcore
        l       %r9,__LC_THREAD_INFO    # load pointer to thread_info struct
+       TRACE_IRQS_OFF
        l       %r1,__TI_task(%r9)
        mvc     __THREAD_per+__PER_atmid(2,%r1),__LC_PER_ATMID
        mvc     __THREAD_per+__PER_address(4,%r1),__LC_PER_ADDRESS
@@ -542,7 +573,7 @@ kernel_per:
        mvi     SP_TRAP+1(%r15),0x28    # set trap indication to pgm check
        la      %r2,SP_PTREGS(%r15)     # address of register-save area
        l       %r1,BASED(.Lhandle_per) # load adr. of per handler
-       la      %r14,BASED(sysc_leave)  # load adr. of system return
+       la      %r14,BASED(sysc_restore)# load adr. of system return
        br      %r1                     # branch to do_single_step
 
 /*
@@ -569,26 +600,38 @@ io_no_vtime:
        l       %r1,BASED(.Ldo_IRQ)     # load address of do_IRQ
        la      %r2,SP_PTREGS(%r15)     # address of register-save area
        basr    %r14,%r1                # branch to standard irq handler
-       TRACE_IRQS_ON
-
 io_return:
        tm      SP_PSW+1(%r15),0x01     # returning to user ?
 #ifdef CONFIG_PREEMPT
        bno     BASED(io_preempt)       # no -> check for preemptive scheduling
 #else
-       bno     BASED(io_leave)         # no-> skip resched & signal
+       bno     BASED(io_restore)       # no-> skip resched & signal
 #endif
        tm      __TI_flags+3(%r9),_TIF_WORK_INT
        bnz     BASED(io_work)          # there is work to do (signals etc.)
+io_restore:
+#ifdef CONFIG_TRACE_IRQFLAGS
+       la      %r1,BASED(io_restore_trace_psw)
+       lpsw    0(%r1)
+io_restore_trace:
+       TRACE_IRQS_CHECK
        LOCKDEP_SYS_EXIT
+#endif
 io_leave:
        RESTORE_ALL __LC_RETURN_PSW,0
 io_done:
 
+#ifdef CONFIG_TRACE_IRQFLAGS
+       .align  8
+       .globl  io_restore_trace_psw
+io_restore_trace_psw:
+       .long   0, io_restore_trace + 0x80000000
+#endif
+
 #ifdef CONFIG_PREEMPT
 io_preempt:
        icm     %r0,15,__TI_precount(%r9)
-       bnz     BASED(io_leave)
+       bnz     BASED(io_restore)
        l       %r1,SP_R15(%r15)
        s       %r1,BASED(.Lc_spsize)
        mvc     SP_PTREGS(__PT_SIZE,%r1),SP_PTREGS(%r15)
@@ -596,14 +639,10 @@ io_preempt:
        lr      %r15,%r1
 io_resume_loop:
        tm      __TI_flags+3(%r9),_TIF_NEED_RESCHED
-       bno     BASED(io_leave)
-       mvc     __TI_precount(4,%r9),BASED(.Lc_pactive)
-       stosm   __SF_EMPTY(%r15),0x03  # reenable interrupts
-       l       %r1,BASED(.Lschedule)
-       basr    %r14,%r1               # call schedule
-       stnsm   __SF_EMPTY(%r15),0xfc  # disable I/O and ext. interrupts
-       xc      __TI_precount(4,%r9),__TI_precount(%r9)
-       b       BASED(io_resume_loop)
+       bno     BASED(io_restore)
+       l       %r1,BASED(.Lpreempt_schedule_irq)
+       la      %r14,BASED(io_resume_loop)
+       br      %r1                     # call schedule
 #endif
 
 #
@@ -627,40 +666,42 @@ io_work_loop:
        bo      BASED(io_reschedule)
        tm      __TI_flags+3(%r9),(_TIF_SIGPENDING | _TIF_RESTORE_SIGMASK)
        bnz     BASED(io_sigpending)
-       LOCKDEP_SYS_EXIT
-       b       BASED(io_leave)
+       b       BASED(io_restore)
+io_work_done:
 
 #
 # _TIF_MCCK_PENDING is set, call handler
 #
 io_mcck_pending:
-       TRACE_IRQS_OFF
        l       %r1,BASED(.Ls390_handle_mcck)
        basr    %r14,%r1                # TIF bit will be cleared by handler
-       TRACE_IRQS_ON
        b       BASED(io_work_loop)
 
 #
 # _TIF_NEED_RESCHED is set, call schedule
 #
 io_reschedule:
+       TRACE_IRQS_ON
        l       %r1,BASED(.Lschedule)
        stosm   __SF_EMPTY(%r15),0x03   # reenable interrupts
        basr    %r14,%r1                # call scheduler
        stnsm   __SF_EMPTY(%r15),0xfc   # disable I/O and ext. interrupts
+       TRACE_IRQS_OFF
        tm      __TI_flags+3(%r9),_TIF_WORK_INT
-       bz      BASED(io_leave)         # there is no work to do
+       bz      BASED(io_restore)       # there is no work to do
        b       BASED(io_work_loop)
 
 #
 # _TIF_SIGPENDING or _TIF_RESTORE_SIGMASK is set, call do_signal
 #
 io_sigpending:
+       TRACE_IRQS_ON
        stosm   __SF_EMPTY(%r15),0x03   # reenable interrupts
        la      %r2,SP_PTREGS(%r15)     # load pt_regs
        l       %r1,BASED(.Ldo_signal)
        basr    %r14,%r1                # call do_signal
        stnsm   __SF_EMPTY(%r15),0xfc   # disable I/O and ext. interrupts
+       TRACE_IRQS_OFF
        b       BASED(io_work_loop)
 
 /*
@@ -688,7 +729,6 @@ ext_no_vtime:
        lh      %r3,__LC_EXT_INT_CODE   # get interruption code
        l       %r1,BASED(.Ldo_extint)
        basr    %r14,%r1
-       TRACE_IRQS_ON
        b       BASED(io_return)
 
 __critical_end:
@@ -853,15 +893,15 @@ cleanup_table_system_call:
 cleanup_table_sysc_return:
        .long   sysc_return + 0x80000000, sysc_leave + 0x80000000
 cleanup_table_sysc_leave:
-       .long   sysc_leave + 0x80000000, sysc_work_loop + 0x80000000
+       .long   sysc_leave + 0x80000000, sysc_done + 0x80000000
 cleanup_table_sysc_work_loop:
-       .long   sysc_work_loop + 0x80000000, sysc_reschedule + 0x80000000
+       .long   sysc_work_loop + 0x80000000, sysc_work_done + 0x80000000
 cleanup_table_io_return:
        .long   io_return + 0x80000000, io_leave + 0x80000000
 cleanup_table_io_leave:
        .long   io_leave + 0x80000000, io_done + 0x80000000
 cleanup_table_io_work_loop:
-       .long   io_work_loop + 0x80000000, io_mcck_pending + 0x80000000
+       .long   io_work_loop + 0x80000000, io_work_done + 0x80000000
 
 cleanup_critical:
        clc     4(4,%r12),BASED(cleanup_table_system_call)
@@ -930,8 +970,6 @@ cleanup_system_call:
 cleanup_vtime:
        clc     __LC_RETURN_PSW+4(4),BASED(cleanup_system_call_insn+12)
        bhe     BASED(cleanup_stime)
-       tm      SP_PSW+1(%r15),0x01     # interrupting from user ?
-       bz      BASED(cleanup_novtime)
        UPDATE_VTIME __LC_EXIT_TIMER,__LC_SYNC_ENTER_TIMER,__LC_USER_TIMER
 cleanup_stime:
        clc     __LC_RETURN_PSW+4(4),BASED(cleanup_system_call_insn+16)
@@ -939,7 +977,6 @@ cleanup_stime:
        UPDATE_VTIME __LC_LAST_UPDATE_TIMER,__LC_EXIT_TIMER,__LC_SYSTEM_TIMER
 cleanup_update:
        mvc     __LC_LAST_UPDATE_TIMER(8),__LC_SYNC_ENTER_TIMER
-cleanup_novtime:
 #endif
        mvc     __LC_RETURN_PSW+4(4),BASED(cleanup_table_system_call+4)
        la      %r12,__LC_RETURN_PSW
@@ -978,10 +1015,10 @@ cleanup_sysc_leave:
 2:     la      %r12,__LC_RETURN_PSW
        br      %r14
 cleanup_sysc_leave_insn:
+       .long   sysc_done - 4 + 0x80000000
 #ifdef CONFIG_VIRT_CPU_ACCOUNTING
-       .long   sysc_leave + 14 + 0x80000000
+       .long   sysc_done - 8 + 0x80000000
 #endif
-       .long   sysc_leave + 10 + 0x80000000
 
 cleanup_io_return:
        mvc     __LC_RETURN_PSW(4),0(%r12)
@@ -1008,10 +1045,10 @@ cleanup_io_leave:
 2:     la      %r12,__LC_RETURN_PSW
        br      %r14
 cleanup_io_leave_insn:
+       .long   io_done - 4 + 0x80000000
 #ifdef CONFIG_VIRT_CPU_ACCOUNTING
-       .long   io_leave + 18 + 0x80000000
+       .long   io_done - 8 + 0x80000000
 #endif
-       .long   io_leave + 14 + 0x80000000
 
 /*
  * Integer constants
@@ -1019,7 +1056,6 @@ cleanup_io_leave_insn:
                .align  4
 .Lc_spsize:    .long   SP_SIZE
 .Lc_overhead:  .long   STACK_FRAME_OVERHEAD
-.Lc_pactive:   .long   PREEMPT_ACTIVE
 .Lnr_syscalls: .long   NR_syscalls
 .L0x018:       .short  0x018
 .L0x020:       .short  0x020
@@ -1043,6 +1079,10 @@ cleanup_io_leave_insn:
 .Lexecve_tail: .long   execve_tail
 .Ljump_table:  .long   pgm_check_table
 .Lschedule:    .long   schedule
+#ifdef CONFIG_PREEMPT
+.Lpreempt_schedule_irq:
+               .long   preempt_schedule_irq
+#endif
 .Ltrace:       .long   syscall_trace
 .Lschedtail:   .long   schedule_tail
 .Lsysc_table:  .long   sys_call_table
index 05e26d1fdf405dc21696b35aabb0217a6164d8d4..a3e47b893f079ca812c54b727f4b3dd4b2a6a6c2 100644 (file)
@@ -67,12 +67,28 @@ _TIF_WORK_INT = (_TIF_SIGPENDING | _TIF_RESTORE_SIGMASK | _TIF_NEED_RESCHED | \
         brasl  %r14,trace_hardirqs_off
        .endm
 
-       .macro  LOCKDEP_SYS_EXIT
-        brasl  %r14,lockdep_sys_exit
+       .macro TRACE_IRQS_CHECK
+       tm      SP_PSW(%r15),0x03       # irqs enabled?
+       jz      0f
+       brasl   %r14,trace_hardirqs_on
+       j       1f
+0:     brasl   %r14,trace_hardirqs_off
+1:
        .endm
 #else
 #define TRACE_IRQS_ON
 #define TRACE_IRQS_OFF
+#define TRACE_IRQS_CHECK
+#endif
+
+#ifdef CONFIG_LOCKDEP
+       .macro  LOCKDEP_SYS_EXIT
+       tm      SP_PSW+1(%r15),0x01     # returning to user ?
+       jz      0f
+       brasl   %r14,lockdep_sys_exit
+0:
+       .endm
+#else
 #define LOCKDEP_SYS_EXIT
 #endif
 
@@ -222,8 +238,6 @@ sysc_saveall:
        llgh    %r7,__LC_SVC_INT_CODE   # get svc number from lowcore
 #ifdef CONFIG_VIRT_CPU_ACCOUNTING
 sysc_vtime:
-       tm      SP_PSW+1(%r15),0x01     # interrupting from user ?
-       jz      sysc_do_svc
        UPDATE_VTIME __LC_EXIT_TIMER,__LC_SYNC_ENTER_TIMER,__LC_USER_TIMER
 sysc_stime:
        UPDATE_VTIME __LC_LAST_UPDATE_TIMER,__LC_EXIT_TIMER,__LC_SYSTEM_TIMER
@@ -257,19 +271,34 @@ sysc_noemu:
 
 sysc_return:
        tm      SP_PSW+1(%r15),0x01     # returning to user ?
-       jno     sysc_leave
+       jno     sysc_restore
        tm      __TI_flags+7(%r9),_TIF_WORK_SVC
        jnz     sysc_work       # there is work to do (signals etc.)
+sysc_restore:
+#ifdef CONFIG_TRACE_IRQFLAGS
+       larl    %r1,sysc_restore_trace_psw
+       lpswe   0(%r1)
+sysc_restore_trace:
+       TRACE_IRQS_CHECK
        LOCKDEP_SYS_EXIT
+#endif
 sysc_leave:
        RESTORE_ALL __LC_RETURN_PSW,1
+sysc_done:
+
+#ifdef CONFIG_TRACE_IRQFLAGS
+       .align  8
+       .globl sysc_restore_trace_psw
+sysc_restore_trace_psw:
+       .quad   0, sysc_restore_trace
+#endif
 
 #
 # recheck if there is more work to do
 #
 sysc_work_loop:
        tm      __TI_flags+7(%r9),_TIF_WORK_SVC
-       jz      sysc_leave        # there is no work to do
+       jz      sysc_restore      # there is no work to do
 #
 # One of the work bits is on. Find out which one.
 #
@@ -284,8 +313,8 @@ sysc_work:
        jo      sysc_restart
        tm      __TI_flags+7(%r9),_TIF_SINGLE_STEP
        jo      sysc_singlestep
-       LOCKDEP_SYS_EXIT
-       j       sysc_leave
+       j       sysc_restore
+sysc_work_done:
 
 #
 # _TIF_NEED_RESCHED is set, call schedule
@@ -445,6 +474,7 @@ pgm_check_handler:
 pgm_no_vtime:
 #endif
        lg      %r9,__LC_THREAD_INFO    # load pointer to thread_info struct
+       TRACE_IRQS_OFF
        lgf     %r3,__LC_PGM_ILC        # load program interruption code
        lghi    %r8,0x7f
        ngr     %r8,%r3
@@ -484,6 +514,7 @@ pgm_per_std:
 pgm_no_vtime2:
 #endif
        lg      %r9,__LC_THREAD_INFO    # load pointer to thread_info struct
+       TRACE_IRQS_OFF
        lg      %r1,__TI_task(%r9)
        tm      SP_PSW+1(%r15),0x01     # kernel per event ?
        jz      kernel_per
@@ -504,12 +535,9 @@ pgm_svcper:
        SAVE_ALL_SYNC __LC_SVC_OLD_PSW,__LC_SAVE_AREA
        CREATE_STACK_FRAME __LC_SVC_OLD_PSW,__LC_SAVE_AREA
 #ifdef CONFIG_VIRT_CPU_ACCOUNTING
-       tm      SP_PSW+1(%r15),0x01     # interrupting from user ?
-       jz      pgm_no_vtime3
        UPDATE_VTIME __LC_EXIT_TIMER,__LC_SYNC_ENTER_TIMER,__LC_USER_TIMER
        UPDATE_VTIME __LC_LAST_UPDATE_TIMER,__LC_EXIT_TIMER,__LC_SYSTEM_TIMER
        mvc     __LC_LAST_UPDATE_TIMER(8),__LC_SYNC_ENTER_TIMER
-pgm_no_vtime3:
 #endif
        llgh    %r7,__LC_SVC_INT_CODE   # get svc number from lowcore
        lg      %r9,__LC_THREAD_INFO    # load pointer to thread_info struct
@@ -529,7 +557,7 @@ kernel_per:
        lhi     %r0,__LC_PGM_OLD_PSW
        sth     %r0,SP_TRAP(%r15)       # set trap indication to pgm check
        la      %r2,SP_PTREGS(%r15)     # address of register-save area
-       larl    %r14,sysc_leave         # load adr. of system ret, no work
+       larl    %r14,sysc_restore       # load adr. of system ret, no work
        jg      do_single_step          # branch to do_single_step
 
 /*
@@ -554,26 +582,38 @@ io_no_vtime:
        TRACE_IRQS_OFF
        la      %r2,SP_PTREGS(%r15)     # address of register-save area
        brasl   %r14,do_IRQ             # call standard irq handler
-       TRACE_IRQS_ON
-
 io_return:
        tm      SP_PSW+1(%r15),0x01     # returning to user ?
 #ifdef CONFIG_PREEMPT
        jno     io_preempt              # no -> check for preemptive scheduling
 #else
-       jno     io_leave                # no-> skip resched & signal
+       jno     io_restore              # no-> skip resched & signal
 #endif
        tm      __TI_flags+7(%r9),_TIF_WORK_INT
        jnz     io_work                 # there is work to do (signals etc.)
+io_restore:
+#ifdef CONFIG_TRACE_IRQFLAGS
+       larl    %r1,io_restore_trace_psw
+       lpswe   0(%r1)
+io_restore_trace:
+       TRACE_IRQS_CHECK
        LOCKDEP_SYS_EXIT
+#endif
 io_leave:
        RESTORE_ALL __LC_RETURN_PSW,0
 io_done:
 
+#ifdef CONFIG_TRACE_IRQFLAGS
+       .align  8
+       .globl io_restore_trace_psw
+io_restore_trace_psw:
+       .quad   0, io_restore_trace
+#endif
+
 #ifdef CONFIG_PREEMPT
 io_preempt:
        icm     %r0,15,__TI_precount(%r9)
-       jnz     io_leave
+       jnz     io_restore
        # switch to kernel stack
        lg      %r1,SP_R15(%r15)
        aghi    %r1,-SP_SIZE
@@ -582,14 +622,9 @@ io_preempt:
        lgr     %r15,%r1
 io_resume_loop:
        tm      __TI_flags+7(%r9),_TIF_NEED_RESCHED
-       jno     io_leave
-       larl    %r1,.Lc_pactive
-       mvc     __TI_precount(4,%r9),0(%r1)
-       stosm   __SF_EMPTY(%r15),0x03   # reenable interrupts
-       brasl   %r14,schedule           # call schedule
-       stnsm   __SF_EMPTY(%r15),0xfc   # disable I/O and ext. interrupts
-       xc      __TI_precount(4,%r9),__TI_precount(%r9)
-       j       io_resume_loop
+       jno     io_restore
+       larl    %r14,io_resume_loop
+       jg      preempt_schedule_irq
 #endif
 
 #
@@ -613,37 +648,39 @@ io_work_loop:
        jo      io_reschedule
        tm      __TI_flags+7(%r9),(_TIF_SIGPENDING | _TIF_RESTORE_SIGMASK)
        jnz     io_sigpending
-       LOCKDEP_SYS_EXIT
-       j       io_leave
+       j       io_restore
+io_work_done:
 
 #
 # _TIF_MCCK_PENDING is set, call handler
 #
 io_mcck_pending:
-       TRACE_IRQS_OFF
        brasl   %r14,s390_handle_mcck   # TIF bit will be cleared by handler
-       TRACE_IRQS_ON
        j       io_work_loop
 
 #
 # _TIF_NEED_RESCHED is set, call schedule
 #
 io_reschedule:
+       TRACE_IRQS_ON
        stosm   __SF_EMPTY(%r15),0x03   # reenable interrupts
        brasl   %r14,schedule           # call scheduler
        stnsm   __SF_EMPTY(%r15),0xfc   # disable I/O and ext. interrupts
+       TRACE_IRQS_OFF
        tm      __TI_flags+7(%r9),_TIF_WORK_INT
-       jz      io_leave                # there is no work to do
+       jz      io_restore              # there is no work to do
        j       io_work_loop
 
 #
 # _TIF_SIGPENDING or _TIF_RESTORE_SIGMASK is set, call do_signal
 #
 io_sigpending:
+       TRACE_IRQS_ON
        stosm   __SF_EMPTY(%r15),0x03   # reenable interrupts
        la      %r2,SP_PTREGS(%r15)     # load pt_regs
        brasl   %r14,do_signal          # call do_signal
        stnsm   __SF_EMPTY(%r15),0xfc   # disable I/O and ext. interrupts
+       TRACE_IRQS_OFF
        j       io_work_loop
 
 /*
@@ -669,7 +706,6 @@ ext_no_vtime:
        la      %r2,SP_PTREGS(%r15)     # address of register-save area
        llgh    %r3,__LC_EXT_INT_CODE   # get interruption code
        brasl   %r14,do_extint
-       TRACE_IRQS_ON
        j       io_return
 
 __critical_end:
@@ -824,15 +860,15 @@ cleanup_table_system_call:
 cleanup_table_sysc_return:
        .quad   sysc_return, sysc_leave
 cleanup_table_sysc_leave:
-       .quad   sysc_leave, sysc_work_loop
+       .quad   sysc_leave, sysc_done
 cleanup_table_sysc_work_loop:
-       .quad   sysc_work_loop, sysc_reschedule
+       .quad   sysc_work_loop, sysc_work_done
 cleanup_table_io_return:
        .quad   io_return, io_leave
 cleanup_table_io_leave:
        .quad   io_leave, io_done
 cleanup_table_io_work_loop:
-       .quad   io_work_loop, io_mcck_pending
+       .quad   io_work_loop, io_work_done
 
 cleanup_critical:
        clc     8(8,%r12),BASED(cleanup_table_system_call)
@@ -901,8 +937,6 @@ cleanup_system_call:
 cleanup_vtime:
        clc     __LC_RETURN_PSW+8(8),BASED(cleanup_system_call_insn+24)
        jhe     cleanup_stime
-       tm      SP_PSW+1(%r15),0x01     # interrupting from user ?
-       jz      cleanup_novtime
        UPDATE_VTIME __LC_EXIT_TIMER,__LC_SYNC_ENTER_TIMER,__LC_USER_TIMER
 cleanup_stime:
        clc     __LC_RETURN_PSW+8(8),BASED(cleanup_system_call_insn+32)
@@ -910,7 +944,6 @@ cleanup_stime:
        UPDATE_VTIME __LC_LAST_UPDATE_TIMER,__LC_EXIT_TIMER,__LC_SYSTEM_TIMER
 cleanup_update:
        mvc     __LC_LAST_UPDATE_TIMER(8),__LC_SYNC_ENTER_TIMER
-cleanup_novtime:
 #endif
        mvc     __LC_RETURN_PSW+8(8),BASED(cleanup_table_system_call+8)
        la      %r12,__LC_RETURN_PSW
@@ -949,10 +982,10 @@ cleanup_sysc_leave:
 2:     la      %r12,__LC_RETURN_PSW
        br      %r14
 cleanup_sysc_leave_insn:
+       .quad   sysc_done - 4
 #ifdef CONFIG_VIRT_CPU_ACCOUNTING
-       .quad   sysc_leave + 16
+       .quad   sysc_done - 8
 #endif
-       .quad   sysc_leave + 12
 
 cleanup_io_return:
        mvc     __LC_RETURN_PSW(8),0(%r12)
@@ -979,17 +1012,16 @@ cleanup_io_leave:
 2:     la      %r12,__LC_RETURN_PSW
        br      %r14
 cleanup_io_leave_insn:
+       .quad   io_done - 4
 #ifdef CONFIG_VIRT_CPU_ACCOUNTING
-       .quad   io_leave + 20
+       .quad   io_done - 8
 #endif
-       .quad   io_leave + 16
 
 /*
  * Integer constants
  */
                .align  4
 .Lconst:
-.Lc_pactive:   .long   PREEMPT_ACTIVE
 .Lnr_syscalls: .long   NR_syscalls
 .L0x0130:      .short  0x130
 .L0x0140:      .short  0x140
index 7e1bfb98406404c87bd290b2fe4d9a181980ebe0..577aa7dd660eba1371d39fe33e8847cc6de815a3 100644 (file)
@@ -347,7 +347,7 @@ void (*_machine_power_off)(void) = do_machine_power_off_nonsmp;
 
 void machine_restart(char *command)
 {
-       if (!in_interrupt() || oops_in_progress)
+       if ((!in_interrupt() && !in_atomic()) || oops_in_progress)
                /*
                 * Only unblank the console if we are called in enabled
                 * context or a bust_spinlocks cleared the way for us.
@@ -486,12 +486,14 @@ static void setup_addressing_mode(void)
        if (s390_noexec) {
                printk("S390 execute protection active, ");
                set_amode_and_uaccess(PSW_ASC_SECONDARY, PSW32_ASC_SECONDARY);
-               return;
-       }
-       if (switch_amode) {
+       } else if (switch_amode) {
                printk("S390 address spaces switched, ");
                set_amode_and_uaccess(PSW_ASC_PRIMARY, PSW32_ASC_PRIMARY);
        }
+#ifdef CONFIG_TRACE_IRQFLAGS
+       sysc_restore_trace_psw.mask = psw_kernel_bits & ~PSW_MASK_MCHECK;
+       io_restore_trace_psw.mask = psw_kernel_bits & ~PSW_MASK_MCHECK;
+#endif
 }
 
 static void __init
index b05ae8584258e3f9081da0e60f2733d8fea54436..264ea906db4c1cb2b8c5258b4d448e18e9293de9 100644 (file)
@@ -193,71 +193,29 @@ int smp_call_function_single(int cpu, void (*func) (void *info), void *info,
 }
 EXPORT_SYMBOL(smp_call_function_single);
 
-static void do_send_stop(void)
+void smp_send_stop(void)
 {
        int cpu, rc;
 
-       /* stop all processors */
-       for_each_online_cpu(cpu) {
-               if (cpu == smp_processor_id())
-                       continue;
-               do {
-                       rc = signal_processor(cpu, sigp_stop);
-               } while (rc == sigp_busy);
-       }
-}
+       /* Disable all interrupts/machine checks */
+       __load_psw_mask(psw_kernel_bits & ~PSW_MASK_MCHECK);
 
-static void do_store_status(void)
-{
-       int cpu, rc;
+       /* write magic number to zero page (absolute 0) */
+       lowcore_ptr[smp_processor_id()]->panic_magic = __PANIC_MAGIC;
 
-       /* store status of all processors in their lowcores (real 0) */
+       /* stop all processors */
        for_each_online_cpu(cpu) {
                if (cpu == smp_processor_id())
                        continue;
                do {
-                       rc = signal_processor_p(
-                               (__u32)(unsigned long) lowcore_ptr[cpu], cpu,
-                               sigp_store_status_at_address);
+                       rc = signal_processor(cpu, sigp_stop);
                } while (rc == sigp_busy);
-       }
-}
 
-static void do_wait_for_stop(void)
-{
-       int cpu;
-
-       /* Wait for all other cpus to enter stopped state */
-       for_each_online_cpu(cpu) {
-               if (cpu == smp_processor_id())
-                       continue;
                while (!smp_cpu_not_running(cpu))
                        cpu_relax();
        }
 }
 
-/*
- * this function sends a 'stop' sigp to all other CPUs in the system.
- * it goes straight through.
- */
-void smp_send_stop(void)
-{
-       /* Disable all interrupts/machine checks */
-       __load_psw_mask(psw_kernel_bits & ~PSW_MASK_MCHECK);
-
-       /* write magic number to zero page (absolute 0) */
-       lowcore_ptr[smp_processor_id()]->panic_magic = __PANIC_MAGIC;
-
-       /* stop other processors. */
-       do_send_stop();
-
-       /* wait until other processors are stopped */
-       do_wait_for_stop();
-
-       /* store status of other processors. */
-       do_store_status();
-}
-
 /*
  * Reboot, halt and power_off routines for SMP.
  */
index 8ec9def83ccbd401f336ee74e36461b25e07048a..8ed16a83fba756932ee6bf16aa3d3b927cdcca89 100644 (file)
@@ -260,6 +260,7 @@ void die(const char * str, struct pt_regs * regs, long err)
        bust_spinlocks(1);
        printk("%s: %04lx [#%d]\n", str, err & 0xffff, ++die_counter);
        print_modules();
+       notify_die(DIE_OOPS, str, regs, err, current->thread.trap_no, SIGSEGV);
        show_regs(regs);
        bust_spinlocks(0);
        add_taint(TAINT_DIE);
index d4ed93dfb9c7fba3eada5ccbcf4cdf66c39ebc8a..413c240cbca773bb964b01cfc75506d0345180e1 100644 (file)
@@ -341,19 +341,16 @@ cmm_timeout_handler(ctl_table *ctl, int write, struct file *filp,
 
 static struct ctl_table cmm_table[] = {
        {
-               .ctl_name       = VM_CMM_PAGES,
                .procname       = "cmm_pages",
                .mode           = 0644,
                .proc_handler   = &cmm_pages_handler,
        },
        {
-               .ctl_name       = VM_CMM_TIMED_PAGES,
                .procname       = "cmm_timed_pages",
                .mode           = 0644,
                .proc_handler   = &cmm_pages_handler,
        },
        {
-               .ctl_name       = VM_CMM_TIMEOUT,
                .procname       = "cmm_timeout",
                .mode           = 0644,
                .proc_handler   = &cmm_timeout_handler,
index 37f2c0b447fe48798b64e07fd2a28d626bcfea02..8125d20fdbd8695e722ae848c71a87db29e4d7dc 100644 (file)
@@ -53,10 +53,12 @@ static struct resource cf_ide_resources[] = {
                .end    = PA_AREA5_IO + 0x80c,
                .flags  = IORESOURCE_MEM,
        },
+#ifndef CONFIG_RTS7751R2D_1 /* For R2D-1 polling is preferred */
        [2] = {
                .start  = IRQ_CF_IDE,
                .flags  = IORESOURCE_IRQ,
        },
+#endif
 };
 
 static struct pata_platform_info pata_info = {
index ac4de4973b60c74b73a39b5ec8ec6a4a1955eb69..2ad804ec920a62d6f3373f74955f595f2dc138f0 100644 (file)
@@ -1,7 +1,7 @@
 #
 # Automatically generated make config: don't edit
-# Linux kernel version: 2.6.22-rc4
-# Mon Jun 11 10:24:57 2007
+# Linux kernel version: 2.6.24-rc2
+# Tue Nov 13 20:32:39 2007
 #
 CONFIG_SUPERH=y
 CONFIG_RWSEM_GENERIC_SPINLOCK=y
@@ -13,38 +13,39 @@ CONFIG_GENERIC_IRQ_PROBE=y
 CONFIG_GENERIC_CALIBRATE_DELAY=y
 CONFIG_GENERIC_TIME=y
 CONFIG_GENERIC_CLOCKEVENTS=y
+CONFIG_SYS_SUPPORTS_PCI=y
 CONFIG_STACKTRACE_SUPPORT=y
 CONFIG_LOCKDEP_SUPPORT=y
 # CONFIG_ARCH_HAS_ILOG2_U32 is not set
 # CONFIG_ARCH_HAS_ILOG2_U64 is not set
+CONFIG_ARCH_NO_VIRT_TO_BUS=y
 CONFIG_DEFCONFIG_LIST="/lib/modules/$UNAME_RELEASE/.config"
 
 #
-# Code maturity level options
+# General setup
 #
 CONFIG_EXPERIMENTAL=y
 CONFIG_BROKEN_ON_SMP=y
 CONFIG_LOCK_KERNEL=y
 CONFIG_INIT_ENV_ARG_LIMIT=32
-
-#
-# General setup
-#
 CONFIG_LOCALVERSION=""
 CONFIG_LOCALVERSION_AUTO=y
 CONFIG_SWAP=y
 CONFIG_SYSVIPC=y
-# CONFIG_IPC_NS is not set
 CONFIG_SYSVIPC_SYSCTL=y
 # CONFIG_POSIX_MQUEUE is not set
 CONFIG_BSD_PROCESS_ACCT=y
 # CONFIG_BSD_PROCESS_ACCT_V3 is not set
 # CONFIG_TASKSTATS is not set
-# CONFIG_UTS_NS is not set
+# CONFIG_USER_NS 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_FAIR_GROUP_SCHED=y
+CONFIG_FAIR_USER_SCHED=y
+# CONFIG_FAIR_CGROUP_SCHED is not set
 # CONFIG_SYSFS_DEPRECATED is not set
 # CONFIG_RELAY is not set
 # CONFIG_BLK_DEV_INITRD is not set
@@ -65,7 +66,6 @@ CONFIG_BASE_FULL=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
@@ -74,24 +74,17 @@ CONFIG_SLAB=y
 # CONFIG_SLOB is not set
 # CONFIG_TINY_SHMEM is not set
 CONFIG_BASE_SMALL=0
-
-#
-# Loadable module support
-#
 CONFIG_MODULES=y
 CONFIG_MODULE_UNLOAD=y
 # CONFIG_MODULE_FORCE_UNLOAD is not set
 # CONFIG_MODVERSIONS is not set
 # CONFIG_MODULE_SRCVERSION_ALL is not set
 CONFIG_KMOD=y
-
-#
-# Block layer
-#
 CONFIG_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
@@ -113,7 +106,6 @@ CONFIG_CPU_SH4=y
 CONFIG_CPU_SH4A=y
 # CONFIG_CPU_SUBTYPE_SH7619 is not set
 # CONFIG_CPU_SUBTYPE_SH7206 is not set
-# CONFIG_CPU_SUBTYPE_SH7300 is not set
 # CONFIG_CPU_SUBTYPE_SH7705 is not set
 # CONFIG_CPU_SUBTYPE_SH7706 is not set
 # CONFIG_CPU_SUBTYPE_SH7707 is not set
@@ -121,6 +113,7 @@ CONFIG_CPU_SH4A=y
 # CONFIG_CPU_SUBTYPE_SH7709 is not set
 # CONFIG_CPU_SUBTYPE_SH7710 is not set
 # CONFIG_CPU_SUBTYPE_SH7712 is not set
+# CONFIG_CPU_SUBTYPE_SH7720 is not set
 # CONFIG_CPU_SUBTYPE_SH7750 is not set
 # CONFIG_CPU_SUBTYPE_SH7091 is not set
 # CONFIG_CPU_SUBTYPE_SH7750R is not set
@@ -129,12 +122,10 @@ CONFIG_CPU_SH4A=y
 # CONFIG_CPU_SUBTYPE_SH7751R is not set
 # CONFIG_CPU_SUBTYPE_SH7760 is not set
 # CONFIG_CPU_SUBTYPE_SH4_202 is not set
-# CONFIG_CPU_SUBTYPE_ST40STB1 is not set
-# CONFIG_CPU_SUBTYPE_ST40GX1 is not set
 # CONFIG_CPU_SUBTYPE_SH7770 is not set
 CONFIG_CPU_SUBTYPE_SH7780=y
 # CONFIG_CPU_SUBTYPE_SH7785 is not set
-# CONFIG_CPU_SUBTYPE_SH73180 is not set
+# CONFIG_CPU_SUBTYPE_SHX3 is not set
 # CONFIG_CPU_SUBTYPE_SH7343 is not set
 # CONFIG_CPU_SUBTYPE_SH7722 is not set
 
@@ -169,6 +160,7 @@ CONFIG_FLATMEM_MANUAL=y
 CONFIG_FLATMEM=y
 CONFIG_FLAT_NODE_MEM_MAP=y
 CONFIG_SPARSEMEM_STATIC=y
+# CONFIG_SPARSEMEM_VMEMMAP_ENABLE is not set
 CONFIG_SPLIT_PTLOCK_CPUS=4
 # CONFIG_RESOURCES_64BIT is not set
 CONFIG_ZONE_DMA_FLAG=0
@@ -178,8 +170,9 @@ CONFIG_NR_QUICK=2
 # Cache configuration
 #
 # CONFIG_SH_DIRECT_MAPPED is not set
-# CONFIG_SH_WRITETHROUGH is not set
-# CONFIG_SH_OCRAM is not set
+CONFIG_CACHE_WRITEBACK=y
+# CONFIG_CACHE_WRITETHROUGH is not set
+# CONFIG_CACHE_OFF is not set
 
 #
 # Processor features
@@ -187,12 +180,11 @@ CONFIG_NR_QUICK=2
 CONFIG_CPU_LITTLE_ENDIAN=y
 # CONFIG_CPU_BIG_ENDIAN is not set
 CONFIG_SH_FPU=y
-# CONFIG_SH_DSP is not set
 CONFIG_SH_STORE_QUEUES=y
 CONFIG_SPECULATIVE_EXECUTION=y
 CONFIG_CPU_HAS_INTEVT=y
-CONFIG_CPU_HAS_INTC_IRQ=y
 CONFIG_CPU_HAS_SR_RB=y
+CONFIG_CPU_HAS_FPU=y
 
 #
 # Board support
@@ -212,6 +204,7 @@ CONFIG_SH_PCLK_FREQ=32000000
 # CONFIG_TICK_ONESHOT is not set
 # CONFIG_NO_HZ is not set
 # CONFIG_HIGH_RES_TIMERS is not set
+CONFIG_GENERIC_CLOCKEVENTS_BUILD=y
 
 #
 # CPU Frequency scaling
@@ -226,7 +219,6 @@ CONFIG_SH_PCLK_FREQ=32000000
 #
 # Companion Chips
 #
-# CONFIG_HD6446X_SERIES is not set
 
 #
 # Additional SuperH Device Drivers
@@ -244,18 +236,17 @@ CONFIG_HZ_250=y
 CONFIG_HZ=250
 CONFIG_KEXEC=y
 # CONFIG_CRASH_DUMP is not set
-# CONFIG_SMP is not set
 # CONFIG_PREEMPT_NONE is not set
 # CONFIG_PREEMPT_VOLUNTARY is not set
 CONFIG_PREEMPT=y
 CONFIG_PREEMPT_BKL=y
+CONFIG_GUSA=y
 
 #
 # Boot options
 #
 CONFIG_ZERO_PAGE_OFFSET=0x00001000
 CONFIG_BOOT_LINK_OFFSET=0x00800000
-# CONFIG_UBC_WAKEUP is not set
 CONFIG_CMDLINE_BOOL=y
 CONFIG_CMDLINE="console=ttySC0,115200 root=/dev/sda1"
 
@@ -267,11 +258,8 @@ CONFIG_SH_PCIDMA_NONCOHERENT=y
 CONFIG_PCI_AUTO=y
 CONFIG_PCI_AUTO_UPDATE_RESOURCES=y
 # CONFIG_ARCH_SUPPORTS_MSI is not set
+CONFIG_PCI_LEGACY=y
 # CONFIG_PCI_DEBUG is not set
-
-#
-# PCCARD (PCMCIA/CardBus) support
-#
 # CONFIG_PCCARD is not set
 # CONFIG_HOTPLUG_PCI is not set
 
@@ -281,11 +269,6 @@ CONFIG_PCI_AUTO_UPDATE_RESOURCES=y
 CONFIG_BINFMT_ELF=y
 # CONFIG_BINFMT_MISC is not set
 
-#
-# Power management options (EXPERIMENTAL)
-#
-# CONFIG_PM is not set
-
 #
 # Networking
 #
@@ -327,6 +310,7 @@ CONFIG_IP_PNP_DHCP=y
 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
@@ -353,10 +337,6 @@ CONFIG_LLC=m
 # CONFIG_LAPB is not set
 # CONFIG_ECONET is not set
 # CONFIG_WAN_ROUTER is not set
-
-#
-# QoS and/or fair queueing
-#
 # CONFIG_NET_SCHED is not set
 
 #
@@ -376,6 +356,7 @@ CONFIG_WIRELESS_EXT=y
 # CONFIG_MAC80211 is not set
 # CONFIG_IEEE80211 is not set
 # CONFIG_RFKILL is not set
+# CONFIG_NET_9P is not set
 
 #
 # Device Drivers
@@ -384,33 +365,17 @@ CONFIG_WIRELESS_EXT=y
 #
 # Generic Driver Options
 #
+CONFIG_UEVENT_HELPER_PATH="/sbin/hotplug"
 CONFIG_STANDALONE=y
 CONFIG_PREVENT_FIRMWARE_BUILD=y
 CONFIG_FW_LOADER=m
 # CONFIG_DEBUG_DRIVER is not set
 # CONFIG_DEBUG_DEVRES is not set
 # CONFIG_SYS_HYPERVISOR is not set
-
-#
-# Connector - unified userspace <-> kernelspace linker
-#
 # CONFIG_CONNECTOR is not set
 # CONFIG_MTD is not set
-
-#
-# Parallel port support
-#
 # CONFIG_PARPORT is not set
-
-#
-# Plug and Play support
-#
-# CONFIG_PNPACPI is not set
-
-#
-# Block devices
-#
-# CONFIG_BLK_CPQ_DA is not set
+CONFIG_BLK_DEV=y
 # CONFIG_BLK_CPQ_CISS_DA is not set
 # CONFIG_BLK_DEV_DAC960 is not set
 # CONFIG_BLK_DEV_UMEM is not set
@@ -424,14 +389,11 @@ CONFIG_BLK_DEV_RAM_SIZE=4096
 CONFIG_BLK_DEV_RAM_BLOCKSIZE=1024
 # CONFIG_CDROM_PKTCDVD is not set
 # CONFIG_ATA_OVER_ETH is not set
-
-#
-# Misc devices
-#
+CONFIG_MISC_DEVICES=y
 # CONFIG_PHANTOM is not set
+CONFIG_EEPROM_93CX6=y
 # CONFIG_SGI_IOC4 is not set
 # CONFIG_TIFM_CORE is not set
-# CONFIG_BLINK is not set
 # CONFIG_IDE is not set
 
 #
@@ -439,6 +401,7 @@ CONFIG_BLK_DEV_RAM_BLOCKSIZE=1024
 #
 # 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
@@ -468,12 +431,9 @@ CONFIG_SCSI_WAIT_SCAN=m
 # CONFIG_SCSI_SPI_ATTRS is not set
 # CONFIG_SCSI_FC_ATTRS is not set
 # CONFIG_SCSI_ISCSI_ATTRS is not set
-# CONFIG_SCSI_SAS_ATTRS is not set
 # CONFIG_SCSI_SAS_LIBSAS is not set
-
-#
-# SCSI low-level drivers
-#
+# 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
@@ -483,7 +443,6 @@ CONFIG_SCSI_WAIT_SCAN=m
 # 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_ARCMSR is not set
 # CONFIG_MEGARAID_NEWGEN is not set
 # CONFIG_MEGARAID_LEGACY is not set
@@ -548,6 +507,7 @@ CONFIG_SATA_SIL=y
 # 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
@@ -561,59 +521,43 @@ CONFIG_SATA_SIL=y
 # CONFIG_PATA_VIA is not set
 # CONFIG_PATA_WINBOND is not set
 CONFIG_PATA_PLATFORM=y
-
-#
-# Multi-device support (RAID and LVM)
-#
 # CONFIG_MD is not set
-
-#
-# Fusion MPT device support
-#
 # CONFIG_FUSION is not set
-# CONFIG_FUSION_SPI is not set
-# CONFIG_FUSION_FC is not set
-# CONFIG_FUSION_SAS is not set
 
 #
 # IEEE 1394 (FireWire) support
 #
 # CONFIG_FIREWIRE is not set
 # CONFIG_IEEE1394 is not set
-
-#
-# I2O device support
-#
 # CONFIG_I2O is not set
-
-#
-# Network device support
-#
 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
-
-#
-# Ethernet (10 or 100Mbit)
-#
 CONFIG_NET_ETHERNET=y
 CONFIG_MII=y
+CONFIG_AX88796=y
+CONFIG_AX88796_93CX6=y
 # CONFIG_STNIC 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_SMC91X is not set
-
-#
-# Tulip family network device support
-#
+# CONFIG_SMC911X 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=m
 # CONFIG_PCNET32_NAPI is not set
@@ -621,7 +565,6 @@ CONFIG_PCNET32=m
 # CONFIG_ADAPTEC_STARFIRE is not set
 # CONFIG_B44 is not set
 # CONFIG_FORCEDETH is not set
-# CONFIG_DGRS is not set
 # CONFIG_EEPRO100 is not set
 # CONFIG_E100 is not set
 # CONFIG_FEALNX is not set
@@ -647,6 +590,7 @@ CONFIG_NETDEV_1000=y
 CONFIG_E1000=m
 # CONFIG_E1000_NAPI is not set
 # CONFIG_E1000_DISABLE_PACKET_SPLIT is not set
+# CONFIG_E1000E is not set
 # CONFIG_NS83820 is not set
 # CONFIG_HAMACHI is not set
 # CONFIG_YELLOWFIN is not set
@@ -664,11 +608,14 @@ CONFIG_R8169=y
 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
 
 #
@@ -686,15 +633,7 @@ CONFIG_NETDEV_10000=y
 # CONFIG_NETCONSOLE is not set
 # CONFIG_NETPOLL is not set
 # CONFIG_NET_POLL_CONTROLLER is not set
-
-#
-# ISDN subsystem
-#
 # CONFIG_ISDN is not set
-
-#
-# Telephony Support
-#
 # CONFIG_PHONE is not set
 
 #
@@ -702,6 +641,7 @@ CONFIG_NETDEV_10000=y
 #
 CONFIG_INPUT=y
 # CONFIG_INPUT_FF_MEMLESS is not set
+# CONFIG_INPUT_POLLDEV is not set
 
 #
 # Userland interfaces
@@ -711,7 +651,6 @@ CONFIG_INPUT_MOUSEDEV=y
 CONFIG_INPUT_MOUSEDEV_SCREEN_X=1024
 CONFIG_INPUT_MOUSEDEV_SCREEN_Y=768
 # CONFIG_INPUT_JOYDEV is not set
-# CONFIG_INPUT_TSDEV is not set
 # CONFIG_INPUT_EVDEV is not set
 # CONFIG_INPUT_EVBUG is not set
 
@@ -765,21 +704,11 @@ CONFIG_SERIAL_CORE_CONSOLE=y
 CONFIG_UNIX98_PTYS=y
 CONFIG_LEGACY_PTYS=y
 CONFIG_LEGACY_PTY_COUNT=256
-
-#
-# IPMI
-#
 # CONFIG_IPMI_HANDLER is not set
-# CONFIG_WATCHDOG is not set
 CONFIG_HW_RANDOM=y
 # CONFIG_R3964 is not set
 # CONFIG_APPLICOM is not set
-# CONFIG_DRM is not set
 # CONFIG_RAW_DRIVER is not set
-
-#
-# TPM devices
-#
 # CONFIG_TCG_TPM is not set
 CONFIG_DEVPORT=y
 # CONFIG_I2C is not set
@@ -789,21 +718,31 @@ CONFIG_DEVPORT=y
 #
 # CONFIG_SPI is not set
 # CONFIG_SPI_MASTER is not set
-
-#
-# Dallas's 1-wire bus
-#
 # CONFIG_W1 is not set
+# CONFIG_POWER_SUPPLY is not set
 CONFIG_HWMON=y
 # CONFIG_HWMON_VID is not set
-# CONFIG_SENSORS_ABITUGURU 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_WATCHDOG is not set
+
+#
+# Sonics Silicon Backplane
+#
+CONFIG_SSB_POSSIBLE=y
+# CONFIG_SSB is not set
 
 #
 # Multifunction device drivers
@@ -820,14 +759,16 @@ CONFIG_DAB=y
 #
 # Graphics support
 #
+# 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
-# CONFIG_VGASTATE is not set
-# CONFIG_FB is not set
 
 #
 # Sound
@@ -843,20 +784,14 @@ CONFIG_SOUND=m
 # Open Sound System
 #
 CONFIG_SOUND_PRIME=m
-# CONFIG_OSS_OBSOLETE is not set
 # CONFIG_SOUND_TRIDENT is not set
 # CONFIG_SOUND_MSNDCLAS is not set
 # CONFIG_SOUND_MSNDPIN is not set
-
-#
-# HID Devices
-#
+CONFIG_HID_SUPPORT=y
 CONFIG_HID=y
 # CONFIG_HID_DEBUG is not set
-
-#
-# USB support
-#
+# 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
@@ -871,32 +806,8 @@ CONFIG_USB_ARCH_HAS_EHCI=y
 #
 # CONFIG_USB_GADGET is not set
 # CONFIG_MMC is not set
-
-#
-# LED devices
-#
 # CONFIG_NEW_LEDS is not set
-
-#
-# LED drivers
-#
-
-#
-# LED Triggers
-#
-
-#
-# InfiniBand support
-#
 # CONFIG_INFINIBAND is not set
-
-#
-# EDAC - error detection and reporting (RAS) (EXPERIMENTAL)
-#
-
-#
-# Real Time Clock
-#
 CONFIG_RTC_LIB=y
 CONFIG_RTC_CLASS=y
 CONFIG_RTC_HCTOSYS=y
@@ -912,10 +823,6 @@ CONFIG_RTC_INTF_DEV=y
 # CONFIG_RTC_INTF_DEV_UIE_EMUL is not set
 # CONFIG_RTC_DRV_TEST is not set
 
-#
-# I2C RTC drivers
-#
-
 #
 # SPI RTC drivers
 #
@@ -924,8 +831,10 @@ CONFIG_RTC_INTF_DEV=y
 # Platform RTC drivers
 #
 # CONFIG_RTC_DRV_DS1553 is not set
+# CONFIG_RTC_DRV_STK17TA8 is not set
 # CONFIG_RTC_DRV_DS1742 is not set
 # CONFIG_RTC_DRV_M48T86 is not set
+# CONFIG_RTC_DRV_M48T59 is not set
 # CONFIG_RTC_DRV_V3020 is not set
 
 #
@@ -934,17 +843,9 @@ CONFIG_RTC_INTF_DEV=y
 CONFIG_RTC_DRV_SH=y
 
 #
-# DMA Engine support
-#
-# CONFIG_DMA_ENGINE is not set
-
-#
-# DMA Clients
-#
-
-#
-# DMA Devices
+# Userspace I/O
 #
+# CONFIG_UIO is not set
 
 #
 # File systems
@@ -1005,7 +906,6 @@ CONFIG_TMPFS=y
 # CONFIG_TMPFS_POSIX_ACL is not set
 CONFIG_HUGETLBFS=y
 CONFIG_HUGETLB_PAGE=y
-CONFIG_RAMFS=y
 CONFIG_CONFIGFS_FS=m
 
 #
@@ -1024,10 +924,7 @@ CONFIG_CONFIGFS_FS=m
 # CONFIG_QNX4FS_FS is not set
 # CONFIG_SYSV_FS is not set
 # CONFIG_UFS_FS is not set
-
-#
-# Network File Systems
-#
+CONFIG_NETWORK_FILESYSTEMS=y
 CONFIG_NFS_FS=y
 CONFIG_NFS_V3=y
 # CONFIG_NFS_V3_ACL is not set
@@ -1053,17 +950,12 @@ CONFIG_RPCSEC_GSS_KRB5=y
 # CONFIG_NCP_FS is not set
 # CONFIG_CODA_FS is not set
 # CONFIG_AFS_FS is not set
-# CONFIG_9P_FS is not set
 
 #
 # Partition Types
 #
 # CONFIG_PARTITION_ADVANCED is not set
 CONFIG_MSDOS_PARTITION=y
-
-#
-# Native Language Support
-#
 CONFIG_NLS=y
 CONFIG_NLS_DEFAULT="iso8859-1"
 CONFIG_NLS_CODEPAGE_437=y
@@ -1104,23 +996,18 @@ CONFIG_NLS_ISO8859_1=y
 # CONFIG_NLS_KOI8_R is not set
 # CONFIG_NLS_KOI8_U is not set
 # CONFIG_NLS_UTF8 is not set
-
-#
-# Distributed Lock Manager
-#
 # CONFIG_DLM is not set
-
-#
-# Profiling support
-#
+CONFIG_INSTRUMENTATION=y
 CONFIG_PROFILING=y
 CONFIG_OPROFILE=m
+# CONFIG_MARKERS is not set
 
 #
 # Kernel hacking
 #
 CONFIG_TRACE_IRQFLAGS_SUPPORT=y
 # 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
@@ -1129,6 +1016,7 @@ CONFIG_DEBUG_FS=y
 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
@@ -1137,6 +1025,7 @@ CONFIG_DETECT_SOFTLOCKUP=y
 # CONFIG_DEBUG_MUTEXES is not set
 # CONFIG_DEBUG_LOCK_ALLOC is not set
 # CONFIG_PROVE_LOCKING is not set
+# CONFIG_LOCK_STAT is not set
 # CONFIG_DEBUG_SPINLOCK_SLEEP is not set
 # CONFIG_DEBUG_LOCKING_API_SELFTESTS is not set
 # CONFIG_DEBUG_KOBJECT is not set
@@ -1144,10 +1033,13 @@ CONFIG_DEBUG_BUGVERBOSE=y
 CONFIG_DEBUG_INFO=y
 # CONFIG_DEBUG_VM is not set
 # CONFIG_DEBUG_LIST is not set
+# CONFIG_DEBUG_SG is not set
 # CONFIG_FRAME_POINTER 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_SH_STANDARD_BIOS=y
 # CONFIG_EARLY_SCIF_CONSOLE is not set
 CONFIG_EARLY_PRINTK=y
@@ -1155,6 +1047,7 @@ CONFIG_EARLY_PRINTK=y
 CONFIG_DEBUG_STACKOVERFLOW=y
 # CONFIG_DEBUG_STACK_USAGE is not set
 # CONFIG_4KSTACKS is not set
+# CONFIG_IRQSTACKS is not set
 # CONFIG_SH_KGDB is not set
 
 #
@@ -1162,10 +1055,7 @@ CONFIG_DEBUG_STACKOVERFLOW=y
 #
 # CONFIG_KEYS is not set
 # CONFIG_SECURITY is not set
-
-#
-# Cryptographic options
-#
+# CONFIG_SECURITY_FILE_CAPABILITIES is not set
 CONFIG_CRYPTO=y
 CONFIG_CRYPTO_ALGAPI=y
 CONFIG_CRYPTO_BLKCIPHER=y
@@ -1186,6 +1076,7 @@ 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_CRYPTD is not set
 CONFIG_CRYPTO_DES=y
 # CONFIG_CRYPTO_FCRYPT is not set
@@ -1199,15 +1090,14 @@ CONFIG_CRYPTO_DES=y
 # 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
-
-#
-# Hardware crypto devices
-#
+# CONFIG_CRYPTO_AUTHENC is not set
+CONFIG_CRYPTO_HW=y
 
 #
 # Library routines
@@ -1217,6 +1107,7 @@ CONFIG_BITREVERSE=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_HAS_IOMEM=y
 CONFIG_HAS_IOPORT=y
index 158e03f0b1ef9b33c69d3c889f2730bcdc2649b4..2e43a2a971a927f450680a41988c491ee3e42449 100644 (file)
@@ -1,7 +1,7 @@
 #
 # Automatically generated make config: don't edit
-# Linux kernel version: 2.6.24-rc1
-# Fri Nov  2 14:30:49 2007
+# Linux kernel version: 2.6.24-rc2
+# Tue Nov 13 20:34:57 2007
 #
 CONFIG_SUPERH=y
 CONFIG_RWSEM_GENERIC_SPINLOCK=y
@@ -124,8 +124,6 @@ CONFIG_CPU_SHX2=y
 # CONFIG_CPU_SUBTYPE_SH7751R is not set
 # CONFIG_CPU_SUBTYPE_SH7760 is not set
 # CONFIG_CPU_SUBTYPE_SH4_202 is not set
-# CONFIG_CPU_SUBTYPE_ST40STB1 is not set
-# CONFIG_CPU_SUBTYPE_ST40GX1 is not set
 # CONFIG_CPU_SUBTYPE_SH7770 is not set
 # CONFIG_CPU_SUBTYPE_SH7780 is not set
 CONFIG_CPU_SUBTYPE_SH7785=y
@@ -254,7 +252,6 @@ CONFIG_GUSA=y
 #
 CONFIG_ZERO_PAGE_OFFSET=0x00001000
 CONFIG_BOOT_LINK_OFFSET=0x00800000
-# CONFIG_UBC_WAKEUP is not set
 CONFIG_CMDLINE_BOOL=y
 CONFIG_CMDLINE="console=ttySC0,115200 root=/dev/sda1"
 
@@ -266,6 +263,7 @@ CONFIG_SH_PCIDMA_NONCOHERENT=y
 CONFIG_PCI_AUTO=y
 CONFIG_PCI_AUTO_UPDATE_RESOURCES=y
 # CONFIG_ARCH_SUPPORTS_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
@@ -550,6 +548,8 @@ CONFIG_NETDEVICES=y
 # CONFIG_PHYLIB is not set
 CONFIG_NET_ETHERNET=y
 CONFIG_MII=y
+CONFIG_AX88796=y
+CONFIG_AX88796_93CX6=y
 # CONFIG_STNIC is not set
 # CONFIG_HAPPYMEAL is not set
 # CONFIG_SUNGEM is not set
index f2216081ab85d5983bd8c5d4b4b282b362e6fc98..48fe4032ebea7b9cfeaef46864f5dc32f580f635 100644 (file)
@@ -40,8 +40,8 @@ int __init pcibios_map_platform_irq(struct pci_dev *pdev, u8 slot, u8 pin)
 
 static struct resource sh7780_io_resource = {
        .name   = "SH7780_IO",
-       .start  = 0x2000,
-       .end    = 0x2000 + SH7780_PCI_IO_SIZE - 1,
+       .start  = SH7780_PCI_IO_BASE,
+       .end    = SH7780_PCI_IO_BASE + SH7780_PCI_IO_SIZE - 1,
        .flags  = IORESOURCE_IO
 };
 
index 212674df5e1369c6cedc5fb58621fc9742987769..bbdb48c124a238ce4016279383906ac6aa1c55ed 100644 (file)
@@ -43,8 +43,8 @@ int __init pcibios_map_platform_irq(struct pci_dev *pdev, u8 slot, u8 pin)
 
 static struct resource se7780_io_resource = {
        .name   = "SH7780_IO",
-       .start  = 0x2000,
-       .end    = 0x2000 + SH7780_PCI_IO_SIZE - 1,
+       .start  = SH7780_PCI_IO_BASE,
+       .end    = SH7780_PCI_IO_BASE + SH7780_PCI_IO_SIZE - 1,
        .flags  = IORESOURCE_IO
 };
 
index 00d12d0f8c1f682c7a730665ef0178e14da28c1d..1d069a859de27cd69f704161f63ac919eefe4b85 100644 (file)
@@ -30,7 +30,7 @@
 #define SH7780_PCI_MEMORY_BASE 0xFD000000      /* Memory space base addr */
 #define SH7780_PCI_MEM_SIZE    0x01000000      /* Size of Memory window */
 
-#define SH7780_PCI_IO_BASE     0xFE400000      /* IO space base address */
+#define SH7780_PCI_IO_BASE     0xFE200000      /* IO space base address */
 #define SH7780_PCI_IO_SIZE     0x00400000      /* Size of IO window */
 
 #define SH7780_PCIREG_BASE     0xFE040000      /* PCI regs base address */
index f33cedb353fc6af215bc7f86b37120553d8e7532..60d74f793a1d33969a68d6c303b37dda4f4cd214 100644 (file)
@@ -258,9 +258,6 @@ asmlinkage int __kprobes __do_page_fault(struct pt_regs *regs,
        pmd_t *pmd;
        pte_t *pte;
        pte_t entry;
-       struct mm_struct *mm = current->mm;
-       spinlock_t *ptl = NULL;
-       int ret = 1;
 
 #ifdef CONFIG_SH_KGDB
        if (kgdb_nofault && kgdb_bus_err_hook)
@@ -274,12 +271,11 @@ asmlinkage int __kprobes __do_page_fault(struct pt_regs *regs,
         */
        if (address >= P3SEG && address < P3_ADDR_MAX) {
                pgd = pgd_offset_k(address);
-               mm = NULL;
        } else {
-               if (unlikely(address >= TASK_SIZE || !mm))
+               if (unlikely(address >= TASK_SIZE || !current->mm))
                        return 1;
 
-               pgd = pgd_offset(mm, address);
+               pgd = pgd_offset(current->mm, address);
        }
 
        pud = pud_offset(pgd, address);
@@ -289,34 +285,19 @@ asmlinkage int __kprobes __do_page_fault(struct pt_regs *regs,
        if (pmd_none_or_clear_bad(pmd))
                return 1;
 
-       if (mm)
-               pte = pte_offset_map_lock(mm, pmd, address, &ptl);
-       else
-               pte = pte_offset_kernel(pmd, address);
-
+       pte = pte_offset_kernel(pmd, address);
        entry = *pte;
        if (unlikely(pte_none(entry) || pte_not_present(entry)))
-               goto unlock;
+               return 1;
        if (unlikely(writeaccess && !pte_write(entry)))
-               goto unlock;
+               return 1;
 
        if (writeaccess)
                entry = pte_mkdirty(entry);
        entry = pte_mkyoung(entry);
 
-#ifdef CONFIG_CPU_SH4
-       /*
-        * ITLB is not affected by "ldtlb" instruction.
-        * So, we need to flush the entry by ourselves.
-        */
-       local_flush_tlb_one(get_asid(), address & PAGE_MASK);
-#endif
-
        set_pte(pte, entry);
        update_mmu_cache(NULL, address, entry);
-       ret = 0;
-unlock:
-       if (mm)
-               pte_unmap_unlock(pte, ptl);
-       return ret;
+
+       return 0;
 }
index af90a5f9ab5751a6ee19161221b198c55f9ae8b8..b240b8863fd044153319340f3960fa87e88cd6ba 100644 (file)
@@ -62,8 +62,10 @@ static int __cpu_find_by(int (*compare)(int, int, void *), void *compare_arg,
                int err = check_cpu_node(dp->node, &cur_inst,
                                         compare, compare_arg,
                                         prom_node, mid);
-               if (!err)
+               if (!err) {
+                       of_node_put(dp);
                        return 0;
+               }
        }
 
        return -ENODEV;
index f2d432edc92d77b2a3e7d3f1ffbf0ca0295cacd7..4cd5d7818dc6f0acff518ce0250a54809d96e81a 100644 (file)
@@ -329,7 +329,7 @@ int __init pcic_probe(void)
        pcic->pcic_res_cfg_addr.name = "pcic_cfg_addr";
        if ((pcic->pcic_config_space_addr =
            ioremap(regs[2].phys_addr, regs[2].reg_size * 2)) == 0) {
-               prom_printf("PCIC: Error, cannot map
+               prom_printf("PCIC: Error, cannot map "
                            "PCI Configuration Space Address.\n");
                prom_halt();
        }
@@ -341,7 +341,7 @@ int __init pcic_probe(void)
        pcic->pcic_res_cfg_data.name = "pcic_cfg_data";
        if ((pcic->pcic_config_space_data =
            ioremap(regs[3].phys_addr, regs[3].reg_size * 2)) == 0) {
-               prom_printf("PCIC: Error, cannot map
+               prom_printf("PCIC: Error, cannot map "
                            "PCI Configuration Space Data.\n");
                prom_halt();
        }
@@ -518,8 +518,8 @@ static void pcic_map_pci_device(struct linux_pcic *pcic,
                                 * board in a PCI slot. We must remap it
                                 * under 64K but it is not done yet. XXX
                                 */
-                               printk("PCIC: Skipping I/O space at 0x%lx,"
-                                   "this will Oops if a driver attaches;"
+                               printk("PCIC: Skipping I/O space at 0x%lx, "
+                                   "this will Oops if a driver attaches "
                                    "device '%s' at %02x:%02x)\n", address,
                                    namebuf, dev->bus->number, dev->devfn);
                        }
index 22734ac08c8a678a8ffa3f28553c8c6c40c21fdd..f62d9f6c5e2a8d45519b1dba2a454e1faa718d1a 100644 (file)
@@ -1,7 +1,7 @@
 #
 # Automatically generated make config: don't edit
-# Linux kernel version: 2.6.24-rc1
-# Wed Oct 31 15:36:47 2007
+# Linux kernel version: 2.6.24-rc4
+# Tue Dec  4 00:37:59 2007
 #
 CONFIG_SPARC=y
 CONFIG_SPARC64=y
@@ -47,6 +47,7 @@ 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=18
@@ -154,6 +155,7 @@ CONFIG_PCI_DOMAINS=y
 CONFIG_PCI_SYSCALL=y
 CONFIG_ARCH_SUPPORTS_MSI=y
 CONFIG_PCI_MSI=y
+# CONFIG_PCI_LEGACY is not set
 # CONFIG_PCI_DEBUG is not set
 CONFIG_SUN_OPENPROMFS=m
 CONFIG_SPARC32_COMPAT=y
@@ -359,7 +361,6 @@ CONFIG_IDE_GENERIC=y
 CONFIG_BLK_DEV_IDEPCI=y
 # CONFIG_IDEPCI_SHARE_IRQ is not set
 CONFIG_IDEPCI_PCIBUS_ORDER=y
-# CONFIG_BLK_DEV_OFFBOARD is not set
 # CONFIG_BLK_DEV_GENERIC is not set
 # CONFIG_BLK_DEV_OPTI621 is not set
 CONFIG_BLK_DEV_IDEDMA_PCI=y
@@ -584,7 +585,6 @@ CONFIG_NIU=m
 # CONFIG_USB_KAWETH is not set
 # CONFIG_USB_PEGASUS is not set
 # CONFIG_USB_RTL8150 is not set
-# CONFIG_USB_USBNET_MII is not set
 # CONFIG_USB_USBNET is not set
 # CONFIG_WAN is not set
 # CONFIG_FDDI is not set
@@ -780,6 +780,7 @@ CONFIG_HWMON=y
 # CONFIG_SENSORS_ADT7470 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
index 777d345770458358a089df7901486f048705142a..6d4f02e8a4cfe7da672602b87ab49a8856ff7570 100644 (file)
@@ -1,7 +1,6 @@
-/* $Id: chmc.c,v 1.4 2002/01/08 16:00:14 davem Exp $
- * memctrlr.c: Driver for UltraSPARC-III memory controller.
+/* memctrlr.c: Driver for UltraSPARC-III memory controller.
  *
- * Copyright (C) 2001 David S. Miller (davem@redhat.com)
+ * Copyright (C) 2001, 2007 David S. Miller (davem@davemloft.net)
  */
 
 #include <linux/module.h>
@@ -16,6 +15,7 @@
 #include <linux/init.h>
 #include <asm/spitfire.h>
 #include <asm/chmctrl.h>
+#include <asm/cpudata.h>
 #include <asm/oplib.h>
 #include <asm/prom.h>
 #include <asm/io.h>
@@ -242,8 +242,11 @@ int chmc_getunumber(int syndrome_code,
  */
 static u64 read_mcreg(struct mctrl_info *mp, unsigned long offset)
 {
-       unsigned long ret;
-       int this_cpu = get_cpu();
+       unsigned long ret, this_cpu;
+
+       preempt_disable();
+
+       this_cpu = real_hard_smp_processor_id();
 
        if (mp->portid == this_cpu) {
                __asm__ __volatile__("ldxa      [%1] %2, %0"
@@ -255,7 +258,8 @@ static u64 read_mcreg(struct mctrl_info *mp, unsigned long offset)
                                     : "r" (mp->regs + offset),
                                       "i" (ASI_PHYS_BYPASS_EC_E));
        }
-       put_cpu();
+
+       preempt_enable();
 
        return ret;
 }
index 0f19dce1c905c699e30361a7f6c6397cffc5c3c7..b5f7b354084f6d91d1da68e2374d7d409f1c5416 100644 (file)
@@ -155,6 +155,7 @@ void __init isa_init(void)
                isa_br = kzalloc(sizeof(*isa_br), GFP_KERNEL);
                if (!isa_br) {
                        printk(KERN_DEBUG "isa: cannot allocate sparc_isa_bridge");
+                       pci_dev_put(pdev);
                        return;
                }
 
@@ -168,6 +169,7 @@ void __init isa_init(void)
                        printk(KERN_DEBUG "isa: device registration error for %s!\n",
                               dp->path_component_name);
                        kfree(isa_br);
+                       pci_dev_put(pdev);
                        return;
                }
 
index 217478a94128783ae6055e689391dfb5d9919ee6..63969f6102847b75ca033f500ff3e277fa9488fd 100644 (file)
@@ -2338,6 +2338,7 @@ static int __init ldc_init(void)
        unsigned long major, minor;
        struct mdesc_handle *hp;
        const u64 *v;
+       int err;
        u64 mp;
 
        hp = mdesc_grab();
@@ -2345,29 +2346,33 @@ static int __init ldc_init(void)
                return -ENODEV;
 
        mp = mdesc_node_by_name(hp, MDESC_NODE_NULL, "platform");
+       err = -ENODEV;
        if (mp == MDESC_NODE_NULL)
-               return -ENODEV;
+               goto out;
 
        v = mdesc_get_property(hp, mp, "domaining-enabled", NULL);
        if (!v)
-               return -ENODEV;
+               goto out;
 
        major = 1;
        minor = 0;
        if (sun4v_hvapi_register(HV_GRP_LDOM, major, &minor)) {
                printk(KERN_INFO PFX "Could not register LDOM hvapi.\n");
-               return -ENODEV;
+               goto out;
        }
 
        printk(KERN_INFO "%s", version);
 
        if (!*v) {
                printk(KERN_INFO PFX "Domaining disabled.\n");
-               return -ENODEV;
+               goto out;
        }
        ldom_domaining_enabled = 1;
+       err = 0;
 
-       return 0;
+out:
+       mdesc_release(hp);
+       return err;
 }
 
 core_initcall(ldc_init);
index 8c4875bdb4a89d54841787141922eff02566c625..e587a372f3fee55918b92755dbc37794257763e2 100644 (file)
@@ -1022,6 +1022,10 @@ void __init sun4v_pci_init(struct device_node *dp, char *model_name)
        }
 
        prop = of_find_property(dp, "reg", NULL);
+       if (!prop) {
+               prom_printf("SUN4V_PCI: Could not find config registers\n");
+               prom_halt();
+       }
        regs = prop->value;
 
        devhandle = (regs->phys_addr >> 32UL) & 0x0fffffff;
index 7cd8d94df0dca8ca7ae44812f0c179366d3b9c1b..c39944927f1ac7f39f8ddb36671216ca6c2c0162 100644 (file)
@@ -236,8 +236,9 @@ void smp_synchronize_tick_client(void)
                       t[i].rt, t[i].master, t[i].diff, t[i].lat);
 #endif
 
-       printk(KERN_INFO "CPU %d: synchronized TICK with master CPU (last diff %ld cycles,"
-              "maxerr %lu cycles)\n", smp_processor_id(), delta, rt);
+       printk(KERN_INFO "CPU %d: synchronized TICK with master CPU "
+              "(last diff %ld cycles, maxerr %lu cycles)\n",
+              smp_processor_id(), delta, rt);
 }
 
 static void smp_start_sync_tick_client(int cpu);
@@ -475,7 +476,7 @@ static inline void spitfire_xcall_deliver(u64 data0, u64 data1, u64 data2, cpuma
  */
 static void cheetah_xcall_deliver(u64 data0, u64 data1, u64 data2, cpumask_t mask)
 {
-       u64 pstate, ver;
+       u64 pstate, ver, busy_mask;
        int nack_busy_id, is_jbus, need_more;
 
        if (cpus_empty(mask))
@@ -507,14 +508,20 @@ retry:
                               "i" (ASI_INTR_W));
 
        nack_busy_id = 0;
+       busy_mask = 0;
        {
                int i;
 
                for_each_cpu_mask(i, mask) {
                        u64 target = (i << 14) | 0x70;
 
-                       if (!is_jbus)
+                       if (is_jbus) {
+                               busy_mask |= (0x1UL << (i * 2));
+                       } else {
                                target |= (nack_busy_id << 24);
+                               busy_mask |= (0x1UL <<
+                                             (nack_busy_id * 2));
+                       }
                        __asm__ __volatile__(
                                "stxa   %%g0, [%0] %1\n\t"
                                "membar #Sync\n\t"
@@ -530,15 +537,16 @@ retry:
 
        /* Now, poll for completion. */
        {
-               u64 dispatch_stat;
+               u64 dispatch_stat, nack_mask;
                long stuck;
 
                stuck = 100000 * nack_busy_id;
+               nack_mask = busy_mask << 1;
                do {
                        __asm__ __volatile__("ldxa      [%%g0] %1, %0"
                                             : "=r" (dispatch_stat)
                                             : "i" (ASI_INTR_DISPATCH_STAT));
-                       if (dispatch_stat == 0UL) {
+                       if (!(dispatch_stat & (busy_mask | nack_mask))) {
                                __asm__ __volatile__("wrpr %0, 0x0, %%pstate"
                                                     : : "r" (pstate));
                                if (unlikely(need_more)) {
@@ -555,12 +563,12 @@ retry:
                        }
                        if (!--stuck)
                                break;
-               } while (dispatch_stat & 0x5555555555555555UL);
+               } while (dispatch_stat & busy_mask);
 
                __asm__ __volatile__("wrpr %0, 0x0, %%pstate"
                                     : : "r" (pstate));
 
-               if ((dispatch_stat & ~(0x5555555555555555UL)) == 0) {
+               if (dispatch_stat & busy_mask) {
                        /* Busy bits will not clear, continue instead
                         * of freezing up on this cpu.
                         */
index e0ac74e5d4c4d7c754d37bfafd44be0788e9c3dc..717f5d3440e3bc89c784fa1cd1d930fbbde78844 100644 (file)
@@ -8,6 +8,13 @@ config UML_X86
        bool
        default y
 
+config X86_32
+       bool
+       default y
+
+config RWSEM_XCHGADD_ALGORITHM
+       def_bool y
+
 config 64BIT
        bool
        default n
index 31999bc1c8a475eec23f88f9ceeb9b63ed8da146..ba6813a4aa3768952e54e927ee4f898589b6004a 100644 (file)
@@ -168,7 +168,7 @@ ifneq ($(KBUILD_SRC),)
        $(Q)mkdir -p $(objtree)/include/asm-um
        $(Q)ln -fsn $(srctree)/include/asm-$(HEADER_ARCH) include/asm-um/arch
 else
-       $(Q)cd $(TOPDIR)/include/asm-um && ln -fsn ../asm-$(SUBARCH) arch
+       $(Q)cd $(TOPDIR)/include/asm-um && ln -fsn ../asm-$(HEADER_ARCH) arch
 endif
 
 $(objtree)/$(ARCH_DIR)/include:
index 67290117d90924ff0dc712af68725562b574c450..561e373bd8500f1f07ed4cc52b203dc903585f70 100644 (file)
@@ -22,11 +22,6 @@ export LDFLAGS HOSTCFLAGS HOSTLDFLAGS UML_OBJCOPYFLAGS
 endif
 endif
 
-KBUILD_CFLAGS          += -DCONFIG_X86_32
-KBUILD_AFLAGS          += -DCONFIG_X86_32
-CONFIG_X86_32          := y
-export CONFIG_X86_32
-
 # First of all, tune CFLAGS for the specific CPU. This actually sets cflags-y.
 include $(srctree)/arch/x86/Makefile_32.cpu
 
index b88e93b3a39f055a5b8a4a4d72b54ae8fe3ed5ee..025764089ac8ea7b739652c827fbe88b3a400324 100644 (file)
@@ -74,10 +74,16 @@ void generic_free(void *data)
 
 int generic_console_write(int fd, const char *buf, int n)
 {
+       sigset_t old, no_sigio;
        struct termios save, new;
        int err;
 
        if (isatty(fd)) {
+               sigemptyset(&no_sigio);
+               sigaddset(&no_sigio, SIGIO);
+               if (sigprocmask(SIG_BLOCK, &no_sigio, &old))
+                       goto error;
+
                CATCH_EINTR(err = tcgetattr(fd, &save));
                if (err)
                        goto error;
@@ -97,8 +103,11 @@ int generic_console_write(int fd, const char *buf, int n)
         * Restore raw mode, in any case; we *must* ignore any error apart
         * EINTR, except for debug.
         */
-       if (isatty(fd))
+       if (isatty(fd)) {
                CATCH_EINTR(tcsetattr(fd, TCSAFLUSH, &save));
+               sigprocmask(SIG_SETMASK, &old, NULL);
+       }
+
        return err;
 error:
        return -errno;
index 73681f14f9fc17daaf3261fcf1562e33fb71fbfb..3c6c44ca1ffa5785e1d6f34618628fc75cfea831 100644 (file)
@@ -98,10 +98,10 @@ static int uml_net_rx(struct net_device *dev)
        if (pkt_len > 0) {
                skb_trim(skb, pkt_len);
                skb->protocol = (*lp->protocol)(skb);
-               netif_rx(skb);
 
                lp->stats.rx_bytes += skb->len;
                lp->stats.rx_packets++;
+               netif_rx(skb);
                return pkt_len;
        }
 
index 7e6cdde62ead261e6140c30cc51d8517e0b65aac..b1a77b11f08915b01a18bf14d6cb2817160558da 100644 (file)
@@ -1128,6 +1128,7 @@ static void do_ubd_request(struct request_queue *q)
                                               "errno = %d\n", -n);
                                else if(list_empty(&dev->restart))
                                        list_add(&dev->restart, &restart);
+                               kfree(io_req);
                                return;
                        }
 
index e34e1effe0f59b53b7b12f0f733053643f7bee4f..e49280599465ec9ed4f44f4b0ffdf7e0807d2339 100644 (file)
@@ -59,7 +59,7 @@ long long disable_timer(void)
 {
        struct itimerval time = ((struct itimerval) { { 0, 0 }, { 0, 0 } });
 
-       if(setitimer(ITIMER_VIRTUAL, &time, &time) < 0)
+       if (setitimer(ITIMER_VIRTUAL, &time, &time) < 0)
                printk(UM_KERN_ERR "disable_timer - setitimer failed, "
                       "errno = %d\n", errno);
 
@@ -74,13 +74,62 @@ long long os_nsecs(void)
        return timeval_to_ns(&tv);
 }
 
+#ifdef UML_CONFIG_NO_HZ
+static int after_sleep_interval(struct timespec *ts)
+{
+       return 0;
+}
+#else
+static inline long long timespec_to_us(const struct timespec *ts)
+{
+       return ((long long) ts->tv_sec * UM_USEC_PER_SEC) +
+               ts->tv_nsec / UM_NSEC_PER_USEC;
+}
+
+static int after_sleep_interval(struct timespec *ts)
+{
+       int usec = UM_USEC_PER_SEC / UM_HZ;
+       long long start_usecs = timespec_to_us(ts);
+       struct timeval tv;
+       struct itimerval interval;
+
+       /*
+        * It seems that rounding can increase the value returned from
+        * setitimer to larger than the one passed in.  Over time,
+        * this will cause the remaining time to be greater than the
+        * tick interval.  If this happens, then just reduce the first
+        * tick to the interval value.
+        */
+       if (start_usecs > usec)
+               start_usecs = usec;
+       tv = ((struct timeval) { .tv_sec  = start_usecs / UM_USEC_PER_SEC,
+                                .tv_usec = start_usecs % UM_USEC_PER_SEC });
+       interval = ((struct itimerval) { { 0, usec }, tv });
+
+       if (setitimer(ITIMER_VIRTUAL, &interval, NULL) == -1)
+               return -errno;
+
+       return 0;
+}
+#endif
+
 extern void alarm_handler(int sig, struct sigcontext *sc);
 
 void idle_sleep(unsigned long long nsecs)
 {
-       struct timespec ts = { .tv_sec  = nsecs / UM_NSEC_PER_SEC,
-                              .tv_nsec = nsecs % UM_NSEC_PER_SEC };
+       struct timespec ts;
+
+       /*
+        * nsecs can come in as zero, in which case, this starts a
+        * busy loop.  To prevent this, reset nsecs to the tick
+        * interval if it is zero.
+        */
+       if (nsecs == 0)
+               nsecs = UM_NSEC_PER_SEC / UM_HZ;
+       ts = ((struct timespec) { .tv_sec       = nsecs / UM_NSEC_PER_SEC,
+                                 .tv_nsec      = nsecs % UM_NSEC_PER_SEC });
 
        if (nanosleep(&ts, &ts) == 0)
                alarm_handler(SIGVTALRM, NULL);
+       after_sleep_interval(&ts);
 }
index 368864dfe6eb635ef210f046ec351f04e96f42ef..80b7ba4056dbbb566841c1e1cbef9475730fe199 100644 (file)
@@ -112,8 +112,9 @@ config GENERIC_TIME_VSYSCALL
        bool
        default X86_64
 
-
-
+config ARCH_SUPPORTS_OPROFILE
+       bool
+       default y
 
 
 config ZONE_DMA32
@@ -148,7 +149,8 @@ config X86_SMP
 
 config X86_HT
        bool
-       depends on SMP && !(X86_VISWS || X86_VOYAGER || MK8)
+       depends on SMP
+       depends on (X86_32 && !(X86_VISWS || X86_VOYAGER)) || (X86_64 && !MK8)
        default y
 
 config X86_BIOS_REBOOT
index 116b03a4563608b00077707ae303106852374d8b..7aa1dc6d67c88f73067ff4be2ab6bf7ee204c9c1 100644 (file)
@@ -11,10 +11,9 @@ endif
 $(srctree)/arch/x86/Makefile%: ;
 
 ifeq ($(CONFIG_X86_32),y)
+        UTS_MACHINE := i386
         include $(srctree)/arch/x86/Makefile_32
 else
+        UTS_MACHINE := x86_64
         include $(srctree)/arch/x86/Makefile_64
 endif
-
-
-
index 6ef5a060fa11085df5be8d4616acd5541b53d5d2..4cc5b0411db58dd8201081702f4b93822a72101d 100644 (file)
@@ -236,39 +236,30 @@ start_of_setup:
        movw    %ax, %es
        cld
 
-# Apparently some ancient versions of LILO invoked the kernel
-# with %ss != %ds, which happened to work by accident for the
-# old code.  If the CAN_USE_HEAP flag is set in loadflags, or
-# %ss != %ds, then adjust the stack pointer.
+# Apparently some ancient versions of LILO invoked the kernel with %ss != %ds,
+# which happened to work by accident for the old code.  Recalculate the stack
+# pointer if %ss is invalid.  Otherwise leave it alone, LOADLIN sets up the
+# stack behind its own code, so we can't blindly put it directly past the heap.
 
-       # Smallest possible stack we can tolerate
-       movw    $(_end+STACK_SIZE), %cx
-
-       movw    heap_end_ptr, %dx
-       addw    $512, %dx
-       jnc     1f
-       xorw    %dx, %dx        # Wraparound - whole segment available
-1:     testb   $CAN_USE_HEAP, loadflags
-       jnz     2f
-
-       # No CAN_USE_HEAP
        movw    %ss, %dx
        cmpw    %ax, %dx        # %ds == %ss?
        movw    %sp, %dx
-       # If so, assume %sp is reasonably set, otherwise use
-       # the smallest possible stack.
-       jne     4f              # -> Smallest possible stack...
+       je      2f              # -> assume %sp is reasonably set
+
+       # Invalid %ss, make up a new stack
+       movw    $_end, %dx
+       testb   $CAN_USE_HEAP, loadflags
+       jz      1f
+       movw    heap_end_ptr, %dx
+1:     addw    $STACK_SIZE, %dx
+       jnc     2f
+       xorw    %dx, %dx        # Prevent wraparound
 
-       # Make sure the stack is at least minimum size.  Take a value
-       # of zero to mean "full segment."
-2:
+2:     # Now %dx should point to the end of our stack space
        andw    $~3, %dx        # dword align (might as well...)
        jnz     3f
        movw    $0xfffc, %dx    # Make sure we're not zero
-3:     cmpw    %cx, %dx
-       jnb     5f
-4:     movw    %cx, %dx        # Minimum value we can possibly use
-5:     movw    %ax, %ss
+3:     movw    %ax, %ss
        movzwl  %dx, %esp       # Clear upper half of %esp
        sti                     # Now we should have a working stack
 
index f63e5ff0aca12ac5e386076772a6ea90f44a2e2d..a25db514c719ef939bbb9e8069339a50e39c4dbc 100644 (file)
@@ -49,6 +49,9 @@ static void init_intel_pdc(struct acpi_processor *pr, struct cpuinfo_x86 *c)
        if (cpu_has(c, X86_FEATURE_EST))
                buf[2] |= ACPI_PDC_EST_CAPABILITY_SWSMP;
 
+       if (cpu_has(c, X86_FEATURE_ACPI))
+               buf[2] |= ACPI_PDC_T_FFH;
+
        obj->type = ACPI_TYPE_BUFFER;
        obj->buffer.length = 12;
        obj->buffer.pointer = (u8 *) buf;
index 79475d2370713a96cff45a1cc5aada1a4eedc093..da42de261ba8d7b4394b319a46aa04ebea5dbeea 100644 (file)
@@ -115,6 +115,3 @@ static int __init acpi_sleep_setup(char *str)
 
 __setup("acpi_sleep=", acpi_sleep_setup);
 
-void acpi_pci_link_exit(void)
-{
-}
index a97313b1270ec3c5f2771744c9bc024f1d6154df..1e931aaf2ef6db657ec4bc471d17ab169a4aa975 100644 (file)
@@ -35,10 +35,6 @@ wakeup_code:
        wakeup_code_start = .
        .code16
 
-       movw    $0xb800, %ax
-       movw    %ax,%fs
-       movw    $0x0e00 + 'L', %fs:(0x10)
-
        cli
        cld
 
index 08b07c176962f9c525d402adf5609d5c7c64f771..96986b46bc856844a8bed97a8b8a871293df92e8 100644 (file)
@@ -789,7 +789,7 @@ void __init sync_Arb_IDs(void)
         * Unsupported on P4 - see Intel Dev. Manual Vol. 3, Ch. 8.6.1 And not
         * needed on AMD.
         */
-       if (modern_apic())
+       if (modern_apic() || boot_cpu_data.x86_vendor == X86_VENDOR_AMD)
                return;
        /*
         * Wait for idle.
index 9921b01fe19907bd9fb22dc9ca00d3d61e9c4381..606fe4d55a91f0ee303bc78b08953881416743bd 100644 (file)
@@ -497,7 +497,7 @@ static void __cpuinit cache_shared_cpu_map_setup(unsigned int cpu, int index) {}
 static void __cpuinit cache_remove_shared_cpu_map(unsigned int cpu, int index) {}
 #endif
 
-static void free_cache_attributes(unsigned int cpu)
+static void __cpuinit free_cache_attributes(unsigned int cpu)
 {
        int i;
 
index 8bb482ff091b8eeaf54287cce060c664e5bf4046..9a5fa0abfcc7d3e63aa0c0a39ce786b29397b727 100644 (file)
@@ -22,6 +22,7 @@
 #include <asm/nmi.h>
 #include <asm/hw_irq.h>
 #include <asm/apic.h>
+#include <asm/hpet.h>
 #include <linux/kdebug.h>
 #include <asm/smp.h>
 
@@ -139,6 +140,9 @@ void machine_crash_shutdown(struct pt_regs *regs)
        lapic_shutdown();
 #if defined(CONFIG_X86_IO_APIC)
        disable_IO_APIC();
+#endif
+#ifdef CONFIG_HPET_TIMER
+       hpet_disable();
 #endif
        crash_save_cpu(regs, safe_smp_processor_id());
 }
index 374b7ece89610e14fcebff09dd0711d27da040ff..ac0637a6d71cc75637cff60888c78cbfb5a504b1 100644 (file)
@@ -193,6 +193,12 @@ default_entry:
        jb 10b
        movl %edi,(init_pg_tables_end - __PAGE_OFFSET)
 
+       /* Do an early initialization of the fixmap area */
+       movl $(swapper_pg_dir - __PAGE_OFFSET), %edx
+       movl $(swapper_pg_pmd - __PAGE_OFFSET), %eax
+       addl $0x007, %eax                       /* 0x007 = PRESENT+RW+USER */
+       movl %eax, 4092(%edx)
+
        xorl %ebx,%ebx                          /* This is the boot CPU (BSP) */
        jmp 3f
 /*
@@ -208,12 +214,6 @@ default_entry:
 .section .init.text,"ax",@progbits
 #endif
 
-       /* Do an early initialization of the fixmap area */
-       movl $(swapper_pg_dir - __PAGE_OFFSET), %edx
-       movl $(swapper_pg_pmd - __PAGE_OFFSET), %eax
-       addl $0x007, %eax                       /* 0x007 = PRESENT+RW+USER */
-       movl %eax, 4092(%edx)
-
 #ifdef CONFIG_SMP
 ENTRY(startup_32_smp)
        cld
index 53303f2e547582e282f5a941cc2311b79a821238..4a86ffd67ec5e23ecec8c9ed42d9f00ecc051631 100644 (file)
@@ -446,6 +446,20 @@ static __init int hpet_late_init(void)
 }
 fs_initcall(hpet_late_init);
 
+void hpet_disable(void)
+{
+       if (is_hpet_capable()) {
+               unsigned long cfg = hpet_readl(HPET_CFG);
+
+               if (hpet_legacy_int_enabled) {
+                       cfg &= ~HPET_CFG_LEGACY;
+                       hpet_legacy_int_enabled = 0;
+               }
+               cfg &= ~HPET_CFG_ENABLE;
+               hpet_writel(cfg, HPET_CFG);
+       }
+}
+
 #ifdef CONFIG_HPET_EMULATE_RTC
 
 /* HPET in LegacyReplacement Mode eats up RTC interrupt line. When, HPET
index edd39ccf139e0f9586a48fb17e75f453b3b8a4ee..02112fcc0de7ea3ff7a752e84d2b071d7a6ff74c 100644 (file)
@@ -2,6 +2,7 @@
 #include <asm/semaphore.h>
 #include <asm/checksum.h>
 #include <asm/desc.h>
+#include <asm/pgtable.h>
 
 EXPORT_SYMBOL(__down_failed);
 EXPORT_SYMBOL(__down_failed_interruptible);
@@ -29,3 +30,4 @@ EXPORT_SYMBOL(__read_lock_failed);
 #endif
 
 EXPORT_SYMBOL(csum_partial);
+EXPORT_SYMBOL(empty_zero_page);
index f35c6eb33da9b7a5e0caa1dee4f0e075121349af..6cf27319a91c3938b457e6b2eb94e2f5d3c35464 100644 (file)
@@ -962,7 +962,7 @@ static int EISA_ELCR(unsigned int irq)
 #define default_MCA_trigger(idx)       (1)
 #define default_MCA_polarity(idx)      (0)
 
-static int __init MPBIOS_polarity(int idx)
+static int MPBIOS_polarity(int idx)
 {
        int bus = mp_irqs[idx].mpc_srcbus;
        int polarity;
@@ -2166,6 +2166,10 @@ static inline void __init check_timer(void)
 {
        int apic1, pin1, apic2, pin2;
        int vector;
+       unsigned int ver;
+
+       ver = apic_read(APIC_LVR);
+       ver = GET_APIC_VERSION(ver);
 
        /*
         * get/set the timer IRQ vector:
@@ -2179,11 +2183,15 @@ static inline void __init check_timer(void)
         * mode for the 8259A whenever interrupts are routed
         * through I/O APICs.  Also IRQ0 has to be enabled in
         * the 8259A which implies the virtual wire has to be
-        * disabled in the local APIC.
+        * disabled in the local APIC.  Finally timer interrupts
+        * need to be acknowledged manually in the 8259A for
+        * timer_interrupt() and for the i82489DX when using
+        * the NMI watchdog.
         */
        apic_write_around(APIC_LVT0, APIC_LVT_MASKED | APIC_DM_EXTINT);
        init_8259A(1);
-       timer_ack = 1;
+       timer_ack = !cpu_has_tsc;
+       timer_ack |= (nmi_watchdog == NMI_IO_APIC && !APIC_INTEGRATED(ver));
        if (timer_over_8254 > 0)
                enable_8259A_irq(0);
 
@@ -2830,6 +2838,25 @@ int io_apic_set_pci_routing (int ioapic, int pin, int irq, int edge_level, int a
        return 0;
 }
 
+int acpi_get_override_irq(int bus_irq, int *trigger, int *polarity)
+{
+       int i;
+
+       if (skip_ioapic_setup)
+               return -1;
+
+       for (i = 0; i < mp_irq_entries; i++)
+               if (mp_irqs[i].mpc_irqtype == mp_INT &&
+                   mp_irqs[i].mpc_srcbusirq == bus_irq)
+                       break;
+       if (i >= mp_irq_entries)
+               return -1;
+
+       *trigger = irq_trigger(i);
+       *polarity = irq_polarity(i);
+       return 0;
+}
+
 #endif /* CONFIG_ACPI */
 
 static int __init parse_disable_timer_pin_1(char *arg)
index 953328b55a30503c58f2f8b3ed0f30939ff4047c..435a8c9b55f854bce24e145f20e5cc04ff7b1509 100644 (file)
@@ -546,7 +546,7 @@ int IO_APIC_get_PCI_irq_vector(int bus, int slot, int pin)
 #define default_PCI_trigger(idx)       (1)
 #define default_PCI_polarity(idx)      (1)
 
-static int __init MPBIOS_polarity(int idx)
+static int MPBIOS_polarity(int idx)
 {
        int bus = mp_irqs[idx].mpc_srcbus;
        int polarity;
@@ -2222,8 +2222,27 @@ int io_apic_set_pci_routing (int ioapic, int pin, int irq, int triggering, int p
        return 0;
 }
 
-#endif /* CONFIG_ACPI */
 
+int acpi_get_override_irq(int bus_irq, int *trigger, int *polarity)
+{
+       int i;
+
+       if (skip_ioapic_setup)
+               return -1;
+
+       for (i = 0; i < mp_irq_entries; i++)
+               if (mp_irqs[i].mpc_irqtype == mp_INT &&
+                   mp_irqs[i].mpc_srcbusirq == bus_irq)
+                       break;
+       if (i >= mp_irq_entries)
+               return -1;
+
+       *trigger = irq_trigger(i);
+       *polarity = irq_polarity(i);
+       return 0;
+}
+
+#endif /* CONFIG_ACPI */
 
 /*
  * This function currently is only a helper for the i386 smp boot process where
@@ -2260,3 +2279,4 @@ void __init setup_ioapic_dest(void)
        }
 }
 #endif
+
index 3db3611933d89971d82a05942fecda6f898a7cb3..0c467644589c728e2a25ba10aaa17fc682a6bb6c 100644 (file)
@@ -58,7 +58,7 @@ const int kretprobe_blacklist_size = ARRAY_SIZE(kretprobe_blacklist);
 /*
  * returns non-zero if opcode modifies the interrupt flag.
  */
-static __always_inline int is_IF_modifier(kprobe_opcode_t *insn)
+static int __kprobes is_IF_modifier(kprobe_opcode_t *insn)
 {
        switch (*insn) {
        case 0xfa:              /* cli */
index 600fd404e4401b0901f3cba7fb80ef69aa518cbd..80ca72e5ac29f4fc9e3f41da4d428f31ea658896 100644 (file)
@@ -25,6 +25,7 @@
 
 #include <asm/smp.h>
 #include <asm/nmi.h>
+#include <asm/timer.h>
 
 #include "mach_traps.h"
 
@@ -83,7 +84,7 @@ static int __init check_nmi_watchdog(void)
 
        prev_nmi_count = kmalloc(NR_CPUS * sizeof(int), GFP_KERNEL);
        if (!prev_nmi_count)
-               return -1;
+               goto error;
 
        printk(KERN_INFO "Testing NMI watchdog ... ");
 
@@ -105,7 +106,8 @@ static int __init check_nmi_watchdog(void)
                if (!per_cpu(wd_enabled, cpu))
                        continue;
                if (nmi_count(cpu) - prev_nmi_count[cpu] <= 5) {
-                       printk("CPU#%d: NMI appears to be stuck (%d->%d)!\n",
+                       printk(KERN_WARNING "WARNING: CPU#%d: NMI "
+                               "appears to be stuck (%d->%d)!\n",
                                cpu,
                                prev_nmi_count[cpu],
                                nmi_count(cpu));
@@ -117,7 +119,7 @@ static int __init check_nmi_watchdog(void)
        if (!atomic_read(&nmi_active)) {
                kfree(prev_nmi_count);
                atomic_set(&nmi_active, -1);
-               return -1;
+               goto error;
        }
        printk("OK.\n");
 
@@ -128,6 +130,10 @@ static int __init check_nmi_watchdog(void)
 
        kfree(prev_nmi_count);
        return 0;
+error:
+       timer_ack = !cpu_has_tsc;
+
+       return -1;
 }
 /* This needs to happen later in boot so counters are working */
 late_initcall(check_nmi_watchdog);
index a576fd740062d3a7190f2ae5e5566c8baf2400c7..4253c4e8849cd3abb29c519dc2d4d36d6b6627c3 100644 (file)
@@ -109,7 +109,8 @@ int __init check_nmi_watchdog (void)
                if (!per_cpu(wd_enabled, cpu))
                        continue;
                if (cpu_pda(cpu)->__nmi_count - counts[cpu] <= 5) {
-                       printk("CPU#%d: NMI appears to be stuck (%d->%d)!\n",
+                       printk(KERN_WARNING "WARNING: CPU#%d: NMI "
+                              "appears to be stuck (%d->%d)!\n",
                               cpu,
                               counts[cpu],
                               cpu_pda(cpu)->__nmi_count);
index 6a80d67c212183eae38e3f15577d0621a78a489b..f5000799f8efe4815caff23625eeee66c8d7c0bf 100644 (file)
@@ -465,8 +465,8 @@ struct pv_mmu_ops pv_mmu_ops = {
 };
 
 EXPORT_SYMBOL_GPL(pv_time_ops);
-EXPORT_SYMBOL_GPL(pv_cpu_ops);
-EXPORT_SYMBOL_GPL(pv_mmu_ops);
+EXPORT_SYMBOL    (pv_cpu_ops);
+EXPORT_SYMBOL    (pv_mmu_ops);
 EXPORT_SYMBOL_GPL(pv_apic_ops);
 EXPORT_SYMBOL_GPL(pv_info);
 EXPORT_SYMBOL    (pv_irq_ops);
index aa805b11b24fe627d0677cdce90c11ba7afbb4d6..5552d23d23c27558ec32f64930f14f6870181ba5 100644 (file)
@@ -12,7 +12,7 @@
 #include <asm/gart.h>
 #include <asm/calgary.h>
 
-int iommu_merge __read_mostly = 1;
+int iommu_merge __read_mostly = 0;
 EXPORT_SYMBOL(iommu_merge);
 
 dma_addr_t bad_dma_address __read_mostly;
index 9e2269d00918c13948b03b92532498015e95460b..bb1a0f889c5ebaed7a42864a9a98ea86e9848e52 100644 (file)
@@ -11,6 +11,7 @@
 #include <linux/reboot.h>
 #include <asm/uaccess.h>
 #include <asm/apic.h>
+#include <asm/hpet.h>
 #include <asm/desc.h>
 #include "mach_reboot.h"
 #include <asm/reboot_fixups.h>
@@ -326,6 +327,9 @@ static void native_machine_shutdown(void)
 #ifdef CONFIG_X86_IO_APIC
        disable_IO_APIC();
 #endif
+#ifdef CONFIG_HPET_TIMER
+       hpet_disable();
+#endif
 }
 
 void __attribute__((weak)) mach_reboot_fixups(void)
index 71b13c5f5817dd0d1ffbe2285fe003c11e6ea088..53620a92a8fdd74cc2885d28d65eaa7eb34d89d1 100644 (file)
@@ -17,6 +17,7 @@
 #include <asm/pgtable.h>
 #include <asm/tlbflush.h>
 #include <asm/apic.h>
+#include <asm/hpet.h>
 #include <asm/gart.h>
 
 /*
@@ -113,6 +114,9 @@ void machine_shutdown(void)
 
        disable_IO_APIC();
 
+#ifdef CONFIG_HPET_TIMER
+       hpet_disable();
+#endif
        local_irq_restore(flags);
 
        pci_iommu_shutdown();
index 8caa0b777466218fcb04d4a706ff155588200942..7e16d675eb850530a72796adba4aca48806d3001 100644 (file)
@@ -33,7 +33,7 @@
 
 static struct i386_cpu cpu_devices[NR_CPUS];
 
-int arch_register_cpu(int num)
+int __cpuinit arch_register_cpu(int num)
 {
        /*
         * CPU0 cannot be offlined due to several
@@ -53,7 +53,8 @@ int arch_register_cpu(int num)
 }
 
 #ifdef CONFIG_HOTPLUG_CPU
-void arch_unregister_cpu(int num) {
+void arch_unregister_cpu(int num)
+{
        return unregister_cpu(&cpu_devices[num].cpu);
 }
 EXPORT_SYMBOL(arch_register_cpu);
index 298d13ed3ab34601cf0d025d827be05c961e7f92..ef601026259775ae1f426b63f8808257615a37ef 100644 (file)
@@ -283,6 +283,11 @@ void dump_stack(void)
 {
        unsigned long stack;
 
+       printk("Pid: %d, comm: %.20s %s %s %.*s\n",
+               current->pid, current->comm, print_tainted(),
+               init_utsname()->release,
+               (int)strcspn(init_utsname()->version, " "),
+               init_utsname()->version);
        show_trace(current, NULL, &stack);
 }
 
@@ -828,6 +833,8 @@ fastcall void __kprobes do_debug(struct pt_regs * regs, long error_code)
        unsigned int condition;
        struct task_struct *tsk = current;
 
+       trace_hardirqs_fixup();
+
        get_debugreg(condition, 6);
 
        if (notify_die(DIE_DEBUG, "debug", regs, condition, error_code,
index 4a6bd4965f567d39c0fc8c80fb8aa5f095be3a80..d11525ad81b40676cd99736cf729329993b580ab 100644 (file)
@@ -31,6 +31,7 @@
 #include <linux/uaccess.h>
 #include <linux/bug.h>
 #include <linux/kdebug.h>
+#include <linux/utsname.h>
 
 #if defined(CONFIG_EDAC)
 #include <linux/edac.h>
@@ -400,6 +401,12 @@ void show_stack(struct task_struct *tsk, unsigned long * rsp)
 void dump_stack(void)
 {
        unsigned long dummy;
+
+       printk("Pid: %d, comm: %.20s %s %s %.*s\n",
+               current->pid, current->comm, print_tainted(),
+               init_utsname()->release,
+               (int)strcspn(init_utsname()->version, " "),
+               init_utsname()->version);
        show_trace(NULL, NULL, &dummy);
 }
 
@@ -846,6 +853,8 @@ asmlinkage void __kprobes do_debug(struct pt_regs * regs,
        struct task_struct *tsk = current;
        siginfo_t info;
 
+       trace_hardirqs_fixup();
+
        get_debugreg(condition, 6);
 
        if (notify_die(DIE_DEBUG, "debug", regs, condition, error_code,
index c4dffbeea5e126e92ac891440e48a7eef3932adb..19626ace0f50732cc5f02eaed636478017cf2b8b 100644 (file)
@@ -2,6 +2,7 @@ config LGUEST_GUEST
        bool "Lguest guest support"
        select PARAVIRT
        depends on !X86_PAE
+       depends on !(X86_VISWS || X86_VOYAGER)
        select VIRTIO
        select VIRTIO_RING
        select VIRTIO_CONSOLE
index a7308b2cd058291bbde282fd0e544ff469c6d417..0f9c8c890658043773018ad32e8786953dae8c79 100644 (file)
@@ -345,7 +345,7 @@ static void __init find_early_table_space(unsigned long end)
 /* Setup the direct mapping of the physical memory at PAGE_OFFSET.
    This runs before bootmem is initialized and gets pages directly from the 
    physical memory. To access them they are temporarily mapped. */
-void __meminit init_memory_mapping(unsigned long start, unsigned long end)
+void __init_refok init_memory_mapping(unsigned long start, unsigned long end)
 { 
        unsigned long next; 
 
index 7e35078673a4a43f83fb70143cfb131eeb1e88c9..0234f2831bf371194f69779753ce2fb017570984 100644 (file)
@@ -13,7 +13,7 @@ static int __devinit can_skip_ioresource_align(const struct dmi_system_id *d)
        return 0;
 }
 
-static struct dmi_system_id acpi_pciprobe_dmi_table[] = {
+static struct dmi_system_id acpi_pciprobe_dmi_table[] __devinitdata = {
 /*
  * Systems where PCI IO resource ISA alignment can be skipped
  * when the ISA enable bit in the bridge control is not set
index f4386990b150c442f67cb8d463ecee6241448d83..862746390666daa6da34942889321d6eebcbe9b2 100644 (file)
@@ -315,6 +315,22 @@ static struct dmi_system_id __devinitdata pciprobe_dmi_table[] = {
                },
        },
 #endif
+       {
+               .callback = set_bf_sort,
+               .ident = "HP ProLiant DL385 G2",
+               .matches = {
+                       DMI_MATCH(DMI_SYS_VENDOR, "HP"),
+                       DMI_MATCH(DMI_PRODUCT_NAME, "ProLiant DL385 G2"),
+               },
+       },
+       {
+               .callback = set_bf_sort,
+               .ident = "HP ProLiant DL585 G2",
+               .matches = {
+                       DMI_MATCH(DMI_SYS_VENDOR, "HP"),
+                       DMI_MATCH(DMI_PRODUCT_NAME, "ProLiant DL585 G2"),
+               },
+       },
        {}
 };
 
index 94c39aaf695facf3d3937633306bb7e5b17d41fd..b6af3ea43c7308b3e513272ccb5c9c0f6c224717 100644 (file)
@@ -1131,7 +1131,7 @@ asmlinkage void __init xen_start_kernel(void)
        if (!xen_start_info)
                return;
 
-       BUG_ON(memcmp(xen_start_info->magic, "xen-3.0", 7) != 0);
+       BUG_ON(memcmp(xen_start_info->magic, "xen-3", 5) != 0);
 
        /* Install Xen paravirt ops */
        pv_info = xen_info;
index b2e32f9d0071062adbf033d4af1e10c2ce14a2d8..0ac6c5dc49ba0216276c605f269a7bc3ea01efda 100644 (file)
@@ -244,6 +244,8 @@ pte_t xen_make_pte(unsigned long long pte)
        if (pte & 1)
                pte = phys_to_machine(XPADDR(pte)).maddr;
 
+       pte &= ~_PAGE_PCD;
+
        return (pte_t){ pte, pte >> 32 };
 }
 
@@ -291,6 +293,8 @@ pte_t xen_make_pte(unsigned long pte)
        if (pte & _PAGE_PRESENT)
                pte = phys_to_machine(XPADDR(pte)).maddr;
 
+       pte &= ~_PAGE_PCD;
+
        return (pte_t){ pte };
 }
 
index b61fb36674e7f7e571aac77bb534165aa750d875..f21b9b0899a8e3ae277d08256aab7207940f0aa2 100644 (file)
@@ -393,11 +393,11 @@ static int iss_net_rx(struct net_device *dev)
        if (pkt_len > 0) {
                skb_trim(skb, pkt_len);
                skb->protocol = lp->tp.protocol(skb);
-       //      netif_rx(skb);
-               netif_rx_ni(skb);
 
                lp->stats.rx_bytes += skb->len;
                lp->stats.rx_packets++;
+       //      netif_rx(skb);
+               netif_rx_ni(skb);
                return pkt_len;
        }
        kfree_skb(skb);
index d00ac3993c188964278bbba6bb6b3bc7827b3544..498a0a54a6aa664f27edce4a32d2fb2d37f4c110 100644 (file)
@@ -202,6 +202,7 @@ static void blk_remove_tree(struct dentry *dir)
 static struct dentry *blk_create_tree(const char *blk_name)
 {
        struct dentry *dir = NULL;
+       int created = 0;
 
        mutex_lock(&blk_tree_mutex);
 
@@ -209,13 +210,17 @@ static struct dentry *blk_create_tree(const char *blk_name)
                blk_tree_root = debugfs_create_dir("block", NULL);
                if (!blk_tree_root)
                        goto err;
+               created = 1;
        }
 
        dir = debugfs_create_dir(blk_name, blk_tree_root);
        if (dir)
                root_users++;
-       else
-               blk_remove_root();
+       else {
+               /* Delete root only if we created it */
+               if (created)
+                       blk_remove_root();
+       }
 
 err:
        mutex_unlock(&blk_tree_mutex);
index e609996f2e766d7009d5984aa8b4fbc29c813bbf..f2ac914160d1a96e7258bd86949caef3dcdec6a3 100644 (file)
@@ -715,6 +715,7 @@ struct gendisk *alloc_disk_node(int minors, int node_id)
                        disk->part = kmalloc_node(size,
                                GFP_KERNEL | __GFP_ZERO, node_id);
                        if (!disk->part) {
+                               free_disk_stats(disk);
                                kfree(disk);
                                return NULL;
                        }
index 3b927be038501f178577da45ebb447c6dc27b90f..8b919940b2abdb37119cd9927b6f45dbec66aa31 100644 (file)
@@ -4080,23 +4080,7 @@ static ssize_t queue_max_hw_sectors_show(struct request_queue *q, char *page)
        return queue_var_show(max_hw_sectors_kb, (page));
 }
 
-static ssize_t queue_max_segments_show(struct request_queue *q, char *page)
-{
-       return queue_var_show(q->max_phys_segments, page);
-}
-
-static ssize_t queue_max_segments_store(struct request_queue *q,
-                                       const char *page, size_t count)
-{
-       unsigned long segments;
-       ssize_t ret = queue_var_store(&segments, page, count);
 
-       spin_lock_irq(q->queue_lock);
-       q->max_phys_segments = segments;
-       spin_unlock_irq(q->queue_lock);
-
-       return ret;
-}
 static struct queue_sysfs_entry queue_requests_entry = {
        .attr = {.name = "nr_requests", .mode = S_IRUGO | S_IWUSR },
        .show = queue_requests_show,
@@ -4120,12 +4104,6 @@ static struct queue_sysfs_entry queue_max_hw_sectors_entry = {
        .show = queue_max_hw_sectors_show,
 };
 
-static struct queue_sysfs_entry queue_max_segments_entry = {
-       .attr = {.name = "max_segments", .mode = S_IRUGO | S_IWUSR },
-       .show = queue_max_segments_show,
-       .store = queue_max_segments_store,
-};
-
 static struct queue_sysfs_entry queue_iosched_entry = {
        .attr = {.name = "scheduler", .mode = S_IRUGO | S_IWUSR },
        .show = elv_iosched_show,
@@ -4137,7 +4115,6 @@ static struct attribute *default_attrs[] = {
        &queue_ra_entry.attr,
        &queue_max_hw_sectors_entry.attr,
        &queue_max_sectors_entry.attr,
-       &queue_max_segments_entry.attr,
        &queue_iosched_entry.attr,
        NULL,
 };
index 8ff8c2656d9c492902a5608436c145965f52723f..8383282de1ddc39422cd227b7a800a095ad14f67 100644 (file)
@@ -95,6 +95,9 @@ static void crypto_remove_spawn(struct crypto_spawn *spawn,
                return;
 
        inst->alg.cra_flags |= CRYPTO_ALG_DEAD;
+       if (hlist_unhashed(&inst->list))
+               return;
+
        if (!tmpl || !crypto_tmpl_get(tmpl))
                return;
 
@@ -335,9 +338,6 @@ int crypto_register_instance(struct crypto_template *tmpl,
        LIST_HEAD(list);
        int err = -EINVAL;
 
-       if (inst->alg.cra_destroy)
-               goto err;
-
        err = crypto_check_alg(&inst->alg);
        if (err)
                goto err;
index 0b29a6ae673d257baba2eb5b1a17460e28204f4a..126a529b496d5df32959499ff22739767eca52a3 100644 (file)
@@ -84,8 +84,8 @@ static int crypto_authenc_hash(struct aead_request *req)
                .tfm = auth,
        };
        u8 *hash = aead_request_ctx(req);
-       struct scatterlist *dst;
-       unsigned int cryptlen;
+       struct scatterlist *dst = req->dst;
+       unsigned int cryptlen = req->cryptlen;
        int err;
 
        hash = (u8 *)ALIGN((unsigned long)hash + crypto_hash_alignmask(auth), 
@@ -100,8 +100,6 @@ static int crypto_authenc_hash(struct aead_request *req)
        if (err)
                goto auth_unlock;
 
-       cryptlen = req->cryptlen;
-       dst = req->dst;
        err = crypto_hash_update(&desc, dst, cryptlen);
        if (err)
                goto auth_unlock;
@@ -159,8 +157,8 @@ static int crypto_authenc_verify(struct aead_request *req)
        };
        u8 *ohash = aead_request_ctx(req);
        u8 *ihash;
-       struct scatterlist *src;
-       unsigned int cryptlen;
+       struct scatterlist *src = req->src;
+       unsigned int cryptlen = req->cryptlen;
        unsigned int authsize;
        int err;
 
@@ -177,8 +175,6 @@ static int crypto_authenc_verify(struct aead_request *req)
        if (err)
                goto auth_unlock;
 
-       cryptlen = req->cryptlen;
-       src = req->src;
        err = crypto_hash_update(&desc, src, cryptlen);
        if (err)
                goto auth_unlock;
index d161949fdb94d28eb318a70cfae495ac2a742434..a32cb68bbc604acd467ad26ebdc4519d550f9de2 100644 (file)
@@ -51,7 +51,7 @@
 #define ROUNDS 16
 
 struct fcrypt_ctx {
-       u32 sched[ROUNDS];
+       __be32 sched[ROUNDS];
 };
 
 /* Rotate right two 32 bit numbers as a 56 bit number */
@@ -73,8 +73,8 @@ do {                                                          \
  * /afs/transarc.com/public/afsps/afs.rel31b.export-src/rxkad/sboxes.h
  */
 #undef Z
-#define Z(x) __constant_be32_to_cpu(x << 3)
-static const u32 sbox0[256] = {
+#define Z(x) __constant_cpu_to_be32(x << 3)
+static const __be32 sbox0[256] = {
        Z(0xea), Z(0x7f), Z(0xb2), Z(0x64), Z(0x9d), Z(0xb0), Z(0xd9), Z(0x11),
        Z(0xcd), Z(0x86), Z(0x86), Z(0x91), Z(0x0a), Z(0xb2), Z(0x93), Z(0x06),
        Z(0x0e), Z(0x06), Z(0xd2), Z(0x65), Z(0x73), Z(0xc5), Z(0x28), Z(0x60),
@@ -110,8 +110,8 @@ static const u32 sbox0[256] = {
 };
 
 #undef Z
-#define Z(x) __constant_be32_to_cpu((x << 27) | (x >> 5))
-static const u32 sbox1[256] = {
+#define Z(x) __constant_cpu_to_be32((x << 27) | (x >> 5))
+static const __be32 sbox1[256] = {
        Z(0x77), Z(0x14), Z(0xa6), Z(0xfe), Z(0xb2), Z(0x5e), Z(0x8c), Z(0x3e),
        Z(0x67), Z(0x6c), Z(0xa1), Z(0x0d), Z(0xc2), Z(0xa2), Z(0xc1), Z(0x85),
        Z(0x6c), Z(0x7b), Z(0x67), Z(0xc6), Z(0x23), Z(0xe3), Z(0xf2), Z(0x89),
@@ -147,8 +147,8 @@ static const u32 sbox1[256] = {
 };
 
 #undef Z
-#define Z(x) __constant_be32_to_cpu(x << 11)
-static const u32 sbox2[256] = {
+#define Z(x) __constant_cpu_to_be32(x << 11)
+static const __be32 sbox2[256] = {
        Z(0xf0), Z(0x37), Z(0x24), Z(0x53), Z(0x2a), Z(0x03), Z(0x83), Z(0x86),
        Z(0xd1), Z(0xec), Z(0x50), Z(0xf0), Z(0x42), Z(0x78), Z(0x2f), Z(0x6d),
        Z(0xbf), Z(0x80), Z(0x87), Z(0x27), Z(0x95), Z(0xe2), Z(0xc5), Z(0x5d),
@@ -184,8 +184,8 @@ static const u32 sbox2[256] = {
 };
 
 #undef Z
-#define Z(x) __constant_be32_to_cpu(x << 19)
-static const u32 sbox3[256] = {
+#define Z(x) __constant_cpu_to_be32(x << 19)
+static const __be32 sbox3[256] = {
        Z(0xa9), Z(0x2a), Z(0x48), Z(0x51), Z(0x84), Z(0x7e), Z(0x49), Z(0xe2),
        Z(0xb5), Z(0xb7), Z(0x42), Z(0x33), Z(0x7d), Z(0x5d), Z(0xa6), Z(0x12),
        Z(0x44), Z(0x48), Z(0x6d), Z(0x28), Z(0xaa), Z(0x20), Z(0x6d), Z(0x57),
@@ -225,7 +225,7 @@ static const u32 sbox3[256] = {
  */
 #define F_ENCRYPT(R, L, sched)                                         \
 do {                                                                   \
-       union lc4 { u32 l; u8 c[4]; } u;                                \
+       union lc4 { __be32 l; u8 c[4]; } u;                             \
        u.l = sched ^ R;                                                \
        L ^= sbox0[u.c[0]] ^ sbox1[u.c[1]] ^ sbox2[u.c[2]] ^ sbox3[u.c[3]]; \
 } while(0)
@@ -237,7 +237,7 @@ static void fcrypt_encrypt(struct crypto_tfm *tfm, u8 *dst, const u8 *src)
 {
        const struct fcrypt_ctx *ctx = crypto_tfm_ctx(tfm);
        struct {
-               u32 l, r;
+               __be32 l, r;
        } X;
 
        memcpy(&X, src, sizeof(X));
@@ -269,7 +269,7 @@ static void fcrypt_decrypt(struct crypto_tfm *tfm, u8 *dst, const u8 *src)
 {
        const struct fcrypt_ctx *ctx = crypto_tfm_ctx(tfm);
        struct {
-               u32 l, r;
+               __be32 l, r;
        } X;
 
        memcpy(&X, src, sizeof(X));
@@ -328,22 +328,22 @@ static int fcrypt_setkey(struct crypto_tfm *tfm, const u8 *key, unsigned int key
        k |= (*key) >> 1;
 
        /* Use lower 32 bits for schedule, rotate by 11 each round (16 times) */
-       ctx->sched[0x0] = be32_to_cpu(k); ror56_64(k, 11);
-       ctx->sched[0x1] = be32_to_cpu(k); ror56_64(k, 11);
-       ctx->sched[0x2] = be32_to_cpu(k); ror56_64(k, 11);
-       ctx->sched[0x3] = be32_to_cpu(k); ror56_64(k, 11);
-       ctx->sched[0x4] = be32_to_cpu(k); ror56_64(k, 11);
-       ctx->sched[0x5] = be32_to_cpu(k); ror56_64(k, 11);
-       ctx->sched[0x6] = be32_to_cpu(k); ror56_64(k, 11);
-       ctx->sched[0x7] = be32_to_cpu(k); ror56_64(k, 11);
-       ctx->sched[0x8] = be32_to_cpu(k); ror56_64(k, 11);
-       ctx->sched[0x9] = be32_to_cpu(k); ror56_64(k, 11);
-       ctx->sched[0xa] = be32_to_cpu(k); ror56_64(k, 11);
-       ctx->sched[0xb] = be32_to_cpu(k); ror56_64(k, 11);
-       ctx->sched[0xc] = be32_to_cpu(k); ror56_64(k, 11);
-       ctx->sched[0xd] = be32_to_cpu(k); ror56_64(k, 11);
-       ctx->sched[0xe] = be32_to_cpu(k); ror56_64(k, 11);
-       ctx->sched[0xf] = be32_to_cpu(k);
+       ctx->sched[0x0] = cpu_to_be32(k); ror56_64(k, 11);
+       ctx->sched[0x1] = cpu_to_be32(k); ror56_64(k, 11);
+       ctx->sched[0x2] = cpu_to_be32(k); ror56_64(k, 11);
+       ctx->sched[0x3] = cpu_to_be32(k); ror56_64(k, 11);
+       ctx->sched[0x4] = cpu_to_be32(k); ror56_64(k, 11);
+       ctx->sched[0x5] = cpu_to_be32(k); ror56_64(k, 11);
+       ctx->sched[0x6] = cpu_to_be32(k); ror56_64(k, 11);
+       ctx->sched[0x7] = cpu_to_be32(k); ror56_64(k, 11);
+       ctx->sched[0x8] = cpu_to_be32(k); ror56_64(k, 11);
+       ctx->sched[0x9] = cpu_to_be32(k); ror56_64(k, 11);
+       ctx->sched[0xa] = cpu_to_be32(k); ror56_64(k, 11);
+       ctx->sched[0xb] = cpu_to_be32(k); ror56_64(k, 11);
+       ctx->sched[0xc] = cpu_to_be32(k); ror56_64(k, 11);
+       ctx->sched[0xd] = cpu_to_be32(k); ror56_64(k, 11);
+       ctx->sched[0xe] = cpu_to_be32(k); ror56_64(k, 11);
+       ctx->sched[0xf] = cpu_to_be32(k);
 
        return 0;
 #else
@@ -369,22 +369,22 @@ static int fcrypt_setkey(struct crypto_tfm *tfm, const u8 *key, unsigned int key
        lo |= (*key) >> 1;
 
        /* Use lower 32 bits for schedule, rotate by 11 each round (16 times) */
-       ctx->sched[0x0] = be32_to_cpu(lo); ror56(hi, lo, 11);
-       ctx->sched[0x1] = be32_to_cpu(lo); ror56(hi, lo, 11);
-       ctx->sched[0x2] = be32_to_cpu(lo); ror56(hi, lo, 11);
-       ctx->sched[0x3] = be32_to_cpu(lo); ror56(hi, lo, 11);
-       ctx->sched[0x4] = be32_to_cpu(lo); ror56(hi, lo, 11);
-       ctx->sched[0x5] = be32_to_cpu(lo); ror56(hi, lo, 11);
-       ctx->sched[0x6] = be32_to_cpu(lo); ror56(hi, lo, 11);
-       ctx->sched[0x7] = be32_to_cpu(lo); ror56(hi, lo, 11);
-       ctx->sched[0x8] = be32_to_cpu(lo); ror56(hi, lo, 11);
-       ctx->sched[0x9] = be32_to_cpu(lo); ror56(hi, lo, 11);
-       ctx->sched[0xa] = be32_to_cpu(lo); ror56(hi, lo, 11);
-       ctx->sched[0xb] = be32_to_cpu(lo); ror56(hi, lo, 11);
-       ctx->sched[0xc] = be32_to_cpu(lo); ror56(hi, lo, 11);
-       ctx->sched[0xd] = be32_to_cpu(lo); ror56(hi, lo, 11);
-       ctx->sched[0xe] = be32_to_cpu(lo); ror56(hi, lo, 11);
-       ctx->sched[0xf] = be32_to_cpu(lo);
+       ctx->sched[0x0] = cpu_to_be32(lo); ror56(hi, lo, 11);
+       ctx->sched[0x1] = cpu_to_be32(lo); ror56(hi, lo, 11);
+       ctx->sched[0x2] = cpu_to_be32(lo); ror56(hi, lo, 11);
+       ctx->sched[0x3] = cpu_to_be32(lo); ror56(hi, lo, 11);
+       ctx->sched[0x4] = cpu_to_be32(lo); ror56(hi, lo, 11);
+       ctx->sched[0x5] = cpu_to_be32(lo); ror56(hi, lo, 11);
+       ctx->sched[0x6] = cpu_to_be32(lo); ror56(hi, lo, 11);
+       ctx->sched[0x7] = cpu_to_be32(lo); ror56(hi, lo, 11);
+       ctx->sched[0x8] = cpu_to_be32(lo); ror56(hi, lo, 11);
+       ctx->sched[0x9] = cpu_to_be32(lo); ror56(hi, lo, 11);
+       ctx->sched[0xa] = cpu_to_be32(lo); ror56(hi, lo, 11);
+       ctx->sched[0xb] = cpu_to_be32(lo); ror56(hi, lo, 11);
+       ctx->sched[0xc] = cpu_to_be32(lo); ror56(hi, lo, 11);
+       ctx->sched[0xd] = cpu_to_be32(lo); ror56(hi, lo, 11);
+       ctx->sched[0xe] = cpu_to_be32(lo); ror56(hi, lo, 11);
+       ctx->sched[0xf] = cpu_to_be32(lo);
        return 0;
 #endif
 }
index 087a7028ae84ece99cd42676a585c43802fa573c..b9f923ef173d8fc283e2122bc600e59039f0f396 100644 (file)
@@ -50,7 +50,6 @@ config ACPI_SLEEP
 config ACPI_PROCFS
        bool "Deprecated /proc/acpi files"
        depends on PROC_FS
-       default y
        ---help---
          For backwards compatibility, this option allows
          deprecated /proc/acpi/ files to exist, even when
@@ -61,7 +60,6 @@ config ACPI_PROCFS
          /proc/acpi/info (/sys/modules/acpi/parameters/acpica_version)
          /proc/acpi/dsdt (/sys/firmware/acpi/tables/DSDT)
          /proc/acpi/fadt (/sys/firmware/acpi/tables/FACP)
-         /proc/acpi/battery (/sys/class/power_supply)
          /proc/acpi/debug_layer (/sys/module/acpi/parameters/debug_layer)
          /proc/acpi/debug_level (/sys/module/acpi/parameters/debug_level)
 
@@ -69,7 +67,21 @@ config ACPI_PROCFS
          and functions which do not yet exist in /sys.
 
          Say N to delete /proc/acpi/ files that have moved to /sys/
-
+config ACPI_PROCFS_POWER
+       bool "Deprecated power /proc/acpi folders"
+       depends on PROC_FS
+       default y
+       ---help---
+         For backwards compatibility, this option allows
+          deprecated power /proc/acpi/ folders to exist, even when
+          they have been replaced by functions in /sys.
+          The deprecated folders (and their replacements) include:
+         /proc/acpi/battery/* (/sys/class/power_supply/*)
+         /proc/acpi/ac_adapter/* (sys/class/power_supply/*)
+         This option has no effect on /proc/acpi/ folders
+         and functions, which do not yet exist in /sys
+
+         Say N to delete power /proc/acpi/ folders that have moved to /sys/
 config ACPI_PROC_EVENT
        bool "Deprecated /proc/acpi/event support"
        depends on PROC_FS
index 54e3ab0e5fc011e3a807eec08304a2603251fbbb..456446f9007780eac345479b5fc9d173ddfdbe7c 100644 (file)
@@ -58,6 +58,6 @@ obj-$(CONFIG_ACPI_NUMA)               += numa.o
 obj-$(CONFIG_ACPI_ASUS)                += asus_acpi.o
 obj-$(CONFIG_ACPI_TOSHIBA)     += toshiba_acpi.o
 obj-$(CONFIG_ACPI_HOTPLUG_MEMORY)      += acpi_memhotplug.o
-obj-y                          += cm_sbs.o
+obj-$(CONFIG_ACPI_PROCFS_POWER)        += cm_sbs.o
 obj-$(CONFIG_ACPI_SBS)         += sbs.o
 obj-$(CONFIG_ACPI_SBS)         += sbshc.o
index 30238f6ff232218bc46c34450d04d3d0f7ddc12c..76ed4f52bebd6df84be95abc388fa45a8d5e35d0 100644 (file)
@@ -27,7 +27,7 @@
 #include <linux/module.h>
 #include <linux/init.h>
 #include <linux/types.h>
-#ifdef CONFIG_ACPI_PROCFS
+#ifdef CONFIG_ACPI_PROCFS_POWER
 #include <linux/proc_fs.h>
 #include <linux/seq_file.h>
 #endif
@@ -51,7 +51,7 @@ MODULE_AUTHOR("Paul Diefenbaugh");
 MODULE_DESCRIPTION("ACPI AC Adapter Driver");
 MODULE_LICENSE("GPL");
 
-#ifdef CONFIG_ACPI_PROCFS
+#ifdef CONFIG_ACPI_PROCFS_POWER
 extern struct proc_dir_entry *acpi_lock_ac_dir(void);
 extern void *acpi_unlock_ac_dir(struct proc_dir_entry *acpi_ac_dir);
 static int acpi_ac_open_fs(struct inode *inode, struct file *file);
@@ -86,7 +86,7 @@ struct acpi_ac {
 
 #define to_acpi_ac(x) container_of(x, struct acpi_ac, charger);
 
-#ifdef CONFIG_ACPI_PROCFS
+#ifdef CONFIG_ACPI_PROCFS_POWER
 static const struct file_operations acpi_ac_fops = {
        .open = acpi_ac_open_fs,
        .read = seq_read,
@@ -136,7 +136,7 @@ static int acpi_ac_get_state(struct acpi_ac *ac)
        return 0;
 }
 
-#ifdef CONFIG_ACPI_PROCFS
+#ifdef CONFIG_ACPI_PROCFS_POWER
 /* --------------------------------------------------------------------------
                               FS Interface (/proc)
    -------------------------------------------------------------------------- */
@@ -275,7 +275,7 @@ static int acpi_ac_add(struct acpi_device *device)
        if (result)
                goto end;
 
-#ifdef CONFIG_ACPI_PROCFS
+#ifdef CONFIG_ACPI_PROCFS_POWER
        result = acpi_ac_add_fs(device);
 #endif
        if (result)
@@ -300,7 +300,7 @@ static int acpi_ac_add(struct acpi_device *device)
 
       end:
        if (result) {
-#ifdef CONFIG_ACPI_PROCFS
+#ifdef CONFIG_ACPI_PROCFS_POWER
                acpi_ac_remove_fs(device);
 #endif
                kfree(ac);
@@ -339,7 +339,7 @@ static int acpi_ac_remove(struct acpi_device *device, int type)
                                            ACPI_ALL_NOTIFY, acpi_ac_notify);
        if (ac->charger.dev)
                power_supply_unregister(&ac->charger);
-#ifdef CONFIG_ACPI_PROCFS
+#ifdef CONFIG_ACPI_PROCFS_POWER
        acpi_ac_remove_fs(device);
 #endif
 
@@ -355,7 +355,7 @@ static int __init acpi_ac_init(void)
        if (acpi_disabled)
                return -ENODEV;
 
-#ifdef CONFIG_ACPI_PROCFS
+#ifdef CONFIG_ACPI_PROCFS_POWER
        acpi_ac_dir = acpi_lock_ac_dir();
        if (!acpi_ac_dir)
                return -ENODEV;
@@ -363,7 +363,7 @@ static int __init acpi_ac_init(void)
 
        result = acpi_bus_register_driver(&acpi_ac_driver);
        if (result < 0) {
-#ifdef CONFIG_ACPI_PROCFS
+#ifdef CONFIG_ACPI_PROCFS_POWER
                acpi_unlock_ac_dir(acpi_ac_dir);
 #endif
                return -ENODEV;
@@ -377,7 +377,7 @@ static void __exit acpi_ac_exit(void)
 
        acpi_bus_unregister_driver(&acpi_ac_driver);
 
-#ifdef CONFIG_ACPI_PROCFS
+#ifdef CONFIG_ACPI_PROCFS_POWER
        acpi_unlock_ac_dir(acpi_ac_dir);
 #endif
 
index 192c244f61902b1e510c41780cd3655d9c7a1756..8f7505d304b58790c077e4bc257380eccf523117 100644 (file)
@@ -31,7 +31,7 @@
 #include <linux/types.h>
 #include <linux/jiffies.h>
 
-#ifdef CONFIG_ACPI_PROCFS
+#ifdef CONFIG_ACPI_PROCFS_POWER
 #include <linux/proc_fs.h>
 #include <linux/seq_file.h>
 #include <asm/uaccess.h>
@@ -63,7 +63,7 @@ static unsigned int cache_time = 1000;
 module_param(cache_time, uint, 0644);
 MODULE_PARM_DESC(cache_time, "cache time in milliseconds");
 
-#ifdef CONFIG_ACPI_PROCFS
+#ifdef CONFIG_ACPI_PROCFS_POWER
 extern struct proc_dir_entry *acpi_lock_battery_dir(void);
 extern void *acpi_unlock_battery_dir(struct proc_dir_entry *acpi_battery_dir);
 
@@ -125,7 +125,7 @@ static int acpi_battery_technology(struct acpi_battery *battery)
                return POWER_SUPPLY_TECHNOLOGY_NiMH;
        if (!strcasecmp("LION", battery->type))
                return POWER_SUPPLY_TECHNOLOGY_LION;
-       if (!strcasecmp("LI-ION", battery->type))
+       if (!strncasecmp("LI-ION", battery->type, 6))
                return POWER_SUPPLY_TECHNOLOGY_LION;
        if (!strcasecmp("LiP", battery->type))
                return POWER_SUPPLY_TECHNOLOGY_LIPO;
@@ -153,6 +153,8 @@ static int acpi_battery_get_property(struct power_supply *psy,
                        val->intval = POWER_SUPPLY_STATUS_CHARGING;
                else if (battery->state == 0)
                        val->intval = POWER_SUPPLY_STATUS_FULL;
+               else
+                       val->intval = POWER_SUPPLY_STATUS_UNKNOWN;
                break;
        case POWER_SUPPLY_PROP_PRESENT:
                val->intval = acpi_battery_present(battery);
@@ -221,7 +223,7 @@ static enum power_supply_property energy_battery_props[] = {
        POWER_SUPPLY_PROP_MANUFACTURER,
 };
 
-#ifdef CONFIG_ACPI_PROCFS
+#ifdef CONFIG_ACPI_PROCFS_POWER
 inline char *acpi_battery_units(struct acpi_battery *battery)
 {
        return (battery->power_unit)?"mA":"mW";
@@ -479,7 +481,7 @@ static int acpi_battery_update(struct acpi_battery *battery)
                               FS Interface (/proc)
    -------------------------------------------------------------------------- */
 
-#ifdef CONFIG_ACPI_PROCFS
+#ifdef CONFIG_ACPI_PROCFS_POWER
 static struct proc_dir_entry *acpi_battery_dir;
 
 static int acpi_battery_print_info(struct seq_file *seq, int result)
@@ -786,7 +788,7 @@ static int acpi_battery_add(struct acpi_device *device)
        acpi_driver_data(device) = battery;
        mutex_init(&battery->lock);
        acpi_battery_update(battery);
-#ifdef CONFIG_ACPI_PROCFS
+#ifdef CONFIG_ACPI_PROCFS_POWER
        result = acpi_battery_add_fs(device);
        if (result)
                goto end;
@@ -804,7 +806,7 @@ static int acpi_battery_add(struct acpi_device *device)
               device->status.battery_present ? "present" : "absent");
       end:
        if (result) {
-#ifdef CONFIG_ACPI_PROCFS
+#ifdef CONFIG_ACPI_PROCFS_POWER
                acpi_battery_remove_fs(device);
 #endif
                kfree(battery);
@@ -823,7 +825,7 @@ static int acpi_battery_remove(struct acpi_device *device, int type)
        status = acpi_remove_notify_handler(device->handle,
                                            ACPI_ALL_NOTIFY,
                                            acpi_battery_notify);
-#ifdef CONFIG_ACPI_PROCFS
+#ifdef CONFIG_ACPI_PROCFS_POWER
        acpi_battery_remove_fs(device);
 #endif
        sysfs_remove_battery(battery);
@@ -859,13 +861,13 @@ static int __init acpi_battery_init(void)
 {
        if (acpi_disabled)
                return -ENODEV;
-#ifdef CONFIG_ACPI_PROCFS
+#ifdef CONFIG_ACPI_PROCFS_POWER
        acpi_battery_dir = acpi_lock_battery_dir();
        if (!acpi_battery_dir)
                return -ENODEV;
 #endif
        if (acpi_bus_register_driver(&acpi_battery_driver) < 0) {
-#ifdef CONFIG_ACPI_PROCFS
+#ifdef CONFIG_ACPI_PROCFS_POWER
                acpi_unlock_battery_dir(acpi_battery_dir);
 #endif
                return -ENODEV;
@@ -876,7 +878,7 @@ static int __init acpi_battery_init(void)
 static void __exit acpi_battery_exit(void)
 {
        acpi_bus_unregister_driver(&acpi_battery_driver);
-#ifdef CONFIG_ACPI_PROCFS
+#ifdef CONFIG_ACPI_PROCFS_POWER
        acpi_unlock_battery_dir(acpi_battery_dir);
 #endif
 }
index a474ca2334d536e3cd411adf8799b8897c647f28..954ac8ce958a63c55a6740a4dcc1bbab5e4071bc 100644 (file)
@@ -137,6 +137,71 @@ acpi_ds_build_internal_object(struct acpi_walk_state *walk_state,
                                return_ACPI_STATUS(status);
                        }
                }
+
+               /* Special object resolution for elements of a package */
+
+               if ((op->common.parent->common.aml_opcode == AML_PACKAGE_OP) ||
+                   (op->common.parent->common.aml_opcode ==
+                    AML_VAR_PACKAGE_OP)) {
+                       /*
+                        * Attempt to resolve the node to a value before we insert it into
+                        * the package. If this is a reference to a common data type,
+                        * resolve it immediately. According to the ACPI spec, package
+                        * elements can only be "data objects" or method references.
+                        * Attempt to resolve to an Integer, Buffer, String or Package.
+                        * If cannot, return the named reference (for things like Devices,
+                        * Methods, etc.) Buffer Fields and Fields will resolve to simple
+                        * objects (int/buf/str/pkg).
+                        *
+                        * NOTE: References to things like Devices, Methods, Mutexes, etc.
+                        * will remain as named references. This behavior is not described
+                        * in the ACPI spec, but it appears to be an oversight.
+                        */
+                       obj_desc = (union acpi_operand_object *)op->common.node;
+
+                       status =
+                           acpi_ex_resolve_node_to_value(ACPI_CAST_INDIRECT_PTR
+                                                         (struct
+                                                          acpi_namespace_node,
+                                                          &obj_desc),
+                                                         walk_state);
+                       if (ACPI_FAILURE(status)) {
+                               return_ACPI_STATUS(status);
+                       }
+
+                       switch (op->common.node->type) {
+                               /*
+                                * For these types, we need the actual node, not the subobject.
+                                * However, the subobject got an extra reference count above.
+                                */
+                       case ACPI_TYPE_MUTEX:
+                       case ACPI_TYPE_METHOD:
+                       case ACPI_TYPE_POWER:
+                       case ACPI_TYPE_PROCESSOR:
+                       case ACPI_TYPE_EVENT:
+                       case ACPI_TYPE_REGION:
+                       case ACPI_TYPE_DEVICE:
+                       case ACPI_TYPE_THERMAL:
+
+                               obj_desc =
+                                   (union acpi_operand_object *)op->common.
+                                   node;
+                               break;
+
+                       default:
+                               break;
+                       }
+
+                       /*
+                        * If above resolved to an operand object, we are done. Otherwise,
+                        * we have a NS node, we must create the package entry as a named
+                        * reference.
+                        */
+                       if (ACPI_GET_DESCRIPTOR_TYPE(obj_desc) !=
+                           ACPI_DESC_TYPE_NAMED) {
+                               goto exit;
+                       }
+               }
        }
 
        /* Create and init a new internal ACPI object */
@@ -156,6 +221,7 @@ acpi_ds_build_internal_object(struct acpi_walk_state *walk_state,
                return_ACPI_STATUS(status);
        }
 
+      exit:
        *obj_desc_ptr = obj_desc;
        return_ACPI_STATUS(AE_OK);
 }
@@ -356,12 +422,25 @@ acpi_ds_build_internal_package_obj(struct acpi_walk_state *walk_state,
        arg = arg->common.next;
        for (i = 0; arg && (i < element_count); i++) {
                if (arg->common.aml_opcode == AML_INT_RETURN_VALUE_OP) {
-
-                       /* This package element is already built, just get it */
-
-                       obj_desc->package.elements[i] =
-                           ACPI_CAST_PTR(union acpi_operand_object,
-                                         arg->common.node);
+                       if (arg->common.node->type == ACPI_TYPE_METHOD) {
+                               /*
+                                * A method reference "looks" to the parser to be a method
+                                * invocation, so we special case it here
+                                */
+                               arg->common.aml_opcode = AML_INT_NAMEPATH_OP;
+                               status =
+                                   acpi_ds_build_internal_object(walk_state,
+                                                                 arg,
+                                                                 &obj_desc->
+                                                                 package.
+                                                                 elements[i]);
+                       } else {
+                               /* This package element is already built, just get it */
+
+                               obj_desc->package.elements[i] =
+                                   ACPI_CAST_PTR(union acpi_operand_object,
+                                                 arg->common.node);
+                       }
                } else {
                        status = acpi_ds_build_internal_object(walk_state, arg,
                                                               &obj_desc->
index 06b78e5e33a11b8a13a0b0874311f2bb7faf075a..d411017f8c066994cc0c06065a0776b9105397d6 100644 (file)
@@ -47,6 +47,9 @@
 #undef PREFIX
 #define PREFIX                         "ACPI: EC: "
 
+/* Uncomment next line to get verbose print outs*/
+/* #define DEBUG */
+
 /* EC status register */
 #define ACPI_EC_FLAG_OBF       0x01    /* Output buffer full */
 #define ACPI_EC_FLAG_IBF       0x02    /* Input buffer full */
@@ -75,7 +78,10 @@ enum {
        EC_FLAGS_WAIT_GPE = 0,          /* Don't check status until GPE arrives */
        EC_FLAGS_QUERY_PENDING,         /* Query is pending */
        EC_FLAGS_GPE_MODE,              /* Expect GPE to be sent for status change */
-       EC_FLAGS_ONLY_IBF_GPE,          /* Expect GPE only for IBF = 0 event */
+       EC_FLAGS_NO_ADDRESS_GPE,        /* Expect GPE only for non-address event */
+       EC_FLAGS_ADDRESS,               /* Address is being written */
+       EC_FLAGS_NO_WDATA_GPE,          /* Don't expect WDATA GPE event */
+       EC_FLAGS_WDATA,                 /* Data is being written */
 };
 
 static int acpi_ec_remove(struct acpi_device *device, int type);
@@ -131,21 +137,27 @@ static struct acpi_ec {
 
 static inline u8 acpi_ec_read_status(struct acpi_ec *ec)
 {
-       return inb(ec->command_addr);
+       u8 x = inb(ec->command_addr);
+       pr_debug(PREFIX "---> status = 0x%2x\n", x);
+       return x;
 }
 
 static inline u8 acpi_ec_read_data(struct acpi_ec *ec)
 {
+       u8 x = inb(ec->data_addr);
+       pr_debug(PREFIX "---> data = 0x%2x\n", x);
        return inb(ec->data_addr);
 }
 
 static inline void acpi_ec_write_cmd(struct acpi_ec *ec, u8 command)
 {
+       pr_debug(PREFIX "<--- command = 0x%2x\n", command);
        outb(command, ec->command_addr);
 }
 
 static inline void acpi_ec_write_data(struct acpi_ec *ec, u8 data)
 {
+       pr_debug(PREFIX "<--- data = 0x%2x\n", data);
        outb(data, ec->data_addr);
 }
 
@@ -166,38 +178,54 @@ static inline int acpi_ec_check_status(struct acpi_ec *ec, enum ec_event event)
 
 static int acpi_ec_wait(struct acpi_ec *ec, enum ec_event event, int force_poll)
 {
+       int ret = 0;
+       if (unlikely(test_bit(EC_FLAGS_ADDRESS, &ec->flags) &&
+                    test_bit(EC_FLAGS_NO_ADDRESS_GPE, &ec->flags)))
+               force_poll = 1;
+       if (unlikely(test_bit(EC_FLAGS_WDATA, &ec->flags) &&
+                    test_bit(EC_FLAGS_NO_WDATA_GPE, &ec->flags)))
+               force_poll = 1;
        if (likely(test_bit(EC_FLAGS_GPE_MODE, &ec->flags)) &&
            likely(!force_poll)) {
                if (wait_event_timeout(ec->wait, acpi_ec_check_status(ec, event),
                                       msecs_to_jiffies(ACPI_EC_DELAY)))
-                       return 0;
+                       goto end;
                clear_bit(EC_FLAGS_WAIT_GPE, &ec->flags);
                if (acpi_ec_check_status(ec, event)) {
-                       if (event == ACPI_EC_EVENT_OBF_1) {
-                               /* miss OBF = 1 GPE, don't expect it anymore */
-                               printk(KERN_INFO PREFIX "missing OBF_1 confirmation,"
-                                       "switching to degraded mode.\n");
-                               set_bit(EC_FLAGS_ONLY_IBF_GPE, &ec->flags);
+                       if (test_bit(EC_FLAGS_ADDRESS, &ec->flags)) {
+                               /* miss address GPE, don't expect it anymore */
+                               pr_info(PREFIX "missing address confirmation, "
+                                       "don't expect it any longer.\n");
+                               set_bit(EC_FLAGS_NO_ADDRESS_GPE, &ec->flags);
+                       } else if (test_bit(EC_FLAGS_WDATA, &ec->flags)) {
+                               /* miss write data GPE, don't expect it */
+                               pr_info(PREFIX "missing write data confirmation, "
+                                       "don't expect it any longer.\n");
+                               set_bit(EC_FLAGS_NO_WDATA_GPE, &ec->flags);
                        } else {
                                /* missing GPEs, switch back to poll mode */
-                               printk(KERN_INFO PREFIX "missing IBF_1 confirmations,"
-                                       "switch off interrupt mode.\n");
+                               if (printk_ratelimit())
+                                       pr_info(PREFIX "missing confirmations, "
+                                               "switch off interrupt mode.\n");
                                clear_bit(EC_FLAGS_GPE_MODE, &ec->flags);
                        }
-                       return 0;
+                       goto end;
                }
        } else {
                unsigned long delay = jiffies + msecs_to_jiffies(ACPI_EC_DELAY);
                clear_bit(EC_FLAGS_WAIT_GPE, &ec->flags);
                while (time_before(jiffies, delay)) {
                        if (acpi_ec_check_status(ec, event))
-                               return 0;
+                               goto end;
                }
        }
-       printk(KERN_ERR PREFIX "acpi_ec_wait timeout,"
+       pr_err(PREFIX "acpi_ec_wait timeout,"
                               " status = %d, expect_event = %d\n",
                               acpi_ec_read_status(ec), event);
-       return -ETIME;
+       ret = -ETIME;
+      end:
+       clear_bit(EC_FLAGS_ADDRESS, &ec->flags);
+       return ret;
 }
 
 static int acpi_ec_transaction_unlocked(struct acpi_ec *ec, u8 command,
@@ -208,22 +236,26 @@ static int acpi_ec_transaction_unlocked(struct acpi_ec *ec, u8 command,
        int result = 0;
        set_bit(EC_FLAGS_WAIT_GPE, &ec->flags);
        acpi_ec_write_cmd(ec, command);
-
+       pr_debug(PREFIX "transaction start\n");
        for (; wdata_len > 0; --wdata_len) {
                result = acpi_ec_wait(ec, ACPI_EC_EVENT_IBF_0, force_poll);
                if (result) {
-                       printk(KERN_ERR PREFIX
+                       pr_err(PREFIX
                               "write_cmd timeout, command = %d\n", command);
                        goto end;
                }
+               /* mark the address byte written to EC */
+               if (rdata_len + wdata_len > 1)
+                       set_bit(EC_FLAGS_ADDRESS, &ec->flags);
                set_bit(EC_FLAGS_WAIT_GPE, &ec->flags);
                acpi_ec_write_data(ec, *(wdata++));
        }
 
        if (!rdata_len) {
+               set_bit(EC_FLAGS_WDATA, &ec->flags);
                result = acpi_ec_wait(ec, ACPI_EC_EVENT_IBF_0, force_poll);
                if (result) {
-                       printk(KERN_ERR PREFIX
+                       pr_err(PREFIX
                               "finish-write timeout, command = %d\n", command);
                        goto end;
                }
@@ -231,12 +263,9 @@ static int acpi_ec_transaction_unlocked(struct acpi_ec *ec, u8 command,
                clear_bit(EC_FLAGS_QUERY_PENDING, &ec->flags);
 
        for (; rdata_len > 0; --rdata_len) {
-               if (test_bit(EC_FLAGS_ONLY_IBF_GPE, &ec->flags))
-                       force_poll = 1;
                result = acpi_ec_wait(ec, ACPI_EC_EVENT_OBF_1, force_poll);
                if (result) {
-                       printk(KERN_ERR PREFIX "read timeout, command = %d\n",
-                              command);
+                       pr_err(PREFIX "read timeout, command = %d\n", command);
                        goto end;
                }
                /* Don't expect GPE after last read */
@@ -245,6 +274,7 @@ static int acpi_ec_transaction_unlocked(struct acpi_ec *ec, u8 command,
                *(rdata++) = acpi_ec_read_data(ec);
        }
       end:
+       pr_debug(PREFIX "transaction end\n");
        return result;
 }
 
@@ -273,8 +303,8 @@ static int acpi_ec_transaction(struct acpi_ec *ec, u8 command,
 
        status = acpi_ec_wait(ec, ACPI_EC_EVENT_IBF_0, 0);
        if (status) {
-               printk(KERN_ERR PREFIX
-                      "input buffer is not empty, aborting transaction\n");
+               pr_err(PREFIX "input buffer is not empty, "
+                               "aborting transaction\n");
                goto end;
        }
 
@@ -488,6 +518,7 @@ static u32 acpi_ec_gpe_handler(void *data)
        acpi_status status = AE_OK;
        struct acpi_ec *ec = data;
 
+       pr_debug(PREFIX "~~~> interrupt\n");
        clear_bit(EC_FLAGS_WAIT_GPE, &ec->flags);
        if (test_bit(EC_FLAGS_GPE_MODE, &ec->flags))
                wake_up(&ec->wait);
@@ -498,8 +529,9 @@ static u32 acpi_ec_gpe_handler(void *data)
                                acpi_ec_gpe_query, ec);
        } else if (unlikely(!test_bit(EC_FLAGS_GPE_MODE, &ec->flags))) {
                /* this is non-query, must be confirmation */
-               printk(KERN_INFO PREFIX "non-query interrupt received,"
-                       " switching to interrupt mode\n");
+               if (printk_ratelimit())
+                       pr_info(PREFIX "non-query interrupt received,"
+                               " switching to interrupt mode\n");
                set_bit(EC_FLAGS_GPE_MODE, &ec->flags);
        }
 
@@ -701,10 +733,10 @@ static void ec_remove_handlers(struct acpi_ec *ec)
 {
        if (ACPI_FAILURE(acpi_remove_address_space_handler(ec->handle,
                                ACPI_ADR_SPACE_EC, &acpi_ec_space_handler)))
-               printk(KERN_ERR PREFIX "failed to remove space handler\n");
+               pr_err(PREFIX "failed to remove space handler\n");
        if (ACPI_FAILURE(acpi_remove_gpe_handler(NULL, ec->gpe,
                                &acpi_ec_gpe_handler)))
-               printk(KERN_ERR PREFIX "failed to remove gpe handler\n");
+               pr_err(PREFIX "failed to remove gpe handler\n");
        ec->handlers_installed = 0;
 }
 
@@ -747,9 +779,9 @@ static int acpi_ec_add(struct acpi_device *device)
                first_ec = ec;
        acpi_driver_data(device) = ec;
        acpi_ec_add_fs(device);
-       printk(KERN_INFO PREFIX "GPE = 0x%lx, I/O: command/status = 0x%lx, data = 0x%lx\n",
+       pr_info(PREFIX "GPE = 0x%lx, I/O: command/status = 0x%lx, data = 0x%lx\n",
                          ec->gpe, ec->command_addr, ec->data_addr);
-       printk(KERN_INFO PREFIX "driver started in %s mode\n",
+       pr_info(PREFIX "driver started in %s mode\n",
                (test_bit(EC_FLAGS_GPE_MODE, &ec->flags))?"interrupt":"poll");
        return 0;
 }
@@ -875,18 +907,26 @@ int __init acpi_ec_ecdt_probe(void)
        status = acpi_get_table(ACPI_SIG_ECDT, 1,
                                (struct acpi_table_header **)&ecdt_ptr);
        if (ACPI_SUCCESS(status)) {
-               printk(KERN_INFO PREFIX "EC description table is found, configuring boot EC\n");
+               pr_info(PREFIX "EC description table is found, configuring boot EC\n");
                boot_ec->command_addr = ecdt_ptr->control.address;
                boot_ec->data_addr = ecdt_ptr->data.address;
                boot_ec->gpe = ecdt_ptr->gpe;
                boot_ec->handle = ACPI_ROOT_OBJECT;
        } else {
+               /* This workaround is needed only on some broken machines,
+                * which require early EC, but fail to provide ECDT */
+               acpi_handle x;
                printk(KERN_DEBUG PREFIX "Look up EC in DSDT\n");
                status = acpi_get_devices(ec_device_ids[0].id, ec_parse_device,
                                                boot_ec, NULL);
                /* Check that acpi_get_devices actually find something */
                if (ACPI_FAILURE(status) || !boot_ec->handle)
                        goto error;
+               /* We really need to limit this workaround, the only ASUS,
+                * which needs it, has fake EC._INI method, so use it as flag.
+                */
+               if (ACPI_FAILURE(acpi_get_handle(boot_ec->handle, "_INI", &x)))
+                       goto error;
        }
 
        ret = ec_install_handlers(boot_ec);
index ab04d848b19d9c2c42553e502e736119e4b6ff61..0822d9fc1cb4ef7d0ea2dbf69873505fef1cc41d 100644 (file)
@@ -38,9 +38,9 @@ ACPI_MODULE_NAME("numa");
 static nodemask_t nodes_found_map = NODE_MASK_NONE;
 
 /* maps to convert between proximity domain and logical node ID */
-static int __cpuinitdata pxm_to_node_map[MAX_PXM_DOMAINS]
+static int pxm_to_node_map[MAX_PXM_DOMAINS]
                                = { [0 ... MAX_PXM_DOMAINS - 1] = NID_INVAL };
-static int __cpuinitdata node_to_pxm_map[MAX_NUMNODES]
+static int node_to_pxm_map[MAX_NUMNODES]
                                = { [0 ... MAX_NUMNODES - 1] = PXM_INVAL };
 
 int pxm_to_node(int pxm)
index aabc6ca4a81c72463529c3e711b012f8b6e909a7..e3a673a008453dfda694aab503dad0c89b19cb1e 100644 (file)
@@ -387,17 +387,14 @@ acpi_status acpi_os_read_port(acpi_io_address port, u32 * value, u32 width)
        if (!value)
                value = &dummy;
 
-       switch (width) {
-       case 8:
+       *value = 0;
+       if (width <= 8) {
                *(u8 *) value = inb(port);
-               break;
-       case 16:
+       } else if (width <= 16) {
                *(u16 *) value = inw(port);
-               break;
-       case 32:
+       } else if (width <= 32) {
                *(u32 *) value = inl(port);
-               break;
-       default:
+       } else {
                BUG();
        }
 
@@ -408,17 +405,13 @@ EXPORT_SYMBOL(acpi_os_read_port);
 
 acpi_status acpi_os_write_port(acpi_io_address port, u32 value, u32 width)
 {
-       switch (width) {
-       case 8:
+       if (width <= 8) {
                outb(value, port);
-               break;
-       case 16:
+       } else if (width <= 16) {
                outw(value, port);
-               break;
-       case 32:
+       } else if (width <= 32) {
                outl(value, port);
-               break;
-       default:
+       } else {
                BUG();
        }
 
index 235a51e328c3467522e16ac1d4bb26c5a7227537..e48ee4f8749f4afea2e2ec72aff27e05eb30a552 100644 (file)
@@ -494,7 +494,7 @@ static int get_cpu_id(acpi_handle handle, u32 acpi_id)
        if (apic_id == -1)
                return apic_id;
 
-       for (i = 0; i < NR_CPUS; ++i) {
+       for_each_possible_cpu(i) {
                if (cpu_physical_id(i) == apic_id)
                        return i;
        }
@@ -612,12 +612,6 @@ static int acpi_processor_get_info(struct acpi_processor *pr, unsigned has_uid)
                request_region(pr->throttling.address, 6, "ACPI CPU throttle");
        }
 
-#ifdef CONFIG_CPU_FREQ
-       acpi_processor_ppc_has_changed(pr);
-#endif
-       acpi_processor_get_throttling_info(pr);
-       acpi_processor_get_limit_info(pr);
-
        return 0;
 }
 
@@ -638,7 +632,7 @@ static int __cpuinit acpi_processor_start(struct acpi_device *device)
                return 0;
        }
 
-       BUG_ON((pr->id >= NR_CPUS) || (pr->id < 0));
+       BUG_ON((pr->id >= nr_cpu_ids) || (pr->id < 0));
 
        /*
         * Buggy BIOS check
@@ -647,7 +641,7 @@ static int __cpuinit acpi_processor_start(struct acpi_device *device)
         */
        if (processor_device_array[pr->id] != NULL &&
            processor_device_array[pr->id] != device) {
-               printk(KERN_WARNING "BIOS reported wrong ACPI id"
+               printk(KERN_WARNING "BIOS reported wrong ACPI id "
                        "for the processor\n");
                return -ENODEV;
        }
@@ -665,6 +659,12 @@ static int __cpuinit acpi_processor_start(struct acpi_device *device)
        /* _PDC call should be done before doing anything else (if reqd.). */
        arch_acpi_processor_init_pdc(pr);
        acpi_processor_set_pdc(pr);
+#ifdef CONFIG_CPU_FREQ
+       acpi_processor_ppc_has_changed(pr);
+#endif
+       acpi_processor_get_throttling_info(pr);
+       acpi_processor_get_limit_info(pr);
+
 
        acpi_processor_power_init(pr, device);
 
@@ -684,7 +684,7 @@ static void acpi_processor_notify(acpi_handle handle, u32 event, void *data)
 {
        struct acpi_processor *pr = data;
        struct acpi_device *device = NULL;
-
+       int saved;
 
        if (!pr)
                return;
@@ -694,7 +694,10 @@ static void acpi_processor_notify(acpi_handle handle, u32 event, void *data)
 
        switch (event) {
        case ACPI_PROCESSOR_NOTIFY_PERFORMANCE:
+               saved = pr->performance_platform_limit;
                acpi_processor_ppc_has_changed(pr);
+               if (saved == pr->performance_platform_limit)
+                       break;
                acpi_bus_generate_proc_event(device, event,
                                        pr->performance_platform_limit);
                acpi_bus_generate_netlink_event(device->pnp.device_class,
@@ -771,7 +774,7 @@ static int acpi_processor_remove(struct acpi_device *device, int type)
 
        pr = acpi_driver_data(device);
 
-       if (pr->id >= NR_CPUS) {
+       if (pr->id >= nr_cpu_ids) {
                kfree(pr);
                return 0;
        }
@@ -842,7 +845,7 @@ int acpi_processor_device_add(acpi_handle handle, struct acpi_device **device)
        if (!pr)
                return -ENODEV;
 
-       if ((pr->id >= 0) && (pr->id < NR_CPUS)) {
+       if ((pr->id >= 0) && (pr->id < nr_cpu_ids)) {
                kobject_uevent(&(*device)->dev.kobj, KOBJ_ONLINE);
        }
        return 0;
@@ -880,13 +883,13 @@ acpi_processor_hotplug_notify(acpi_handle handle, u32 event, void *data)
                        break;
                }
 
-               if (pr->id >= 0 && (pr->id < NR_CPUS)) {
+               if (pr->id >= 0 && (pr->id < nr_cpu_ids)) {
                        kobject_uevent(&device->dev.kobj, KOBJ_OFFLINE);
                        break;
                }
 
                result = acpi_processor_start(device);
-               if ((!result) && ((pr->id >= 0) && (pr->id < NR_CPUS))) {
+               if ((!result) && ((pr->id >= 0) && (pr->id < nr_cpu_ids))) {
                        kobject_uevent(&device->dev.kobj, KOBJ_ONLINE);
                } else {
                        printk(KERN_ERR PREFIX "Device [%s] failed to start\n",
@@ -909,7 +912,7 @@ acpi_processor_hotplug_notify(acpi_handle handle, u32 event, void *data)
                        return;
                }
 
-               if ((pr->id < NR_CPUS) && (cpu_present(pr->id)))
+               if ((pr->id < nr_cpu_ids) && (cpu_present(pr->id)))
                        kobject_uevent(&device->dev.kobj, KOBJ_OFFLINE);
                break;
        default:
index f996d0e37689c402642a0c884b0126ad15a505bc..2fe34cc73c1327a191a48aee32b70ee14c922c9e 100644 (file)
@@ -197,6 +197,19 @@ static inline u32 ticks_elapsed_in_us(u32 t1, u32 t2)
                return PM_TIMER_TICKS_TO_US((0xFFFFFFFF - t1) + t2);
 }
 
+static void acpi_safe_halt(void)
+{
+       current_thread_info()->status &= ~TS_POLLING;
+       /*
+        * TS_POLLING-cleared state must be visible before we
+        * test NEED_RESCHED:
+        */
+       smp_mb();
+       if (!need_resched())
+               safe_halt();
+       current_thread_info()->status |= TS_POLLING;
+}
+
 #ifndef CONFIG_CPU_IDLE
 
 static void
@@ -239,19 +252,6 @@ acpi_processor_power_activate(struct acpi_processor *pr,
        return;
 }
 
-static void acpi_safe_halt(void)
-{
-       current_thread_info()->status &= ~TS_POLLING;
-       /*
-        * TS_POLLING-cleared state must be visible before we
-        * test NEED_RESCHED:
-        */
-       smp_mb();
-       if (!need_resched())
-               safe_halt();
-       current_thread_info()->status |= TS_POLLING;
-}
-
 static atomic_t c3_cpu_count;
 
 /* Common C-state entry for C2, C3, .. */
@@ -530,6 +530,11 @@ static void acpi_processor_idle(void)
                break;
 
        case ACPI_STATE_C3:
+               /*
+                * Must be done before busmaster disable as we might
+                * need to access HPET !
+                */
+               acpi_state_timer_broadcast(pr, cx, 1);
                /*
                 * disable bus master
                 * bm_check implies we need ARB_DIS
@@ -557,7 +562,6 @@ static void acpi_processor_idle(void)
                /* Get start time (ticks) */
                t1 = inl(acpi_gbl_FADT.xpm_timer_block.address);
                /* Invoke C3 */
-               acpi_state_timer_broadcast(pr, cx, 1);
                /* Tell the scheduler that we are going deep-idle: */
                sched_clock_idle_sleep_event();
                acpi_cstate_enter(cx);
@@ -1373,15 +1377,7 @@ static int acpi_idle_enter_c1(struct cpuidle_device *dev,
        if (pr->flags.bm_check)
                acpi_idle_update_bm_rld(pr, cx);
 
-       current_thread_info()->status &= ~TS_POLLING;
-       /*
-        * TS_POLLING-cleared state must be visible before we test
-        * NEED_RESCHED:
-        */
-       smp_mb();
-       if (!need_resched())
-               safe_halt();
-       current_thread_info()->status |= TS_POLLING;
+       acpi_safe_halt();
 
        cx->usage++;
 
@@ -1399,6 +1395,8 @@ static int acpi_idle_enter_simple(struct cpuidle_device *dev,
        struct acpi_processor *pr;
        struct acpi_processor_cx *cx = cpuidle_get_statedata(state);
        u32 t1, t2;
+       int sleep_ticks = 0;
+
        pr = processors[smp_processor_id()];
 
        if (unlikely(!pr))
@@ -1407,9 +1405,6 @@ static int acpi_idle_enter_simple(struct cpuidle_device *dev,
        if (acpi_idle_suspend)
                return(acpi_idle_enter_c1(dev, state));
 
-       if (pr->flags.bm_check)
-               acpi_idle_update_bm_rld(pr, cx);
-
        local_irq_disable();
        current_thread_info()->status &= ~TS_POLLING;
        /*
@@ -1424,11 +1419,21 @@ static int acpi_idle_enter_simple(struct cpuidle_device *dev,
                return 0;
        }
 
+       /*
+        * Must be done before busmaster disable as we might need to
+        * access HPET !
+        */
+       acpi_state_timer_broadcast(pr, cx, 1);
+
+       if (pr->flags.bm_check)
+               acpi_idle_update_bm_rld(pr, cx);
+
        if (cx->type == ACPI_STATE_C3)
                ACPI_FLUSH_CPU_CACHE();
 
        t1 = inl(acpi_gbl_FADT.xpm_timer_block.address);
-       acpi_state_timer_broadcast(pr, cx, 1);
+       /* Tell the scheduler that we are going deep-idle: */
+       sched_clock_idle_sleep_event();
        acpi_idle_do_entry(cx);
        t2 = inl(acpi_gbl_FADT.xpm_timer_block.address);
 
@@ -1436,6 +1441,10 @@ static int acpi_idle_enter_simple(struct cpuidle_device *dev,
        /* TSC could halt in idle, so notify users */
        mark_tsc_unstable("TSC halts in idle");;
 #endif
+       sleep_ticks = ticks_elapsed(t1, t2);
+
+       /* Tell the scheduler how much we idled: */
+       sched_clock_idle_wakeup_event(sleep_ticks*PM_TIMER_TICK_NS);
 
        local_irq_enable();
        current_thread_info()->status |= TS_POLLING;
@@ -1443,7 +1452,7 @@ static int acpi_idle_enter_simple(struct cpuidle_device *dev,
        cx->usage++;
 
        acpi_state_timer_broadcast(pr, cx, 0);
-       cx->time += ticks_elapsed(t1, t2);
+       cx->time += sleep_ticks;
        return ticks_elapsed_in_us(t1, t2);
 }
 
@@ -1463,6 +1472,8 @@ static int acpi_idle_enter_bm(struct cpuidle_device *dev,
        struct acpi_processor *pr;
        struct acpi_processor_cx *cx = cpuidle_get_statedata(state);
        u32 t1, t2;
+       int sleep_ticks = 0;
+
        pr = processors[smp_processor_id()];
 
        if (unlikely(!pr))
@@ -1471,6 +1482,15 @@ static int acpi_idle_enter_bm(struct cpuidle_device *dev,
        if (acpi_idle_suspend)
                return(acpi_idle_enter_c1(dev, state));
 
+       if (acpi_idle_bm_check()) {
+               if (dev->safe_state) {
+                       return dev->safe_state->enter(dev, dev->safe_state);
+               } else {
+                       acpi_safe_halt();
+                       return 0;
+               }
+       }
+
        local_irq_disable();
        current_thread_info()->status &= ~TS_POLLING;
        /*
@@ -1485,38 +1505,45 @@ static int acpi_idle_enter_bm(struct cpuidle_device *dev,
                return 0;
        }
 
+       /* Tell the scheduler that we are going deep-idle: */
+       sched_clock_idle_sleep_event();
        /*
         * Must be done before busmaster disable as we might need to
         * access HPET !
         */
        acpi_state_timer_broadcast(pr, cx, 1);
 
-       if (acpi_idle_bm_check()) {
-               cx = pr->power.bm_state;
-
-               acpi_idle_update_bm_rld(pr, cx);
-
-               t1 = inl(acpi_gbl_FADT.xpm_timer_block.address);
-               acpi_idle_do_entry(cx);
-               t2 = inl(acpi_gbl_FADT.xpm_timer_block.address);
-       } else {
-               acpi_idle_update_bm_rld(pr, cx);
+       acpi_idle_update_bm_rld(pr, cx);
 
+       /*
+        * disable bus master
+        * bm_check implies we need ARB_DIS
+        * !bm_check implies we need cache flush
+        * bm_control implies whether we can do ARB_DIS
+        *
+        * That leaves a case where bm_check is set and bm_control is
+        * not set. In that case we cannot do much, we enter C3
+        * without doing anything.
+        */
+       if (pr->flags.bm_check && pr->flags.bm_control) {
                spin_lock(&c3_lock);
                c3_cpu_count++;
                /* Disable bus master arbitration when all CPUs are in C3 */
                if (c3_cpu_count == num_online_cpus())
                        acpi_set_register(ACPI_BITREG_ARB_DISABLE, 1);
                spin_unlock(&c3_lock);
+       } else if (!pr->flags.bm_check) {
+               ACPI_FLUSH_CPU_CACHE();
+       }
 
-               t1 = inl(acpi_gbl_FADT.xpm_timer_block.address);
-               acpi_idle_do_entry(cx);
-               t2 = inl(acpi_gbl_FADT.xpm_timer_block.address);
+       t1 = inl(acpi_gbl_FADT.xpm_timer_block.address);
+       acpi_idle_do_entry(cx);
+       t2 = inl(acpi_gbl_FADT.xpm_timer_block.address);
 
+       /* Re-enable bus master arbitration */
+       if (pr->flags.bm_check && pr->flags.bm_control) {
                spin_lock(&c3_lock);
-               /* Re-enable bus master arbitration */
-               if (c3_cpu_count == num_online_cpus())
-                       acpi_set_register(ACPI_BITREG_ARB_DISABLE, 0);
+               acpi_set_register(ACPI_BITREG_ARB_DISABLE, 0);
                c3_cpu_count--;
                spin_unlock(&c3_lock);
        }
@@ -1525,6 +1552,9 @@ static int acpi_idle_enter_bm(struct cpuidle_device *dev,
        /* TSC could halt in idle, so notify users */
        mark_tsc_unstable("TSC halts in idle");
 #endif
+       sleep_ticks = ticks_elapsed(t1, t2);
+       /* Tell the scheduler how much we idled: */
+       sched_clock_idle_wakeup_event(sleep_ticks*PM_TIMER_TICK_NS);
 
        local_irq_enable();
        current_thread_info()->status |= TS_POLLING;
@@ -1532,7 +1562,7 @@ static int acpi_idle_enter_bm(struct cpuidle_device *dev,
        cx->usage++;
 
        acpi_state_timer_broadcast(pr, cx, 0);
-       cx->time += ticks_elapsed(t1, t2);
+       cx->time += sleep_ticks;
        return ticks_elapsed_in_us(t1, t2);
 }
 
@@ -1584,12 +1614,14 @@ static int acpi_processor_setup_cpuidle(struct acpi_processor *pr)
                        case ACPI_STATE_C1:
                        state->flags |= CPUIDLE_FLAG_SHALLOW;
                        state->enter = acpi_idle_enter_c1;
+                       dev->safe_state = state;
                        break;
 
                        case ACPI_STATE_C2:
                        state->flags |= CPUIDLE_FLAG_BALANCED;
                        state->flags |= CPUIDLE_FLAG_TIME_VALID;
                        state->enter = acpi_idle_enter_simple;
+                       dev->safe_state = state;
                        break;
 
                        case ACPI_STATE_C3:
@@ -1610,14 +1642,6 @@ static int acpi_processor_setup_cpuidle(struct acpi_processor *pr)
        if (!count)
                return -EINVAL;
 
-       /* find the deepest state that can handle active BM */
-       if (pr->flags.bm_check) {
-               for (i = 1; i < ACPI_PROCESSOR_MAX_POWER && i <= max_cstate; i++)
-                       if (pr->power.states[i].type == ACPI_STATE_C3)
-                               break;
-               pr->power.bm_state = &pr->power.states[i-1];
-       }
-
        return 0;
 }
 
@@ -1658,6 +1682,7 @@ int __cpuinit acpi_processor_power_init(struct acpi_processor *pr,
 
        if (!first_run) {
                dmi_check_system(processor_power_dmi_table);
+               max_cstate = acpi_processor_cstate_check(max_cstate);
                if (max_cstate < ACPI_C_STATES_MAX)
                        printk(KERN_NOTICE
                               "ACPI: processor limited to max C-state %d\n",
index 0b8204e7082a366232b3d29121926ff0892f57cd..6742d7bc4777d8343d10aa34aa5d40a920f5f41a 100644 (file)
@@ -29,6 +29,7 @@
 #include <linux/kernel.h>
 #include <linux/module.h>
 #include <linux/init.h>
+#include <linux/sched.h>
 #include <linux/cpufreq.h>
 #include <linux/proc_fs.h>
 #include <linux/seq_file.h>
@@ -70,7 +71,55 @@ static int acpi_processor_get_platform_limit(struct acpi_processor *pr)
 
 int acpi_processor_tstate_has_changed(struct acpi_processor *pr)
 {
-       return acpi_processor_get_platform_limit(pr);
+       int result = 0;
+       int throttling_limit;
+       int current_state;
+       struct acpi_processor_limit *limit;
+       int target_state;
+
+       result = acpi_processor_get_platform_limit(pr);
+       if (result) {
+               /* Throttling Limit is unsupported */
+               return result;
+       }
+
+       throttling_limit = pr->throttling_platform_limit;
+       if (throttling_limit >= pr->throttling.state_count) {
+               /* Uncorrect Throttling Limit */
+               return -EINVAL;
+       }
+
+       current_state = pr->throttling.state;
+       if (current_state > throttling_limit) {
+               /*
+                * The current state can meet the requirement of
+                * _TPC limit. But it is reasonable that OSPM changes
+                * t-states from high to low for better performance.
+                * Of course the limit condition of thermal
+                * and user should be considered.
+                */
+               limit = &pr->limit;
+               target_state = throttling_limit;
+               if (limit->thermal.tx > target_state)
+                       target_state = limit->thermal.tx;
+               if (limit->user.tx > target_state)
+                       target_state = limit->user.tx;
+       } else if (current_state == throttling_limit) {
+               /*
+                * Unnecessary to change the throttling state
+                */
+               return 0;
+       } else {
+               /*
+                * If the current state is lower than the limit of _TPC, it
+                * will be forced to switch to the throttling state defined
+                * by throttling_platfor_limit.
+                * Because the previous state meets with the limit condition
+                * of thermal and user, it is unnecessary to check it again.
+                */
+               target_state = throttling_limit;
+       }
+       return acpi_processor_set_throttling(pr, target_state);
 }
 
 /*
@@ -83,6 +132,7 @@ static int acpi_processor_get_throttling_control(struct acpi_processor *pr)
        struct acpi_buffer buffer = { ACPI_ALLOCATE_BUFFER, NULL };
        union acpi_object *ptc = NULL;
        union acpi_object obj = { 0 };
+       struct acpi_processor_throttling *throttling;
 
        status = acpi_evaluate_object(pr->handle, "_PTC", NULL, &buffer);
        if (ACPI_FAILURE(status)) {
@@ -134,6 +184,22 @@ static int acpi_processor_get_throttling_control(struct acpi_processor *pr)
        memcpy(&pr->throttling.status_register, obj.buffer.pointer,
               sizeof(struct acpi_ptc_register));
 
+       throttling = &pr->throttling;
+
+       if ((throttling->control_register.bit_width +
+               throttling->control_register.bit_offset) > 32) {
+               printk(KERN_ERR PREFIX "Invalid _PTC control register\n");
+               result = -EFAULT;
+               goto end;
+       }
+
+       if ((throttling->status_register.bit_width +
+               throttling->status_register.bit_offset) > 32) {
+               printk(KERN_ERR PREFIX "Invalid _PTC status register\n");
+               result = -EFAULT;
+               goto end;
+       }
+
       end:
        kfree(buffer.pointer);
 
@@ -328,44 +394,132 @@ static int acpi_processor_get_throttling_fadt(struct acpi_processor *pr)
        return 0;
 }
 
-static int acpi_read_throttling_status(struct acpi_processor_throttling
-                                      *throttling)
+#ifdef CONFIG_X86
+static int acpi_throttling_rdmsr(struct acpi_processor *pr,
+                                       acpi_integer * value)
+{
+       struct cpuinfo_x86 *c;
+       u64 msr_high, msr_low;
+       unsigned int cpu;
+       u64 msr = 0;
+       int ret = -1;
+
+       cpu = pr->id;
+       c = &cpu_data(cpu);
+
+       if ((c->x86_vendor != X86_VENDOR_INTEL) ||
+               !cpu_has(c, X86_FEATURE_ACPI)) {
+               printk(KERN_ERR PREFIX
+                       "HARDWARE addr space,NOT supported yet\n");
+       } else {
+               msr_low = 0;
+               msr_high = 0;
+               rdmsr_safe(MSR_IA32_THERM_CONTROL,
+                       (u32 *)&msr_low , (u32 *) &msr_high);
+               msr = (msr_high << 32) | msr_low;
+               *value = (acpi_integer) msr;
+               ret = 0;
+       }
+       return ret;
+}
+
+static int acpi_throttling_wrmsr(struct acpi_processor *pr, acpi_integer value)
 {
-       int value = -1;
+       struct cpuinfo_x86 *c;
+       unsigned int cpu;
+       int ret = -1;
+       u64 msr;
+
+       cpu = pr->id;
+       c = &cpu_data(cpu);
+
+       if ((c->x86_vendor != X86_VENDOR_INTEL) ||
+               !cpu_has(c, X86_FEATURE_ACPI)) {
+               printk(KERN_ERR PREFIX
+                       "HARDWARE addr space,NOT supported yet\n");
+       } else {
+               msr = value;
+               wrmsr_safe(MSR_IA32_THERM_CONTROL,
+                       msr & 0xffffffff, msr >> 32);
+               ret = 0;
+       }
+       return ret;
+}
+#else
+static int acpi_throttling_rdmsr(struct acpi_processor *pr,
+                               acpi_integer * value)
+{
+       printk(KERN_ERR PREFIX
+               "HARDWARE addr space,NOT supported yet\n");
+       return -1;
+}
+
+static int acpi_throttling_wrmsr(struct acpi_processor *pr, acpi_integer value)
+{
+       printk(KERN_ERR PREFIX
+               "HARDWARE addr space,NOT supported yet\n");
+       return -1;
+}
+#endif
+
+static int acpi_read_throttling_status(struct acpi_processor *pr,
+                                       acpi_integer *value)
+{
+       u32 bit_width, bit_offset;
+       u64 ptc_value;
+       u64 ptc_mask;
+       struct acpi_processor_throttling *throttling;
+       int ret = -1;
+
+       throttling = &pr->throttling;
        switch (throttling->status_register.space_id) {
        case ACPI_ADR_SPACE_SYSTEM_IO:
+               ptc_value = 0;
+               bit_width = throttling->status_register.bit_width;
+               bit_offset = throttling->status_register.bit_offset;
+
                acpi_os_read_port((acpi_io_address) throttling->status_register.
-                                 address, &value,
-                                 (u32) throttling->status_register.bit_width *
-                                 8);
+                                 address, (u32 *) &ptc_value,
+                                 (u32) (bit_width + bit_offset));
+               ptc_mask = (1 << bit_width) - 1;
+               *value = (acpi_integer) ((ptc_value >> bit_offset) & ptc_mask);
+               ret = 0;
                break;
        case ACPI_ADR_SPACE_FIXED_HARDWARE:
-               printk(KERN_ERR PREFIX
-                      "HARDWARE addr space,NOT supported yet\n");
+               ret = acpi_throttling_rdmsr(pr, value);
                break;
        default:
                printk(KERN_ERR PREFIX "Unknown addr space %d\n",
                       (u32) (throttling->status_register.space_id));
        }
-       return value;
+       return ret;
 }
 
-static int acpi_write_throttling_state(struct acpi_processor_throttling
-                                      *throttling, int value)
+static int acpi_write_throttling_state(struct acpi_processor *pr,
+                               acpi_integer value)
 {
+       u32 bit_width, bit_offset;
+       u64 ptc_value;
+       u64 ptc_mask;
+       struct acpi_processor_throttling *throttling;
        int ret = -1;
 
+       throttling = &pr->throttling;
        switch (throttling->control_register.space_id) {
        case ACPI_ADR_SPACE_SYSTEM_IO:
+               bit_width = throttling->control_register.bit_width;
+               bit_offset = throttling->control_register.bit_offset;
+               ptc_mask = (1 << bit_width) - 1;
+               ptc_value = value & ptc_mask;
+
                acpi_os_write_port((acpi_io_address) throttling->
-                                  control_register.address, value,
-                                  (u32) throttling->control_register.
-                                  bit_width * 8);
+                                       control_register.address,
+                                       (u32) (ptc_value << bit_offset),
+                                       (u32) (bit_width + bit_offset));
                ret = 0;
                break;
        case ACPI_ADR_SPACE_FIXED_HARDWARE:
-               printk(KERN_ERR PREFIX
-                      "HARDWARE addr space,NOT supported yet\n");
+               ret = acpi_throttling_wrmsr(pr, value);
                break;
        default:
                printk(KERN_ERR PREFIX "Unknown addr space %d\n",
@@ -374,7 +528,8 @@ static int acpi_write_throttling_state(struct acpi_processor_throttling
        return ret;
 }
 
-static int acpi_get_throttling_state(struct acpi_processor *pr, int value)
+static int acpi_get_throttling_state(struct acpi_processor *pr,
+                               acpi_integer value)
 {
        int i;
 
@@ -390,22 +545,26 @@ static int acpi_get_throttling_state(struct acpi_processor *pr, int value)
        return i;
 }
 
-static int acpi_get_throttling_value(struct acpi_processor *pr, int state)
+static int acpi_get_throttling_value(struct acpi_processor *pr,
+                       int state, acpi_integer *value)
 {
-       int value = -1;
+       int ret = -1;
+
        if (state >= 0 && state <= pr->throttling.state_count) {
                struct acpi_processor_tx_tss *tx =
                    (struct acpi_processor_tx_tss *)&(pr->throttling.
                                                      states_tss[state]);
-               value = tx->control;
+               *value = tx->control;
+               ret = 0;
        }
-       return value;
+       return ret;
 }
 
 static int acpi_processor_get_throttling_ptc(struct acpi_processor *pr)
 {
        int state = 0;
-       u32 value = 0;
+       int ret;
+       acpi_integer value;
 
        if (!pr)
                return -EINVAL;
@@ -414,20 +573,66 @@ static int acpi_processor_get_throttling_ptc(struct acpi_processor *pr)
                return -ENODEV;
 
        pr->throttling.state = 0;
-       local_irq_disable();
-       value = acpi_read_throttling_status(&pr->throttling);
-       if (value >= 0) {
+
+       value = 0;
+       ret = acpi_read_throttling_status(pr, &value);
+       if (ret >= 0) {
                state = acpi_get_throttling_state(pr, value);
                pr->throttling.state = state;
        }
-       local_irq_enable();
 
        return 0;
 }
 
 static int acpi_processor_get_throttling(struct acpi_processor *pr)
 {
-       return pr->throttling.acpi_processor_get_throttling(pr);
+       cpumask_t saved_mask;
+       int ret;
+
+       /*
+        * Migrate task to the cpu pointed by pr.
+        */
+       saved_mask = current->cpus_allowed;
+       set_cpus_allowed(current, cpumask_of_cpu(pr->id));
+       ret = pr->throttling.acpi_processor_get_throttling(pr);
+       /* restore the previous state */
+       set_cpus_allowed(current, saved_mask);
+
+       return ret;
+}
+
+static int acpi_processor_get_fadt_info(struct acpi_processor *pr)
+{
+       int i, step;
+
+       if (!pr->throttling.address) {
+               ACPI_DEBUG_PRINT((ACPI_DB_INFO, "No throttling register\n"));
+               return -EINVAL;
+       } else if (!pr->throttling.duty_width) {
+               ACPI_DEBUG_PRINT((ACPI_DB_INFO, "No throttling states\n"));
+               return -EINVAL;
+       }
+       /* TBD: Support duty_cycle values that span bit 4. */
+       else if ((pr->throttling.duty_offset + pr->throttling.duty_width) > 4) {
+               printk(KERN_WARNING PREFIX "duty_cycle spans bit 4\n");
+               return -EINVAL;
+       }
+
+       pr->throttling.state_count = 1 << acpi_gbl_FADT.duty_width;
+
+       /*
+        * Compute state values. Note that throttling displays a linear power
+        * performance relationship (at 50% performance the CPU will consume
+        * 50% power).  Values are in 1/10th of a percent to preserve accuracy.
+        */
+
+       step = (1000 / pr->throttling.state_count);
+
+       for (i = 0; i < pr->throttling.state_count; i++) {
+               pr->throttling.states[i].performance = 1000 - step * i;
+               pr->throttling.states[i].power = 1000 - step * i;
+       }
+       return 0;
 }
 
 static int acpi_processor_set_throttling_fadt(struct acpi_processor *pr,
@@ -506,7 +711,8 @@ static int acpi_processor_set_throttling_fadt(struct acpi_processor *pr,
 static int acpi_processor_set_throttling_ptc(struct acpi_processor *pr,
                                             int state)
 {
-       u32 value = 0;
+       int ret;
+       acpi_integer value;
 
        if (!pr)
                return -EINVAL;
@@ -523,28 +729,34 @@ static int acpi_processor_set_throttling_ptc(struct acpi_processor *pr,
        if (state < pr->throttling_platform_limit)
                return -EPERM;
 
-       local_irq_disable();
-
-       value = acpi_get_throttling_value(pr, state);
-       if (value >= 0) {
-               acpi_write_throttling_state(&pr->throttling, value);
+       value = 0;
+       ret = acpi_get_throttling_value(pr, state, &value);
+       if (ret >= 0) {
+               acpi_write_throttling_state(pr, value);
                pr->throttling.state = state;
        }
-       local_irq_enable();
 
        return 0;
 }
 
 int acpi_processor_set_throttling(struct acpi_processor *pr, int state)
 {
-       return pr->throttling.acpi_processor_set_throttling(pr, state);
+       cpumask_t saved_mask;
+       int ret;
+       /*
+        * Migrate task to the cpu pointed by pr.
+        */
+       saved_mask = current->cpus_allowed;
+       set_cpus_allowed(current, cpumask_of_cpu(pr->id));
+       ret = pr->throttling.acpi_processor_set_throttling(pr, state);
+       /* restore the previous state */
+       set_cpus_allowed(current, saved_mask);
+       return ret;
 }
 
 int acpi_processor_get_throttling_info(struct acpi_processor *pr)
 {
        int result = 0;
-       int step = 0;
-       int i = 0;
 
        ACPI_DEBUG_PRINT((ACPI_DB_INFO,
                          "pblk_address[0x%08x] duty_offset[%d] duty_width[%d]\n",
@@ -563,6 +775,8 @@ int acpi_processor_get_throttling_info(struct acpi_processor *pr)
                acpi_processor_get_throttling_states(pr) ||
                acpi_processor_get_platform_limit(pr))
        {
+               if (acpi_processor_get_fadt_info(pr))
+                       return 0;
                pr->throttling.acpi_processor_get_throttling =
                    &acpi_processor_get_throttling_fadt;
                pr->throttling.acpi_processor_set_throttling =
@@ -576,19 +790,6 @@ int acpi_processor_get_throttling_info(struct acpi_processor *pr)
 
        acpi_processor_get_tsd(pr);
 
-       if (!pr->throttling.address) {
-               ACPI_DEBUG_PRINT((ACPI_DB_INFO, "No throttling register\n"));
-               return 0;
-       } else if (!pr->throttling.duty_width) {
-               ACPI_DEBUG_PRINT((ACPI_DB_INFO, "No throttling states\n"));
-               return 0;
-       }
-       /* TBD: Support duty_cycle values that span bit 4. */
-       else if ((pr->throttling.duty_offset + pr->throttling.duty_width) > 4) {
-               printk(KERN_WARNING PREFIX "duty_cycle spans bit 4\n");
-               return 0;
-       }
-
        /*
         * PIIX4 Errata: We don't support throttling on the original PIIX4.
         * This shouldn't be an issue as few (if any) mobile systems ever
@@ -600,21 +801,6 @@ int acpi_processor_get_throttling_info(struct acpi_processor *pr)
                return 0;
        }
 
-       pr->throttling.state_count = 1 << acpi_gbl_FADT.duty_width;
-
-       /*
-        * Compute state values. Note that throttling displays a linear power/
-        * performance relationship (at 50% performance the CPU will consume
-        * 50% power).  Values are in 1/10th of a percent to preserve accuracy.
-        */
-
-       step = (1000 / pr->throttling.state_count);
-
-       for (i = 0; i < pr->throttling.state_count; i++) {
-               pr->throttling.states[i].performance = step * i;
-               pr->throttling.states[i].power = step * i;
-       }
-
        ACPI_DEBUG_PRINT((ACPI_DB_INFO, "Found %d throttling states\n",
                          pr->throttling.state_count));
 
index 90fd09c65f95eed69d07fc624277d20fb9c44f8b..6045cdbe176beafe7f250c65a0bf93b3fa428da7 100644 (file)
@@ -29,7 +29,7 @@
 #include <linux/moduleparam.h>
 #include <linux/kernel.h>
 
-#ifdef CONFIG_ACPI_PROCFS
+#ifdef CONFIG_ACPI_PROCFS_POWER
 #include <linux/proc_fs.h>
 #include <linux/seq_file.h>
 #include <asm/uaccess.h>
@@ -88,7 +88,7 @@ MODULE_DEVICE_TABLE(acpi, sbs_device_ids);
 struct acpi_battery {
        struct power_supply bat;
        struct acpi_sbs *sbs;
-#ifdef CONFIG_ACPI_PROCFS
+#ifdef CONFIG_ACPI_PROCFS_POWER
        struct proc_dir_entry *proc_entry;
 #endif
        unsigned long update_time;
@@ -113,6 +113,7 @@ struct acpi_battery {
        u16 spec;
        u8 id;
        u8 present:1;
+       u8 have_sysfs_alarm:1;
 };
 
 #define to_acpi_battery(x) container_of(x, struct acpi_battery, bat);
@@ -122,7 +123,7 @@ struct acpi_sbs {
        struct acpi_device *device;
        struct acpi_smb_hc *hc;
        struct mutex lock;
-#ifdef CONFIG_ACPI_PROCFS
+#ifdef CONFIG_ACPI_PROCFS_POWER
        struct proc_dir_entry *charger_entry;
 #endif
        struct acpi_battery battery[MAX_SBS_BAT];
@@ -468,7 +469,7 @@ static struct device_attribute alarm_attr = {
                               FS Interface (/proc/acpi)
    -------------------------------------------------------------------------- */
 
-#ifdef CONFIG_ACPI_PROCFS
+#ifdef CONFIG_ACPI_PROCFS_POWER
 /* Generic Routines */
 static int
 acpi_sbs_add_fs(struct proc_dir_entry **dir,
@@ -789,7 +790,7 @@ static int acpi_battery_add(struct acpi_sbs *sbs, int id)
                return result;
 
        sprintf(battery->name, ACPI_BATTERY_DIR_NAME, id);
-#ifdef CONFIG_ACPI_PROCFS
+#ifdef CONFIG_ACPI_PROCFS_POWER
        acpi_sbs_add_fs(&battery->proc_entry, acpi_battery_dir,
                        battery->name, &acpi_battery_info_fops,
                        &acpi_battery_state_fops, &acpi_battery_alarm_fops,
@@ -808,7 +809,13 @@ static int acpi_battery_add(struct acpi_sbs *sbs, int id)
        }
        battery->bat.get_property = acpi_sbs_battery_get_property;
        result = power_supply_register(&sbs->device->dev, &battery->bat);
-       device_create_file(battery->bat.dev, &alarm_attr);
+       if (result)
+               goto end;
+       result = device_create_file(battery->bat.dev, &alarm_attr);
+       if (result)
+               goto end;
+       battery->have_sysfs_alarm = 1;
+      end:
        printk(KERN_INFO PREFIX "%s [%s]: Battery Slot [%s] (battery %s)\n",
               ACPI_SBS_DEVICE_NAME, acpi_device_bid(sbs->device),
               battery->name, sbs->battery->present ? "present" : "absent");
@@ -817,14 +824,16 @@ static int acpi_battery_add(struct acpi_sbs *sbs, int id)
 
 static void acpi_battery_remove(struct acpi_sbs *sbs, int id)
 {
-       if (sbs->battery[id].bat.dev)
-               device_remove_file(sbs->battery[id].bat.dev, &alarm_attr);
-               power_supply_unregister(&sbs->battery[id].bat);
-#ifdef CONFIG_ACPI_PROCFS
-       if (sbs->battery[id].proc_entry) {
-               acpi_sbs_remove_fs(&(sbs->battery[id].proc_entry),
-                                  acpi_battery_dir);
+       struct acpi_battery *battery = &sbs->battery[id];
+
+       if (battery->bat.dev) {
+               if (battery->have_sysfs_alarm)
+                       device_remove_file(battery->bat.dev, &alarm_attr);
+               power_supply_unregister(&battery->bat);
        }
+#ifdef CONFIG_ACPI_PROCFS_POWER
+       if (battery->proc_entry)
+               acpi_sbs_remove_fs(&battery->proc_entry, acpi_battery_dir);
 #endif
 }
 
@@ -835,7 +844,7 @@ static int acpi_charger_add(struct acpi_sbs *sbs)
        result = acpi_ac_get_present(sbs);
        if (result)
                goto end;
-#ifdef CONFIG_ACPI_PROCFS
+#ifdef CONFIG_ACPI_PROCFS_POWER
        result = acpi_sbs_add_fs(&sbs->charger_entry, acpi_ac_dir,
                                 ACPI_AC_DIR_NAME, NULL,
                                 &acpi_ac_state_fops, NULL, sbs);
@@ -859,7 +868,7 @@ static void acpi_charger_remove(struct acpi_sbs *sbs)
 {
        if (sbs->charger.dev)
                power_supply_unregister(&sbs->charger);
-#ifdef CONFIG_ACPI_PROCFS
+#ifdef CONFIG_ACPI_PROCFS_POWER
        if (sbs->charger_entry)
                acpi_sbs_remove_fs(&sbs->charger_entry, acpi_ac_dir);
 #endif
@@ -965,7 +974,7 @@ static int acpi_sbs_remove(struct acpi_device *device, int type)
 
 static void acpi_sbs_rmdirs(void)
 {
-#ifdef CONFIG_ACPI_PROCFS
+#ifdef CONFIG_ACPI_PROCFS_POWER
        if (acpi_ac_dir) {
                acpi_unlock_ac_dir(acpi_ac_dir);
                acpi_ac_dir = NULL;
@@ -1004,7 +1013,7 @@ static int __init acpi_sbs_init(void)
 
        if (acpi_disabled)
                return -ENODEV;
-#ifdef CONFIG_ACPI_PROCFS
+#ifdef CONFIG_ACPI_PROCFS_POWER
        acpi_ac_dir = acpi_lock_ac_dir();
        if (!acpi_ac_dir)
                return -ENODEV;
index 5f1d85f2ffe4cf375b19a97d0a392bc5ed52d18a..010f19652f80a633305a9da6c73729a73f58f545 100644 (file)
@@ -449,7 +449,7 @@ acpi_tb_parse_root_table(acpi_physical_address rsdp_address, u8 flags)
                        /* XSDT has NULL entry, RSDT is used */
                        address = rsdt_address;
                        table_entry_size = sizeof(u32);
-                       ACPI_WARNING((AE_INFO, "BIOS XSDT has NULL entry,"
+                       ACPI_WARNING((AE_INFO, "BIOS XSDT has NULL entry, "
                                        "using RSDT"));
                }
        }
index bac956b30c57b94fafe71c951331723122bbd926..bd77e81e81c1ed00827db379766faae1485fe17d 100644 (file)
@@ -29,6 +29,7 @@
 #include <linux/init.h>
 #include <linux/types.h>
 #include <linux/list.h>
+#include <linux/mutex.h>
 #include <linux/proc_fs.h>
 #include <linux/seq_file.h>
 #include <linux/input.h>
@@ -135,8 +136,8 @@ struct acpi_video_bus {
        u8 attached_count;
        struct acpi_video_bus_cap cap;
        struct acpi_video_bus_flags flags;
-       struct semaphore sem;
        struct list_head video_device_list;
+       struct mutex device_list_lock;  /* protects video_device_list */
        struct proc_dir_entry *dir;
        struct input_dev *input;
        char phys[32];  /* for input device */
@@ -576,7 +577,7 @@ static void acpi_video_device_find_cap(struct acpi_video_device *device)
        struct acpi_video_device_brightness *br = NULL;
 
 
-       memset(&device->cap, 0, 4);
+       memset(&device->cap, 0, sizeof(device->cap));
 
        if (ACPI_SUCCESS(acpi_get_handle(device->dev->handle, "_ADR", &h_dummy1))) {
                device->cap._ADR = 1;
@@ -696,7 +697,7 @@ static void acpi_video_bus_find_cap(struct acpi_video_bus *video)
 {
        acpi_handle h_dummy1;
 
-       memset(&video->cap, 0, 4);
+       memset(&video->cap, 0, sizeof(video->cap));
        if (ACPI_SUCCESS(acpi_get_handle(video->device->handle, "_DOS", &h_dummy1))) {
                video->cap._DOS = 1;
        }
@@ -896,7 +897,7 @@ acpi_video_device_write_brightness(struct file *file,
 {
        struct seq_file *m = file->private_data;
        struct acpi_video_device *dev = m->private;
-       char str[4] = { 0 };
+       char str[5] = { 0 };
        unsigned int level = 0;
        int i;
 
@@ -1436,9 +1437,9 @@ acpi_video_bus_get_one_device(struct acpi_device *device,
                        return -ENODEV;
                }
 
-               down(&video->sem);
+               mutex_lock(&video->device_list_lock);
                list_add_tail(&data->entry, &video->video_device_list);
-               up(&video->sem);
+               mutex_unlock(&video->device_list_lock);
 
                acpi_video_device_add_fs(device);
 
@@ -1462,12 +1463,14 @@ acpi_video_bus_get_one_device(struct acpi_device *device,
 
 static void acpi_video_device_rebind(struct acpi_video_bus *video)
 {
-       struct list_head *node, *next;
-       list_for_each_safe(node, next, &video->video_device_list) {
-               struct acpi_video_device *dev =
-                   container_of(node, struct acpi_video_device, entry);
+       struct acpi_video_device *dev;
+
+       mutex_lock(&video->device_list_lock);
+
+       list_for_each_entry(dev, &video->video_device_list, entry)
                acpi_video_device_bind(video, dev);
-       }
+
+       mutex_unlock(&video->device_list_lock);
 }
 
 /*
@@ -1592,30 +1595,33 @@ static int acpi_video_device_enumerate(struct acpi_video_bus *video)
 
 static int acpi_video_switch_output(struct acpi_video_bus *video, int event)
 {
-       struct list_head *node, *next;
+       struct list_head *node;
        struct acpi_video_device *dev = NULL;
        struct acpi_video_device *dev_next = NULL;
        struct acpi_video_device *dev_prev = NULL;
        unsigned long state;
        int status = 0;
 
+       mutex_lock(&video->device_list_lock);
 
-       list_for_each_safe(node, next, &video->video_device_list) {
+       list_for_each(node, &video->video_device_list) {
                dev = container_of(node, struct acpi_video_device, entry);
                status = acpi_video_device_get_state(dev, &state);
                if (state & 0x2) {
-                       dev_next =
-                           container_of(node->next, struct acpi_video_device,
-                                        entry);
-                       dev_prev =
-                           container_of(node->prev, struct acpi_video_device,
-                                        entry);
+                       dev_next = container_of(node->next,
+                                       struct acpi_video_device, entry);
+                       dev_prev = container_of(node->prev,
+                                       struct acpi_video_device, entry);
                        goto out;
                }
        }
+
        dev_next = container_of(node->next, struct acpi_video_device, entry);
        dev_prev = container_of(node->prev, struct acpi_video_device, entry);
-      out:
+
+ out:
+       mutex_unlock(&video->device_list_lock);
+
        switch (event) {
        case ACPI_VIDEO_NOTIFY_CYCLE:
        case ACPI_VIDEO_NOTIFY_NEXT_OUTPUT:
@@ -1691,24 +1697,17 @@ acpi_video_bus_get_devices(struct acpi_video_bus *video,
                           struct acpi_device *device)
 {
        int status = 0;
-       struct list_head *node, *next;
-
+       struct acpi_device *dev;
 
        acpi_video_device_enumerate(video);
 
-       list_for_each_safe(node, next, &device->children) {
-               struct acpi_device *dev =
-                   list_entry(node, struct acpi_device, node);
-
-               if (!dev)
-                       continue;
+       list_for_each_entry(dev, &device->children, node) {
 
                status = acpi_video_bus_get_one_device(dev, video);
                if (ACPI_FAILURE(status)) {
                        ACPI_EXCEPTION((AE_INFO, status, "Cant attach device"));
                        continue;
                }
-
        }
        return status;
 }
@@ -1724,9 +1723,6 @@ static int acpi_video_bus_put_one_device(struct acpi_video_device *device)
 
        video = device->video;
 
-       down(&video->sem);
-       list_del(&device->entry);
-       up(&video->sem);
        acpi_video_device_remove_fs(device->dev);
 
        status = acpi_remove_notify_handler(device->dev->handle,
@@ -1734,32 +1730,34 @@ static int acpi_video_bus_put_one_device(struct acpi_video_device *device)
                                            acpi_video_device_notify);
        backlight_device_unregister(device->backlight);
        video_output_unregister(device->output_dev);
+
        return 0;
 }
 
 static int acpi_video_bus_put_devices(struct acpi_video_bus *video)
 {
        int status;
-       struct list_head *node, *next;
+       struct acpi_video_device *dev, *next;
 
+       mutex_lock(&video->device_list_lock);
 
-       list_for_each_safe(node, next, &video->video_device_list) {
-               struct acpi_video_device *data =
-                   list_entry(node, struct acpi_video_device, entry);
-               if (!data)
-                       continue;
+       list_for_each_entry_safe(dev, next, &video->video_device_list, entry) {
 
-               status = acpi_video_bus_put_one_device(data);
+               status = acpi_video_bus_put_one_device(dev);
                if (ACPI_FAILURE(status))
                        printk(KERN_WARNING PREFIX
                               "hhuuhhuu bug in acpi video driver.\n");
 
-               if (data->brightness)
-                       kfree(data->brightness->levels);
-               kfree(data->brightness);
-               kfree(data);
+               if (dev->brightness) {
+                       kfree(dev->brightness->levels);
+                       kfree(dev->brightness);
+               }
+               list_del(&dev->entry);
+               kfree(dev);
        }
 
+       mutex_unlock(&video->device_list_lock);
+
        return 0;
 }
 
@@ -1782,9 +1780,6 @@ static void acpi_video_bus_notify(acpi_handle handle, u32 event, void *data)
        struct input_dev *input;
        int keycode;
 
-
-       printk("video bus notify\n");
-
        if (!video)
                return;
 
@@ -1897,14 +1892,10 @@ static void acpi_video_device_notify(acpi_handle handle, u32 event, void *data)
 static int instance;
 static int acpi_video_bus_add(struct acpi_device *device)
 {
-       int result = 0;
-       acpi_status status = 0;
-       struct acpi_video_bus *video = NULL;
+       acpi_status status;
+       struct acpi_video_bus *video;
        struct input_dev *input;
-
-
-       if (!device)
-               return -EINVAL;
+       int error;
 
        video = kzalloc(sizeof(struct acpi_video_bus), GFP_KERNEL);
        if (!video)
@@ -1923,15 +1914,15 @@ static int acpi_video_bus_add(struct acpi_device *device)
        acpi_driver_data(device) = video;
 
        acpi_video_bus_find_cap(video);
-       result = acpi_video_bus_check(video);
-       if (result)
-               goto end;
+       error = acpi_video_bus_check(video);
+       if (error)
+               goto err_free_video;
 
-       result = acpi_video_bus_add_fs(device);
-       if (result)
-               goto end;
+       error = acpi_video_bus_add_fs(device);
+       if (error)
+               goto err_free_video;
 
-       init_MUTEX(&video->sem);
+       mutex_init(&video->device_list_lock);
        INIT_LIST_HEAD(&video->video_device_list);
 
        acpi_video_bus_get_devices(video, device);
@@ -1943,16 +1934,15 @@ static int acpi_video_bus_add(struct acpi_device *device)
        if (ACPI_FAILURE(status)) {
                ACPI_DEBUG_PRINT((ACPI_DB_ERROR,
                                  "Error installing notify handler\n"));
-               acpi_video_bus_stop_devices(video);
-               acpi_video_bus_put_devices(video);
-               kfree(video->attached_array);
-               acpi_video_bus_remove_fs(device);
-               result = -ENODEV;
-               goto end;
+               error = -ENODEV;
+               goto err_stop_video;
        }
 
-
        video->input = input = input_allocate_device();
+       if (!input) {
+               error = -ENOMEM;
+               goto err_uninstall_notify;
+       }
 
        snprintf(video->phys, sizeof(video->phys),
                "%s/video/input0", acpi_device_hid(video->device));
@@ -1961,6 +1951,7 @@ static int acpi_video_bus_add(struct acpi_device *device)
        input->phys = video->phys;
        input->id.bustype = BUS_HOST;
        input->id.product = 0x06;
+       input->dev.parent = &device->dev;
        input->evbit[0] = BIT(EV_KEY);
        set_bit(KEY_SWITCHVIDEOMODE, input->keybit);
        set_bit(KEY_VIDEO_NEXT, input->keybit);
@@ -1971,18 +1962,10 @@ static int acpi_video_bus_add(struct acpi_device *device)
        set_bit(KEY_BRIGHTNESS_ZERO, input->keybit);
        set_bit(KEY_DISPLAY_OFF, input->keybit);
        set_bit(KEY_UNKNOWN, input->keybit);
-       result = input_register_device(input);
-       if (result) {
-               acpi_remove_notify_handler(video->device->handle,
-                                               ACPI_DEVICE_NOTIFY,
-                                               acpi_video_bus_notify);
-               acpi_video_bus_stop_devices(video);
-               acpi_video_bus_put_devices(video);
-               kfree(video->attached_array);
-               acpi_video_bus_remove_fs(device);
-               goto end;
-        }
 
+       error = input_register_device(input);
+       if (error)
+               goto err_free_input_dev;
 
        printk(KERN_INFO PREFIX "%s [%s] (multi-head: %s  rom: %s  post: %s)\n",
               ACPI_VIDEO_DEVICE_NAME, acpi_device_bid(device),
@@ -1990,11 +1973,23 @@ static int acpi_video_bus_add(struct acpi_device *device)
               video->flags.rom ? "yes" : "no",
               video->flags.post ? "yes" : "no");
 
-      end:
-       if (result)
-               kfree(video);
+       return 0;
+
+ err_free_input_dev:
+       input_free_device(input);
+ err_uninstall_notify:
+       acpi_remove_notify_handler(device->handle, ACPI_DEVICE_NOTIFY,
+                                  acpi_video_bus_notify);
+ err_stop_video:
+       acpi_video_bus_stop_devices(video);
+       acpi_video_bus_put_devices(video);
+       kfree(video->attached_array);
+       acpi_video_bus_remove_fs(device);
+ err_free_video:
+       kfree(video);
+       acpi_driver_data(device) = NULL;
 
-       return result;
+       return error;
 }
 
 static int acpi_video_bus_remove(struct acpi_device *device, int type)
index ed9b407e42d4ec3f7112a4b763b217085511e5d1..54f38c21dd9585e90f6a931fb6bb516eaf7af3c1 100644 (file)
@@ -193,6 +193,8 @@ enum {
                                          ATA_FLAG_ACPI_SATA | ATA_FLAG_AN |
                                          ATA_FLAG_IPM,
        AHCI_LFLAG_COMMON               = ATA_LFLAG_SKIP_D2H_BSY,
+
+       ICH_MAP                         = 0x90, /* ICH MAP register */
 };
 
 struct ahci_cmd_hdr {
@@ -536,6 +538,10 @@ static const struct pci_device_id ahci_pci_tbl[] = {
        { PCI_VDEVICE(NVIDIA, 0x0ad9), board_ahci },            /* MCP77 */
        { PCI_VDEVICE(NVIDIA, 0x0ada), board_ahci },            /* MCP77 */
        { PCI_VDEVICE(NVIDIA, 0x0adb), board_ahci },            /* MCP77 */
+       { PCI_VDEVICE(NVIDIA, 0x0ab4), board_ahci },            /* MCP79 */
+       { PCI_VDEVICE(NVIDIA, 0x0ab5), board_ahci },            /* MCP79 */
+       { PCI_VDEVICE(NVIDIA, 0x0ab6), board_ahci },            /* MCP79 */
+       { PCI_VDEVICE(NVIDIA, 0x0ab7), board_ahci },            /* MCP79 */
        { PCI_VDEVICE(NVIDIA, 0x0ab8), board_ahci },            /* MCP79 */
        { PCI_VDEVICE(NVIDIA, 0x0ab9), board_ahci },            /* MCP79 */
        { PCI_VDEVICE(NVIDIA, 0x0aba), board_ahci },            /* MCP79 */
@@ -1267,9 +1273,9 @@ static int ahci_do_softreset(struct ata_link *link, unsigned int *class,
 
        /* prepare for SRST (AHCI-1.1 10.4.1) */
        rc = ahci_kick_engine(ap, 1);
-       if (rc)
+       if (rc && rc != -EOPNOTSUPP)
                ata_link_printk(link, KERN_WARNING,
-                               "failed to reset engine (errno=%d)", rc);
+                               "failed to reset engine (errno=%d)\n", rc);
 
        ata_tf_init(link->device, &tf);
 
@@ -1634,7 +1640,7 @@ static void ahci_port_intr(struct ata_port *ap)
        struct ahci_host_priv *hpriv = ap->host->private_data;
        int resetting = !!(ap->pflags & ATA_PFLAG_RESETTING);
        u32 status, qc_active;
-       int rc, known_irq = 0;
+       int rc;
 
        status = readl(port_mmio + PORT_IRQ_STAT);
        writel(status, port_mmio + PORT_IRQ_STAT);
@@ -1692,80 +1698,12 @@ static void ahci_port_intr(struct ata_port *ap)
 
        rc = ata_qc_complete_multiple(ap, qc_active, NULL);
 
-       /* If resetting, spurious or invalid completions are expected,
-        * return unconditionally.
-        */
-       if (resetting)
-               return;
-
-       if (rc > 0)
-               return;
-       if (rc < 0) {
+       /* while resetting, invalid completions are expected */
+       if (unlikely(rc < 0 && !resetting)) {
                ehi->err_mask |= AC_ERR_HSM;
                ehi->action |= ATA_EH_SOFTRESET;
                ata_port_freeze(ap);
-               return;
        }
-
-       /* hmmm... a spurious interrupt */
-
-       /* if !NCQ, ignore.  No modern ATA device has broken HSM
-        * implementation for non-NCQ commands.
-        */
-       if (!ap->link.sactive)
-               return;
-
-       if (status & PORT_IRQ_D2H_REG_FIS) {
-               if (!pp->ncq_saw_d2h)
-                       ata_port_printk(ap, KERN_INFO,
-                               "D2H reg with I during NCQ, "
-                               "this message won't be printed again\n");
-               pp->ncq_saw_d2h = 1;
-               known_irq = 1;
-       }
-
-       if (status & PORT_IRQ_DMAS_FIS) {
-               if (!pp->ncq_saw_dmas)
-                       ata_port_printk(ap, KERN_INFO,
-                               "DMAS FIS during NCQ, "
-                               "this message won't be printed again\n");
-               pp->ncq_saw_dmas = 1;
-               known_irq = 1;
-       }
-
-       if (status & PORT_IRQ_SDB_FIS) {
-               const __le32 *f = pp->rx_fis + RX_FIS_SDB;
-
-               if (le32_to_cpu(f[1])) {
-                       /* SDB FIS containing spurious completions
-                        * might be dangerous, whine and fail commands
-                        * with HSM violation.  EH will turn off NCQ
-                        * after several such failures.
-                        */
-                       ata_ehi_push_desc(ehi,
-                               "spurious completions during NCQ "
-                               "issue=0x%x SAct=0x%x FIS=%08x:%08x",
-                               readl(port_mmio + PORT_CMD_ISSUE),
-                               readl(port_mmio + PORT_SCR_ACT),
-                               le32_to_cpu(f[0]), le32_to_cpu(f[1]));
-                       ehi->err_mask |= AC_ERR_HSM;
-                       ehi->action |= ATA_EH_SOFTRESET;
-                       ata_port_freeze(ap);
-               } else {
-                       if (!pp->ncq_saw_sdb)
-                               ata_port_printk(ap, KERN_INFO,
-                                       "spurious SDB FIS %08x:%08x during NCQ, "
-                                       "this message won't be printed again\n",
-                                       le32_to_cpu(f[0]), le32_to_cpu(f[1]));
-                       pp->ncq_saw_sdb = 1;
-               }
-               known_irq = 1;
-       }
-
-       if (!known_irq)
-               ata_port_printk(ap, KERN_INFO, "spurious interrupt "
-                               "(irq_stat 0x%x active_tag 0x%x sactive 0x%x)\n",
-                               status, ap->link.active_tag, ap->link.sactive);
 }
 
 static void ahci_irq_clear(struct ata_port *ap)
@@ -2269,6 +2207,22 @@ static int ahci_init_one(struct pci_dev *pdev, const struct pci_device_id *ent)
        if (rc)
                return rc;
 
+       if (pdev->vendor == PCI_VENDOR_ID_INTEL &&
+           (pdev->device == 0x2652 || pdev->device == 0x2653)) {
+               u8 map;
+
+               /* ICH6s share the same PCI ID for both piix and ahci
+                * modes.  Enabling ahci mode while MAP indicates
+                * combined mode is a bad idea.  Yield to ata_piix.
+                */
+               pci_read_config_byte(pdev, ICH_MAP, &map);
+               if (map & 0x3) {
+                       dev_printk(KERN_INFO, &pdev->dev, "controller is in "
+                                  "combined mode, can't enable AHCI mode\n");
+                       return -ENODEV;
+               }
+       }
+
        hpriv = devm_kzalloc(dev, sizeof(*hpriv), GFP_KERNEL);
        if (!hpriv)
                return -ENOMEM;
index 328ce8a08426a9b626d05cd62703fed60414ab64..bb62a588f489c566f5ae7d8d27158dd8eae6b341 100644 (file)
@@ -119,18 +119,19 @@ enum {
        PIIX_80C_SEC            = (1 << 7) | (1 << 6),
 
        /* controller IDs */
-       piix_pata_33            = 0,    /* PIIX4 at 33Mhz */
-       ich_pata_33             = 1,    /* ICH up to UDMA 33 only */
-       ich_pata_66             = 2,    /* ICH up to 66 Mhz */
-       ich_pata_100            = 3,    /* ICH up to UDMA 100 */
-       ich5_sata               = 5,
-       ich6_sata               = 6,
-       ich6_sata_ahci          = 7,
-       ich6m_sata_ahci         = 8,
-       ich8_sata_ahci          = 9,
-       piix_pata_mwdma         = 10,   /* PIIX3 MWDMA only */
-       tolapai_sata_ahci       = 11,
-       ich9_2port_sata         = 12,
+       piix_pata_mwdma         = 0,    /* PIIX3 MWDMA only */
+       piix_pata_33,                   /* PIIX4 at 33Mhz */
+       ich_pata_33,                    /* ICH up to UDMA 33 only */
+       ich_pata_66,                    /* ICH up to 66 Mhz */
+       ich_pata_100,                   /* ICH up to UDMA 100 */
+       ich5_sata,
+       ich6_sata,
+       ich6_sata_ahci,
+       ich6m_sata_ahci,
+       ich8_sata_ahci,
+       ich8_2port_sata,
+       ich8m_apple_sata_ahci,          /* locks up on second port enable */
+       tolapai_sata_ahci,
 
        /* constants for mapping table */
        P0                      = 0,  /* port 0 */
@@ -239,19 +240,21 @@ static const struct pci_device_id piix_pci_tbl[] = {
        /* SATA Controller 1 IDE (ICH8) */
        { 0x8086, 0x2820, PCI_ANY_ID, PCI_ANY_ID, 0, 0, ich8_sata_ahci },
        /* SATA Controller 2 IDE (ICH8) */
-       { 0x8086, 0x2825, PCI_ANY_ID, PCI_ANY_ID, 0, 0, ich9_2port_sata },
+       { 0x8086, 0x2825, PCI_ANY_ID, PCI_ANY_ID, 0, 0, ich8_2port_sata },
        /* Mobile SATA Controller IDE (ICH8M) */
        { 0x8086, 0x2828, PCI_ANY_ID, PCI_ANY_ID, 0, 0, ich8_sata_ahci },
+       /* Mobile SATA Controller IDE (ICH8M), Apple */
+       { 0x8086, 0x2828, 0x106b, 0x00a0, 0, 0, ich8m_apple_sata_ahci },
        /* SATA Controller IDE (ICH9) */
        { 0x8086, 0x2920, PCI_ANY_ID, PCI_ANY_ID, 0, 0, ich8_sata_ahci },
        /* SATA Controller IDE (ICH9) */
-       { 0x8086, 0x2921, PCI_ANY_ID, PCI_ANY_ID, 0, 0, ich9_2port_sata },
+       { 0x8086, 0x2921, PCI_ANY_ID, PCI_ANY_ID, 0, 0, ich8_2port_sata },
        /* SATA Controller IDE (ICH9) */
-       { 0x8086, 0x2926, PCI_ANY_ID, PCI_ANY_ID, 0, 0, ich9_2port_sata },
+       { 0x8086, 0x2926, PCI_ANY_ID, PCI_ANY_ID, 0, 0, ich8_2port_sata },
        /* SATA Controller IDE (ICH9M) */
-       { 0x8086, 0x2928, PCI_ANY_ID, PCI_ANY_ID, 0, 0, ich9_2port_sata },
+       { 0x8086, 0x2928, PCI_ANY_ID, PCI_ANY_ID, 0, 0, ich8_2port_sata },
        /* SATA Controller IDE (ICH9M) */
-       { 0x8086, 0x292d, PCI_ANY_ID, PCI_ANY_ID, 0, 0, ich9_2port_sata },
+       { 0x8086, 0x292d, PCI_ANY_ID, PCI_ANY_ID, 0, 0, ich8_2port_sata },
        /* SATA Controller IDE (ICH9M) */
        { 0x8086, 0x292e, PCI_ANY_ID, PCI_ANY_ID, 0, 0, ich8_sata_ahci },
        /* SATA Controller IDE (Tolapai) */
@@ -427,7 +430,7 @@ static const struct piix_map_db ich6m_map_db = {
 
 static const struct piix_map_db ich8_map_db = {
        .mask = 0x3,
-       .port_enable = 0x3,
+       .port_enable = 0xf,
        .map = {
                /* PM   PS   SM   SS       MAP */
                {  P0,  P2,  P1,  P3 }, /* 00b (hardwired when in AHCI) */
@@ -437,7 +440,7 @@ static const struct piix_map_db ich8_map_db = {
        },
 };
 
-static const struct piix_map_db tolapai_map_db = {
+static const struct piix_map_db ich8_2port_map_db = {
        .mask = 0x3,
        .port_enable = 0x3,
        .map = {
@@ -449,7 +452,19 @@ static const struct piix_map_db tolapai_map_db = {
        },
 };
 
-static const struct piix_map_db ich9_2port_map_db = {
+static const struct piix_map_db ich8m_apple_map_db = {
+       .mask = 0x3,
+       .port_enable = 0x1,
+       .map = {
+               /* PM   PS   SM   SS       MAP */
+               {  P0,  NA,  NA,  NA }, /* 00b */
+               {  RV,  RV,  RV,  RV },
+               {  P0,  P2, IDE, IDE }, /* 10b */
+               {  RV,  RV,  RV,  RV },
+       },
+};
+
+static const struct piix_map_db tolapai_map_db = {
        .mask = 0x3,
        .port_enable = 0x3,
        .map = {
@@ -467,11 +482,21 @@ static const struct piix_map_db *piix_map_db_table[] = {
        [ich6_sata_ahci]        = &ich6_map_db,
        [ich6m_sata_ahci]       = &ich6m_map_db,
        [ich8_sata_ahci]        = &ich8_map_db,
+       [ich8_2port_sata]       = &ich8_2port_map_db,
+       [ich8m_apple_sata_ahci] = &ich8m_apple_map_db,
        [tolapai_sata_ahci]     = &tolapai_map_db,
-       [ich9_2port_sata]       = &ich9_2port_map_db,
 };
 
 static struct ata_port_info piix_port_info[] = {
+       [piix_pata_mwdma] =     /* PIIX3 MWDMA only */
+       {
+               .sht            = &piix_sht,
+               .flags          = PIIX_PATA_FLAGS,
+               .pio_mask       = 0x1f, /* pio0-4 */
+               .mwdma_mask     = 0x06, /* mwdma1-2 ?? CHECK 0 should be ok but slow */
+               .port_ops       = &piix_pata_ops,
+       },
+
        [piix_pata_33] =        /* PIIX4 at 33MHz */
        {
                .sht            = &piix_sht,
@@ -565,13 +590,15 @@ static struct ata_port_info piix_port_info[] = {
                .port_ops       = &piix_sata_ops,
        },
 
-       [piix_pata_mwdma] =     /* PIIX3 MWDMA only */
+       [ich8_2port_sata] =
        {
                .sht            = &piix_sht,
-               .flags          = PIIX_PATA_FLAGS,
+               .flags          = PIIX_SATA_FLAGS | PIIX_FLAG_SCR |
+                                 PIIX_FLAG_AHCI,
                .pio_mask       = 0x1f, /* pio0-4 */
-               .mwdma_mask     = 0x06, /* mwdma1-2 ?? CHECK 0 should be ok but slow */
-               .port_ops       = &piix_pata_ops,
+               .mwdma_mask     = 0x07, /* mwdma0-2 */
+               .udma_mask      = ATA_UDMA6,
+               .port_ops       = &piix_sata_ops,
        },
 
        [tolapai_sata_ahci] =
@@ -585,7 +612,7 @@ static struct ata_port_info piix_port_info[] = {
                .port_ops       = &piix_sata_ops,
        },
 
-       [ich9_2port_sata] =
+       [ich8m_apple_sata_ahci] =
        {
                .sht            = &piix_sht,
                .flags          = PIIX_SATA_FLAGS | PIIX_FLAG_SCR |
@@ -595,6 +622,7 @@ static struct ata_port_info piix_port_info[] = {
                .udma_mask      = ATA_UDMA6,
                .port_ops       = &piix_sata_ops,
        },
+
 };
 
 static struct pci_bits piix_enable_bits[] = {
@@ -938,6 +966,20 @@ static int piix_broken_suspend(void)
                                DMI_MATCH(DMI_PRODUCT_NAME, "TECRA M3"),
                        },
                },
+               {
+                       .ident = "TECRA M3",
+                       .matches = {
+                               DMI_MATCH(DMI_SYS_VENDOR, "TOSHIBA"),
+                               DMI_MATCH(DMI_PRODUCT_NAME, "Tecra M3"),
+                       },
+               },
+               {
+                       .ident = "TECRA M4",
+                       .matches = {
+                               DMI_MATCH(DMI_SYS_VENDOR, "TOSHIBA"),
+                               DMI_MATCH(DMI_PRODUCT_NAME, "Tecra M4"),
+                       },
+               },
                {
                        .ident = "TECRA M5",
                        .matches = {
@@ -952,6 +994,20 @@ static int piix_broken_suspend(void)
                                DMI_MATCH(DMI_PRODUCT_NAME, "TECRA M7"),
                        },
                },
+               {
+                       .ident = "TECRA A8",
+                       .matches = {
+                               DMI_MATCH(DMI_SYS_VENDOR, "TOSHIBA"),
+                               DMI_MATCH(DMI_PRODUCT_NAME, "TECRA A8"),
+                       },
+               },
+               {
+                       .ident = "Satellite R25",
+                       .matches = {
+                               DMI_MATCH(DMI_SYS_VENDOR, "TOSHIBA"),
+                               DMI_MATCH(DMI_PRODUCT_NAME, "Satellite R25"),
+                       },
+               },
                {
                        .ident = "Satellite U200",
                        .matches = {
@@ -959,6 +1015,13 @@ static int piix_broken_suspend(void)
                                DMI_MATCH(DMI_PRODUCT_NAME, "Satellite U200"),
                        },
                },
+               {
+                       .ident = "Satellite U200",
+                       .matches = {
+                               DMI_MATCH(DMI_SYS_VENDOR, "TOSHIBA"),
+                               DMI_MATCH(DMI_PRODUCT_NAME, "SATELLITE U200"),
+                       },
+               },
                {
                        .ident = "Satellite Pro U200",
                        .matches = {
@@ -973,6 +1036,13 @@ static int piix_broken_suspend(void)
                                DMI_MATCH(DMI_PRODUCT_NAME, "Satellite U205"),
                        },
                },
+               {
+                       .ident = "SATELLITE U205",
+                       .matches = {
+                               DMI_MATCH(DMI_SYS_VENDOR, "TOSHIBA"),
+                               DMI_MATCH(DMI_PRODUCT_NAME, "SATELLITE U205"),
+                       },
+               },
                {
                        .ident = "Portege M500",
                        .matches = {
@@ -1086,12 +1156,12 @@ static int piix_disable_ahci(struct pci_dev *pdev)
        if (!mmio)
                return -ENOMEM;
 
-       tmp = readl(mmio + AHCI_GLOBAL_CTL);
+       tmp = ioread32(mmio + AHCI_GLOBAL_CTL);
        if (tmp & AHCI_ENABLE) {
                tmp &= ~AHCI_ENABLE;
-               writel(tmp, mmio + AHCI_GLOBAL_CTL);
+               iowrite32(tmp, mmio + AHCI_GLOBAL_CTL);
 
-               tmp = readl(mmio + AHCI_GLOBAL_CTL);
+               tmp = ioread32(mmio + AHCI_GLOBAL_CTL);
                if (tmp & AHCI_ENABLE)
                        rc = -EIO;
        }
index 81898036dbcaa8badff43fb0a95089a5c3402164..e4dea8623a718675f72178fb03c24a3d6ab2837d 100644 (file)
  *  Hardware documentation available from http://www.t13.org/ and
  *  http://www.sata-io.org/
  *
+ *  Standards documents from:
+ *     http://www.t13.org (ATA standards, PCI DMA IDE spec)
+ *     http://www.t10.org (SCSI MMC - for ATAPI MMC)
+ *     http://www.sata-io.org (SATA)
+ *     http://www.compactflash.org (CF)
+ *     http://www.qic.org (QIC157 - Tape and DSC)
+ *     http://www.ce-ata.org (CE-ATA: not supported)
+ *
  */
 
 #include <linux/kernel.h>
@@ -2307,8 +2315,10 @@ int ata_dev_configure(struct ata_device *dev)
        }
 
        if ((dev->class == ATA_DEV_ATAPI) &&
-           (atapi_command_packet_set(id) == TYPE_TAPE))
+           (atapi_command_packet_set(id) == TYPE_TAPE)) {
                dev->max_sectors = ATA_MAX_SECTORS_TAPE;
+               dev->horkage |= ATA_HORKAGE_STUCK_ERR;
+       }
 
        if (dev->horkage & ATA_HORKAGE_MAX_SEC_128)
                dev->max_sectors = min_t(unsigned int, ATA_MAX_SECTORS_128,
@@ -2580,81 +2590,6 @@ void sata_print_link_status(struct ata_link *link)
        }
 }
 
-/**
- *     __sata_phy_reset - Wake/reset a low-level SATA PHY
- *     @ap: SATA port associated with target SATA PHY.
- *
- *     This function issues commands to standard SATA Sxxx
- *     PHY registers, to wake up the phy (and device), and
- *     clear any reset condition.
- *
- *     LOCKING:
- *     PCI/etc. bus probe sem.
- *
- */
-void __sata_phy_reset(struct ata_port *ap)
-{
-       struct ata_link *link = &ap->link;
-       unsigned long timeout = jiffies + (HZ * 5);
-       u32 sstatus;
-
-       if (ap->flags & ATA_FLAG_SATA_RESET) {
-               /* issue phy wake/reset */
-               sata_scr_write_flush(link, SCR_CONTROL, 0x301);
-               /* Couldn't find anything in SATA I/II specs, but
-                * AHCI-1.1 10.4.2 says at least 1 ms. */
-               mdelay(1);
-       }
-       /* phy wake/clear reset */
-       sata_scr_write_flush(link, SCR_CONTROL, 0x300);
-
-       /* wait for phy to become ready, if necessary */
-       do {
-               msleep(200);
-               sata_scr_read(link, SCR_STATUS, &sstatus);
-               if ((sstatus & 0xf) != 1)
-                       break;
-       } while (time_before(jiffies, timeout));
-
-       /* print link status */
-       sata_print_link_status(link);
-
-       /* TODO: phy layer with polling, timeouts, etc. */
-       if (!ata_link_offline(link))
-               ata_port_probe(ap);
-       else
-               ata_port_disable(ap);
-
-       if (ap->flags & ATA_FLAG_DISABLED)
-               return;
-
-       if (ata_busy_sleep(ap, ATA_TMOUT_BOOT_QUICK, ATA_TMOUT_BOOT)) {
-               ata_port_disable(ap);
-               return;
-       }
-
-       ap->cbl = ATA_CBL_SATA;
-}
-
-/**
- *     sata_phy_reset - Reset SATA bus.
- *     @ap: SATA port associated with target SATA PHY.
- *
- *     This function resets the SATA bus, and then probes
- *     the bus for devices.
- *
- *     LOCKING:
- *     PCI/etc. bus probe sem.
- *
- */
-void sata_phy_reset(struct ata_port *ap)
-{
-       __sata_phy_reset(ap);
-       if (ap->flags & ATA_FLAG_DISABLED)
-               return;
-       ata_bus_reset(ap);
-}
-
 /**
  *     ata_dev_pair            -       return other device on cable
  *     @adev: device
@@ -4205,6 +4140,7 @@ static const struct ata_blacklist_entry ata_device_blacklist [] = {
        /* Devices where NCQ should be avoided */
        /* NCQ is slow */
        { "WDC WD740ADFD-00",   NULL,           ATA_HORKAGE_NONCQ },
+       { "WDC WD740ADFD-00NLR1", NULL,         ATA_HORKAGE_NONCQ, },
        /* http://thread.gmane.org/gmane.linux.ide/14907 */
        { "FUJITSU MHT2060BH",  NULL,           ATA_HORKAGE_NONCQ },
        /* NCQ is broken */
@@ -4219,23 +4155,6 @@ static const struct ata_blacklist_entry ata_device_blacklist [] = {
        { "HTS541060G9SA00",    "MB3OC60D",     ATA_HORKAGE_NONCQ, },
        { "HTS541080G9SA00",    "MB4OC60D",     ATA_HORKAGE_NONCQ, },
        { "HTS541010G9SA00",    "MBZOC60D",     ATA_HORKAGE_NONCQ, },
-       /* Drives which do spurious command completion */
-       { "HTS541680J9SA00",    "SB2IC7EP",     ATA_HORKAGE_NONCQ, },
-       { "HTS541612J9SA00",    "SBDIC7JP",     ATA_HORKAGE_NONCQ, },
-       { "HDT722516DLA380",    "V43OA96A",     ATA_HORKAGE_NONCQ, },
-       { "Hitachi HTS541616J9SA00", "SB4OC70P", ATA_HORKAGE_NONCQ, },
-       { "Hitachi HTS542525K9SA00", "BBFOC31P", ATA_HORKAGE_NONCQ, },
-       { "WDC WD740ADFD-00NLR1", NULL,         ATA_HORKAGE_NONCQ, },
-       { "WDC WD3200AAJS-00RYA0", "12.01B01",  ATA_HORKAGE_NONCQ, },
-       { "FUJITSU MHV2080BH",  "00840028",     ATA_HORKAGE_NONCQ, },
-       { "ST9120822AS",        "3.CLF",        ATA_HORKAGE_NONCQ, },
-       { "ST9160821AS",        "3.CLF",        ATA_HORKAGE_NONCQ, },
-       { "ST9160821AS",        "3.ALD",        ATA_HORKAGE_NONCQ, },
-       { "ST9160821AS",        "3.CCD",        ATA_HORKAGE_NONCQ, },
-       { "ST3160812AS",        "3.ADJ",        ATA_HORKAGE_NONCQ, },
-       { "ST980813AS",         "3.ADB",        ATA_HORKAGE_NONCQ, },
-       { "SAMSUNG HD401LJ",    "ZZ100-15",     ATA_HORKAGE_NONCQ, },
-       { "Maxtor 7V300F0",     "VA111900",     ATA_HORKAGE_NONCQ, },
 
        /* devices which puke on READ_NATIVE_MAX */
        { "HDS724040KLSA80",    "KFAOA20N",     ATA_HORKAGE_BROKEN_HPA, },
@@ -4250,6 +4169,9 @@ static const struct ata_blacklist_entry ata_device_blacklist [] = {
        /* Devices which get the IVB wrong */
        { "QUANTUM FIREBALLlct10 05", "A03.0900", ATA_HORKAGE_IVB, },
        { "TSSTcorp CDDVDW SH-S202J", "SB00",     ATA_HORKAGE_IVB, },
+       { "TSSTcorp CDDVDW SH-S202J", "SB01",     ATA_HORKAGE_IVB, },
+       { "TSSTcorp CDDVDW SH-S202N", "SB00",     ATA_HORKAGE_IVB, },
+       { "TSSTcorp CDDVDW SH-S202N", "SB01",     ATA_HORKAGE_IVB, },
 
        /* End Marker */
        { }
@@ -5490,11 +5412,19 @@ fsm_start:
                 * let the EH abort the command or reset the device.
                 */
                if (unlikely(status & (ATA_ERR | ATA_DF))) {
-                       ata_port_printk(ap, KERN_WARNING, "DRQ=1 with device "
-                                       "error, dev_stat 0x%X\n", status);
-                       qc->err_mask |= AC_ERR_HSM;
-                       ap->hsm_task_state = HSM_ST_ERR;
-                       goto fsm_start;
+                       /* Some ATAPI tape drives forget to clear the ERR bit
+                        * when doing the next command (mostly request sense).
+                        * We ignore ERR here to workaround and proceed sending
+                        * the CDB.
+                        */
+                       if (!(qc->dev->horkage & ATA_HORKAGE_STUCK_ERR)) {
+                               ata_port_printk(ap, KERN_WARNING,
+                                               "DRQ=1 with device error, "
+                                               "dev_stat 0x%X\n", status);
+                               qc->err_mask |= AC_ERR_HSM;
+                               ap->hsm_task_state = HSM_ST_ERR;
+                               goto fsm_start;
+                       }
                }
 
                /* Send the CDB (atapi) or the first data block (ata pio out).
@@ -7021,12 +6951,11 @@ int ata_host_start(struct ata_host *host)
                if (ap->ops->port_start) {
                        rc = ap->ops->port_start(ap);
                        if (rc) {
-                               ata_port_printk(ap, KERN_ERR, "failed to "
-                                               "start port (errno=%d)\n", rc);
+                               if (rc != -ENODEV)
+                                       dev_printk(KERN_ERR, host->dev, "failed to start port %d (errno=%d)\n", i, rc);
                                goto err_out;
                        }
                }
-
                ata_eh_freeze_port(ap);
        }
 
@@ -7653,8 +7582,6 @@ EXPORT_SYMBOL_GPL(ata_dev_disable);
 EXPORT_SYMBOL_GPL(sata_set_spd);
 EXPORT_SYMBOL_GPL(sata_link_debounce);
 EXPORT_SYMBOL_GPL(sata_link_resume);
-EXPORT_SYMBOL_GPL(sata_phy_reset);
-EXPORT_SYMBOL_GPL(__sata_phy_reset);
 EXPORT_SYMBOL_GPL(ata_bus_reset);
 EXPORT_SYMBOL_GPL(ata_std_prereset);
 EXPORT_SYMBOL_GPL(ata_std_softreset);
@@ -7725,7 +7652,6 @@ EXPORT_SYMBOL_GPL(ata_port_desc);
 #ifdef CONFIG_PCI
 EXPORT_SYMBOL_GPL(ata_port_pbar_desc);
 #endif /* CONFIG_PCI */
-EXPORT_SYMBOL_GPL(ata_eng_timeout);
 EXPORT_SYMBOL_GPL(ata_port_schedule_eh);
 EXPORT_SYMBOL_GPL(ata_link_abort);
 EXPORT_SYMBOL_GPL(ata_port_abort);
index ed8813b222a0219e98536bb6fc49495e95cc37e7..e6605f0386477f7f41fc4821debb11b0191fb9b6 100644 (file)
@@ -559,101 +559,6 @@ void ata_port_wait_eh(struct ata_port *ap)
        }
 }
 
-/**
- *     ata_qc_timeout - Handle timeout of queued command
- *     @qc: Command that timed out
- *
- *     Some part of the kernel (currently, only the SCSI layer)
- *     has noticed that the active command on port @ap has not
- *     completed after a specified length of time.  Handle this
- *     condition by disabling DMA (if necessary) and completing
- *     transactions, with error if necessary.
- *
- *     This also handles the case of the "lost interrupt", where
- *     for some reason (possibly hardware bug, possibly driver bug)
- *     an interrupt was not delivered to the driver, even though the
- *     transaction completed successfully.
- *
- *     TODO: kill this function once old EH is gone.
- *
- *     LOCKING:
- *     Inherited from SCSI layer (none, can sleep)
- */
-static void ata_qc_timeout(struct ata_queued_cmd *qc)
-{
-       struct ata_port *ap = qc->ap;
-       u8 host_stat = 0, drv_stat;
-       unsigned long flags;
-
-       DPRINTK("ENTER\n");
-
-       ap->hsm_task_state = HSM_ST_IDLE;
-
-       spin_lock_irqsave(ap->lock, flags);
-
-       switch (qc->tf.protocol) {
-
-       case ATA_PROT_DMA:
-       case ATA_PROT_ATAPI_DMA:
-               host_stat = ap->ops->bmdma_status(ap);
-
-               /* before we do anything else, clear DMA-Start bit */
-               ap->ops->bmdma_stop(qc);
-
-               /* fall through */
-
-       default:
-               ata_altstatus(ap);
-               drv_stat = ata_chk_status(ap);
-
-               /* ack bmdma irq events */
-               ap->ops->irq_clear(ap);
-
-               ata_dev_printk(qc->dev, KERN_ERR, "command 0x%x timeout, "
-                              "stat 0x%x host_stat 0x%x\n",
-                              qc->tf.command, drv_stat, host_stat);
-
-               /* complete taskfile transaction */
-               qc->err_mask |= AC_ERR_TIMEOUT;
-               break;
-       }
-
-       spin_unlock_irqrestore(ap->lock, flags);
-
-       ata_eh_qc_complete(qc);
-
-       DPRINTK("EXIT\n");
-}
-
-/**
- *     ata_eng_timeout - Handle timeout of queued command
- *     @ap: Port on which timed-out command is active
- *
- *     Some part of the kernel (currently, only the SCSI layer)
- *     has noticed that the active command on port @ap has not
- *     completed after a specified length of time.  Handle this
- *     condition by disabling DMA (if necessary) and completing
- *     transactions, with error if necessary.
- *
- *     This also handles the case of the "lost interrupt", where
- *     for some reason (possibly hardware bug, possibly driver bug)
- *     an interrupt was not delivered to the driver, even though the
- *     transaction completed successfully.
- *
- *     TODO: kill this function once old EH is gone.
- *
- *     LOCKING:
- *     Inherited from SCSI layer (none, can sleep)
- */
-void ata_eng_timeout(struct ata_port *ap)
-{
-       DPRINTK("ENTER\n");
-
-       ata_qc_timeout(ata_qc_from_tag(ap, ap->link.active_tag));
-
-       DPRINTK("EXIT\n");
-}
-
 static int ata_eh_nr_in_flight(struct ata_port *ap)
 {
        unsigned int tag;
@@ -1945,30 +1850,54 @@ static void ata_eh_link_report(struct ata_link *link)
                  ehc->i.serror & SERR_DEV_XCHG ? "DevExch " : "");
 
        for (tag = 0; tag < ATA_MAX_QUEUE; tag++) {
-               static const char *dma_str[] = {
-                       [DMA_BIDIRECTIONAL]     = "bidi",
-                       [DMA_TO_DEVICE]         = "out",
-                       [DMA_FROM_DEVICE]       = "in",
-                       [DMA_NONE]              = "",
-               };
                struct ata_queued_cmd *qc = __ata_qc_from_tag(ap, tag);
                struct ata_taskfile *cmd = &qc->tf, *res = &qc->result_tf;
+               const u8 *cdb = qc->cdb;
+               char data_buf[20] = "";
+               char cdb_buf[70] = "";
 
                if (!(qc->flags & ATA_QCFLAG_FAILED) ||
                    qc->dev->link != link || !qc->err_mask)
                        continue;
 
+               if (qc->dma_dir != DMA_NONE) {
+                       static const char *dma_str[] = {
+                               [DMA_BIDIRECTIONAL]     = "bidi",
+                               [DMA_TO_DEVICE]         = "out",
+                               [DMA_FROM_DEVICE]       = "in",
+                       };
+                       static const char *prot_str[] = {
+                               [ATA_PROT_PIO]          = "pio",
+                               [ATA_PROT_DMA]          = "dma",
+                               [ATA_PROT_NCQ]          = "ncq",
+                               [ATA_PROT_ATAPI]        = "pio",
+                               [ATA_PROT_ATAPI_DMA]    = "dma",
+                       };
+
+                       snprintf(data_buf, sizeof(data_buf), " %s %u %s",
+                                prot_str[qc->tf.protocol], qc->nbytes,
+                                dma_str[qc->dma_dir]);
+               }
+
+               if (is_atapi_taskfile(&qc->tf))
+                       snprintf(cdb_buf, sizeof(cdb_buf),
+                                "cdb %02x %02x %02x %02x %02x %02x %02x %02x  "
+                                "%02x %02x %02x %02x %02x %02x %02x %02x\n         ",
+                                cdb[0], cdb[1], cdb[2], cdb[3],
+                                cdb[4], cdb[5], cdb[6], cdb[7],
+                                cdb[8], cdb[9], cdb[10], cdb[11],
+                                cdb[12], cdb[13], cdb[14], cdb[15]);
+
                ata_dev_printk(qc->dev, KERN_ERR,
                        "cmd %02x/%02x:%02x:%02x:%02x:%02x/%02x:%02x:%02x:%02x:%02x/%02x "
-                       "tag %d cdb 0x%x data %u %s\n         "
+                       "tag %d%s\n         %s"
                        "res %02x/%02x:%02x:%02x:%02x:%02x/%02x:%02x:%02x:%02x:%02x/%02x "
                        "Emask 0x%x (%s)%s\n",
                        cmd->command, cmd->feature, cmd->nsect,
                        cmd->lbal, cmd->lbam, cmd->lbah,
                        cmd->hob_feature, cmd->hob_nsect,
                        cmd->hob_lbal, cmd->hob_lbam, cmd->hob_lbah,
-                       cmd->device, qc->tag, qc->cdb[0], qc->nbytes,
-                       dma_str[qc->dma_dir],
+                       cmd->device, qc->tag, data_buf, cdb_buf,
                        res->command, res->feature, res->nsect,
                        res->lbal, res->lbam, res->lbah,
                        res->hob_feature, res->hob_nsect,
index 94144ed50a6bd2cd6def54983ccf08b52ada97fd..a883bb03d4c7762dc21605974740c3ff4014ae49 100644 (file)
@@ -2485,11 +2485,40 @@ static unsigned int atapi_xlat(struct ata_queued_cmd *qc)
        if (!using_pio && ata_check_atapi_dma(qc))
                using_pio = 1;
 
-       /* Some controller variants snoop this value for Packet transfers
-          to do state machine and FIFO management. Thus we want to set it
-          properly, and for DMA where it is effectively meaningless */
+       /* Some controller variants snoop this value for Packet
+        * transfers to do state machine and FIFO management.  Thus we
+        * want to set it properly, and for DMA where it is
+        * effectively meaningless.
+        */
        nbytes = min(qc->nbytes, (unsigned int)63 * 1024);
 
+       /* Most ATAPI devices which honor transfer chunk size don't
+        * behave according to the spec when odd chunk size which
+        * matches the transfer length is specified.  If the number of
+        * bytes to transfer is 2n+1.  According to the spec, what
+        * should happen is to indicate that 2n+1 is going to be
+        * transferred and transfer 2n+2 bytes where the last byte is
+        * padding.
+        *
+        * In practice, this doesn't happen.  ATAPI devices first
+        * indicate and transfer 2n bytes and then indicate and
+        * transfer 2 bytes where the last byte is padding.
+        *
+        * This inconsistency confuses several controllers which
+        * perform PIO using DMA such as Intel AHCIs and sil3124/32.
+        * These controllers use actual number of transferred bytes to
+        * update DMA poitner and transfer of 4n+2 bytes make those
+        * controller push DMA pointer by 4n+4 bytes because SATA data
+        * FISes are aligned to 4 bytes.  This causes data corruption
+        * and buffer overrun.
+        *
+        * Always setting nbytes to even number solves this problem
+        * because then ATAPI devices don't have to split data at 2n
+        * boundaries.
+        */
+       if (nbytes & 0x1)
+               nbytes++;
+
        qc->tf.lbam = (nbytes & 0xFF);
        qc->tf.lbah = (nbytes >> 8);
 
@@ -2869,7 +2898,8 @@ static inline int __ata_scsi_queuecmd(struct scsi_cmnd *scmd,
                xlat_func = NULL;
                if (likely((scsi_op != ATA_16) || !atapi_passthru16)) {
                        /* relay SCSI command to ATAPI device */
-                       if (unlikely(scmd->cmd_len > dev->cdb_len))
+                       int len = COMMAND_SIZE(scsi_op);
+                       if (unlikely(len > scmd->cmd_len || len > dev->cdb_len))
                                goto bad_cdb_len;
 
                        xlat_func = atapi_xlat;
index 364534e7aff4522105d1c043502e15da2ddfa1d3..8caf9afc8b905061097d10fedbd4627cabc88084 100644 (file)
@@ -63,6 +63,9 @@ static int ali_cable_override(struct pci_dev *pdev)
        /* Fujitsu P2000 */
        if (pdev->subsystem_vendor == 0x10CF && pdev->subsystem_device == 0x10AF)
                return 1;
+       /* Mitac 8317 (Winbook-A) and relatives */
+       if (pdev->subsystem_vendor == 0x1071  && pdev->subsystem_device == 0x8317)
+               return 1;
        /* Systems by DMI */
        if (dmi_check_system(cable_dmi_table))
                return 1;
@@ -282,6 +285,21 @@ static void ali_lock_sectors(struct ata_device *adev)
        adev->max_sectors = 255;
 }
 
+/**
+ *     ali_check_atapi_dma     -       DMA check for most ALi controllers
+ *     @adev: Device
+ *
+ *     Called to decide whether commands should be sent by DMA or PIO
+ */
+
+static int ali_check_atapi_dma(struct ata_queued_cmd *qc)
+{
+       /* If its not a media command, its not worth it */
+       if (qc->nbytes < 2048)
+               return -EOPNOTSUPP;
+       return 0;
+}
+
 static struct scsi_host_template ali_sht = {
        .module                 = THIS_MODULE,
        .name                   = DRV_NAME,
@@ -378,6 +396,7 @@ static struct ata_port_operations ali_c2_port_ops = {
        .mode_filter    = ata_pci_default_filter,
        .tf_load        = ata_tf_load,
        .tf_read        = ata_tf_read,
+       .check_atapi_dma = ali_check_atapi_dma,
        .check_status   = ata_check_status,
        .exec_command   = ata_exec_command,
        .dev_select     = ata_std_dev_select,
@@ -415,6 +434,7 @@ static struct ata_port_operations ali_c5_port_ops = {
        .mode_filter    = ata_pci_default_filter,
        .tf_load        = ata_tf_load,
        .tf_read        = ata_tf_read,
+       .check_atapi_dma = ali_check_atapi_dma,
        .check_status   = ata_check_status,
        .exec_command   = ata_exec_command,
        .dev_select     = ata_std_dev_select,
index c5779ad4abcabf43ec590cdcf00e806e824fd5de..3cc27b514654ad8219dae8941eb258f4147d072b 100644 (file)
@@ -25,7 +25,7 @@
 #include <linux/libata.h>
 
 #define DRV_NAME "pata_amd"
-#define DRV_VERSION "0.3.9"
+#define DRV_VERSION "0.3.10"
 
 /**
  *     timing_setup            -       shared timing computation and load
@@ -115,7 +115,8 @@ static void timing_setup(struct ata_port *ap, struct ata_device *adev, int offse
        }
 
        /* UDMA timing */
-       pci_write_config_byte(pdev, offset + 0x10 + (3 - dn), t);
+       if (at.udma)
+               pci_write_config_byte(pdev, offset + 0x10 + (3 - dn), t);
 }
 
 /**
index bb250a48e27c7b439bf08f3bcaa7b192f37c499a..67e574de31e855c5ae6b1a046d1bc3f5b5f29c1c 100644 (file)
@@ -28,7 +28,7 @@
 #include <asm/arch/smc.h>
 
 #define DRV_NAME "pata_at32"
-#define DRV_VERSION "0.0.2"
+#define DRV_VERSION "0.0.3"
 
 /*
  * CompactFlash controller memory layout relative to the base address:
@@ -64,6 +64,8 @@
  *     Mode 2  | 8.3   | 240 ns         | 0x07
  *     Mode 3  | 11.1  | 180 ns         | 0x0f
  *     Mode 4  | 16.7  | 120 ns         | 0x1f
+ *
+ * Alter PIO_MASK below according to table to set maximal PIO mode.
  */
 #define PIO_MASK (0x1f)
 
@@ -85,36 +87,40 @@ struct at32_ide_info {
  */
 static int pata_at32_setup_timing(struct device *dev,
                                  struct at32_ide_info *info,
-                                 const struct ata_timing *timing)
+                                 const struct ata_timing *ata)
 {
-       /* These two values are found through testing */
-       const int min_recover = 25;
-       const int ncs_hold    = 15;
-
        struct smc_config *smc = &info->smc;
+       struct smc_timing timing;
 
        int active;
        int recover;
 
+       memset(&timing, 0, sizeof(struct smc_timing));
+
        /* Total cycle time */
-       smc->read_cycle = timing->cyc8b;
+       timing.read_cycle  = ata->cyc8b;
 
        /* DIOR <= CFIOR timings */
-       smc->nrd_setup = timing->setup;
-       smc->nrd_pulse = timing->act8b;
+       timing.nrd_setup   = ata->setup;
+       timing.nrd_pulse   = ata->act8b;
+       timing.nrd_recover = ata->rec8b;
+
+       /* Convert nanosecond timing to clock cycles */
+       smc_set_timing(smc, &timing);
 
-       /* Compute recover, extend total cycle if needed */
-       active  = smc->nrd_setup + smc->nrd_pulse;
+       /* Add one extra cycle setup due to signal ring */
+       smc->nrd_setup = smc->nrd_setup + 1;
+
+       active  = smc->nrd_setup + smc->nrd_pulse;
        recover = smc->read_cycle - active;
 
-       if (recover < min_recover) {
-               smc->read_cycle = active + min_recover;
-               recover = min_recover;
-       }
+       /* Need at least two cycles recovery */
+       if (recover < 2)
+         smc->read_cycle = active + 2;
 
        /* (CS0, CS1, DIR, OE) <= (CFCE1, CFCE2, CFRNW, NCSX) timings */
-       smc->ncs_read_setup  = 0;
-       smc->ncs_read_pulse  = active + ncs_hold;
+       smc->ncs_read_setup = 1;
+       smc->ncs_read_pulse = smc->read_cycle - 2;
 
        /* Write timings same as read timings */
        smc->write_cycle = smc->read_cycle;
@@ -123,11 +129,13 @@ static int pata_at32_setup_timing(struct device *dev,
        smc->ncs_write_setup = smc->ncs_read_setup;
        smc->ncs_write_pulse = smc->ncs_read_pulse;
 
-       /* Do some debugging output */
-       dev_dbg(dev, "SMC: C=%d S=%d P=%d R=%d NCSS=%d NCSP=%d NCSR=%d\n",
+       /* Do some debugging output of ATA and SMC timings */
+       dev_dbg(dev, "ATA: C=%d S=%d P=%d R=%d\n",
+               ata->cyc8b, ata->setup, ata->act8b, ata->rec8b);
+
+       dev_dbg(dev, "SMC: C=%d S=%d P=%d NS=%d NP=%d\n",
                smc->read_cycle, smc->nrd_setup, smc->nrd_pulse,
-               recover, smc->ncs_read_setup, smc->ncs_read_pulse,
-               smc->read_cycle - smc->ncs_read_pulse);
+               smc->ncs_read_setup, smc->ncs_read_pulse);
 
        /* Finally, configure the SMC */
        return smc_set_configuration(info->cs, smc);
@@ -182,7 +190,6 @@ static struct scsi_host_template at32_sht = {
 };
 
 static struct ata_port_operations at32_port_ops = {
-       .port_disable           = ata_port_disable,
        .set_piomode            = pata_at32_set_piomode,
        .tf_load                = ata_tf_load,
        .tf_read                = ata_tf_read,
@@ -203,7 +210,6 @@ static struct ata_port_operations at32_port_ops = {
 
        .irq_clear              = pata_at32_irq_clear,
        .irq_on                 = ata_irq_on,
-       .irq_ack                = ata_irq_ack,
 
        .port_start             = ata_sff_port_start,
 };
@@ -223,8 +229,7 @@ static int __init pata_at32_init_one(struct device *dev,
        /* Setup ATA bindings */
        ap->ops      = &at32_port_ops;
        ap->pio_mask = PIO_MASK;
-       ap->flags    = ATA_FLAG_MMIO | ATA_FLAG_SLAVE_POSS
-               | ATA_FLAG_PIO_POLLING;
+       ap->flags   |= ATA_FLAG_MMIO | ATA_FLAG_SLAVE_POSS;
 
        /*
         * Since all 8-bit taskfile transfers has to go on the lower
@@ -357,12 +362,12 @@ static int __init pata_at32_probe(struct platform_device *pdev)
        info->smc.tdf_mode       = 0; /* TDF optimization disabled */
        info->smc.tdf_cycles     = 0; /* No TDF wait cycles */
 
-       /* Setup ATA timing */
+       /* Setup SMC to ATA timing */
        ret = pata_at32_setup_timing(dev, info, &initial_timing);
        if (ret)
                goto err_setup_timing;
 
-       /* Setup ATA addresses */
+       /* Map ATA address space */
        ret = -ENOMEM;
        info->ide_addr = devm_ioremap(dev, info->res_ide.start, 16);
        info->alt_addr = devm_ioremap(dev, info->res_alt.start, 16);
@@ -373,7 +378,7 @@ static int __init pata_at32_probe(struct platform_device *pdev)
        pata_at32_debug_bus(dev, info);
 #endif
 
-       /* Register ATA device */
+       /* Setup and register ATA device */
        ret = pata_at32_init_one(dev, info);
        if (ret)
                goto err_ata_device;
index b5e38426b815ec4ed64854d467ee0548f1a90c8b..088a41f4e656ce57ebc36481e7b916f3df873440 100644 (file)
@@ -1145,13 +1145,13 @@ static unsigned char bfin_bmdma_status(struct ata_port *ap)
        unsigned short int_status = ATAPI_GET_INT_STATUS(base);
 
        if (ATAPI_GET_STATUS(base) & (MULTI_XFER_ON|ULTRA_XFER_ON)) {
-               host_stat = ATA_DMA_ACTIVE;
+               host_stat |= ATA_DMA_ACTIVE;
        }
        if (int_status & (MULTI_DONE_INT|UDMAIN_DONE_INT|UDMAOUT_DONE_INT)) {
-               host_stat = ATA_DMA_INTR;
+               host_stat |= ATA_DMA_INTR;
        }
        if (int_status & (MULTI_TERM_INT|UDMAIN_TERM_INT|UDMAOUT_TERM_INT)) {
-               host_stat = ATA_DMA_ERR;
+               host_stat |= ATA_DMA_ERR;
        }
 
        return host_stat;
@@ -1489,6 +1489,8 @@ static int __devinit bfin_atapi_probe(struct platform_device *pdev)
        int board_idx = 0;
        struct resource *res;
        struct ata_host *host;
+       unsigned int fsclk = get_sclk();
+       int udma_mode = 5;
        const struct ata_port_info *ppi[] =
                { &bfin_port_info[board_idx], NULL };
 
@@ -1507,6 +1509,11 @@ static int __devinit bfin_atapi_probe(struct platform_device *pdev)
        if (res == NULL)
                return -EINVAL;
 
+       while (bfin_port_info[board_idx].udma_mask>0 && udma_fsclk[udma_mode] > fsclk) {
+               udma_mode--;
+               bfin_port_info[board_idx].udma_mask >>= 1;
+       }
+
        /*
         * Now that that's out of the way, wire up the port..
         */
index 3816b8605e0d60631b5fe1c4496db8e7e8f1379e..46dc70e0dee7ee7d8add0e4541d28d64cc17f5ff 100644 (file)
@@ -329,7 +329,7 @@ static int hpt37x_pre_reset(struct ata_link *link, unsigned long deadline)
        /* Restore state */
        pci_write_config_byte(pdev, 0x5B, scr2);
 
-       if (ata66 & (1 << ap->port_no))
+       if (ata66 & (2 >> ap->port_no))
                ap->cbl = ATA_CBL_PATA40;
        else
                ap->cbl = ATA_CBL_PATA80;
index 88ab0e1d353fb506d1ac1de6b3b9eac1d81d6bb9..4320e79863219d6858e74d376c991be6588a6cf7 100644 (file)
@@ -75,13 +75,16 @@ static int isapnp_init_one(struct pnp_dev *idev, const struct pnp_device_id *dev
        struct ata_host *host;
        struct ata_port *ap;
        void __iomem *cmd_addr, *ctl_addr;
+       int irq = 0;
+       irq_handler_t handler = NULL;
 
        if (pnp_port_valid(idev, 0) == 0)
                return -ENODEV;
 
-       /* FIXME: Should selected polled PIO here not fail */
-       if (pnp_irq_valid(idev, 0) == 0)
-               return -ENODEV;
+       if (pnp_irq_valid(idev, 0)) {
+               irq = pnp_irq(idev, 0);
+               handler = ata_interrupt;
+       }
 
        /* allocate host */
        host = ata_host_alloc(&idev->dev, 1);
@@ -115,7 +118,7 @@ static int isapnp_init_one(struct pnp_dev *idev, const struct pnp_device_id *dev
                      (unsigned long long)pnp_port_start(idev, 1));
 
        /* activate */
-       return ata_host_activate(host, pnp_irq(idev, 0), ata_interrupt, 0,
+       return ata_host_activate(host, irq, handler, 0,
                                 &isapnp_sht);
 }
 
index 225a7223a726066bdc14181d225dfc16a541b298..5b8174d940670493e5439ab2338276c5b1b4de31 100644 (file)
@@ -80,11 +80,10 @@ static int jmicron_pre_reset(struct ata_link *link, unsigned long deadline)
         *      actually do our cable checking etc. Thankfully we don't need
         *      to do the plumbing for other cases.
         */
-       switch (port_map[port])
-       {
+       switch (port_map[port]) {
        case PORT_PATA0:
-               if (control & (1 << 5))
-                       return 0;
+               if ((control & (1 << 5)) == 0)
+                       return -ENOENT;
                if (control & (1 << 3)) /* 40/80 pin primary */
                        ap->cbl = ATA_CBL_PATA40;
                else
@@ -93,7 +92,7 @@ static int jmicron_pre_reset(struct ata_link *link, unsigned long deadline)
        case PORT_PATA1:
                /* Bit 21 is set if the port is enabled */
                if ((control5 & (1 << 21)) == 0)
-                       return 0;
+                       return -ENOENT;
                if (control5 & (1 << 19))       /* 40/80 pin secondary */
                        ap->cbl = ATA_CBL_PATA40;
                else
index 5c1e9cb59ecb66ed07ace0e1739516300e7c0280..503245a1eafadba2126c4d310abe9dad4509396f 100644 (file)
@@ -33,7 +33,7 @@
 #include <linux/libata.h>
 
 #define DRV_NAME "pata_sil680"
-#define DRV_VERSION "0.4.7"
+#define DRV_VERSION "0.4.8"
 
 #define SIL680_MMIO_BAR                5
 
@@ -93,34 +93,6 @@ static int sil680_cable_detect(struct ata_port *ap) {
                return ATA_CBL_PATA40;
 }
 
-/**
- *     sil680_bus_reset        -       reset the SIL680 bus
- *     @link: ATA link to reset
- *     @deadline: deadline jiffies for the operation
- *
- *     Perform the SIL680 housekeeping when doing an ATA bus reset
- */
-
-static int sil680_bus_reset(struct ata_link *link, unsigned int *classes,
-                           unsigned long deadline)
-{
-       struct ata_port *ap = link->ap;
-       struct pci_dev *pdev = to_pci_dev(ap->host->dev);
-       unsigned long addr = sil680_selreg(ap, 0);
-       u8 reset;
-
-       pci_read_config_byte(pdev, addr, &reset);
-       pci_write_config_byte(pdev, addr, reset | 0x03);
-       udelay(25);
-       pci_write_config_byte(pdev, addr, reset);
-       return ata_std_softreset(link, classes, deadline);
-}
-
-static void sil680_error_handler(struct ata_port *ap)
-{
-       ata_bmdma_drive_eh(ap, ata_std_prereset, sil680_bus_reset, NULL, ata_std_postreset);
-}
-
 /**
  *     sil680_set_piomode      -       set initial PIO mode data
  *     @ap: ATA interface
@@ -249,7 +221,7 @@ static struct ata_port_operations sil680_port_ops = {
 
        .freeze         = ata_bmdma_freeze,
        .thaw           = ata_bmdma_thaw,
-       .error_handler  = sil680_error_handler,
+       .error_handler  = ata_bmdma_error_handler,
        .post_internal_cmd = ata_bmdma_post_internal_cmd,
        .cable_detect   = sil680_cable_detect,
 
index 3b5be77e861c77139eab0cc15f4f9fd26c3954db..87546d9f1ca0839cf5067d94116af34ae297c7e7 100644 (file)
@@ -55,6 +55,7 @@ static const struct sis_laptop sis_laptop[] = {
        /* devid, subvendor, subdev */
        { 0x5513, 0x1043, 0x1107 },     /* ASUS A6K */
        { 0x5513, 0x1734, 0x105F },     /* FSC Amilo A1630 */
+       { 0x5513, 0x1071, 0x8640 },     /* EasyNote K5305 */
        /* end marker */
        { 0, }
 };
index a4175fbdd1704dcf6c231dcf6bf55b0552d3f1b5..453d72bf259831f532fe32804edaea56438ec1c9 100644 (file)
@@ -63,7 +63,7 @@
 #include <linux/dmi.h>
 
 #define DRV_NAME "pata_via"
-#define DRV_VERSION "0.3.2"
+#define DRV_VERSION "0.3.3"
 
 /*
  *     The following comes directly from Vojtech Pavlik's ide/pci/via82cxxx
@@ -296,7 +296,7 @@ static void via_do_set_mode(struct ata_port *ap, struct ata_device *adev, int mo
        }
 
        /* Set UDMA unless device is not UDMA capable */
-       if (udma_type) {
+       if (udma_type && t.udma) {
                u8 cable80_status;
 
                /* Get 80-wire cable detection bit */
index a43f64d2775b9cf74214a83c7170368dab82595f..fe0105d35bae130b1077b1b8bec411859bf13460 100644 (file)
@@ -164,10 +164,14 @@ enum {
        MV_PCI_ERR_ATTRIBUTE    = 0x1d48,
        MV_PCI_ERR_COMMAND      = 0x1d50,
 
-       PCI_IRQ_CAUSE_OFS               = 0x1d58,
-       PCI_IRQ_MASK_OFS                = 0x1d5c,
+       PCI_IRQ_CAUSE_OFS       = 0x1d58,
+       PCI_IRQ_MASK_OFS        = 0x1d5c,
        PCI_UNMASK_ALL_IRQS     = 0x7fffff,     /* bits 22-0 */
 
+       PCIE_IRQ_CAUSE_OFS      = 0x1900,
+       PCIE_IRQ_MASK_OFS       = 0x1910,
+       PCIE_UNMASK_ALL_IRQS    = 0x70a,        /* assorted bits */
+
        HC_MAIN_IRQ_CAUSE_OFS   = 0x1d60,
        HC_MAIN_IRQ_MASK_OFS    = 0x1d64,
        PORT0_ERR               = (1 << 0),     /* shift by port # */
@@ -303,6 +307,7 @@ enum {
        MV_HP_GEN_I             = (1 << 6),     /* Generation I: 50xx */
        MV_HP_GEN_II            = (1 << 7),     /* Generation II: 60xx */
        MV_HP_GEN_IIE           = (1 << 8),     /* Generation IIE: 6042/7042 */
+       MV_HP_PCIE              = (1 << 9),     /* PCIe bus/regs: 7042 */
 
        /* Port private flags (pp_flags) */
        MV_PP_FLAG_EDMA_EN      = (1 << 0),     /* is EDMA engine enabled? */
@@ -388,7 +393,15 @@ struct mv_port_signal {
        u32                     pre;
 };
 
-struct mv_host_priv;
+struct mv_host_priv {
+       u32                     hp_flags;
+       struct mv_port_signal   signal[8];
+       const struct mv_hw_ops  *ops;
+       u32                     irq_cause_ofs;
+       u32                     irq_mask_ofs;
+       u32                     unmask_all_irqs;
+};
+
 struct mv_hw_ops {
        void (*phy_errata)(struct mv_host_priv *hpriv, void __iomem *mmio,
                           unsigned int port);
@@ -401,12 +414,6 @@ struct mv_hw_ops {
        void (*reset_bus)(struct pci_dev *pdev, void __iomem *mmio);
 };
 
-struct mv_host_priv {
-       u32                     hp_flags;
-       struct mv_port_signal   signal[8];
-       const struct mv_hw_ops  *ops;
-};
-
 static void mv_irq_clear(struct ata_port *ap);
 static int mv_scr_read(struct ata_port *ap, unsigned int sc_reg_in, u32 *val);
 static int mv_scr_write(struct ata_port *ap, unsigned int sc_reg_in, u32 val);
@@ -631,11 +638,13 @@ static const struct pci_device_id mv_pci_tbl[] = {
        /* Adaptec 1430SA */
        { PCI_VDEVICE(ADAPTEC2, 0x0243), chip_7042 },
 
-       { PCI_VDEVICE(TTI, 0x2310), chip_7042 },
-
-       /* add Marvell 7042 support */
+       /* Marvell 7042 support */
        { PCI_VDEVICE(MARVELL, 0x7042), chip_7042 },
 
+       /* Highpoint RocketRAID PCIe series */
+       { PCI_VDEVICE(TTI, 0x2300), chip_7042 },
+       { PCI_VDEVICE(TTI, 0x2310), chip_7042 },
+
        { }                     /* terminate list */
 };
 
@@ -1648,13 +1657,14 @@ static void mv_host_intr(struct ata_host *host, u32 relevant, unsigned int hc)
 
 static void mv_pci_error(struct ata_host *host, void __iomem *mmio)
 {
+       struct mv_host_priv *hpriv = host->private_data;
        struct ata_port *ap;
        struct ata_queued_cmd *qc;
        struct ata_eh_info *ehi;
        unsigned int i, err_mask, printed = 0;
        u32 err_cause;
 
-       err_cause = readl(mmio + PCI_IRQ_CAUSE_OFS);
+       err_cause = readl(mmio + hpriv->irq_cause_ofs);
 
        dev_printk(KERN_ERR, host->dev, "PCI ERROR; PCI IRQ cause=0x%08x\n",
                   err_cause);
@@ -1662,7 +1672,7 @@ static void mv_pci_error(struct ata_host *host, void __iomem *mmio)
        DPRINTK("All regs @ PCI error\n");
        mv_dump_all_regs(mmio, -1, to_pci_dev(host->dev));
 
-       writelfl(0, mmio + PCI_IRQ_CAUSE_OFS);
+       writelfl(0, mmio + hpriv->irq_cause_ofs);
 
        for (i = 0; i < host->n_ports; i++) {
                ap = host->ports[i];
@@ -1926,6 +1936,8 @@ static int mv5_reset_hc(struct mv_host_priv *hpriv, void __iomem *mmio,
 #define ZERO(reg) writel(0, mmio + (reg))
 static void mv_reset_pci_bus(struct pci_dev *pdev, void __iomem *mmio)
 {
+       struct ata_host     *host = dev_get_drvdata(&pdev->dev);
+       struct mv_host_priv *hpriv = host->private_data;
        u32 tmp;
 
        tmp = readl(mmio + MV_PCI_MODE);
@@ -1937,8 +1949,8 @@ static void mv_reset_pci_bus(struct pci_dev *pdev, void __iomem *mmio)
        writel(0x000100ff, mmio + MV_PCI_XBAR_TMOUT);
        ZERO(HC_MAIN_IRQ_MASK_OFS);
        ZERO(MV_PCI_SERR_MASK);
-       ZERO(PCI_IRQ_CAUSE_OFS);
-       ZERO(PCI_IRQ_MASK_OFS);
+       ZERO(hpriv->irq_cause_ofs);
+       ZERO(hpriv->irq_mask_ofs);
        ZERO(MV_PCI_ERR_LOW_ADDRESS);
        ZERO(MV_PCI_ERR_HIGH_ADDRESS);
        ZERO(MV_PCI_ERR_ATTRIBUTE);
@@ -2170,7 +2182,7 @@ static void mv_phy_reset(struct ata_port *ap, unsigned int *class,
                mv_scr_read(ap, SCR_ERROR, &serror);
                mv_scr_read(ap, SCR_CONTROL, &scontrol);
                DPRINTK("S-regs after ATA_RST: SStat 0x%08x SErr 0x%08x "
-                       "SCtrl 0x%08x\n", status, serror, scontrol);
+                       "SCtrl 0x%08x\n", sstatus, serror, scontrol);
        }
 #endif
 
@@ -2490,6 +2502,16 @@ static int mv_chip_id(struct ata_host *host, unsigned int board_idx)
                break;
 
        case chip_7042:
+               hp_flags |= MV_HP_PCIE;
+               if (pdev->vendor == PCI_VENDOR_ID_TTI &&
+                   (pdev->device == 0x2300 || pdev->device == 0x2310))
+               {
+                       printk(KERN_WARNING "sata_mv: Highpoint RocketRAID BIOS"
+                               " will CORRUPT DATA on attached drives when"
+                               " configured as \"Legacy\".  BEWARE!\n");
+                       printk(KERN_WARNING "sata_mv: Use BIOS \"JBOD\" volumes"
+                               " instead for safety.\n");
+               }
        case chip_6042:
                hpriv->ops = &mv6xxx_ops;
                hp_flags |= MV_HP_GEN_IIE;
@@ -2516,6 +2538,15 @@ static int mv_chip_id(struct ata_host *host, unsigned int board_idx)
        }
 
        hpriv->hp_flags = hp_flags;
+       if (hp_flags & MV_HP_PCIE) {
+               hpriv->irq_cause_ofs    = PCIE_IRQ_CAUSE_OFS;
+               hpriv->irq_mask_ofs     = PCIE_IRQ_MASK_OFS;
+               hpriv->unmask_all_irqs  = PCIE_UNMASK_ALL_IRQS;
+       } else {
+               hpriv->irq_cause_ofs    = PCI_IRQ_CAUSE_OFS;
+               hpriv->irq_mask_ofs     = PCI_IRQ_MASK_OFS;
+               hpriv->unmask_all_irqs  = PCI_UNMASK_ALL_IRQS;
+       }
 
        return 0;
 }
@@ -2595,10 +2626,10 @@ static int mv_init_host(struct ata_host *host, unsigned int board_idx)
        }
 
        /* Clear any currently outstanding host interrupt conditions */
-       writelfl(0, mmio + PCI_IRQ_CAUSE_OFS);
+       writelfl(0, mmio + hpriv->irq_cause_ofs);
 
        /* and unmask interrupt generation for host regs */
-       writelfl(PCI_UNMASK_ALL_IRQS, mmio + PCI_IRQ_MASK_OFS);
+       writelfl(hpriv->unmask_all_irqs, mmio + hpriv->irq_mask_ofs);
 
        if (IS_GEN_I(hpriv))
                writelfl(~HC_MAIN_MASKED_IRQS_5, mmio + HC_MAIN_IRQ_MASK_OFS);
@@ -2609,8 +2640,8 @@ static int mv_init_host(struct ata_host *host, unsigned int board_idx)
                "PCI int cause/mask=0x%08x/0x%08x\n",
                readl(mmio + HC_MAIN_IRQ_CAUSE_OFS),
                readl(mmio + HC_MAIN_IRQ_MASK_OFS),
-               readl(mmio + PCI_IRQ_CAUSE_OFS),
-               readl(mmio + PCI_IRQ_MASK_OFS));
+               readl(mmio + hpriv->irq_cause_ofs),
+               readl(mmio + hpriv->irq_mask_ofs));
 
 done:
        return rc;
index 44f9e5d9e36238e00b45de0cf2840f1489b052c6..ed5dc7cb50cd58d408c53dea9fe7d06de7eef947 100644 (file)
@@ -791,11 +791,13 @@ static int nv_adma_check_atapi_dma(struct ata_queued_cmd *qc)
 
 static void nv_adma_tf_read(struct ata_port *ap, struct ata_taskfile *tf)
 {
-       /* Since commands where a result TF is requested are not
-          executed in ADMA mode, the only time this function will be called
-          in ADMA mode will be if a command fails. In this case we
-          don't care about going into register mode with ADMA commands
-          pending, as the commands will all shortly be aborted anyway. */
+       /* Other than when internal or pass-through commands are executed,
+          the only time this function will be called in ADMA mode will be
+          if a command fails. In the failure case we don't care about going
+          into register mode with ADMA commands pending, as the commands will
+          all shortly be aborted anyway. We assume that NCQ commands are not
+          issued via passthrough, which is the only way that switching into
+          ADMA mode could abort outstanding commands. */
        nv_adma_register_mode(ap);
 
        ata_tf_read(ap, tf);
@@ -1359,11 +1361,9 @@ static int nv_adma_use_reg_mode(struct ata_queued_cmd *qc)
        struct nv_adma_port_priv *pp = qc->ap->private_data;
 
        /* ADMA engine can only be used for non-ATAPI DMA commands,
-          or interrupt-driven no-data commands, where a result taskfile
-          is not required. */
+          or interrupt-driven no-data commands. */
        if ((pp->flags & NV_ADMA_ATAPI_SETUP_COMPLETE) ||
-          (qc->tf.flags & ATA_TFLAG_POLLING) ||
-          (qc->flags & ATA_QCFLAG_RESULT_TF))
+          (qc->tf.flags & ATA_TFLAG_POLLING))
                return 1;
 
        if ((qc->flags & ATA_QCFLAG_DMAMAP) ||
@@ -1381,6 +1381,8 @@ static void nv_adma_qc_prep(struct ata_queued_cmd *qc)
                       NV_CPB_CTL_IEN;
 
        if (nv_adma_use_reg_mode(qc)) {
+               BUG_ON(!(pp->flags & NV_ADMA_ATAPI_SETUP_COMPLETE) &&
+                       (qc->flags & ATA_QCFLAG_DMAMAP));
                nv_adma_register_mode(qc->ap);
                ata_qc_prep(qc);
                return;
@@ -1425,9 +1427,21 @@ static unsigned int nv_adma_qc_issue(struct ata_queued_cmd *qc)
 
        VPRINTK("ENTER\n");
 
+       /* We can't handle result taskfile with NCQ commands, since
+          retrieving the taskfile switches us out of ADMA mode and would abort
+          existing commands. */
+       if (unlikely(qc->tf.protocol == ATA_PROT_NCQ &&
+                    (qc->flags & ATA_QCFLAG_RESULT_TF))) {
+               ata_dev_printk(qc->dev, KERN_ERR,
+                       "NCQ w/ RESULT_TF not allowed\n");
+               return AC_ERR_SYSTEM;
+       }
+
        if (nv_adma_use_reg_mode(qc)) {
                /* use ATA register mode */
                VPRINTK("using ATA register mode: 0x%lx\n", qc->flags);
+               BUG_ON(!(pp->flags & NV_ADMA_ATAPI_SETUP_COMPLETE) &&
+                       (qc->flags & ATA_QCFLAG_DMAMAP));
                nv_adma_register_mode(qc->ap);
                return ata_qc_issue_prot(qc);
        } else
index 187dcb02c681907d859672eafab0e0c6e8d376c6..96fd5260446db812dbe938c903b4e47779dfc363 100644 (file)
@@ -63,6 +63,21 @@ enum {
        SIL24_HOST_BAR          = 0,
        SIL24_PORT_BAR          = 2,
 
+       /* sil24 fetches in chunks of 64bytes.  The first block
+        * contains the PRB and two SGEs.  From the second block, it's
+        * consisted of four SGEs and called SGT.  Calculate the
+        * number of SGTs that fit into one page.
+        */
+       SIL24_PRB_SZ            = sizeof(struct sil24_prb)
+                                 + 2 * sizeof(struct sil24_sge),
+       SIL24_MAX_SGT           = (PAGE_SIZE - SIL24_PRB_SZ)
+                                 / (4 * sizeof(struct sil24_sge)),
+
+       /* This will give us one unused SGEs for ATA.  This extra SGE
+        * will be used to store CDB for ATAPI devices.
+        */
+       SIL24_MAX_SGE           = 4 * SIL24_MAX_SGT + 1,
+
        /*
         * Global controller registers (128 bytes @ BAR0)
         */
@@ -247,13 +262,13 @@ enum {
 
 struct sil24_ata_block {
        struct sil24_prb prb;
-       struct sil24_sge sge[LIBATA_MAX_PRD];
+       struct sil24_sge sge[SIL24_MAX_SGE];
 };
 
 struct sil24_atapi_block {
        struct sil24_prb prb;
        u8 cdb[16];
-       struct sil24_sge sge[LIBATA_MAX_PRD - 1];
+       struct sil24_sge sge[SIL24_MAX_SGE];
 };
 
 union sil24_cmd_block {
@@ -378,7 +393,7 @@ static struct scsi_host_template sil24_sht = {
        .change_queue_depth     = ata_scsi_change_queue_depth,
        .can_queue              = SIL24_MAX_CMDS,
        .this_id                = ATA_SHT_THIS_ID,
-       .sg_tablesize           = LIBATA_MAX_PRD,
+       .sg_tablesize           = SIL24_MAX_SGE,
        .cmd_per_lun            = ATA_SHT_CMD_PER_LUN,
        .emulated               = ATA_SHT_EMULATED,
        .use_clustering         = ATA_SHT_USE_CLUSTERING,
@@ -1284,6 +1299,7 @@ static void sil24_init_controller(struct ata_host *host)
 
 static int sil24_init_one(struct pci_dev *pdev, const struct pci_device_id *ent)
 {
+       extern int __MARKER__sil24_cmd_block_is_sized_wrongly;
        static int printed_version;
        struct ata_port_info pi = sil24_port_info[ent->driver_data];
        const struct ata_port_info *ppi[] = { &pi, NULL };
@@ -1292,6 +1308,10 @@ static int sil24_init_one(struct pci_dev *pdev, const struct pci_device_id *ent)
        int i, rc;
        u32 tmp;
 
+       /* cause link error if sil24_cmd_block is sized wrongly */
+       if (sizeof(union sil24_cmd_block) != PAGE_SIZE)
+               __MARKER__sil24_cmd_block_is_sized_wrongly = 1;
+
        if (!printed_version++)
                dev_printk(KERN_DEBUG, &pdev->dev, "version " DRV_VERSION "\n");
 
index d33aba6864c247e34a05f3dd94db131a2c62fc50..3b64a99772ea826187dbc792875332722f77f94b 100644 (file)
@@ -394,6 +394,11 @@ he_init_one(struct pci_dev *pci_dev, const struct pci_device_id *pci_ent)
        he_dev->atm_dev->dev_data = he_dev;
        atm_dev->dev_data = he_dev;
        he_dev->number = atm_dev->number;
+#ifdef USE_TASKLET
+       tasklet_init(&he_dev->tasklet, he_tasklet, (unsigned long) he_dev);
+#endif
+       spin_lock_init(&he_dev->global_lock);
+
        if (he_start(atm_dev)) {
                he_stop(he_dev);
                err = -ENODEV;
@@ -1173,11 +1178,6 @@ he_start(struct atm_dev *dev)
        if ((err = he_init_irq(he_dev)) != 0)
                return err;
 
-#ifdef USE_TASKLET
-       tasklet_init(&he_dev->tasklet, he_tasklet, (unsigned long) he_dev);
-#endif
-       spin_lock_init(&he_dev->global_lock);
-
        /* 4.11 enable pci bus controller state machines */
        host_cntl |= (OUTFF_ENB | CMDFF_ENB |
                                QUICK_RD_RETRY | QUICK_WR_RETRY | PERR_INT_ENB);
index 3f4d6aa139909e49ac77541bdd8b94f46979dae2..2683eac30c68138220500217ddfdc550a7b24e81 100644 (file)
@@ -770,9 +770,10 @@ int device_add(struct device *dev)
        error = device_add_attrs(dev);
        if (error)
                goto AttrsError;
-       error = device_pm_add(dev);
+       error = dpm_sysfs_add(dev);
        if (error)
                goto PMError;
+       device_pm_add(dev);
        error = bus_add_device(dev);
        if (error)
                goto BusError;
@@ -797,6 +798,7 @@ int device_add(struct device *dev)
        return error;
  BusError:
        device_pm_remove(dev);
+       dpm_sysfs_remove(dev);
  PMError:
        if (dev->bus)
                blocking_notifier_call_chain(&dev->bus->bus_notifier,
index a803733c839ec9119abbc9f35004e184f4d0a2dd..44504e6618fbb0006e369cf39ff75d55578057bb 100644 (file)
@@ -1,5 +1,6 @@
 obj-y                  := shutdown.o
-obj-$(CONFIG_PM_SLEEP) += main.o sysfs.o
+obj-$(CONFIG_PM)       += sysfs.o
+obj-$(CONFIG_PM_SLEEP) += main.o
 obj-$(CONFIG_PM_TRACE) += trace.o
 
 ifeq ($(CONFIG_DEBUG_DRIVER),y)
index 0ab4ab21f564378a20c3855c2170e01ffec3f3a2..691ffb64cc3724461fa3d877f3a8aae10dca96d9 100644 (file)
@@ -38,20 +38,14 @@ static DEFINE_MUTEX(dpm_list_mtx);
 int (*platform_enable_wakeup)(struct device *dev, int is_on);
 
 
-int device_pm_add(struct device *dev)
+void device_pm_add(struct device *dev)
 {
-       int error;
-
        pr_debug("PM: Adding info for %s:%s\n",
                 dev->bus ? dev->bus->name : "No Bus",
                 kobject_name(&dev->kobj));
        mutex_lock(&dpm_list_mtx);
        list_add_tail(&dev->power.entry, &dpm_active);
-       error = dpm_sysfs_add(dev);
-       if (error)
-               list_del(&dev->power.entry);
        mutex_unlock(&dpm_list_mtx);
-       return error;
 }
 
 void device_pm_remove(struct device *dev)
index 5c4efd493fa503919b787ed6e5f6d3a4747282c5..379da4e958e0d00fc637b00cac5215f41fb6cd45 100644 (file)
@@ -13,14 +13,29 @@ extern void device_shutdown(void);
 
 extern struct list_head dpm_active;    /* The active device list */
 
-static inline struct device * to_device(struct list_head * entry)
+static inline struct device *to_device(struct list_head *entry)
 {
        return container_of(entry, struct device, power.entry);
 }
 
-extern int device_pm_add(struct device *);
+extern void device_pm_add(struct device *);
 extern void device_pm_remove(struct device *);
 
+#else /* CONFIG_PM_SLEEP */
+
+
+static inline void device_pm_add(struct device *dev)
+{
+}
+
+static inline void device_pm_remove(struct device *dev)
+{
+}
+
+#endif
+
+#ifdef CONFIG_PM
+
 /*
  * sysfs.c
  */
@@ -28,16 +43,15 @@ extern void device_pm_remove(struct device *);
 extern int dpm_sysfs_add(struct device *);
 extern void dpm_sysfs_remove(struct device *);
 
-#else /* CONFIG_PM_SLEEP */
-
+#else /* CONFIG_PM */
 
-static inline int device_pm_add(struct device * dev)
+static inline int dpm_sysfs_add(struct device *dev)
 {
        return 0;
 }
-static inline void device_pm_remove(struct device * dev)
-{
 
+static inline void dpm_sysfs_remove(struct device *dev)
+{
 }
 
 #endif
index b1d00ef6659ce40332e7766152014b9987b69cbf..ad00b3d94711d09b6344ea36cd73ce21418932a1 100644 (file)
@@ -6,6 +6,7 @@
 
 #include <linux/hdreg.h>
 #include <linux/blkdev.h>
+#include <linux/backing-dev.h>
 #include <linux/fs.h>
 #include <linux/ioctl.h>
 #include <linux/genhd.h>
@@ -210,25 +211,20 @@ aoeblk_gdalloc(void *vp)
        if (gd == NULL) {
                printk(KERN_ERR "aoe: cannot allocate disk structure for %ld.%ld\n",
                        d->aoemajor, d->aoeminor);
-               spin_lock_irqsave(&d->lock, flags);
-               d->flags &= ~DEVFL_GDALLOC;
-               spin_unlock_irqrestore(&d->lock, flags);
-               return;
+               goto err;
        }
 
        d->bufpool = mempool_create_slab_pool(MIN_BUFS, buf_pool_cache);
        if (d->bufpool == NULL) {
                printk(KERN_ERR "aoe: cannot allocate bufpool for %ld.%ld\n",
                        d->aoemajor, d->aoeminor);
-               put_disk(gd);
-               spin_lock_irqsave(&d->lock, flags);
-               d->flags &= ~DEVFL_GDALLOC;
-               spin_unlock_irqrestore(&d->lock, flags);
-               return;
+               goto err_disk;
        }
 
-       spin_lock_irqsave(&d->lock, flags);
        blk_queue_make_request(&d->blkq, aoeblk_make_request);
+       if (bdi_init(&d->blkq.backing_dev_info))
+               goto err_mempool;
+       spin_lock_irqsave(&d->lock, flags);
        gd->major = AOE_MAJOR;
        gd->first_minor = d->sysminor * AOE_PARTITIONS;
        gd->fops = &aoe_bdops;
@@ -246,6 +242,16 @@ aoeblk_gdalloc(void *vp)
 
        add_disk(gd);
        aoedisk_add_sysfs(d);
+       return;
+
+err_mempool:
+       mempool_destroy(d->bufpool);
+err_disk:
+       put_disk(gd);
+err:
+       spin_lock_irqsave(&d->lock, flags);
+       d->flags &= ~DEVFL_GDALLOC;
+       spin_unlock_irqrestore(&d->lock, flags);
 }
 
 void
index 99806f9ee4ce85910deecfe194462b48cc047b35..5f5095afb06b900b3b70a05837b19d866a9cdd8a 100644 (file)
@@ -484,7 +484,8 @@ static void process_page(unsigned long data)
                page->idx++;
                if (page->idx >= bio->bi_vcnt) {
                        page->bio = bio->bi_next;
-                       page->idx = page->bio->bi_idx;
+                       if (page->bio)
+                               page->idx = page->bio->bi_idx;
                }
 
                pci_unmap_page(card->dev, desc->data_dma_handle,
index 3cf7129d83e6ae0a3c35c53fe74a9bc02d58a9d6..924ddd8bccd2b8fdd32e06a7db1c3e05918ebc12 100644 (file)
@@ -223,7 +223,7 @@ static int virtblk_probe(struct virtio_device *vdev)
        err = virtio_config_val(vdev, VIRTIO_CONFIG_BLK_F_CAPACITY, &cap);
        if (err) {
                dev_err(&vdev->dev, "Bad/missing capacity in config\n");
-               goto out_put_disk;
+               goto out_cleanup_queue;
        }
 
        /* If capacity is too big, truncate with warning. */
@@ -239,7 +239,7 @@ static int virtblk_probe(struct virtio_device *vdev)
                blk_queue_max_segment_size(vblk->disk->queue, v);
        else if (err != -ENOENT) {
                dev_err(&vdev->dev, "Bad SIZE_MAX in config\n");
-               goto out_put_disk;
+               goto out_cleanup_queue;
        }
 
        err = virtio_config_val(vdev, VIRTIO_CONFIG_BLK_F_SEG_MAX, &v);
@@ -247,12 +247,14 @@ static int virtblk_probe(struct virtio_device *vdev)
                blk_queue_max_hw_segments(vblk->disk->queue, v);
        else if (err != -ENOENT) {
                dev_err(&vdev->dev, "Bad SEG_MAX in config\n");
-               goto out_put_disk;
+               goto out_cleanup_queue;
        }
 
        add_disk(vblk->disk);
        return 0;
 
+out_cleanup_queue:
+       blk_cleanup_queue(vblk->disk->queue);
 out_put_disk:
        put_disk(vblk->disk);
 out_unregister_blkdev:
@@ -277,6 +279,8 @@ static void virtblk_remove(struct virtio_device *vdev)
        put_disk(vblk->disk);
        unregister_blkdev(major, "virtblk");
        mempool_destroy(vblk->pool);
+       /* There should be nothing in the queue now, so no need to shutdown */
+       vdev->config->del_vq(vblk->vq);
        kfree(vblk);
 }
 
index bf18d757b87641e2413ab712626f6c0e55b6c7ff..a509b8d79781fe4c915a8444929348d758ad8c39 100644 (file)
@@ -457,7 +457,7 @@ config LEGACY_PTYS
 config LEGACY_PTY_COUNT
        int "Maximum number of legacy PTY in use"
        depends on LEGACY_PTYS
-       range 1 256
+       range 0 256
        default "256"
        ---help---
          The maximum number of legacy PTYs that can be used at any one time.
index c99e43b837f5ce50010fefb57259699884a79418..17d54315e146e5d95b794f456a270e2e818b08c6 100644 (file)
@@ -295,7 +295,6 @@ static int
 apm_ioctl(struct inode * inode, struct file *filp, u_int cmd, u_long arg)
 {
        struct apm_user *as = filp->private_data;
-       unsigned long flags;
        int err = -EINVAL;
 
        if (!as->suser || !as->writer)
@@ -331,10 +330,16 @@ apm_ioctl(struct inode * inode, struct file *filp, u_int cmd, u_long arg)
                         * Wait for the suspend/resume to complete.  If there
                         * are pending acknowledges, we wait here for them.
                         */
-                       flags = current->flags;
+                       freezer_do_not_count();
 
                        wait_event(apm_suspend_waitqueue,
                                   as->suspend_state == SUSPEND_DONE);
+
+                       /*
+                        * Since we are waiting until the suspend is done, the
+                        * try_to_freeze() in freezer_count() will not trigger
+                        */
+                       freezer_count();
                } else {
                        as->suspend_state = SUSPEND_WAIT;
                        mutex_unlock(&state_lock);
@@ -362,14 +367,10 @@ apm_ioctl(struct inode * inode, struct file *filp, u_int cmd, u_long arg)
                         * Wait for the suspend/resume to complete.  If there
                         * are pending acknowledges, we wait here for them.
                         */
-                       flags = current->flags;
-
-                       wait_event_interruptible(apm_suspend_waitqueue,
+                       wait_event_freezable(apm_suspend_waitqueue,
                                         as->suspend_state == SUSPEND_DONE);
                }
 
-               current->flags = flags;
-
                mutex_lock(&state_lock);
                err = as->suspend_result;
                as->suspend_state = SUSPEND_NONE;
index fe6d2407baed4365250de2357d39fa75cff81991..c2d23cae95155d5c78fefa8995c672c5b30643a7 100644 (file)
@@ -104,6 +104,11 @@ static ssize_t cs5535_gpio_write(struct file *file, const char __user *data,
                for (j = 0; j < ARRAY_SIZE(rm); j++) {
                        if (c == rm[j].on) {
                                outl(m1, base + rm[j].wr_offset);
+                               /* If enabling output, turn off AUX 1 and AUX 2 */
+                               if (c == 'O') {
+                                       outl(m0, base + 0x10);
+                                       outl(m0, base + 0x14);
+                               }
                                break;
                        } else if (c == rm[j].off) {
                                outl(m0, base + rm[j].wr_offset);
index 877e53dcb9968a2215816b10c4351fb5e2ba4224..921c6d2bc8fc6b1959aa932a623469d59112b719 100644 (file)
@@ -1163,7 +1163,7 @@ static struct acpi_driver sonypi_acpi_driver = {
 };
 #endif
 
-static int __devinit sonypi_create_input_devices(void)
+static int __devinit sonypi_create_input_devices(struct platform_device *pdev)
 {
        struct input_dev *jog_dev;
        struct input_dev *key_dev;
@@ -1177,6 +1177,7 @@ static int __devinit sonypi_create_input_devices(void)
        jog_dev->name = "Sony Vaio Jogdial";
        jog_dev->id.bustype = BUS_ISA;
        jog_dev->id.vendor = PCI_VENDOR_ID_SONY;
+       jog_dev->dev.parent = &pdev->dev;
 
        jog_dev->evbit[0] = BIT_MASK(EV_KEY) | BIT_MASK(EV_REL);
        jog_dev->keybit[BIT_WORD(BTN_MOUSE)] = BIT_MASK(BTN_MIDDLE);
@@ -1191,6 +1192,7 @@ static int __devinit sonypi_create_input_devices(void)
        key_dev->name = "Sony Vaio Keys";
        key_dev->id.bustype = BUS_ISA;
        key_dev->id.vendor = PCI_VENDOR_ID_SONY;
+       key_dev->dev.parent = &pdev->dev;
 
        /* Initialize the Input Drivers: special keys */
        key_dev->evbit[0] = BIT_MASK(EV_KEY);
@@ -1385,7 +1387,7 @@ static int __devinit sonypi_probe(struct platform_device *dev)
 
        if (useinput) {
 
-               error = sonypi_create_input_devices();
+               error = sonypi_create_input_devices(dev);
                if (error) {
                        printk(KERN_ERR
                                "sonypi: failed to create input devices\n");
@@ -1432,7 +1434,7 @@ static int __devexit sonypi_remove(struct platform_device *dev)
 {
        sonypi_disable();
 
-       synchronize_sched();  /* Allow sonypi interrupt to complete. */
+       synchronize_irq(sonypi_device.irq);
        flush_scheduled_work();
 
        if (useinput) {
index fd771a4d6d18ccff342f0fbb0806f819eb93cebf..81503d94fecca00062582831d7112f8c1acf9374 100644 (file)
@@ -450,6 +450,11 @@ static int tpm_tis_init(struct device *dev, resource_size_t start,
                goto out_err;
        }
 
+       if (request_locality(chip, 0) != 0) {
+               rc = -ENODEV;
+               goto out_err;
+       }
+
        vendor = ioread32(chip->vendor.iobase + TPM_DID_VID(0));
 
        /* Default timeouts */
@@ -487,11 +492,6 @@ static int tpm_tis_init(struct device *dev, resource_size_t start,
        if (intfcaps & TPM_INTF_DATA_AVAIL_INT)
                dev_dbg(dev, "\tData Avail Int Support\n");
 
-       if (request_locality(chip, 0) != 0) {
-               rc = -ENODEV;
-               goto out_err;
-       }
-
        /* INTERRUPT Setup */
        init_waitqueue_head(&chip->vendor.read_queue);
        init_waitqueue_head(&chip->vendor.int_queue);
index 5fd6688a444a3690c6340aa61fdf1652939def63..ddd3a259cea1161061aaf3419e199e8507a7867c 100644 (file)
@@ -12,7 +12,7 @@ if CRYPTO_HW
 
 config CRYPTO_DEV_PADLOCK
        tristate "Support for VIA PadLock ACE"
-       depends on X86_32
+       depends on X86_32 && !UML
        select CRYPTO_ALGAPI
        help
          Some VIA processors come with an integrated crypto engine
index 6a7d25fc247068f079fb095bfb65b59e0fbd38e4..c46b7c219ee92987b59386adbaa791b167aa28df 100644 (file)
@@ -3,11 +3,13 @@
 #
 
 menuconfig DMADEVICES
-       bool "DMA Offload Engine support"
+       bool "DMA Engine support"
        depends on (PCI && X86) || ARCH_IOP32X || ARCH_IOP33X || ARCH_IOP13XX
        help
-         Intel(R) offload engines enable offloading memory copies in the
-         network stack and RAID operations in the MD driver.
+         DMA engines can do asynchronous data transfers without
+         involving the host CPU.  Currently, this framework can be
+         used to offload memory copies in the network stack and
+         RAID operations in the MD driver.
 
 if DMADEVICES
 
index c9b9081831daed59b0201a2bc6b68671e51fdf8f..436a855a4c60700e2cc64f22446a57daf78ec504 100644 (file)
@@ -437,6 +437,21 @@ static void ar_context_run(struct ar_context *ctx)
        flush_writes(ctx->ohci);
 }
 
+static struct descriptor *
+find_branch_descriptor(struct descriptor *d, int z)
+{
+       int b, key;
+
+       b   = (le16_to_cpu(d->control) & DESCRIPTOR_BRANCH_ALWAYS) >> 2;
+       key = (le16_to_cpu(d->control) & DESCRIPTOR_KEY_IMMEDIATE) >> 8;
+
+       /* figure out which descriptor the branch address goes in */
+       if (z == 2 && (b == 3 || key == 2))
+               return d;
+       else
+               return d + z - 1;
+}
+
 static void context_tasklet(unsigned long data)
 {
        struct context *ctx = (struct context *) data;
@@ -455,7 +470,7 @@ static void context_tasklet(unsigned long data)
                address = le32_to_cpu(last->branch_address);
                z = address & 0xf;
                d = ctx->buffer + (address - ctx->buffer_bus) / sizeof(*d);
-               last = (z == 2) ? d : d + z - 1;
+               last = find_branch_descriptor(d, z);
 
                if (!ctx->callback(ctx, d, last))
                        break;
@@ -566,7 +581,7 @@ static void context_append(struct context *ctx,
 
        ctx->head_descriptor = d + z + extra;
        ctx->prev_descriptor->branch_address = cpu_to_le32(d_bus | z);
-       ctx->prev_descriptor = z == 2 ? d : d + z - 1;
+       ctx->prev_descriptor = find_branch_descriptor(d, z);
 
        dma_sync_single_for_device(ctx->ohci->card.device, ctx->buffer_bus,
                                   ctx->buffer_size, DMA_TO_DEVICE);
@@ -655,7 +670,7 @@ at_context_queue_packet(struct context *ctx, struct fw_packet *packet)
        driver_data = (struct driver_data *) &d[3];
        driver_data->packet = packet;
        packet->driver_data = driver_data;
-       
+
        if (packet->payload_length > 0) {
                payload_bus =
                        dma_map_single(ohci->card.device, packet->payload,
@@ -903,7 +918,7 @@ at_context_transmit(struct context *ctx, struct fw_packet *packet)
 
        if (retval < 0)
                packet->callback(packet, &ctx->ohci->card, packet->ack);
-       
+
 }
 
 static void bus_reset_tasklet(unsigned long data)
@@ -1431,6 +1446,57 @@ static int handle_ir_dualbuffer_packet(struct context *context,
        return 1;
 }
 
+static int handle_ir_packet_per_buffer(struct context *context,
+                                      struct descriptor *d,
+                                      struct descriptor *last)
+{
+       struct iso_context *ctx =
+               container_of(context, struct iso_context, context);
+       struct descriptor *pd = d + 1;
+       __le32 *ir_header;
+       size_t header_length;
+       void *p, *end;
+       int i, z;
+
+       if (pd->res_count == pd->req_count)
+               /* Descriptor(s) not done yet, stop iteration */
+               return 0;
+
+       header_length = le16_to_cpu(d->req_count);
+
+       i   = ctx->header_length;
+       z   = le32_to_cpu(pd->branch_address) & 0xf;
+       p   = d + z;
+       end = p + header_length;
+
+       while (p < end && i + ctx->base.header_size <= PAGE_SIZE) {
+               /*
+                * The iso header is byteswapped to little endian by
+                * the controller, but the remaining header quadlets
+                * are big endian.  We want to present all the headers
+                * as big endian, so we have to swap the first quadlet.
+                */
+               *(u32 *) (ctx->header + i) = __swab32(*(u32 *) (p + 4));
+               memcpy(ctx->header + i + 4, p + 8, ctx->base.header_size - 4);
+               i += ctx->base.header_size;
+               p += ctx->base.header_size + 4;
+       }
+
+       ctx->header_length = i;
+
+       if (le16_to_cpu(pd->control) & DESCRIPTOR_IRQ_ALWAYS) {
+               ir_header = (__le32 *) (d + z);
+               ctx->base.callback(&ctx->base,
+                                  le32_to_cpu(ir_header[0]) & 0xffff,
+                                  ctx->header_length, ctx->header,
+                                  ctx->base.callback_data);
+               ctx->header_length = 0;
+       }
+
+
+       return 1;
+}
+
 static int handle_it_packet(struct context *context,
                            struct descriptor *d,
                            struct descriptor *last)
@@ -1466,14 +1532,12 @@ ohci_allocate_iso_context(struct fw_card *card, int type, size_t header_size)
        } else {
                mask = &ohci->ir_context_mask;
                list = ohci->ir_context_list;
-               callback = handle_ir_dualbuffer_packet;
+               if (ohci->version >= OHCI_VERSION_1_1)
+                       callback = handle_ir_dualbuffer_packet;
+               else
+                       callback = handle_ir_packet_per_buffer;
        }
 
-       /* FIXME: We need a fallback for pre 1.1 OHCI. */
-       if (callback == handle_ir_dualbuffer_packet &&
-           ohci->version < OHCI_VERSION_1_1)
-               return ERR_PTR(-ENOSYS);
-
        spin_lock_irqsave(&ohci->lock, flags);
        index = ffs(*mask) - 1;
        if (index >= 0)
@@ -1532,7 +1596,9 @@ static int ohci_start_iso(struct fw_iso_context *base,
                context_run(&ctx->context, match);
        } else {
                index = ctx - ohci->ir_context_list;
-               control = IR_CONTEXT_DUAL_BUFFER_MODE | IR_CONTEXT_ISOCH_HEADER;
+               control = IR_CONTEXT_ISOCH_HEADER;
+               if (ohci->version >= OHCI_VERSION_1_1)
+                       control |= IR_CONTEXT_DUAL_BUFFER_MODE;
                match = (tags << 28) | (sync << 8) | ctx->base.channel;
                if (cycle >= 0) {
                        match |= (cycle & 0x07fff) << 12;
@@ -1738,7 +1804,6 @@ ohci_queue_iso_receive_dualbuffer(struct fw_iso_context *base,
        offset   = payload & ~PAGE_MASK;
        rest     = p->payload_length;
 
-       /* FIXME: OHCI 1.0 doesn't support dual buffer receive */
        /* FIXME: make packet-per-buffer/dual-buffer a context option */
        while (rest > 0) {
                d = context_get_descriptors(&ctx->context,
@@ -1776,6 +1841,81 @@ ohci_queue_iso_receive_dualbuffer(struct fw_iso_context *base,
        return 0;
 }
 
+static int
+ohci_queue_iso_receive_packet_per_buffer(struct fw_iso_context *base,
+                                        struct fw_iso_packet *packet,
+                                        struct fw_iso_buffer *buffer,
+                                        unsigned long payload)
+{
+       struct iso_context *ctx = container_of(base, struct iso_context, base);
+       struct descriptor *d = NULL, *pd = NULL;
+       struct fw_iso_packet *p;
+       dma_addr_t d_bus, page_bus;
+       u32 z, header_z, rest;
+       int i, page, offset, packet_count, header_size;
+
+       if (packet->skip) {
+               d = context_get_descriptors(&ctx->context, 1, &d_bus);
+               if (d == NULL)
+                       return -ENOMEM;
+
+               d->control = cpu_to_le16(DESCRIPTOR_STATUS |
+                                        DESCRIPTOR_INPUT_LAST |
+                                        DESCRIPTOR_BRANCH_ALWAYS |
+                                        DESCRIPTOR_WAIT);
+               context_append(&ctx->context, d, 1, 0);
+       }
+
+       /* one descriptor for header, one for payload */
+       /* FIXME: handle cases where we need multiple desc. for payload */
+       z = 2;
+       p = packet;
+
+       /*
+        * The OHCI controller puts the status word in the
+        * buffer too, so we need 4 extra bytes per packet.
+        */
+       packet_count = p->header_length / ctx->base.header_size;
+       header_size  = packet_count * (ctx->base.header_size + 4);
+
+       /* Get header size in number of descriptors. */
+       header_z = DIV_ROUND_UP(header_size, sizeof(*d));
+       page     = payload >> PAGE_SHIFT;
+       offset   = payload & ~PAGE_MASK;
+       rest     = p->payload_length;
+
+       for (i = 0; i < packet_count; i++) {
+               /* d points to the header descriptor */
+               d = context_get_descriptors(&ctx->context,
+                                           z + header_z, &d_bus);
+               if (d == NULL)
+                       return -ENOMEM;
+
+               d->control      = cpu_to_le16(DESCRIPTOR_INPUT_MORE);
+               d->req_count    = cpu_to_le16(header_size);
+               d->res_count    = d->req_count;
+               d->data_address = cpu_to_le32(d_bus + (z * sizeof(*d)));
+
+               /* pd points to the payload descriptor */
+               pd = d + 1;
+               pd->control = cpu_to_le16(DESCRIPTOR_STATUS |
+                                         DESCRIPTOR_INPUT_LAST |
+                                         DESCRIPTOR_BRANCH_ALWAYS);
+               if (p->interrupt)
+                       pd->control |= cpu_to_le16(DESCRIPTOR_IRQ_ALWAYS);
+
+               pd->req_count = cpu_to_le16(rest);
+               pd->res_count = pd->req_count;
+
+               page_bus = page_private(buffer->pages[page]);
+               pd->data_address = cpu_to_le32(page_bus + offset);
+
+               context_append(&ctx->context, d, z, header_z);
+       }
+
+       return 0;
+}
+
 static int
 ohci_queue_iso(struct fw_iso_context *base,
               struct fw_iso_packet *packet,
@@ -1790,8 +1930,9 @@ ohci_queue_iso(struct fw_iso_context *base,
                return ohci_queue_iso_receive_dualbuffer(base, packet,
                                                         buffer, payload);
        else
-               /* FIXME: Implement fallback for OHCI 1.0 controllers. */
-               return -ENOSYS;
+               return ohci_queue_iso_receive_packet_per_buffer(base, packet,
+                                                               buffer,
+                                                               payload);
 }
 
 static const struct fw_card_driver ohci_driver = {
@@ -1911,12 +2052,6 @@ pci_probe(struct pci_dev *dev, const struct pci_device_id *ent)
        ohci->version = reg_read(ohci, OHCI1394_Version) & 0x00ff00ff;
        fw_notify("Added fw-ohci device %s, OHCI version %x.%x\n",
                  dev->dev.bus_id, ohci->version >> 16, ohci->version & 0xff);
-       if (ohci->version < OHCI_VERSION_1_1) {
-               fw_notify("    Isochronous I/O is not yet implemented for "
-                         "OHCI 1.0 chips.\n");
-               fw_notify("    Cameras, audio devices etc. won't work on "
-                         "this controller with this driver version.\n");
-       }
        return 0;
 
  fail_self_id:
index 5c82ec7f8bbda7fea7ec8a1f81c14add4a25c6d8..3ee60d26e3a2e5cbad5e08a6c83353059f43a524 100644 (file)
@@ -337,11 +337,10 @@ static int coretemp_cpu_callback(struct notifier_block *nfb,
 
        switch (action) {
        case CPU_ONLINE:
-       case CPU_ONLINE_FROZEN:
+       case CPU_DOWN_FAILED:
                coretemp_device_add(cpu);
                break;
-       case CPU_DEAD:
-       case CPU_DEAD_FROZEN:
+       case CPU_DOWN_PREPARE:
                coretemp_device_remove(cpu);
                break;
        }
index bd7aaff35240c89bd48505b5543c8a56f9737c03..67679882ebef8f36d2722035c09b4f700c4105fd 100644 (file)
@@ -404,7 +404,7 @@ static irqreturn_t i2c_davinci_isr(int this_irq, void *dev_id)
                                                      DAVINCI_I2C_STR_REG,
                                                      w);
                        } else
-                               dev_err(dev->dev, "RDR IRQ while no"
+                               dev_err(dev->dev, "RDR IRQ while no "
                                        "data requested\n");
                        break;
 
@@ -423,7 +423,7 @@ static irqreturn_t i2c_davinci_isr(int this_irq, void *dev_id)
                                                      DAVINCI_I2C_IMR_REG,
                                                      w);
                        } else
-                               dev_err(dev->dev, "TDR IRQ while no data to"
+                               dev_err(dev->dev, "TDR IRQ while no data to "
                                        "send\n");
                        break;
 
index 44e1cd21bb0130ae1e4b0251893c451a630c4a6d..3ca19fc234fb45122be765f517288aa419b3d516 100644 (file)
@@ -140,6 +140,7 @@ static int __init i2c_gpio_probe(struct platform_device *pdev)
        adap->owner = THIS_MODULE;
        snprintf(adap->name, sizeof(adap->name), "i2c-gpio%d", pdev->id);
        adap->algo_data = bit_data;
+       adap->class = I2C_CLASS_HWMON;
        adap->dev.parent = &pdev->dev;
 
        /*
index 89a30028ddb6e40d9cd00402936460e196a32f9b..cb55cf2ba1e91a4279f3406f34216b4a59f4094e 100644 (file)
@@ -203,7 +203,7 @@ static int omap_i2c_init(struct omap_i2c_dev *dev)
                while (!(omap_i2c_read_reg(dev, OMAP_I2C_SYSS_REG) &
                         OMAP_I2C_SYSS_RDONE)) {
                        if (time_after(jiffies, timeout)) {
-                               dev_warn(dev->dev, "timeout waiting"
+                               dev_warn(dev->dev, "timeout waiting "
                                                "for controller reset\n");
                                return -ETIMEDOUT;
                        }
@@ -483,7 +483,7 @@ omap_i2c_isr(int this_irq, void *dev_id)
                                        dev->buf_len--;
                                }
                        } else
-                               dev_err(dev->dev, "RRDY IRQ while no data"
+                               dev_err(dev->dev, "RRDY IRQ while no data "
                                                "requested\n");
                        omap_i2c_ack_stat(dev, OMAP_I2C_STAT_RRDY);
                        continue;
@@ -498,7 +498,7 @@ omap_i2c_isr(int this_irq, void *dev_id)
                                        dev->buf_len--;
                                }
                        } else
-                               dev_err(dev->dev, "XRDY IRQ while no"
+                               dev_err(dev->dev, "XRDY IRQ while no "
                                        "data to send\n");
                        omap_i2c_write_reg(dev, OMAP_I2C_DATA_REG, w);
                        omap_i2c_ack_stat(dev, OMAP_I2C_STAT_XRDY);
index fe04e46991aa9911967c267166c4b11db944cc6f..b767603a07ba38d41c08269e727823c89b910c47 100644 (file)
@@ -26,7 +26,7 @@
 #include <linux/interrupt.h>
 #include <linux/platform_device.h>
 #include <linux/usb/ch9.h>
-#include <linux/usb_gadget.h>
+#include <linux/usb/gadget.h>
 #include <linux/usb.h>
 #include <linux/usb/otg.h>
 #include <linux/i2c.h>
index e445fe6e4ba9d7df6f39ff141f6b699c1481cf63..45b22282f1498b071b6386225ca78afedd21433b 100644 (file)
@@ -313,7 +313,6 @@ comment "IDE chipset support/bugfixes"
 
 config IDE_GENERIC
        tristate "generic/default IDE chipset support"
-       default H8300
        help
          If unsure, say N.
 
@@ -484,6 +483,7 @@ config WDC_ALI15X3
 
 config BLK_DEV_AMD74XX
        tristate "AMD and nVidia IDE support"
+       depends on !ARM
        select BLK_DEV_IDEDMA_PCI
        help
          This driver adds explicit support for AMD-7xx and AMD-8111 chips
@@ -883,6 +883,49 @@ config BLK_DEV_IDE_BAST
          Say Y here if you want to support the onboard IDE channels on the
          Simtec BAST or the Thorcom VR1000
 
+config ETRAX_IDE
+       bool "ETRAX IDE support"
+       depends on CRIS && BROKEN
+       select BLK_DEV_IDEDMA
+       select IDE_GENERIC
+       help
+         Enables the ETRAX IDE driver.
+
+         You can't use parallel ports or SCSI ports at the same time.
+
+config ETRAX_IDE_DELAY
+       int "Delay for drives to regain consciousness"
+       depends on ETRAX_IDE && ETRAX_ARCH_V10
+       default 15
+       help
+         Number of seconds to wait for IDE drives to spin up after an IDE
+         reset.
+
+choice
+       prompt "IDE reset pin"
+       depends on ETRAX_IDE && ETRAX_ARCH_V10
+       default ETRAX_IDE_PB7_RESET
+
+config ETRAX_IDE_PB7_RESET
+       bool "Port_PB_Bit_7"
+       help
+         IDE reset on pin 7 on port B
+
+config ETRAX_IDE_G27_RESET
+       bool "Port_G_Bit_27"
+       help
+         IDE reset on pin 27 on port G
+
+endchoice
+
+config IDE_H8300
+       bool "H8300 IDE support"
+       depends on H8300
+       select IDE_GENERIC
+       default y
+       help
+         Enables the H8300 IDE driver.
+
 config BLK_DEV_GAYLE
        bool "Amiga Gayle IDE interface support"
        depends on AMIGA
@@ -963,7 +1006,7 @@ config BLK_DEV_Q40IDE
 
 config BLK_DEV_MPC8xx_IDE
        bool "MPC8xx IDE support"
-       depends on 8xx && IDE=y && BLK_DEV_IDE=y && !PPC_MERGE
+       depends on 8xx && (LWMON || IVMS8 || IVML24 || TQM8xxL) && IDE=y && BLK_DEV_IDE=y && !PPC_MERGE
        select IDE_GENERIC
        help
          This option provides support for IDE on Motorola MPC8xx Systems.
index 75dc6969e0a7dfc4e6ed01015c96c21b98387b3c..b181fc672057b7d157c9a1375f148ea8d06c06d1 100644 (file)
@@ -39,7 +39,7 @@ ide-core-$(CONFIG_BLK_DEV_MPC8xx_IDE) += ppc/mpc8xx.o
 ide-core-$(CONFIG_BLK_DEV_IDE_PMAC)    += ppc/pmac.o
 
 # built-in only drivers from h8300/
-ide-core-$(CONFIG_H8300)               += h8300/ide-h8300.o
+ide-core-$(CONFIG_IDE_H8300)           += h8300/ide-h8300.o
 
 obj-$(CONFIG_BLK_DEV_IDE)              += ide-core.o
 obj-$(CONFIG_IDE_GENERIC)              += ide-generic.o
index 7f5bc2ee6c7e554d631ea6c0c1e8f42cc3a66940..476e0d65ed438f34375b155f0b80169f39a2b6fa 100644 (file)
@@ -773,15 +773,16 @@ init_e100_ide (void)
        /* the IDE control register is at ATA address 6, with CS1 active instead of CS0 */
        ide_offsets[IDE_CONTROL_OFFSET] = cris_ide_reg_addr(6, 1, 0);
 
-       /* first fill in some stuff in the ide_hwifs fields */
+       for (h = 0; h < 4; h++) {
+               ide_hwif_t *hwif = NULL;
 
-       for(h = 0; h < MAX_HWIFS; h++) {
-               ide_hwif_t *hwif = &ide_hwifs[h];
                ide_setup_ports(&hw, cris_ide_base_address(h),
                                ide_offsets,
                                0, 0, cris_ide_ack_intr,
                                ide_default_irq(0));
                ide_register_hw(&hw, NULL, 1, &hwif);
+               if (hwif == NULL)
+                       continue;
                hwif->mmio = 1;
                hwif->chipset = ide_etrax100;
                hwif->set_pio_mode = &cris_set_pio_mode;
index e3add70b9cd8b29f45156e4ad9b6d4ad2b4d8adc..0d795a1678c77fff37d57b1813eed8a079cff6f2 100644 (file)
@@ -130,6 +130,7 @@ static const struct drive_list_entry drive_blacklist [] = {
        { "_NEC DV5800A",               NULL            },
        { "SAMSUNG CD-ROM SN-124",      "N001" },
        { "Seagate STT20000A",          NULL  },
+       { "CD-ROM CDR_U200",            "1.09" },
        { NULL                  ,       NULL            }
 
 };
index e17a9ee120ead8182c24cdc8fca7b81a043ed288..5c3256180ae541f824f28042d8704bd24eacba79 100644 (file)
@@ -303,9 +303,6 @@ void default_hwif_transport(ide_hwif_t *hwif)
        hwif->atapi_output_bytes        = atapi_output_bytes;
 }
 
-/*
- * Beginning of Taskfile OPCODE Library and feature sets.
- */
 void ide_fix_driveid (struct hd_driveid *id)
 {
 #ifndef __LITTLE_ENDIAN
@@ -592,6 +589,9 @@ EXPORT_SYMBOL_GPL(ide_in_drive_list);
 static const struct drive_list_entry ivb_list[] = {
        { "QUANTUM FIREBALLlct10 05"    , "A03.0900"    },
        { "TSSTcorp CDDVDW SH-S202J"    , "SB00"        },
+       { "TSSTcorp CDDVDW SH-S202J"    , "SB01"        },
+       { "TSSTcorp CDDVDW SH-S202N"    , "SB00"        },
+       { "TSSTcorp CDDVDW SH-S202N"    , "SB01"        },
        { NULL                          , NULL          }
 };
 
@@ -756,7 +756,7 @@ int ide_driveid_update(ide_drive_t *drive)
 int ide_config_drive_speed(ide_drive_t *drive, u8 speed)
 {
        ide_hwif_t *hwif = drive->hwif;
-       int error;
+       int error = 0;
        u8 stat;
 
 //     while (HWGROUP(drive)->busy)
@@ -767,6 +767,10 @@ int ide_config_drive_speed(ide_drive_t *drive, u8 speed)
                hwif->dma_host_off(drive);
 #endif
 
+       /* Skip setting PIO flow-control modes on pre-EIDE drives */
+       if ((speed & 0xf8) == XFER_PIO_0 && !(drive->id->capability & 0x08))
+               goto skip;
+
        /*
         * Don't use ide_wait_cmd here - it will
         * attempt to set_geometry and recalibrate,
@@ -814,6 +818,7 @@ int ide_config_drive_speed(ide_drive_t *drive, u8 speed)
        drive->id->dma_mword &= ~0x0F00;
        drive->id->dma_1word &= ~0x0F00;
 
+ skip:
 #ifdef CONFIG_BLK_DEV_IDEDMA
        if (speed >= XFER_SW_DMA_0)
                hwif->dma_host_on(drive);
index 56fb0b84342959d9a51e116ff3b0686d47998251..ee848c7059954b091f14f200e89411ccfcd70109 100644 (file)
@@ -644,7 +644,7 @@ static void hwif_register (ide_hwif_t *hwif)
 
 static int wait_hwif_ready(ide_hwif_t *hwif)
 {
-       int rc;
+       int unit, rc;
 
        printk(KERN_DEBUG "Probing IDE interface %s...\n", hwif->name);
 
@@ -661,20 +661,26 @@ static int wait_hwif_ready(ide_hwif_t *hwif)
                return rc;
 
        /* Now make sure both master & slave are ready */
-       SELECT_DRIVE(&hwif->drives[0]);
-       hwif->OUTB(8, hwif->io_ports[IDE_CONTROL_OFFSET]);
-       mdelay(2);
-       rc = ide_wait_not_busy(hwif, 35000);
-       if (rc)
-               return rc;
-       SELECT_DRIVE(&hwif->drives[1]);
-       hwif->OUTB(8, hwif->io_ports[IDE_CONTROL_OFFSET]);
-       mdelay(2);
-       rc = ide_wait_not_busy(hwif, 35000);
+       for (unit = 0; unit < MAX_DRIVES; unit++) {
+               ide_drive_t *drive = &hwif->drives[unit];
 
+               /* Ignore disks that we will not probe for later. */
+               if (!drive->noprobe || drive->present) {
+                       SELECT_DRIVE(drive);
+                       hwif->OUTB(8, hwif->io_ports[IDE_CONTROL_OFFSET]);
+                       mdelay(2);
+                       rc = ide_wait_not_busy(hwif, 35000);
+                       if (rc)
+                               goto out;
+               } else
+                       printk(KERN_DEBUG "%s: ide_wait_not_busy() skipped\n",
+                                         drive->name);
+       }
+out:
        /* Exit function with master reselected (let's be sane) */
-       SELECT_DRIVE(&hwif->drives[0]);
-       
+       if (unit)
+               SELECT_DRIVE(&hwif->drives[0]);
+
        return rc;
 }
 
index 10311ecc674a4440511de0b4b27d0601d3718a45..38c3a6d63f301c0e7df0a73a96b6f49353847712 100644 (file)
 
 /* port addresses for auto-detection */
 #define ALI_NUM_PORTS 4
-static int ports[ALI_NUM_PORTS] __initdata = {0x074, 0x0f4, 0x034, 0x0e4};
+static const int ports[ALI_NUM_PORTS] __initdata =
+       { 0x074, 0x0f4, 0x034, 0x0e4 };
 
 /* register initialization data */
 typedef struct { u8 reg, data; } RegInitializer;
 
-static RegInitializer initData[] __initdata = {
+static const RegInitializer initData[] __initdata = {
        {0x01, 0x0f}, {0x02, 0x00}, {0x03, 0x00}, {0x04, 0x00},
        {0x05, 0x00}, {0x06, 0x00}, {0x07, 0x2b}, {0x0a, 0x0f},
        {0x25, 0x00}, {0x26, 0x00}, {0x27, 0x00}, {0x28, 0x00},
@@ -177,7 +178,7 @@ static int __init findPort (void)
  * Initialize controller registers with default values.
  */
 static int __init initRegisters (void) {
-       RegInitializer *p;
+       const RegInitializer *p;
        u8 t;
        unsigned long flags;
 
index e87cd2f16430a6555e4f7e88fca5ee1e17d0e3e0..5c6aa77c237087d87e14837f6d5239716bb3dc24 100644 (file)
@@ -81,7 +81,7 @@ int macide_ack_intr(ide_hwif_t* hwif)
  * Probe for a Macintosh IDE interface
  */
 
-void macide_init(void)
+void __init macide_init(void)
 {
        hw_regs_t hw;
        ide_hwif_t *hwif;
index a73db1bd482d6ecbdcf023f72aba169e61595f4b..6ea46a6723e2c3975758a88bba8c304d96390bb6 100644 (file)
@@ -111,7 +111,7 @@ static const char *q40_ide_names[Q40IDE_NUM_HWIFS]={
  *  Probe for Q40 IDE interfaces
  */
 
-void q40ide_init(void)
+void __init q40ide_init(void)
 {
     int i;
     ide_hwif_t *hwif;
index 19ec421f7b9f4c2f4871c74069c9dd0fa9db46e2..44268504ae433ce8a4065ed048eca4937198966d 100644 (file)
@@ -260,6 +260,11 @@ static int __devinit aec62xx_init_one(struct pci_dev *dev, const struct pci_devi
 {
        struct ide_port_info d;
        u8 idx = id->driver_data;
+       int err;
+
+       err = pci_enable_device(dev);
+       if (err)
+               return err;
 
        d = aec62xx_chipsets[idx];
 
@@ -272,7 +277,11 @@ static int __devinit aec62xx_init_one(struct pci_dev *dev, const struct pci_devi
                }
        }
 
-       return ide_setup_pci_device(dev, &d);
+       err = ide_setup_pci_device(dev, &d);
+       if (err)
+               pci_disable_device(dev);
+
+       return err;
 }
 
 static const struct pci_device_id aec62xx_pci_tbl[] = {
index a607dd31a64c58a9e23b7677d0702fb24cacd64e..ce293936af4b4fc808a9779ae7e09c6cc8424b67 100644 (file)
@@ -603,6 +603,11 @@ static int ali_cable_override(struct pci_dev *pdev)
            pdev->subsystem_device == 0x10AF)
                return 1;
 
+       /* Mitac 8317 (Winbook-A) and relatives */
+       if (pdev->subsystem_vendor == 0x1071 &&
+           pdev->subsystem_device == 0x8317)
+               return 1;
+
        /* Systems by DMI */
        if (dmi_check_system(cable_dmi_table))
                return 1;
index 63625a0be71298b114b276a38125e3fba51b7863..27781d294cea73b29911e845b6cd689679331345 100644 (file)
@@ -306,6 +306,7 @@ static const struct ich_laptop ich_laptop[] = {
        { 0x27DF, 0x0005, 0x0280 },     /* ICH7 on Acer 5602WLMi */
        { 0x27DF, 0x1025, 0x0110 },     /* ICH7 on Acer 3682WLMi */
        { 0x27DF, 0x1043, 0x1267 },     /* ICH7 on Asus W5F */
+       { 0x27DF, 0x103C, 0x30A1 },     /* ICH7 on HP Compaq nc2400 */
        { 0x24CA, 0x1025, 0x0061 },     /* ICH4 on Acer Aspire 2023WLMi */
        /* end marker */
        { 0, }
index 6d99441c605be1836843c514de2a780b8dcee804..5709c252543b5c7a68a4b04064f26e85ef8ac2dc 100644 (file)
@@ -1,5 +1,5 @@
 /*
- * linux/drivers/ide/pci/siimage.c             Version 1.18    Oct 18 2007
+ * linux/drivers/ide/pci/siimage.c             Version 1.19    Nov 16 2007
  *
  * Copyright (C) 2001-2002     Andre Hedrick <andre@linux-ide.org>
  * Copyright (C) 2003          Red Hat <alan@redhat.com>
@@ -459,48 +459,6 @@ static void sil_sata_pre_reset(ide_drive_t *drive)
        }
 }
 
-/**
- *     siimage_reset   -       reset a device on an siimage controller
- *     @drive: drive to reset
- *
- *     Perform a controller level reset fo the device. For
- *     SATA we must also check the PHY.
- */
-static void siimage_reset (ide_drive_t *drive)
-{
-       ide_hwif_t *hwif        = HWIF(drive);
-       u8 reset                = 0;
-       unsigned long addr      = siimage_selreg(hwif, 0);
-
-       if (hwif->mmio) {
-               reset = hwif->INB(addr);
-               hwif->OUTB((reset|0x03), addr);
-               /* FIXME:posting */
-               udelay(25);
-               hwif->OUTB(reset, addr);
-               (void) hwif->INB(addr);
-       } else {
-               pci_read_config_byte(hwif->pci_dev, addr, &reset);
-               pci_write_config_byte(hwif->pci_dev, addr, reset|0x03);
-               udelay(25);
-               pci_write_config_byte(hwif->pci_dev, addr, reset);
-               pci_read_config_byte(hwif->pci_dev, addr, &reset);
-       }
-
-       if (SATA_STATUS_REG) {
-               /* SATA_STATUS_REG is valid only when in MMIO mode */
-               u32 sata_stat = readl((void __iomem *)SATA_STATUS_REG);
-               printk(KERN_WARNING "%s: reset phy, status=0x%08x, %s\n",
-                       hwif->name, sata_stat, __FUNCTION__);
-               if (!(sata_stat)) {
-                       printk(KERN_WARNING "%s: reset phy dead, status=0x%08x\n",
-                               hwif->name, sata_stat);
-                       drive->failures++;
-               }
-       }
-}
-
 /**
  *     proc_reports_siimage            -       add siimage controller to proc
  *     @dev: PCI device
@@ -857,7 +815,6 @@ static void __devinit init_hwif_siimage(ide_hwif_t *hwif)
 {
        u8 sata = is_sata(hwif);
 
-       hwif->resetproc = &siimage_reset;
        hwif->set_pio_mode = &sil_set_pio_mode;
        hwif->set_dma_mode = &sil_set_dma_mode;
 
index f6e2ab3dd1664d2003986906226a384b5379a5fb..d90b42917775dc3e5345b16b836f0ab649142cfc 100644 (file)
@@ -526,6 +526,7 @@ static const struct sis_laptop sis_laptop[] = {
        /* devid, subvendor, subdev */
        { 0x5513, 0x1043, 0x1107 },     /* ASUS A6K */
        { 0x5513, 0x1734, 0x105f },     /* FSC Amilo A1630 */
+       { 0x5513, 0x1071, 0x8640 },     /* EasyNote K5305 */
        /* end marker */
        { 0, }
 };
index 5011ba22e36c4e23a73a39ca98700ef2c31de738..0895e753a35d34af4ba8b508fe3422fa82b4c461 100644 (file)
@@ -240,9 +240,6 @@ static int trm290_ide_dma_test_irq (ide_drive_t *drive)
        return (status == 0x00ff);
 }
 
-/*
- * Invoked from ide-dma.c at boot time.
- */
 static void __devinit init_hwif_trm290(ide_hwif_t *hwif)
 {
        unsigned int cfgbase = 0;
index 5afdfef7264c512bc4594f8e1f21da3581bc42b4..7f7a59885777b41dcf4dd0556377102dda1a5089 100644 (file)
@@ -1513,7 +1513,7 @@ pmac_ide_build_dmatable(ide_drive_t *drive, struct request *rq)
 
                if (pmif->broken_dma && cur_addr & (L1_CACHE_BYTES - 1)) {
                        if (pmif->broken_dma_warn == 0) {
-                               printk(KERN_WARNING "%s: DMA on non aligned address,"
+                               printk(KERN_WARNING "%s: DMA on non aligned address, "
                                       "switching to PIO on Ohare chipset\n", drive->name);
                                pmif->broken_dma_warn = 1;
                        }
index 453eb995c1d47b59255e46d4fcad70147d83c9e5..f7782c882ab4c9cfb9c6c49ee116efb1107f639d 100644 (file)
@@ -76,8 +76,12 @@ int ehca_calc_ipd(struct ehca_shca *shca, int port,
 
        link = ib_width_enum_to_int(pa.active_width) * pa.active_speed;
 
-       /* IPD = round((link / path) - 1) */
-       *ipd = ((link + (path >> 1)) / path) - 1;
+       if (path >= link)
+               /* no need to throttle if path faster than link */
+               *ipd = 0;
+       else
+               /* IPD = round((link / path) - 1) */
+               *ipd = ((link + (path >> 1)) / path) - 1;
 
        return 0;
 }
index 2e3e6547cb784318859da7efa40059a689a0e266..dd126681fed095dc7dd58eb674c6dd08e0f80c94 100644 (file)
@@ -1203,7 +1203,7 @@ static int internal_modify_qp(struct ib_qp *ibqp,
                mqpcb->service_level = attr->ah_attr.sl;
                update_mask |= EHCA_BMASK_SET(MQPCB_MASK_SERVICE_LEVEL, 1);
 
-               if (ehca_calc_ipd(shca, my_qp->init_attr.port_num,
+               if (ehca_calc_ipd(shca, mqpcb->prim_phys_port,
                                  attr->ah_attr.static_rate,
                                  &mqpcb->max_static_rate)) {
                        ret = -EINVAL;
@@ -1302,7 +1302,7 @@ static int internal_modify_qp(struct ib_qp *ibqp,
                mqpcb->source_path_bits_al = attr->alt_ah_attr.src_path_bits;
                mqpcb->service_level_al = attr->alt_ah_attr.sl;
 
-               if (ehca_calc_ipd(shca, my_qp->init_attr.port_num,
+               if (ehca_calc_ipd(shca, mqpcb->alt_phys_port,
                                  attr->alt_ah_attr.static_rate,
                                  &mqpcb->max_static_rate_al)) {
                        ret = -EINVAL;
index 08d8ae148cd030ca99896d885e4d7a38af8804fd..d1380c7a1703bf463776699f366fa3c490a6e9af 100644 (file)
@@ -395,12 +395,9 @@ int ipath_resize_cq(struct ib_cq *ibcq, int cqe, struct ib_udata *udata)
                goto bail;
        }
 
-       /*
-        * Return the address of the WC as the offset to mmap.
-        * See ipath_mmap() for details.
-        */
+       /* Check that we can write the offset to mmap. */
        if (udata && udata->outlen >= sizeof(__u64)) {
-               __u64 offset = (__u64) wc;
+               __u64 offset = 0;
 
                ret = ib_copy_to_udata(udata, &offset, sizeof(offset));
                if (ret)
@@ -450,6 +447,18 @@ int ipath_resize_cq(struct ib_cq *ibcq, int cqe, struct ib_udata *udata)
                struct ipath_mmap_info *ip = cq->ip;
 
                ipath_update_mmap_info(dev, ip, sz, wc);
+
+               /*
+                * Return the offset to mmap.
+                * See ipath_mmap() for details.
+                */
+               if (udata && udata->outlen >= sizeof(__u64)) {
+                       ret = ib_copy_to_udata(udata, &ip->offset,
+                                              sizeof(ip->offset));
+                       if (ret)
+                               goto bail;
+               }
+
                spin_lock_irq(&dev->pending_lock);
                if (list_empty(&ip->pending_mmaps))
                        list_add(&ip->pending_mmaps, &dev->pending_mmaps);
index 6a41fdbc8e57dfca779759de14137fe33b811015..b997ff88401bf5f3ceca581a48ac05d4a94ba079 100644 (file)
@@ -835,7 +835,8 @@ struct ib_qp *ipath_create_qp(struct ib_pd *ibpd,
                                      init_attr->qp_type);
                if (err) {
                        ret = ERR_PTR(err);
-                       goto bail_rwq;
+                       vfree(qp->r_rq.wq);
+                       goto bail_qp;
                }
                qp->ip = NULL;
                ipath_reset_qp(qp);
@@ -863,7 +864,7 @@ struct ib_qp *ipath_create_qp(struct ib_pd *ibpd,
                                               sizeof(offset));
                        if (err) {
                                ret = ERR_PTR(err);
-                               goto bail_rwq;
+                               goto bail_ip;
                        }
                } else {
                        u32 s = sizeof(struct ipath_rwq) +
@@ -875,7 +876,7 @@ struct ib_qp *ipath_create_qp(struct ib_pd *ibpd,
                                                   qp->r_rq.wq);
                        if (!qp->ip) {
                                ret = ERR_PTR(-ENOMEM);
-                               goto bail_rwq;
+                               goto bail_ip;
                        }
 
                        err = ib_copy_to_udata(udata, &(qp->ip->offset),
@@ -907,9 +908,11 @@ struct ib_qp *ipath_create_qp(struct ib_pd *ibpd,
        goto bail;
 
 bail_ip:
-       kfree(qp->ip);
-bail_rwq:
-       vfree(qp->r_rq.wq);
+       if (qp->ip)
+               kref_put(&qp->ip->ref, ipath_release_mmap_info);
+       else
+               vfree(qp->r_rq.wq);
+       ipath_free_qp(&dev->qp_table, qp);
 bail_qp:
        kfree(qp);
 bail_swq:
index 40c36ec190167080784383f457dff4c541a21f71..2fef36f4b675a8d0022bb1819bc4d560d977a0e2 100644 (file)
@@ -59,7 +59,7 @@ int ipath_post_srq_receive(struct ib_srq *ibsrq, struct ib_recv_wr *wr,
 
                if ((unsigned) wr->num_sge > srq->rq.max_sge) {
                        *bad_wr = wr;
-                       ret = -ENOMEM;
+                       ret = -EINVAL;
                        goto bail;
                }
 
@@ -211,11 +211,11 @@ int ipath_modify_srq(struct ib_srq *ibsrq, struct ib_srq_attr *attr,
                     struct ib_udata *udata)
 {
        struct ipath_srq *srq = to_isrq(ibsrq);
+       struct ipath_rwq *wq;
        int ret = 0;
 
        if (attr_mask & IB_SRQ_MAX_WR) {
                struct ipath_rwq *owq;
-               struct ipath_rwq *wq;
                struct ipath_rwqe *p;
                u32 sz, size, n, head, tail;
 
@@ -236,27 +236,20 @@ int ipath_modify_srq(struct ib_srq *ibsrq, struct ib_srq_attr *attr,
                        goto bail;
                }
 
-               /*
-                * Return the address of the RWQ as the offset to mmap.
-                * See ipath_mmap() for details.
-                */
+               /* Check that we can write the offset to mmap. */
                if (udata && udata->inlen >= sizeof(__u64)) {
                        __u64 offset_addr;
-                       __u64 offset = (__u64) wq;
+                       __u64 offset = 0;
 
                        ret = ib_copy_from_udata(&offset_addr, udata,
                                                 sizeof(offset_addr));
-                       if (ret) {
-                               vfree(wq);
-                               goto bail;
-                       }
+                       if (ret)
+                               goto bail_free;
                        udata->outbuf = (void __user *) offset_addr;
                        ret = ib_copy_to_udata(udata, &offset,
                                               sizeof(offset));
-                       if (ret) {
-                               vfree(wq);
-                               goto bail;
-                       }
+                       if (ret)
+                               goto bail_free;
                }
 
                spin_lock_irq(&srq->rq.lock);
@@ -277,10 +270,8 @@ int ipath_modify_srq(struct ib_srq *ibsrq, struct ib_srq_attr *attr,
                else
                        n -= tail;
                if (size <= n) {
-                       spin_unlock_irq(&srq->rq.lock);
-                       vfree(wq);
                        ret = -EINVAL;
-                       goto bail;
+                       goto bail_unlock;
                }
                n = 0;
                p = wq->wq;
@@ -314,6 +305,18 @@ int ipath_modify_srq(struct ib_srq *ibsrq, struct ib_srq_attr *attr,
                        u32 s = sizeof(struct ipath_rwq) + size * sz;
 
                        ipath_update_mmap_info(dev, ip, s, wq);
+
+                       /*
+                        * Return the offset to mmap.
+                        * See ipath_mmap() for details.
+                        */
+                       if (udata && udata->inlen >= sizeof(__u64)) {
+                               ret = ib_copy_to_udata(udata, &ip->offset,
+                                                      sizeof(ip->offset));
+                               if (ret)
+                                       goto bail;
+                       }
+
                        spin_lock_irq(&dev->pending_lock);
                        if (list_empty(&ip->pending_mmaps))
                                list_add(&ip->pending_mmaps,
@@ -328,7 +331,12 @@ int ipath_modify_srq(struct ib_srq *ibsrq, struct ib_srq_attr *attr,
                        srq->limit = attr->srq_limit;
                spin_unlock_irq(&srq->rq.lock);
        }
+       goto bail;
 
+bail_unlock:
+       spin_unlock_irq(&srq->rq.lock);
+bail_free:
+       vfree(wq);
 bail:
        return ret;
 }
index 74f77e7c2c1bb6ffc5632b2d446a35bfca3e803b..c4c998446c7b421976b57087ffa63e4f77739f6b 100644 (file)
@@ -302,8 +302,10 @@ static int ipath_post_one_send(struct ipath_qp *qp, struct ib_send_wr *wr)
        next = qp->s_head + 1;
        if (next >= qp->s_size)
                next = 0;
-       if (next == qp->s_last)
-               goto bail_inval;
+       if (next == qp->s_last) {
+               ret = -ENOMEM;
+               goto bail;
+       }
 
        wqe = get_swqe_ptr(qp, qp->s_head);
        wqe->wr = *wr;
@@ -404,7 +406,7 @@ static int ipath_post_receive(struct ib_qp *ibqp, struct ib_recv_wr *wr,
 
                if ((unsigned) wr->num_sge > qp->r_rq.max_sge) {
                        *bad_wr = wr;
-                       ret = -ENOMEM;
+                       ret = -EINVAL;
                        goto bail;
                }
 
index a03a65ebcf0c0a95d31903b17d448be3dd26ed85..c9f6077b615eb62db39dae44f385976c50018865 100644 (file)
@@ -460,6 +460,9 @@ static struct ipoib_path *path_rec_create(struct net_device *dev, void *gid)
        struct ipoib_dev_priv *priv = netdev_priv(dev);
        struct ipoib_path *path;
 
+       if (!priv->broadcast)
+               return NULL;
+
        path = kzalloc(sizeof *path, GFP_ATOMIC);
        if (!path)
                return NULL;
index d68798061795187551a0873503a5fa256ecedf0a..4a17743a639f2ae884f4cbe122e8e68f1a6f12b9 100644 (file)
@@ -310,13 +310,15 @@ static unsigned int iser_data_buf_aligned_len(struct iser_data_buf *data,
                if (i + 1 < data->dma_nents) {
                        next_addr = ib_sg_dma_address(ibdev, sg_next(sg));
                        /* are i, i+1 fragments of the same page? */
-                       if (end_addr == next_addr)
+                       if (end_addr == next_addr) {
+                               cnt++;
                                continue;
-                       else if (!IS_4K_ALIGNED(end_addr)) {
+                       else if (!IS_4K_ALIGNED(end_addr)) {
                                ret_len = cnt + 1;
                                break;
                        }
                }
+               cnt++;
        }
        if (i == data->dma_nents)
                ret_len = cnt;  /* loop ended */
index 2316a018fae64212623ec6b7d24003aea6966e8c..dfa6592c10f646bb66465b173813e325feaa7860 100644 (file)
@@ -286,7 +286,7 @@ config KEYBOARD_MAPLE
 
 config KEYBOARD_BFIN
        tristate "Blackfin BF54x keypad support"
-       depends on BF54x
+       depends on (BF54x && !BF544)
        help
          Say Y here if you want to use the BF54x keypad.
 
index 3eddf52a0bba5cabbe76a1f41cedee7c5fbf8ffc..6a9ca4bdcb74acfa1dd9abc5bfec06bd2abeda62 100644 (file)
@@ -75,16 +75,32 @@ static int __devinit gpio_keys_probe(struct platform_device *pdev)
 
        for (i = 0; i < pdata->nbuttons; i++) {
                struct gpio_keys_button *button = &pdata->buttons[i];
-               int irq = gpio_to_irq(button->gpio);
+               int irq;
                unsigned int type = button->type ?: EV_KEY;
 
+               error = gpio_request(button->gpio, button->desc ?: "gpio_keys");
+               if (error < 0) {
+                       pr_err("gpio-keys: failed to request GPIO %d,"
+                               " error %d\n", button->gpio, error);
+                       goto fail;
+               }
+
+               error = gpio_direction_input(button->gpio);
+               if (error < 0) {
+                       pr_err("gpio-keys: failed to configure input"
+                               " direction for GPIO %d, error %d\n",
+                               button->gpio, error);
+                       gpio_free(button->gpio);
+                       goto fail;
+               }
+
+               irq = gpio_to_irq(button->gpio);
                if (irq < 0) {
                        error = irq;
-                       printk(KERN_ERR
-                               "gpio-keys: "
-                               "Unable to get irq number for GPIO %d,"
-                               "error %d\n",
+                       pr_err("gpio-keys: Unable to get irq number"
+                               " for GPIO %d, error %d\n",
                                button->gpio, error);
+                       gpio_free(button->gpio);
                        goto fail;
                }
 
@@ -94,9 +110,9 @@ static int __devinit gpio_keys_probe(struct platform_device *pdev)
                                    button->desc ? button->desc : "gpio_keys",
                                    pdev);
                if (error) {
-                       printk(KERN_ERR
-                               "gpio-keys: Unable to claim irq %d; error %d\n",
+                       pr_err("gpio-keys: Unable to claim irq %d; error %d\n",
                                irq, error);
+                       gpio_free(button->gpio);
                        goto fail;
                }
 
@@ -108,8 +124,7 @@ static int __devinit gpio_keys_probe(struct platform_device *pdev)
 
        error = input_register_device(input);
        if (error) {
-               printk(KERN_ERR
-                       "gpio-keys: Unable to register input device, "
+               pr_err("gpio-keys: Unable to register input device, "
                        "error: %d\n", error);
                goto fail;
        }
@@ -119,8 +134,10 @@ static int __devinit gpio_keys_probe(struct platform_device *pdev)
        return 0;
 
  fail:
-       while (--i >= 0)
+       while (--i >= 0) {
                free_irq(gpio_to_irq(pdata->buttons[i].gpio), pdev);
+               gpio_free(pdata->buttons[i].gpio);
+       }
 
        platform_set_drvdata(pdev, NULL);
        input_free_device(input);
@@ -139,6 +156,7 @@ static int __devexit gpio_keys_remove(struct platform_device *pdev)
        for (i = 0; i < pdata->nbuttons; i++) {
                int irq = gpio_to_irq(pdata->buttons[i].gpio);
                free_irq(irq, pdev);
+               gpio_free(pdata->buttons[i].gpio);
        }
 
        input_unregister_device(input);
index 5ce632ca6815e34c6cf2ce0416f63c8ec9817608..b88569e21d60e017625a073e44c765601d8e1017 100644 (file)
@@ -21,7 +21,7 @@ if SERIO
 config SERIO_I8042
        tristate "i8042 PC Keyboard controller" if EMBEDDED || !X86
        default y
-       depends on !PARISC && (!ARM || ARCH_SHARK || FOOTBRIDGE_HOST) && !M68K && !BFIN
+       depends on !PARISC && (!ARM || ARCH_SHARK || FOOTBRIDGE_HOST) && !M68K && !BLACKFIN
        ---help---
          i8042 is the chip over which the standard AT keyboard and PS/2
          mouse are connected to the computer. If you use these devices,
index f8fe421480938aef0d8e874b68640f67302c22a5..c5e68dcd88ac914673b30b46a5c6924911f4b05c 100644 (file)
@@ -110,6 +110,14 @@ static struct dmi_system_id __initdata i8042_dmi_noloop_table[] = {
                        DMI_MATCH(DMI_PRODUCT_VERSION, "5a"),
                },
        },
+       {
+               .ident = "Microsoft Virtual Machine",
+               .matches = {
+                       DMI_MATCH(DMI_SYS_VENDOR, "Microsoft Corporation"),
+                       DMI_MATCH(DMI_PRODUCT_NAME, "Virtual Machine"),
+                       DMI_MATCH(DMI_PRODUCT_VERSION, "VS2005R2"),
+               },
+       },
        { }
 };
 
index f59aecf5ec1565fe4959308edc8cc034c3a0a9a3..fd9c5d51870a095511e8d81728081802ad09e5ed 100644 (file)
@@ -267,13 +267,12 @@ static int ads7846_read12_ser(struct device *dev, unsigned command)
        ts->irq_disabled = 0;
        enable_irq(spi->irq);
 
-       if (req->msg.status)
-               status = req->msg.status;
-
-       /* on-wire is a must-ignore bit, a BE12 value, then padding */
-       sample = be16_to_cpu(req->sample);
-       sample = sample >> 3;
-       sample &= 0x0fff;
+       if (status == 0) {
+               /* on-wire is a must-ignore bit, a BE12 value, then padding */
+               sample = be16_to_cpu(req->sample);
+               sample = sample >> 3;
+               sample &= 0x0fff;
+       }
 
        kfree(req);
        return status ? status : sample;
index 57670dc5034dc6815ced7bddef7256172cbba786..909d6709ec16782e151e64dae64f67cac4055a70 100644 (file)
@@ -118,8 +118,7 @@ hfcs_card_msg(struct IsdnCardState *cs, int mt, void *arg)
                        return(0);
                case CARD_INIT:
                        delay = (75*HZ)/100 +1;
-                       cs->hw.hfcD.timer.expires = jiffies + delay;
-                       add_timer(&cs->hw.hfcD.timer);
+                       mod_timer(&cs->hw.hfcD.timer, jiffies + delay);
                        spin_lock_irqsave(&cs->lock, flags);
                        reset_hfcs(cs);
                        init2bds0(cs);
index c6df2925ebd0f0e03b2416618d493ddc8951be9c..d6952959d72afc643be51248cadd523e2a0ebcf7 100644 (file)
@@ -1515,6 +1515,7 @@ isdn_ioctl(struct inode *inode, struct file *file, uint cmd, ulong arg)
                                        if (copy_from_user(&iocts, argp,
                                             sizeof(isdn_ioctl_struct)))
                                                return -EFAULT;
+                                       iocts.drvid[sizeof(iocts.drvid)-1] = 0;
                                        if (strlen(iocts.drvid)) {
                                                if ((p = strchr(iocts.drvid, ',')))
                                                        *p = 0;
@@ -1599,6 +1600,7 @@ isdn_ioctl(struct inode *inode, struct file *file, uint cmd, ulong arg)
                                        if (copy_from_user(&iocts, argp,
                                             sizeof(isdn_ioctl_struct)))
                                                return -EFAULT;
+                                       iocts.drvid[sizeof(iocts.drvid)-1] = 0;
                                        if (strlen(iocts.drvid)) {
                                                drvidx = -1;
                                                for (i = 0; i < ISDN_MAX_DRIVERS; i++)
@@ -1643,7 +1645,7 @@ isdn_ioctl(struct inode *inode, struct file *file, uint cmd, ulong arg)
                                        } else {
                                                p = (char __user *) iocts.arg;
                                                for (i = 0; i < 10; i++) {
-                                                       sprintf(bname, "%s%s",
+                                                       snprintf(bname, sizeof(bname), "%s%s",
                                                                strlen(dev->drv[drvidx]->msn2eaz[i]) ?
                                                                dev->drv[drvidx]->msn2eaz[i] : "_",
                                                                (i < 9) ? "," : "\0");
@@ -1673,6 +1675,7 @@ isdn_ioctl(struct inode *inode, struct file *file, uint cmd, ulong arg)
                                        char *p;
                                        if (copy_from_user(&iocts, argp, sizeof(isdn_ioctl_struct)))
                                                return -EFAULT;
+                                       iocts.drvid[sizeof(iocts.drvid)-1] = 0;
                                        if (strlen(iocts.drvid)) {
                                                if ((p = strchr(iocts.drvid, ',')))
                                                        *p = 0;
index b39d1f5b378e5b06f88769a6c17566f4cf94edf5..ced83c202cacefe6b0b79b990dcbaa47b2448a79 100644 (file)
@@ -2104,7 +2104,7 @@ isdn_net_find_icall(int di, int ch, int idx, setup_parm *setup)
        u_long flags;
        isdn_net_dev *p;
        isdn_net_phone *n;
-       char nr[32];
+       char nr[ISDN_MSNLEN];
        char *my_eaz;
 
        /* Search name in netdev-chain */
@@ -2113,7 +2113,7 @@ isdn_net_find_icall(int di, int ch, int idx, setup_parm *setup)
                nr[1] = '\0';
                printk(KERN_INFO "isdn_net: Incoming call without OAD, assuming '0'\n");
        } else
-               strcpy(nr, setup->phone);
+               strlcpy(nr, setup->phone, ISDN_MSNLEN);
        si1 = (int) setup->si1;
        si2 = (int) setup->si2;
        if (!setup->eazmsn[0]) {
@@ -2789,7 +2789,7 @@ isdn_net_setcfg(isdn_net_ioctl_cfg * cfg)
                                chidx = -1;
                        }
                }
-               strcpy(lp->msn, cfg->eaz);
+               strlcpy(lp->msn, cfg->eaz, sizeof(lp->msn));
                lp->pre_device = drvidx;
                lp->pre_channel = chidx;
                lp->onhtime = cfg->onhtime;
@@ -2936,7 +2936,7 @@ isdn_net_addphone(isdn_net_ioctl_phone * phone)
        if (p) {
                if (!(n = kmalloc(sizeof(isdn_net_phone), GFP_KERNEL)))
                        return -ENOMEM;
-               strcpy(n->num, phone->phone);
+               strlcpy(n->num, phone->phone, sizeof(n->num));
                n->next = p->local->phone[phone->outgoing & 1];
                p->local->phone[phone->outgoing & 1] = n;
                return 0;
index 07ae280e8fe5c279f7077b1e95650949002e44d7..47c10b8f89b3f00a16674fec744e334590f523d7 100644 (file)
@@ -1188,8 +1188,7 @@ int emulate_invlpg(struct kvm_vcpu *vcpu, gva_t address)
 
 int emulate_clts(struct kvm_vcpu *vcpu)
 {
-       vcpu->cr0 &= ~X86_CR0_TS;
-       kvm_x86_ops->set_cr0(vcpu, vcpu->cr0);
+       kvm_x86_ops->set_cr0(vcpu, vcpu->cr0 & ~X86_CR0_TS);
        return X86EMUL_CONTINUE;
 }
 
index 7a6eead63a6bc14537d36fb09756ba5001bc8634..4e04e49a2f1c35f626fa24d3d5d3f1ea5d115869 100644 (file)
@@ -663,6 +663,7 @@ static void svm_vcpu_put(struct kvm_vcpu *vcpu)
                wrmsrl(host_save_user_msrs[i], svm->host_user_msrs[i]);
 
        rdtscll(vcpu->host_tsc);
+       kvm_put_guest_fpu(vcpu);
 }
 
 static void svm_vcpu_decache(struct kvm_vcpu *vcpu)
index 33b181451557ad926df9c09a4a401c7fc71ae933..bd46de6bf891e795ce94835893dc9b82b063ff97 100644 (file)
@@ -448,8 +448,7 @@ struct operand {
 
 #define JMP_REL(rel)                                                   \
        do {                                                            \
-               _eip += (int)(rel);                                     \
-               _eip = ((op_bytes == 2) ? (uint16_t)_eip : (uint32_t)_eip); \
+               register_address_increment(_eip, rel);                  \
        } while (0)
 
 /*
@@ -1147,7 +1146,7 @@ done_prefixes:
                        }
                        register_address_increment(_regs[VCPU_REGS_RSP],
                                                   -dst.bytes);
-                       if ((rc = ops->write_std(
+                       if ((rc = ops->write_emulated(
                                     register_address(ctxt->ss_base,
                                                      _regs[VCPU_REGS_RSP]),
                                     &dst.val, dst.bytes, ctxt->vcpu)) != 0)
@@ -1359,6 +1358,7 @@ special_insn:
                }
                src.val = (unsigned long) _eip;
                JMP_REL(rel);
+               op_bytes = ad_bytes;
                goto push;
        }
        case 0xe9: /* jmp rel */
index 4211293ce862d00e87fa05167f87f53f44b8cbc8..ba8b04b03b9f2799eacba45927595553ce4141df 100644 (file)
@@ -111,7 +111,7 @@ int led_classdev_register(struct device *parent, struct led_classdev *led_cdev)
        write_unlock(&leds_list_lock);
 
 #ifdef CONFIG_LEDS_TRIGGERS
-       rwlock_init(&led_cdev->trigger_lock);
+       init_rwsem(&led_cdev->trigger_lock);
 
        rc = device_create_file(led_cdev->dev, &dev_attr_trigger);
        if (rc)
@@ -147,10 +147,10 @@ void led_classdev_unregister(struct led_classdev *led_cdev)
        device_remove_file(led_cdev->dev, &dev_attr_brightness);
 #ifdef CONFIG_LEDS_TRIGGERS
        device_remove_file(led_cdev->dev, &dev_attr_trigger);
-       write_lock(&led_cdev->trigger_lock);
+       down_write(&led_cdev->trigger_lock);
        if (led_cdev->trigger)
                led_trigger_set(led_cdev, NULL);
-       write_unlock(&led_cdev->trigger_lock);
+       up_write(&led_cdev->trigger_lock);
 #endif
 
        device_unregister(led_cdev->dev);
index 575368c2b100985830e157851305bb4b56a07dd5..0bdb786210b1885bee8e6f194ccdcab09e5bdd18 100644 (file)
 #include <linux/device.h>
 #include <linux/sysdev.h>
 #include <linux/timer.h>
+#include <linux/rwsem.h>
 #include <linux/leds.h>
 #include "leds.h"
 
 /*
  * Nests outside led_cdev->trigger_lock
  */
-static DEFINE_RWLOCK(triggers_list_lock);
+static DECLARE_RWSEM(triggers_list_lock);
 static LIST_HEAD(trigger_list);
 
 ssize_t led_trigger_store(struct device *dev, struct device_attribute *attr,
@@ -44,24 +45,24 @@ ssize_t led_trigger_store(struct device *dev, struct device_attribute *attr,
                trigger_name[len - 1] = '\0';
 
        if (!strcmp(trigger_name, "none")) {
-               write_lock(&led_cdev->trigger_lock);
+               down_write(&led_cdev->trigger_lock);
                led_trigger_set(led_cdev, NULL);
-               write_unlock(&led_cdev->trigger_lock);
+               up_write(&led_cdev->trigger_lock);
                return count;
        }
 
-       read_lock(&triggers_list_lock);
+       down_read(&triggers_list_lock);
        list_for_each_entry(trig, &trigger_list, next_trig) {
                if (!strcmp(trigger_name, trig->name)) {
-                       write_lock(&led_cdev->trigger_lock);
+                       down_write(&led_cdev->trigger_lock);
                        led_trigger_set(led_cdev, trig);
-                       write_unlock(&led_cdev->trigger_lock);
+                       up_write(&led_cdev->trigger_lock);
 
-                       read_unlock(&triggers_list_lock);
+                       up_read(&triggers_list_lock);
                        return count;
                }
        }
-       read_unlock(&triggers_list_lock);
+       up_read(&triggers_list_lock);
 
        return -EINVAL;
 }
@@ -74,8 +75,8 @@ ssize_t led_trigger_show(struct device *dev, struct device_attribute *attr,
        struct led_trigger *trig;
        int len = 0;
 
-       read_lock(&triggers_list_lock);
-       read_lock(&led_cdev->trigger_lock);
+       down_read(&triggers_list_lock);
+       down_read(&led_cdev->trigger_lock);
 
        if (!led_cdev->trigger)
                len += sprintf(buf+len, "[none] ");
@@ -89,8 +90,8 @@ ssize_t led_trigger_show(struct device *dev, struct device_attribute *attr,
                else
                        len += sprintf(buf+len, "%s ", trig->name);
        }
-       read_unlock(&led_cdev->trigger_lock);
-       read_unlock(&triggers_list_lock);
+       up_read(&led_cdev->trigger_lock);
+       up_read(&triggers_list_lock);
 
        len += sprintf(len+buf, "\n");
        return len;
@@ -145,14 +146,14 @@ void led_trigger_set_default(struct led_classdev *led_cdev)
        if (!led_cdev->default_trigger)
                return;
 
-       read_lock(&triggers_list_lock);
-       write_lock(&led_cdev->trigger_lock);
+       down_read(&triggers_list_lock);
+       down_write(&led_cdev->trigger_lock);
        list_for_each_entry(trig, &trigger_list, next_trig) {
                if (!strcmp(led_cdev->default_trigger, trig->name))
                        led_trigger_set(led_cdev, trig);
        }
-       write_unlock(&led_cdev->trigger_lock);
-       read_unlock(&triggers_list_lock);
+       up_write(&led_cdev->trigger_lock);
+       up_read(&triggers_list_lock);
 }
 
 int led_trigger_register(struct led_trigger *trigger)
@@ -163,18 +164,18 @@ int led_trigger_register(struct led_trigger *trigger)
        INIT_LIST_HEAD(&trigger->led_cdevs);
 
        /* Add to the list of led triggers */
-       write_lock(&triggers_list_lock);
+       down_write(&triggers_list_lock);
        list_add_tail(&trigger->next_trig, &trigger_list);
-       write_unlock(&triggers_list_lock);
+       up_write(&triggers_list_lock);
 
        /* Register with any LEDs that have this as a default trigger */
        read_lock(&leds_list_lock);
        list_for_each_entry(led_cdev, &leds_list, node) {
-               write_lock(&led_cdev->trigger_lock);
+               down_write(&led_cdev->trigger_lock);
                if (!led_cdev->trigger && led_cdev->default_trigger &&
                            !strcmp(led_cdev->default_trigger, trigger->name))
                        led_trigger_set(led_cdev, trigger);
-               write_unlock(&led_cdev->trigger_lock);
+               up_write(&led_cdev->trigger_lock);
        }
        read_unlock(&leds_list_lock);
 
@@ -206,17 +207,17 @@ void led_trigger_unregister(struct led_trigger *trigger)
        struct led_classdev *led_cdev;
 
        /* Remove from the list of led triggers */
-       write_lock(&triggers_list_lock);
+       down_write(&triggers_list_lock);
        list_del(&trigger->next_trig);
-       write_unlock(&triggers_list_lock);
+       up_write(&triggers_list_lock);
 
        /* Remove anyone actively using this trigger */
        read_lock(&leds_list_lock);
        list_for_each_entry(led_cdev, &leds_list, node) {
-               write_lock(&led_cdev->trigger_lock);
+               down_write(&led_cdev->trigger_lock);
                if (led_cdev->trigger == trigger)
                        led_trigger_set(led_cdev, NULL);
-               write_unlock(&led_cdev->trigger_lock);
+               up_write(&led_cdev->trigger_lock);
        }
        read_unlock(&leds_list_lock);
 }
index 66f38722253adedf3b45c8caa65f3d25742c3f34..e2eec38c83c2ef21248353d132e3308810e1e17d 100644 (file)
@@ -247,6 +247,8 @@ static void lg_del_vq(struct virtqueue *vq)
 {
        struct lguest_vq_info *lvq = vq->priv;
 
+       /* Release the interrupt */
+       free_irq(lvq->config.irq, vq);
        /* Tell virtio_ring.c to free the virtqueue. */
        vring_del_virtqueue(vq);
        /* Unmap the pages containing the ring. */
index f245a3b2ef470e6819fcdc90d1458372646fa198..ae36d101006b6d0600898b76af319b95d90c1c31 100644 (file)
@@ -1205,13 +1205,10 @@ int saa7146_video_do_ioctl(struct inode *inode, struct file *file, unsigned int
                DEB_D(("VIDIOCGMBUF \n"));
 
                q = &fh->video_q;
-               mutex_lock(&q->lock);
                err = videobuf_mmap_setup(q,gbuffers,gbufsize,
                                          V4L2_MEMORY_MMAP);
-               if (err < 0) {
-                       mutex_unlock(&q->lock);
+               if (err < 0)
                        return err;
-               }
 
                gbuffers = err;
                memset(mbuf,0,sizeof(*mbuf));
@@ -1219,7 +1216,6 @@ int saa7146_video_do_ioctl(struct inode *inode, struct file *file, unsigned int
                mbuf->size   = gbuffers * gbufsize;
                for (i = 0; i < gbuffers; i++)
                        mbuf->offsets[i] = i * gbufsize;
-               mutex_unlock(&q->lock);
                return 0;
        }
 #endif
@@ -1440,10 +1436,7 @@ static void video_close(struct saa7146_dev *dev, struct file *file)
                err = saa7146_stop_preview(fh);
        }
 
-       // release all capture buffers
-       mutex_lock(&q->lock);
-       videobuf_read_stop(q);
-       mutex_unlock(&q->lock);
+       videobuf_stop(q);
 
        /* hmm, why is this function declared void? */
        /* return err */
index 73ac0a93fdebdfe2a68af50c2798a046c7d59b56..60a910052c16fa0c0488214b5daadd36782e38a5 100644 (file)
@@ -62,3 +62,6 @@ dvb-usb-af9005-remote-objs = af9005-remote.o
 obj-$(CONFIG_DVB_USB_AF9005_REMOTE) += dvb-usb-af9005-remote.o
 
 EXTRA_CFLAGS += -Idrivers/media/dvb/dvb-core/ -Idrivers/media/dvb/frontends/
+# due to tuner-xc3028
+EXTRA_CFLAGS += -Idrivers/media/video
+
index 9a184da01c47385ae4772c3a2ce45774b4b7a807..8ee6cd4da9e7c1053099792ef5ec0700bbd29ccf 100644 (file)
@@ -223,6 +223,9 @@ static struct dibx000_agc_config dib3000p_panasonic_agc_config = {
        .agc2_slope2 = 0x1e,
 };
 
+#if defined(CONFIG_DVB_DIB3000MC) ||                                   \
+       (defined(CONFIG_DVB_DIB3000MC_MODULE) && defined(MODULE))
+
 static struct dib3000mc_config mod3000p_dib3000p_config = {
        &dib3000p_panasonic_agc_config,
 
@@ -305,6 +308,7 @@ int dibusb_dib3000mc_tuner_attach(struct dvb_usb_adapter *adap)
        return 0;
 }
 EXPORT_SYMBOL(dibusb_dib3000mc_tuner_attach);
+#endif
 
 /*
  * common remote control stuff
index 9a8ddc537f8f338d9c055d186321a499d66e1b4c..9d26ace651518389d1cbd3255ee6b05ef83eba34 100644 (file)
@@ -158,7 +158,7 @@ static int tda10086_init(struct dvb_frontend* fe)
        tda10086_write_byte(state, 0x3d, 0x80);
 
        // setup SEC
-       tda10086_write_byte(state, 0x36, 0x00); // all SEC off
+       tda10086_write_byte(state, 0x36, 0x80); // all SEC off, no 22k tone
        tda10086_write_byte(state, 0x34, (((1<<19) * (22000/1000)) / (SACLK/1000)));      // } tone frequency
        tda10086_write_byte(state, 0x35, (((1<<19) * (22000/1000)) / (SACLK/1000)) >> 8); // }
 
@@ -183,13 +183,13 @@ static int tda10086_set_tone (struct dvb_frontend* fe, fe_sec_tone_mode_t tone)
 
        dprintk ("%s\n", __FUNCTION__);
 
-       switch(tone) {
+       switch (tone) {
        case SEC_TONE_OFF:
-               tda10086_write_byte(state, 0x36, 0x00);
+               tda10086_write_byte(state, 0x36, 0x80);
                break;
 
        case SEC_TONE_ON:
-               tda10086_write_byte(state, 0x36, 0x01);
+               tda10086_write_byte(state, 0x36, 0x81);
                break;
        }
 
@@ -212,7 +212,7 @@ static int tda10086_send_master_cmd (struct dvb_frontend* fe,
        for(i=0; i< cmd->msg_len; i++) {
                tda10086_write_byte(state, 0x48+i, cmd->msg[i]);
        }
-       tda10086_write_byte(state, 0x36, 0x08 | ((cmd->msg_len - 1) << 4));
+       tda10086_write_byte(state, 0x36, 0x88 | ((cmd->msg_len - 1) << 4));
 
        tda10086_diseqc_wait(state);
 
@@ -230,11 +230,11 @@ static int tda10086_send_burst (struct dvb_frontend* fe, fe_sec_mini_cmd_t minic
 
        switch(minicmd) {
        case SEC_MINI_A:
-               tda10086_write_byte(state, 0x36, 0x04);
+               tda10086_write_byte(state, 0x36, 0x84);
                break;
 
        case SEC_MINI_B:
-               tda10086_write_byte(state, 0x36, 0x06);
+               tda10086_write_byte(state, 0x36, 0x86);
                break;
        }
 
index a97a7fd2c89132a596027619d8e3e9fbfedc6be9..0106df4c55e827da3410630463888b7bcecda789 100644 (file)
@@ -122,7 +122,7 @@ static void zl10353_calc_nominal_rate(struct dvb_frontend *fe,
                                      enum fe_bandwidth bandwidth,
                                      u16 *nominal_rate)
 {
-       u32 adc_clock = 22528; /* 20.480 MHz on the board(!?) */
+       u32 adc_clock = 45056; /* 45.056 MHz */
        u8 bw;
        struct zl10353_state *state = fe->demodulator_priv;
 
@@ -142,7 +142,7 @@ static void zl10353_calc_nominal_rate(struct dvb_frontend *fe,
                break;
        }
 
-       *nominal_rate = (64 * bw * (1<<16) / (7 * 8) * 4000 / adc_clock + 2) / 4;
+       *nominal_rate = (bw * (1 << 23) / 7 * 125 + adc_clock / 2) / adc_clock;
 
        dprintk("%s: bw %d, adc_clock %d => 0x%x\n",
                __FUNCTION__, bw, adc_clock, *nominal_rate);
index cb274dc12b82596ead31dfd1f5bf5667197992d5..1c3d494a6da9e3bd04ba06ba646c2d4c7beb5c0d 100644 (file)
@@ -30,7 +30,7 @@ struct zl10353_config
        u8 demod_address;
 
        /* frequencies in kHz */
-       int adc_clock;  // default: 22528
+       int adc_clock;  /* default: 45056 */
 
        /* set if no pll is connected to the secondary i2c bus */
        int no_tuner;
index 3abd9fa54d2cd5a856f8b0d2af24b57e88dec493..585d1ef95afdd6956d5dca05b50c524f4e5511d7 100644 (file)
@@ -5080,7 +5080,7 @@ static void PXC200_muxsel(struct bttv *btv, unsigned int input)
 /* ----------------------------------------------------------------------- */
 /* motherboard chipset specific stuff                                      */
 
-void __devinit bttv_check_chipset(void)
+void __init bttv_check_chipset(void)
 {
        int pcipci_fail = 0;
        struct pci_dev *dev = NULL;
index a88b56e6ca05c3c2d990e2313c2bd79b857124f6..c02d92deacd2aab2b1009ca573183c898b818d42 100644 (file)
@@ -3827,10 +3827,7 @@ static int bttv_release(struct inode *inode, struct file *file)
 
        /* stop vbi capture */
        if (check_btres(fh, RESOURCE_VBI)) {
-               if (fh->vbi.streaming)
-                       videobuf_streamoff(&fh->vbi);
-               if (fh->vbi.reading)
-                       videobuf_read_stop(&fh->vbi);
+               videobuf_stop(&fh->vbi);
                free_btres(btv,fh,RESOURCE_VBI);
        }
 
@@ -4988,7 +4985,7 @@ static struct pci_driver bttv_pci_driver = {
 #endif
 };
 
-static int bttv_init_module(void)
+static int __init bttv_init_module(void)
 {
        int ret;
 
@@ -5021,7 +5018,7 @@ static int bttv_init_module(void)
        return pci_register_driver(&bttv_pci_driver);
 }
 
-static void bttv_cleanup_module(void)
+static void __exit bttv_cleanup_module(void)
 {
        pci_unregister_driver(&bttv_pci_driver);
        bus_unregister(&bttv_sub_bus_type);
index f33f0b47142cd319b75942ab4d19ec269cb85922..f802b5653569874fa0a6dbef531c964566c784c8 100644 (file)
@@ -1085,10 +1085,7 @@ static int mpeg_release(struct inode *inode, struct file *file)
 
        cx8802_cancel_buffers(fh->dev);
        /* stop mpeg capture */
-       if (fh->mpegq.streaming)
-               videobuf_streamoff(&fh->mpegq);
-       if (fh->mpegq.reading)
-               videobuf_read_stop(&fh->mpegq);
+       videobuf_stop(&fh->mpegq);
 
        videobuf_mmap_free(&fh->mpegq);
        file->private_data = NULL;
index 5ee05f8f3fad3091d11e2d8381012f5533bbadaa..c84dafbdb991aae420a0f4bc80f3b8f71174110c 100644 (file)
@@ -851,10 +851,7 @@ static int video_release(struct inode *inode, struct file *file)
 
        /* stop vbi capture */
        if (res_check(fh, RESOURCE_VBI)) {
-               if (fh->vbiq.streaming)
-                       videobuf_streamoff(&fh->vbiq);
-               if (fh->vbiq.reading)
-                       videobuf_read_stop(&fh->vbiq);
+               videobuf_stop(&fh->vbiq);
                res_free(dev,fh,RESOURCE_VBI);
        }
 
index 2529c298b862a4c80c83404894783af34ca4534a..0906bc5766cc0b46becbe85735df042333c56b59 100644 (file)
@@ -144,7 +144,8 @@ static int em28xx_config(struct em28xx *dev)
 {
 
        /* Sets I2C speed to 100 KHz */
-       em28xx_write_regs_req(dev, 0x00, 0x06, "\x40", 1);
+       if (!dev->is_em2800)
+               em28xx_write_regs_req(dev, 0x00, 0x06, "\x40", 1);
 
        /* enable vbi capturing */
 
@@ -570,7 +571,9 @@ static void em28xx_vm_close(struct vm_area_struct *vma)
 {
        /* NOTE: buffers are not freed here */
        struct em28xx_frame_t *f = vma->vm_private_data;
-       f->vma_use_count--;
+
+       if (f->vma_use_count)
+               f->vma_use_count--;
 }
 
 static struct vm_operations_struct em28xx_vm_ops = {
index 623eea2652ca1fda2844d29b4c5cb0fb7c792163..77b27dc750b1bc9ef5592cbbad1a4e76cb7b2edd 100644 (file)
@@ -706,7 +706,7 @@ void ivtv_call_i2c_clients(struct ivtv *itv, unsigned int cmd, void *arg)
 }
 
 /* init + register i2c algo-bit adapter */
-int __devinit init_ivtv_i2c(struct ivtv *itv)
+int init_ivtv_i2c(struct ivtv *itv)
 {
        IVTV_DEBUG_I2C("i2c init\n");
 
index de6a07442298d44d6735cde7266a201a48cba39c..987042c09b643fb42ef4faabbb7843359e9bdd41 100644 (file)
@@ -35,7 +35,7 @@ int ivtv_call_i2c_client(struct ivtv *itv, int addr, unsigned int cmd, void *arg
 void ivtv_call_i2c_clients(struct ivtv *itv, unsigned int cmd, void *arg);
 
 /* init + register i2c algo-bit adapter */
-int __devinit init_ivtv_i2c(struct ivtv *itv);
+int init_ivtv_i2c(struct ivtv *itv);
 void exit_ivtv_i2c(struct ivtv *itv);
 
 #endif
index aa03e61ef310f59b84bc4372a23921c4f7517128..74fb0e021979eec1b805c8f16b34d14f21287ba6 100644 (file)
@@ -76,7 +76,7 @@ static struct {
        int minor_offset;
        int dma, pio;
        enum v4l2_buf_type buf_type;
-       struct file_operations *fops;
+       const struct file_operations *fops;
 } ivtv_stream_info[] = {
        {       /* IVTV_ENC_STREAM_TYPE_MPG */
                "encoder MPG",
index ad0232935df6fb760f176f97695f8ce81ed38957..996b49491f5a2f29c5ca6c3ed02604a47239faa1 100644 (file)
@@ -187,12 +187,14 @@ static int i2c_senddata(struct saa5246a_device *t, ...)
 {
        unsigned char buf[64];
        int v;
-       int ct=0;
+       int ct = 0;
        va_list argp;
-       va_start(argp,t);
+       va_start(argp, t);
 
-       while((v=va_arg(argp,int))!=-1)
-               buf[ct++]=v;
+       while ((v = va_arg(argp, int)) != -1)
+               buf[ct++] = v;
+
+       va_end(argp);
        return i2c_sendbuf(t, buf[0], ct-1, buf+1);
 }
 
index 94bb59a32b17e3e984dfb0ec03905ef99a4dc855..f55d6e85f20f34c59d93e4ae9a5f70c59ecd0a32 100644 (file)
@@ -282,12 +282,14 @@ static int i2c_senddata(struct saa5249_device *t, ...)
 {
        unsigned char buf[64];
        int v;
-       int ct=0;
+       int ct = 0;
        va_list argp;
        va_start(argp,t);
 
-       while((v=va_arg(argp,int))!=-1)
-               buf[ct++]=v;
+       while ((v = va_arg(argp, int)) != -1)
+               buf[ct++] = v;
+
+       va_end(argp);
        return i2c_sendbuf(t, buf[0], ct-1, buf+1);
 }
 
index b9c5cf7dc849224c1cfcd83da1f20ff074a29e1c..4878f3067787e5e046f3625e0510471cf6e38b0c 100644 (file)
@@ -222,7 +222,8 @@ static irqreturn_t saa7134_alsa_irq(int irq, void *dev_id)
 
                if (report & SAA7134_IRQ_REPORT_DONE_RA3) {
                        handled = 1;
-                       saa_writel(SAA7134_IRQ_REPORT,report);
+                       saa_writel(SAA7134_IRQ_REPORT,
+                                  SAA7134_IRQ_REPORT_DONE_RA3);
                        saa7134_irq_alsa_done(dev, status);
                } else {
                        goto out;
@@ -457,7 +458,7 @@ static struct snd_pcm_hardware snd_card_saa7134_capture =
        .buffer_bytes_max =     (256*1024),
        .period_bytes_min =     64,
        .period_bytes_max =     (256*1024),
-       .periods_min =          2,
+       .periods_min =          4,
        .periods_max =          1024,
 };
 
@@ -491,7 +492,7 @@ static int snd_card_saa7134_hw_params(struct snd_pcm_substream * substream,
 
        snd_assert(period_size >= 0x100 && period_size <= 0x10000,
                   return -EINVAL);
-       snd_assert(periods >= 2, return -EINVAL);
+       snd_assert(periods >= 4, return -EINVAL);
        snd_assert(period_size * periods <= 1024 * 1024, return -EINVAL);
 
        dev = saa7134->dev;
@@ -647,7 +648,14 @@ static int snd_card_saa7134_capture_open(struct snd_pcm_substream * substream)
                saa7134_tvaudio_setmute(dev);
        }
 
-       if ((err = snd_pcm_hw_constraint_integer(runtime, SNDRV_PCM_HW_PARAM_PERIODS)) < 0)
+       err = snd_pcm_hw_constraint_integer(runtime,
+                                               SNDRV_PCM_HW_PARAM_PERIODS);
+       if (err < 0)
+               return err;
+
+       err = snd_pcm_hw_constraint_step(runtime, 0,
+                                               SNDRV_PCM_HW_PARAM_PERIODS, 2);
+       if (err < 0)
                return err;
 
        return 0;
index 4f3dad9ae6d6a3193434ee9ccfabad677b2791e1..c6eb1e37a46eaabbaaec05b062edd6a8fec63f4e 100644 (file)
@@ -334,7 +334,7 @@ struct saa7134_board saa7134_boards[] = {
                        .tv   = 1,
                },{
                        .name = name_comp1,
-                       .vmux = 2,
+                       .vmux = 0,
                        .amux = LINE1,
                },{
                        .name = name_comp2,
index a499eea379e65a4e3209ff5c464f5ac83c45b57a..4fd187ac9d7088378498f408c1b2efa2e732c142 100644 (file)
@@ -569,21 +569,22 @@ static irqreturn_t saa7134_irq(int irq, void *dev_id)
        for (loop = 0; loop < 10; loop++) {
                report = saa_readl(SAA7134_IRQ_REPORT);
                status = saa_readl(SAA7134_IRQ_STATUS);
-               if (0 == report) {
-                       if (irq_debug > 1)
-                               printk(KERN_DEBUG "%s/irq: no (more) work\n",
-                                      dev->name);
-                       goto out;
-               }
-
-               /* If dmasound support is active and we get a sound report, exit
-                  and let the saa7134-alsa/oss module deal with it */
 
+               /* If dmasound support is active and we get a sound report,
+                * mask out the report and let the saa7134-alsa module deal
+                * with it */
                if ((report & SAA7134_IRQ_REPORT_DONE_RA3) &&
                        (dev->dmasound.priv_data != NULL) )
                {
                        if (irq_debug > 1)
-                               printk(KERN_DEBUG "%s/irq: ignoring interrupt for DMA sound\n",
+                               printk(KERN_DEBUG "%s/irq: preserving DMA sound interrupt\n",
+                                      dev->name);
+                       report &= ~SAA7134_IRQ_REPORT_DONE_RA3;
+               }
+
+               if (0 == report) {
+                       if (irq_debug > 1)
+                               printk(KERN_DEBUG "%s/irq: no (more) work\n",
                                       dev->name);
                        goto out;
                }
index 38d87332cc5dcd312fd815bece3d40709ee38c42..e1ab099ec4c62ecdf2fdebc4a018bb27e96f1272 100644 (file)
@@ -662,6 +662,7 @@ static struct tda1004x_config hauppauge_hvr_1110_config = {
        .if_freq       = TDA10046_FREQ_045,
        .i2c_gate      = 0x4b,
        .tuner_address = 0x61,
+       .tuner_config  = 1,
        .request_firmware = philips_tda1004x_request_firmware
 };
 
index 75d0c5bf46d284def842762960d060304e882a02..9322f44865b8341ee74976b76c0fb107e1bf0088 100644 (file)
@@ -110,11 +110,8 @@ static int ts_release(struct inode *inode, struct file *file)
 {
        struct saa7134_dev *dev = file->private_data;
 
-       if (dev->empress_tsq.streaming)
-               videobuf_streamoff(&dev->empress_tsq);
        mutex_lock(&dev->empress_tsq.lock);
-       if (dev->empress_tsq.reading)
-               videobuf_read_stop(&dev->empress_tsq);
+       videobuf_stop(&dev->empress_tsq);
        videobuf_mmap_free(&dev->empress_tsq);
        dev->empress_users--;
 
index 3b9ffb4b648a67fcf8eeb4eb5637fbec605a5e06..6396d9b5c0636ced4538fc47460078b54ec0c6d3 100644 (file)
@@ -1445,10 +1445,7 @@ static int video_release(struct inode *inode, struct file *file)
 
        /* stop vbi capture */
        if (res_check(fh, RESOURCE_VBI)) {
-               if (fh->vbi.streaming)
-                       videobuf_streamoff(&fh->vbi);
-               if (fh->vbi.reading)
-                       videobuf_read_stop(&fh->vbi);
+               videobuf_stop(&fh->vbi);
                res_free(dev,fh,RESOURCE_VBI);
        }
 
index 25d0aef88ef51392c69e15992cbc0fbcb93414f9..445eba4174d75b3c48b694fcf3dea2e769e9e541 100644 (file)
@@ -290,6 +290,7 @@ static inline void tvp5150_selmux(struct i2c_client *c)
        int opmode=0;
        struct tvp5150 *decoder = i2c_get_clientdata(c);
        int input = 0;
+       unsigned char val;
 
        if ((decoder->route.output & TVP5150_BLACK_SCREEN) || !decoder->enable)
                input = 8;
@@ -315,6 +316,16 @@ static inline void tvp5150_selmux(struct i2c_client *c)
 
        tvp5150_write(c, TVP5150_OP_MODE_CTL, opmode);
        tvp5150_write(c, TVP5150_VD_IN_SRC_SEL_1, input);
+
+       /* Svideo should enable YCrCb output and disable GPCL output
+        * For Composite and TV, it should be the reverse
+        */
+       val = tvp5150_read(c, TVP5150_MISC_CTL);
+       if (decoder->route.input == TVP5150_SVIDEO)
+               val = (val & ~0x40) | 0x10;
+       else
+               val = (val & ~0x10) | 0x40;
+       tvp5150_write(c, TVP5150_MISC_CTL, val);
 };
 
 struct i2c_reg_value {
index 89a44f16f0ba50892be204f19f66c576cf46a2e1..81f77d2b4bd39c48edeff93d548b66ff989f518f 100644 (file)
@@ -141,6 +141,7 @@ void videobuf_queue_core_init(struct videobuf_queue* q,
        INIT_LIST_HEAD(&q->stream);
 }
 
+/* Locking: Only usage in bttv unsafe find way to remove */
 int videobuf_queue_is_busy(struct videobuf_queue *q)
 {
        int i;
@@ -178,6 +179,7 @@ int videobuf_queue_is_busy(struct videobuf_queue *q)
        return 0;
 }
 
+/* Locking: Caller holds q->lock */
 void videobuf_queue_cancel(struct videobuf_queue *q)
 {
        unsigned long flags=0;
@@ -208,6 +210,7 @@ void videobuf_queue_cancel(struct videobuf_queue *q)
 
 /* --------------------------------------------------------------------- */
 
+/* Locking: Caller holds q->lock */
 enum v4l2_field videobuf_next_field(struct videobuf_queue *q)
 {
        enum v4l2_field field = q->field;
@@ -226,6 +229,7 @@ enum v4l2_field videobuf_next_field(struct videobuf_queue *q)
        return field;
 }
 
+/* Locking: Caller holds q->lock */
 static void videobuf_status(struct videobuf_queue *q, struct v4l2_buffer *b,
                            struct videobuf_buffer *vb, enum v4l2_buf_type type)
 {
@@ -281,20 +285,108 @@ static void videobuf_status(struct videobuf_queue *q, struct v4l2_buffer *b,
        b->sequence  = vb->field_count >> 1;
 }
 
+/* Locking: Caller holds q->lock */
+static int __videobuf_mmap_free(struct videobuf_queue *q)
+{
+       int i;
+       int rc;
+
+       if (!q)
+               return 0;
+
+       MAGIC_CHECK(q->int_ops->magic,MAGIC_QTYPE_OPS);
+
+       rc  = CALL(q,mmap_free,q);
+       if (rc<0)
+               return rc;
+
+       for (i = 0; i < VIDEO_MAX_FRAME; i++) {
+               if (NULL == q->bufs[i])
+                       continue;
+               q->ops->buf_release(q,q->bufs[i]);
+               kfree(q->bufs[i]);
+               q->bufs[i] = NULL;
+       }
+
+       return rc;
+}
+
+int videobuf_mmap_free(struct videobuf_queue *q)
+{
+       int ret;
+       mutex_lock(&q->lock);
+       ret = __videobuf_mmap_free(q);
+       mutex_unlock(&q->lock);
+       return ret;
+}
+
+/* Locking: Caller holds q->lock */
+static int __videobuf_mmap_setup(struct videobuf_queue *q,
+                       unsigned int bcount, unsigned int bsize,
+                       enum v4l2_memory memory)
+{
+       unsigned int i;
+       int err;
+
+       MAGIC_CHECK(q->int_ops->magic,MAGIC_QTYPE_OPS);
+
+       err = __videobuf_mmap_free(q);
+       if (0 != err)
+               return err;
+
+       /* Allocate and initialize buffers */
+       for (i = 0; i < bcount; i++) {
+               q->bufs[i] = videobuf_alloc(q);
+
+               if (q->bufs[i] == NULL)
+                       break;
+
+               q->bufs[i]->i      = i;
+               q->bufs[i]->input  = UNSET;
+               q->bufs[i]->memory = memory;
+               q->bufs[i]->bsize  = bsize;
+               switch (memory) {
+               case V4L2_MEMORY_MMAP:
+                       q->bufs[i]->boff  = bsize * i;
+                       break;
+               case V4L2_MEMORY_USERPTR:
+               case V4L2_MEMORY_OVERLAY:
+                       /* nothing */
+                       break;
+               }
+       }
+
+       if (!i)
+               return -ENOMEM;
+
+       dprintk(1,"mmap setup: %d buffers, %d bytes each\n",
+               i, bsize);
+
+       return i;
+}
+
+int videobuf_mmap_setup(struct videobuf_queue *q,
+                       unsigned int bcount, unsigned int bsize,
+                       enum v4l2_memory memory)
+{
+       int ret;
+       mutex_lock(&q->lock);
+       ret = __videobuf_mmap_setup(q, bcount, bsize, memory);
+       mutex_unlock(&q->lock);
+       return ret;
+}
+
 int videobuf_reqbufs(struct videobuf_queue *q,
                 struct v4l2_requestbuffers *req)
 {
        unsigned int size,count;
        int retval;
 
-       if (req->type != q->type) {
-               dprintk(1,"reqbufs: queue type invalid\n");
-               return -EINVAL;
-       }
        if (req->count < 1) {
                dprintk(1,"reqbufs: count invalid (%d)\n",req->count);
                return -EINVAL;
        }
+
        if (req->memory != V4L2_MEMORY_MMAP     &&
            req->memory != V4L2_MEMORY_USERPTR  &&
            req->memory != V4L2_MEMORY_OVERLAY) {
@@ -303,6 +395,12 @@ int videobuf_reqbufs(struct videobuf_queue *q,
        }
 
        mutex_lock(&q->lock);
+       if (req->type != q->type) {
+               dprintk(1,"reqbufs: queue type invalid\n");
+               retval = -EINVAL;
+               goto done;
+       }
+
        if (q->streaming) {
                dprintk(1,"reqbufs: streaming already exists\n");
                retval = -EBUSY;
@@ -323,7 +421,7 @@ int videobuf_reqbufs(struct videobuf_queue *q,
        dprintk(1,"reqbufs: bufs=%d, size=0x%x [%d pages total]\n",
                count, size, (count*size)>>PAGE_SHIFT);
 
-       retval = videobuf_mmap_setup(q,count,size,req->memory);
+       retval = __videobuf_mmap_setup(q,count,size,req->memory);
        if (retval < 0) {
                dprintk(1,"reqbufs: mmap setup returned %d\n",retval);
                goto done;
@@ -338,20 +436,28 @@ int videobuf_reqbufs(struct videobuf_queue *q,
 
 int videobuf_querybuf(struct videobuf_queue *q, struct v4l2_buffer *b)
 {
+       int ret = -EINVAL;
+
+       mutex_lock(&q->lock);
        if (unlikely(b->type != q->type)) {
                dprintk(1,"querybuf: Wrong type.\n");
-               return -EINVAL;
+               goto done;
        }
        if (unlikely(b->index < 0 || b->index >= VIDEO_MAX_FRAME)) {
                dprintk(1,"querybuf: index out of range.\n");
-               return -EINVAL;
+               goto done;
        }
        if (unlikely(NULL == q->bufs[b->index])) {
                dprintk(1,"querybuf: buffer is null.\n");
-               return -EINVAL;
+               goto done;
        }
+
        videobuf_status(q,b,q->bufs[b->index],q->type);
-       return 0;
+
+       ret = 0;
+done:
+       mutex_unlock(&q->lock);
+       return ret;
 }
 
 int videobuf_qbuf(struct videobuf_queue *q,
@@ -541,22 +647,30 @@ int videobuf_streamon(struct videobuf_queue *q)
        return retval;
 }
 
-int videobuf_streamoff(struct videobuf_queue *q)
+/* Locking: Caller holds q->lock */
+static int __videobuf_streamoff(struct videobuf_queue *q)
 {
-       int retval = -EINVAL;
-
-       mutex_lock(&q->lock);
        if (!q->streaming)
-               goto done;
+               return -EINVAL;
+
        videobuf_queue_cancel(q);
        q->streaming = 0;
-       retval = 0;
 
- done:
+       return 0;
+}
+
+int videobuf_streamoff(struct videobuf_queue *q)
+{
+       int retval;
+
+       mutex_lock(&q->lock);
+       retval = __videobuf_streamoff(q);
        mutex_unlock(&q->lock);
+
        return retval;
 }
 
+/* Locking: Caller holds q->lock */
 static ssize_t videobuf_read_zerocopy(struct videobuf_queue *q,
                                      char __user *data,
                                      size_t count, loff_t *ppos)
@@ -691,7 +805,8 @@ ssize_t videobuf_read_one(struct videobuf_queue *q,
        return retval;
 }
 
-int videobuf_read_start(struct videobuf_queue *q)
+/* Locking: Caller holds q->lock */
+int __videobuf_read_start(struct videobuf_queue *q)
 {
        enum v4l2_field field;
        unsigned long flags=0;
@@ -705,7 +820,7 @@ int videobuf_read_start(struct videobuf_queue *q)
                count = VIDEO_MAX_FRAME;
        size = PAGE_ALIGN(size);
 
-       err = videobuf_mmap_setup(q, count, size, V4L2_MEMORY_USERPTR);
+       err = __videobuf_mmap_setup(q, count, size, V4L2_MEMORY_USERPTR);
        if (err < 0)
                return err;
 
@@ -728,12 +843,13 @@ int videobuf_read_start(struct videobuf_queue *q)
        return 0;
 }
 
-void videobuf_read_stop(struct videobuf_queue *q)
+static void __videobuf_read_stop(struct videobuf_queue *q)
 {
        int i;
 
+
        videobuf_queue_cancel(q);
-       videobuf_mmap_free(q);
+       __videobuf_mmap_free(q);
        INIT_LIST_HEAD(&q->stream);
        for (i = 0; i < VIDEO_MAX_FRAME; i++) {
                if (NULL == q->bufs[i])
@@ -743,8 +859,41 @@ void videobuf_read_stop(struct videobuf_queue *q)
        }
        q->read_buf = NULL;
        q->reading  = 0;
+       
 }
 
+int videobuf_read_start(struct videobuf_queue *q)
+{
+       int rc;
+
+       mutex_lock(&q->lock);
+       rc = __videobuf_read_start(q);
+       mutex_unlock(&q->lock);
+
+       return rc;
+}
+
+void videobuf_read_stop(struct videobuf_queue *q)
+{
+       mutex_lock(&q->lock);
+       __videobuf_read_stop(q);
+       mutex_unlock(&q->lock);
+}
+
+void videobuf_stop(struct videobuf_queue *q)
+{
+       mutex_lock(&q->lock);
+
+       if (q->streaming)
+               __videobuf_streamoff(q);
+
+       if (q->reading)
+               __videobuf_read_stop(q);
+
+       mutex_unlock(&q->lock);
+}
+
+
 ssize_t videobuf_read_stream(struct videobuf_queue *q,
                             char __user *data, size_t count, loff_t *ppos,
                             int vbihack, int nonblocking)
@@ -858,75 +1007,6 @@ unsigned int videobuf_poll_stream(struct file *file,
        return rc;
 }
 
-int videobuf_mmap_setup(struct videobuf_queue *q,
-                       unsigned int bcount, unsigned int bsize,
-                       enum v4l2_memory memory)
-{
-       unsigned int i;
-       int err;
-
-       MAGIC_CHECK(q->int_ops->magic,MAGIC_QTYPE_OPS);
-
-       err = videobuf_mmap_free(q);
-       if (0 != err)
-               return err;
-
-       /* Allocate and initialize buffers */
-       for (i = 0; i < bcount; i++) {
-               q->bufs[i] = videobuf_alloc(q);
-
-               if (q->bufs[i] == NULL)
-                       break;
-
-               q->bufs[i]->i      = i;
-               q->bufs[i]->input  = UNSET;
-               q->bufs[i]->memory = memory;
-               q->bufs[i]->bsize  = bsize;
-               switch (memory) {
-               case V4L2_MEMORY_MMAP:
-                       q->bufs[i]->boff  = bsize * i;
-                       break;
-               case V4L2_MEMORY_USERPTR:
-               case V4L2_MEMORY_OVERLAY:
-                       /* nothing */
-                       break;
-               }
-       }
-
-       if (!i)
-               return -ENOMEM;
-
-       dprintk(1,"mmap setup: %d buffers, %d bytes each\n",
-               i, bsize);
-
-       return i;
-}
-
-int videobuf_mmap_free(struct videobuf_queue *q)
-{
-       int i;
-       int rc;
-
-       if (!q)
-               return 0;
-
-       MAGIC_CHECK(q->int_ops->magic,MAGIC_QTYPE_OPS);
-
-       rc  = CALL(q,mmap_free,q);
-       if (rc<0)
-               return rc;
-
-       for (i = 0; i < VIDEO_MAX_FRAME; i++) {
-               if (NULL == q->bufs[i])
-                       continue;
-               q->ops->buf_release(q,q->bufs[i]);
-               kfree(q->bufs[i]);
-               q->bufs[i] = NULL;
-       }
-
-       return rc;
-}
-
 int videobuf_mmap_mapper(struct videobuf_queue *q,
                         struct vm_area_struct *vma)
 {
@@ -991,6 +1071,7 @@ EXPORT_SYMBOL_GPL(videobuf_streamoff);
 
 EXPORT_SYMBOL_GPL(videobuf_read_start);
 EXPORT_SYMBOL_GPL(videobuf_read_stop);
+EXPORT_SYMBOL_GPL(videobuf_stop);
 EXPORT_SYMBOL_GPL(videobuf_read_stream);
 EXPORT_SYMBOL_GPL(videobuf_read_one);
 EXPORT_SYMBOL_GPL(videobuf_poll_stream);
index cd74341c984fd0cd37678c955e5689b2b55697ea..e01259438bb2755bd8bf284554675145282086aa 100644 (file)
@@ -51,7 +51,7 @@ videobuf_vm_open(struct vm_area_struct *vma)
 {
        struct videobuf_mapping *map = vma->vm_private_data;
 
-       dprintk(2,"vm_open %p [count=%d,vma=%08lx-%08lx]\n",map,
+       dprintk(2,"vm_open %p [count=%u,vma=%08lx-%08lx]\n",map,
                map->count,vma->vm_start,vma->vm_end);
 
        map->count++;
@@ -64,7 +64,7 @@ videobuf_vm_close(struct vm_area_struct *vma)
        struct videobuf_queue *q = map->q;
        int i;
 
-       dprintk(2,"vm_close %p [count=%d,vma=%08lx-%08lx]\n",map,
+       dprintk(2,"vm_close %p [count=%u,vma=%08lx-%08lx]\n",map,
                map->count,vma->vm_start,vma->vm_end);
 
        map->count--;
@@ -221,7 +221,7 @@ static int __videobuf_mmap_mapper(struct videobuf_queue *q,
        }
 
        /* create mapping + update buffer list */
-       map = q->bufs[first]->map = kmalloc(sizeof(struct videobuf_mapping),GFP_KERNEL);
+       map = q->bufs[first]->map = kzalloc(sizeof(struct videobuf_mapping),GFP_KERNEL);
        if (NULL == map)
                return -ENOMEM;
 
index ee73dc75131ccb5348089ed9548f737937d4cc0c..9b54ff9d2e36210209d2335489fb5fb1fd901ad6 100644 (file)
@@ -1076,6 +1076,7 @@ static int vivi_release(struct inode *inode, struct file *file)
        int minor = iminor(inode);
 
        vivi_stop_thread(vidq);
+       videobuf_stop(&fh->vb_vidq);
        videobuf_mmap_free(&fh->vb_vidq);
 
        kfree (fh);
index 8135e4c3bf47b7cff7f61d2ae9e236fcefd0baeb..afd82966f9a0782ad5624f45fcf4538e3755a73f 100644 (file)
@@ -156,7 +156,7 @@ static void sm501_dump_clk(struct sm501_devdata *sm)
 
        dev_dbg(sm->dev, "PM0[%c]: "
                 "P2 %ld.%ld MHz (%ld), V2 %ld.%ld (%ld), "
-x               "M %ld.%ld (%ld), MX1 %ld.%ld (%ld)\n",
+                "M %ld.%ld (%ld), MX1 %ld.%ld (%ld)\n",
                 (pmc & 3 ) == 0 ? '*' : '-',
                 fmt_freq(decode_div(pll2, pm0, 24, 1<<29, 31, px_div)),
                 fmt_freq(decode_div(pll2, pm0, 16, 1<<20, 15, misc_div)),
index bb13858f60a135fd71a06525ade38c8e8cd227ed..b0f68031b49dfa926dd8ccc62ff91d058638a65a 100644 (file)
@@ -338,7 +338,7 @@ static void sony_laptop_report_input_event(u8 event)
                dprintk("unknown input event %.2x\n", event);
 }
 
-static int sony_laptop_setup_input(void)
+static int sony_laptop_setup_input(struct acpi_device *acpi_device)
 {
        struct input_dev *jog_dev;
        struct input_dev *key_dev;
@@ -379,6 +379,7 @@ static int sony_laptop_setup_input(void)
        key_dev->name = "Sony Vaio Keys";
        key_dev->id.bustype = BUS_ISA;
        key_dev->id.vendor = PCI_VENDOR_ID_SONY;
+       key_dev->dev.parent = &acpi_device->dev;
 
        /* Initialize the Input Drivers: special keys */
        set_bit(EV_KEY, key_dev->evbit);
@@ -410,6 +411,7 @@ static int sony_laptop_setup_input(void)
        jog_dev->name = "Sony Vaio Jogdial";
        jog_dev->id.bustype = BUS_ISA;
        jog_dev->id.vendor = PCI_VENDOR_ID_SONY;
+       key_dev->dev.parent = &acpi_device->dev;
 
        jog_dev->evbit[0] = BIT_MASK(EV_KEY) | BIT_MASK(EV_REL);
        jog_dev->keybit[BIT_WORD(BTN_MOUSE)] = BIT_MASK(BTN_MIDDLE);
@@ -1006,7 +1008,7 @@ static int sony_nc_add(struct acpi_device *device)
        }
 
        /* setup input devices and helper fifo */
-       result = sony_laptop_setup_input();
+       result = sony_laptop_setup_input(device);
        if (result) {
                printk(KERN_ERR DRV_PFX
                                "Unabe to create input devices.\n");
@@ -1034,7 +1036,7 @@ static int sony_nc_add(struct acpi_device *device)
                        sony_backlight_device->props.brightness =
                            sony_backlight_get_brightness
                            (sony_backlight_device);
-                       sony_backlight_device->props.max_brightness = 
+                       sony_backlight_device->props.max_brightness =
                            SONY_MAX_BRIGHTNESS - 1;
                }
 
@@ -2453,7 +2455,7 @@ static int sony_pic_add(struct acpi_device *device)
        }
 
        /* setup input devices and helper fifo */
-       result = sony_laptop_setup_input();
+       result = sony_laptop_setup_input(device);
        if (result) {
                printk(KERN_ERR DRV_PFX
                                "Unabe to create input devices.\n");
index e953276664a0f77aef6a0a997452488d75a294c3..cf56647a6ca4822307d52b5911b4a4152b7a7766 100644 (file)
@@ -21,7 +21,7 @@
  *  02110-1301, USA.
  */
 
-#define IBM_VERSION "0.16"
+#define IBM_VERSION "0.17"
 #define TPACPI_SYSFS_VERSION 0x020000
 
 /*
@@ -964,15 +964,15 @@ static int __init hotkey_init(struct ibm_init_struct *iibm)
                KEY_UNKNOWN,    /* 0x0C: FN+BACKSPACE */
                KEY_UNKNOWN,    /* 0x0D: FN+INSERT */
                KEY_UNKNOWN,    /* 0x0E: FN+DELETE */
-               KEY_BRIGHTNESSUP,       /* 0x0F: FN+HOME (brightness up) */
+               KEY_RESERVED,   /* 0x0F: FN+HOME (brightness up) */
                /* Scan codes 0x10 to 0x1F: Extended ACPI HKEY hot keys */
-               KEY_BRIGHTNESSDOWN,     /* 0x10: FN+END (brightness down) */
+               KEY_RESERVED,   /* 0x10: FN+END (brightness down) */
                KEY_RESERVED,   /* 0x11: FN+PGUP (thinklight toggle) */
                KEY_UNKNOWN,    /* 0x12: FN+PGDOWN */
                KEY_ZOOM,       /* 0x13: FN+SPACE (zoom) */
-               KEY_VOLUMEUP,   /* 0x14: VOLUME UP */
-               KEY_VOLUMEDOWN, /* 0x15: VOLUME DOWN */
-               KEY_MUTE,       /* 0x16: MUTE */
+               KEY_RESERVED,   /* 0x14: VOLUME UP */
+               KEY_RESERVED,   /* 0x15: VOLUME DOWN */
+               KEY_RESERVED,   /* 0x16: MUTE */
                KEY_VENDOR,     /* 0x17: Thinkpad/AccessIBM/Lenovo */
                /* (assignments unknown, please report if found) */
                KEY_UNKNOWN, KEY_UNKNOWN, KEY_UNKNOWN, KEY_UNKNOWN,
@@ -987,15 +987,15 @@ static int __init hotkey_init(struct ibm_init_struct *iibm)
                KEY_UNKNOWN,    /* 0x0C: FN+BACKSPACE */
                KEY_UNKNOWN,    /* 0x0D: FN+INSERT */
                KEY_UNKNOWN,    /* 0x0E: FN+DELETE */
-               KEY_BRIGHTNESSUP,       /* 0x0F: FN+HOME (brightness up) */
+               KEY_RESERVED,   /* 0x0F: FN+HOME (brightness up) */
                /* Scan codes 0x10 to 0x1F: Extended ACPI HKEY hot keys */
-               KEY_BRIGHTNESSDOWN,     /* 0x10: FN+END (brightness down) */
+               KEY_RESERVED,   /* 0x10: FN+END (brightness down) */
                KEY_RESERVED,   /* 0x11: FN+PGUP (thinklight toggle) */
                KEY_UNKNOWN,    /* 0x12: FN+PGDOWN */
                KEY_ZOOM,       /* 0x13: FN+SPACE (zoom) */
-               KEY_VOLUMEUP,   /* 0x14: VOLUME UP */
-               KEY_VOLUMEDOWN, /* 0x15: VOLUME DOWN */
-               KEY_MUTE,       /* 0x16: MUTE */
+               KEY_RESERVED,   /* 0x14: VOLUME UP */
+               KEY_RESERVED,   /* 0x15: VOLUME DOWN */
+               KEY_RESERVED,   /* 0x16: MUTE */
                KEY_VENDOR,     /* 0x17: Thinkpad/AccessIBM/Lenovo */
                /* (assignments unknown, please report if found) */
                KEY_UNKNOWN, KEY_UNKNOWN, KEY_UNKNOWN, KEY_UNKNOWN,
@@ -1342,9 +1342,8 @@ static int hotkey_read(char *p)
                return len;
        }
 
-       res = mutex_lock_interruptible(&hotkey_mutex);
-       if (res < 0)
-               return res;
+       if (mutex_lock_interruptible(&hotkey_mutex))
+               return -ERESTARTSYS;
        res = hotkey_get(&status, &mask);
        mutex_unlock(&hotkey_mutex);
        if (res)
@@ -1373,9 +1372,8 @@ static int hotkey_write(char *buf)
        if (!tp_features.hotkey)
                return -ENODEV;
 
-       res = mutex_lock_interruptible(&hotkey_mutex);
-       if (res < 0)
-               return res;
+       if (mutex_lock_interruptible(&hotkey_mutex))
+               return -ERESTARTSYS;
 
        res = hotkey_get(&status, &mask);
        if (res)
@@ -3114,6 +3112,99 @@ static struct backlight_ops ibm_backlight_data = {
 
 static struct mutex brightness_mutex;
 
+static int __init tpacpi_query_bcll_levels(acpi_handle handle)
+{
+       struct acpi_buffer buffer = { ACPI_ALLOCATE_BUFFER, NULL };
+       union acpi_object *obj;
+       int rc;
+
+       if (ACPI_SUCCESS(acpi_evaluate_object(handle, NULL, NULL, &buffer))) {
+               obj = (union acpi_object *)buffer.pointer;
+               if (!obj || (obj->type != ACPI_TYPE_PACKAGE)) {
+                       printk(IBM_ERR "Unknown BCLL data, "
+                              "please report this to %s\n", IBM_MAIL);
+                       rc = 0;
+               } else {
+                       rc = obj->package.count;
+               }
+       } else {
+               return 0;
+       }
+
+       kfree(buffer.pointer);
+       return rc;
+}
+
+static acpi_status __init brightness_find_bcll(acpi_handle handle, u32 lvl,
+                                       void *context, void **rv)
+{
+       char name[ACPI_PATH_SEGMENT_LENGTH];
+       struct acpi_buffer buffer = { sizeof(name), &name };
+
+       if (ACPI_SUCCESS(acpi_get_name(handle, ACPI_SINGLE_NAME, &buffer)) &&
+           !strncmp("BCLL", name, sizeof(name) - 1)) {
+               if (tpacpi_query_bcll_levels(handle) == 16) {
+                       *rv = handle;
+                       return AE_CTRL_TERMINATE;
+               } else {
+                       return AE_OK;
+               }
+       } else {
+               return AE_OK;
+       }
+}
+
+static int __init brightness_check_levels(void)
+{
+       int status;
+       void *found_node = NULL;
+
+       if (!vid_handle) {
+               IBM_ACPIHANDLE_INIT(vid);
+       }
+       if (!vid_handle)
+               return 0;
+
+       /* Search for a BCLL package with 16 levels */
+       status = acpi_walk_namespace(ACPI_TYPE_PACKAGE, vid_handle, 3,
+                                       brightness_find_bcll, NULL, &found_node);
+
+       return (ACPI_SUCCESS(status) && found_node != NULL);
+}
+
+static acpi_status __init brightness_find_bcl(acpi_handle handle, u32 lvl,
+                                       void *context, void **rv)
+{
+       char name[ACPI_PATH_SEGMENT_LENGTH];
+       struct acpi_buffer buffer = { sizeof(name), &name };
+
+       if (ACPI_SUCCESS(acpi_get_name(handle, ACPI_SINGLE_NAME, &buffer)) &&
+           !strncmp("_BCL", name, sizeof(name) - 1)) {
+               *rv = handle;
+               return AE_CTRL_TERMINATE;
+       } else {
+               return AE_OK;
+       }
+}
+
+static int __init brightness_check_std_acpi_support(void)
+{
+       int status;
+       void *found_node = NULL;
+
+       if (!vid_handle) {
+               IBM_ACPIHANDLE_INIT(vid);
+       }
+       if (!vid_handle)
+               return 0;
+
+       /* Search for a _BCL method, but don't execute it */
+       status = acpi_walk_namespace(ACPI_TYPE_METHOD, vid_handle, 3,
+                                    brightness_find_bcl, NULL, &found_node);
+
+       return (ACPI_SUCCESS(status) && found_node != NULL);
+}
+
 static int __init brightness_init(struct ibm_init_struct *iibm)
 {
        int b;
@@ -3122,6 +3213,18 @@ static int __init brightness_init(struct ibm_init_struct *iibm)
 
        mutex_init(&brightness_mutex);
 
+       if (!brightness_enable) {
+               dbg_printk(TPACPI_DBG_INIT,
+                          "brightness support disabled by module parameter\n");
+               return 1;
+       } else if (brightness_enable > 1) {
+               if (brightness_check_std_acpi_support()) {
+                       printk(IBM_NOTICE
+                              "standard ACPI backlight interface available, not loading native one...\n");
+                       return 1;
+               }
+       }
+
        if (!brightness_mode) {
                if (thinkpad_id.vendor == PCI_VENDOR_ID_LENOVO)
                        brightness_mode = 2;
@@ -3135,10 +3238,17 @@ static int __init brightness_init(struct ibm_init_struct *iibm)
        if (brightness_mode > 3)
                return -EINVAL;
 
+       tp_features.bright_16levels =
+                       thinkpad_id.vendor == PCI_VENDOR_ID_LENOVO &&
+                       brightness_check_levels();
+
        b = brightness_get(NULL);
        if (b < 0)
                return 1;
 
+       if (tp_features.bright_16levels)
+               printk(IBM_INFO "detected a 16-level brightness capable ThinkPad\n");
+
        ibm_backlight_device = backlight_device_register(
                                        TPACPI_BACKLIGHT_DEV_NAME, NULL, NULL,
                                        &ibm_backlight_data);
@@ -3148,7 +3258,8 @@ static int __init brightness_init(struct ibm_init_struct *iibm)
        }
        vdbg_printk(TPACPI_DBG_INIT, "brightness is supported\n");
 
-       ibm_backlight_device->props.max_brightness = 7;
+       ibm_backlight_device->props.max_brightness =
+                               (tp_features.bright_16levels)? 15 : 7;
        ibm_backlight_device->props.brightness = b;
        backlight_update_status(ibm_backlight_device);
 
@@ -3167,6 +3278,8 @@ static void brightness_exit(void)
 
 static int brightness_update_status(struct backlight_device *bd)
 {
+       /* it is the backlight class's job (caller) to handle
+        * EINTR and other errors properly */
        return brightness_set(
                (bd->props.fb_blank == FB_BLANK_UNBLANK &&
                 bd->props.power == FB_BLANK_UNBLANK) ?
@@ -3184,13 +3297,14 @@ static int brightness_get(struct backlight_device *bd)
        if (brightness_mode & 1) {
                if (!acpi_ec_read(brightness_offset, &lec))
                        return -EIO;
-               lec &= 7;
+               lec &= (tp_features.bright_16levels)? 0x0f : 0x07;
                level = lec;
        };
        if (brightness_mode & 2) {
                lcmos = (nvram_read_byte(TP_NVRAM_ADDR_BRIGHTNESS)
                         & TP_NVRAM_MASK_LEVEL_BRIGHTNESS)
                        >> TP_NVRAM_POS_LEVEL_BRIGHTNESS;
+               lcmos &= (tp_features.bright_16levels)? 0x0f : 0x07;
                level = lcmos;
        }
 
@@ -3206,12 +3320,13 @@ static int brightness_get(struct backlight_device *bd)
        return level;
 }
 
+/* May return EINTR which can always be mapped to ERESTARTSYS */
 static int brightness_set(int value)
 {
        int cmos_cmd, inc, i, res;
        int current_value;
 
-       if (value > 7)
+       if (value > ((tp_features.bright_16levels)? 15 : 7))
                return -EINVAL;
 
        res = mutex_lock_interruptible(&brightness_mutex);
@@ -3227,7 +3342,7 @@ static int brightness_set(int value)
        cmos_cmd = value > current_value ?
                        TP_CMOS_BRIGHTNESS_UP :
                        TP_CMOS_BRIGHTNESS_DOWN;
-       inc = value > current_value ? 1 : -1;
+       inc = (value > current_value)? 1 : -1;
 
        res = 0;
        for (i = current_value; i != value; i += inc) {
@@ -3256,10 +3371,11 @@ static int brightness_read(char *p)
        if ((level = brightness_get(NULL)) < 0) {
                len += sprintf(p + len, "level:\t\tunreadable\n");
        } else {
-               len += sprintf(p + len, "level:\t\t%d\n", level & 0x7);
+               len += sprintf(p + len, "level:\t\t%d\n", level);
                len += sprintf(p + len, "commands:\tup, down\n");
                len += sprintf(p + len, "commands:\tlevel <level>"
-                              " (<level> is 0-7)\n");
+                              " (<level> is 0-%d)\n",
+                              (tp_features.bright_16levels) ? 15 : 7);
        }
 
        return len;
@@ -3268,28 +3384,34 @@ static int brightness_read(char *p)
 static int brightness_write(char *buf)
 {
        int level;
-       int new_level;
+       int rc;
        char *cmd;
+       int max_level = (tp_features.bright_16levels) ? 15 : 7;
 
-       while ((cmd = next_cmd(&buf))) {
-               if ((level = brightness_get(NULL)) < 0)
-                       return level;
-               level &= 7;
+       level = brightness_get(NULL);
+       if (level < 0)
+               return level;
 
+       while ((cmd = next_cmd(&buf))) {
                if (strlencmp(cmd, "up") == 0) {
-                       new_level = level == 7 ? 7 : level + 1;
+                       if (level < max_level)
+                               level++;
                } else if (strlencmp(cmd, "down") == 0) {
-                       new_level = level == 0 ? 0 : level - 1;
-               } else if (sscanf(cmd, "level %d", &new_level) == 1 &&
-                          new_level >= 0 && new_level <= 7) {
-                       /* new_level set */
+                       if (level > 0)
+                               level--;
+               } else if (sscanf(cmd, "level %d", &level) == 1 &&
+                          level >= 0 && level <= max_level) {
+                       /* new level set */
                } else
                        return -EINVAL;
-
-               brightness_set(new_level);
        }
 
-       return 0;
+       /*
+        * Now we know what the final level should be, so we try to set it.
+        * Doing it this way makes the syscall restartable in case of EINTR
+        */
+       rc = brightness_set(level);
+       return (rc == -EINTR)? ERESTARTSYS : rc;
 }
 
 static struct ibm_struct brightness_driver_data = {
@@ -3652,9 +3774,8 @@ static ssize_t fan_pwm1_store(struct device *dev,
        /* scale down from 0-255 to 0-7 */
        newlevel = (s >> 5) & 0x07;
 
-       rc = mutex_lock_interruptible(&fan_mutex);
-       if (rc < 0)
-               return rc;
+       if (mutex_lock_interruptible(&fan_mutex))
+               return -ERESTARTSYS;
 
        rc = fan_get_status(&status);
        if (!rc && (status &
@@ -3904,9 +4025,8 @@ static int fan_get_status_safe(u8 *status)
        int rc;
        u8 s;
 
-       rc = mutex_lock_interruptible(&fan_mutex);
-       if (rc < 0)
-               return rc;
+       if (mutex_lock_interruptible(&fan_mutex))
+               return -ERESTARTSYS;
        rc = fan_get_status(&s);
        if (!rc)
                fan_update_desired_level(s);
@@ -4040,9 +4160,8 @@ static int fan_set_level_safe(int level)
        if (!fan_control_allowed)
                return -EPERM;
 
-       rc = mutex_lock_interruptible(&fan_mutex);
-       if (rc < 0)
-               return rc;
+       if (mutex_lock_interruptible(&fan_mutex))
+               return -ERESTARTSYS;
 
        if (level == TPACPI_FAN_LAST_LEVEL)
                level = fan_control_desired_level;
@@ -4063,9 +4182,8 @@ static int fan_set_enable(void)
        if (!fan_control_allowed)
                return -EPERM;
 
-       rc = mutex_lock_interruptible(&fan_mutex);
-       if (rc < 0)
-               return rc;
+       if (mutex_lock_interruptible(&fan_mutex))
+               return -ERESTARTSYS;
 
        switch (fan_control_access_mode) {
        case TPACPI_FAN_WR_ACPI_FANS:
@@ -4119,9 +4237,8 @@ static int fan_set_disable(void)
        if (!fan_control_allowed)
                return -EPERM;
 
-       rc = mutex_lock_interruptible(&fan_mutex);
-       if (rc < 0)
-               return rc;
+       if (mutex_lock_interruptible(&fan_mutex))
+               return -ERESTARTSYS;
 
        rc = 0;
        switch (fan_control_access_mode) {
@@ -4158,9 +4275,8 @@ static int fan_set_speed(int speed)
        if (!fan_control_allowed)
                return -EPERM;
 
-       rc = mutex_lock_interruptible(&fan_mutex);
-       if (rc < 0)
-               return rc;
+       if (mutex_lock_interruptible(&fan_mutex))
+               return -ERESTARTSYS;
 
        rc = 0;
        switch (fan_control_access_mode) {
@@ -4701,9 +4817,15 @@ static int __init set_ibm_param(const char *val, struct kernel_param *kp)
        unsigned int i;
        struct ibm_struct *ibm;
 
+       if (!kp || !kp->name || !val)
+               return -EINVAL;
+
        for (i = 0; i < ARRAY_SIZE(ibms_init); i++) {
                ibm = ibms_init[i].data;
-               BUG_ON(ibm == NULL);
+               WARN_ON(ibm == NULL);
+
+               if (!ibm || !ibm->name)
+                       continue;
 
                if (strcmp(ibm->name, kp->name) == 0 && ibm->write) {
                        if (strlen(val) > sizeof(ibms_init[i].param) - 2)
@@ -4732,6 +4854,9 @@ module_param_named(fan_control, fan_control_allowed, bool, 0);
 static int brightness_mode;
 module_param_named(brightness_mode, brightness_mode, int, 0);
 
+static unsigned int brightness_enable = 2; /* 2 = auto, 0 = no, 1 = yes */
+module_param(brightness_enable, uint, 0);
+
 static unsigned int hotkey_report_mode;
 module_param(hotkey_report_mode, uint, 0);
 
index 3abcc812063433e664a23df7d5275918d6906351..8fba2bbe345ee3ad46808d7e522058d2983e8a97 100644 (file)
@@ -84,7 +84,7 @@
 
 /* ThinkPad CMOS NVRAM constants */
 #define TP_NVRAM_ADDR_BRIGHTNESS       0x5e
-#define TP_NVRAM_MASK_LEVEL_BRIGHTNESS 0x07
+#define TP_NVRAM_MASK_LEVEL_BRIGHTNESS 0x0f
 #define TP_NVRAM_POS_LEVEL_BRIGHTNESS 0
 
 #define onoff(status,bit) ((status) & (1 << (bit)) ? "on" : "off")
@@ -246,6 +246,7 @@ static struct {
        u32 hotkey_wlsw:1;
        u32 light:1;
        u32 light_status:1;
+       u32 bright_16levels:1;
        u32 wan:1;
        u32 fan_ctrl_status_undef:1;
        u32 input_device_registered:1;
@@ -338,6 +339,7 @@ static int bluetooth_write(char *buf);
 static struct backlight_device *ibm_backlight_device;
 static int brightness_offset = 0x31;
 static int brightness_mode;
+static unsigned int brightness_enable; /* 0 = no, 1 = yes, 2 = auto */
 
 static int brightness_init(struct ibm_init_struct *iibm);
 static void brightness_exit(void);
index e38d5a3b2a899d6f9988e12ad294bf47862959c6..aeb32a93f6a08f1379c17914ec067260933a555a 100644 (file)
@@ -44,6 +44,9 @@
  * max 8 partitions per card
  */
 #define MMC_SHIFT      3
+#define MMC_NUM_MINORS (256 >> MMC_SHIFT)
+
+static unsigned long dev_use[MMC_NUM_MINORS/(8*sizeof(unsigned long))];
 
 /*
  * There is one mmc_blk_data per slot.
@@ -80,6 +83,9 @@ static void mmc_blk_put(struct mmc_blk_data *md)
        mutex_lock(&open_lock);
        md->usage--;
        if (md->usage == 0) {
+               int devidx = md->disk->first_minor >> MMC_SHIFT;
+               __clear_bit(devidx, dev_use);
+
                put_disk(md->disk);
                kfree(md);
        }
@@ -321,7 +327,13 @@ static int mmc_blk_issue_rq(struct mmc_queue *mq, struct request *req)
                                               req->rq_disk->disk_name, err);
                                        goto cmd_err;
                                }
-                       } while (!(cmd.resp[0] & R1_READY_FOR_DATA));
+                               /*
+                                * Some cards mishandle the status bits,
+                                * so make sure to check both the busy
+                                * indication and the card state.
+                                */
+                       } while (!(cmd.resp[0] & R1_READY_FOR_DATA) ||
+                               (R1_CURRENT_STATE(cmd.resp[0]) == 7));
 
 #if 0
                        if (cmd.resp[0] & ~0x00000900)
@@ -400,9 +412,6 @@ static int mmc_blk_issue_rq(struct mmc_queue *mq, struct request *req)
        return 0;
 }
 
-#define MMC_NUM_MINORS (256 >> MMC_SHIFT)
-
-static unsigned long dev_use[MMC_NUM_MINORS/(8*sizeof(unsigned long))];
 
 static inline int mmc_blk_readonly(struct mmc_card *card)
 {
@@ -568,17 +577,12 @@ static void mmc_blk_remove(struct mmc_card *card)
        struct mmc_blk_data *md = mmc_get_drvdata(card);
 
        if (md) {
-               int devidx;
-
                /* Stop new requests from getting into the queue */
                del_gendisk(md->disk);
 
                /* Then flush out any already in there */
                mmc_cleanup_queue(&md->queue);
 
-               devidx = md->disk->first_minor >> MMC_SHIFT;
-               __clear_bit(devidx, dev_use);
-
                mmc_blk_put(md);
        }
        mmc_set_drvdata(card, NULL);
index 1b9c9b6da5b7349b39148129c7a6ce4a709e7717..30cd13b13ac3970f403906f3770c373658a20783 100644 (file)
@@ -180,12 +180,13 @@ int mmc_init_queue(struct mmc_queue *mq, struct mmc_card *card, spinlock_t *lock
                blk_queue_max_hw_segments(mq->queue, host->max_hw_segs);
                blk_queue_max_segment_size(mq->queue, host->max_seg_size);
 
-               mq->sg = kzalloc(sizeof(struct scatterlist) *
+               mq->sg = kmalloc(sizeof(struct scatterlist) *
                        host->max_phys_segs, GFP_KERNEL);
                if (!mq->sg) {
                        ret = -ENOMEM;
                        goto cleanup_queue;
                }
+               sg_init_table(mq->sg, host->max_phys_segs);
        }
 
        init_MUTEX(&mq->thread_sem);
index d552de6831108cac25d7981a0e608940eb5cad3d..eeea84c309e691c8a7c838b527b95c7ce50c296c 100644 (file)
@@ -386,7 +386,7 @@ static void sdio_uart_stop_rx(struct sdio_uart_port *port)
        sdio_out(port, UART_IER, port->ier);
 }
 
-static void sdio_uart_receive_chars(struct sdio_uart_port *port, int *status)
+static void sdio_uart_receive_chars(struct sdio_uart_port *port, unsigned int *status)
 {
        struct tty_struct *tty = port->tty;
        unsigned int ch, flag;
index a6469218f194cee8b102b65e0ef3ab423183c287..365024b83d3da9df9b6e4f7a9d4cf6d216ba523d 100644 (file)
@@ -176,8 +176,6 @@ mmc_spi_readbytes(struct mmc_spi_host *host, unsigned len)
                                DMA_FROM_DEVICE);
 
        status = spi_sync(host->spi, &host->readback);
-       if (status == 0)
-               status = host->readback.status;
 
        if (host->dma_dev)
                dma_sync_single_for_cpu(host->dma_dev,
@@ -480,8 +478,6 @@ mmc_spi_command_send(struct mmc_spi_host *host,
                                DMA_BIDIRECTIONAL);
        }
        status = spi_sync(host->spi, &host->m);
-       if (status == 0)
-               status = host->m.status;
 
        if (host->dma_dev)
                dma_sync_single_for_cpu(host->dma_dev,
@@ -624,8 +620,6 @@ mmc_spi_writeblock(struct mmc_spi_host *host, struct spi_transfer *t)
                                DMA_BIDIRECTIONAL);
 
        status = spi_sync(spi, &host->m);
-       if (status == 0)
-               status = host->m.status;
 
        if (status != 0) {
                dev_dbg(&spi->dev, "write error (%d)\n", status);
@@ -726,8 +720,6 @@ mmc_spi_readblock(struct mmc_spi_host *host, struct spi_transfer *t)
                }
 
                status = spi_sync(spi, &host->m);
-               if (status == 0)
-                       status = host->m.status;
 
                if (host->dma_dev) {
                        dma_sync_single_for_cpu(host->dma_dev,
@@ -905,8 +897,6 @@ mmc_spi_data_do(struct mmc_spi_host *host, struct mmc_command *cmd,
                                        DMA_BIDIRECTIONAL);
 
                tmp = spi_sync(spi, &host->m);
-               if (tmp == 0)
-                       tmp = host->m.status;
 
                if (host->dma_dev)
                        dma_sync_single_for_cpu(host->dma_dev,
index c11a3d25605141a2f8017e24055984fb2b8d2160..20d5c7bd940a7c48eaa42b8af06484d918e6e6b8 100644 (file)
@@ -16,7 +16,6 @@
 #include <linux/mmc/host.h>
 #include <linux/highmem.h>
 #include <linux/scatterlist.h>
-#include <linux/log2.h>
 #include <asm/io.h>
 
 #define DRIVER_NAME "tifm_sd"
@@ -638,17 +637,15 @@ static void tifm_sd_request(struct mmc_host *mmc, struct mmc_request *mrq)
                goto err_out;
        }
 
-       if (mrq->data && !is_power_of_2(mrq->data->blksz)) {
-               printk(KERN_ERR "%s: Unsupported block size (%d bytes)\n",
-                       sock->dev.bus_id, mrq->data->blksz);
-               mrq->cmd->error = -EINVAL;
-               goto err_out;
-       }
-
        host->cmd_flags = 0;
        host->block_pos = 0;
        host->sg_pos = 0;
 
+       if (mrq->data && !is_power_of_2(mrq->data->blksz))
+               host->no_dma = 1;
+       else
+               host->no_dma = no_dma ? 1 : 0;
+
        if (r_data) {
                tifm_sd_set_data_timeout(host, r_data);
 
@@ -676,7 +673,7 @@ static void tifm_sd_request(struct mmc_host *mmc, struct mmc_request *mrq)
                                            : PCI_DMA_FROMDEVICE)) {
                                printk(KERN_ERR "%s : scatterlist map failed\n",
                                       sock->dev.bus_id);
-                               spin_unlock_irqrestore(&sock->lock, flags);
+                               mrq->cmd->error = -ENOMEM;
                                goto err_out;
                        }
                        host->sg_len = tifm_map_sg(sock, r_data->sg,
@@ -692,7 +689,7 @@ static void tifm_sd_request(struct mmc_host *mmc, struct mmc_request *mrq)
                                              r_data->flags & MMC_DATA_WRITE
                                              ? PCI_DMA_TODEVICE
                                              : PCI_DMA_FROMDEVICE);
-                               spin_unlock_irqrestore(&sock->lock, flags);
+                               mrq->cmd->error = -ENOMEM;
                                goto err_out;
                        }
 
@@ -966,7 +963,6 @@ static int tifm_sd_probe(struct tifm_dev *sock)
                return -ENOMEM;
 
        host = mmc_priv(mmc);
-       host->no_dma = no_dma;
        tifm_set_drvdata(sock, mmc);
        host->dev = sock;
        host->timeout_jiffies = msecs_to_jiffies(1000);
index e8d69b0adf90a8efc47adde0b54875b44d19c5eb..d9107e542dface363ef53d71339361d99f7619de 100644 (file)
@@ -888,7 +888,7 @@ config SMC91X
        tristate "SMC 91C9x/91C1xxx support"
        select CRC32
        select MII
-       depends on ARM || REDWOOD_5 || REDWOOD_6 || M32R || SUPERH || SOC_AU1X00 || BFIN
+       depends on ARM || REDWOOD_5 || REDWOOD_6 || M32R || SUPERH || SOC_AU1X00 || BLACKFIN
        help
          This is a driver for SMC's 91x series of Ethernet chipsets,
          including the SMC91C94 and the SMC91C111. Say Y if you want it
@@ -926,7 +926,7 @@ config SMC911X
        tristate "SMSC LAN911[5678] support"
        select CRC32
        select MII
-       depends on ARCH_PXA || SUPERH
+       depends on ARCH_PXA || SH_MAGIC_PANEL_R2
        help
          This is a driver for SMSC's LAN911x series of Ethernet chipsets
          including the new LAN9115, LAN9116, LAN9117, and LAN9118.
index eebf5bb2b03ae6a4958df7bff99d973adddc3771..e7fdd81919bd15edd65e6b2e749b8bf827c94b14 100644 (file)
@@ -1340,7 +1340,9 @@ static int amd8111e_close(struct net_device * dev)
        struct amd8111e_priv *lp = netdev_priv(dev);
        netif_stop_queue(dev);
 
+#ifdef CONFIG_AMD8111E_NAPI
        napi_disable(&lp->napi);
+#endif
 
        spin_lock_irq(&lp->lock);
 
@@ -1372,7 +1374,9 @@ static int amd8111e_open(struct net_device * dev )
                                         dev->name, dev))
                return -EAGAIN;
 
+#ifdef CONFIG_AMD8111E_NAPI
        napi_enable(&lp->napi);
+#endif
 
        spin_lock_irq(&lp->lock);
 
@@ -1380,7 +1384,9 @@ static int amd8111e_open(struct net_device * dev )
 
        if(amd8111e_restart(dev)){
                spin_unlock_irq(&lp->lock);
+#ifdef CONFIG_AMD8111E_NAPI
                napi_disable(&lp->napi);
+#endif
                if (dev->irq)
                        free_irq(dev->irq, dev);
                return -ENOMEM;
index 084acfd6fc5fdaeba614a7e20302c89f3842546f..eb971755a3ff34c5b8f76d5b8b63bf5f3a83aad0 100644 (file)
@@ -676,7 +676,7 @@ static void bf537mac_rx(struct net_device *dev)
        skb->protocol = eth_type_trans(skb, dev);
 #if defined(BFIN_MAC_CSUM_OFFLOAD)
        skb->csum = current_rx_ptr->status.ip_payload_csum;
-       skb->ip_summed = CHECKSUM_PARTIAL;
+       skb->ip_summed = CHECKSUM_COMPLETE;
 #endif
 
        netif_rx(skb);
@@ -924,7 +924,7 @@ static int __init bf537mac_probe(struct net_device *dev)
        if (!is_valid_ether_addr(dev->dev_addr)) {
                /* Grab the MAC from the board somehow - this is done in the
                   arch/blackfin/mach-bf537/boards/eth_mac.c */
-               get_bf537_ether_addr(dev->dev_addr);
+               bfin_get_ether_addr(dev->dev_addr);
        }
 
        /* If still not valid, get a random one */
index 3a107ad75381ecd7ac18305952b0194f8f8844c0..5970ea7142cd53c3e5f1d4234110a484f8af0191 100644 (file)
@@ -92,4 +92,4 @@ struct bf537mac_local {
        struct mii_bus mii_bus;
 };
 
-extern void get_bf537_ether_addr(char *addr);
+extern void bfin_get_ether_addr(char *addr);
index da767d3d5af5bb552a6d0dce0792112a3179fc6c..4e7b46e44874ea94f33015a9c058fc2969e95dd9 100644 (file)
@@ -56,8 +56,8 @@
 
 #define DRV_MODULE_NAME                "bnx2"
 #define PFX DRV_MODULE_NAME    ": "
-#define DRV_MODULE_VERSION     "1.6.8"
-#define DRV_MODULE_RELDATE     "October 17, 2007"
+#define DRV_MODULE_VERSION     "1.6.9"
+#define DRV_MODULE_RELDATE     "December 8, 2007"
 
 #define RUN_AT(x) (jiffies + (x))
 
@@ -2387,18 +2387,24 @@ bnx2_reuse_rx_skb(struct bnx2 *bp, struct sk_buff *skb,
        prod_bd->rx_bd_haddr_lo = cons_bd->rx_bd_haddr_lo;
 }
 
+static inline u16
+bnx2_get_hw_rx_cons(struct bnx2 *bp)
+{
+       u16 cons = bp->status_blk->status_rx_quick_consumer_index0;
+
+       if (unlikely((cons & MAX_RX_DESC_CNT) == MAX_RX_DESC_CNT))
+               cons++;
+       return cons;
+}
+
 static int
 bnx2_rx_int(struct bnx2 *bp, int budget)
 {
-       struct status_block *sblk = bp->status_blk;
        u16 hw_cons, sw_cons, sw_ring_cons, sw_prod, sw_ring_prod;
        struct l2_fhdr *rx_hdr;
        int rx_pkt = 0;
 
-       hw_cons = bp->hw_rx_cons = sblk->status_rx_quick_consumer_index0;
-       if ((hw_cons & MAX_RX_DESC_CNT) == MAX_RX_DESC_CNT) {
-               hw_cons++;
-       }
+       hw_cons = bnx2_get_hw_rx_cons(bp);
        sw_cons = bp->rx_cons;
        sw_prod = bp->rx_prod;
 
@@ -2515,10 +2521,7 @@ next_rx:
 
                /* Refresh hw_cons to see if there is new work */
                if (sw_cons == hw_cons) {
-                       hw_cons = bp->hw_rx_cons =
-                               sblk->status_rx_quick_consumer_index0;
-                       if ((hw_cons & MAX_RX_DESC_CNT) == MAX_RX_DESC_CNT)
-                               hw_cons++;
+                       hw_cons = bnx2_get_hw_rx_cons(bp);
                        rmb();
                }
        }
@@ -2622,7 +2625,7 @@ bnx2_has_work(struct bnx2 *bp)
 {
        struct status_block *sblk = bp->status_blk;
 
-       if ((sblk->status_rx_quick_consumer_index0 != bp->hw_rx_cons) ||
+       if ((bnx2_get_hw_rx_cons(bp) != bp->rx_cons) ||
            (sblk->status_tx_quick_consumer_index0 != bp->hw_tx_cons))
                return 1;
 
@@ -2655,7 +2658,7 @@ static int bnx2_poll_work(struct bnx2 *bp, int work_done, int budget)
        if (sblk->status_tx_quick_consumer_index0 != bp->hw_tx_cons)
                bnx2_tx_int(bp);
 
-       if (sblk->status_rx_quick_consumer_index0 != bp->hw_rx_cons)
+       if (bnx2_get_hw_rx_cons(bp) != bp->rx_cons)
                work_done += bnx2_rx_int(bp, budget - work_done);
 
        return work_done;
@@ -4177,7 +4180,6 @@ bnx2_init_rx_ring(struct bnx2 *bp)
 
        ring_prod = prod = bp->rx_prod = 0;
        bp->rx_cons = 0;
-       bp->hw_rx_cons = 0;
        bp->rx_prod_bseq = 0;
 
        for (i = 0; i < bp->rx_max_ring; i++) {
@@ -6685,8 +6687,9 @@ bnx2_init_board(struct pci_dev *pdev, struct net_device *dev)
        } else if (CHIP_NUM(bp) == CHIP_NUM_5706 ||
                   CHIP_NUM(bp) == CHIP_NUM_5708)
                bp->phy_flags |= PHY_CRC_FIX_FLAG;
-       else if (CHIP_ID(bp) == CHIP_ID_5709_A0 ||
-                CHIP_ID(bp) == CHIP_ID_5709_A1)
+       else if (CHIP_NUM(bp) == CHIP_NUM_5709 &&
+                (CHIP_REV(bp) == CHIP_REV_Ax ||
+                 CHIP_REV(bp) == CHIP_REV_Bx))
                bp->phy_flags |= PHY_DIS_EARLY_DAC_FLAG;
 
        if ((CHIP_ID(bp) == CHIP_ID_5708_A0) ||
index 1dce0d1a258167139e591381fcdff21681e20421..30ba366608b0dd4f1e83ca59ee881f0979e562c0 100644 (file)
@@ -6513,7 +6513,6 @@ struct bnx2 {
        u32                     rx_prod_bseq;
        u16                     rx_prod;
        u16                     rx_cons;
-       u16                     hw_rx_cons;
 
        u32                     rx_csum;
 
index 423298c84a1da7a9f36668a15e1178d30ee163a5..b0b26036266b51fc381e5e2eede8cf3de2cc270d 100644 (file)
@@ -74,6 +74,7 @@
 #include <linux/ethtool.h>
 #include <linux/if_vlan.h>
 #include <linux/if_bonding.h>
+#include <linux/jiffies.h>
 #include <net/route.h>
 #include <net/net_namespace.h>
 #include "bonding.h"
@@ -174,6 +175,7 @@ struct bond_parm_tbl bond_mode_tbl[] = {
 struct bond_parm_tbl xmit_hashtype_tbl[] = {
 {      "layer2",               BOND_XMIT_POLICY_LAYER2},
 {      "layer3+4",             BOND_XMIT_POLICY_LAYER34},
+{      "layer2+3",             BOND_XMIT_POLICY_LAYER23},
 {      NULL,                   -1},
 };
 
@@ -2722,8 +2724,8 @@ void bond_loadbalance_arp_mon(struct work_struct *work)
         */
        bond_for_each_slave(bond, slave, i) {
                if (slave->link != BOND_LINK_UP) {
-                       if (((jiffies - slave->dev->trans_start) <= delta_in_ticks) &&
-                           ((jiffies - slave->dev->last_rx) <= delta_in_ticks)) {
+                       if (time_before_eq(jiffies, slave->dev->trans_start + delta_in_ticks) &&
+                           time_before_eq(jiffies, slave->dev->last_rx + delta_in_ticks)) {
 
                                slave->link  = BOND_LINK_UP;
                                slave->state = BOND_STATE_ACTIVE;
@@ -2754,8 +2756,8 @@ void bond_loadbalance_arp_mon(struct work_struct *work)
                         * when the source ip is 0, so don't take the link down
                         * if we don't know our ip yet
                         */
-                       if (((jiffies - slave->dev->trans_start) >= (2*delta_in_ticks)) ||
-                           (((jiffies - slave->dev->last_rx) >= (2*delta_in_ticks)) &&
+                       if (time_after_eq(jiffies, slave->dev->trans_start + 2*delta_in_ticks) ||
+                           (time_after_eq(jiffies, slave->dev->last_rx + 2*delta_in_ticks) &&
                             bond_has_ip(bond))) {
 
                                slave->link  = BOND_LINK_DOWN;
@@ -2848,8 +2850,8 @@ void bond_activebackup_arp_mon(struct work_struct *work)
         */
        bond_for_each_slave(bond, slave, i) {
                if (slave->link != BOND_LINK_UP) {
-                       if ((jiffies - slave_last_rx(bond, slave)) <=
-                            delta_in_ticks) {
+                       if (time_before_eq(jiffies,
+                           slave_last_rx(bond, slave) + delta_in_ticks)) {
 
                                slave->link = BOND_LINK_UP;
 
@@ -2858,7 +2860,7 @@ void bond_activebackup_arp_mon(struct work_struct *work)
                                write_lock_bh(&bond->curr_slave_lock);
 
                                if ((!bond->curr_active_slave) &&
-                                   ((jiffies - slave->dev->trans_start) <= delta_in_ticks)) {
+                                   time_before_eq(jiffies, slave->dev->trans_start + delta_in_ticks)) {
                                        bond_change_active_slave(bond, slave);
                                        bond->current_arp_slave = NULL;
                                } else if (bond->curr_active_slave != slave) {
@@ -2897,7 +2899,7 @@ void bond_activebackup_arp_mon(struct work_struct *work)
 
                        if ((slave != bond->curr_active_slave) &&
                            (!bond->current_arp_slave) &&
-                           (((jiffies - slave_last_rx(bond, slave)) >= 3*delta_in_ticks) &&
+                           (time_after_eq(jiffies, slave_last_rx(bond, slave) + 3*delta_in_ticks) &&
                             bond_has_ip(bond))) {
                                /* a backup slave has gone down; three times
                                 * the delta allows the current slave to be
@@ -2943,10 +2945,10 @@ void bond_activebackup_arp_mon(struct work_struct *work)
                 * before being taken out. if a primary is being used, check
                 * if it is up and needs to take over as the curr_active_slave
                 */
-               if ((((jiffies - slave->dev->trans_start) >= (2*delta_in_ticks)) ||
-           (((jiffies - slave_last_rx(bond, slave)) >= (2*delta_in_ticks)) &&
-            bond_has_ip(bond))) &&
-                   ((jiffies - slave->jiffies) >= 2*delta_in_ticks)) {
+               if ((time_after_eq(jiffies, slave->dev->trans_start + 2*delta_in_ticks) ||
+                       (time_after_eq(jiffies, slave_last_rx(bond, slave) + 2*delta_in_ticks) &&
+                        bond_has_ip(bond))) &&
+                       time_after_eq(jiffies, slave->jiffies + 2*delta_in_ticks)) {
 
                        slave->link  = BOND_LINK_DOWN;
 
@@ -3603,6 +3605,24 @@ void bond_unregister_arp(struct bonding *bond)
 
 /*---------------------------- Hashing Policies -----------------------------*/
 
+/*
+ * Hash for the output device based upon layer 2 and layer 3 data. If
+ * the packet is not IP mimic bond_xmit_hash_policy_l2()
+ */
+static int bond_xmit_hash_policy_l23(struct sk_buff *skb,
+                                    struct net_device *bond_dev, int count)
+{
+       struct ethhdr *data = (struct ethhdr *)skb->data;
+       struct iphdr *iph = ip_hdr(skb);
+
+       if (skb->protocol == __constant_htons(ETH_P_IP)) {
+               return ((ntohl(iph->saddr ^ iph->daddr) & 0xffff) ^
+                       (data->h_dest[5] ^ bond_dev->dev_addr[5])) % count;
+       }
+
+       return (data->h_dest[5] ^ bond_dev->dev_addr[5]) % count;
+}
+
 /*
  * Hash for the output device based upon layer 3 and layer 4 data. If
  * the packet is a frag or not TCP or UDP, just use layer 3 data.  If it is
@@ -4305,6 +4325,22 @@ out:
 
 /*------------------------- Device initialization ---------------------------*/
 
+static void bond_set_xmit_hash_policy(struct bonding *bond)
+{
+       switch (bond->params.xmit_policy) {
+       case BOND_XMIT_POLICY_LAYER23:
+               bond->xmit_hash_policy = bond_xmit_hash_policy_l23;
+               break;
+       case BOND_XMIT_POLICY_LAYER34:
+               bond->xmit_hash_policy = bond_xmit_hash_policy_l34;
+               break;
+       case BOND_XMIT_POLICY_LAYER2:
+       default:
+               bond->xmit_hash_policy = bond_xmit_hash_policy_l2;
+               break;
+       }
+}
+
 /*
  * set bond mode specific net device operations
  */
@@ -4321,10 +4357,7 @@ void bond_set_mode_ops(struct bonding *bond, int mode)
                break;
        case BOND_MODE_XOR:
                bond_dev->hard_start_xmit = bond_xmit_xor;
-               if (bond->params.xmit_policy == BOND_XMIT_POLICY_LAYER34)
-                       bond->xmit_hash_policy = bond_xmit_hash_policy_l34;
-               else
-                       bond->xmit_hash_policy = bond_xmit_hash_policy_l2;
+               bond_set_xmit_hash_policy(bond);
                break;
        case BOND_MODE_BROADCAST:
                bond_dev->hard_start_xmit = bond_xmit_broadcast;
@@ -4332,10 +4365,7 @@ void bond_set_mode_ops(struct bonding *bond, int mode)
        case BOND_MODE_8023AD:
                bond_set_master_3ad_flags(bond);
                bond_dev->hard_start_xmit = bond_3ad_xmit_xor;
-               if (bond->params.xmit_policy == BOND_XMIT_POLICY_LAYER34)
-                       bond->xmit_hash_policy = bond_xmit_hash_policy_l34;
-               else
-                       bond->xmit_hash_policy = bond_xmit_hash_policy_l2;
+               bond_set_xmit_hash_policy(bond);
                break;
        case BOND_MODE_ALB:
                bond_set_master_alb_flags(bond);
@@ -4462,6 +4492,27 @@ static void bond_deinit(struct net_device *bond_dev)
 #endif
 }
 
+static void bond_work_cancel_all(struct bonding *bond)
+{
+       write_lock_bh(&bond->lock);
+       bond->kill_timers = 1;
+       write_unlock_bh(&bond->lock);
+
+       if (bond->params.miimon && delayed_work_pending(&bond->mii_work))
+               cancel_delayed_work(&bond->mii_work);
+
+       if (bond->params.arp_interval && delayed_work_pending(&bond->arp_work))
+               cancel_delayed_work(&bond->arp_work);
+
+       if (bond->params.mode == BOND_MODE_ALB &&
+           delayed_work_pending(&bond->alb_work))
+               cancel_delayed_work(&bond->alb_work);
+
+       if (bond->params.mode == BOND_MODE_8023AD &&
+           delayed_work_pending(&bond->ad_work))
+               cancel_delayed_work(&bond->ad_work);
+}
+
 /* Unregister and free all bond devices.
  * Caller must hold rtnl_lock.
  */
@@ -4472,6 +4523,7 @@ static void bond_free_all(void)
        list_for_each_entry_safe(bond, nxt, &bond_dev_list, bond_list) {
                struct net_device *bond_dev = bond->dev;
 
+               bond_work_cancel_all(bond);
                bond_mc_list_destroy(bond);
                /* Release the bonded slaves */
                bond_release_all(bond_dev);
@@ -4497,8 +4549,7 @@ int bond_parse_parm(char *mode_arg, struct bond_parm_tbl *tbl)
        for (i = 0; tbl[i].modename; i++) {
                if ((isdigit(*mode_arg) &&
                     tbl[i].mode == simple_strtol(mode_arg, NULL, 0)) ||
-                   (strncmp(mode_arg, tbl[i].modename,
-                            strlen(tbl[i].modename)) == 0)) {
+                   (strcmp(mode_arg, tbl[i].modename) == 0)) {
                        return tbl[i].mode;
                }
        }
@@ -4873,27 +4924,6 @@ out_rtnl:
        return res;
 }
 
-static void bond_work_cancel_all(struct bonding *bond)
-{
-       write_lock_bh(&bond->lock);
-       bond->kill_timers = 1;
-       write_unlock_bh(&bond->lock);
-
-       if (bond->params.miimon && delayed_work_pending(&bond->mii_work))
-               cancel_delayed_work(&bond->mii_work);
-
-       if (bond->params.arp_interval && delayed_work_pending(&bond->arp_work))
-               cancel_delayed_work(&bond->arp_work);
-
-       if (bond->params.mode == BOND_MODE_ALB &&
-           delayed_work_pending(&bond->alb_work))
-               cancel_delayed_work(&bond->alb_work);
-
-       if (bond->params.mode == BOND_MODE_8023AD &&
-           delayed_work_pending(&bond->ad_work))
-               cancel_delayed_work(&bond->ad_work);
-}
-
 static int __init bonding_init(void)
 {
        int i;
index b29330d8e309955a4f85008cbbddf8b7aea4465d..11b76b352415f6dedad302133b97e952728032dd 100644 (file)
@@ -74,7 +74,7 @@ struct rw_semaphore bonding_rwsem;
  * "show" function for the bond_masters attribute.
  * The class parameter is ignored.
  */
-static ssize_t bonding_show_bonds(struct class *cls, char *buffer)
+static ssize_t bonding_show_bonds(struct class *cls, char *buf)
 {
        int res = 0;
        struct bonding *bond;
@@ -86,14 +86,13 @@ static ssize_t bonding_show_bonds(struct class *cls, char *buffer)
                        /* not enough space for another interface name */
                        if ((PAGE_SIZE - res) > 10)
                                res = PAGE_SIZE - 10;
-                       res += sprintf(buffer + res, "++more++");
+                       res += sprintf(buf + res, "++more++ ");
                        break;
                }
-               res += sprintf(buffer + res, "%s ",
-                              bond->dev->name);
+               res += sprintf(buf + res, "%s ", bond->dev->name);
        }
-       res += sprintf(buffer + res, "\n");
-       res++;
+       if (res)
+               buf[res-1] = '\n'; /* eat the leftover space */
        up_read(&(bonding_rwsem));
        return res;
 }
@@ -235,14 +234,14 @@ static ssize_t bonding_show_slaves(struct device *d,
                        /* not enough space for another interface name */
                        if ((PAGE_SIZE - res) > 10)
                                res = PAGE_SIZE - 10;
-                       res += sprintf(buf + res, "++more++");
+                       res += sprintf(buf + res, "++more++ ");
                        break;
                }
                res += sprintf(buf + res, "%s ", slave->dev->name);
        }
        read_unlock(&bond->lock);
-       res += sprintf(buf + res, "\n");
-       res++;
+       if (res)
+               buf[res-1] = '\n'; /* eat the leftover space */
        return res;
 }
 
@@ -406,7 +405,7 @@ static ssize_t bonding_show_mode(struct device *d,
 
        return sprintf(buf, "%s %d\n",
                        bond_mode_tbl[bond->params.mode].modename,
-                       bond->params.mode) + 1;
+                       bond->params.mode);
 }
 
 static ssize_t bonding_store_mode(struct device *d,
@@ -457,20 +456,11 @@ static ssize_t bonding_show_xmit_hash(struct device *d,
                                      struct device_attribute *attr,
                                      char *buf)
 {
-       int count;
        struct bonding *bond = to_bond(d);
 
-       if ((bond->params.mode != BOND_MODE_XOR) &&
-           (bond->params.mode != BOND_MODE_8023AD)) {
-               // Not Applicable
-               count = sprintf(buf, "NA\n") + 1;
-       } else {
-               count = sprintf(buf, "%s %d\n",
-                       xmit_hashtype_tbl[bond->params.xmit_policy].modename,
-                       bond->params.xmit_policy) + 1;
-       }
-
-       return count;
+       return sprintf(buf, "%s %d\n",
+                      xmit_hashtype_tbl[bond->params.xmit_policy].modename,
+                      bond->params.xmit_policy);
 }
 
 static ssize_t bonding_store_xmit_hash(struct device *d,
@@ -488,15 +478,6 @@ static ssize_t bonding_store_xmit_hash(struct device *d,
                goto out;
        }
 
-       if ((bond->params.mode != BOND_MODE_XOR) &&
-           (bond->params.mode != BOND_MODE_8023AD)) {
-               printk(KERN_ERR DRV_NAME
-                      "%s: Transmit hash policy is irrelevant in this mode.\n",
-                      bond->dev->name);
-               ret = -EPERM;
-               goto out;
-       }
-
        new_value = bond_parse_parm((char *)buf, xmit_hashtype_tbl);
        if (new_value < 0)  {
                printk(KERN_ERR DRV_NAME
@@ -527,7 +508,7 @@ static ssize_t bonding_show_arp_validate(struct device *d,
 
        return sprintf(buf, "%s %d\n",
                       arp_validate_tbl[bond->params.arp_validate].modename,
-                      bond->params.arp_validate) + 1;
+                      bond->params.arp_validate);
 }
 
 static ssize_t bonding_store_arp_validate(struct device *d,
@@ -627,7 +608,7 @@ static ssize_t bonding_show_arp_interval(struct device *d,
 {
        struct bonding *bond = to_bond(d);
 
-       return sprintf(buf, "%d\n", bond->params.arp_interval) + 1;
+       return sprintf(buf, "%d\n", bond->params.arp_interval);
 }
 
 static ssize_t bonding_store_arp_interval(struct device *d,
@@ -712,9 +693,7 @@ static ssize_t bonding_show_arp_targets(struct device *d,
                               NIPQUAD(bond->params.arp_targets[i]));
        }
        if (res)
-               res--;  /* eat the leftover space */
-       res += sprintf(buf + res, "\n");
-       res++;
+               buf[res-1] = '\n'; /* eat the leftover space */
        return res;
 }
 
@@ -815,7 +794,7 @@ static ssize_t bonding_show_downdelay(struct device *d,
 {
        struct bonding *bond = to_bond(d);
 
-       return sprintf(buf, "%d\n", bond->params.downdelay * bond->params.miimon) + 1;
+       return sprintf(buf, "%d\n", bond->params.downdelay * bond->params.miimon);
 }
 
 static ssize_t bonding_store_downdelay(struct device *d,
@@ -872,7 +851,7 @@ static ssize_t bonding_show_updelay(struct device *d,
 {
        struct bonding *bond = to_bond(d);
 
-       return sprintf(buf, "%d\n", bond->params.updelay * bond->params.miimon) + 1;
+       return sprintf(buf, "%d\n", bond->params.updelay * bond->params.miimon);
 
 }
 
@@ -936,7 +915,7 @@ static ssize_t bonding_show_lacp(struct device *d,
 
        return sprintf(buf, "%s %d\n",
                bond_lacp_tbl[bond->params.lacp_fast].modename,
-               bond->params.lacp_fast) + 1;
+               bond->params.lacp_fast);
 }
 
 static ssize_t bonding_store_lacp(struct device *d,
@@ -992,7 +971,7 @@ static ssize_t bonding_show_miimon(struct device *d,
 {
        struct bonding *bond = to_bond(d);
 
-       return sprintf(buf, "%d\n", bond->params.miimon) + 1;
+       return sprintf(buf, "%d\n", bond->params.miimon);
 }
 
 static ssize_t bonding_store_miimon(struct device *d,
@@ -1083,9 +1062,7 @@ static ssize_t bonding_show_primary(struct device *d,
        struct bonding *bond = to_bond(d);
 
        if (bond->primary_slave)
-               count = sprintf(buf, "%s\n", bond->primary_slave->dev->name) + 1;
-       else
-               count = sprintf(buf, "\n") + 1;
+               count = sprintf(buf, "%s\n", bond->primary_slave->dev->name);
 
        return count;
 }
@@ -1149,7 +1126,7 @@ static ssize_t bonding_show_carrier(struct device *d,
 {
        struct bonding *bond = to_bond(d);
 
-       return sprintf(buf, "%d\n", bond->params.use_carrier) + 1;
+       return sprintf(buf, "%d\n", bond->params.use_carrier);
 }
 
 static ssize_t bonding_store_carrier(struct device *d,
@@ -1191,16 +1168,14 @@ static ssize_t bonding_show_active_slave(struct device *d,
 {
        struct slave *curr;
        struct bonding *bond = to_bond(d);
-       int count;
+       int count = 0;
 
        read_lock(&bond->curr_slave_lock);
        curr = bond->curr_active_slave;
        read_unlock(&bond->curr_slave_lock);
 
        if (USES_PRIMARY(bond->params.mode) && curr)
-               count = sprintf(buf, "%s\n", curr->dev->name) + 1;
-       else
-               count = sprintf(buf, "\n") + 1;
+               count = sprintf(buf, "%s\n", curr->dev->name);
        return count;
 }
 
@@ -1295,7 +1270,7 @@ static ssize_t bonding_show_mii_status(struct device *d,
        curr = bond->curr_active_slave;
        read_unlock(&bond->curr_slave_lock);
 
-       return sprintf(buf, "%s\n", (curr) ? "up" : "down") + 1;
+       return sprintf(buf, "%s\n", (curr) ? "up" : "down");
 }
 static DEVICE_ATTR(mii_status, S_IRUGO, bonding_show_mii_status, NULL);
 
@@ -1312,10 +1287,8 @@ static ssize_t bonding_show_ad_aggregator(struct device *d,
 
        if (bond->params.mode == BOND_MODE_8023AD) {
                struct ad_info ad_info;
-               count = sprintf(buf, "%d\n", (bond_3ad_get_active_agg_info(bond, &ad_info)) ?  0 : ad_info.aggregator_id) + 1;
+               count = sprintf(buf, "%d\n", (bond_3ad_get_active_agg_info(bond, &ad_info)) ?  0 : ad_info.aggregator_id);
        }
-       else
-               count = sprintf(buf, "\n") + 1;
 
        return count;
 }
@@ -1334,10 +1307,8 @@ static ssize_t bonding_show_ad_num_ports(struct device *d,
 
        if (bond->params.mode == BOND_MODE_8023AD) {
                struct ad_info ad_info;
-               count = sprintf(buf, "%d\n", (bond_3ad_get_active_agg_info(bond, &ad_info)) ?  0: ad_info.ports) + 1;
+               count = sprintf(buf, "%d\n", (bond_3ad_get_active_agg_info(bond, &ad_info)) ?  0: ad_info.ports);
        }
-       else
-               count = sprintf(buf, "\n") + 1;
 
        return count;
 }
@@ -1356,10 +1327,8 @@ static ssize_t bonding_show_ad_actor_key(struct device *d,
 
        if (bond->params.mode == BOND_MODE_8023AD) {
                struct ad_info ad_info;
-               count = sprintf(buf, "%d\n", (bond_3ad_get_active_agg_info(bond, &ad_info)) ?  0 : ad_info.actor_key) + 1;
+               count = sprintf(buf, "%d\n", (bond_3ad_get_active_agg_info(bond, &ad_info)) ?  0 : ad_info.actor_key);
        }
-       else
-               count = sprintf(buf, "\n") + 1;
 
        return count;
 }
@@ -1378,10 +1347,8 @@ static ssize_t bonding_show_ad_partner_key(struct device *d,
 
        if (bond->params.mode == BOND_MODE_8023AD) {
                struct ad_info ad_info;
-               count = sprintf(buf, "%d\n", (bond_3ad_get_active_agg_info(bond, &ad_info)) ?  0 : ad_info.partner_key) + 1;
+               count = sprintf(buf, "%d\n", (bond_3ad_get_active_agg_info(bond, &ad_info)) ?  0 : ad_info.partner_key);
        }
-       else
-               count = sprintf(buf, "\n") + 1;
 
        return count;
 }
@@ -1403,12 +1370,9 @@ static ssize_t bonding_show_ad_partner_mac(struct device *d,
                struct ad_info ad_info;
                if (!bond_3ad_get_active_agg_info(bond, &ad_info)) {
                        count = sprintf(buf,"%s\n",
-                                       print_mac(mac, ad_info.partner_system))
-                               + 1;
+                                       print_mac(mac, ad_info.partner_system));
                }
        }
-       else
-               count = sprintf(buf, "\n") + 1;
 
        return count;
 }
index 61c1b4536d34547d6cbaf475199dc4105124ed14..e1e4734e23ce7191d0ddb23809c5a710bafa3190 100644 (file)
@@ -22,8 +22,8 @@
 #include "bond_3ad.h"
 #include "bond_alb.h"
 
-#define DRV_VERSION    "3.2.1"
-#define DRV_RELDATE    "October 15, 2007"
+#define DRV_VERSION    "3.2.3"
+#define DRV_RELDATE    "December 6, 2007"
 #define DRV_NAME       "bonding"
 #define DRV_DESCRIPTION        "Ethernet Channel Bonding Driver"
 
index 2dbf8dc116c66acab2c5fa805442d81dcfd18edd..c5975047c89b7d034dd607fd0b4c8186847ddf1b 100644 (file)
@@ -374,7 +374,9 @@ static char stats_strings[][ETH_GSTRING_LEN] = {
        "TxInternalMACXmitError",
        "TxFramesWithExcessiveDeferral",
        "TxFCSErrors",
-
+       "TxJumboFramesOk",
+       "TxJumboOctetsOk",
+       
        "RxOctetsOK",
        "RxOctetsBad",
        "RxUnicastFramesOK",
@@ -392,16 +394,17 @@ static char stats_strings[][ETH_GSTRING_LEN] = {
        "RxInRangeLengthErrors",
        "RxOutOfRangeLengthField",
        "RxFrameTooLongErrors",
+       "RxJumboFramesOk",
+       "RxJumboOctetsOk",
 
        /* Port stats */
-       "RxPackets",
        "RxCsumGood",
-       "TxPackets",
        "TxCsumOffload",
        "TxTso",
        "RxVlan",
        "TxVlan",
-
+       "TxNeedHeadroom", 
+       
        /* Interrupt stats */
        "rx drops",
        "pure_rsps",
@@ -463,23 +466,56 @@ static void get_stats(struct net_device *dev, struct ethtool_stats *stats,
        const struct cmac_statistics *s;
        const struct sge_intr_counts *t;
        struct sge_port_stats ss;
-       unsigned int len;
 
        s = mac->ops->statistics_update(mac, MAC_STATS_UPDATE_FULL);
-
-       len = sizeof(u64)*(&s->TxFCSErrors + 1 - &s->TxOctetsOK);
-       memcpy(data, &s->TxOctetsOK, len);
-       data += len;
-
-       len = sizeof(u64)*(&s->RxFrameTooLongErrors + 1 - &s->RxOctetsOK);
-       memcpy(data, &s->RxOctetsOK, len);
-       data += len;
-
+       t = t1_sge_get_intr_counts(adapter->sge);
        t1_sge_get_port_stats(adapter->sge, dev->if_port, &ss);
-       memcpy(data, &ss, sizeof(ss));
-       data += sizeof(ss);
 
-       t = t1_sge_get_intr_counts(adapter->sge);
+       *data++ = s->TxOctetsOK;
+       *data++ = s->TxOctetsBad;
+       *data++ = s->TxUnicastFramesOK;
+       *data++ = s->TxMulticastFramesOK;
+       *data++ = s->TxBroadcastFramesOK;
+       *data++ = s->TxPauseFrames;
+       *data++ = s->TxFramesWithDeferredXmissions;
+       *data++ = s->TxLateCollisions;
+       *data++ = s->TxTotalCollisions;
+       *data++ = s->TxFramesAbortedDueToXSCollisions;
+       *data++ = s->TxUnderrun;
+       *data++ = s->TxLengthErrors;
+       *data++ = s->TxInternalMACXmitError;
+       *data++ = s->TxFramesWithExcessiveDeferral;
+       *data++ = s->TxFCSErrors;
+       *data++ = s->TxJumboFramesOK;
+       *data++ = s->TxJumboOctetsOK;
+
+       *data++ = s->RxOctetsOK;
+       *data++ = s->RxOctetsBad;
+       *data++ = s->RxUnicastFramesOK;
+       *data++ = s->RxMulticastFramesOK;
+       *data++ = s->RxBroadcastFramesOK;
+       *data++ = s->RxPauseFrames;
+       *data++ = s->RxFCSErrors;
+       *data++ = s->RxAlignErrors;
+       *data++ = s->RxSymbolErrors;
+       *data++ = s->RxDataErrors;
+       *data++ = s->RxSequenceErrors;
+       *data++ = s->RxRuntErrors;
+       *data++ = s->RxJabberErrors;
+       *data++ = s->RxInternalMACRcvError;
+       *data++ = s->RxInRangeLengthErrors;
+       *data++ = s->RxOutOfRangeLengthField;
+       *data++ = s->RxFrameTooLongErrors;
+       *data++ = s->RxJumboFramesOK;
+       *data++ = s->RxJumboOctetsOK;
+
+       *data++ = ss.rx_cso_good;
+       *data++ = ss.tx_cso;
+       *data++ = ss.tx_tso;
+       *data++ = ss.vlan_xtract;
+       *data++ = ss.vlan_insert;
+       *data++ = ss.tx_need_hdrroom;
+       
        *data++ = t->rx_drops;
        *data++ = t->pure_rsps;
        *data++ = t->unhandled_irqs;
index 678778a8d1338ca55adb7c824d8153e40f1495cb..2117c4fbb10724aeee68cbb6b7372e4e3a703515 100644 (file)
@@ -45,7 +45,7 @@
 
 #include <linux/crc32.h>
 
-#define OFFSET(REG_ADDR)    (REG_ADDR << 2)
+#define OFFSET(REG_ADDR)    ((REG_ADDR) << 2)
 
 /* Max frame size PM3393 can handle. Includes Ethernet header and CRC. */
 #define MAX_FRAME_SIZE  9600
@@ -428,69 +428,26 @@ static int pm3393_set_speed_duplex_fc(struct cmac *cmac, int speed, int duplex,
        return 0;
 }
 
-static void pm3393_rmon_update(struct adapter *adapter, u32 offs, u64 *val,
-                              int over)
-{
-       u32 val0, val1, val2;
-
-       t1_tpi_read(adapter, offs, &val0);
-       t1_tpi_read(adapter, offs + 4, &val1);
-       t1_tpi_read(adapter, offs + 8, &val2);
-
-       *val &= ~0ull << 40;
-       *val |= val0 & 0xffff;
-       *val |= (val1 & 0xffff) << 16;
-       *val |= (u64)(val2 & 0xff) << 32;
-
-       if (over)
-               *val += 1ull << 40;
+#define RMON_UPDATE(mac, name, stat_name) \
+{ \
+       t1_tpi_read((mac)->adapter, OFFSET(name), &val0);     \
+       t1_tpi_read((mac)->adapter, OFFSET((name)+1), &val1); \
+       t1_tpi_read((mac)->adapter, OFFSET((name)+2), &val2); \
+       (mac)->stats.stat_name = (u64)(val0 & 0xffff) | \
+                                ((u64)(val1 & 0xffff) << 16) | \
+                                ((u64)(val2 & 0xff) << 32) | \
+                                ((mac)->stats.stat_name & \
+                                       0xffffff0000000000ULL); \
+       if (ro & \
+           (1ULL << ((name - SUNI1x10GEXP_REG_MSTAT_COUNTER_0_LOW) >> 2))) \
+               (mac)->stats.stat_name += 1ULL << 40; \
 }
 
 static const struct cmac_statistics *pm3393_update_statistics(struct cmac *mac,
                                                              int flag)
 {
-       static struct {
-               unsigned int reg;
-               unsigned int offset;
-       } hw_stats [] = {
-
-#define HW_STAT(name, stat_name) \
-       { name, (&((struct cmac_statistics *)NULL)->stat_name) - (u64 *)NULL }
-
-               /* Rx stats */
-               HW_STAT(RxOctetsReceivedOK, RxOctetsOK),
-               HW_STAT(RxUnicastFramesReceivedOK, RxUnicastFramesOK),
-               HW_STAT(RxMulticastFramesReceivedOK, RxMulticastFramesOK),
-               HW_STAT(RxBroadcastFramesReceivedOK, RxBroadcastFramesOK),
-               HW_STAT(RxPAUSEMACCtrlFramesReceived, RxPauseFrames),
-               HW_STAT(RxFrameCheckSequenceErrors, RxFCSErrors),
-               HW_STAT(RxFramesLostDueToInternalMACErrors,
-                               RxInternalMACRcvError),
-               HW_STAT(RxSymbolErrors, RxSymbolErrors),
-               HW_STAT(RxInRangeLengthErrors, RxInRangeLengthErrors),
-               HW_STAT(RxFramesTooLongErrors , RxFrameTooLongErrors),
-               HW_STAT(RxJabbers, RxJabberErrors),
-               HW_STAT(RxFragments, RxRuntErrors),
-               HW_STAT(RxUndersizedFrames, RxRuntErrors),
-               HW_STAT(RxJumboFramesReceivedOK, RxJumboFramesOK),
-               HW_STAT(RxJumboOctetsReceivedOK, RxJumboOctetsOK),
-
-               /* Tx stats */
-               HW_STAT(TxOctetsTransmittedOK, TxOctetsOK),
-               HW_STAT(TxFramesLostDueToInternalMACTransmissionError,
-                               TxInternalMACXmitError),
-               HW_STAT(TxTransmitSystemError, TxFCSErrors),
-               HW_STAT(TxUnicastFramesTransmittedOK, TxUnicastFramesOK),
-               HW_STAT(TxMulticastFramesTransmittedOK, TxMulticastFramesOK),
-               HW_STAT(TxBroadcastFramesTransmittedOK, TxBroadcastFramesOK),
-               HW_STAT(TxPAUSEMACCtrlFramesTransmitted, TxPauseFrames),
-               HW_STAT(TxJumboFramesReceivedOK, TxJumboFramesOK),
-               HW_STAT(TxJumboOctetsReceivedOK, TxJumboOctetsOK)
-       }, *p = hw_stats;
-       u64 ro;
-       u32 val0, val1, val2, val3;
-       u64 *stats = (u64 *) &mac->stats;
-       unsigned int i;
+       u64     ro;
+       u32     val0, val1, val2, val3;
 
        /* Snap the counters */
        pmwrite(mac, SUNI1x10GEXP_REG_MSTAT_CONTROL,
@@ -504,14 +461,35 @@ static const struct cmac_statistics *pm3393_update_statistics(struct cmac *mac,
        ro = ((u64)val0 & 0xffff) | (((u64)val1 & 0xffff) << 16) |
                (((u64)val2 & 0xffff) << 32) | (((u64)val3 & 0xffff) << 48);
 
-       for (i = 0; i < ARRAY_SIZE(hw_stats); i++) {
-               unsigned reg = p->reg - SUNI1x10GEXP_REG_MSTAT_COUNTER_0_LOW;
-
-               pm3393_rmon_update((mac)->adapter, OFFSET(p->reg),
-                                  stats + p->offset, ro & (reg >> 2));
-       }
-
-
+       /* Rx stats */
+       RMON_UPDATE(mac, RxOctetsReceivedOK, RxOctetsOK);
+       RMON_UPDATE(mac, RxUnicastFramesReceivedOK, RxUnicastFramesOK);
+       RMON_UPDATE(mac, RxMulticastFramesReceivedOK, RxMulticastFramesOK);
+       RMON_UPDATE(mac, RxBroadcastFramesReceivedOK, RxBroadcastFramesOK);
+       RMON_UPDATE(mac, RxPAUSEMACCtrlFramesReceived, RxPauseFrames);
+       RMON_UPDATE(mac, RxFrameCheckSequenceErrors, RxFCSErrors);
+       RMON_UPDATE(mac, RxFramesLostDueToInternalMACErrors,
+                               RxInternalMACRcvError);
+       RMON_UPDATE(mac, RxSymbolErrors, RxSymbolErrors);
+       RMON_UPDATE(mac, RxInRangeLengthErrors, RxInRangeLengthErrors);
+       RMON_UPDATE(mac, RxFramesTooLongErrors , RxFrameTooLongErrors);
+       RMON_UPDATE(mac, RxJabbers, RxJabberErrors);
+       RMON_UPDATE(mac, RxFragments, RxRuntErrors);
+       RMON_UPDATE(mac, RxUndersizedFrames, RxRuntErrors);
+       RMON_UPDATE(mac, RxJumboFramesReceivedOK, RxJumboFramesOK);
+       RMON_UPDATE(mac, RxJumboOctetsReceivedOK, RxJumboOctetsOK);
+
+       /* Tx stats */
+       RMON_UPDATE(mac, TxOctetsTransmittedOK, TxOctetsOK);
+       RMON_UPDATE(mac, TxFramesLostDueToInternalMACTransmissionError,
+                               TxInternalMACXmitError);
+       RMON_UPDATE(mac, TxTransmitSystemError, TxFCSErrors);
+       RMON_UPDATE(mac, TxUnicastFramesTransmittedOK, TxUnicastFramesOK);
+       RMON_UPDATE(mac, TxMulticastFramesTransmittedOK, TxMulticastFramesOK);
+       RMON_UPDATE(mac, TxBroadcastFramesTransmittedOK, TxBroadcastFramesOK);
+       RMON_UPDATE(mac, TxPAUSEMACCtrlFramesTransmitted, TxPauseFrames);
+       RMON_UPDATE(mac, TxJumboFramesReceivedOK, TxJumboFramesOK);
+       RMON_UPDATE(mac, TxJumboOctetsReceivedOK, TxJumboOctetsOK);
 
        return &mac->stats;
 }
index 443666292a5ce44ea9ce21c0a15a8de6adfdc511..b301c0428ae081d0c59a2059c9be8893fcafdb82 100644 (file)
@@ -986,11 +986,10 @@ void t1_sge_get_port_stats(const struct sge *sge, int port,
        for_each_possible_cpu(cpu) {
                struct sge_port_stats *st = per_cpu_ptr(sge->port_stats[port], cpu);
 
-               ss->rx_packets += st->rx_packets;
                ss->rx_cso_good += st->rx_cso_good;
-               ss->tx_packets += st->tx_packets;
                ss->tx_cso += st->tx_cso;
                ss->tx_tso += st->tx_tso;
+               ss->tx_need_hdrroom += st->tx_need_hdrroom;
                ss->vlan_xtract += st->vlan_xtract;
                ss->vlan_insert += st->vlan_insert;
        }
@@ -1380,7 +1379,6 @@ static void sge_rx(struct sge *sge, struct freelQ *fl, unsigned int len)
        __skb_pull(skb, sizeof(*p));
 
        st = per_cpu_ptr(sge->port_stats[p->iff], smp_processor_id());
-       st->rx_packets++;
 
        skb->protocol = eth_type_trans(skb, adapter->port[p->iff].dev);
        skb->dev->last_rx = jiffies;
@@ -1624,11 +1622,9 @@ int t1_poll(struct napi_struct *napi, int budget)
 {
        struct adapter *adapter = container_of(napi, struct adapter, napi);
        struct net_device *dev = adapter->port[0].dev;
-       int work_done;
-
-       work_done = process_responses(adapter, budget);
+       int work_done = process_responses(adapter, budget);
 
-       if (likely(!responses_pending(adapter))) {
+       if (likely(work_done < budget)) {
                netif_rx_complete(dev, napi);
                writel(adapter->sge->respQ.cidx,
                       adapter->regs + A_SG_SLEEPING);
@@ -1848,7 +1844,8 @@ int t1_start_xmit(struct sk_buff *skb, struct net_device *dev)
 {
        struct adapter *adapter = dev->priv;
        struct sge *sge = adapter->sge;
-       struct sge_port_stats *st = per_cpu_ptr(sge->port_stats[dev->if_port], smp_processor_id());
+       struct sge_port_stats *st = per_cpu_ptr(sge->port_stats[dev->if_port],
+                                               smp_processor_id());
        struct cpl_tx_pkt *cpl;
        struct sk_buff *orig_skb = skb;
        int ret;
@@ -1856,6 +1853,18 @@ int t1_start_xmit(struct sk_buff *skb, struct net_device *dev)
        if (skb->protocol == htons(ETH_P_CPL5))
                goto send;
 
+       /*
+        * We are using a non-standard hard_header_len.
+        * Allocate more header room in the rare cases it is not big enough.
+        */
+       if (unlikely(skb_headroom(skb) < dev->hard_header_len - ETH_HLEN)) {
+               skb = skb_realloc_headroom(skb, sizeof(struct cpl_tx_pkt_lso));
+               ++st->tx_need_hdrroom;
+               dev_kfree_skb_any(orig_skb);
+               if (!skb)
+                       return NETDEV_TX_OK;
+       }
+
        if (skb_shinfo(skb)->gso_size) {
                int eth_type;
                struct cpl_tx_pkt_lso *hdr;
@@ -1889,24 +1898,6 @@ int t1_start_xmit(struct sk_buff *skb, struct net_device *dev)
                        return NETDEV_TX_OK;
                }
 
-               /*
-                * We are using a non-standard hard_header_len and some kernel
-                * components, such as pktgen, do not handle it right.
-                * Complain when this happens but try to fix things up.
-                */
-               if (unlikely(skb_headroom(skb) < dev->hard_header_len - ETH_HLEN)) {
-                       pr_debug("%s: headroom %d header_len %d\n", dev->name,
-                                skb_headroom(skb), dev->hard_header_len);
-
-                       if (net_ratelimit())
-                               printk(KERN_ERR "%s: inadequate headroom in "
-                                      "Tx packet\n", dev->name);
-                       skb = skb_realloc_headroom(skb, sizeof(*cpl));
-                       dev_kfree_skb_any(orig_skb);
-                       if (!skb)
-                               return NETDEV_TX_OK;
-               }
-
                if (!(adapter->flags & UDP_CSUM_CAPABLE) &&
                    skb->ip_summed == CHECKSUM_PARTIAL &&
                    ip_hdr(skb)->protocol == IPPROTO_UDP) {
@@ -1952,7 +1943,6 @@ int t1_start_xmit(struct sk_buff *skb, struct net_device *dev)
                cpl->vlan_valid = 0;
 
 send:
-       st->tx_packets++;
        dev->trans_start = jiffies;
        ret = t1_sge_tx(skb, adapter, 0, dev);
 
index 713d9c55f24dd6be1b57c62460a23f108677ac73..cced9dff91c5ed9f6db257931c9cbc251f6818d8 100644 (file)
@@ -57,13 +57,12 @@ struct sge_intr_counts {
 };
 
 struct sge_port_stats {
-       u64 rx_packets;      /* # of Ethernet packets received */
        u64 rx_cso_good;     /* # of successful RX csum offloads */
-       u64 tx_packets;      /* # of TX packets */
        u64 tx_cso;          /* # of TX checksum offloads */
        u64 tx_tso;          /* # of TSO requests */
        u64 vlan_xtract;     /* # of VLAN tag extractions */
        u64 vlan_insert;     /* # of VLAN tag insertions */
+       u64 tx_need_hdrroom; /* # of TX skbs in need of more header room */
 };
 
 struct sk_buff;
index 5e1bc0dec5f185a0c146a283e112a6389a29693e..6e12bf4bc6cf73fd43b8450e891dcb656359bd2e 100644 (file)
 
 #define A_XGM_RXFIFO_CFG 0x884
 
+#define S_RXFIFO_EMPTY    31
+#define V_RXFIFO_EMPTY(x) ((x) << S_RXFIFO_EMPTY)
+#define F_RXFIFO_EMPTY    V_RXFIFO_EMPTY(1U)
+
 #define S_RXFIFOPAUSEHWM    17
 #define M_RXFIFOPAUSEHWM    0xfff
 
 
 #define A_XGM_TXFIFO_CFG 0x888
 
+#define S_UNDERUNFIX    22
+#define V_UNDERUNFIX(x) ((x) << S_UNDERUNFIX)
+#define F_UNDERUNFIX    V_UNDERUNFIX(1U)
+
 #define S_TXIPG    13
 #define M_TXIPG    0xff
 #define V_TXIPG(x) ((x) << S_TXIPG)
 #define V_XAUIIMP(x) ((x) << S_XAUIIMP)
 
 #define A_XGM_RX_MAX_PKT_SIZE 0x8a8
-#define A_XGM_RX_MAX_PKT_SIZE_ERR_CNT 0x9a4
+
+#define S_RXMAXFRAMERSIZE    17
+#define M_RXMAXFRAMERSIZE    0x3fff
+#define V_RXMAXFRAMERSIZE(x) ((x) << S_RXMAXFRAMERSIZE)
+#define G_RXMAXFRAMERSIZE(x) (((x) >> S_RXMAXFRAMERSIZE) & M_RXMAXFRAMERSIZE)
+
+#define S_RXENFRAMER    14
+#define V_RXENFRAMER(x) ((x) << S_RXENFRAMER)
+#define F_RXENFRAMER    V_RXENFRAMER(1U)
+
+#define S_RXMAXPKTSIZE    0
+#define M_RXMAXPKTSIZE    0x3fff
+#define V_RXMAXPKTSIZE(x) ((x) << S_RXMAXPKTSIZE)
+#define G_RXMAXPKTSIZE(x) (((x) >> S_RXMAXPKTSIZE) & M_RXMAXPKTSIZE)
 
 #define A_XGM_RESET_CTRL 0x8ac
 
+#define S_XGMAC_STOP_EN    4
+#define V_XGMAC_STOP_EN(x) ((x) << S_XGMAC_STOP_EN)
+#define F_XGMAC_STOP_EN    V_XGMAC_STOP_EN(1U)
+
 #define S_XG2G_RESET_    3
 #define V_XG2G_RESET_(x) ((x) << S_XG2G_RESET_)
 #define F_XG2G_RESET_    V_XG2G_RESET_(1U)
index d4ee00d32219c5a045bf0affad6d08f4853e23b2..522834c42ae7e20af003101ffba1fdaf7ab0ff31 100644 (file)
@@ -447,8 +447,8 @@ static const struct adapter_info t3_adap_info[] = {
         &mi1_mdio_ops, "Chelsio T302"},
        {1, 0, 0, 0,
         F_GPIO1_OEN | F_GPIO6_OEN | F_GPIO7_OEN | F_GPIO10_OEN |
-        F_GPIO1_OUT_VAL | F_GPIO6_OUT_VAL | F_GPIO10_OUT_VAL, 0,
-        SUPPORTED_10000baseT_Full | SUPPORTED_AUI,
+        F_GPIO11_OEN | F_GPIO1_OUT_VAL | F_GPIO6_OUT_VAL | F_GPIO10_OUT_VAL,
+        0, SUPPORTED_10000baseT_Full | SUPPORTED_AUI,
         &mi1_mdio_ext_ops, "Chelsio T310"},
        {2, 0, 0, 0,
         F_GPIO1_OEN | F_GPIO2_OEN | F_GPIO4_OEN | F_GPIO5_OEN | F_GPIO6_OEN |
@@ -2613,7 +2613,7 @@ static void __devinit init_mtus(unsigned short mtus[])
         * it can accomodate max size TCP/IP headers when SACK and timestamps
         * are enabled and still have at least 8 bytes of payload.
         */
-       mtus[1] = 88;
+       mtus[0] = 88;
        mtus[1] = 88;
        mtus[2] = 256;
        mtus[3] = 512;
index eeb766aeced951ea72fb4a20837cc909cad54555..efcf09a709cf899c0a3fabdd63cf5daff82e5b76 100644 (file)
@@ -106,6 +106,7 @@ int t3_mac_reset(struct cmac *mac)
        t3_set_reg_field(adap, A_XGM_RXFIFO_CFG + oft,
                         F_RXSTRFRWRD | F_DISERRFRAMES,
                         uses_xaui(adap) ? 0 : F_RXSTRFRWRD);
+       t3_set_reg_field(adap, A_XGM_TXFIFO_CFG + oft, 0, F_UNDERUNFIX);
 
        if (uses_xaui(adap)) {
                if (adap->params.rev == 0) {
@@ -124,7 +125,11 @@ int t3_mac_reset(struct cmac *mac)
                        xaui_serdes_reset(mac);
        }
 
-       val = F_MAC_RESET_;
+       t3_set_reg_field(adap, A_XGM_RX_MAX_PKT_SIZE + oft,
+                        V_RXMAXFRAMERSIZE(M_RXMAXFRAMERSIZE),
+                        V_RXMAXFRAMERSIZE(MAX_FRAME_SIZE) | F_RXENFRAMER);
+       val = F_MAC_RESET_ | F_XGMAC_STOP_EN;
+
        if (is_10G(adap))
                val |= F_PCS_RESET_;
        else if (uses_xaui(adap))
@@ -313,8 +318,9 @@ static int rx_fifo_hwm(int mtu)
 
 int t3_mac_set_mtu(struct cmac *mac, unsigned int mtu)
 {
-       int hwm, lwm;
-       unsigned int thres, v;
+       int hwm, lwm, divisor;
+       int ipg;
+       unsigned int thres, v, reg;
        struct adapter *adap = mac->adapter;
 
        /*
@@ -335,27 +341,32 @@ int t3_mac_set_mtu(struct cmac *mac, unsigned int mtu)
        hwm = min(hwm, MAC_RXFIFO_SIZE - 8192);
        lwm = min(3 * (int)mtu, MAC_RXFIFO_SIZE / 4);
 
-       if (adap->params.rev == T3_REV_B2 &&
+       if (adap->params.rev >= T3_REV_B2 &&
            (t3_read_reg(adap, A_XGM_RX_CTRL + mac->offset) & F_RXEN)) {
                disable_exact_filters(mac);
                v = t3_read_reg(adap, A_XGM_RX_CFG + mac->offset);
                t3_set_reg_field(adap, A_XGM_RX_CFG + mac->offset,
                                 F_ENHASHMCAST | F_COPYALLFRAMES, F_DISBCAST);
 
-               /* drain rx FIFO */
-               if (t3_wait_op_done(adap,
-                                   A_XGM_RX_MAX_PKT_SIZE_ERR_CNT +
-                                   mac->offset,
-                                   1 << 31, 1, 20, 5)) {
+               reg = adap->params.rev == T3_REV_B2 ?
+                       A_XGM_RX_MAX_PKT_SIZE_ERR_CNT : A_XGM_RXFIFO_CFG;
+
+               /* drain RX FIFO */
+               if (t3_wait_op_done(adap, reg + mac->offset,
+                                   F_RXFIFO_EMPTY, 1, 20, 5)) {
                        t3_write_reg(adap, A_XGM_RX_CFG + mac->offset, v);
                        enable_exact_filters(mac);
                        return -EIO;
                }
-               t3_write_reg(adap, A_XGM_RX_MAX_PKT_SIZE + mac->offset, mtu);
+               t3_set_reg_field(adap, A_XGM_RX_MAX_PKT_SIZE + mac->offset,
+                                V_RXMAXPKTSIZE(M_RXMAXPKTSIZE),
+                                V_RXMAXPKTSIZE(mtu));
                t3_write_reg(adap, A_XGM_RX_CFG + mac->offset, v);
                enable_exact_filters(mac);
        } else
-               t3_write_reg(adap, A_XGM_RX_MAX_PKT_SIZE + mac->offset, mtu);
+               t3_set_reg_field(adap, A_XGM_RX_MAX_PKT_SIZE + mac->offset,
+                                V_RXMAXPKTSIZE(M_RXMAXPKTSIZE),
+                                V_RXMAXPKTSIZE(mtu));
 
        /*
         * Adjust the PAUSE frame watermarks.  We always set the LWM, and the
@@ -379,13 +390,16 @@ int t3_mac_set_mtu(struct cmac *mac, unsigned int mtu)
                thres /= 10;
        thres = mtu > thres ? (mtu - thres + 7) / 8 : 0;
        thres = max(thres, 8U); /* need at least 8 */
+       ipg = (adap->params.rev == T3_REV_C) ? 0 : 1;
        t3_set_reg_field(adap, A_XGM_TXFIFO_CFG + mac->offset,
                         V_TXFIFOTHRESH(M_TXFIFOTHRESH) | V_TXIPG(M_TXIPG),
-                        V_TXFIFOTHRESH(thres) | V_TXIPG(1));
+                        V_TXFIFOTHRESH(thres) | V_TXIPG(ipg));
 
-       if (adap->params.rev > 0)
+       if (adap->params.rev > 0) {
+               divisor = (adap->params.rev == T3_REV_C) ? 64 : 8;
                t3_write_reg(adap, A_XGM_PAUSE_TIMER + mac->offset,
-                            (hwm - lwm) * 4 / 8);
+                            (hwm - lwm) * 4 / divisor);
+       }
        t3_write_reg(adap, A_XGM_TX_PAUSE_QUANTA + mac->offset,
                     MAC_RXFIFO_SIZE * 4 * 8 / 512);
        return 0;
@@ -522,7 +536,7 @@ int t3b2_mac_watchdog_task(struct cmac *mac)
                goto rxcheck;
        }
 
-       if ((tx_tcnt != mac->tx_tcnt) && (mac->tx_xcnt == 0))  {
+       if ((tx_tcnt != mac->tx_tcnt) && (mac->tx_xcnt == 0)) {
                if (mac->toggle_cnt > 4) {
                        status = 2;
                        goto out;
index 3dbaec680b462de47ff738ed5ab14cbf8cedf111..e1c8a0d023ea13546f5cb4fb006dfa503a874d45 100644 (file)
@@ -2214,13 +2214,11 @@ static void e100_get_drvinfo(struct net_device *netdev,
        strcpy(info->bus_info, pci_name(nic->pdev));
 }
 
+#define E100_PHY_REGS 0x1C
 static int e100_get_regs_len(struct net_device *netdev)
 {
        struct nic *nic = netdev_priv(netdev);
-#define E100_PHY_REGS          0x1C
-#define E100_REGS_LEN          1 + E100_PHY_REGS + \
-       sizeof(nic->mem->dump_buf) / sizeof(u32)
-       return E100_REGS_LEN * sizeof(u32);
+       return 1 + E100_PHY_REGS + sizeof(nic->mem->dump_buf);
 }
 
 static void e100_get_regs(struct net_device *netdev,
index 667f18bcc1725b41b43529033c38a059606cfbec..b83ccce8a9b7d35572ddd85d4810f3c851c64b27 100644 (file)
@@ -1923,7 +1923,7 @@ e1000_get_strings(struct net_device *netdev, uint32_t stringset, uint8_t *data)
        switch (stringset) {
        case ETH_SS_TEST:
                memcpy(data, *e1000_gstrings_test,
-                       E1000_TEST_LEN*ETH_GSTRING_LEN);
+                       sizeof(e1000_gstrings_test));
                break;
        case ETH_SS_STATS:
                for (i = 0; i < E1000_GLOBAL_STATS_LEN; i++) {
index cf39473ef90a5e04ea65c04ac247a30bc6f06915..4f37506ad3744656c86d102f63fb66aac2185876 100644 (file)
@@ -3942,7 +3942,7 @@ e1000_clean(struct napi_struct *napi, int budget)
                          &work_done, budget);
 
        /* If no Tx and not enough Rx work done, exit the polling mode */
-       if ((!tx_cleaned && (work_done < budget)) ||
+       if ((!tx_cleaned && (work_done == 0)) ||
           !netif_running(poll_dev)) {
 quit_polling:
                if (likely(adapter->itr_setting & 3))
index 6a39784e7ee2a02de8ff32c4b6eece49465d3cad..87f9da1b6b4ef9e2786dba5048414570a670cd66 100644 (file)
@@ -1739,7 +1739,7 @@ static void e1000_get_strings(struct net_device *netdev, u32 stringset,
        switch (stringset) {
        case ETH_SS_TEST:
                memcpy(data, *e1000_gstrings_test,
-                       E1000_TEST_LEN*ETH_GSTRING_LEN);
+                       sizeof(e1000_gstrings_test));
                break;
        case ETH_SS_STATS:
                for (i = 0; i < E1000_GLOBAL_STATS_LEN; i++) {
index f78e5bf7cb3334f7dba7e1dcdddf35c10fd79a7b..5f82a4647eee4dcec3240be6ec51932926efae16 100644 (file)
@@ -40,7 +40,7 @@
 #include <asm/io.h>
 
 #define DRV_NAME       "ehea"
-#define DRV_VERSION    "EHEA_0080"
+#define DRV_VERSION    "EHEA_0083"
 
 /* eHEA capability flags */
 #define DLPAR_PORT_ADD_REM 1
index f0319f1e8e052e99adfde7ca658cfaf7074b1ac1..869e1604b16ea0e4b5555acbe77dff969f42cb5b 100644 (file)
@@ -136,7 +136,7 @@ static struct net_device_stats *ehea_get_stats(struct net_device *dev)
        struct ehea_port *port = netdev_priv(dev);
        struct net_device_stats *stats = &port->stats;
        struct hcp_ehea_port_cb2 *cb2;
-       u64 hret, rx_packets;
+       u64 hret, rx_packets, tx_packets;
        int i;
 
        memset(stats, 0, sizeof(*stats));
@@ -162,7 +162,11 @@ static struct net_device_stats *ehea_get_stats(struct net_device *dev)
        for (i = 0; i < port->num_def_qps; i++)
                rx_packets += port->port_res[i].rx_packets;
 
-       stats->tx_packets = cb2->txucp + cb2->txmcp + cb2->txbcp;
+       tx_packets = 0;
+       for (i = 0; i < port->num_def_qps + port->num_add_tx_qps; i++)
+               tx_packets += port->port_res[i].tx_packets;
+
+       stats->tx_packets = tx_packets;
        stats->multicast = cb2->rxmcp;
        stats->rx_errors = cb2->rxuerr;
        stats->rx_bytes = cb2->rxo;
@@ -406,11 +410,6 @@ static int ehea_treat_poll_error(struct ehea_port_res *pr, int rq,
        if (cqe->status & EHEA_CQE_STAT_ERR_CRC)
                pr->p_stats.err_frame_crc++;
 
-       if (netif_msg_rx_err(pr->port)) {
-               ehea_error("CQE Error for QP %d", pr->qp->init_attr.qp_nr);
-               ehea_dump(cqe, sizeof(*cqe), "CQE");
-       }
-
        if (rq == 2) {
                *processed_rq2 += 1;
                skb = get_skb_by_index(pr->rq2_skba.arr, pr->rq2_skba.len, cqe);
@@ -422,7 +421,11 @@ static int ehea_treat_poll_error(struct ehea_port_res *pr, int rq,
        }
 
        if (cqe->status & EHEA_CQE_STAT_FAT_ERR_MASK) {
-               ehea_error("Critical receive error. Resetting port.");
+               if (netif_msg_rx_err(pr->port)) {
+                       ehea_error("Critical receive error for QP %d. "
+                                  "Resetting port.", pr->qp->init_attr.qp_nr);
+                       ehea_dump(cqe, sizeof(*cqe), "CQE");
+               }
                schedule_work(&pr->port->reset_task);
                return 1;
        }
@@ -2000,6 +2003,7 @@ static int ehea_start_xmit(struct sk_buff *skb, struct net_device *dev)
        }
 
        ehea_post_swqe(pr->qp, swqe);
+       pr->tx_packets++;
 
        if (unlikely(atomic_read(&pr->swqe_avail) <= 1)) {
                spin_lock_irqsave(&pr->netif_queue, flags);
index 562de0ebdd851a3e3e3cabee9f41df66fcaa4e1a..bc62d389c166578fe179567968009bc8b6752b60 100644 (file)
@@ -145,8 +145,8 @@ struct ehea_rwqe {
 #define EHEA_CQE_VLAN_TAG_XTRACT   0x0400
 
 #define EHEA_CQE_TYPE_RQ           0x60
-#define EHEA_CQE_STAT_ERR_MASK     0x720F
-#define EHEA_CQE_STAT_FAT_ERR_MASK 0x1F
+#define EHEA_CQE_STAT_ERR_MASK     0x700F
+#define EHEA_CQE_STAT_FAT_ERR_MASK 0xF
 #define EHEA_CQE_STAT_ERR_TCP      0x4000
 #define EHEA_CQE_STAT_ERR_IP       0x2000
 #define EHEA_CQE_STAT_ERR_CRC      0x1000
index a8a0ee220da671c5124ad6af4314454cce6685f2..79f7eade477356938e113543e354baabef3d81be 100644 (file)
@@ -422,7 +422,7 @@ static irqreturn_t mpc52xx_fec_rx_interrupt(int irq, void *dev_id)
 
                rskb = bcom_retrieve_buffer(priv->rx_dmatsk, &status,
                                (struct bcom_bd **)&bd);
-               dma_unmap_single(&dev->dev, bd->skb_pa, skb->len, DMA_FROM_DEVICE);
+               dma_unmap_single(&dev->dev, bd->skb_pa, rskb->len, DMA_FROM_DEVICE);
 
                /* Test for errors in received frame */
                if (status & BCOM_FEC_RX_BD_ERRORS) {
@@ -467,7 +467,7 @@ static irqreturn_t mpc52xx_fec_rx_interrupt(int irq, void *dev_id)
                        bcom_prepare_next_buffer(priv->rx_dmatsk);
 
                bd->status = FEC_RX_BUFFER_SIZE;
-               bd->skb_pa = dma_map_single(&dev->dev, rskb->data,
+               bd->skb_pa = dma_map_single(&dev->dev, skb->data,
                                FEC_RX_BUFFER_SIZE, DMA_FROM_DEVICE);
 
                bcom_submit_next_buffer(priv->rx_dmatsk, skb);
@@ -971,6 +971,8 @@ mpc52xx_fec_probe(struct of_device *op, const struct of_device_id *match)
 
        mpc52xx_fec_reset_stats(ndev);
 
+       SET_NETDEV_DEV(ndev, &op->dev);
+
        /* Register the new network device */
        rv = register_netdev(ndev);
        if (rv < 0)
index 92ce2e38f0d54611c65a1ae7e0eb51ed4a78693b..a96583cceb5ef77c1e374caa47a45ec43471f151 100644 (file)
@@ -5286,19 +5286,15 @@ static int __devinit nv_probe(struct pci_dev *pci_dev, const struct pci_device_i
                if (readl(base + NvRegTransmitterControl) & NVREG_XMITCTL_SYNC_PHY_INIT) {
                        np->mac_in_use = readl(base + NvRegTransmitterControl) & NVREG_XMITCTL_MGMT_ST;
                        dprintk(KERN_INFO "%s: mgmt unit is running. mac in use %x.\n", pci_name(pci_dev), np->mac_in_use);
-                       for (i = 0; i < 5000; i++) {
-                               msleep(1);
-                               if (nv_mgmt_acquire_sema(dev)) {
-                                       /* management unit setup the phy already? */
-                                       if ((readl(base + NvRegTransmitterControl) & NVREG_XMITCTL_SYNC_MASK) ==
-                                           NVREG_XMITCTL_SYNC_PHY_INIT) {
-                                               /* phy is inited by mgmt unit */
-                                               phyinitialized = 1;
-                                               dprintk(KERN_INFO "%s: Phy already initialized by mgmt unit.\n", pci_name(pci_dev));
-                                       } else {
-                                               /* we need to init the phy */
-                                       }
-                                       break;
+                       if (nv_mgmt_acquire_sema(dev)) {
+                               /* management unit setup the phy already? */
+                               if ((readl(base + NvRegTransmitterControl) & NVREG_XMITCTL_SYNC_MASK) ==
+                                   NVREG_XMITCTL_SYNC_PHY_INIT) {
+                                       /* phy is inited by mgmt unit */
+                                       phyinitialized = 1;
+                                       dprintk(KERN_INFO "%s: Phy already initialized by mgmt unit.\n", pci_name(pci_dev));
+                               } else {
+                                       /* we need to init the phy */
                                }
                        }
                }
@@ -5613,6 +5609,22 @@ static struct pci_device_id pci_tbl[] = {
                PCI_DEVICE(PCI_VENDOR_ID_NVIDIA, PCI_DEVICE_ID_NVIDIA_NVENET_35),
                .driver_data = DEV_NEED_TIMERIRQ|DEV_NEED_LINKTIMER|DEV_HAS_CHECKSUM|DEV_HAS_HIGH_DMA|DEV_HAS_MSI|DEV_HAS_POWER_CNTRL|DEV_HAS_PAUSEFRAME_TX|DEV_HAS_STATISTICS_V2|DEV_HAS_TEST_EXTENDED|DEV_HAS_MGMT_UNIT,
        },
+       {       /* MCP79 Ethernet Controller */
+               PCI_DEVICE(PCI_VENDOR_ID_NVIDIA, PCI_DEVICE_ID_NVIDIA_NVENET_36),
+               .driver_data = DEV_NEED_TIMERIRQ|DEV_NEED_LINKTIMER|DEV_HAS_CHECKSUM|DEV_HAS_HIGH_DMA|DEV_HAS_MSI|DEV_HAS_POWER_CNTRL|DEV_HAS_PAUSEFRAME_TX|DEV_HAS_STATISTICS_V2|DEV_HAS_TEST_EXTENDED|DEV_HAS_MGMT_UNIT,
+       },
+       {       /* MCP79 Ethernet Controller */
+               PCI_DEVICE(PCI_VENDOR_ID_NVIDIA, PCI_DEVICE_ID_NVIDIA_NVENET_37),
+               .driver_data = DEV_NEED_TIMERIRQ|DEV_NEED_LINKTIMER|DEV_HAS_CHECKSUM|DEV_HAS_HIGH_DMA|DEV_HAS_MSI|DEV_HAS_POWER_CNTRL|DEV_HAS_PAUSEFRAME_TX|DEV_HAS_STATISTICS_V2|DEV_HAS_TEST_EXTENDED|DEV_HAS_MGMT_UNIT,
+       },
+       {       /* MCP79 Ethernet Controller */
+               PCI_DEVICE(PCI_VENDOR_ID_NVIDIA, PCI_DEVICE_ID_NVIDIA_NVENET_38),
+               .driver_data = DEV_NEED_TIMERIRQ|DEV_NEED_LINKTIMER|DEV_HAS_CHECKSUM|DEV_HAS_HIGH_DMA|DEV_HAS_MSI|DEV_HAS_POWER_CNTRL|DEV_HAS_PAUSEFRAME_TX|DEV_HAS_STATISTICS_V2|DEV_HAS_TEST_EXTENDED|DEV_HAS_MGMT_UNIT,
+       },
+       {       /* MCP79 Ethernet Controller */
+               PCI_DEVICE(PCI_VENDOR_ID_NVIDIA, PCI_DEVICE_ID_NVIDIA_NVENET_39),
+               .driver_data = DEV_NEED_TIMERIRQ|DEV_NEED_LINKTIMER|DEV_HAS_CHECKSUM|DEV_HAS_HIGH_DMA|DEV_HAS_MSI|DEV_HAS_POWER_CNTRL|DEV_HAS_PAUSEFRAME_TX|DEV_HAS_STATISTICS_V2|DEV_HAS_TEST_EXTENDED|DEV_HAS_MGMT_UNIT,
+       },
        {0,},
 };
 
index 38268d7335a8803914a2adb9c59b84a5a9246e5f..0431e9ed0fac56681615a495f9f2c1a5f2d30040 100644 (file)
@@ -696,7 +696,7 @@ int startup_gfar(struct net_device *dev)
 {
        struct txbd8 *txbdp;
        struct rxbd8 *rxbdp;
-       dma_addr_t addr;
+       dma_addr_t addr = 0;
        unsigned long vaddr;
        int i;
        struct gfar_private *priv = netdev_priv(dev);
index 0de3aa2a2e44172d99598556ee7d5b2e9c721997..cb06280dced5234806ec28c4c6235f0ab978769d 100644 (file)
@@ -3,6 +3,11 @@
  *
  * Driver for PowerPC 4xx on-chip ethernet controller.
  *
+ * Copyright 2007 Benjamin Herrenschmidt, IBM Corp.
+ *                <benh@kernel.crashing.org>
+ *
+ * Based on the arch/ppc version of the driver:
+ *
  * Copyright (c) 2004, 2005 Zultys Technologies.
  * Eugene Surovegin <eugene.surovegin@zultys.com> or <ebs@ebshome.net>
  *
@@ -402,7 +407,7 @@ static u32 __emac_calc_base_mr1(struct emac_instance *dev, int tx_size, int rx_s
 static u32 __emac4_calc_base_mr1(struct emac_instance *dev, int tx_size, int rx_size)
 {
        u32 ret = EMAC_MR1_VLE | EMAC_MR1_IST | EMAC4_MR1_TR |
-               EMAC4_MR1_OBCI(dev->opb_bus_freq);
+               EMAC4_MR1_OBCI(dev->opb_bus_freq / 1000000);
 
        DBG2(dev, "__emac4_calc_base_mr1" NL);
 
@@ -464,26 +469,34 @@ static int emac_configure(struct emac_instance *dev)
 {
        struct emac_regs __iomem *p = dev->emacp;
        struct net_device *ndev = dev->ndev;
-       int tx_size, rx_size;
+       int tx_size, rx_size, link = netif_carrier_ok(dev->ndev);
        u32 r, mr1 = 0;
 
        DBG(dev, "configure" NL);
 
-       if (emac_reset(dev) < 0)
+       if (!link) {
+               out_be32(&p->mr1, in_be32(&p->mr1)
+                        | EMAC_MR1_FDE | EMAC_MR1_ILE);
+               udelay(100);
+       } else if (emac_reset(dev) < 0)
                return -ETIMEDOUT;
 
        if (emac_has_feature(dev, EMAC_FTR_HAS_TAH))
                tah_reset(dev->tah_dev);
 
-       DBG(dev, " duplex = %d, pause = %d, asym_pause = %d\n",
-           dev->phy.duplex, dev->phy.pause, dev->phy.asym_pause);
+       DBG(dev, " link = %d duplex = %d, pause = %d, asym_pause = %d\n",
+           link, dev->phy.duplex, dev->phy.pause, dev->phy.asym_pause);
 
        /* Default fifo sizes */
        tx_size = dev->tx_fifo_size;
        rx_size = dev->rx_fifo_size;
 
+       /* No link, force loopback */
+       if (!link)
+               mr1 = EMAC_MR1_FDE | EMAC_MR1_ILE;
+
        /* Check for full duplex */
-       if (dev->phy.duplex == DUPLEX_FULL)
+       else if (dev->phy.duplex == DUPLEX_FULL)
                mr1 |= EMAC_MR1_FDE | EMAC_MR1_MWSW_001;
 
        /* Adjust fifo sizes, mr1 and timeouts based on link speed */
@@ -642,9 +655,11 @@ static void emac_reset_work(struct work_struct *work)
        DBG(dev, "reset_work" NL);
 
        mutex_lock(&dev->link_lock);
-       emac_netif_stop(dev);
-       emac_full_tx_reset(dev);
-       emac_netif_start(dev);
+       if (dev->opened) {
+               emac_netif_stop(dev);
+               emac_full_tx_reset(dev);
+               emac_netif_start(dev);
+       }
        mutex_unlock(&dev->link_lock);
 }
 
@@ -701,7 +716,7 @@ static int __emac_mdio_read(struct emac_instance *dev, u8 id, u8 reg)
                r = EMAC_STACR_BASE(dev->opb_bus_freq);
        if (emac_has_feature(dev, EMAC_FTR_STACR_OC_INVERT))
                r |= EMAC_STACR_OC;
-       if (emac_has_feature(dev, EMAC_FTR_HAS_AXON_STACR))
+       if (emac_has_feature(dev, EMAC_FTR_HAS_NEW_STACR))
                r |= EMACX_STACR_STAC_READ;
        else
                r |= EMAC_STACR_STAC_READ;
@@ -773,7 +788,7 @@ static void __emac_mdio_write(struct emac_instance *dev, u8 id, u8 reg,
                r = EMAC_STACR_BASE(dev->opb_bus_freq);
        if (emac_has_feature(dev, EMAC_FTR_STACR_OC_INVERT))
                r |= EMAC_STACR_OC;
-       if (emac_has_feature(dev, EMAC_FTR_HAS_AXON_STACR))
+       if (emac_has_feature(dev, EMAC_FTR_HAS_NEW_STACR))
                r |= EMACX_STACR_STAC_WRITE;
        else
                r |= EMAC_STACR_STAC_WRITE;
@@ -1063,10 +1078,9 @@ static int emac_open(struct net_device *ndev)
        dev->rx_sg_skb = NULL;
 
        mutex_lock(&dev->link_lock);
+       dev->opened = 1;
 
-       /* XXX Start PHY polling now. Shouldn't wr do like sungem instead and
-        * always poll the PHY even when the iface is down ? That would allow
-        * things like laptop-net to work. --BenH
+       /* Start PHY polling now.
         */
        if (dev->phy.address >= 0) {
                int link_poll_interval;
@@ -1145,9 +1159,11 @@ static void emac_link_timer(struct work_struct *work)
        int link_poll_interval;
 
        mutex_lock(&dev->link_lock);
-
        DBG2(dev, "link timer" NL);
 
+       if (!dev->opened)
+               goto bail;
+
        if (dev->phy.def->ops->poll_link(&dev->phy)) {
                if (!netif_carrier_ok(dev->ndev)) {
                        /* Get new link parameters */
@@ -1162,21 +1178,22 @@ static void emac_link_timer(struct work_struct *work)
                link_poll_interval = PHY_POLL_LINK_ON;
        } else {
                if (netif_carrier_ok(dev->ndev)) {
-                       emac_reinitialize(dev);
                        netif_carrier_off(dev->ndev);
                        netif_tx_disable(dev->ndev);
+                       emac_reinitialize(dev);
                        emac_print_link_status(dev);
                }
                link_poll_interval = PHY_POLL_LINK_OFF;
        }
        schedule_delayed_work(&dev->link_work, link_poll_interval);
-
+ bail:
        mutex_unlock(&dev->link_lock);
 }
 
 static void emac_force_link_update(struct emac_instance *dev)
 {
        netif_carrier_off(dev->ndev);
+       smp_rmb();
        if (dev->link_polling) {
                cancel_rearming_delayed_work(&dev->link_work);
                if (dev->link_polling)
@@ -1191,11 +1208,14 @@ static int emac_close(struct net_device *ndev)
 
        DBG(dev, "close" NL);
 
-       if (dev->phy.address >= 0)
+       if (dev->phy.address >= 0) {
+               dev->link_polling = 0;
                cancel_rearming_delayed_work(&dev->link_work);
-
+       }
+       mutex_lock(&dev->link_lock);
        emac_netif_stop(dev);
-       flush_scheduled_work();
+       dev->opened = 0;
+       mutex_unlock(&dev->link_lock);
 
        emac_rx_disable(dev);
        emac_tx_disable(dev);
@@ -2427,7 +2447,7 @@ static int __devinit emac_init_config(struct emac_instance *dev)
        if (emac_read_uint_prop(np, "tah-device", &dev->tah_ph, 0))
                dev->tah_ph = 0;
        if (emac_read_uint_prop(np, "tah-channel", &dev->tah_port, 0))
-               dev->tah_ph = 0;
+               dev->tah_port = 0;
        if (emac_read_uint_prop(np, "mdio-device", &dev->mdio_ph, 0))
                dev->mdio_ph = 0;
        if (emac_read_uint_prop(np, "zmii-device", &dev->zmii_ph, 0))
@@ -2465,16 +2485,19 @@ static int __devinit emac_init_config(struct emac_instance *dev)
        /* Check EMAC version */
        if (of_device_is_compatible(np, "ibm,emac4"))
                dev->features |= EMAC_FTR_EMAC4;
-       if (of_device_is_compatible(np, "ibm,emac-axon")
-           || of_device_is_compatible(np, "ibm,emac-440epx"))
-               dev->features |= EMAC_FTR_HAS_AXON_STACR
-                       | EMAC_FTR_STACR_OC_INVERT;
-       if (of_device_is_compatible(np, "ibm,emac-440spe"))
+
+       /* Fixup some feature bits based on the device tree */
+       if (of_get_property(np, "has-inverted-stacr-oc", NULL))
                dev->features |= EMAC_FTR_STACR_OC_INVERT;
+       if (of_get_property(np, "has-new-stacr-staopc", NULL))
+               dev->features |= EMAC_FTR_HAS_NEW_STACR;
 
-       /* Fixup some feature bits based on the device tree and verify
-        * we have support for them compiled in
-        */
+       /* CAB lacks the appropriate properties */
+       if (of_device_is_compatible(np, "ibm,emac-axon"))
+               dev->features |= EMAC_FTR_HAS_NEW_STACR |
+                       EMAC_FTR_STACR_OC_INVERT;
+
+       /* Enable TAH/ZMII/RGMII features as found */
        if (dev->tah_ph != 0) {
 #ifdef CONFIG_IBM_NEW_EMAC_TAH
                dev->features |= EMAC_FTR_HAS_TAH;
@@ -2532,6 +2555,10 @@ static int __devinit emac_probe(struct of_device *ofdev,
        struct device_node **blist = NULL;
        int err, i;
 
+       /* Skip unused/unwired EMACS */
+       if (of_get_property(np, "unused", NULL))
+               return -ENODEV;
+
        /* Find ourselves in the bootlist if we are there */
        for (i = 0; i < EMAC_BOOT_LIST_SIZE; i++)
                if (emac_boot_list[i] == np)
@@ -2756,6 +2783,8 @@ static int __devexit emac_remove(struct of_device *ofdev)
 
        unregister_netdev(dev->ndev);
 
+       flush_scheduled_work();
+
        if (emac_has_feature(dev, EMAC_FTR_HAS_TAH))
                tah_detach(dev->tah_dev, dev->tah_port);
        if (emac_has_feature(dev, EMAC_FTR_HAS_RGMII))
index 4011803117caae85be457cc5b6774b351c097fb1..4e74d8287c65b91d25a6a95ff36de8a0d2d16a6b 100644 (file)
@@ -3,6 +3,11 @@
  *
  * Driver for PowerPC 4xx on-chip ethernet controller.
  *
+ * Copyright 2007 Benjamin Herrenschmidt, IBM Corp.
+ *                <benh@kernel.crashing.org>
+ *
+ * Based on the arch/ppc version of the driver:
+ *
  * Copyright (c) 2004, 2005 Zultys Technologies.
  * Eugene Surovegin <eugene.surovegin@zultys.com> or <ebs@ebshome.net>
  *
@@ -258,6 +263,7 @@ struct emac_instance {
        int                             stop_timeout;   /* in us */
        int                             no_mcast;
        int                             mcast_pending;
+       int                             opened;
        struct work_struct              reset_work;
        spinlock_t                      lock;
 };
@@ -292,9 +298,9 @@ struct emac_instance {
  */
 #define EMAC_FTR_HAS_RGMII             0x00000020
 /*
- * Set if we have axon-type STACR
+ * Set if we have new type STACR with STAOPC
  */
-#define EMAC_FTR_HAS_AXON_STACR                0x00000040
+#define EMAC_FTR_HAS_NEW_STACR         0x00000040
 
 
 /* Right now, we don't quite handle the always/possible masks on the
@@ -306,7 +312,7 @@ enum {
 
        EMAC_FTRS_POSSIBLE      =
 #ifdef CONFIG_IBM_NEW_EMAC_EMAC4
-           EMAC_FTR_EMAC4      | EMAC_FTR_HAS_AXON_STACR       |
+           EMAC_FTR_EMAC4      | EMAC_FTR_HAS_NEW_STACR        |
            EMAC_FTR_STACR_OC_INVERT    |
 #endif
 #ifdef CONFIG_IBM_NEW_EMAC_TAH
index 170524ee0f1927a72a93d9740c4d654c7bde25a9..a2fc660ca5d436e35864a6bed6b46581eaacbf50 100644 (file)
@@ -3,6 +3,11 @@
  *
  * Driver for PowerPC 4xx on-chip ethernet controller, debug print routines.
  *
+ * Copyright 2007 Benjamin Herrenschmidt, IBM Corp.
+ *                <benh@kernel.crashing.org>
+ *
+ * Based on the arch/ppc version of the driver:
+ *
  * Copyright (c) 2004, 2005 Zultys Technologies
  * Eugene Surovegin <eugene.surovegin@zultys.com> or <ebs@ebshome.net>
  *
index 1dd2dcbc157fec1a49a35e7869ad136aed2cdc0e..b631842ec8d00a2cd861bde288cd7c768bc141d0 100644 (file)
@@ -3,6 +3,11 @@
  *
  * Driver for PowerPC 4xx on-chip ethernet controller, debug print routines.
  *
+ * Copyright 2007 Benjamin Herrenschmidt, IBM Corp.
+ *                <benh@kernel.crashing.org>
+ *
+ * Based on the arch/ppc version of the driver:
+ *
  * Copyright (c) 2004, 2005 Zultys Technologies
  * Eugene Surovegin <eugene.surovegin@zultys.com> or <ebs@ebshome.net>
  *
index bef92efeeadce4a371c0abb7b2757939df7f19de..91cb096ab4059e4d6593db85b830fb4d85dcb276 100644 (file)
@@ -3,6 +3,11 @@
  *
  * Register definitions for PowerPC 4xx on-chip ethernet contoller
  *
+ * Copyright 2007 Benjamin Herrenschmidt, IBM Corp.
+ *                <benh@kernel.crashing.org>
+ *
+ * Based on the arch/ppc version of the driver:
+ *
  * Copyright (c) 2004, 2005 Zultys Technologies.
  * Eugene Surovegin <eugene.surovegin@zultys.com> or <ebs@ebshome.net>
  *
index 9a88f71db004ee0e328027e4bd5864271a4050a8..6869f08c9dcba0188b920524e68c747d1445fb9f 100644 (file)
@@ -3,6 +3,11 @@
  *
  * Memory Access Layer (MAL) support
  *
+ * Copyright 2007 Benjamin Herrenschmidt, IBM Corp.
+ *                <benh@kernel.crashing.org>
+ *
+ * Based on the arch/ppc version of the driver:
+ *
  * Copyright (c) 2004, 2005 Zultys Technologies.
  * Eugene Surovegin <eugene.surovegin@zultys.com> or <ebs@ebshome.net>
  *
index 784edb8ea8220a285198e16e73c2bd1d67b73c32..eaa7262dc079373fa7693d6b75630723d0249343 100644 (file)
@@ -3,6 +3,11 @@
  *
  * Memory Access Layer (MAL) support
  *
+ * Copyright 2007 Benjamin Herrenschmidt, IBM Corp.
+ *                <benh@kernel.crashing.org>
+ *
+ * Based on the arch/ppc version of the driver:
+ *
  * Copyright (c) 2004, 2005 Zultys Technologies.
  * Eugene Surovegin <eugene.surovegin@zultys.com> or <ebs@ebshome.net>
  *
index aa1f0ddf1e3ed417ed3aa3a84bd5cf718ff6e316..37bfeea8788a71d601f6da1cf662b15fe466f55a 100644 (file)
@@ -8,6 +8,11 @@
  * This file should be shared with other drivers or eventually
  * merged as the "low level" part of miilib
  *
+ * Copyright 2007 Benjamin Herrenschmidt, IBM Corp.
+ *                <benh@kernel.crashing.org>
+ *
+ * Based on the arch/ppc version of the driver:
+ *
  * (c) 2003, Benjamin Herrenscmidt (benh@kernel.crashing.org)
  * (c) 2004-2005, Eugene Surovegin <ebs@ebshome.net>
  *
@@ -306,8 +311,84 @@ static struct mii_phy_def cis8201_phy_def = {
        .ops            = &cis8201_phy_ops
 };
 
+static struct mii_phy_def bcm5248_phy_def = {
+
+       .phy_id         = 0x0143bc00,
+       .phy_id_mask    = 0x0ffffff0,
+       .name           = "BCM5248 10/100 SMII Ethernet",
+       .ops            = &generic_phy_ops
+};
+
+static int m88e1111_init(struct mii_phy *phy)
+{
+       pr_debug("%s: Marvell 88E1111 Ethernet\n", __FUNCTION__);
+       phy_write(phy, 0x14, 0x0ce3);
+       phy_write(phy, 0x18, 0x4101);
+       phy_write(phy, 0x09, 0x0e00);
+       phy_write(phy, 0x04, 0x01e1);
+       phy_write(phy, 0x00, 0x9140);
+       phy_write(phy, 0x00, 0x1140);
+
+       return  0;
+}
+
+static int et1011c_init(struct mii_phy *phy)
+{
+       u16 reg_short;
+
+       reg_short = (u16)(phy_read(phy, 0x16));
+       reg_short &= ~(0x7);
+       reg_short |= 0x6;       /* RGMII Trace Delay*/
+       phy_write(phy, 0x16, reg_short);
+
+       reg_short = (u16)(phy_read(phy, 0x17));
+       reg_short &= ~(0x40);
+       phy_write(phy, 0x17, reg_short);
+
+       phy_write(phy, 0x1c, 0x74f0);
+       return 0;
+}
+
+static struct mii_phy_ops et1011c_phy_ops = {
+       .init           = et1011c_init,
+       .setup_aneg     = genmii_setup_aneg,
+       .setup_forced   = genmii_setup_forced,
+       .poll_link      = genmii_poll_link,
+       .read_link      = genmii_read_link
+};
+
+static struct mii_phy_def et1011c_phy_def = {
+       .phy_id         = 0x0282f000,
+       .phy_id_mask    = 0x0fffff00,
+       .name           = "ET1011C Gigabit Ethernet",
+       .ops            = &et1011c_phy_ops
+};
+
+
+
+
+
+static struct mii_phy_ops m88e1111_phy_ops = {
+       .init           = m88e1111_init,
+       .setup_aneg     = genmii_setup_aneg,
+       .setup_forced   = genmii_setup_forced,
+       .poll_link      = genmii_poll_link,
+       .read_link      = genmii_read_link
+};
+
+static struct mii_phy_def m88e1111_phy_def = {
+
+       .phy_id         = 0x01410CC0,
+       .phy_id_mask    = 0x0ffffff0,
+       .name           = "Marvell 88E1111 Ethernet",
+       .ops            = &m88e1111_phy_ops,
+};
+
 static struct mii_phy_def *mii_phy_table[] = {
+       &et1011c_phy_def,
        &cis8201_phy_def,
+       &bcm5248_phy_def,
+       &m88e1111_phy_def,
        &genmii_phy_def,
        NULL
 };
index 6feca26afedbbf487cb8a1d4881cb74b818fd5a9..1b65c81f65577513af7ab34a52b7205fee10bab5 100644 (file)
@@ -3,6 +3,11 @@
  *
  * Driver for PowerPC 4xx on-chip ethernet controller, PHY support
  *
+ * Copyright 2007 Benjamin Herrenschmidt, IBM Corp.
+ *                <benh@kernel.crashing.org>
+ *
+ * Based on the arch/ppc version of the driver:
+ *
  * Benjamin Herrenschmidt <benh@kernel.crashing.org>
  * February 2003
  *
index de416951a435287eaf86432baf45a6a021b4baf0..9bc1132fa788572148119390ff16c7ed076d6bf4 100644 (file)
@@ -3,6 +3,11 @@
  *
  * Driver for PowerPC 4xx on-chip ethernet controller, RGMII bridge support.
  *
+ * Copyright 2007 Benjamin Herrenschmidt, IBM Corp.
+ *                <benh@kernel.crashing.org>
+ *
+ * Based on the arch/ppc version of the driver:
+ *
  * Copyright (c) 2004, 2005 Zultys Technologies.
  * Eugene Surovegin <eugene.surovegin@zultys.com> or <ebs@ebshome.net>
  *
@@ -140,7 +145,7 @@ void rgmii_get_mdio(struct of_device *ofdev, int input)
 
        RGMII_DBG2(dev, "get_mdio(%d)" NL, input);
 
-       if (dev->type != RGMII_AXON)
+       if (!(dev->flags & EMAC_RGMII_FLAG_HAS_MDIO))
                return;
 
        mutex_lock(&dev->lock);
@@ -161,7 +166,7 @@ void rgmii_put_mdio(struct of_device *ofdev, int input)
 
        RGMII_DBG2(dev, "put_mdio(%d)" NL, input);
 
-       if (dev->type != RGMII_AXON)
+       if (!(dev->flags & EMAC_RGMII_FLAG_HAS_MDIO))
                return;
 
        fer = in_be32(&p->fer);
@@ -250,11 +255,13 @@ static int __devinit rgmii_probe(struct of_device *ofdev,
                goto err_free;
        }
 
-       /* Check for RGMII type */
+       /* Check for RGMII flags */
+       if (of_get_property(ofdev->node, "has-mdio", NULL))
+               dev->flags |= EMAC_RGMII_FLAG_HAS_MDIO;
+
+       /* CAB lacks the right properties, fix this up */
        if (of_device_is_compatible(ofdev->node, "ibm,rgmii-axon"))
-               dev->type = RGMII_AXON;
-       else
-               dev->type = RGMII_STANDARD;
+               dev->flags |= EMAC_RGMII_FLAG_HAS_MDIO;
 
        DBG2(dev, " Boot FER = 0x%08x, SSR = 0x%08x\n",
             in_be32(&dev->base->fer), in_be32(&dev->base->ssr));
@@ -263,9 +270,9 @@ static int __devinit rgmii_probe(struct of_device *ofdev,
        out_be32(&dev->base->fer, 0);
 
        printk(KERN_INFO
-              "RGMII %s %s initialized\n",
-              dev->type == RGMII_STANDARD ? "standard" : "axon",
-              ofdev->node->full_name);
+              "RGMII %s initialized with%s MDIO support\n",
+              ofdev->node->full_name,
+              (dev->flags & EMAC_RGMII_FLAG_HAS_MDIO) ? "" : "out");
 
        wmb();
        dev_set_drvdata(&ofdev->dev, dev);
index 57806833121e3a2cdd58a7d7421b4f8bbece7444..c4a4b358a2708e2281a7f5c46129412e37d3fb7a 100644 (file)
@@ -3,6 +3,11 @@
  *
  * Driver for PowerPC 4xx on-chip ethernet controller, RGMII bridge support.
  *
+ * Copyright 2007 Benjamin Herrenschmidt, IBM Corp.
+ *                <benh@kernel.crashing.org>
+ *
+ * Based on the arch/ppc version of the driver:
+ *
  * Based on ocp_zmii.h/ibm_emac_zmii.h
  * Armin Kuster akuster@mvista.com
  *
@@ -35,8 +40,9 @@ struct rgmii_regs {
 struct rgmii_instance {
        struct rgmii_regs __iomem       *base;
 
-       /* Type of RGMII bridge */
-       int                             type;
+       /* RGMII bridge flags */
+       int                             flags;
+#define EMAC_RGMII_FLAG_HAS_MDIO       0x00000001
 
        /* Only one EMAC whacks us at a time */
        struct mutex                    lock;
index f161fb100e8e671f1ec41a200fac023906eae058..96417adec32625b9389b1825e35a3c44d7aa8411 100644 (file)
@@ -3,6 +3,11 @@
  *
  * Driver for PowerPC 4xx on-chip ethernet controller, TAH support.
  *
+ * Copyright 2007 Benjamin Herrenschmidt, IBM Corp.
+ *                <benh@kernel.crashing.org>
+ *
+ * Based on the arch/ppc version of the driver:
+ *
  * Copyright 2004 MontaVista Software, Inc.
  * Matt Porter <mporter@kernel.crashing.org>
  *
@@ -116,13 +121,14 @@ static int __devinit tah_probe(struct of_device *ofdev,
                goto err_free;
        }
 
+       dev_set_drvdata(&ofdev->dev, dev);
+
        /* Initialize TAH and enable IPv4 checksum verification, no TSO yet */
        tah_reset(ofdev);
 
        printk(KERN_INFO
               "TAH %s initialized\n", ofdev->node->full_name);
        wmb();
-       dev_set_drvdata(&ofdev->dev, dev);
 
        return 0;
 
index bc41853b6e26f8ef470664cc3b6e78ec971ce4ac..a068b5658dad5088464fa94f6abaaf92a1d0a1ee 100644 (file)
@@ -3,6 +3,11 @@
  *
  * Driver for PowerPC 4xx on-chip ethernet controller, TAH support.
  *
+ * Copyright 2007 Benjamin Herrenschmidt, IBM Corp.
+ *                <benh@kernel.crashing.org>
+ *
+ * Based on the arch/ppc version of the driver:
+ *
  * Copyright 2004 MontaVista Software, Inc.
  * Matt Porter <mporter@kernel.crashing.org>
  *
index 2219ec2740e056f37f12619613c94f49c4e6fcd0..2ea472aeab06ac8c03deb714853024b8cce265f1 100644 (file)
@@ -3,6 +3,11 @@
  *
  * Driver for PowerPC 4xx on-chip ethernet controller, ZMII bridge support.
  *
+ * Copyright 2007 Benjamin Herrenschmidt, IBM Corp.
+ *                <benh@kernel.crashing.org>
+ *
+ * Based on the arch/ppc version of the driver:
+ *
  * Copyright (c) 2004, 2005 Zultys Technologies.
  * Eugene Surovegin <eugene.surovegin@zultys.com> or <ebs@ebshome.net>
  *
@@ -83,12 +88,14 @@ int __devinit zmii_attach(struct of_device *ofdev, int input, int *mode)
 
        ZMII_DBG(dev, "init(%d, %d)" NL, input, *mode);
 
-       if (!zmii_valid_mode(*mode))
+       if (!zmii_valid_mode(*mode)) {
                /* Probably an EMAC connected to RGMII,
                 * but it still may need ZMII for MDIO so
                 * we don't fail here.
                 */
+               dev->users++;
                return 0;
+       }
 
        mutex_lock(&dev->lock);
 
index 82a9968b1f7448cb9ca8b9bd1d170e3dfb4228aa..6c9beba0c4b6d6a6a480ce2bad36f48863ce9732 100644 (file)
@@ -3,6 +3,11 @@
  *
  * Driver for PowerPC 4xx on-chip ethernet controller, ZMII bridge support.
  *
+ * Copyright 2007 Benjamin Herrenschmidt, IBM Corp.
+ *                <benh@kernel.crashing.org>
+ *
+ * Based on the arch/ppc version of the driver:
+ *
  * Copyright (c) 2004, 2005 Zultys Technologies.
  * Eugene Surovegin <eugene.surovegin@zultys.com> or <ebs@ebshome.net>
  *
index 9a855e512147f27c2dd2e5871dc9bb5aabd661f9..b59f442bbf36e38885e6bf35570fe7a5b9138104 100644 (file)
@@ -176,8 +176,8 @@ struct i596_reg {
 struct i596_tbd {
        unsigned short size;
        unsigned short pad;
-       dma_addr_t     next;
-       dma_addr_t     data;
+       u32            next;
+       u32            data;
        u32 cache_pad[5];               /* Total 32 bytes... */
 };
 
@@ -195,12 +195,12 @@ struct i596_cmd {
        struct i596_cmd *v_next;        /* Address from CPUs viewpoint */
        unsigned short status;
        unsigned short command;
-       dma_addr_t     b_next;  /* Address from i596 viewpoint */
+       u32            b_next;  /* Address from i596 viewpoint */
 };
 
 struct tx_cmd {
        struct i596_cmd cmd;
-       dma_addr_t     tbd;
+       u32            tbd;
        unsigned short size;
        unsigned short pad;
        struct sk_buff *skb;            /* So we can free it after tx */
@@ -237,8 +237,8 @@ struct cf_cmd {
 struct i596_rfd {
        unsigned short stat;
        unsigned short cmd;
-       dma_addr_t     b_next;  /* Address from i596 viewpoint */
-       dma_addr_t     rbd;
+       u32            b_next;  /* Address from i596 viewpoint */
+       u32            rbd;
        unsigned short count;
        unsigned short size;
        struct i596_rfd *v_next;        /* Address from CPUs viewpoint */
@@ -249,18 +249,18 @@ struct i596_rfd {
 };
 
 struct i596_rbd {
-    /* hardware data */
-    unsigned short count;
-    unsigned short zero1;
-    dma_addr_t     b_next;
-    dma_addr_t     b_data;             /* Address from i596 viewpoint */
-    unsigned short size;
-    unsigned short zero2;
-    /* driver data */
-    struct sk_buff *skb;
-    struct i596_rbd *v_next;
-    dma_addr_t     b_addr;             /* This rbd addr from i596 view */
-    unsigned char *v_data;             /* Address from CPUs viewpoint */
+       /* hardware data */
+       unsigned short count;
+       unsigned short zero1;
+       u32            b_next;
+       u32            b_data;          /* Address from i596 viewpoint */
+       unsigned short size;
+       unsigned short zero2;
+       /* driver data */
+       struct sk_buff *skb;
+       struct i596_rbd *v_next;
+       u32            b_addr;          /* This rbd addr from i596 view */
+       unsigned char *v_data;          /* Address from CPUs viewpoint */
                                        /* Total 32 bytes... */
 #ifdef __LP64__
     u32 cache_pad[4];
@@ -275,8 +275,8 @@ struct i596_rbd {
 struct i596_scb {
        unsigned short status;
        unsigned short command;
-       dma_addr_t    cmd;
-       dma_addr_t    rfd;
+       u32           cmd;
+       u32           rfd;
        u32           crc_err;
        u32           align_err;
        u32           resource_err;
@@ -288,14 +288,14 @@ struct i596_scb {
 };
 
 struct i596_iscp {
-       u32           stat;
-       dma_addr_t    scb;
+       u32 stat;
+       u32 scb;
 };
 
 struct i596_scp {
-       u32           sysbus;
-       u32           pad;
-       dma_addr_t    iscp;
+       u32 sysbus;
+       u32 pad;
+       u32 iscp;
 };
 
 struct i596_dma {
index 42b47639c81cb6f4753ea728bd86d81d060c5792..fa24e6597591fc0f10ab11158ead02051f884a6d 100644 (file)
@@ -113,7 +113,7 @@ int mlx4_qp_modify(struct mlx4_dev *dev, struct mlx4_mtt *mtt,
        struct mlx4_cmd_mailbox *mailbox;
        int ret = 0;
 
-       if (cur_state >= MLX4_QP_NUM_STATE || cur_state >= MLX4_QP_NUM_STATE ||
+       if (cur_state >= MLX4_QP_NUM_STATE || new_state >= MLX4_QP_NUM_STATE ||
            !op[cur_state][new_state])
                return -EINVAL;
 
index 0f306ddb5630eb05257d21d44bc533b88c184d23..8def8657251f19435fa50960cc9a0f69459f417e 100644 (file)
@@ -1979,6 +1979,7 @@ static int myri10ge_open(struct net_device *dev)
        lro_mgr->lro_arr = mgp->rx_done.lro_desc;
        lro_mgr->get_frag_header = myri10ge_get_frag_header;
        lro_mgr->max_aggr = myri10ge_lro_max_pkts;
+       lro_mgr->frag_align_pad = 2;
        if (lro_mgr->max_aggr > MAX_SKB_FRAGS)
                lro_mgr->max_aggr = MAX_SKB_FRAGS;
 
index 112ab079ce7d19af82403d8e148701470ddc2c17..abfc61c3a38c36258450dc046a5ec48f706f0503 100644 (file)
@@ -1045,6 +1045,7 @@ static int niu_serdes_init(struct niu *np)
 }
 
 static void niu_init_xif(struct niu *);
+static void niu_handle_led(struct niu *, int status);
 
 static int niu_link_status_common(struct niu *np, int link_up)
 {
@@ -1066,11 +1067,15 @@ static int niu_link_status_common(struct niu *np, int link_up)
 
                spin_lock_irqsave(&np->lock, flags);
                niu_init_xif(np);
+               niu_handle_led(np, 1);
                spin_unlock_irqrestore(&np->lock, flags);
 
                netif_carrier_on(dev);
        } else if (netif_carrier_ok(dev) && !link_up) {
                niuwarn(LINK, "%s: Link is down\n", dev->name);
+               spin_lock_irqsave(&np->lock, flags);
+               niu_handle_led(np, 0);
+               spin_unlock_irqrestore(&np->lock, flags);
                netif_carrier_off(dev);
        }
 
@@ -3915,16 +3920,14 @@ static int niu_init_ipp(struct niu *np)
        return 0;
 }
 
-static void niu_init_xif_xmac(struct niu *np)
+static void niu_handle_led(struct niu *np, int status)
 {
-       struct niu_link_config *lp = &np->link_config;
        u64 val;
-
        val = nr64_mac(XMAC_CONFIG);
 
        if ((np->flags & NIU_FLAGS_10G) != 0 &&
            (np->flags & NIU_FLAGS_FIBER) != 0) {
-               if (netif_carrier_ok(np->dev)) {
+               if (status) {
                        val |= XMAC_CONFIG_LED_POLARITY;
                        val &= ~XMAC_CONFIG_FORCE_LED_ON;
                } else {
@@ -3933,6 +3936,15 @@ static void niu_init_xif_xmac(struct niu *np)
                }
        }
 
+       nw64_mac(XMAC_CONFIG, val);
+}
+
+static void niu_init_xif_xmac(struct niu *np)
+{
+       struct niu_link_config *lp = &np->link_config;
+       u64 val;
+
+       val = nr64_mac(XMAC_CONFIG);
        val &= ~XMAC_CONFIG_SEL_POR_CLK_SRC;
 
        val |= XMAC_CONFIG_TX_OUTPUT_EN;
@@ -4776,6 +4788,8 @@ static int niu_close(struct net_device *dev)
 
        niu_free_channels(np);
 
+       niu_handle_led(np, 0);
+
        return 0;
 }
 
index 09b4fde8d924978d05a63d8e57b834dea02ecea9..816a59e801b2bbd26bc590ee66c57a8e67a004c0 100644 (file)
@@ -586,7 +586,7 @@ static int pasemi_mac_clean_rx(struct pasemi_mac *mac, int limit)
                        /* CRC error flagged */
                        mac->netdev->stats.rx_errors++;
                        mac->netdev->stats.rx_crc_errors++;
-                       dev_kfree_skb_irq(skb);
+                       /* No need to free skb, it'll be reused */
                        goto next;
                }
 
@@ -1362,7 +1362,7 @@ pasemi_mac_probe(struct pci_dev *pdev, const struct pci_device_id *ent)
 
        netif_napi_add(dev, &mac->napi, pasemi_mac_poll, 64);
 
-       dev->features = NETIF_F_HW_CSUM | NETIF_F_LLTX | NETIF_F_SG;
+       dev->features = NETIF_F_IP_CSUM | NETIF_F_LLTX | NETIF_F_SG;
 
        /* These should come out of the device tree eventually */
        mac->dma_txch = index;
index 035fd41fb61f01408517d7fef176b8e42f8173d7..f0574073a2a34a02beb226cd27401ae5191895a3 100644 (file)
@@ -143,21 +143,29 @@ static int m88e1111_config_init(struct phy_device *phydev)
        int err;
 
        if ((phydev->interface == PHY_INTERFACE_MODE_RGMII) ||
-           (phydev->interface == PHY_INTERFACE_MODE_RGMII_ID)) {
+           (phydev->interface == PHY_INTERFACE_MODE_RGMII_ID) ||
+           (phydev->interface == PHY_INTERFACE_MODE_RGMII_RXID) ||
+           (phydev->interface == PHY_INTERFACE_MODE_RGMII_TXID)) {
                int temp;
 
-               if (phydev->interface == PHY_INTERFACE_MODE_RGMII_ID) {
-                       temp = phy_read(phydev, MII_M1111_PHY_EXT_CR);
-                       if (temp < 0)
-                               return temp;
+               temp = phy_read(phydev, MII_M1111_PHY_EXT_CR);
+               if (temp < 0)
+                       return temp;
 
+               if (phydev->interface == PHY_INTERFACE_MODE_RGMII_ID) {
                        temp |= (MII_M1111_RX_DELAY | MII_M1111_TX_DELAY);
-
-                       err = phy_write(phydev, MII_M1111_PHY_EXT_CR, temp);
-                       if (err < 0)
-                               return err;
+               } else if (phydev->interface == PHY_INTERFACE_MODE_RGMII_RXID) {
+                       temp &= ~MII_M1111_TX_DELAY;
+                       temp |= MII_M1111_RX_DELAY;
+               } else if (phydev->interface == PHY_INTERFACE_MODE_RGMII_TXID) {
+                       temp &= ~MII_M1111_RX_DELAY;
+                       temp |= MII_M1111_TX_DELAY;
                }
 
+               err = phy_write(phydev, MII_M1111_PHY_EXT_CR, temp);
+               if (err < 0)
+                       return err;
+
                temp = phy_read(phydev, MII_M1111_PHY_EXT_SR);
                if (temp < 0)
                        return temp;
index fc2f0e695a13a572a2309003243afe3ca685c6b1..c30196d0ad1681de95f5c14df66d8568c1200bd9 100644 (file)
@@ -91,9 +91,12 @@ int mdiobus_register(struct mii_bus *bus)
 
                        err = device_register(&phydev->dev);
 
-                       if (err)
+                       if (err) {
                                printk(KERN_ERR "phy %d failed to register\n",
                                                i);
+                               phy_device_free(phydev);
+                               phydev = NULL;
+                       }
                }
 
                bus->phy_map[i] = phydev;
@@ -110,10 +113,8 @@ void mdiobus_unregister(struct mii_bus *bus)
        int i;
 
        for (i = 0; i < PHY_MAX_ADDR; i++) {
-               if (bus->phy_map[i]) {
+               if (bus->phy_map[i])
                        device_unregister(&bus->phy_map[i]->dev);
-                       kfree(bus->phy_map[i]);
-               }
        }
 }
 EXPORT_SYMBOL(mdiobus_unregister);
index 9bc11773705b2beaf68064e6ba3166953c20a5f6..7c9e6e349503eaf2a7b91448a05a73d19e499bb8 100644 (file)
@@ -406,6 +406,9 @@ int phy_mii_ioctl(struct phy_device *phydev,
                                && phydev->drv->config_init)
                        phydev->drv->config_init(phydev);
                break;
+
+       default:
+               return -ENOTTY;
        }
 
        return 0;
index f6e484812a98f73df8541aebd6835fe11ff54196..5b9e1751e1b414fc0e50a99b13e0770cf69811a0 100644 (file)
@@ -44,6 +44,16 @@ static struct phy_driver genphy_driver;
 extern int mdio_bus_init(void);
 extern void mdio_bus_exit(void);
 
+void phy_device_free(struct phy_device *phydev)
+{
+       kfree(phydev);
+}
+
+static void phy_device_release(struct device *dev)
+{
+       phy_device_free(to_phy_device(dev));
+}
+
 struct phy_device* phy_device_create(struct mii_bus *bus, int addr, int phy_id)
 {
        struct phy_device *dev;
@@ -54,6 +64,8 @@ struct phy_device* phy_device_create(struct mii_bus *bus, int addr, int phy_id)
        if (NULL == dev)
                return (struct phy_device*) PTR_ERR((void*)-ENOMEM);
 
+       dev->dev.release = phy_device_release;
+
        dev->speed = 0;
        dev->duplex = -1;
        dev->pause = dev->asym_pause = 0;
index 5071fcd8a0bd18a08cc21b4b7e48a625a971017e..57c98669984db34dbc921216e7256a0dec8e8f40 100644 (file)
@@ -663,7 +663,7 @@ plip_receive_packet(struct net_device *dev, struct net_local *nl,
        case PLIP_PK_DONE:
                /* Inform the upper layer for the arrival of a packet. */
                rcv->skb->protocol=plip_type_trans(rcv->skb, dev);
-               netif_rx(rcv->skb);
+               netif_rx_ni(rcv->skb);
                dev->last_rx = jiffies;
                dev->stats.rx_bytes += rcv->length.h;
                dev->stats.rx_packets++;
@@ -1269,7 +1269,7 @@ static void plip_attach (struct parport *port)
 
                nl = netdev_priv(dev);
                nl->dev = dev;
-               nl->pardev = parport_register_device(port, name, plip_preempt,
+               nl->pardev = parport_register_device(port, dev->name, plip_preempt,
                                                 plip_wakeup, plip_interrupt,
                                                 0, dev);
 
index 01f08d726ace1450fc7c1c51cef20e98c4fb420c..f25264f2638e1c4baceef68128fb412069f4f1c6 100644 (file)
@@ -66,6 +66,7 @@ struct XENA_dev_config {
 #define ADAPTER_STATUS_RC_PRC_QUIESCENT    vBIT(0xFF,16,8)
 #define ADAPTER_STATUS_MC_DRAM_READY       s2BIT(24)
 #define ADAPTER_STATUS_MC_QUEUES_READY     s2BIT(25)
+#define ADAPTER_STATUS_RIC_RUNNING         s2BIT(26)
 #define ADAPTER_STATUS_M_PLL_LOCK          s2BIT(30)
 #define ADAPTER_STATUS_P_PLL_LOCK          s2BIT(31)
 
index 632666706247708e88574805f9023f6f616ffdce..121cb100f93a036fd2ae1ab226f00ffc5c7543ff 100644 (file)
@@ -84,7 +84,7 @@
 #include "s2io.h"
 #include "s2io-regs.h"
 
-#define DRV_VERSION "2.0.26.6"
+#define DRV_VERSION "2.0.26.10"
 
 /* S2io Driver name & version. */
 static char s2io_driver_name[] = "Neterion";
@@ -1081,7 +1081,7 @@ static int init_nic(struct s2io_nic *nic)
        /* to set the swapper controle on the card */
        if(s2io_set_swapper(nic)) {
                DBG_PRINT(ERR_DBG,"ERROR: Setting Swapper failed\n");
-               return -1;
+               return -EIO;
        }
 
        /*
@@ -1100,6 +1100,20 @@ static int init_nic(struct s2io_nic *nic)
        msleep(500);
        val64 = readq(&bar0->sw_reset);
 
+       /* Ensure that it's safe to access registers by checking
+        * RIC_RUNNING bit is reset. Check is valid only for XframeII.
+        */
+       if (nic->device_type == XFRAME_II_DEVICE) {
+               for (i = 0; i < 50; i++) {
+                       val64 = readq(&bar0->adapter_status);
+                       if (!(val64 & ADAPTER_STATUS_RIC_RUNNING))
+                               break;
+                       msleep(10);
+               }
+               if (i == 50)
+                       return -ENODEV;
+       }
+
        /*  Enable Receiving broadcasts */
        add = &bar0->mac_cfg;
        val64 = readq(&bar0->mac_cfg);
@@ -1503,7 +1517,7 @@ static int init_nic(struct s2io_nic *nic)
                        DBG_PRINT(ERR_DBG, "%s: failed rts ds steering",
                                dev->name);
                        DBG_PRINT(ERR_DBG, "set on codepoint %d\n", i);
-                       return FAILURE;
+                       return -ENODEV;
                }
        }
 
@@ -1570,7 +1584,7 @@ static int init_nic(struct s2io_nic *nic)
                if (time > 10) {
                        DBG_PRINT(ERR_DBG, "%s: TTI init Failed\n",
                                  dev->name);
-                       return -1;
+                       return -ENODEV;
                }
                msleep(50);
                time++;
@@ -1623,7 +1637,7 @@ static int init_nic(struct s2io_nic *nic)
                        if (time > 10) {
                                DBG_PRINT(ERR_DBG, "%s: RTI init Failed\n",
                                          dev->name);
-                               return -1;
+                               return -ENODEV;
                        }
                        time++;
                        msleep(50);
@@ -3914,6 +3928,12 @@ static int s2io_close(struct net_device *dev)
 {
        struct s2io_nic *sp = dev->priv;
 
+       /* Return if the device is already closed               *
+       *  Can happen when s2io_card_up failed in change_mtu    *
+       */
+       if (!is_s2io_card_up(sp))
+               return 0;
+
        netif_stop_queue(dev);
        napi_disable(&sp->napi);
        /* Reset card, kill tasklet and free Tx and Rx buffers. */
@@ -6355,6 +6375,7 @@ static int s2io_ioctl(struct net_device *dev, struct ifreq *rq, int cmd)
 static int s2io_change_mtu(struct net_device *dev, int new_mtu)
 {
        struct s2io_nic *sp = dev->priv;
+       int ret = 0;
 
        if ((new_mtu < MIN_MTU) || (new_mtu > S2IO_JUMBO_SIZE)) {
                DBG_PRINT(ERR_DBG, "%s: MTU size is invalid.\n",
@@ -6366,9 +6387,11 @@ static int s2io_change_mtu(struct net_device *dev, int new_mtu)
        if (netif_running(dev)) {
                s2io_card_down(sp);
                netif_stop_queue(dev);
-               if (s2io_card_up(sp)) {
+               ret = s2io_card_up(sp);
+               if (ret) {
                        DBG_PRINT(ERR_DBG, "%s: Device bring up failed\n",
                                  __FUNCTION__);
+                       return ret;
                }
                if (netif_queue_stopped(dev))
                        netif_wake_queue(dev);
@@ -6379,7 +6402,7 @@ static int s2io_change_mtu(struct net_device *dev, int new_mtu)
                writeq(vBIT(val64, 2, 14), &bar0->rmac_max_pyld_len);
        }
 
-       return 0;
+       return ret;
 }
 
 /**
@@ -6777,6 +6800,9 @@ static void do_s2io_card_down(struct s2io_nic * sp, int do_io)
        unsigned long flags;
        register u64 val64 = 0;
 
+       if (!is_s2io_card_up(sp))
+               return;
+
        del_timer_sync(&sp->alarm_timer);
        /* If s2io_set_link task is executing, wait till it completes. */
        while (test_and_set_bit(__S2IO_STATE_LINK_TASK, &(sp->state))) {
@@ -6850,11 +6876,13 @@ static int s2io_card_up(struct s2io_nic * sp)
        u16 interruptible;
 
        /* Initialize the H/W I/O registers */
-       if (init_nic(sp) != 0) {
+       ret = init_nic(sp);
+       if (ret != 0) {
                DBG_PRINT(ERR_DBG, "%s: H/W initialization failed\n",
                          dev->name);
-               s2io_reset(sp);
-               return -ENODEV;
+               if (ret != -EIO)
+                       s2io_reset(sp);
+               return ret;
        }
 
        /*
index 6d62250fba07944fab02a67dc9b93dc6fcdf36de..186eb8ebfda643e2155579f5d36ad7fc518fb4b6 100644 (file)
@@ -44,7 +44,7 @@
 #include "skge.h"
 
 #define DRV_NAME               "skge"
-#define DRV_VERSION            "1.12"
+#define DRV_VERSION            "1.13"
 #define PFX                    DRV_NAME " "
 
 #define DEFAULT_TX_RING_SIZE   128
@@ -1095,16 +1095,9 @@ static void xm_link_down(struct skge_hw *hw, int port)
 {
        struct net_device *dev = hw->dev[port];
        struct skge_port *skge = netdev_priv(dev);
-       u16 cmd = xm_read16(hw, port, XM_MMU_CMD);
 
        xm_write16(hw, port, XM_IMSK, XM_IMSK_DISABLE);
 
-       cmd &= ~(XM_MMU_ENA_RX | XM_MMU_ENA_TX);
-       xm_write16(hw, port, XM_MMU_CMD, cmd);
-
-       /* dummy read to ensure writing */
-       xm_read16(hw, port, XM_MMU_CMD);
-
        if (netif_carrier_ok(dev))
                skge_link_down(skge);
 }
@@ -1194,6 +1187,7 @@ static void genesis_init(struct skge_hw *hw)
 static void genesis_reset(struct skge_hw *hw, int port)
 {
        const u8 zero[8]  = { 0 };
+       u32 reg;
 
        skge_write8(hw, SK_REG(port, GMAC_IRQ_MSK), 0);
 
@@ -1209,6 +1203,11 @@ static void genesis_reset(struct skge_hw *hw, int port)
                xm_write16(hw, port, PHY_BCOM_INT_MASK, 0xffff);
 
        xm_outhash(hw, port, XM_HSM, zero);
+
+       /* Flush TX and RX fifo */
+       reg = xm_read32(hw, port, XM_MODE);
+       xm_write32(hw, port, XM_MODE, reg | XM_MD_FTF);
+       xm_write32(hw, port, XM_MODE, reg | XM_MD_FRF);
 }
 
 
@@ -1634,15 +1633,14 @@ static void genesis_mac_init(struct skge_hw *hw, int port)
        }
        xm_write16(hw, port, XM_RX_CMD, r);
 
-
        /* We want short frames padded to 60 bytes. */
        xm_write16(hw, port, XM_TX_CMD, XM_TX_AUTO_PAD);
 
-       /*
-        * Bump up the transmit threshold. This helps hold off transmit
-        * underruns when we're blasting traffic from both ports at once.
-        */
-       xm_write16(hw, port, XM_TX_THR, 512);
+       /* Increase threshold for jumbo frames on dual port */
+       if (hw->ports > 1 && jumbo)
+               xm_write16(hw, port, XM_TX_THR, 1020);
+       else
+               xm_write16(hw, port, XM_TX_THR, 512);
 
        /*
         * Enable the reception of all error frames. This is is
@@ -1713,7 +1711,13 @@ static void genesis_stop(struct skge_port *skge)
 {
        struct skge_hw *hw = skge->hw;
        int port = skge->port;
-       u32 reg;
+       unsigned retries = 1000;
+       u16 cmd;
+
+       /* Disable Tx and Rx */
+       cmd = xm_read16(hw, port, XM_MMU_CMD);
+       cmd &= ~(XM_MMU_ENA_RX | XM_MMU_ENA_TX);
+       xm_write16(hw, port, XM_MMU_CMD, cmd);
 
        genesis_reset(hw, port);
 
@@ -1721,20 +1725,17 @@ static void genesis_stop(struct skge_port *skge)
        skge_write16(hw, B3_PA_CTRL,
                     port == 0 ? PA_CLR_TO_TX1 : PA_CLR_TO_TX2);
 
-       /*
-        * If the transfer sticks at the MAC the STOP command will not
-        * terminate if we don't flush the XMAC's transmit FIFO !
-        */
-       xm_write32(hw, port, XM_MODE,
-                       xm_read32(hw, port, XM_MODE)|XM_MD_FTF);
-
-
        /* Reset the MAC */
-       skge_write16(hw, SK_REG(port, TX_MFF_CTRL1), MFF_SET_MAC_RST);
+       skge_write16(hw, SK_REG(port, TX_MFF_CTRL1), MFF_CLR_MAC_RST);
+       do {
+               skge_write16(hw, SK_REG(port, TX_MFF_CTRL1), MFF_SET_MAC_RST);
+               if (!(skge_read16(hw, SK_REG(port, TX_MFF_CTRL1)) & MFF_SET_MAC_RST))
+                       break;
+       } while (--retries > 0);
 
        /* For external PHYs there must be special handling */
        if (hw->phy_type != SK_PHY_XMAC) {
-               reg = skge_read32(hw, B2_GP_IO);
+               u32 reg = skge_read32(hw, B2_GP_IO);
                if (port == 0) {
                        reg |= GP_DIR_0;
                        reg &= ~GP_IO_0;
@@ -1801,11 +1802,6 @@ static void genesis_mac_intr(struct skge_hw *hw, int port)
                xm_write32(hw, port, XM_MODE, XM_MD_FTF);
                ++dev->stats.tx_fifo_errors;
        }
-
-       if (status & XM_IS_RXF_OV) {
-               xm_write32(hw, port, XM_MODE, XM_MD_FRF);
-               ++dev->stats.rx_fifo_errors;
-       }
 }
 
 static void genesis_link_up(struct skge_port *skge)
@@ -1862,9 +1858,9 @@ static void genesis_link_up(struct skge_port *skge)
 
        xm_write32(hw, port, XM_MODE, mode);
 
-       /* Turn on detection of Tx underrun, Rx overrun */
+       /* Turn on detection of Tx underrun */
        msk = xm_read16(hw, port, XM_IMSK);
-       msk &= ~(XM_IS_RXF_OV | XM_IS_TXF_UR);
+       msk &= ~XM_IS_TXF_UR;
        xm_write16(hw, port, XM_IMSK, msk);
 
        xm_read16(hw, port, XM_ISRC);
@@ -2194,9 +2190,12 @@ static void yukon_mac_init(struct skge_hw *hw, int port)
                         TX_JAM_IPG_VAL(TX_JAM_IPG_DEF) |
                         TX_IPG_JAM_DATA(TX_IPG_JAM_DEF));
 
-       /* serial mode register */
-       reg = GM_SMOD_VLAN_ENA | IPG_DATA_VAL(IPG_DATA_DEF);
-       if (hw->dev[port]->mtu > 1500)
+       /* configure the Serial Mode Register */
+       reg = DATA_BLIND_VAL(DATA_BLIND_DEF)
+               | GM_SMOD_VLAN_ENA
+               | IPG_DATA_VAL(IPG_DATA_DEF);
+
+       if (hw->dev[port]->mtu > ETH_DATA_LEN)
                reg |= GM_SMOD_JUMBO_ENA;
 
        gma_write16(hw, port, GM_SERIAL_MODE, reg);
@@ -2619,8 +2618,8 @@ static int skge_up(struct net_device *dev)
                yukon_mac_init(hw, port);
        spin_unlock_bh(&hw->phy_lock);
 
-       /* Configure RAMbuffers */
-       chunk = hw->ram_size / ((hw->ports + 1)*2);
+       /* Configure RAMbuffers - equally between ports and tx/rx */
+       chunk = (hw->ram_size  - hw->ram_offset) / (hw->ports * 2);
        ram_addr = hw->ram_offset + 2 * chunk * port;
 
        skge_ramset(hw, rxqaddr[port], ram_addr, chunk);
@@ -2897,11 +2896,7 @@ static void skge_tx_timeout(struct net_device *dev)
 
 static int skge_change_mtu(struct net_device *dev, int new_mtu)
 {
-       struct skge_port *skge = netdev_priv(dev);
-       struct skge_hw *hw = skge->hw;
-       int port = skge->port;
        int err;
-       u16 ctl, reg;
 
        if (new_mtu < ETH_ZLEN || new_mtu > ETH_JUMBO_MTU)
                return -EINVAL;
@@ -2911,40 +2906,13 @@ static int skge_change_mtu(struct net_device *dev, int new_mtu)
                return 0;
        }
 
-       skge_write32(hw, B0_IMSK, 0);
-       dev->trans_start = jiffies;     /* prevent tx timeout */
-       netif_stop_queue(dev);
-       napi_disable(&skge->napi);
-
-       ctl = gma_read16(hw, port, GM_GP_CTRL);
-       gma_write16(hw, port, GM_GP_CTRL, ctl & ~GM_GPCR_RX_ENA);
-
-       skge_rx_clean(skge);
-       skge_rx_stop(hw, port);
+       skge_down(dev);
 
        dev->mtu = new_mtu;
 
-       reg = GM_SMOD_VLAN_ENA | IPG_DATA_VAL(IPG_DATA_DEF);
-       if (new_mtu > 1500)
-               reg |= GM_SMOD_JUMBO_ENA;
-       gma_write16(hw, port, GM_SERIAL_MODE, reg);
-
-       skge_write8(hw, RB_ADDR(rxqaddr[port], RB_CTRL), RB_ENA_OP_MD);
-
-       err = skge_rx_fill(dev);
-       wmb();
-       if (!err)
-               skge_write8(hw, Q_ADDR(rxqaddr[port], Q_CSR), CSR_START | CSR_IRQ_CL_F);
-       skge_write32(hw, B0_IMSK, hw->intr_mask);
-
+       err = skge_up(dev);
        if (err)
                dev_close(dev);
-       else {
-               gma_write16(hw, port, GM_GP_CTRL, ctl);
-
-               napi_enable(&skge->napi);
-               netif_wake_queue(dev);
-       }
 
        return err;
 }
index a2070db725c903ced2fae8079cf71fd2ae32d182..6197afb3ed8314671583455e89d69a8e7170494a 100644 (file)
@@ -31,7 +31,6 @@
 #include <linux/etherdevice.h>
 #include <linux/ethtool.h>
 #include <linux/pci.h>
-#include <linux/aer.h>
 #include <linux/ip.h>
 #include <net/ip.h>
 #include <linux/tcp.h>
@@ -240,22 +239,21 @@ static void sky2_power_on(struct sky2_hw *hw)
                sky2_write8(hw, B2_Y2_CLK_GATE, 0);
 
        if (hw->flags & SKY2_HW_ADV_POWER_CTL) {
-               struct pci_dev *pdev = hw->pdev;
                u32 reg;
 
-               pci_write_config_dword(pdev, PCI_DEV_REG3, 0);
+               sky2_pci_write32(hw, PCI_DEV_REG3, 0);
 
-               pci_read_config_dword(pdev, PCI_DEV_REG4, &reg);
+               reg = sky2_pci_read32(hw, PCI_DEV_REG4);
                /* set all bits to 0 except bits 15..12 and 8 */
                reg &= P_ASPM_CONTROL_MSK;
-               pci_write_config_dword(pdev, PCI_DEV_REG4, reg);
+               sky2_pci_write32(hw, PCI_DEV_REG4, reg);
 
-               pci_read_config_dword(pdev, PCI_DEV_REG5, &reg);
+               reg = sky2_pci_read32(hw, PCI_DEV_REG5);
                /* set all bits to 0 except bits 28 & 27 */
                reg &= P_CTL_TIM_VMAIN_AV_MSK;
-               pci_write_config_dword(pdev, PCI_DEV_REG5, reg);
+               sky2_pci_write32(hw, PCI_DEV_REG5, reg);
 
-               pci_write_config_dword(pdev, PCI_CFG_REG_1, 0);
+               sky2_pci_write32(hw, PCI_CFG_REG_1, 0);
 
                /* Enable workaround for dev 4.107 on Yukon-Ultra & Extreme */
                reg = sky2_read32(hw, B2_GP_IO);
@@ -619,12 +617,11 @@ static void sky2_phy_init(struct sky2_hw *hw, unsigned port)
 
 static void sky2_phy_power(struct sky2_hw *hw, unsigned port, int onoff)
 {
-       struct pci_dev *pdev = hw->pdev;
        u32 reg1;
        static const u32 phy_power[] = { PCI_Y2_PHY1_POWD, PCI_Y2_PHY2_POWD };
        static const u32 coma_mode[] = { PCI_Y2_PHY1_COMA, PCI_Y2_PHY2_COMA };
 
-       pci_read_config_dword(pdev, PCI_DEV_REG1, &reg1);
+       reg1 = sky2_pci_read32(hw, PCI_DEV_REG1);
        /* Turn on/off phy power saving */
        if (onoff)
                reg1 &= ~phy_power[port];
@@ -634,8 +631,8 @@ static void sky2_phy_power(struct sky2_hw *hw, unsigned port, int onoff)
        if (onoff && hw->chip_id == CHIP_ID_YUKON_XL && hw->chip_rev > 1)
                reg1 |= coma_mode[port];
 
-       pci_write_config_dword(pdev, PCI_DEV_REG1, reg1);
-       pci_read_config_dword(pdev, PCI_DEV_REG1, &reg1);
+       sky2_pci_write32(hw, PCI_DEV_REG1, reg1);
+       reg1 = sky2_pci_read32(hw, PCI_DEV_REG1);
 
        udelay(100);
 }
@@ -704,9 +701,9 @@ static void sky2_wol_init(struct sky2_port *sky2)
        sky2_write16(hw, WOL_REGS(port, WOL_CTRL_STAT), ctrl);
 
        /* Turn on legacy PCI-Express PME mode */
-       pci_read_config_dword(hw->pdev, PCI_DEV_REG1, &reg1);
+       reg1 = sky2_pci_read32(hw, PCI_DEV_REG1);
        reg1 |= PCI_Y2_PME_LEGACY;
-       pci_write_config_dword(hw->pdev, PCI_DEV_REG1, reg1);
+       sky2_pci_write32(hw, PCI_DEV_REG1, reg1);
 
        /* block receiver */
        sky2_write8(hw, SK_REG(port, RX_GMF_CTRL_T), GMF_RST_SET);
@@ -848,6 +845,13 @@ static void sky2_mac_init(struct sky2_hw *hw, unsigned port)
                sky2_set_tx_stfwd(hw, port);
        }
 
+       if (hw->chip_id == CHIP_ID_YUKON_FE_P &&
+           hw->chip_rev == CHIP_REV_YU_FE2_A0) {
+               /* disable dynamic watermark */
+               reg = sky2_read16(hw, SK_REG(port, TX_GMF_EA));
+               reg &= ~TX_DYN_WM_ENA;
+               sky2_write16(hw, SK_REG(port, TX_GMF_EA), reg);
+       }
 }
 
 /* Assign Ram Buffer allocation to queue */
@@ -1320,15 +1324,12 @@ static int sky2_up(struct net_device *dev)
         */
        if (otherdev && netif_running(otherdev) &&
            (cap = pci_find_capability(hw->pdev, PCI_CAP_ID_PCIX))) {
-               struct sky2_port *osky2 = netdev_priv(otherdev);
                u16 cmd;
 
-               pci_read_config_word(hw->pdev, cap + PCI_X_CMD, &cmd);
+               cmd = sky2_pci_read16(hw, cap + PCI_X_CMD);
                cmd &= ~PCI_X_CMD_MAX_SPLIT;
-               pci_write_config_word(hw->pdev, cap + PCI_X_CMD, cmd);
+               sky2_pci_write16(hw, cap + PCI_X_CMD, cmd);
 
-               sky2->rx_csum = 0;
-               osky2->rx_csum = 0;
        }
 
        if (netif_msg_ifup(sky2))
@@ -2426,37 +2427,26 @@ static void sky2_hw_intr(struct sky2_hw *hw)
        if (status & (Y2_IS_MST_ERR | Y2_IS_IRQ_STAT)) {
                u16 pci_err;
 
-               pci_read_config_word(pdev, PCI_STATUS, &pci_err);
+               pci_err = sky2_pci_read16(hw, PCI_STATUS);
                if (net_ratelimit())
                        dev_err(&pdev->dev, "PCI hardware error (0x%x)\n",
                                pci_err);
 
-               pci_write_config_word(pdev, PCI_STATUS,
+               sky2_pci_write16(hw, PCI_STATUS,
                                      pci_err | PCI_STATUS_ERROR_BITS);
        }
 
        if (status & Y2_IS_PCI_EXP) {
                /* PCI-Express uncorrectable Error occurred */
-               int aer = pci_find_aer_capability(hw->pdev);
                u32 err;
 
-               if (aer) {
-                       pci_read_config_dword(pdev, aer + PCI_ERR_UNCOR_STATUS,
-                                             &err);
-                       pci_cleanup_aer_uncorrect_error_status(pdev);
-               } else {
-                       /* Either AER not configured, or not working
-                        * because of bad MMCONFIG, so just do recover
-                        * manually.
-                        */
-                       err = sky2_read32(hw, Y2_CFG_AER + PCI_ERR_UNCOR_STATUS);
-                       sky2_write32(hw, Y2_CFG_AER + PCI_ERR_UNCOR_STATUS,
-                                    0xfffffffful);
-               }
-
+               err = sky2_read32(hw, Y2_CFG_AER + PCI_ERR_UNCOR_STATUS);
+               sky2_write32(hw, Y2_CFG_AER + PCI_ERR_UNCOR_STATUS,
+                            0xfffffffful);
                if (net_ratelimit())
                        dev_err(&pdev->dev, "PCI Express error (0x%x)\n", err);
 
+               sky2_read32(hw, Y2_CFG_AER + PCI_ERR_UNCOR_STATUS);
        }
 
        if (status & Y2_HWE_L1_MASK)
@@ -2703,13 +2693,10 @@ static inline u32 sky2_clk2us(const struct sky2_hw *hw, u32 clk)
 
 static int __devinit sky2_init(struct sky2_hw *hw)
 {
-       int rc;
        u8 t8;
 
        /* Enable all clocks and check for bad PCI access */
-       rc = pci_write_config_dword(hw->pdev, PCI_DEV_REG3, 0);
-       if (rc)
-               return rc;
+       sky2_pci_write32(hw, PCI_DEV_REG3, 0);
 
        sky2_write8(hw, B0_CTST, CS_RST_CLR);
 
@@ -2806,32 +2793,21 @@ static void sky2_reset(struct sky2_hw *hw)
        sky2_write8(hw, B2_TST_CTRL1, TST_CFG_WRITE_ON);
 
        /* clear PCI errors, if any */
-       pci_read_config_word(pdev, PCI_STATUS, &status);
+       status = sky2_pci_read16(hw, PCI_STATUS);
        status |= PCI_STATUS_ERROR_BITS;
-       pci_write_config_word(pdev, PCI_STATUS, status);
+       sky2_pci_write16(hw, PCI_STATUS, status);
 
        sky2_write8(hw, B0_CTST, CS_MRST_CLR);
 
        cap = pci_find_capability(pdev, PCI_CAP_ID_EXP);
        if (cap) {
-               if (pci_find_aer_capability(pdev)) {
-                       /* Check for advanced error reporting */
-                       pci_cleanup_aer_uncorrect_error_status(pdev);
-                       pci_cleanup_aer_correct_error_status(pdev);
-               } else {
-                       dev_warn(&pdev->dev,
-                               "PCI Express Advanced Error Reporting"
-                               " not configured or MMCONFIG problem?\n");
-
-                       sky2_write32(hw, Y2_CFG_AER + PCI_ERR_UNCOR_STATUS,
-                                    0xfffffffful);
-               }
+               sky2_write32(hw, Y2_CFG_AER + PCI_ERR_UNCOR_STATUS,
+                            0xfffffffful);
 
                /* If error bit is stuck on ignore it */
                if (sky2_read32(hw, B0_HWE_ISRC) & Y2_IS_PCI_EXP)
                        dev_info(&pdev->dev, "ignoring stuck error report bit\n");
-
-               else if (pci_enable_pcie_error_reporting(pdev))
+               else
                        hwe_mask |= Y2_IS_PCI_EXP;
        }
 
@@ -2930,16 +2906,14 @@ static void sky2_restart(struct work_struct *work)
        int i, err;
 
        rtnl_lock();
-       sky2_write32(hw, B0_IMSK, 0);
-       sky2_read32(hw, B0_IMSK);
-       napi_disable(&hw->napi);
-
        for (i = 0; i < hw->ports; i++) {
                dev = hw->dev[i];
                if (netif_running(dev))
                        sky2_down(dev);
        }
 
+       napi_disable(&hw->napi);
+       sky2_write32(hw, B0_IMSK, 0);
        sky2_reset(hw);
        sky2_write32(hw, B0_IMSK, Y2_IS_BASE);
        napi_enable(&hw->napi);
@@ -3672,32 +3646,33 @@ static int sky2_set_tso(struct net_device *dev, u32 data)
 static int sky2_get_eeprom_len(struct net_device *dev)
 {
        struct sky2_port *sky2 = netdev_priv(dev);
+       struct sky2_hw *hw = sky2->hw;
        u16 reg2;
 
-       pci_read_config_word(sky2->hw->pdev, PCI_DEV_REG2, &reg2);
+       reg2 = sky2_pci_read16(hw, PCI_DEV_REG2);
        return 1 << ( ((reg2 & PCI_VPD_ROM_SZ) >> 14) + 8);
 }
 
-static u32 sky2_vpd_read(struct pci_dev *pdev, int cap, u16 offset)
+static u32 sky2_vpd_read(struct sky2_hw *hw, int cap, u16 offset)
 {
        u32 val;
 
-       pci_write_config_word(pdev, cap + PCI_VPD_ADDR, offset);
+       sky2_pci_write16(hw, cap + PCI_VPD_ADDR, offset);
 
        do {
-               pci_read_config_word(pdev, cap + PCI_VPD_ADDR, &offset);
+               offset = sky2_pci_read16(hw, cap + PCI_VPD_ADDR);
        } while (!(offset & PCI_VPD_ADDR_F));
 
-       pci_read_config_dword(pdev, cap + PCI_VPD_DATA, &val);
+       val = sky2_pci_read32(hw, cap + PCI_VPD_DATA);
        return val;
 }
 
-static void sky2_vpd_write(struct pci_dev *pdev, int cap, u16 offset, u32 val)
+static void sky2_vpd_write(struct sky2_hw *hw, int cap, u16 offset, u32 val)
 {
-       pci_write_config_word(pdev, cap + PCI_VPD_DATA, val);
-       pci_write_config_dword(pdev, cap + PCI_VPD_ADDR, offset | PCI_VPD_ADDR_F);
+       sky2_pci_write16(hw, cap + PCI_VPD_DATA, val);
+       sky2_pci_write32(hw, cap + PCI_VPD_ADDR, offset | PCI_VPD_ADDR_F);
        do {
-               pci_read_config_word(pdev, cap + PCI_VPD_ADDR, &offset);
+               offset = sky2_pci_read16(hw, cap + PCI_VPD_ADDR);
        } while (offset & PCI_VPD_ADDR_F);
 }
 
@@ -3715,7 +3690,7 @@ static int sky2_get_eeprom(struct net_device *dev, struct ethtool_eeprom *eeprom
        eeprom->magic = SKY2_EEPROM_MAGIC;
 
        while (length > 0) {
-               u32 val = sky2_vpd_read(sky2->hw->pdev, cap, offset);
+               u32 val = sky2_vpd_read(sky2->hw, cap, offset);
                int n = min_t(int, length, sizeof(val));
 
                memcpy(data, &val, n);
@@ -3745,10 +3720,10 @@ static int sky2_set_eeprom(struct net_device *dev, struct ethtool_eeprom *eeprom
                int n = min_t(int, length, sizeof(val));
 
                if (n < sizeof(val))
-                       val = sky2_vpd_read(sky2->hw->pdev, cap, offset);
+                       val = sky2_vpd_read(sky2->hw, cap, offset);
                memcpy(&val, data, n);
 
-               sky2_vpd_write(sky2->hw->pdev, cap, offset, val);
+               sky2_vpd_write(sky2->hw, cap, offset, val);
 
                length -= n;
                data += n;
@@ -4013,7 +3988,7 @@ static __devinit struct net_device *sky2_init_netdev(struct sky2_hw *hw,
        sky2->duplex = -1;
        sky2->speed = -1;
        sky2->advertising = sky2_supported_modes(hw);
-       sky2->rx_csum = 1;
+       sky2->rx_csum = (hw->chip_id != CHIP_ID_YUKON_XL);
        sky2->wol = wol;
 
        spin_lock_init(&sky2->phy_lock);
@@ -4184,9 +4159,9 @@ static int __devinit sky2_probe(struct pci_dev *pdev,
         */
        {
                u32 reg;
-               pci_read_config_dword(pdev,PCI_DEV_REG2, &reg);
+               reg = sky2_pci_read32(hw, PCI_DEV_REG2);
                reg &= ~PCI_REV_DESC;
-               pci_write_config_dword(pdev, PCI_DEV_REG2, reg);
+               sky2_pci_write32(hw, PCI_DEV_REG2, reg);
        }
 #endif
 
@@ -4377,7 +4352,7 @@ static int sky2_resume(struct pci_dev *pdev)
        if (hw->chip_id == CHIP_ID_YUKON_EX ||
            hw->chip_id == CHIP_ID_YUKON_EC_U ||
            hw->chip_id == CHIP_ID_YUKON_FE_P)
-               pci_write_config_dword(pdev, PCI_DEV_REG3, 0);
+               sky2_pci_write32(hw, PCI_DEV_REG3, 0);
 
        sky2_reset(hw);
        sky2_write32(hw, B0_IMSK, Y2_IS_BASE);
index 69525fd7908db70e898d51768b0c3dd6a557becb..bc646a47edd2f04b83a78a5b40da085a90915192 100644 (file)
@@ -2128,4 +2128,25 @@ static inline void gma_set_addr(struct sky2_hw *hw, unsigned port, unsigned reg,
        gma_write16(hw, port, reg+4,(u16) addr[2] | ((u16) addr[3] << 8));
        gma_write16(hw, port, reg+8,(u16) addr[4] | ((u16) addr[5] << 8));
 }
+
+/* PCI config space access */
+static inline u32 sky2_pci_read32(const struct sky2_hw *hw, unsigned reg)
+{
+       return sky2_read32(hw, Y2_CFG_SPC + reg);
+}
+
+static inline u16 sky2_pci_read16(const struct sky2_hw *hw, unsigned reg)
+{
+       return sky2_read16(hw, Y2_CFG_SPC + reg);
+}
+
+static inline void sky2_pci_write32(struct sky2_hw *hw, unsigned reg, u32 val)
+{
+       sky2_write32(hw, Y2_CFG_SPC + reg, val);
+}
+
+static inline void sky2_pci_write16(struct sky2_hw *hw, unsigned reg, u16 val)
+{
+       sky2_write16(hw, Y2_CFG_SPC + reg, val);
+}
 #endif
index dd18af0ce67616653d815be1c9bc8102ce6c80b8..76cc1d3adf715fc635a58db2c2b9df40789f7a56 100644 (file)
@@ -428,7 +428,6 @@ static inline void smc911x_drop_pkt(struct net_device *dev)
  */
 static inline void      smc911x_rcv(struct net_device *dev)
 {
-       struct smc911x_local *lp = netdev_priv(dev);
        unsigned long ioaddr = dev->base_addr;
        unsigned int pkt_len, status;
        struct sk_buff *skb;
@@ -473,6 +472,7 @@ static inline void   smc911x_rcv(struct net_device *dev)
                skb_put(skb,pkt_len-4);
 #ifdef SMC_USE_DMA
                {
+               struct smc911x_local *lp = netdev_priv(dev);
                unsigned int fifo;
                /* Lower the FIFO threshold if possible */
                fifo = SMC_GET_FIFO_INT();
@@ -1299,9 +1299,9 @@ smc911x_rx_dma_irq(int dma, void *data)
        PRINT_PKT(skb->data, skb->len);
        dev->last_rx = jiffies;
        skb->protocol = eth_type_trans(skb, dev);
-       netif_rx(skb);
        dev->stats.rx_packets++;
        dev->stats.rx_bytes += skb->len;
+       netif_rx(skb);
 
        spin_lock_irqsave(&lp->lock, flags);
        pkts = (SMC_GET_RX_FIFO_INF() & RX_FIFO_INF_RXSUSED_) >> 16;
@@ -1379,13 +1379,6 @@ static void smc911x_set_multicast_list(struct net_device *dev)
        unsigned int multicast_table[2];
        unsigned int mcr, update_multicast = 0;
        unsigned long flags;
-       /* table for flipping the order of 5 bits */
-       static const unsigned char invert5[] =
-               {0x00, 0x10, 0x08, 0x18, 0x04, 0x14, 0x0C, 0x1C,
-                0x02, 0x12, 0x0A, 0x1A, 0x06, 0x16, 0x0E, 0x1E,
-                0x01, 0x11, 0x09, 0x19, 0x05, 0x15, 0x0D, 0x1D,
-                0x03, 0x13, 0x0B, 0x1B, 0x07, 0x17, 0x0F, 0x1F};
-
 
        DBG(SMC_DEBUG_FUNC, "%s: --> %s\n", dev->name, __FUNCTION__);
 
@@ -1432,7 +1425,7 @@ static void smc911x_set_multicast_list(struct net_device *dev)
 
                cur_addr = dev->mc_list;
                for (i = 0; i < dev->mc_count; i++, cur_addr = cur_addr->next) {
-                       int position;
+                       u32 position;
 
                        /* do we have a pointer here? */
                        if (!cur_addr)
@@ -1442,12 +1435,10 @@ static void smc911x_set_multicast_list(struct net_device *dev)
                        if (!(*cur_addr->dmi_addr & 1))
                                 continue;
 
-                       /* only use the low order bits */
-                       position = crc32_le(~0, cur_addr->dmi_addr, 6) & 0x3f;
+                       /* upper 6 bits are used as hash index */
+                       position = ether_crc(ETH_ALEN, cur_addr->dmi_addr)>>26;
 
-                       /* do some messy swapping to put the bit in the right spot */
-                       multicast_table[invert5[position&0x1F]&0x1] |=
-                               (1<<invert5[(position>>1)&0x1F]);
+                       multicast_table[position>>5] |= 1 << (position&0x1f);
                }
 
                /* be sure I get rid of flags I might have set */
index 16a0edc078fd370b7995d98cbe331aff8cc26785..d04e4fa35206b888d1d65e724d2baf38af1dd3c9 100644 (file)
@@ -37,7 +37,7 @@
   #define SMC_USE_16BIT                0
   #define SMC_USE_32BIT                1
   #define SMC_IRQ_SENSE                IRQF_TRIGGER_FALLING
-#elif CONFIG_SH_MAGIC_PANEL_R2
+#elif defined(CONFIG_SH_MAGIC_PANEL_R2)
   #define SMC_USE_SH_DMA       0
   #define SMC_USE_16BIT                0
   #define SMC_USE_32BIT                1
index db34e1eb67e98e678c08c61ae4dd19daded4b073..07b7f7120e374854be1a296496916690c587cc38 100644 (file)
@@ -55,7 +55,7 @@
 #define SMC_insw(a, r, p, l)   readsw((a) + (r), p, l)
 #define SMC_outsw(a, r, p, l)  writesw((a) + (r), p, l)
 
-#elif defined(CONFIG_BFIN)
+#elif defined(CONFIG_BLACKFIN)
 
 #define SMC_IRQ_FLAGS          IRQF_TRIGGER_HIGH
 #define RPC_LSA_DEFAULT                RPC_LED_100_10
index f6fedcc32de17ce8bca604068d736e38fda45927..68872142530b5e5a7807157c0b8e539494e62a1b 100644 (file)
@@ -2281,14 +2281,12 @@ static void gem_reset_task(struct work_struct *work)
 
        mutex_lock(&gp->pm_mutex);
 
-       napi_disable(&gp->napi);
+       if (gp->opened)
+               napi_disable(&gp->napi);
 
        spin_lock_irq(&gp->lock);
        spin_lock(&gp->tx_lock);
 
-       if (gp->running == 0)
-               goto not_running;
-
        if (gp->running) {
                netif_stop_queue(gp->dev);
 
@@ -2298,13 +2296,14 @@ static void gem_reset_task(struct work_struct *work)
                        gem_set_link_modes(gp);
                netif_wake_queue(gp->dev);
        }
- not_running:
+
        gp->reset_task_pending = 0;
 
        spin_unlock(&gp->tx_lock);
        spin_unlock_irq(&gp->lock);
 
-       napi_enable(&gp->napi);
+       if (gp->opened)
+               napi_enable(&gp->napi);
 
        mutex_unlock(&gp->pm_mutex);
 }
index ca90566d5bcd4f5a0f8cb1e06de329103280ffbe..b4891caeae5ad36aeeb0ed913ecdc85fe012ade3 100644 (file)
@@ -2118,8 +2118,8 @@ static int dmfe_suspend(struct pci_dev *pci_dev, pm_message_t state)
        pci_enable_wake(pci_dev, PCI_D3cold, 1);
 
        /* Power down device*/
-       pci_set_power_state(pci_dev, pci_choose_state (pci_dev,state));
        pci_save_state(pci_dev);
+       pci_set_power_state(pci_dev, pci_choose_state (pci_dev, state));
 
        return 0;
 }
@@ -2129,8 +2129,8 @@ static int dmfe_resume(struct pci_dev *pci_dev)
        struct net_device *dev = pci_get_drvdata(pci_dev);
        u32 tmp;
 
-       pci_restore_state(pci_dev);
        pci_set_power_state(pci_dev, PCI_D0);
+       pci_restore_state(pci_dev);
 
        /* Re-initilize DM910X board */
        dmfe_init_dm910x(dev);
index a3ff270593f1e39d73681119dcfc7234f9f9b212..7f689907ac28485c537559dfb3f90be2898ff741 100644 (file)
@@ -1460,6 +1460,8 @@ static int adjust_enet_interface(struct ucc_geth_private *ugeth)
        if ((ugeth->phy_interface == PHY_INTERFACE_MODE_RMII) ||
            (ugeth->phy_interface == PHY_INTERFACE_MODE_RGMII) ||
            (ugeth->phy_interface == PHY_INTERFACE_MODE_RGMII_ID) ||
+           (ugeth->phy_interface == PHY_INTERFACE_MODE_RGMII_RXID) ||
+           (ugeth->phy_interface == PHY_INTERFACE_MODE_RGMII_TXID) ||
            (ugeth->phy_interface == PHY_INTERFACE_MODE_RTBI)) {
                upsmr |= UPSMR_RPM;
                switch (ugeth->max_speed) {
@@ -1557,6 +1559,8 @@ static void adjust_link(struct net_device *dev)
                                if ((ugeth->phy_interface == PHY_INTERFACE_MODE_RMII) ||
                                    (ugeth->phy_interface == PHY_INTERFACE_MODE_RGMII) ||
                                    (ugeth->phy_interface == PHY_INTERFACE_MODE_RGMII_ID) ||
+                                   (ugeth->phy_interface == PHY_INTERFACE_MODE_RGMII_RXID) ||
+                                   (ugeth->phy_interface == PHY_INTERFACE_MODE_RGMII_TXID) ||
                                    (ugeth->phy_interface == PHY_INTERFACE_MODE_RTBI)) {
                                        if (phydev->speed == SPEED_10)
                                                upsmr |= UPSMR_R10M;
@@ -3795,6 +3799,10 @@ static phy_interface_t to_phy_interface(const char *phy_connection_type)
                return PHY_INTERFACE_MODE_RGMII;
        if (strcasecmp(phy_connection_type, "rgmii-id") == 0)
                return PHY_INTERFACE_MODE_RGMII_ID;
+       if (strcasecmp(phy_connection_type, "rgmii-txid") == 0)
+               return PHY_INTERFACE_MODE_RGMII_TXID;
+       if (strcasecmp(phy_connection_type, "rgmii-rxid") == 0)
+               return PHY_INTERFACE_MODE_RGMII_RXID;
        if (strcasecmp(phy_connection_type, "rtbi") == 0)
                return PHY_INTERFACE_MODE_RTBI;
 
@@ -3889,6 +3897,8 @@ static int ucc_geth_probe(struct of_device* ofdev, const struct of_device_id *ma
                case PHY_INTERFACE_MODE_GMII:
                case PHY_INTERFACE_MODE_RGMII:
                case PHY_INTERFACE_MODE_RGMII_ID:
+               case PHY_INTERFACE_MODE_RGMII_RXID:
+               case PHY_INTERFACE_MODE_RGMII_TXID:
                case PHY_INTERFACE_MODE_TBI:
                case PHY_INTERFACE_MODE_RTBI:
                        max_speed = SPEED_1000;
index 2c685734b7a4e36a988ad3f53553bdafda10c5ff..1ffdd106f4c49a898f61f8a6d5be98da4c1a4d95 100644 (file)
@@ -94,7 +94,7 @@ static void dm_write_async_callback(struct urb *urb)
        struct usb_ctrlrequest *req = (struct usb_ctrlrequest *)urb->context;
 
        if (urb->status < 0)
-               printk(KERN_DEBUG "dm_write_async_callback() failed with %d",
+               printk(KERN_DEBUG "dm_write_async_callback() failed with %d\n",
                       urb->status);
 
        kfree(req);
index 450e29d7a9f34118bc24455abcec788e596e9dff..35cd65d6b9edcdad5080e31ba52cc56b77b6b777 100644 (file)
@@ -1242,6 +1242,9 @@ static int velocity_rx_refill(struct velocity_info *vptr)
 static int velocity_init_rd_ring(struct velocity_info *vptr)
 {
        int ret;
+       int mtu = vptr->dev->mtu;
+
+       vptr->rx_buf_sz = (mtu <= ETH_DATA_LEN) ? PKT_BUF_SZ : mtu + 32;
 
        vptr->rd_info = kcalloc(vptr->options.numrx,
                                sizeof(struct velocity_rd_info), GFP_KERNEL);
@@ -1898,8 +1901,6 @@ static int velocity_open(struct net_device *dev)
        struct velocity_info *vptr = netdev_priv(dev);
        int ret;
 
-       vptr->rx_buf_sz = (dev->mtu <= 1504 ? PKT_BUF_SZ : dev->mtu + 32);
-
        ret = velocity_init_rings(vptr);
        if (ret < 0)
                goto out;
@@ -1978,12 +1979,6 @@ static int velocity_change_mtu(struct net_device *dev, int new_mtu)
                velocity_free_rd_ring(vptr);
 
                dev->mtu = new_mtu;
-               if (new_mtu > 8192)
-                       vptr->rx_buf_sz = 9 * 1024;
-               else if (new_mtu > 4096)
-                       vptr->rx_buf_sz = 8192;
-               else
-                       vptr->rx_buf_sz = 4 * 1024;
 
                ret = velocity_init_rd_ring(vptr);
                if (ret < 0)
index a75be57fb2097374f0af1e69cc371f6559d8fbdc..5413dbf3d4ac25ab688bb1a965ccf981f230addc 100644 (file)
@@ -198,8 +198,8 @@ again:
        if (vi->num < vi->max / 2)
                try_fill_recv(vi);
 
-       /* All done? */
-       if (!skb) {
+       /* Out of packets? */
+       if (received < budget) {
                netif_rx_complete(vi->dev, napi);
                if (unlikely(!vi->rvq->vq_ops->restart(vi->rvq))
                    && netif_rx_reschedule(vi->dev, napi))
@@ -404,8 +404,12 @@ free:
 
 static void virtnet_remove(struct virtio_device *vdev)
 {
-       unregister_netdev(vdev->priv);
-       free_netdev(vdev->priv);
+       struct virtnet_info *vi = vdev->priv;
+
+       vdev->config->del_vq(vi->svq);
+       vdev->config->del_vq(vi->rvq);
+       unregister_netdev(vi->dev);
+       free_netdev(vi->dev);
 }
 
 static struct virtio_device_id id_table[] = {
index 2b17c1dc46f1e69e30535a74f6b69ed5053ea9a4..b45eecc53c4ae1a5505a4460f6f54e01ab325549 100644 (file)
@@ -1566,7 +1566,7 @@ static void b43_release_firmware(struct b43_wldev *dev)
 static void b43_print_fw_helptext(struct b43_wl *wl)
 {
        b43err(wl, "You must go to "
-              "http://linuxwireless.org/en/users/Drivers/bcm43xx#devicefirmware "
+              "http://linuxwireless.org/en/users/Drivers/b43#devicefirmware "
               "and download the correct firmware (version 4).\n");
 }
 
index 3d4ed647c311de9ebb84bc5b6b97c6af281f526e..7ff091e69f056f00a5b741746ea4ffc61972a95b 100644 (file)
@@ -2214,7 +2214,7 @@ int b43_phy_init_tssi2dbm_table(struct b43_wldev *dev)
                }
                dyn_tssi2dbm = kmalloc(64, GFP_KERNEL);
                if (dyn_tssi2dbm == NULL) {
-                       b43err(dev->wl, "Could not allocate memory"
+                       b43err(dev->wl, "Could not allocate memory "
                               "for tssi2dbm table\n");
                        return -ENOMEM;
                }
index 8cb3dc4c474540d5a201a26e83993729bebd703b..83161d9af813a06a73a7733ea1180217be531094 100644 (file)
@@ -996,7 +996,7 @@ int b43legacy_dma_init(struct b43legacy_wldev *dev)
 
        err = ssb_dma_set_mask(dev->dev, dmamask);
        if (err) {
-#ifdef BCM43XX_PIO
+#ifdef CONFIG_B43LEGACY_PIO
                b43legacywarn(dev->wl, "DMA for this device not supported. "
                        "Falling back to PIO\n");
                dev->__using_pio = 1;
index 3bde1e9ab4282e00b34353da4185923a4d0fdacc..32d5e1785bda6d6ace56935fa56e0bdfda9611ea 100644 (file)
@@ -1419,7 +1419,7 @@ static void b43legacy_release_firmware(struct b43legacy_wldev *dev)
 static void b43legacy_print_fw_helptext(struct b43legacy_wl *wl)
 {
        b43legacyerr(wl, "You must go to http://linuxwireless.org/en/users/"
-                    "Drivers/bcm43xx#devicefirmware "
+                    "Drivers/b43#devicefirmware "
                     "and download the correct firmware (version 3).\n");
 }
 
index 22a4b3d0186d5da770c79a34ddf4310c8bebe403..491e518e4aebe91f4683d434f42ac62defcf776b 100644 (file)
@@ -2020,7 +2020,7 @@ int b43legacy_phy_init_tssi2dbm_table(struct b43legacy_wldev *dev)
                        phy->idle_tssi = 62;
                dyn_tssi2dbm = kmalloc(64, GFP_KERNEL);
                if (dyn_tssi2dbm == NULL) {
-                       b43legacyerr(dev->wl, "Could not allocate memory"
+                       b43legacyerr(dev->wl, "Could not allocate memory "
                               "for tssi2dbm table\n");
                        return -ENOMEM;
                }
index b37f1e348700c9c775dce61695bd2bde12101b6e..af3de3343650e9e7690564f21ecba8fda7c8d8df 100644 (file)
@@ -2149,7 +2149,7 @@ int bcm43xx_phy_init_tssi2dbm_table(struct bcm43xx_private *bcm)
                }
                dyn_tssi2dbm = kmalloc(64, GFP_KERNEL);
                if (dyn_tssi2dbm == NULL) {
-                       printk(KERN_ERR PFX "Could not allocate memory"
+                       printk(KERN_ERR PFX "Could not allocate memory "
                                            "for tssi2dbm table\n");
                        return -ENOMEM;
                }
index 465da4f67ce73d0fcfb9b1b9c7440d1b131dd2af..4bdf237f6adc90b61283624de3e5dc2b7a167822 100644 (file)
@@ -2915,6 +2915,10 @@ static void iwl_set_rate(struct iwl_priv *priv)
        int i;
 
        hw = iwl_get_hw_mode(priv, priv->phymode);
+       if (!hw) {
+               IWL_ERROR("Failed to set rate: unable to get hw mode\n");
+               return;
+       }
 
        priv->active_rate = 0;
        priv->active_rate_basic = 0;
@@ -6936,13 +6940,10 @@ static int iwl_mac_add_interface(struct ieee80211_hw *hw,
        DECLARE_MAC_BUF(mac);
 
        IWL_DEBUG_MAC80211("enter: id %d, type %d\n", conf->if_id, conf->type);
-       if (conf->mac_addr)
-               IWL_DEBUG_MAC80211("enter: MAC %s\n",
-                                  print_mac(mac, conf->mac_addr));
 
        if (priv->interface_id) {
                IWL_DEBUG_MAC80211("leave - interface_id != 0\n");
-               return 0;
+               return -EOPNOTSUPP;
        }
 
        spin_lock_irqsave(&priv->lock, flags);
@@ -6951,6 +6952,12 @@ static int iwl_mac_add_interface(struct ieee80211_hw *hw,
        spin_unlock_irqrestore(&priv->lock, flags);
 
        mutex_lock(&priv->mutex);
+
+       if (conf->mac_addr) {
+               IWL_DEBUG_MAC80211("Set: %s\n", print_mac(mac, conf->mac_addr));
+               memcpy(priv->mac_addr, conf->mac_addr, ETH_ALEN);
+       }
+
        iwl_set_mode(priv, conf->type);
 
        IWL_DEBUG_MAC80211("leave\n");
@@ -8270,6 +8277,7 @@ static void iwl_cancel_deferred_work(struct iwl_priv *priv)
 {
        iwl_hw_cancel_deferred_work(priv);
 
+       cancel_delayed_work_sync(&priv->init_alive_start);
        cancel_delayed_work(&priv->scan_check);
        cancel_delayed_work(&priv->alive_start);
        cancel_delayed_work(&priv->post_associate);
index 9918780f5e866fe8286fb85c970b815c981b4968..8f85564ec6fa4b7e0eac18476d661b5d74534e71 100644 (file)
@@ -3003,6 +3003,10 @@ static void iwl_set_rate(struct iwl_priv *priv)
        int i;
 
        hw = iwl_get_hw_mode(priv, priv->phymode);
+       if (!hw) {
+               IWL_ERROR("Failed to set rate: unable to get hw mode\n");
+               return;
+       }
 
        priv->active_rate = 0;
        priv->active_rate_basic = 0;
@@ -7326,9 +7330,6 @@ static int iwl_mac_add_interface(struct ieee80211_hw *hw,
        DECLARE_MAC_BUF(mac);
 
        IWL_DEBUG_MAC80211("enter: id %d, type %d\n", conf->if_id, conf->type);
-       if (conf->mac_addr)
-               IWL_DEBUG_MAC80211("enter: MAC %s\n",
-                                  print_mac(mac, conf->mac_addr));
 
        if (priv->interface_id) {
                IWL_DEBUG_MAC80211("leave - interface_id != 0\n");
@@ -7341,6 +7342,11 @@ static int iwl_mac_add_interface(struct ieee80211_hw *hw,
        spin_unlock_irqrestore(&priv->lock, flags);
 
        mutex_lock(&priv->mutex);
+
+       if (conf->mac_addr) {
+               IWL_DEBUG_MAC80211("Set %s\n", print_mac(mac, conf->mac_addr));
+               memcpy(priv->mac_addr, conf->mac_addr, ETH_ALEN);
+       }
        iwl_set_mode(priv, conf->type);
 
        IWL_DEBUG_MAC80211("leave\n");
@@ -8864,6 +8870,7 @@ static void iwl_cancel_deferred_work(struct iwl_priv *priv)
 {
        iwl_hw_cancel_deferred_work(priv);
 
+       cancel_delayed_work_sync(&priv->init_alive_start);
        cancel_delayed_work(&priv->scan_check);
        cancel_delayed_work(&priv->alive_start);
        cancel_delayed_work(&priv->post_associate);
index ec89dabc412c6560a290ac1f833f339e1da5445d..ba4fc2b3bf0a3a87f41ae6175b00c4593ef0fda4 100644 (file)
@@ -170,7 +170,8 @@ static int if_cs_poll_while_fw_download(struct if_cs_card *card, uint addr, u8 r
 #define IF_CS_H_IC_TX_OVER             0x0001
 #define IF_CS_H_IC_RX_OVER             0x0002
 #define IF_CS_H_IC_DNLD_OVER           0x0004
-#define IF_CS_H_IC_HOST_EVENT          0x0008
+#define IF_CS_H_IC_POWER_DOWN          0x0008
+#define IF_CS_H_IC_HOST_EVENT          0x0010
 #define IF_CS_H_IC_MASK                        0x001f
 
 #define IF_CS_H_INT_MASK               0x00000004
index 5ead08312e1e48b4443ec9cd3fe830dc1288afdd..1823b48a8ba74653c6be98fc3f65caedfdb9f9b0 100644 (file)
@@ -1165,8 +1165,6 @@ wlan_private *libertas_add_card(void *card, struct device *dmdev)
 #ifdef WIRELESS_EXT
        dev->wireless_handlers = (struct iw_handler_def *)&libertas_handler_def;
 #endif
-#define NETIF_F_DYNALLOC 16
-       dev->features |= NETIF_F_DYNALLOC;
        dev->flags |= IFF_BROADCAST | IFF_MULTICAST;
        dev->set_multicast_list = libertas_set_multicast_list;
 
@@ -1348,8 +1346,6 @@ int libertas_add_mesh(wlan_private *priv, struct device *dev)
 #ifdef WIRELESS_EXT
        mesh_dev->wireless_handlers = (struct iw_handler_def *)&mesh_handler_def;
 #endif
-#define NETIF_F_DYNALLOC 16
-
        /* Register virtual mesh interface */
        ret = register_netdev(mesh_dev);
        if (ret) {
index c6f5aa3cb465c4394d2140559eb1cec9c0e1de8b..395b7882d4d65f1e33ee074913e026ca71394812 100644 (file)
@@ -1528,7 +1528,7 @@ static int wlan_set_encodeext(struct net_device *dev,
                        && (ext->key_len != KEY_LEN_WPA_TKIP))
                    || ((alg == IW_ENCODE_ALG_CCMP)
                        && (ext->key_len != KEY_LEN_WPA_AES))) {
-                               lbs_deb_wext("invalid size %d for key of alg"
+                               lbs_deb_wext("invalid size %d for key of alg "
                                       "type %d\n",
                                       ext->key_len,
                                       alg);
index 2402cb8dd3281e07bc636fb4675d114fb5bf2005..d2fa079fbc4c140f0719192d73a984be10f0cd65 100644 (file)
@@ -806,7 +806,7 @@ static int netwave_pcmcia_config(struct pcmcia_device *link) {
     for (i = 0; i < 6; i++) 
        dev->dev_addr[i] = readb(ramBase + NETWAVE_EREG_PA + i);
 
-    printk(KERN_INFO "%s: Netwave: port %#3lx, irq %d, mem %lx"
+    printk(KERN_INFO "%s: Netwave: port %#3lx, irq %d, mem %lx"
           "id %c%c, hw_addr %s\n",
           dev->name, dev->base_addr, dev->irq,
           (u_long) ramBase,
index 755482a5a9382793b6f942d702871ffe2ddb530f..60d286eb0b8bd22e3f04d9ab2258c88cf99a4605 100644 (file)
@@ -308,7 +308,7 @@ static int p54u_read_eeprom(struct ieee80211_hw *dev)
 
        buf = kmalloc(0x2020, GFP_KERNEL);
        if (!buf) {
-               printk(KERN_ERR "prism54usb: cannot allocate memory for"
+               printk(KERN_ERR "prism54usb: cannot allocate memory for "
                       "eeprom readback!\n");
                return -ENOMEM;
        }
index 277a020b35e9039c994e583c1c0a276c11511e1a..50775f9234cc72fb8a2dc34bf52ff59fc1c1fb53 100644 (file)
@@ -1032,7 +1032,7 @@ static void rt2500usb_write_tx_desc(struct rt2x00_dev *rt2x00dev,
 }
 
 static int rt2500usb_get_tx_data_len(struct rt2x00_dev *rt2x00dev,
-                                    int maxpacket, struct sk_buff *skb)
+                                    struct sk_buff *skb)
 {
        int length;
 
@@ -1041,7 +1041,7 @@ static int rt2500usb_get_tx_data_len(struct rt2x00_dev *rt2x00dev,
         * but it must _not_ be a multiple of the USB packet size.
         */
        length = roundup(skb->len, 2);
-       length += (2 * !(length % maxpacket));
+       length += (2 * !(length % rt2x00dev->usb_maxpacket));
 
        return length;
 }
@@ -1643,7 +1643,6 @@ static int rt2500usb_beacon_update(struct ieee80211_hw *hw,
        struct data_entry *beacon;
        struct data_entry *guardian;
        int pipe = usb_sndbulkpipe(usb_dev, 1);
-       int max_packet = usb_maxpacket(usb_dev, pipe, 1);
        int length;
 
        /*
@@ -1672,7 +1671,7 @@ static int rt2500usb_beacon_update(struct ieee80211_hw *hw,
                                                         ring->desc_size),
                                skb->len - ring->desc_size, control);
 
-       length = rt2500usb_get_tx_data_len(rt2x00dev, max_packet, skb);
+       length = rt2500usb_get_tx_data_len(rt2x00dev, skb);
 
        usb_fill_bulk_urb(beacon->priv, usb_dev, pipe,
                          skb->data, length, rt2500usb_beacondone, beacon);
index d1ad5251a77a89d1f0afbee37c2ebf1dd77f328a..c8f16f161c285e5a90069f797fc980a648a465b0 100644 (file)
@@ -418,7 +418,7 @@ struct rt2x00lib_ops {
        int (*write_tx_data) (struct rt2x00_dev *rt2x00dev,
                              struct data_ring *ring, struct sk_buff *skb,
                              struct ieee80211_tx_control *control);
-       int (*get_tx_data_len) (struct rt2x00_dev *rt2x00dev, int maxpacket,
+       int (*get_tx_data_len) (struct rt2x00_dev *rt2x00dev,
                                struct sk_buff *skb);
        void (*kick_tx_queue) (struct rt2x00_dev *rt2x00dev,
                               unsigned int queue);
@@ -598,6 +598,11 @@ struct rt2x00_dev {
         */
        u32 *rf;
 
+       /*
+        * USB Max frame size (for rt2500usb & rt73usb).
+        */
+       u16 usb_maxpacket;
+
        /*
         * Current TX power value.
         */
index 73cc726c4046724f01f6e5b9e1b88b5eaf8dc0d2..1f5675dd329f78963fbd94a77976ab57687570f2 100644 (file)
@@ -159,7 +159,6 @@ int rt2x00usb_write_tx_data(struct rt2x00_dev *rt2x00dev,
            interface_to_usbdev(rt2x00dev_usb(rt2x00dev));
        struct data_entry *entry = rt2x00_get_data_entry(ring);
        int pipe = usb_sndbulkpipe(usb_dev, 1);
-       int max_packet = usb_maxpacket(usb_dev, pipe, 1);
        u32 length;
 
        if (rt2x00_ring_full(ring)) {
@@ -194,8 +193,7 @@ int rt2x00usb_write_tx_data(struct rt2x00_dev *rt2x00dev,
         * length of the data to usb_fill_bulk_urb. Pass the skb
         * to the driver to determine what the length should be.
         */
-       length = rt2x00dev->ops->lib->get_tx_data_len(rt2x00dev,
-                                                     max_packet, skb);
+       length = rt2x00dev->ops->lib->get_tx_data_len(rt2x00dev, skb);
 
        /*
         * Initialize URB and send the frame to the device.
@@ -490,6 +488,11 @@ int rt2x00usb_probe(struct usb_interface *usb_intf,
        rt2x00dev->ops = ops;
        rt2x00dev->hw = hw;
 
+       rt2x00dev->usb_maxpacket =
+           usb_maxpacket(usb_dev, usb_sndbulkpipe(usb_dev, 1), 1);
+       if (!rt2x00dev->usb_maxpacket)
+               rt2x00dev->usb_maxpacket = 1;
+
        retval = rt2x00usb_alloc_reg(rt2x00dev);
        if (retval)
                goto exit_free_device;
index dc640bf6b5ebe86f3b4ee99cb29e871949e8da8c..c0671c2e6e7301e93d9909c864fbda8b651a140b 100644 (file)
@@ -1251,7 +1251,7 @@ static void rt73usb_write_tx_desc(struct rt2x00_dev *rt2x00dev,
 }
 
 static int rt73usb_get_tx_data_len(struct rt2x00_dev *rt2x00dev,
-                                  int maxpacket, struct sk_buff *skb)
+                                  struct sk_buff *skb)
 {
        int length;
 
@@ -1260,7 +1260,7 @@ static int rt73usb_get_tx_data_len(struct rt2x00_dev *rt2x00dev,
         * but it must _not_ be a multiple of the USB packet size.
         */
        length = roundup(skb->len, 4);
-       length += (4 * !(length % maxpacket));
+       length += (4 * !(length % rt2x00dev->usb_maxpacket));
 
        return length;
 }
index 5eace9e66e14c9bd86c15414b186061f6f345ab4..66ce61048361ab665d6a7359d0cb7d43dcabbb38 100644 (file)
@@ -768,9 +768,13 @@ lba_fixup_bus(struct pci_bus *bus)
                                DBG("lba_fixup_bus() WTF? 0x%lx [%lx/%lx] XXX",
                                        res->flags, res->start, res->end);
                        }
-                       if ((i != PCI_ROM_RESOURCE) ||
-                           (res->flags & IORESOURCE_ROM_ENABLE))
-                               pci_claim_resource(dev, i);
+
+                       /*
+                       ** FIXME: this will result in whinging for devices
+                       ** that share expansion ROMs (think quad tulip), but
+                       ** isn't harmful.
+                       */
+                       pci_claim_resource(dev, i);
                }
 
 #ifdef FBB_SUPPORT
index f6cc0c5b56572715425a7a535f2c2444c25a0ca6..1ef417cca2db2a370be207ce8db51146e5386cd5 100644 (file)
@@ -66,7 +66,7 @@ struct slot {
        char name[SLOT_NAME_SIZE];
 };
 
-/**
+/*
  * struct acpiphp_bridge - PCI bridge information
  *
  * for each bridge device in ACPI namespace
@@ -97,7 +97,7 @@ struct acpiphp_bridge {
 };
 
 
-/**
+/*
  * struct acpiphp_slot - PCI slot information
  *
  * PCI slot information for each *physical* PCI slot
@@ -118,7 +118,7 @@ struct acpiphp_slot {
 };
 
 
-/**
+/*
  * struct acpiphp_func - PCI function information
  *
  * PCI function information for each object in ACPI namespace
@@ -137,7 +137,7 @@ struct acpiphp_func {
        u32             flags;          /* see below */
 };
 
-/**
+/*
  * struct acpiphp_attention_info - device specific attention registration
  *
  * ACPI has no generic method of setting/getting attention status
index a0ca63adad5ac41c3df29fc7171b814d5db4709a..c8c263875c2179572812709eed979b5b47067931 100644 (file)
@@ -91,10 +91,10 @@ static struct hotplug_slot_ops acpi_hotplug_slot_ops = {
  * acpiphp_register_attention - set attention LED callback
  * @info: must be completely filled with LED callbacks
  *
- * Description: this is used to register a hardware specific ACPI
+ * Description: This is used to register a hardware specific ACPI
  * driver that manipulates the attention LED.  All the fields in
  * info must be set.
- **/
+ */
 int acpiphp_register_attention(struct acpiphp_attention_info *info)
 {
        int retval = -EINVAL;
@@ -112,10 +112,10 @@ int acpiphp_register_attention(struct acpiphp_attention_info *info)
  * acpiphp_unregister_attention - unset attention LED callback
  * @info: must match the pointer used to register
  *
- * Description: this is used to un-register a hardware specific acpi
+ * Description: This is used to un-register a hardware specific acpi
  * driver that manipulates the attention LED.  The pointer to the 
  * info struct must be the same as the one used to set it.
- **/
+ */
 int acpiphp_unregister_attention(struct acpiphp_attention_info *info)
 {
        int retval = -EINVAL;
@@ -133,7 +133,6 @@ int acpiphp_unregister_attention(struct acpiphp_attention_info *info)
  * @hotplug_slot: slot to enable
  *
  * Actual tasks are done in acpiphp_enable_slot()
- *
  */
 static int enable_slot(struct hotplug_slot *hotplug_slot)
 {
@@ -151,7 +150,6 @@ static int enable_slot(struct hotplug_slot *hotplug_slot)
  * @hotplug_slot: slot to disable
  *
  * Actual tasks are done in acpiphp_disable_slot()
- *
  */
 static int disable_slot(struct hotplug_slot *hotplug_slot)
 {
@@ -168,15 +166,15 @@ static int disable_slot(struct hotplug_slot *hotplug_slot)
 }
 
 
- /**
 * set_attention_status - set attention LED
+/**
+ * set_attention_status - set attention LED
  * @hotplug_slot: slot to set attention LED on
  * @status: value to set attention LED to (0 or 1)
  *
  * attention status LED, so we use a callback that
  * was registered with us.  This allows hardware specific
  * ACPI implementations to blink the light for us.
- **/
+ */
  static int set_attention_status(struct hotplug_slot *hotplug_slot, u8 status)
  {
        int retval = -ENODEV;
@@ -199,7 +197,6 @@ static int disable_slot(struct hotplug_slot *hotplug_slot)
  *
  * Some platforms may not implement _STA method properly.
  * In that case, the value returned may not be reliable.
- *
  */
 static int get_power_status(struct hotplug_slot *hotplug_slot, u8 *value)
 {
@@ -213,7 +210,7 @@ static int get_power_status(struct hotplug_slot *hotplug_slot, u8 *value)
 }
 
 
- /**
+/**
  * get_attention_status - get attention LED status
  * @hotplug_slot: slot to get status from
  * @value: returns with value of attention LED
@@ -221,8 +218,8 @@ static int get_power_status(struct hotplug_slot *hotplug_slot, u8 *value)
  * ACPI doesn't have known method to determine the state
  * of the attention status LED, so we use a callback that
  * was registered with us.  This allows hardware specific
- * ACPI implementations to determine its state
- **/
+ * ACPI implementations to determine its state.
+ */
 static int get_attention_status(struct hotplug_slot *hotplug_slot, u8 *value)
 {
        int retval = -EINVAL;
@@ -244,8 +241,7 @@ static int get_attention_status(struct hotplug_slot *hotplug_slot, u8 *value)
  * @value: pointer to store status
  *
  * ACPI doesn't provide any formal means to access latch status.
- * Instead, we fake latch status from _STA
- *
+ * Instead, we fake latch status from _STA.
  */
 static int get_latch_status(struct hotplug_slot *hotplug_slot, u8 *value)
 {
@@ -265,8 +261,7 @@ static int get_latch_status(struct hotplug_slot *hotplug_slot, u8 *value)
  * @value: pointer to store status
  *
  * ACPI doesn't provide any formal means to access adapter status.
- * Instead, we fake adapter status from _STA
- *
+ * Instead, we fake adapter status from _STA.
  */
 static int get_adapter_status(struct hotplug_slot *hotplug_slot, u8 *value)
 {
index 1e125b56c9a97ccba476eed8566b04fedaf3cd01..ff1b1c71291a84412086b25db6b99c0a1efc29d3 100644 (file)
@@ -82,7 +82,6 @@ static void handle_hotplug_event_func(acpi_handle handle, u32 type, void *contex
  *  2. has _PS0 method
  *  3. has _PS3 method
  *  4. ..
- *
  */
 static int is_ejectable(acpi_handle handle)
 {
@@ -986,10 +985,8 @@ static int power_off_slot(struct acpiphp_slot *slot)
 
 
 /**
- * acpiphp_max_busnr - return the highest reserved bus number under
- * the given bus.
+ * acpiphp_max_busnr - return the highest reserved bus number under the given bus.
  * @bus: bus to start search with
- *
  */
 static unsigned char acpiphp_max_busnr(struct pci_bus *bus)
 {
@@ -1018,7 +1015,6 @@ static unsigned char acpiphp_max_busnr(struct pci_bus *bus)
 /**
  * acpiphp_bus_add - add a new bus to acpi subsystem
  * @func: acpiphp_func of the bridge
- *
  */
 static int acpiphp_bus_add(struct acpiphp_func *func)
 {
@@ -1063,7 +1059,6 @@ acpiphp_bus_add_out:
 /**
  * acpiphp_bus_trim - trim a bus from acpi subsystem
  * @handle: handle to acpi namespace
- *
  */
 static int acpiphp_bus_trim(acpi_handle handle)
 {
@@ -1089,7 +1084,6 @@ static int acpiphp_bus_trim(acpi_handle handle)
  *
  * This function should be called per *physical slot*,
  * not per each slot object in ACPI namespace.
- *
  */
 static int enable_device(struct acpiphp_slot *slot)
 {
@@ -1185,6 +1179,7 @@ static void disable_bridges(struct pci_bus *bus)
 
 /**
  * disable_device - disable a slot
+ * @slot: ACPI PHP slot
  */
 static int disable_device(struct acpiphp_slot *slot)
 {
@@ -1240,14 +1235,15 @@ static int disable_device(struct acpiphp_slot *slot)
 
 /**
  * get_slot_status - get ACPI slot status
+ * @slot: ACPI PHP slot
  *
- * if a slot has _STA for each function and if any one of them
- * returned non-zero status, return it
+ * If a slot has _STA for each function and if any one of them
+ * returned non-zero status, return it.
  *
- * if a slot doesn't have _STA and if any one of its functions'
- * configuration space is configured, return 0x0f as a _STA
+ * If a slot doesn't have _STA and if any one of its functions'
+ * configuration space is configured, return 0x0f as a _STA.
  *
- * otherwise return 0
+ * Otherwise return 0.
  */
 static unsigned int get_slot_status(struct acpiphp_slot *slot)
 {
@@ -1281,6 +1277,7 @@ static unsigned int get_slot_status(struct acpiphp_slot *slot)
 
 /**
  * acpiphp_eject_slot - physically eject the slot
+ * @slot: ACPI PHP slot
  */
 int acpiphp_eject_slot(struct acpiphp_slot *slot)
 {
@@ -1314,6 +1311,7 @@ int acpiphp_eject_slot(struct acpiphp_slot *slot)
 
 /**
  * acpiphp_check_bridge - re-enumerate devices
+ * @bridge: where to begin re-enumeration
  *
  * Iterate over all slots under this bridge and make sure that if a
  * card is present they are enabled, and if not they are disabled.
@@ -1538,13 +1536,11 @@ check_sub_bridges(acpi_handle handle, u32 lvl, void *context, void **rv)
 
 /**
  * handle_hotplug_event_bridge - handle ACPI event on bridges
- *
  * @handle: Notify()'ed acpi_handle
  * @type: Notify code
  * @context: pointer to acpiphp_bridge structure
  *
- * handles ACPI event notification on {host,p2p} bridges
- *
+ * Handles ACPI event notification on {host,p2p} bridges.
  */
 static void handle_hotplug_event_bridge(acpi_handle handle, u32 type, void *context)
 {
@@ -1634,13 +1630,11 @@ static void handle_hotplug_event_bridge(acpi_handle handle, u32 type, void *cont
 
 /**
  * handle_hotplug_event_func - handle ACPI event on functions (i.e. slots)
- *
  * @handle: Notify()'ed acpi_handle
  * @type: Notify code
  * @context: pointer to acpiphp_func structure
  *
- * handles ACPI event notification on slots
- *
+ * Handles ACPI event notification on slots.
  */
 static void handle_hotplug_event_func(acpi_handle handle, u32 type, void *context)
 {
@@ -1705,7 +1699,6 @@ static struct acpi_pci_driver acpi_pci_hp_driver = {
 
 /**
  * acpiphp_glue_init - initializes all PCI hotplug - ACPI glue data structures
- *
  */
 int __init acpiphp_glue_init(void)
 {
@@ -1726,7 +1719,7 @@ int __init acpiphp_glue_init(void)
 /**
  * acpiphp_glue_exit - terminates all PCI hotplug - ACPI glue data structures
  *
- * This function frees all data allocated in acpiphp_glue_init()
+ * This function frees all data allocated in acpiphp_glue_init().
  */
 void  acpiphp_glue_exit(void)
 {
@@ -1760,7 +1753,6 @@ int __init acpiphp_get_num_slots(void)
  * acpiphp_for_each_slot - call function for each slot
  * @fn: callback function
  * @data: context to be passed to callback function
- *
  */
 static int acpiphp_for_each_slot(acpiphp_callback fn, void *data)
 {
@@ -1786,6 +1778,7 @@ static int acpiphp_for_each_slot(acpiphp_callback fn, void *data)
 
 /**
  * acpiphp_enable_slot - power on slot
+ * @slot: ACPI PHP slot
  */
 int acpiphp_enable_slot(struct acpiphp_slot *slot)
 {
@@ -1815,6 +1808,7 @@ int acpiphp_enable_slot(struct acpiphp_slot *slot)
 
 /**
  * acpiphp_disable_slot - power off slot
+ * @slot: ACPI PHP slot
  */
 int acpiphp_disable_slot(struct acpiphp_slot *slot)
 {
index 56829f82be4a1f34fa5c0fd11a75f99220debc27..47d26b65e99a88265db14a5004a429658b6b287e 100644 (file)
@@ -134,11 +134,11 @@ static struct acpiphp_attention_info ibm_attention_info =
  * ibm_slot_from_id - workaround for bad ibm hardware
  * @id: the slot number that linux refers to the slot by
  *
- * Description: this method returns the aCPI slot descriptor
+ * Description: This method returns the aCPI slot descriptor
  * corresponding to the Linux slot number.  This descriptor
  * has info about the aPCI slot id and attention status.
  * This descriptor must be freed using kfree when done.
- **/
+ */
 static union apci_descriptor *ibm_slot_from_id(int id)
 {
        int ind = 0, size;
@@ -173,9 +173,9 @@ ibm_slot_done:
  * @slot: the hotplug_slot to work with
  * @status: what to set the LED to (0 or 1)
  *
- * Description: this method is registered with the acpiphp module as a
- * callback to do the device specific task of setting the LED status
- **/
+ * Description: This method is registered with the acpiphp module as a
+ * callback to do the device specific task of setting the LED status.
+ */
 static int ibm_set_attention_status(struct hotplug_slot *slot, u8 status)
 {
        union acpi_object args[2]; 
@@ -213,13 +213,13 @@ static int ibm_set_attention_status(struct hotplug_slot *slot, u8 status)
  * @slot: the hotplug_slot to work with
  * @status: returns what the LED is set to (0 or 1)
  *
- * Description: this method is registered with the acpiphp module as a
- * callback to do the device specific task of getting the LED status
+ * Description: This method is registered with the acpiphp module as a
+ * callback to do the device specific task of getting the LED status.
  * 
  * Because there is no direct method of getting the LED status directly
  * from an ACPI call, we read the aPCI table and parse out our
  * slot descriptor to read the status from that.
- **/
+ */
 static int ibm_get_attention_status(struct hotplug_slot *slot, u8 *status)
 {
        union apci_descriptor *ibm_slot;
@@ -245,8 +245,8 @@ static int ibm_get_attention_status(struct hotplug_slot *slot, u8 *status)
  * @event: the event info (device specific)
  * @context: passed context (our notification struct)
  *
- * Description: this method is registered as a callback with the ACPI
- * subsystem it is called when this device has an event to notify the OS of
+ * Description: This method is registered as a callback with the ACPI
+ * subsystem it is called when this device has an event to notify the OS of.
  *
  * The events actually come from the device as two events that get
  * synthesized into one event with data by this function.  The event
@@ -256,7 +256,7 @@ static int ibm_get_attention_status(struct hotplug_slot *slot, u8 *status)
  * From section 5.6.2.2 of the ACPI 2.0 spec, I understand that the OSPM will
  * only re-enable the interrupt that causes this event AFTER this method
  * has returned, thereby enforcing serial access for the notification struct.
- **/
+ */
 static void ibm_handle_events(acpi_handle handle, u32 event, void *context)
 {
        u8 detail = event & 0x0f;
@@ -279,16 +279,16 @@ static void ibm_handle_events(acpi_handle handle, u32 event, void *context)
  * ibm_get_table_from_acpi - reads the APLS buffer from ACPI
  * @bufp: address to pointer to allocate for the table
  *
- * Description: this method reads the APLS buffer in from ACPI and
+ * Description: This method reads the APLS buffer in from ACPI and
  * stores the "stripped" table into a single buffer
- * it allocates and passes the address back in bufp
+ * it allocates and passes the address back in bufp.
  *
  * If NULL is passed in as buffer, this method only calculates
  * the size of the table and returns that without filling
- * in the buffer
+ * in the buffer.
  *
- * returns < 0 on error or the size of the table on success
- **/
+ * Returns < 0 on error or the size of the table on success.
+ */
 static int ibm_get_table_from_acpi(char **bufp)
 {
        union acpi_object *package;
@@ -349,17 +349,18 @@ read_table_done:
 /**
  * ibm_read_apci_table - callback for the sysfs apci_table file
  * @kobj: the kobject this binary attribute is a part of
+ * @bin_attr: struct bin_attribute for this file
  * @buffer: the kernel space buffer to fill
  * @pos: the offset into the file
  * @size: the number of bytes requested
  *
- * Description: gets registered with sysfs as the reader callback
- * to be executed when /sys/bus/pci/slots/apci_table gets read
+ * Description: Gets registered with sysfs as the reader callback
+ * to be executed when /sys/bus/pci/slots/apci_table gets read.
  *
  * Since we don't get notified on open and close for this file,
  * things get really tricky here...
- * our solution is to only allow reading the table in all at once
- **/
+ * our solution is to only allow reading the table in all at once.
+ */
 static ssize_t ibm_read_apci_table(struct kobject *kobj,
                                   struct bin_attribute *bin_attr,
                                   char *buffer, loff_t pos, size_t size)
@@ -385,10 +386,10 @@ static ssize_t ibm_read_apci_table(struct kobject *kobj,
  * @context: a pointer to our handle to fill when we find the device
  * @rv: a return value to fill if desired
  *
- * Description: used as a callback when calling acpi_walk_namespace
+ * Description: Used as a callback when calling acpi_walk_namespace
  * to find our device.  When this method returns non-zero
- * acpi_walk_namespace quits its search and returns our value
- **/
+ * acpi_walk_namespace quits its search and returns our value.
+ */
 static acpi_status __init ibm_find_acpi_device(acpi_handle handle,
                u32 lvl, void *context, void **rv)
 {
index a96b739b2d35e2ccf1453ffeb92550850fbe3b89..74178875b9494920801c3a378a8b5bb344c5d0e4 100644 (file)
@@ -117,12 +117,10 @@ static inline int is_slot66mhz(struct slot *slot)
 
 /**
  * detect_SMBIOS_pointer - find the System Management BIOS Table in mem region.
- *
  * @begin: begin pointer for region to be scanned.
  * @end: end pointer for region to be scanned.
  *
- * Returns pointer to the head of the SMBIOS tables (or NULL)
- *
+ * Returns pointer to the head of the SMBIOS tables (or %NULL).
  */
 static void __iomem * detect_SMBIOS_pointer(void __iomem *begin, void __iomem *end)
 {
@@ -157,9 +155,9 @@ static void __iomem * detect_SMBIOS_pointer(void __iomem *begin, void __iomem *e
 
 /**
  * init_SERR - Initializes the per slot SERR generation.
+ * @ctrl: controller to use
  *
  * For unexpected switch opens
- *
  */
 static int init_SERR(struct controller * ctrl)
 {
@@ -224,14 +222,15 @@ static int pci_print_IRQ_route (void)
 
 /**
  * get_subsequent_smbios_entry: get the next entry from bios table.
- *
- * Gets the first entry if previous == NULL
- * Otherwise, returns the next entry
- * Uses global SMBIOS Table pointer
- *
+ * @smbios_start: where to start in the SMBIOS table
+ * @smbios_table: location of the SMBIOS table
  * @curr: %NULL or pointer to previously returned structure
  *
- * returns a pointer to an SMBIOS structure or NULL if none found
+ * Gets the first entry if previous == NULL;
+ * otherwise, returns the next entry.
+ * Uses global SMBIOS Table pointer.
+ *
+ * Returns a pointer to an SMBIOS structure or NULL if none found.
  */
 static void __iomem *get_subsequent_smbios_entry(void __iomem *smbios_start,
                                                void __iomem *smbios_table,
@@ -272,17 +271,18 @@ static void __iomem *get_subsequent_smbios_entry(void __iomem *smbios_start,
 
 
 /**
- * get_SMBIOS_entry
- *
- * @type:SMBIOS structure type to be returned
+ * get_SMBIOS_entry - return the requested SMBIOS entry or %NULL
+ * @smbios_start: where to start in the SMBIOS table
+ * @smbios_table: location of the SMBIOS table
+ * @type: SMBIOS structure type to be returned
  * @previous: %NULL or pointer to previously returned structure
  *
- * Gets the first entry of the specified type if previous == NULL
+ * Gets the first entry of the specified type if previous == %NULL;
  * Otherwise, returns the next entry of the given type.
- * Uses global SMBIOS Table pointer
- * Uses get_subsequent_smbios_entry
+ * Uses global SMBIOS Table pointer.
+ * Uses get_subsequent_smbios_entry.
  *
- * returns a pointer to an SMBIOS structure or %NULL if none found
+ * Returns a pointer to an SMBIOS structure or %NULL if none found.
  */
 static void __iomem *get_SMBIOS_entry(void __iomem *smbios_start,
                                        void __iomem *smbios_table,
@@ -581,7 +581,9 @@ get_slot_mapping(struct pci_bus *bus, u8 bus_num, u8 dev_num, u8 *slot)
 
 /**
  * cpqhp_set_attention_status - Turns the Amber LED for a slot on or off
- *
+ * @ctrl: struct controller to use
+ * @func: PCI device/function info
+ * @status: LED control flag: 1 = LED on, 0 = LED off
  */
 static int
 cpqhp_set_attention_status(struct controller *ctrl, struct pci_func *func,
@@ -621,7 +623,8 @@ cpqhp_set_attention_status(struct controller *ctrl, struct pci_func *func,
 
 /**
  * set_attention_status - Turns the Amber LED for a slot on or off
- *
+ * @hotplug_slot: slot to change LED on
+ * @status: LED control flag
  */
 static int set_attention_status (struct hotplug_slot *hotplug_slot, u8 status)
 {
index 856d57b4d6044539c50b4f631107c03f1df5891d..4018420c6f95e1b3c97ef90e9042201133f75ed7 100644 (file)
@@ -123,7 +123,7 @@ static u8 handle_switch_change(u8 change, struct controller * ctrl)
 }
 
 /**
- * cpqhp_find_slot: find the struct slot of given device
+ * cpqhp_find_slot - find the struct slot of given device
  * @ctrl: scan lots of this controller
  * @device: the device id to find
  */
@@ -305,9 +305,8 @@ static u8 handle_power_fault(u8 change, struct controller * ctrl)
 
 
 /**
- * sort_by_size: sort nodes on the list by their length, smallest first.
+ * sort_by_size - sort nodes on the list by their length, smallest first.
  * @head: list to sort
- *
  */
 static int sort_by_size(struct pci_resource **head)
 {
@@ -354,9 +353,8 @@ static int sort_by_size(struct pci_resource **head)
 
 
 /**
- * sort_by_max_size: sort nodes on the list by their length, largest first.
+ * sort_by_max_size - sort nodes on the list by their length, largest first.
  * @head: list to sort
- *
  */
 static int sort_by_max_size(struct pci_resource **head)
 {
@@ -403,8 +401,10 @@ static int sort_by_max_size(struct pci_resource **head)
 
 
 /**
- * do_pre_bridge_resource_split: find node of resources that are unused
- *
+ * do_pre_bridge_resource_split - find node of resources that are unused
+ * @head: new list head
+ * @orig_head: original list head
+ * @alignment: max node size (?)
  */
 static struct pci_resource *do_pre_bridge_resource_split(struct pci_resource **head,
                                struct pci_resource **orig_head, u32 alignment)
@@ -477,8 +477,9 @@ static struct pci_resource *do_pre_bridge_resource_split(struct pci_resource **h
 
 
 /**
- * do_bridge_resource_split: find one node of resources that aren't in use
- *
+ * do_bridge_resource_split - find one node of resources that aren't in use
+ * @head: list head
+ * @alignment: max node size (?)
  */
 static struct pci_resource *do_bridge_resource_split(struct pci_resource **head, u32 alignment)
 {
@@ -525,14 +526,13 @@ error:
 
 
 /**
- * get_io_resource: find first node of given size not in ISA aliasing window.
+ * get_io_resource - find first node of given size not in ISA aliasing window.
  * @head: list to search
  * @size: size of node to find, must be a power of two.
  *
- * Description: this function sorts the resource list by size and then returns
+ * Description: This function sorts the resource list by size and then returns
  * returns the first node of "size" length that is not in the ISA aliasing
  * window.  If it finds a node larger than "size" it will split it up.
- *
  */
 static struct pci_resource *get_io_resource(struct pci_resource **head, u32 size)
 {
@@ -620,7 +620,7 @@ static struct pci_resource *get_io_resource(struct pci_resource **head, u32 size
 
 
 /**
- * get_max_resource: get largest node which has at least the given size.
+ * get_max_resource - get largest node which has at least the given size.
  * @head: the list to search the node in
  * @size: the minimum size of the node to find
  *
@@ -712,7 +712,7 @@ static struct pci_resource *get_max_resource(struct pci_resource **head, u32 siz
 
 
 /**
- * get_resource: find resource of given size and split up larger ones.
+ * get_resource - find resource of given size and split up larger ones.
  * @head: the list to search for resources
  * @size: the size limit to use
  *
@@ -804,14 +804,14 @@ static struct pci_resource *get_resource(struct pci_resource **head, u32 size)
 
 
 /**
- * cpqhp_resource_sort_and_combine: sort nodes by base addresses and clean up.
+ * cpqhp_resource_sort_and_combine - sort nodes by base addresses and clean up
  * @head: the list to sort and clean up
  *
  * Description: Sorts all of the nodes in the list in ascending order by
  * their base addresses.  Also does garbage collection by
  * combining adjacent nodes.
  *
- * returns 0 if success
+ * Returns %0 if success.
  */
 int cpqhp_resource_sort_and_combine(struct pci_resource **head)
 {
@@ -951,9 +951,9 @@ irqreturn_t cpqhp_ctrl_intr(int IRQ, void *data)
 
 /**
  * cpqhp_slot_create - Creates a node and adds it to the proper bus.
- * @busnumber - bus where new node is to be located
+ * @busnumber: bus where new node is to be located
  *
- * Returns pointer to the new node or NULL if unsuccessful
+ * Returns pointer to the new node or %NULL if unsuccessful.
  */
 struct pci_func *cpqhp_slot_create(u8 busnumber)
 {
@@ -986,7 +986,7 @@ struct pci_func *cpqhp_slot_create(u8 busnumber)
  * slot_remove - Removes a node from the linked list of slots.
  * @old_slot: slot to remove
  *
- * Returns 0 if successful, !0 otherwise.
+ * Returns %0 if successful, !0 otherwise.
  */
 static int slot_remove(struct pci_func * old_slot)
 {
@@ -1026,7 +1026,7 @@ static int slot_remove(struct pci_func * old_slot)
  * bridge_slot_remove - Removes a node from the linked list of slots.
  * @bridge: bridge to remove
  *
- * Returns 0 if successful, !0 otherwise.
+ * Returns %0 if successful, !0 otherwise.
  */
 static int bridge_slot_remove(struct pci_func *bridge)
 {
@@ -1071,7 +1071,7 @@ out:
  * cpqhp_slot_find - Looks for a node by bus, and device, multiple functions accessed
  * @bus: bus to find
  * @device: device to find
- * @index: is 0 for first function found, 1 for the second...
+ * @index: is %0 for first function found, %1 for the second...
  *
  * Returns pointer to the node if successful, %NULL otherwise.
  */
@@ -1115,16 +1115,13 @@ static int is_bridge(struct pci_func * func)
 
 
 /**
- * set_controller_speed - set the frequency and/or mode of a specific
- * controller segment.
- *
+ * set_controller_speed - set the frequency and/or mode of a specific controller segment.
  * @ctrl: controller to change frequency/mode for.
  * @adapter_speed: the speed of the adapter we want to match.
  * @hp_slot: the slot number where the adapter is installed.
  *
- * Returns 0 if we successfully change frequency and/or mode to match the
+ * Returns %0 if we successfully change frequency and/or mode to match the
  * adapter speed.
- * 
  */
 static u8 set_controller_speed(struct controller *ctrl, u8 adapter_speed, u8 hp_slot)
 {
@@ -1253,13 +1250,14 @@ static u8 set_controller_speed(struct controller *ctrl, u8 adapter_speed, u8 hp_
 
 /**
  * board_replaced - Called after a board has been replaced in the system.
+ * @func: PCI device/function information
+ * @ctrl: hotplug controller
  *
- * This is only used if we don't have resources for hot add
- * Turns power on for the board
- * Checks to see if board is the same
- * If board is same, reconfigures it
+ * This is only used if we don't have resources for hot add.
+ * Turns power on for the board.
+ * Checks to see if board is the same.
+ * If board is same, reconfigures it.
  * If board isn't same, turns it back off.
- *
  */
 static u32 board_replaced(struct pci_func *func, struct controller *ctrl)
 {
@@ -1403,10 +1401,11 @@ static u32 board_replaced(struct pci_func *func, struct controller *ctrl)
 
 /**
  * board_added - Called after a board has been added to the system.
+ * @func: PCI device/function info
+ * @ctrl: hotplug controller
  *
- * Turns power on for the board
- * Configures board
- *
+ * Turns power on for the board.
+ * Configures board.
  */
 static u32 board_added(struct pci_func *func, struct controller *ctrl)
 {
@@ -1607,8 +1606,10 @@ static u32 board_added(struct pci_func *func, struct controller *ctrl)
 
 
 /**
- * remove_board - Turns off slot and LED's
- *
+ * remove_board - Turns off slot and LEDs
+ * @func: PCI device/function info
+ * @replace_flag: whether replacing or adding a new device
+ * @ctrl: target controller
  */
 static u32 remove_board(struct pci_func * func, u32 replace_flag, struct controller * ctrl)
 {
@@ -1902,11 +1903,11 @@ static void interrupt_event_handler(struct controller *ctrl)
 
 
 /**
- * cpqhp_pushbutton_thread
+ * cpqhp_pushbutton_thread - handle pushbutton events
+ * @slot: target slot (struct)
  *
- * Scheduled procedure to handle blocking stuff for the pushbuttons
+ * Scheduled procedure to handle blocking stuff for the pushbuttons.
  * Handles all pending events and exits.
- *
  */
 void cpqhp_pushbutton_thread(unsigned long slot)
 {
@@ -2137,9 +2138,10 @@ int cpqhp_process_SS(struct controller *ctrl, struct pci_func *func)
 }
 
 /**
- * switch_leds: switch the leds, go from one site to the other.
+ * switch_leds - switch the leds, go from one site to the other.
  * @ctrl: controller to use
  * @num_of_slots: number of slots to use
+ * @work_LED: LED control value
  * @direction: 1 to start from the left side, 0 to start right.
  */
 static void switch_leds(struct controller *ctrl, const int num_of_slots,
@@ -2165,11 +2167,11 @@ static void switch_leds(struct controller *ctrl, const int num_of_slots,
 }
 
 /**
- * hardware_test - runs hardware tests
+ * cpqhp_hardware_test - runs hardware tests
+ * @ctrl: target controller
+ * @test_num: the number written to the "test" file in sysfs.
  *
  * For hot plug ctrl folks to play with.
- * test_num is the number written to the "test" file in sysfs
- *
  */
 int cpqhp_hardware_test(struct controller *ctrl, int test_num)
 {
@@ -2249,14 +2251,12 @@ int cpqhp_hardware_test(struct controller *ctrl, int test_num)
 
 /**
  * configure_new_device - Configures the PCI header information of one board.
- *
  * @ctrl: pointer to controller structure
  * @func: pointer to function structure
  * @behind_bridge: 1 if this is a recursive call, 0 if not
  * @resources: pointer to set of resource lists
  *
- * Returns 0 if success
- *
+ * Returns 0 if success.
  */
 static u32 configure_new_device(struct controller * ctrl, struct pci_func * func,
                                 u8 behind_bridge, struct resource_lists * resources)
@@ -2346,15 +2346,13 @@ static u32 configure_new_device(struct controller * ctrl, struct pci_func * func
 
 /**
  * configure_new_function - Configures the PCI header information of one device
- *
  * @ctrl: pointer to controller structure
  * @func: pointer to function structure
  * @behind_bridge: 1 if this is a recursive call, 0 if not
  * @resources: pointer to set of resource lists
  *
  * Calls itself recursively for bridged devices.
- * Returns 0 if success
- *
+ * Returns 0 if success.
  */
 static int configure_new_function(struct controller *ctrl, struct pci_func *func,
                                   u8 behind_bridge,
index 027f6865d7e31cdbf1ce80711f076b66c24cbb8c..d7a293e3faf5debc9fb8d3df0b571bde3e663c33 100644 (file)
@@ -165,11 +165,11 @@ static void remove_slot(struct dummy_slot *dslot)
 }
 
 /**
- * Rescan slot.
- * Tries hard not to re-enable already existing devices
- * also handles scanning of subfunctions
+ * pci_rescan_slot - Rescan slot
+ * @temp: Device template. Should be set: bus and devfn.
  *
- * @param temp   Device template. Should be set: bus and devfn.
+ * Tries hard not to re-enable already existing devices;
+ * also handles scanning of subfunctions.
  */
 static void pci_rescan_slot(struct pci_dev *temp)
 {
@@ -229,10 +229,10 @@ static void pci_rescan_slot(struct pci_dev *temp)
 
 
 /**
- * Rescan PCI bus.
- * call pci_rescan_slot for each possible function of the bus
+ * pci_rescan_bus - Rescan PCI bus
+ * @bus: the PCI bus to rescan
  *
- * @param bus
+ * Call pci_rescan_slot for each possible function of the bus.
  */
 static void pci_rescan_bus(const struct pci_bus *bus)
 {
index c8cb49c5a7525ac838e2da871f56c5a1fd3cf6a5..f1e0966cee95b164d458c3126466d62f063cf00c 100644 (file)
@@ -208,10 +208,10 @@ static void set_slot_off(struct controller *ctrl, struct slot * pslot)
 
 /**
  * board_added - Called after a board has been added to the system.
+ * @p_slot: &slot where board is added
  *
- * Turns power on for the board
- * Configures board
- *
+ * Turns power on for the board.
+ * Configures board.
  */
 static int board_added(struct slot *p_slot)
 {
@@ -276,8 +276,8 @@ err_exit:
 }
 
 /**
- * remove_board - Turns off slot and LED's
- *
+ * remove_board - Turns off slot and LEDs
+ * @p_slot: slot where board is being removed
  */
 static int remove_board(struct slot *p_slot)
 {
@@ -319,11 +319,11 @@ struct power_work_info {
 };
 
 /**
- * pciehp_pushbutton_thread
+ * pciehp_power_thread - handle pushbutton events
+ * @work: &struct work_struct describing work to be done
  *
- * Scheduled procedure to handle blocking stuff for the pushbuttons
+ * Scheduled procedure to handle blocking stuff for the pushbuttons.
  * Handles all pending events and exits.
- *
  */
 static void pciehp_power_thread(struct work_struct *work)
 {
index deb6b5e35febfd47d32dea6b74c6a5543f2d5f12..b169b0e2647f72afefa42bb16430885a8a4d170f 100644 (file)
@@ -100,6 +100,7 @@ static struct device_node *find_dlpar_node(char *drc_name, int *node_type)
 
 /**
  * find_php_slot - return hotplug slot structure for device node
+ * @dn: target &device_node
  *
  * This routine will return the hotplug slot structure
  * for a given device node. Note that built-in PCI slots
@@ -293,9 +294,8 @@ static int dlpar_add_vio_slot(char *drc_name, struct device_node *dn)
  * dlpar_add_slot - DLPAR add an I/O Slot
  * @drc_name: drc-name of newly added slot
  *
- * Make the hotplug module and the kernel aware
- * of a newly added I/O Slot.
- * Return Codes -
+ * Make the hotplug module and the kernel aware of a newly added I/O Slot.
+ * Return Codes:
  * 0                   Success
  * -ENODEV             Not a valid drc_name
  * -EINVAL             Slot already added
@@ -339,9 +339,9 @@ exit:
 /**
  * dlpar_remove_vio_slot - DLPAR remove a virtual I/O Slot
  * @drc_name: drc-name of newly added slot
+ * @dn: &device_node
  *
- * Remove the kernel and hotplug representations
- * of an I/O Slot.
+ * Remove the kernel and hotplug representations of an I/O Slot.
  * Return Codes:
  * 0                   Success
  * -EINVAL             Vio dev doesn't exist
@@ -359,11 +359,11 @@ static int dlpar_remove_vio_slot(char *drc_name, struct device_node *dn)
 }
 
 /**
- * dlpar_remove_slot - DLPAR remove a PCI I/O Slot
+ * dlpar_remove_pci_slot - DLPAR remove a PCI I/O Slot
  * @drc_name: drc-name of newly added slot
+ * @dn: &device_node
  *
- * Remove the kernel and hotplug representations
- * of a PCI I/O Slot.
+ * Remove the kernel and hotplug representations of a PCI I/O Slot.
  * Return Codes:
  * 0                   Success
  * -ENODEV             Not a valid drc_name
@@ -405,8 +405,7 @@ int dlpar_remove_pci_slot(char *drc_name, struct device_node *dn)
  * dlpar_remove_slot - DLPAR remove an I/O Slot
  * @drc_name: drc-name of newly added slot
  *
- * Remove the kernel and hotplug representations
- * of an I/O Slot.
+ * Remove the kernel and hotplug representations of an I/O Slot.
  * Return Codes:
  * 0                   Success
  * -ENODEV             Not a valid drc_name
index 458c08ef2654bcc5089442044dc99aaa4aedc7d6..58f1a9927709817d5f97c74d64f4cc646014fdf9 100644 (file)
@@ -54,10 +54,12 @@ module_param(debug, bool, 0644);
 
 /**
  * set_attention_status - set attention LED
+ * @hotplug_slot: target &hotplug_slot
+ * @value: LED control value
+ *
  * echo 0 > attention -- set LED OFF
  * echo 1 > attention -- set LED ON
  * echo 2 > attention -- set LED ID(identify, light is blinking)
- *
  */
 static int set_attention_status(struct hotplug_slot *hotplug_slot, u8 value)
 {
@@ -99,6 +101,8 @@ static int get_power_status(struct hotplug_slot *hotplug_slot, u8 * value)
 
 /**
  * get_attention_status - get attention LED status
+ * @hotplug_slot: slot to get status
+ * @value: pointer to store status
  */
 static int get_attention_status(struct hotplug_slot *hotplug_slot, u8 * value)
 {
@@ -254,6 +258,11 @@ static int is_php_type(char *drc_type)
 
 /**
  * is_php_dn() - return 1 if this is a hotpluggable pci slot, else 0
+ * @dn: target &device_node
+ * @indexes: passed to get_children_props()
+ * @names: passed to get_children_props()
+ * @types: returned from get_children_props()
+ * @power_domains:
  *
  * This routine will return true only if the device node is
  * a hotpluggable slot. This routine will return false
@@ -279,7 +288,7 @@ static int is_php_dn(struct device_node *dn, const int **indexes,
 
 /**
  * rpaphp_add_slot -- declare a hotplug slot to the hotplug subsystem.
- * @dn device node of slot
+ * @dn: device node of slot
  *
  * This subroutine will register a hotplugable slot with the
  * PCI hotplug infrastructure. This routine is typicaly called
@@ -291,7 +300,7 @@ static int is_php_dn(struct device_node *dn, const int **indexes,
  * routine will just return without doing anything, since embedded
  * slots cannot be hotplugged.
  *
- * To remove a slot, it suffices to call rpaphp_deregister_slot()
+ * To remove a slot, it suffices to call rpaphp_deregister_slot().
  */
 int rpaphp_add_slot(struct device_node *dn)
 {
index 54ca8650d5110e7f6736e6792782b966fc4f1dae..0de84533cd80ffc196845677790fcea7211670ce 100644 (file)
@@ -79,6 +79,7 @@ static void set_slot_name(struct slot *slot)
 
 /**
  * rpaphp_enable_slot - record slot state, config pci device
+ * @slot: target &slot
  *
  * Initialize values in the slot, and the hotplug_slot info
  * structures to indicate if there is a pci card plugged into
index d2fc35598cddd2b94189a7da53be2cf219ccd67b..eb5cac6f08aeb46362a2231add584f52dce81f27 100644 (file)
@@ -231,10 +231,10 @@ static int fix_bus_speed(struct controller *ctrl, struct slot *pslot,
 
 /**
  * board_added - Called after a board has been added to the system.
+ * @p_slot: target &slot
  *
- * Turns power on for the board
- * Configures board
- *
+ * Turns power on for the board.
+ * Configures board.
  */
 static int board_added(struct slot *p_slot)
 {
@@ -350,8 +350,8 @@ err_exit:
 
 
 /**
- * remove_board - Turns off slot and LED's
- *
+ * remove_board - Turns off slot and LEDs
+ * @p_slot: target &slot
  */
 static int remove_board(struct slot *p_slot)
 {
@@ -397,11 +397,11 @@ struct pushbutton_work_info {
 };
 
 /**
- * shpchp_pushbutton_thread
+ * shpchp_pushbutton_thread - handle pushbutton events
+ * @work: &struct work_struct to be handled
  *
- * Scheduled procedure to handle blocking stuff for the pushbuttons
+ * Scheduled procedure to handle blocking stuff for the pushbuttons.
  * Handles all pending events and exits.
- *
  */
 static void shpchp_pushbutton_thread(struct work_struct *work)
 {
index 1b7b2812bf2dd94c3ca9723bd7e2db47209df89a..7d1877341aada287783065bf15ab9f6349b2b07a 100644 (file)
@@ -702,8 +702,10 @@ static int __init pci_sysfs_init(void)
        sysfs_initialized = 1;
        for_each_pci_dev(pdev) {
                retval = pci_create_sysfs_dev_files(pdev);
-               if (retval)
+               if (retval) {
+                       pci_dev_put(pdev);
                        return retval;
+               }
        }
 
        return 0;
index 92a8469b21bacecc2f161621553029ea99222d1e..3c0d8d138f5a96fabd89a6fcc6cb92ebf8927840 100644 (file)
@@ -168,11 +168,11 @@ static int find_device_iter(struct device *device, void *data)
 
 /**
  * find_source_device - search through device hierarchy for source device
- * @p_dev: pointer to Root Port pci_dev data structure
+ * @parent: pointer to Root Port pci_dev data structure
  * @id: device ID of agent who sends an error message to this Root Port
  *
  * Invoked when error is detected at the Root Port.
- **/
+ */
 static struct device* find_source_device(struct pci_dev *parent, u16 id)
 {
        struct pci_dev *dev = parent;
@@ -286,14 +286,15 @@ static void report_resume(struct pci_dev *dev, void *data)
 
 /**
  * broadcast_error_message - handle message broadcast to downstream drivers
- * @device: pointer to from where in a hierarchy message is broadcasted down
- * @api: callback to be broadcasted
+ * @dev: pointer to from where in a hierarchy message is broadcasted down
  * @state: error state
+ * @error_mesg: message to print
+ * @cb: callback to be broadcasted
  *
  * Invoked during error recovery process. Once being invoked, the content
  * of error severity will be broadcasted to all downstream drivers in a
  * hierarchy in question.
- **/
+ */
 static pci_ers_result_t broadcast_error_message(struct pci_dev *dev,
        enum pci_channel_state state,
        char *error_mesg,
@@ -428,7 +429,7 @@ static pci_ers_result_t reset_link(struct pcie_device *aerdev,
  * Invoked when an error is nonfatal/fatal. Once being invoked, broadcast
  * error detected message to all downstream drivers within a hierarchy in
  * question and return the returned code.
- **/
+ */
 static pci_ers_result_t do_recovery(struct pcie_device *aerdev,
                struct pci_dev *dev,
                int severity)
@@ -488,7 +489,7 @@ static pci_ers_result_t do_recovery(struct pcie_device *aerdev,
  * @info: comprehensive error information
  *
  * Invoked when an error being detected by Root Port.
- **/
+ */
 static void handle_error_source(struct pcie_device * aerdev,
        struct pci_dev *dev,
        struct aer_err_info info)
@@ -521,7 +522,7 @@ static void handle_error_source(struct pcie_device * aerdev,
  * @rpc: pointer to a Root Port data structure
  *
  * Invoked when PCIE bus loads AER service driver.
- **/
+ */
 void aer_enable_rootport(struct aer_rpc *rpc)
 {
        struct pci_dev *pdev = rpc->rpd->port;
@@ -569,7 +570,7 @@ void aer_enable_rootport(struct aer_rpc *rpc)
  * @rpc: pointer to a Root Port data structure
  *
  * Invoked when PCIE bus unloads AER service driver.
- **/
+ */
 static void disable_root_aer(struct aer_rpc *rpc)
 {
        struct pci_dev *pdev = rpc->rpd->port;
@@ -590,7 +591,7 @@ static void disable_root_aer(struct aer_rpc *rpc)
  * @rpc: pointer to the root port which holds an error
  *
  * Invoked by DPC handler to consume an error.
- **/
+ */
 static struct aer_err_source* get_e_source(struct aer_rpc *rpc)
 {
        struct aer_err_source *e_source;
@@ -655,7 +656,7 @@ static int get_device_error_info(struct pci_dev *dev, struct aer_err_info *info)
  * aer_isr_one_error - consume an error detected by root port
  * @p_device: pointer to error root port service device
  * @e_src: pointer to an error source
- **/
+ */
 static void aer_isr_one_error(struct pcie_device *p_device,
                struct aer_err_source *e_src)
 {
@@ -706,7 +707,7 @@ static void aer_isr_one_error(struct pcie_device *p_device,
  * @work: definition of this work item
  *
  * Invoked, as DPC, when root port records new detected error
- **/
+ */
 void aer_isr(struct work_struct *work)
 {
        struct aer_rpc *rpc = container_of(work, struct aer_rpc, dpc_handler);
@@ -729,7 +730,7 @@ void aer_isr(struct work_struct *work)
  * @rpc: pointer to a root port device being deleted
  *
  * Invoked when AER service unloaded on a specific Root Port
- **/
+ */
 void aer_delete_rootport(struct aer_rpc *rpc)
 {
        /* Disable root port AER itself */
@@ -743,7 +744,7 @@ void aer_delete_rootport(struct aer_rpc *rpc)
  * @dev: pointer to AER pcie device
  *
  * Invoked when AER service driver is loaded.
- **/
+ */
 int aer_init(struct pcie_device *dev)
 {
        if (aer_osc_setup(dev) && !forceload)
index df383645e36622a9c13d09d4be89884f6ed727c0..26057f98f72ebddec17c3f8f58d74fe2ebdd8b3f 100644 (file)
@@ -217,7 +217,7 @@ static int slot_reset_iter(struct device *device, void *data)
 
 static pci_ers_result_t pcie_portdrv_slot_reset(struct pci_dev *dev)
 {
-       pci_ers_result_t status;
+       pci_ers_result_t status = PCI_ERS_RESULT_NONE;
        int retval;
 
        /* If fatal, restore cfg space for possible link reset at upstream */
index 463a5a9d583d03747323285a18df00d5e46d717c..c2f8a78c894c180dbf838fbce8cf2d0c4212057f 100644 (file)
@@ -743,46 +743,22 @@ static int pci_setup_device(struct pci_dev * dev)
                 */
                if (class == PCI_CLASS_STORAGE_IDE) {
                        u8 progif;
-                       struct pci_bus_region region;
-
                        pci_read_config_byte(dev, PCI_CLASS_PROG, &progif);
                        if ((progif & 1) == 0) {
-                               struct resource resource = {
-                                       .start = 0x1F0,
-                                       .end = 0x1F7,
-                                       .flags = LEGACY_IO_RESOURCE,
-                               };
-
-                               pcibios_resource_to_bus(dev, &region, &resource);
-                               dev->resource[0].start = region.start;
-                               dev->resource[0].end = region.end;
-                               dev->resource[0].flags = resource.flags;
-                               resource.start = 0x3F6;
-                               resource.end = 0x3F6;
-                               resource.flags = LEGACY_IO_RESOURCE;
-                               pcibios_resource_to_bus(dev, &region, &resource);
-                               dev->resource[1].start = region.start;
-                               dev->resource[1].end = region.end;
-                               dev->resource[1].flags = resource.flags;
+                               dev->resource[0].start = 0x1F0;
+                               dev->resource[0].end = 0x1F7;
+                               dev->resource[0].flags = LEGACY_IO_RESOURCE;
+                               dev->resource[1].start = 0x3F6;
+                               dev->resource[1].end = 0x3F6;
+                               dev->resource[1].flags = LEGACY_IO_RESOURCE;
                        }
                        if ((progif & 4) == 0) {
-                               struct resource resource = {
-                                       .start = 0x170,
-                                       .end = 0x177,
-                                       .flags = LEGACY_IO_RESOURCE,
-                               };
-
-                               pcibios_resource_to_bus(dev, &region, &resource);
-                               dev->resource[2].start = region.start;
-                               dev->resource[2].end = region.end;
-                               dev->resource[2].flags = resource.flags;
-                               resource.start = 0x376;
-                               resource.end = 0x376;
-                               resource.flags = LEGACY_IO_RESOURCE;
-                               pcibios_resource_to_bus(dev, &region, &resource);
-                               dev->resource[3].start = region.start;
-                               dev->resource[3].end = region.end;
-                               dev->resource[3].flags = resource.flags;
+                               dev->resource[2].start = 0x170;
+                               dev->resource[2].end = 0x177;
+                               dev->resource[2].flags = LEGACY_IO_RESOURCE;
+                               dev->resource[3].start = 0x376;
+                               dev->resource[3].end = 0x376;
+                               dev->resource[3].flags = LEGACY_IO_RESOURCE;
                        }
                }
                break;
index a0aca46ce877b455770e7fc48f39dc4c206dc925..56230dbd347aee88f9d6eb9fc1a32ec9642d7799 100644 (file)
@@ -89,7 +89,7 @@ DECLARE_RWSEM(pcmcia_socket_list_rwsem);
 EXPORT_SYMBOL(pcmcia_socket_list_rwsem);
 
 
-/**
+/*
  * Low-level PCMCIA socket drivers need to register with the PCCard
  * core using pcmcia_register_socket.
  *
@@ -174,6 +174,7 @@ static int pccardd(void *__skt);
 
 /**
  * pcmcia_register_socket - add a new pcmcia socket device
+ * @socket: the &socket to register
  */
 int pcmcia_register_socket(struct pcmcia_socket *socket)
 {
@@ -268,6 +269,7 @@ EXPORT_SYMBOL(pcmcia_register_socket);
 
 /**
  * pcmcia_unregister_socket - remove a pcmcia socket device
+ * @socket: the &socket to unregister
  */
 void pcmcia_unregister_socket(struct pcmcia_socket *socket)
 {
@@ -311,7 +313,7 @@ struct pcmcia_socket * pcmcia_get_socket_by_nr(unsigned int nr)
 }
 EXPORT_SYMBOL(pcmcia_get_socket_by_nr);
 
-/**
+/*
  * The central event handler.  Send_event() sends an event to the
  * 16-bit subsystem, which then calls the relevant device drivers.
  * Parse_events() interprets the event bits from
@@ -380,7 +382,7 @@ static int socket_reset(struct pcmcia_socket *skt)
        return CS_GENERAL_FAILURE;
 }
 
-/**
+/*
  * socket_setup() and socket_shutdown() are called by the main event handler
  * when card insertion and removal events are received.
  * socket_setup() turns on socket power and resets the socket, in two stages.
index 7bf78c127898d7e951c925c526d1c1d2b5d4621d..5cf89a91da1ea275266da0a42d6dada7672e5466 100644 (file)
@@ -320,6 +320,7 @@ pcmcia_create_newid_file(struct pcmcia_driver *drv)
 
 /**
  * pcmcia_register_driver - register a PCMCIA driver with the bus core
+ * @driver: the &driver being registered
  *
  * Registers a PCMCIA driver with the PCMCIA bus core.
  */
@@ -354,6 +355,7 @@ EXPORT_SYMBOL(pcmcia_register_driver);
 
 /**
  * pcmcia_unregister_driver - unregister a PCMCIA driver with the bus core
+ * @driver: the &driver being unregistered
  */
 void pcmcia_unregister_driver(struct pcmcia_driver *driver)
 {
@@ -840,8 +842,8 @@ static void pcmcia_bus_rescan(struct pcmcia_socket *skt, int new_cis)
 
 /**
  * pcmcia_load_firmware - load CIS from userspace if device-provided is broken
- * @dev - the pcmcia device which needs a CIS override
- * @filename - requested filename in /lib/firmware/
+ * @dev: the pcmcia device which needs a CIS override
+ * @filename: requested filename in /lib/firmware/
  *
  * This uses the in-kernel firmware loading mechanism to use a "fake CIS" if
  * the one provided by the card is broken. The firmware files reside in
index 62e9ebf967f9943ff7eacbad14e6b72900620a07..d29657bf1b40faecefd0598ad73cc60c42d292c1 100644 (file)
@@ -874,7 +874,7 @@ static int ti1250_override(struct yenta_socket *socket)
  */
 
 #ifdef CONFIG_YENTA_ENE_TUNE
-/**
+/*
  * set/clear various test bits:
  * Defaults to clear the bit.
  * - mask (u8) defines what bits to change
index 20853a03202d16b2b6c8321ab715651d8274839f..0ab1fb65cdc335541ae9bb0da1668686badef607 100644 (file)
@@ -48,7 +48,7 @@ MODULE_PARM_DESC(pwr_irqs_off, "Force IRQs off during power-on of slot. Use only
 #define to_cycles(ns)  ((ns)/120)
 #define to_ns(cycles)  ((cycles)*120)
 
-/**
+/*
  * yenta PCI irq probing.
  * currently only used in the TI/EnE initialization code
  */
@@ -888,7 +888,7 @@ static unsigned int yenta_probe_irq(struct yenta_socket *socket, u32 isa_irq_mas
 }
 
 
-/**
+/*
  * yenta PCI irq probing.
  * currently only used in the TI/EnE initialization code
  */
@@ -1012,7 +1012,7 @@ static void yenta_config_init(struct yenta_socket *socket)
  * invisible during PCI scans because of a misconfigured subordinate number
  * of the parent brige - some BIOSes seem to be too lazy to set it right.
  * Does the fixup carefully by checking how far it can go without conflicts.
- * See http://bugzilla.kernel.org/show_bug.cgi?id=2944 for more information.
+ * See http\://bugzilla.kernel.org/show_bug.cgi?id=2944 for more information.
  */
 static void yenta_fixup_parent_bridge(struct pci_bus *cardbus_bridge)
 {
index cd0a204d96d14e9ffdc7d19e5597f47e89fe6b8a..3c5eb374adf8bbcc0a1d0a7dbb85ab6f55587a7d 100644 (file)
@@ -75,6 +75,7 @@ static void pnpacpi_parse_allocated_irqresource(struct pnp_resource_table *res,
 {
        int i = 0;
        int irq;
+       int p, t;
 
        if (!valid_IRQ(gsi))
                return;
@@ -82,18 +83,27 @@ static void pnpacpi_parse_allocated_irqresource(struct pnp_resource_table *res,
        while (!(res->irq_resource[i].flags & IORESOURCE_UNSET) &&
               i < PNP_MAX_IRQ)
                i++;
-       if (i >= PNP_MAX_IRQ)
+       if (i >= PNP_MAX_IRQ) {
+               printk(KERN_ERR "pnpacpi: exceeded the max number of IRQ "
+                               "resources: %d \n", PNP_MAX_IRQ);
                return;
-
-#ifdef CONFIG_X86
-       if (gsi < 16 && (triggering != ACPI_EDGE_SENSITIVE ||
-                               polarity != ACPI_ACTIVE_HIGH)) {
-               pnp_warn("BIOS BUG: legacy PNP IRQ %d should be edge trigger, "
-                               "active high", gsi);
-               triggering = ACPI_EDGE_SENSITIVE;
-               polarity = ACPI_ACTIVE_HIGH;
        }
-#endif
+       /*
+        * in IO-APIC mode, use overrided attribute. Two reasons:
+        * 1. BIOS bug in DSDT
+        * 2. BIOS uses IO-APIC mode Interrupt Source Override
+        */
+       if (!acpi_get_override_irq(gsi, &t, &p)) {
+               t = t ? ACPI_LEVEL_SENSITIVE : ACPI_EDGE_SENSITIVE;
+               p = p ? ACPI_ACTIVE_LOW : ACPI_ACTIVE_HIGH;
+
+               if (triggering != t || polarity != p) {
+                       pnp_warn("IRQ %d override to %s, %s",
+                               gsi, t ? "edge":"level", p ? "low":"high");
+                       triggering = t;
+                       polarity = p;
+               }
+       }
 
        res->irq_resource[i].flags = IORESOURCE_IRQ;    // Also clears _UNSET flag
        res->irq_resource[i].flags |= irq_flags(triggering, polarity);
@@ -173,6 +183,9 @@ static void pnpacpi_parse_allocated_dmaresource(struct pnp_resource_table *res,
                }
                res->dma_resource[i].start = dma;
                res->dma_resource[i].end = dma;
+       } else {
+               printk(KERN_ERR "pnpacpi: exceeded the max number of DMA "
+                               "resources: %d \n", PNP_MAX_DMA);
        }
 }
 
@@ -194,6 +207,9 @@ static void pnpacpi_parse_allocated_ioresource(struct pnp_resource_table *res,
                }
                res->port_resource[i].start = io;
                res->port_resource[i].end = io + len - 1;
+       } else {
+               printk(KERN_ERR "pnpacpi: exceeded the max number of IO "
+                               "resources: %d \n", PNP_MAX_PORT);
        }
 }
 
@@ -217,6 +233,9 @@ static void pnpacpi_parse_allocated_memresource(struct pnp_resource_table *res,
 
                res->mem_resource[i].start = mem;
                res->mem_resource[i].end = mem + len - 1;
+       } else {
+               printk(KERN_ERR "pnpacpi: exceeded the max number of mem "
+                               "resources: %d\n", PNP_MAX_MEM);
        }
 }
 
index 41d73a5e9312f16d87f751f2116036d11b8bef7c..e50ebcffb96240937e3f43f4474857f6cdee8030 100644 (file)
@@ -367,8 +367,10 @@ int pnp_check_irq(struct pnp_dev *dev, int idx)
        {
                struct pci_dev *pci = NULL;
                for_each_pci_dev(pci) {
-                       if (pci->irq == *irq)
+                       if (pci->irq == *irq) {
+                               pci_dev_put(pci);
                                return 0;
+                       }
                }
        }
 #endif
index 746031de2195c7a370b2343494a3cb6a56b3d366..1f5a2d33bf5b5a7d8407d9e8a04b8288c01f6d06 100644 (file)
@@ -1,6 +1,6 @@
-obj-$(CONFIG_PS3_VUART) += vuart.o
+obj-$(CONFIG_PS3_VUART) += ps3-vuart.o
 obj-$(CONFIG_PS3_PS3AV) += ps3av_mod.o
 ps3av_mod-objs         += ps3av.o ps3av_cmd.o
 obj-$(CONFIG_PPC_PS3) += sys-manager-core.o
-obj-$(CONFIG_PS3_SYS_MANAGER) += sys-manager.o
+obj-$(CONFIG_PS3_SYS_MANAGER) += ps3-sys-manager.o
 obj-$(CONFIG_PS3_STORAGE) += ps3stor_lib.o
similarity index 100%
rename from drivers/ps3/vuart.c
rename to drivers/ps3/ps3-vuart.c
index e5cdc0294aaa96f236e72c81d8c6f46751ae36a8..1e6715ec51efd68f13bb2aef5671c912c2b95604 100644 (file)
@@ -447,7 +447,7 @@ config RTC_DRV_AT91RM9200
 
 config RTC_DRV_BFIN
        tristate "Blackfin On-Chip RTC"
-       depends on BFIN
+       depends on BLACKFIN
        help
          If you say yes here you will get support for the
          Blackfin On-Chip Real Time Clock.
index de0da545c7a107c0c967e35b9a4eb3daa4cf1c5b..f1e00ff54ce880fb94c69a38064abe6680c83933 100644 (file)
@@ -293,7 +293,7 @@ int rtc_irq_register(struct rtc_device *rtc, struct rtc_task *task)
                return -EINVAL;
 
        /* Cannot register while the char dev is in use */
-       if (!(mutex_trylock(&rtc->char_lock)))
+       if (test_and_set_bit_lock(RTC_DEV_BUSY, &rtc->flags))
                return -EBUSY;
 
        spin_lock_irq(&rtc->irq_task_lock);
@@ -303,7 +303,7 @@ int rtc_irq_register(struct rtc_device *rtc, struct rtc_task *task)
        }
        spin_unlock_irq(&rtc->irq_task_lock);
 
-       mutex_unlock(&rtc->char_lock);
+       clear_bit_unlock(RTC_DEV_BUSY, &rtc->flags);
 
        return retval;
 }
index 814583bd2fe709c1da0710808ed6f4cffbe8b50f..025c60a17a4a3c9841d4105bf0344a92f9c31510 100644 (file)
@@ -26,10 +26,7 @@ static int rtc_dev_open(struct inode *inode, struct file *file)
                                        struct rtc_device, char_dev);
        const struct rtc_class_ops *ops = rtc->ops;
 
-       /* We keep the lock as long as the device is in use
-        * and return immediately if busy
-        */
-       if (!(mutex_trylock(&rtc->char_lock)))
+       if (test_and_set_bit_lock(RTC_DEV_BUSY, &rtc->flags))
                return -EBUSY;
 
        file->private_data = rtc;
@@ -43,8 +40,8 @@ static int rtc_dev_open(struct inode *inode, struct file *file)
                return 0;
        }
 
-       /* something has gone wrong, release the lock */
-       mutex_unlock(&rtc->char_lock);
+       /* something has gone wrong */
+       clear_bit_unlock(RTC_DEV_BUSY, &rtc->flags);
        return err;
 }
 
@@ -405,7 +402,7 @@ static int rtc_dev_release(struct inode *inode, struct file *file)
        if (rtc->ops->release)
                rtc->ops->release(rtc->dev.parent);
 
-       mutex_unlock(&rtc->char_lock);
+       clear_bit_unlock(RTC_DEV_BUSY, &rtc->flags);
        return 0;
 }
 
@@ -440,7 +437,6 @@ void rtc_dev_prepare(struct rtc_device *rtc)
 
        rtc->dev.devt = MKDEV(MAJOR(rtc_devt), rtc->id);
 
-       mutex_init(&rtc->char_lock);
 #ifdef CONFIG_RTC_INTF_DEV_UIE_EMUL
        INIT_WORK(&rtc->uie_task, rtc_uie_task);
        setup_timer(&rtc->uie_timer, rtc_uie_timer, (unsigned long)rtc);
index 3e183cfee10f134dabe5ffe6db57e9f65d257f45..1f956dc5d56eeb57806bb66b471422ae5734ad37 100644 (file)
@@ -89,13 +89,9 @@ static int max6902_get_reg(struct device *dev, unsigned char address,
 
        /* do the i/o */
        status = spi_sync(spi, &message);
-       if (status == 0)
-               status = message.status;
-       else
-               return status;
-
-       *data = chip->rx_buf[1];
 
+       if (status == 0)
+               *data = chip->rx_buf[1];
        return status;
 }
 
@@ -125,9 +121,7 @@ static int max6902_get_datetime(struct device *dev, struct rtc_time *dt)
 
        /* do the i/o */
        status = spi_sync(spi, &message);
-       if (status == 0)
-               status = message.status;
-       else
+       if (status)
                return status;
 
        /* The chip sends data in this order:
index 5e083d1f57e70a115dac935895d4e40bcd6a5624..15a5789b773425ba35a0ee0e6f43b8bf18866872 100644 (file)
@@ -472,11 +472,11 @@ dcssblk_add_store(struct device *dev, struct device_attribute *attr, const char
        if (rc)
                goto unregister_dev;
 
-       add_disk(dev_info->gd);
-
        blk_queue_make_request(dev_info->dcssblk_queue, dcssblk_make_request);
        blk_queue_hardsect_size(dev_info->dcssblk_queue, 4096);
 
+       add_disk(dev_info->gd);
+
        switch (dev_info->segment_type) {
                case SEG_TYPE_SR:
                case SEG_TYPE_ER:
index 838f7ac0dc32420bc258e067c5283a8177406963..c3df2cd009a4f1b113615e728d3a15e0d2593c4f 100644 (file)
@@ -451,6 +451,7 @@ static int reprobe_subchannel(struct subchannel_id schid, void *data)
                break;
        case -ENXIO:
        case -ENOMEM:
+       case -EIO:
                /* These should abort looping */
                break;
        default:
@@ -483,7 +484,7 @@ static DECLARE_WORK(css_reprobe_work, reprobe_all);
 void css_schedule_reprobe(void)
 {
        need_reprobe = 1;
-       queue_work(ccw_device_work, &css_reprobe_work);
+       queue_work(slow_path_wq, &css_reprobe_work);
 }
 
 EXPORT_SYMBOL_GPL(css_schedule_reprobe);
index 8867443b806049e9b3a7ac19a076b3147fdb6b71..bfad421cda66a6bd82a253486d38450703eb6590 100644 (file)
@@ -1034,7 +1034,7 @@ device_trigger_reprobe(struct subchannel *sch)
        if (sch->schib.pmcw.dev != cdev->private->dev_id.devno) {
                PREPARE_WORK(&cdev->private->kick_work,
                             ccw_device_move_to_orphanage);
-               queue_work(ccw_device_work, &cdev->private->kick_work);
+               queue_work(slow_path_wq, &cdev->private->kick_work);
        } else
                ccw_device_start_id(cdev, 0);
 }
index f232832f2b22314e142d953c56ffc645e5dc205c..156f3f9786b52e6ddfaeb765c81fec7ff0f77c73 100644 (file)
@@ -118,14 +118,6 @@ __ccw_device_sense_id_start(struct ccw_device *cdev)
        sch = to_subchannel(cdev->dev.parent);
        /* Setup sense channel program. */
        ccw = cdev->private->iccws;
-       if (sch->schib.pmcw.pim != 0x80) {
-               /* more than one path installed. */
-               ccw->cmd_code = CCW_CMD_SUSPEND_RECONN;
-               ccw->cda = 0;
-               ccw->count = 0;
-               ccw->flags = CCW_FLAG_SLI | CCW_FLAG_CC;
-               ccw++;
-       }
        ccw->cmd_code = CCW_CMD_SENSE_ID;
        ccw->cda = (__u32) __pa (&cdev->private->senseid);
        ccw->count = sizeof (struct senseid);
index 6bf3ebbe985a9a000d92fbe449ab5eb073cc03fc..77a503139e327fe7d1597c8aec6bf43b0301b438 100644 (file)
@@ -478,14 +478,14 @@ ctc_unpack_skb(struct channel *ch, struct sk_buff *pskb)
                skb->dev = pskb->dev;
                skb->protocol = pskb->protocol;
                pskb->ip_summed = CHECKSUM_UNNECESSARY;
-               netif_rx_ni(skb);
                /**
-                * Successful rx; reset logflags
+                * reset logflags
                 */
                ch->logflags = 0;
-               dev->last_rx = jiffies;
                privptr->stats.rx_packets++;
                privptr->stats.rx_bytes += skb->len;
+               netif_rx_ni(skb);
+               dev->last_rx = jiffies;
                if (len > 0) {
                        skb_pull(pskb, header->length);
                        if (skb_tailroom(pskb) < LL_HEADER_LENGTH) {
@@ -2782,35 +2782,14 @@ ctc_probe_device(struct ccwgroup_device *cgdev)
 }
 
 /**
- * Initialize everything of the net device except the name and the
- * channel structs.
+ * Device setup function called by alloc_netdev().
+ *
+ * @param dev  Device to be setup.
  */
-static struct net_device *
-ctc_init_netdevice(struct net_device * dev, int alloc_device,
-                  struct ctc_priv *privptr)
+void ctc_init_netdevice(struct net_device * dev)
 {
-       if (!privptr)
-               return NULL;
-
        DBF_TEXT(setup, 3, __FUNCTION__);
 
-       if (alloc_device) {
-               dev = kzalloc(sizeof(struct net_device), GFP_KERNEL);
-               if (!dev)
-                       return NULL;
-       }
-
-       dev->priv = privptr;
-       privptr->fsm = init_fsm("ctcdev", dev_state_names,
-                               dev_event_names, CTC_NR_DEV_STATES, CTC_NR_DEV_EVENTS,
-                               dev_fsm, DEV_FSM_LEN, GFP_KERNEL);
-       if (privptr->fsm == NULL) {
-               if (alloc_device)
-                       kfree(dev);
-               return NULL;
-       }
-       fsm_newstate(privptr->fsm, DEV_STATE_STOPPED);
-       fsm_settimer(privptr->fsm, &privptr->restart_timer);
        if (dev->mtu == 0)
                dev->mtu = CTC_BUFSIZE_DEFAULT - LL_HEADER_LENGTH - 2;
        dev->hard_start_xmit = ctc_tx;
@@ -2823,7 +2802,6 @@ ctc_init_netdevice(struct net_device * dev, int alloc_device,
        dev->type = ARPHRD_SLIP;
        dev->tx_queue_len = 100;
        dev->flags = IFF_POINTOPOINT | IFF_NOARP;
-       return dev;
 }
 
 
@@ -2879,14 +2857,22 @@ ctc_new_device(struct ccwgroup_device *cgdev)
                        "ccw_device_set_online (cdev[1]) failed with ret = %d\n", ret);
        }
 
-       dev = ctc_init_netdevice(NULL, 1, privptr);
-
+       dev = alloc_netdev(0, "ctc%d", ctc_init_netdevice);
        if (!dev) {
                ctc_pr_warn("ctc_init_netdevice failed\n");
                goto out;
        }
+       dev->priv = privptr;
 
-       strlcpy(dev->name, "ctc%d", IFNAMSIZ);
+       privptr->fsm = init_fsm("ctcdev", dev_state_names,
+                       dev_event_names, CTC_NR_DEV_STATES, CTC_NR_DEV_EVENTS,
+                       dev_fsm, DEV_FSM_LEN, GFP_KERNEL);
+       if (privptr->fsm == NULL) {
+               free_netdev(dev);
+               goto out;
+       }
+       fsm_newstate(privptr->fsm, DEV_STATE_STOPPED);
+       fsm_settimer(privptr->fsm, &privptr->restart_timer);
 
        for (direction = READ; direction <= WRITE; direction++) {
                privptr->channel[direction] =
index 4d18d6419ddc016fd08560bdef7f46af58335b5b..c7ea9381db9f63050b8589ee05faa466d295120e 100644 (file)
@@ -639,14 +639,14 @@ static void netiucv_unpack_skb(struct iucv_connection *conn,
                skb->dev = pskb->dev;
                skb->protocol = pskb->protocol;
                pskb->ip_summed = CHECKSUM_UNNECESSARY;
+               privptr->stats.rx_packets++;
+               privptr->stats.rx_bytes += skb->len;
                /*
                 * Since receiving is always initiated from a tasklet (in iucv.c),
                 * we must use netif_rx_ni() instead of netif_rx()
                 */
                netif_rx_ni(skb);
                dev->last_rx = jiffies;
-               privptr->stats.rx_packets++;
-               privptr->stats.rx_bytes += skb->len;
                skb_pull(pskb, header->next);
                skb_put(pskb, NETIUCV_HDRLEN);
        }
index 5552b755c08a5ff849022e02132a040cd6dc7879..07fa824d179f203e3f9bbbf6b099e94206140e5a 100644 (file)
@@ -977,7 +977,9 @@ static void zfcp_erp_action_dismiss(struct zfcp_erp_action *erp_action)
        debug_text_event(adapter->erp_dbf, 2, "a_adis");
        debug_event(adapter->erp_dbf, 2, &erp_action->action, sizeof (int));
 
-       zfcp_erp_async_handler_nolock(erp_action, ZFCP_STATUS_ERP_DISMISSED);
+       erp_action->status |= ZFCP_STATUS_ERP_DISMISSED;
+       if (zfcp_erp_action_exists(erp_action) == ZFCP_ERP_ACTION_RUNNING)
+               zfcp_erp_action_ready(erp_action);
 }
 
 int
@@ -1063,7 +1065,7 @@ zfcp_erp_thread(void *data)
                                 &adapter->status)) {
 
                write_lock_irqsave(&adapter->erp_lock, flags);
-               next = adapter->erp_ready_head.prev;
+               next = adapter->erp_ready_head.next;
                write_unlock_irqrestore(&adapter->erp_lock, flags);
 
                if (next != &adapter->erp_ready_head) {
@@ -1153,15 +1155,13 @@ zfcp_erp_strategy(struct zfcp_erp_action *erp_action)
 
        /*
         * check for dismissed status again to avoid follow-up actions,
-        * failing of targets and so on for dismissed actions
+        * failing of targets and so on for dismissed actions,
+        * we go through down() here because there has been an up()
         */
-       retval = zfcp_erp_strategy_check_action(erp_action, retval);
+       if (erp_action->status & ZFCP_STATUS_ERP_DISMISSED)
+               retval = ZFCP_ERP_CONTINUES;
 
        switch (retval) {
-       case ZFCP_ERP_DISMISSED:
-               /* leave since this action has ridden to its ancestors */
-               debug_text_event(adapter->erp_dbf, 6, "a_st_dis2");
-               goto unlock;
        case ZFCP_ERP_NOMEM:
                /* no memory to continue immediately, let it sleep */
                if (!(erp_action->status & ZFCP_STATUS_ERP_LOWMEM)) {
@@ -3089,7 +3089,7 @@ zfcp_erp_action_enqueue(int action,
        ++adapter->erp_total_count;
 
        /* finally put it into 'ready' queue and kick erp thread */
-       list_add(&erp_action->list, &adapter->erp_ready_head);
+       list_add_tail(&erp_action->list, &adapter->erp_ready_head);
        up(&adapter->erp_ready_sem);
        retval = 0;
  out:
index 240a0bb8986fe3d428c58430234f241bdddd7630..abce48ccc85b620f92f5779f37c23aa487d37a4a 100644 (file)
@@ -1339,10 +1339,10 @@ int aac_check_health(struct aac_dev * aac)
                        aif = (struct aac_aifcmd *)hw_fib->data;
                        aif->command = cpu_to_le32(AifCmdEventNotify);
                        aif->seqnum = cpu_to_le32(0xFFFFFFFF);
-                       aif->data[0] = cpu_to_le32(AifEnExpEvent);
-                       aif->data[1] = cpu_to_le32(AifExeFirmwarePanic);
-                       aif->data[2] = cpu_to_le32(AifHighPriority);
-                       aif->data[3] = cpu_to_le32(BlinkLED);
+                       aif->data[0] = AifEnExpEvent;
+                       aif->data[1] = AifExeFirmwarePanic;
+                       aif->data[2] = AifHighPriority;
+                       aif->data[3] = BlinkLED;
 
                        /*
                         * Put the FIB onto the
index 038980be763d18f75ef37902662ceb766b72a530..9dd331bc29b01386f89532e4c057d5a126f516e0 100644 (file)
@@ -636,7 +636,7 @@ static int aac_cfg_open(struct inode *inode, struct file *file)
 static int aac_cfg_ioctl(struct inode *inode,  struct file *file,
                unsigned int cmd, unsigned long arg)
 {
-       if (!capable(CAP_SYS_ADMIN))
+       if (!capable(CAP_SYS_RAWIO))
                return -EPERM;
        return aac_do_ioctl(file->private_data, cmd, (void __user *)arg);
 }
@@ -691,7 +691,7 @@ static int aac_compat_ioctl(struct scsi_device *sdev, int cmd, void __user *arg)
 
 static long aac_compat_cfg_ioctl(struct file *file, unsigned cmd, unsigned long arg)
 {
-       if (!capable(CAP_SYS_ADMIN))
+       if (!capable(CAP_SYS_RAWIO))
                return -EPERM;
        return aac_compat_do_ioctl((struct aac_dev *)file->private_data, cmd, arg);
 }
@@ -950,7 +950,8 @@ static struct scsi_host_template aac_driver_template = {
 
 static void __aac_shutdown(struct aac_dev * aac)
 {
-       kthread_stop(aac->thread);
+       if (aac->aif_thread)
+               kthread_stop(aac->thread);
        aac_send_shutdown(aac);
        aac_adapter_disable_int(aac);
        free_irq(aac->pdev->irq, aac);
index 6f8403b82ba1b9a861af804b6a655bbea00060ea..f5732d8f67fec793badb30948d369710e9260a55 100644 (file)
@@ -393,7 +393,7 @@ static irqreturn_t scsi_tt_intr(int irq, void *dummy)
 
 #endif /* REAL_DMA */
 
-       NCR5380_intr(0, 0);
+       NCR5380_intr(irq, dummy);
 
 #if 0
        /* To be sure the int is not masked */
@@ -458,7 +458,7 @@ static irqreturn_t scsi_falcon_intr(int irq, void *dummy)
 
 #endif /* REAL_DMA */
 
-       NCR5380_intr(0, 0);
+       NCR5380_intr(irq, dummy);
        return IRQ_HANDLED;
 }
 
@@ -684,7 +684,7 @@ int atari_scsi_detect(struct scsi_host_template *host)
                 * interrupt after having cleared the pending flag for the DMA
                 * interrupt. */
                if (request_irq(IRQ_TT_MFP_SCSI, scsi_tt_intr, IRQ_TYPE_SLOW,
-                                "SCSI NCR5380", scsi_tt_intr)) {
+                                "SCSI NCR5380", instance)) {
                        printk(KERN_ERR "atari_scsi_detect: cannot allocate irq %d, aborting",IRQ_TT_MFP_SCSI);
                        scsi_unregister(atari_scsi_host);
                        atari_stram_free(atari_dma_buffer);
@@ -701,7 +701,7 @@ int atari_scsi_detect(struct scsi_host_template *host)
                                         IRQ_TYPE_PRIO, "Hades DMA emulator",
                                         hades_dma_emulator)) {
                                printk(KERN_ERR "atari_scsi_detect: cannot allocate irq %d, aborting (MACH_IS_HADES)",IRQ_AUTO_2);
-                               free_irq(IRQ_TT_MFP_SCSI, scsi_tt_intr);
+                               free_irq(IRQ_TT_MFP_SCSI, instance);
                                scsi_unregister(atari_scsi_host);
                                atari_stram_free(atari_dma_buffer);
                                atari_dma_buffer = 0;
@@ -761,7 +761,7 @@ int atari_scsi_detect(struct scsi_host_template *host)
 int atari_scsi_release(struct Scsi_Host *sh)
 {
        if (IS_A_TT())
-               free_irq(IRQ_TT_MFP_SCSI, scsi_tt_intr);
+               free_irq(IRQ_TT_MFP_SCSI, sh);
        if (atari_dma_buffer)
                atari_stram_free(atari_dma_buffer);
        return 1;
index 8258506ba7d793d8a4fe2fd8e0e7fe4a3fb26245..70f48a1a6d588fe0dc11530fa7d3383bc5cc8e37 100644 (file)
@@ -173,20 +173,20 @@ static struct pci_device_id dptids[] = {
 };
 MODULE_DEVICE_TABLE(pci,dptids);
 
-static void adpt_exit(void);
-
-static int adpt_detect(void)
+static int adpt_detect(struct scsi_host_template* sht)
 {
        struct pci_dev *pDev = NULL;
        adpt_hba* pHba;
 
+       adpt_init();
+
        PINFO("Detecting Adaptec I2O RAID controllers...\n");
 
         /* search for all Adatpec I2O RAID cards */
        while ((pDev = pci_get_device( PCI_DPT_VENDOR_ID, PCI_ANY_ID, pDev))) {
                if(pDev->device == PCI_DPT_DEVICE_ID ||
                   pDev->device == PCI_DPT_RAPTOR_DEVICE_ID){
-                       if(adpt_install_hba(pDev) ){
+                       if(adpt_install_hba(sht, pDev) ){
                                PERROR("Could not Init an I2O RAID device\n");
                                PERROR("Will not try to detect others.\n");
                                return hba_count-1;
@@ -248,33 +248,34 @@ rebuild_sys_tab:
        }
 
        for (pHba = hba_chain; pHba; pHba = pHba->next) {
-               if (adpt_scsi_register(pHba) < 0) {
+               if( adpt_scsi_register(pHba,sht) < 0){
                        adpt_i2o_delete_hba(pHba);
                        continue;
                }
                pHba->initialized = TRUE;
                pHba->state &= ~DPTI_STATE_RESET;
-               scsi_scan_host(pHba->host);
        }
 
        // Register our control device node
        // nodes will need to be created in /dev to access this
        // the nodes can not be created from within the driver
        if (hba_count && register_chrdev(DPTI_I2O_MAJOR, DPT_DRIVER, &adpt_fops)) {
-               adpt_exit();
+               adpt_i2o_sys_shutdown();
                return 0;
        }
        return hba_count;
 }
 
 
-static int adpt_release(adpt_hba *pHba)
+/*
+ * scsi_unregister will be called AFTER we return.
+ */
+static int adpt_release(struct Scsi_Host *host)
 {
-       struct Scsi_Host *shost = pHba->host;
-       scsi_remove_host(shost);
+       adpt_hba* pHba = (adpt_hba*) host->hostdata[0];
 //     adpt_i2o_quiesce_hba(pHba);
        adpt_i2o_delete_hba(pHba);
-       scsi_host_put(shost);
+       scsi_unregister(host);
        return 0;
 }
 
@@ -881,7 +882,7 @@ static int adpt_reboot_event(struct notifier_block *n, ulong code, void *p)
 #endif
 
 
-static int adpt_install_hba(struct pci_dev* pDev)
+static int adpt_install_hba(struct scsi_host_template* sht, struct pci_dev* pDev)
 {
 
        adpt_hba* pHba = NULL;
@@ -1028,6 +1029,8 @@ static void adpt_i2o_delete_hba(adpt_hba* pHba)
 
 
        mutex_lock(&adpt_configuration_lock);
+       // scsi_unregister calls our adpt_release which
+       // does a quiese
        if(pHba->host){
                free_irq(pHba->host->irq, pHba);
        }
@@ -1079,6 +1082,17 @@ static void adpt_i2o_delete_hba(adpt_hba* pHba)
 }
 
 
+static int adpt_init(void)
+{
+       printk("Loading Adaptec I2O RAID: Version " DPT_I2O_VERSION "\n");
+#ifdef REBOOT_NOTIFIER
+       register_reboot_notifier(&adpt_reboot_notifier);
+#endif
+
+       return 0;
+}
+
+
 static struct adpt_device* adpt_find_device(adpt_hba* pHba, u32 chan, u32 id, u32 lun)
 {
        struct adpt_device* d;
@@ -2164,6 +2178,37 @@ static s32 adpt_scsi_to_i2o(adpt_hba* pHba, struct scsi_cmnd* cmd, struct adpt_d
 }
 
 
+static s32 adpt_scsi_register(adpt_hba* pHba,struct scsi_host_template * sht)
+{
+       struct Scsi_Host *host = NULL;
+
+       host = scsi_register(sht, sizeof(adpt_hba*));
+       if (host == NULL) {
+               printk ("%s: scsi_register returned NULL\n",pHba->name);
+               return -1;
+       }
+       host->hostdata[0] = (unsigned long)pHba;
+       pHba->host = host;
+
+       host->irq = pHba->pDev->irq;
+       /* no IO ports, so don't have to set host->io_port and
+        * host->n_io_port
+        */
+       host->io_port = 0;
+       host->n_io_port = 0;
+                               /* see comments in scsi_host.h */
+       host->max_id = 16;
+       host->max_lun = 256;
+       host->max_channel = pHba->top_scsi_channel + 1;
+       host->cmd_per_lun = 1;
+       host->unique_id = (uint) pHba;
+       host->sg_tablesize = pHba->sg_tablesize;
+       host->can_queue = pHba->post_fifo_size;
+
+       return 0;
+}
+
+
 static s32 adpt_i2o_to_scsi(void __iomem *reply, struct scsi_cmnd* cmd)
 {
        adpt_hba* pHba;
@@ -3279,10 +3324,12 @@ static static void adpt_delay(int millisec)
 
 #endif
 
-static struct scsi_host_template adpt_template = {
+static struct scsi_host_template driver_template = {
        .name                   = "dpt_i2o",
        .proc_name              = "dpt_i2o",
        .proc_info              = adpt_proc_info,
+       .detect                 = adpt_detect,
+       .release                = adpt_release,
        .info                   = adpt_info,
        .queuecommand           = adpt_queue,
        .eh_abort_handler       = adpt_abort,
@@ -3297,62 +3344,5 @@ static struct scsi_host_template adpt_template = {
        .use_clustering         = ENABLE_CLUSTERING,
        .use_sg_chaining        = ENABLE_SG_CHAINING,
 };
-
-static s32 adpt_scsi_register(adpt_hba* pHba)
-{
-       struct Scsi_Host *host;
-
-       host = scsi_host_alloc(&adpt_template, sizeof(adpt_hba*));
-       if (host == NULL) {
-               printk ("%s: scsi_host_alloc returned NULL\n",pHba->name);
-               return -1;
-       }
-       host->hostdata[0] = (unsigned long)pHba;
-       pHba->host = host;
-
-       host->irq = pHba->pDev->irq;
-       /* no IO ports, so don't have to set host->io_port and
-        * host->n_io_port
-        */
-       host->io_port = 0;
-       host->n_io_port = 0;
-                               /* see comments in scsi_host.h */
-       host->max_id = 16;
-       host->max_lun = 256;
-       host->max_channel = pHba->top_scsi_channel + 1;
-       host->cmd_per_lun = 1;
-       host->unique_id = (uint) pHba;
-       host->sg_tablesize = pHba->sg_tablesize;
-       host->can_queue = pHba->post_fifo_size;
-
-       if (scsi_add_host(host, &pHba->pDev->dev)) {
-               scsi_host_put(host);
-               return -1;
-       }
-
-       return 0;
-}
-
-static int __init adpt_init(void)
-{
-       int count;
-
-       printk("Loading Adaptec I2O RAID: Version " DPT_I2O_VERSION "\n");
-#ifdef REBOOT_NOTIFIER
-       register_reboot_notifier(&adpt_reboot_notifier);
-#endif
-
-       count = adpt_detect();
-
-       return count > 0 ? 0 : -ENODEV;
-}
-
-static void adpt_exit(void)
-{
-       while (hba_chain)
-               adpt_release(hba_chain);
-}
-
-module_init(adpt_init);
-module_exit(adpt_exit);
+#include "scsi_module.c"
 MODULE_LICENSE("GPL");
index 0892f6c703199bff7b060b1fef5cf71c46fe2a2b..fd79068c586931b640eb2f1814b96eaa84bae76b 100644 (file)
  * SCSI interface function Prototypes
  */
 
+static int adpt_detect(struct scsi_host_template * sht);
 static int adpt_queue(struct scsi_cmnd * cmd, void (*cmdcomplete) (struct scsi_cmnd *));
 static int adpt_abort(struct scsi_cmnd * cmd);
 static int adpt_reset(struct scsi_cmnd* cmd);
+static int adpt_release(struct Scsi_Host *host);
 static int adpt_slave_configure(struct scsi_device *);
 
 static const char *adpt_info(struct Scsi_Host *pSHost);
@@ -47,6 +49,8 @@ static int adpt_device_reset(struct scsi_cmnd* cmd);
 
 #define DPT_DRIVER_NAME        "Adaptec I2O RAID"
 
+#ifndef HOSTS_C
+
 #include "dpt/sys_info.h"
 #include <linux/wait.h>
 #include "dpt/dpti_i2o.h"
@@ -285,7 +289,7 @@ static s32 adpt_i2o_init_outbound_q(adpt_hba* pHba);
 static s32 adpt_i2o_hrt_get(adpt_hba* pHba);
 static s32 adpt_scsi_to_i2o(adpt_hba* pHba, struct scsi_cmnd* cmd, struct adpt_device* dptdevice);
 static s32 adpt_i2o_to_scsi(void __iomem *reply, struct scsi_cmnd* cmd);
-static s32 adpt_scsi_register(adpt_hba* pHba);
+static s32 adpt_scsi_register(adpt_hba* pHba,struct scsi_host_template * sht);
 static s32 adpt_hba_reset(adpt_hba* pHba);
 static s32 adpt_i2o_reset_hba(adpt_hba* pHba);
 static s32 adpt_rescan(adpt_hba* pHba);
@@ -295,7 +299,7 @@ static void adpt_i2o_delete_hba(adpt_hba* pHba);
 static void adpt_inquiry(adpt_hba* pHba);
 static void adpt_fail_posted_scbs(adpt_hba* pHba);
 static struct adpt_device* adpt_find_device(adpt_hba* pHba, u32 chan, u32 id, u32 lun);
-static int adpt_install_hba(struct pci_dev* pDev) ;
+static int adpt_install_hba(struct scsi_host_template* sht, struct pci_dev* pDev) ;
 static int adpt_i2o_online_hba(adpt_hba* pHba);
 static void adpt_i2o_post_wait_complete(u32, int);
 static int adpt_i2o_systab_send(adpt_hba* pHba);
@@ -339,4 +343,5 @@ static void adpt_i386_info(sysInfo_S* si);
 #define FW_DEBUG_BLED_OFFSET       8
 
 #define FW_DEBUG_FLAGS_NO_HEADERS_B    0x01
+#endif                         /* !HOSTS_C */
 #endif                         /* _DPT_H */
index 2596165096d37f73c0ebbda03fb27d8686beffad..c2677ba29c74619ad581b895018ffd07ee3ce9b5 100644 (file)
@@ -277,7 +277,8 @@ found:
                /* With interrupts enabled, it will sometimes hang when doing heavy
                 * reads. So better not enable them until I finger it out. */
                if (instance->irq != SCSI_IRQ_NONE)
-                       if (request_irq(instance->irq, dtc_intr, IRQF_DISABLED, "dtc", instance)) {
+                       if (request_irq(instance->irq, dtc_intr, IRQF_DISABLED,
+                                       "dtc", instance)) {
                                printk(KERN_ERR "scsi%d : IRQ%d not free, interrupts disabled\n", instance->host_no, instance->irq);
                                instance->irq = SCSI_IRQ_NONE;
                        }
@@ -459,7 +460,7 @@ static int dtc_release(struct Scsi_Host *shost)
        NCR5380_local_declare();
        NCR5380_setup(shost);
        if (shost->irq)
-               free_irq(shost->irq, NULL);
+               free_irq(shost->irq, shost);
        NCR5380_exit(shost);
        if (shost->io_port && shost->n_io_port)
                release_region(shost->io_port, shost->n_io_port);
index 4ed3a529706615f0bd94d51399cb39b5ee8b79b0..bfdee596889296f3c4ef3a6db1f7201c3f30e34a 100644 (file)
@@ -2026,8 +2026,8 @@ static void esp_reset_cleanup(struct esp *esp)
                tp->flags |= ESP_TGT_CHECK_NEGO;
 
                if (tp->starget)
-                       starget_for_each_device(tp->starget, NULL,
-                                               esp_clear_hold);
+                       __starget_for_each_device(tp->starget, NULL,
+                                                 esp_clear_hold);
        }
        esp->flags &= ~ESP_FLAG_RESETTING;
 }
index 607336f56d550b8a6d487d3c1a723877c7641b32..75585a52c88bc86dd6bffc472a16649a8daea7d8 100644 (file)
@@ -460,7 +460,8 @@ int __init generic_NCR5380_detect(struct scsi_host_template * tpnt)
                        instance->irq = NCR5380_probe_irq(instance, 0xffff);
 
                if (instance->irq != SCSI_IRQ_NONE)
-                       if (request_irq(instance->irq, generic_NCR5380_intr, IRQF_DISABLED, "NCR5380", instance)) {
+                       if (request_irq(instance->irq, generic_NCR5380_intr,
+                                       IRQF_DISABLED, "NCR5380", instance)) {
                                printk(KERN_WARNING "scsi%d : IRQ%d not free, interrupts disabled\n", instance->host_no, instance->irq);
                                instance->irq = SCSI_IRQ_NONE;
                        }
@@ -513,7 +514,7 @@ int generic_NCR5380_release_resources(struct Scsi_Host *instance)
        NCR5380_setup(instance);
        
        if (instance->irq != SCSI_IRQ_NONE)
-               free_irq(instance->irq, NULL);
+               free_irq(instance->irq, instance);
        NCR5380_exit(instance);
 
 #ifndef CONFIG_SCSI_G_NCR5380_MEM
index 8d0244c2e7d4fdf759ed85e4a885c3a73a8b5d60..7a835a35f21da52296179b0e9a3feeaca9a3c307 100644 (file)
@@ -242,16 +242,6 @@ static void idescsi_output_buffers (ide_drive_t *drive, idescsi_pc_t *pc, unsign
        }
 }
 
-static void hexdump(u8 *x, int len)
-{
-       int i;
-
-       printk("[ ");
-       for (i = 0; i < len; i++)
-               printk("%x ", x[i]);
-       printk("]\n");
-}
-
 static int idescsi_check_condition(ide_drive_t *drive, struct request *failed_command)
 {
        idescsi_scsi_t *scsi = drive_to_idescsi(drive);
@@ -282,7 +272,8 @@ static int idescsi_check_condition(ide_drive_t *drive, struct request *failed_co
        pc->scsi_cmd = ((idescsi_pc_t *) failed_command->special)->scsi_cmd;
        if (test_bit(IDESCSI_LOG_CMD, &scsi->log)) {
                printk ("ide-scsi: %s: queue cmd = ", drive->name);
-               hexdump(pc->c, 6);
+               print_hex_dump(KERN_CONT, "", DUMP_PREFIX_NONE, 16, 1, pc->c,
+                              6, 0);
        }
        rq->rq_disk = scsi->disk;
        return ide_do_drive_cmd(drive, rq, ide_preempt);
@@ -337,7 +328,8 @@ static int idescsi_end_request (ide_drive_t *drive, int uptodate, int nrsecs)
                idescsi_pc_t *opc = (idescsi_pc_t *) rq->buffer;
                if (log) {
                        printk ("ide-scsi: %s: wrap up check %lu, rst = ", drive->name, opc->scsi_cmd->serial_number);
-                       hexdump(pc->buffer,16);
+                       print_hex_dump(KERN_CONT, "", DUMP_PREFIX_NONE, 16, 1,
+                                      pc->buffer, 16, 0);
                }
                memcpy((void *) opc->scsi_cmd->sense_buffer, pc->buffer, SCSI_SENSE_BUFFERSIZE);
                kfree(pc->buffer);
@@ -816,10 +808,12 @@ static int idescsi_queue (struct scsi_cmnd *cmd,
 
        if (test_bit(IDESCSI_LOG_CMD, &scsi->log)) {
                printk ("ide-scsi: %s: que %lu, cmd = ", drive->name, cmd->serial_number);
-               hexdump(cmd->cmnd, cmd->cmd_len);
+               print_hex_dump(KERN_CONT, "", DUMP_PREFIX_NONE, 16, 1,
+                              cmd->cmnd, cmd->cmd_len, 0);
                if (memcmp(pc->c, cmd->cmnd, cmd->cmd_len)) {
                        printk ("ide-scsi: %s: que %lu, tsl = ", drive->name, cmd->serial_number);
-                       hexdump(pc->c, 12);
+                       print_hex_dump(KERN_CONT, "", DUMP_PREFIX_NONE, 16, 1,
+                                      pc->c, 12, 0);
                }
        }
 
index 4bcf916c21a7e0c50ef853bbe0cec582916f49c4..57ce2251abc818a31a6db047666306d05fd5d785 100644 (file)
@@ -197,7 +197,7 @@ iscsi_tcp_cleanup_ctask(struct iscsi_conn *conn, struct iscsi_cmd_task *ctask)
        if (unlikely(!sc))
                return;
 
-       tcp_ctask->xmstate = XMSTATE_IDLE;
+       tcp_ctask->xmstate = XMSTATE_VALUE_IDLE;
        tcp_ctask->r2t = NULL;
 }
 
@@ -409,7 +409,7 @@ iscsi_r2t_rsp(struct iscsi_conn *conn, struct iscsi_cmd_task *ctask)
 
        tcp_ctask->exp_datasn = r2tsn + 1;
        __kfifo_put(tcp_ctask->r2tqueue, (void*)&r2t, sizeof(void*));
-       tcp_ctask->xmstate |= XMSTATE_SOL_HDR_INIT;
+       set_bit(XMSTATE_BIT_SOL_HDR_INIT, &tcp_ctask->xmstate);
        list_move_tail(&ctask->running, &conn->xmitqueue);
 
        scsi_queue_work(session->host, &conn->xmitwork);
@@ -1254,7 +1254,7 @@ static void iscsi_set_padding(struct iscsi_tcp_cmd_task *tcp_ctask,
 
        tcp_ctask->pad_count = ISCSI_PAD_LEN - tcp_ctask->pad_count;
        debug_scsi("write padding %d bytes\n", tcp_ctask->pad_count);
-       tcp_ctask->xmstate |= XMSTATE_W_PAD;
+       set_bit(XMSTATE_BIT_W_PAD, &tcp_ctask->xmstate);
 }
 
 /**
@@ -1269,7 +1269,7 @@ iscsi_tcp_cmd_init(struct iscsi_cmd_task *ctask)
        struct iscsi_tcp_cmd_task *tcp_ctask = ctask->dd_data;
 
        BUG_ON(__kfifo_len(tcp_ctask->r2tqueue));
-       tcp_ctask->xmstate = XMSTATE_CMD_HDR_INIT;
+       tcp_ctask->xmstate = 1 << XMSTATE_BIT_CMD_HDR_INIT;
 }
 
 /**
@@ -1283,10 +1283,10 @@ iscsi_tcp_cmd_init(struct iscsi_cmd_task *ctask)
  *     xmit.
  *
  *     Management xmit state machine consists of these states:
- *             XMSTATE_IMM_HDR_INIT    - calculate digest of PDU Header
- *             XMSTATE_IMM_HDR         - PDU Header xmit in progress
- *             XMSTATE_IMM_DATA        - PDU Data xmit in progress
- *             XMSTATE_IDLE            - management PDU is done
+ *             XMSTATE_BIT_IMM_HDR_INIT - calculate digest of PDU Header
+ *             XMSTATE_BIT_IMM_HDR      - PDU Header xmit in progress
+ *             XMSTATE_BIT_IMM_DATA     - PDU Data xmit in progress
+ *             XMSTATE_VALUE_IDLE       - management PDU is done
  **/
 static int
 iscsi_tcp_mtask_xmit(struct iscsi_conn *conn, struct iscsi_mgmt_task *mtask)
@@ -1297,12 +1297,12 @@ iscsi_tcp_mtask_xmit(struct iscsi_conn *conn, struct iscsi_mgmt_task *mtask)
        debug_scsi("mtask deq [cid %d state %x itt 0x%x]\n",
                conn->id, tcp_mtask->xmstate, mtask->itt);
 
-       if (tcp_mtask->xmstate & XMSTATE_IMM_HDR_INIT) {
+       if (test_bit(XMSTATE_BIT_IMM_HDR_INIT, &tcp_mtask->xmstate)) {
                iscsi_buf_init_iov(&tcp_mtask->headbuf, (char*)mtask->hdr,
                                   sizeof(struct iscsi_hdr));
 
                if (mtask->data_count) {
-                       tcp_mtask->xmstate |= XMSTATE_IMM_DATA;
+                       set_bit(XMSTATE_BIT_IMM_DATA, &tcp_mtask->xmstate);
                        iscsi_buf_init_iov(&tcp_mtask->sendbuf,
                                           (char*)mtask->data,
                                           mtask->data_count);
@@ -1315,21 +1315,20 @@ iscsi_tcp_mtask_xmit(struct iscsi_conn *conn, struct iscsi_mgmt_task *mtask)
                                        (u8*)tcp_mtask->hdrext);
 
                tcp_mtask->sent = 0;
-               tcp_mtask->xmstate &= ~XMSTATE_IMM_HDR_INIT;
-               tcp_mtask->xmstate |= XMSTATE_IMM_HDR;
+               clear_bit(XMSTATE_BIT_IMM_HDR_INIT, &tcp_mtask->xmstate);
+               set_bit(XMSTATE_BIT_IMM_HDR, &tcp_mtask->xmstate);
        }
 
-       if (tcp_mtask->xmstate & XMSTATE_IMM_HDR) {
+       if (test_bit(XMSTATE_BIT_IMM_HDR, &tcp_mtask->xmstate)) {
                rc = iscsi_sendhdr(conn, &tcp_mtask->headbuf,
                                   mtask->data_count);
                if (rc)
                        return rc;
-               tcp_mtask->xmstate &= ~XMSTATE_IMM_HDR;
+               clear_bit(XMSTATE_BIT_IMM_HDR, &tcp_mtask->xmstate);
        }
 
-       if (tcp_mtask->xmstate & XMSTATE_IMM_DATA) {
+       if (test_and_clear_bit(XMSTATE_BIT_IMM_DATA, &tcp_mtask->xmstate)) {
                BUG_ON(!mtask->data_count);
-               tcp_mtask->xmstate &= ~XMSTATE_IMM_DATA;
                /* FIXME: implement.
                 * Virtual buffer could be spreaded across multiple pages...
                 */
@@ -1339,13 +1338,13 @@ iscsi_tcp_mtask_xmit(struct iscsi_conn *conn, struct iscsi_mgmt_task *mtask)
                        rc = iscsi_sendpage(conn, &tcp_mtask->sendbuf,
                                        &mtask->data_count, &tcp_mtask->sent);
                        if (rc) {
-                               tcp_mtask->xmstate |= XMSTATE_IMM_DATA;
+                               set_bit(XMSTATE_BIT_IMM_DATA, &tcp_mtask->xmstate);
                                return rc;
                        }
                } while (mtask->data_count);
        }
 
-       BUG_ON(tcp_mtask->xmstate != XMSTATE_IDLE);
+       BUG_ON(tcp_mtask->xmstate != XMSTATE_VALUE_IDLE);
        if (mtask->hdr->itt == RESERVED_ITT) {
                struct iscsi_session *session = conn->session;
 
@@ -1365,7 +1364,7 @@ iscsi_send_cmd_hdr(struct iscsi_conn *conn, struct iscsi_cmd_task *ctask)
        struct iscsi_tcp_cmd_task *tcp_ctask = ctask->dd_data;
        int rc = 0;
 
-       if (tcp_ctask->xmstate & XMSTATE_CMD_HDR_INIT) {
+       if (test_bit(XMSTATE_BIT_CMD_HDR_INIT, &tcp_ctask->xmstate)) {
                tcp_ctask->sent = 0;
                tcp_ctask->sg_count = 0;
                tcp_ctask->exp_datasn = 0;
@@ -1390,21 +1389,21 @@ iscsi_send_cmd_hdr(struct iscsi_conn *conn, struct iscsi_cmd_task *ctask)
                if (conn->hdrdgst_en)
                        iscsi_hdr_digest(conn, &tcp_ctask->headbuf,
                                         (u8*)tcp_ctask->hdrext);
-               tcp_ctask->xmstate &= ~XMSTATE_CMD_HDR_INIT;
-               tcp_ctask->xmstate |= XMSTATE_CMD_HDR_XMIT;
+               clear_bit(XMSTATE_BIT_CMD_HDR_INIT, &tcp_ctask->xmstate);
+               set_bit(XMSTATE_BIT_CMD_HDR_XMIT, &tcp_ctask->xmstate);
        }
 
-       if (tcp_ctask->xmstate & XMSTATE_CMD_HDR_XMIT) {
+       if (test_bit(XMSTATE_BIT_CMD_HDR_XMIT, &tcp_ctask->xmstate)) {
                rc = iscsi_sendhdr(conn, &tcp_ctask->headbuf, ctask->imm_count);
                if (rc)
                        return rc;
-               tcp_ctask->xmstate &= ~XMSTATE_CMD_HDR_XMIT;
+               clear_bit(XMSTATE_BIT_CMD_HDR_XMIT, &tcp_ctask->xmstate);
 
                if (sc->sc_data_direction != DMA_TO_DEVICE)
                        return 0;
 
                if (ctask->imm_count) {
-                       tcp_ctask->xmstate |= XMSTATE_IMM_DATA;
+                       set_bit(XMSTATE_BIT_IMM_DATA, &tcp_ctask->xmstate);
                        iscsi_set_padding(tcp_ctask, ctask->imm_count);
 
                        if (ctask->conn->datadgst_en) {
@@ -1414,9 +1413,10 @@ iscsi_send_cmd_hdr(struct iscsi_conn *conn, struct iscsi_cmd_task *ctask)
                        }
                }
 
-               if (ctask->unsol_count)
-                       tcp_ctask->xmstate |=
-                                       XMSTATE_UNS_HDR | XMSTATE_UNS_INIT;
+               if (ctask->unsol_count) {
+                       set_bit(XMSTATE_BIT_UNS_HDR, &tcp_ctask->xmstate);
+                       set_bit(XMSTATE_BIT_UNS_INIT, &tcp_ctask->xmstate);
+               }
        }
        return rc;
 }
@@ -1428,25 +1428,25 @@ iscsi_send_padding(struct iscsi_conn *conn, struct iscsi_cmd_task *ctask)
        struct iscsi_tcp_conn *tcp_conn = conn->dd_data;
        int sent = 0, rc;
 
-       if (tcp_ctask->xmstate & XMSTATE_W_PAD) {
+       if (test_bit(XMSTATE_BIT_W_PAD, &tcp_ctask->xmstate)) {
                iscsi_buf_init_iov(&tcp_ctask->sendbuf, (char*)&tcp_ctask->pad,
                                   tcp_ctask->pad_count);
                if (conn->datadgst_en)
                        crypto_hash_update(&tcp_conn->tx_hash,
                                           &tcp_ctask->sendbuf.sg,
                                           tcp_ctask->sendbuf.sg.length);
-       } else if (!(tcp_ctask->xmstate & XMSTATE_W_RESEND_PAD))
+       } else if (!test_bit(XMSTATE_BIT_W_RESEND_PAD, &tcp_ctask->xmstate))
                return 0;
 
-       tcp_ctask->xmstate &= ~XMSTATE_W_PAD;
-       tcp_ctask->xmstate &= ~XMSTATE_W_RESEND_PAD;
+       clear_bit(XMSTATE_BIT_W_PAD, &tcp_ctask->xmstate);
+       clear_bit(XMSTATE_BIT_W_RESEND_PAD, &tcp_ctask->xmstate);
        debug_scsi("sending %d pad bytes for itt 0x%x\n",
                   tcp_ctask->pad_count, ctask->itt);
        rc = iscsi_sendpage(conn, &tcp_ctask->sendbuf, &tcp_ctask->pad_count,
                           &sent);
        if (rc) {
                debug_scsi("padding send failed %d\n", rc);
-               tcp_ctask->xmstate |= XMSTATE_W_RESEND_PAD;
+               set_bit(XMSTATE_BIT_W_RESEND_PAD, &tcp_ctask->xmstate);
        }
        return rc;
 }
@@ -1465,11 +1465,11 @@ iscsi_send_digest(struct iscsi_conn *conn, struct iscsi_cmd_task *ctask,
        tcp_ctask = ctask->dd_data;
        tcp_conn = conn->dd_data;
 
-       if (!(tcp_ctask->xmstate & XMSTATE_W_RESEND_DATA_DIGEST)) {
+       if (!test_bit(XMSTATE_BIT_W_RESEND_DATA_DIGEST, &tcp_ctask->xmstate)) {
                crypto_hash_final(&tcp_conn->tx_hash, (u8*)digest);
                iscsi_buf_init_iov(buf, (char*)digest, 4);
        }
-       tcp_ctask->xmstate &= ~XMSTATE_W_RESEND_DATA_DIGEST;
+       clear_bit(XMSTATE_BIT_W_RESEND_DATA_DIGEST, &tcp_ctask->xmstate);
 
        rc = iscsi_sendpage(conn, buf, &tcp_ctask->digest_count, &sent);
        if (!rc)
@@ -1478,7 +1478,7 @@ iscsi_send_digest(struct iscsi_conn *conn, struct iscsi_cmd_task *ctask,
        else {
                debug_scsi("sending digest 0x%x failed for itt 0x%x!\n",
                          *digest, ctask->itt);
-               tcp_ctask->xmstate |= XMSTATE_W_RESEND_DATA_DIGEST;
+               set_bit(XMSTATE_BIT_W_RESEND_DATA_DIGEST, &tcp_ctask->xmstate);
        }
        return rc;
 }
@@ -1526,8 +1526,8 @@ iscsi_send_unsol_hdr(struct iscsi_conn *conn, struct iscsi_cmd_task *ctask)
        struct iscsi_data_task *dtask;
        int rc;
 
-       tcp_ctask->xmstate |= XMSTATE_UNS_DATA;
-       if (tcp_ctask->xmstate & XMSTATE_UNS_INIT) {
+       set_bit(XMSTATE_BIT_UNS_DATA, &tcp_ctask->xmstate);
+       if (test_bit(XMSTATE_BIT_UNS_INIT, &tcp_ctask->xmstate)) {
                dtask = &tcp_ctask->unsol_dtask;
 
                iscsi_prep_unsolicit_data_pdu(ctask, &dtask->hdr);
@@ -1537,14 +1537,14 @@ iscsi_send_unsol_hdr(struct iscsi_conn *conn, struct iscsi_cmd_task *ctask)
                        iscsi_hdr_digest(conn, &tcp_ctask->headbuf,
                                        (u8*)dtask->hdrext);
 
-               tcp_ctask->xmstate &= ~XMSTATE_UNS_INIT;
+               clear_bit(XMSTATE_BIT_UNS_INIT, &tcp_ctask->xmstate);
                iscsi_set_padding(tcp_ctask, ctask->data_count);
        }
 
        rc = iscsi_sendhdr(conn, &tcp_ctask->headbuf, ctask->data_count);
        if (rc) {
-               tcp_ctask->xmstate &= ~XMSTATE_UNS_DATA;
-               tcp_ctask->xmstate |= XMSTATE_UNS_HDR;
+               clear_bit(XMSTATE_BIT_UNS_DATA, &tcp_ctask->xmstate);
+               set_bit(XMSTATE_BIT_UNS_HDR, &tcp_ctask->xmstate);
                return rc;
        }
 
@@ -1565,16 +1565,15 @@ iscsi_send_unsol_pdu(struct iscsi_conn *conn, struct iscsi_cmd_task *ctask)
        struct iscsi_tcp_cmd_task *tcp_ctask = ctask->dd_data;
        int rc;
 
-       if (tcp_ctask->xmstate & XMSTATE_UNS_HDR) {
+       if (test_and_clear_bit(XMSTATE_BIT_UNS_HDR, &tcp_ctask->xmstate)) {
                BUG_ON(!ctask->unsol_count);
-               tcp_ctask->xmstate &= ~XMSTATE_UNS_HDR;
 send_hdr:
                rc = iscsi_send_unsol_hdr(conn, ctask);
                if (rc)
                        return rc;
        }
 
-       if (tcp_ctask->xmstate & XMSTATE_UNS_DATA) {
+       if (test_bit(XMSTATE_BIT_UNS_DATA, &tcp_ctask->xmstate)) {
                struct iscsi_data_task *dtask = &tcp_ctask->unsol_dtask;
                int start = tcp_ctask->sent;
 
@@ -1584,14 +1583,14 @@ send_hdr:
                ctask->unsol_count -= tcp_ctask->sent - start;
                if (rc)
                        return rc;
-               tcp_ctask->xmstate &= ~XMSTATE_UNS_DATA;
+               clear_bit(XMSTATE_BIT_UNS_DATA, &tcp_ctask->xmstate);
                /*
                 * Done with the Data-Out. Next, check if we need
                 * to send another unsolicited Data-Out.
                 */
                if (ctask->unsol_count) {
                        debug_scsi("sending more uns\n");
-                       tcp_ctask->xmstate |= XMSTATE_UNS_INIT;
+                       set_bit(XMSTATE_BIT_UNS_INIT, &tcp_ctask->xmstate);
                        goto send_hdr;
                }
        }
@@ -1607,7 +1606,7 @@ static int iscsi_send_sol_pdu(struct iscsi_conn *conn,
        struct iscsi_data_task *dtask;
        int left, rc;
 
-       if (tcp_ctask->xmstate & XMSTATE_SOL_HDR_INIT) {
+       if (test_bit(XMSTATE_BIT_SOL_HDR_INIT, &tcp_ctask->xmstate)) {
                if (!tcp_ctask->r2t) {
                        spin_lock_bh(&session->lock);
                        __kfifo_get(tcp_ctask->r2tqueue, (void*)&tcp_ctask->r2t,
@@ -1621,19 +1620,19 @@ send_hdr:
                if (conn->hdrdgst_en)
                        iscsi_hdr_digest(conn, &r2t->headbuf,
                                        (u8*)dtask->hdrext);
-               tcp_ctask->xmstate &= ~XMSTATE_SOL_HDR_INIT;
-               tcp_ctask->xmstate |= XMSTATE_SOL_HDR;
+               clear_bit(XMSTATE_BIT_SOL_HDR_INIT, &tcp_ctask->xmstate);
+               set_bit(XMSTATE_BIT_SOL_HDR, &tcp_ctask->xmstate);
        }
 
-       if (tcp_ctask->xmstate & XMSTATE_SOL_HDR) {
+       if (test_bit(XMSTATE_BIT_SOL_HDR, &tcp_ctask->xmstate)) {
                r2t = tcp_ctask->r2t;
                dtask = &r2t->dtask;
 
                rc = iscsi_sendhdr(conn, &r2t->headbuf, r2t->data_count);
                if (rc)
                        return rc;
-               tcp_ctask->xmstate &= ~XMSTATE_SOL_HDR;
-               tcp_ctask->xmstate |= XMSTATE_SOL_DATA;
+               clear_bit(XMSTATE_BIT_SOL_HDR, &tcp_ctask->xmstate);
+               set_bit(XMSTATE_BIT_SOL_DATA, &tcp_ctask->xmstate);
 
                if (conn->datadgst_en) {
                        iscsi_data_digest_init(conn->dd_data, tcp_ctask);
@@ -1646,7 +1645,7 @@ send_hdr:
                        r2t->sent);
        }
 
-       if (tcp_ctask->xmstate & XMSTATE_SOL_DATA) {
+       if (test_bit(XMSTATE_BIT_SOL_DATA, &tcp_ctask->xmstate)) {
                r2t = tcp_ctask->r2t;
                dtask = &r2t->dtask;
 
@@ -1655,7 +1654,7 @@ send_hdr:
                                     &dtask->digestbuf, &dtask->digest);
                if (rc)
                        return rc;
-               tcp_ctask->xmstate &= ~XMSTATE_SOL_DATA;
+               clear_bit(XMSTATE_BIT_SOL_DATA, &tcp_ctask->xmstate);
 
                /*
                 * Done with this Data-Out. Next, check if we have
@@ -1700,32 +1699,32 @@ send_hdr:
  *     xmit stages.
  *
  *iscsi_send_cmd_hdr()
- *     XMSTATE_CMD_HDR_INIT - prepare Header and Data buffers Calculate
- *                            Header Digest
- *     XMSTATE_CMD_HDR_XMIT - Transmit header in progress
+ *     XMSTATE_BIT_CMD_HDR_INIT - prepare Header and Data buffers Calculate
+ *                                Header Digest
+ *     XMSTATE_BIT_CMD_HDR_XMIT - Transmit header in progress
  *
  *iscsi_send_padding
- *     XMSTATE_W_PAD        - Prepare and send pading
- *     XMSTATE_W_RESEND_PAD - retry send pading
+ *     XMSTATE_BIT_W_PAD        - Prepare and send pading
+ *     XMSTATE_BIT_W_RESEND_PAD - retry send pading
  *
  *iscsi_send_digest
- *     XMSTATE_W_RESEND_DATA_DIGEST - Finalize and send Data Digest
- *     XMSTATE_W_RESEND_DATA_DIGEST - retry sending digest
+ *     XMSTATE_BIT_W_RESEND_DATA_DIGEST - Finalize and send Data Digest
+ *     XMSTATE_BIT_W_RESEND_DATA_DIGEST - retry sending digest
  *
  *iscsi_send_unsol_hdr
- *     XMSTATE_UNS_INIT     - prepare un-solicit data header and digest
- *     XMSTATE_UNS_HDR      - send un-solicit header
+ *     XMSTATE_BIT_UNS_INIT     - prepare un-solicit data header and digest
+ *     XMSTATE_BIT_UNS_HDR      - send un-solicit header
  *
  *iscsi_send_unsol_pdu
- *     XMSTATE_UNS_DATA     - send un-solicit data in progress
+ *     XMSTATE_BIT_UNS_DATA     - send un-solicit data in progress
  *
  *iscsi_send_sol_pdu
- *     XMSTATE_SOL_HDR_INIT - solicit data header and digest initialize
- *     XMSTATE_SOL_HDR      - send solicit header
- *     XMSTATE_SOL_DATA     - send solicit data
+ *     XMSTATE_BIT_SOL_HDR_INIT - solicit data header and digest initialize
+ *     XMSTATE_BIT_SOL_HDR      - send solicit header
+ *     XMSTATE_BIT_SOL_DATA     - send solicit data
  *
  *iscsi_tcp_ctask_xmit
- *     XMSTATE_IMM_DATA     - xmit managment data (??)
+ *     XMSTATE_BIT_IMM_DATA     - xmit managment data (??)
  **/
 static int
 iscsi_tcp_ctask_xmit(struct iscsi_conn *conn, struct iscsi_cmd_task *ctask)
@@ -1742,13 +1741,13 @@ iscsi_tcp_ctask_xmit(struct iscsi_conn *conn, struct iscsi_cmd_task *ctask)
        if (ctask->sc->sc_data_direction != DMA_TO_DEVICE)
                return 0;
 
-       if (tcp_ctask->xmstate & XMSTATE_IMM_DATA) {
+       if (test_bit(XMSTATE_BIT_IMM_DATA, &tcp_ctask->xmstate)) {
                rc = iscsi_send_data(ctask, &tcp_ctask->sendbuf, &tcp_ctask->sg,
                                     &tcp_ctask->sent, &ctask->imm_count,
                                     &tcp_ctask->immbuf, &tcp_ctask->immdigest);
                if (rc)
                        return rc;
-               tcp_ctask->xmstate &= ~XMSTATE_IMM_DATA;
+               clear_bit(XMSTATE_BIT_IMM_DATA, &tcp_ctask->xmstate);
        }
 
        rc = iscsi_send_unsol_pdu(conn, ctask);
@@ -1981,7 +1980,7 @@ static void
 iscsi_tcp_mgmt_init(struct iscsi_conn *conn, struct iscsi_mgmt_task *mtask)
 {
        struct iscsi_tcp_mgmt_task *tcp_mtask = mtask->dd_data;
-       tcp_mtask->xmstate = XMSTATE_IMM_HDR_INIT;
+       tcp_mtask->xmstate = 1 << XMSTATE_BIT_IMM_HDR_INIT;
 }
 
 static int
index 7eba44df0a7f204059eae6f2be95dfe732c91954..68c36cc8997e47f451f4c7c7227ab378dbd57c07 100644 (file)
 #define IN_PROGRESS_PAD_RECV           0x4
 
 /* xmit state machine */
-#define XMSTATE_IDLE                   0x0
-#define XMSTATE_CMD_HDR_INIT           0x1
-#define XMSTATE_CMD_HDR_XMIT           0x2
-#define XMSTATE_IMM_HDR                        0x4
-#define XMSTATE_IMM_DATA               0x8
-#define XMSTATE_UNS_INIT               0x10
-#define XMSTATE_UNS_HDR                        0x20
-#define XMSTATE_UNS_DATA               0x40
-#define XMSTATE_SOL_HDR                        0x80
-#define XMSTATE_SOL_DATA               0x100
-#define XMSTATE_W_PAD                  0x200
-#define XMSTATE_W_RESEND_PAD           0x400
-#define XMSTATE_W_RESEND_DATA_DIGEST   0x800
-#define XMSTATE_IMM_HDR_INIT           0x1000
-#define XMSTATE_SOL_HDR_INIT           0x2000
+#define XMSTATE_VALUE_IDLE                     0
+#define XMSTATE_BIT_CMD_HDR_INIT               0
+#define XMSTATE_BIT_CMD_HDR_XMIT               1
+#define XMSTATE_BIT_IMM_HDR                    2
+#define XMSTATE_BIT_IMM_DATA                   3
+#define XMSTATE_BIT_UNS_INIT                   4
+#define XMSTATE_BIT_UNS_HDR                    5
+#define XMSTATE_BIT_UNS_DATA                   6
+#define XMSTATE_BIT_SOL_HDR                    7
+#define XMSTATE_BIT_SOL_DATA                   8
+#define XMSTATE_BIT_W_PAD                      9
+#define XMSTATE_BIT_W_RESEND_PAD               10
+#define XMSTATE_BIT_W_RESEND_DATA_DIGEST       11
+#define XMSTATE_BIT_IMM_HDR_INIT               12
+#define XMSTATE_BIT_SOL_HDR_INIT               13
 
 #define ISCSI_PAD_LEN                  4
 #define ISCSI_SG_TABLESIZE             SG_ALL
@@ -122,7 +122,7 @@ struct iscsi_data_task {
 struct iscsi_tcp_mgmt_task {
        struct iscsi_hdr        hdr;
        char                    hdrext[sizeof(__u32)]; /* Header-Digest */
-       int                     xmstate;        /* mgmt xmit progress */
+       unsigned long           xmstate;        /* mgmt xmit progress */
        struct iscsi_buf        headbuf;        /* header buffer */
        struct iscsi_buf        sendbuf;        /* in progress buffer */
        int                     sent;
@@ -150,7 +150,7 @@ struct iscsi_tcp_cmd_task {
        int                     pad_count;              /* padded bytes */
        struct iscsi_buf        headbuf;                /* header buf (xmit) */
        struct iscsi_buf        sendbuf;                /* in progress buffer*/
-       int                     xmstate;                /* xmit xtate machine */
+       unsigned long           xmstate;                /* xmit xtate machine */
        int                     sent;
        struct scatterlist      *sg;                    /* per-cmd SG list  */
        struct scatterlist      *bad_sg;                /* assert statement */
index efceed451b466245d847f59e4da02b7c141be70a..8b57af5baaec7d41c215c645b437af4a725b2acd 100644 (file)
@@ -291,9 +291,6 @@ invalid_datalen:
                           min_t(uint16_t, senselen, SCSI_SENSE_BUFFERSIZE));
        }
 
-       if (sc->sc_data_direction == DMA_TO_DEVICE)
-               goto out;
-
        if (rhdr->flags & ISCSI_FLAG_CMD_UNDERFLOW) {
                int res_count = be32_to_cpu(rhdr->residual_count);
 
index abe2bda6ac37c8298ea84203a830a220f38a68f7..3b09ab21d701ba9d8726c48647cee64a85364bda 100644 (file)
@@ -303,7 +303,7 @@ int macscsi_detect(struct scsi_host_template * tpnt)
 
     if (instance->irq != SCSI_IRQ_NONE)
        if (request_irq(instance->irq, NCR5380_intr, IRQ_FLG_SLOW, 
-               "ncr5380", instance)) {
+                       "ncr5380", instance)) {
            printk(KERN_WARNING "scsi%d: IRQ%d not free, interrupts disabled\n",
                   instance->host_no, instance->irq);
            instance->irq = SCSI_IRQ_NONE;
@@ -326,7 +326,7 @@ int macscsi_detect(struct scsi_host_template * tpnt)
 int macscsi_release (struct Scsi_Host *shpnt)
 {
        if (shpnt->irq != SCSI_IRQ_NONE)
-               free_irq (shpnt->irq, NCR5380_intr);
+               free_irq(shpnt->irq, shpnt);
        NCR5380_exit(shpnt);
 
        return 0;
index ee59656599714e25bf47cdd2eb1ed875e252fa54..f2018b46f4948950ee310cc15b70b55205e00cbd 100644 (file)
@@ -453,7 +453,8 @@ int __init pas16_detect(struct scsi_host_template * tpnt)
            instance->irq = NCR5380_probe_irq(instance, PAS16_IRQS);
 
        if (instance->irq != SCSI_IRQ_NONE) 
-           if (request_irq(instance->irq, pas16_intr, IRQF_DISABLED, "pas16", instance)) {
+           if (request_irq(instance->irq, pas16_intr, IRQF_DISABLED,
+                           "pas16", instance)) {
                printk("scsi%d : IRQ%d not free, interrupts disabled\n", 
                    instance->host_no, instance->irq);
                instance->irq = SCSI_IRQ_NONE;
@@ -604,7 +605,7 @@ static inline int NCR5380_pwrite (struct Scsi_Host *instance, unsigned char *src
 static int pas16_release(struct Scsi_Host *shost)
 {
        if (shost->irq)
-               free_irq(shost->irq, NULL);
+               free_irq(shost->irq, shost);
        NCR5380_exit(shost);
        if (shost->dma_channel != 0xff)
                free_dma(shost->dma_channel);
index 3aeb68bcb7accce6ae3556a54fea2d66ab692ae5..146d540f6281fdd0917258fac03ae8c7eeef87e8 100644 (file)
@@ -1310,14 +1310,7 @@ qla1280_done(struct scsi_qla_host *ha)
                }
 
                /* Release memory used for this I/O */
-               if (cmd->use_sg) {
-                       pci_unmap_sg(ha->pdev, cmd->request_buffer,
-                                       cmd->use_sg, cmd->sc_data_direction);
-               } else if (cmd->request_bufflen) {
-                       pci_unmap_single(ha->pdev, sp->saved_dma_handle,
-                                       cmd->request_bufflen,
-                                       cmd->sc_data_direction);
-               }
+               scsi_dma_unmap(cmd);
 
                /* Call the mid-level driver interrupt handler */
                CMD_HANDLE(sp->cmd) = (unsigned char *)INVALID_HANDLE;
@@ -1406,14 +1399,14 @@ qla1280_return_status(struct response * sts, struct scsi_cmnd *cp)
                break;
 
        case CS_DATA_UNDERRUN:
-               if ((cp->request_bufflen - residual_length) <
+               if ((scsi_bufflen(cp) - residual_length) <
                    cp->underflow) {
                        printk(KERN_WARNING
                               "scsi: Underflow detected - retrying "
                               "command.\n");
                        host_status = DID_ERROR;
                } else {
-                       cp->resid = residual_length;
+                       scsi_set_resid(cp, residual_length);
                        host_status = DID_OK;
                }
                break;
@@ -2775,33 +2768,28 @@ qla1280_64bit_start_scsi(struct scsi_qla_host *ha, struct srb * sp)
        struct device_reg __iomem *reg = ha->iobase;
        struct scsi_cmnd *cmd = sp->cmd;
        cmd_a64_entry_t *pkt;
-       struct scatterlist *sg = NULL, *s;
        __le32 *dword_ptr;
        dma_addr_t dma_handle;
        int status = 0;
        int cnt;
        int req_cnt;
-       u16 seg_cnt;
+       int seg_cnt;
        u8 dir;
 
        ENTER("qla1280_64bit_start_scsi:");
 
        /* Calculate number of entries and segments required. */
        req_cnt = 1;
-       if (cmd->use_sg) {
-               sg = (struct scatterlist *) cmd->request_buffer;
-               seg_cnt = pci_map_sg(ha->pdev, sg, cmd->use_sg,
-                                    cmd->sc_data_direction);
-
+       seg_cnt = scsi_dma_map(cmd);
+       if (seg_cnt > 0) {
                if (seg_cnt > 2) {
                        req_cnt += (seg_cnt - 2) / 5;
                        if ((seg_cnt - 2) % 5)
                                req_cnt++;
                }
-       } else if (cmd->request_bufflen) {      /* If data transfer. */
-               seg_cnt = 1;
-       } else {
-               seg_cnt = 0;
+       } else if (seg_cnt < 0) {
+               status = 1;
+               goto out;
        }
 
        if ((req_cnt + 2) >= ha->req_q_cnt) {
@@ -2889,124 +2877,104 @@ qla1280_64bit_start_scsi(struct scsi_qla_host *ha, struct srb * sp)
         * Load data segments.
         */
        if (seg_cnt) {  /* If data transfer. */
+               struct scatterlist *sg, *s;
                int remseg = seg_cnt;
+
+               sg = scsi_sglist(cmd);
+
                /* Setup packet address segment pointer. */
                dword_ptr = (u32 *)&pkt->dseg_0_address;
 
-               if (cmd->use_sg) {      /* If scatter gather */
-                       /* Load command entry data segments. */
-                       for_each_sg(sg, s, seg_cnt, cnt) {
-                               if (cnt == 2)
+               /* Load command entry data segments. */
+               for_each_sg(sg, s, seg_cnt, cnt) {
+                       if (cnt == 2)
+                               break;
+
+                       dma_handle = sg_dma_address(s);
+#if defined(CONFIG_IA64_GENERIC) || defined(CONFIG_IA64_SGI_SN2)
+                       if (ha->flags.use_pci_vchannel)
+                               sn_pci_set_vchan(ha->pdev,
+                                                (unsigned long *)&dma_handle,
+                                                SCSI_BUS_32(cmd));
+#endif
+                       *dword_ptr++ =
+                               cpu_to_le32(pci_dma_lo32(dma_handle));
+                       *dword_ptr++ =
+                               cpu_to_le32(pci_dma_hi32(dma_handle));
+                       *dword_ptr++ = cpu_to_le32(sg_dma_len(s));
+                       dprintk(3, "S/G Segment phys_addr=%x %x, len=0x%x\n",
+                               cpu_to_le32(pci_dma_hi32(dma_handle)),
+                               cpu_to_le32(pci_dma_lo32(dma_handle)),
+                               cpu_to_le32(sg_dma_len(sg_next(s))));
+                       remseg--;
+               }
+               dprintk(5, "qla1280_64bit_start_scsi: Scatter/gather "
+                       "command packet data - b %i, t %i, l %i \n",
+                       SCSI_BUS_32(cmd), SCSI_TCN_32(cmd),
+                       SCSI_LUN_32(cmd));
+               qla1280_dump_buffer(5, (char *)pkt,
+                                   REQUEST_ENTRY_SIZE);
+
+               /*
+                * Build continuation packets.
+                */
+               dprintk(3, "S/G Building Continuation...seg_cnt=0x%x "
+                       "remains\n", seg_cnt);
+
+               while (remseg > 0) {
+                       /* Update sg start */
+                       sg = s;
+                       /* Adjust ring index. */
+                       ha->req_ring_index++;
+                       if (ha->req_ring_index == REQUEST_ENTRY_CNT) {
+                               ha->req_ring_index = 0;
+                               ha->request_ring_ptr =
+                                       ha->request_ring;
+                       } else
+                               ha->request_ring_ptr++;
+
+                       pkt = (cmd_a64_entry_t *)ha->request_ring_ptr;
+
+                       /* Zero out packet. */
+                       memset(pkt, 0, REQUEST_ENTRY_SIZE);
+
+                       /* Load packet defaults. */
+                       ((struct cont_a64_entry *) pkt)->entry_type =
+                               CONTINUE_A64_TYPE;
+                       ((struct cont_a64_entry *) pkt)->entry_count = 1;
+                       ((struct cont_a64_entry *) pkt)->sys_define =
+                               (uint8_t)ha->req_ring_index;
+                       /* Setup packet address segment pointer. */
+                       dword_ptr =
+                               (u32 *)&((struct cont_a64_entry *) pkt)->dseg_0_address;
+
+                       /* Load continuation entry data segments. */
+                       for_each_sg(sg, s, remseg, cnt) {
+                               if (cnt == 5)
                                        break;
                                dma_handle = sg_dma_address(s);
 #if defined(CONFIG_IA64_GENERIC) || defined(CONFIG_IA64_SGI_SN2)
                                if (ha->flags.use_pci_vchannel)
                                        sn_pci_set_vchan(ha->pdev,
-                                                       (unsigned long *)&dma_handle,
+                                                        (unsigned long *)&dma_handle,
                                                         SCSI_BUS_32(cmd));
 #endif
                                *dword_ptr++ =
                                        cpu_to_le32(pci_dma_lo32(dma_handle));
                                *dword_ptr++ =
                                        cpu_to_le32(pci_dma_hi32(dma_handle));
-                               *dword_ptr++ = cpu_to_le32(sg_dma_len(s));
-                               dprintk(3, "S/G Segment phys_addr=%x %x, len=0x%x\n",
+                               *dword_ptr++ =
+                                       cpu_to_le32(sg_dma_len(s));
+                               dprintk(3, "S/G Segment Cont. phys_addr=%x %x, len=0x%x\n",
                                        cpu_to_le32(pci_dma_hi32(dma_handle)),
                                        cpu_to_le32(pci_dma_lo32(dma_handle)),
-                                       cpu_to_le32(sg_dma_len(sg_next(s))));
-                               remseg--;
+                                       cpu_to_le32(sg_dma_len(s)));
                        }
-                       dprintk(5, "qla1280_64bit_start_scsi: Scatter/gather "
-                               "command packet data - b %i, t %i, l %i \n",
-                               SCSI_BUS_32(cmd), SCSI_TCN_32(cmd),
-                               SCSI_LUN_32(cmd));
-                       qla1280_dump_buffer(5, (char *)pkt,
-                                           REQUEST_ENTRY_SIZE);
-
-                       /*
-                        * Build continuation packets.
-                        */
-                       dprintk(3, "S/G Building Continuation...seg_cnt=0x%x "
-                               "remains\n", seg_cnt);
-
-                       while (remseg > 0) {
-                               /* Update sg start */
-                               sg = s;
-                               /* Adjust ring index. */
-                               ha->req_ring_index++;
-                               if (ha->req_ring_index == REQUEST_ENTRY_CNT) {
-                                       ha->req_ring_index = 0;
-                                       ha->request_ring_ptr =
-                                               ha->request_ring;
-                               } else
-                                               ha->request_ring_ptr++;
-
-                               pkt = (cmd_a64_entry_t *)ha->request_ring_ptr;
-
-                               /* Zero out packet. */
-                               memset(pkt, 0, REQUEST_ENTRY_SIZE);
-
-                               /* Load packet defaults. */
-                               ((struct cont_a64_entry *) pkt)->entry_type =
-                                       CONTINUE_A64_TYPE;
-                               ((struct cont_a64_entry *) pkt)->entry_count = 1;
-                               ((struct cont_a64_entry *) pkt)->sys_define =
-                                       (uint8_t)ha->req_ring_index;
-                               /* Setup packet address segment pointer. */
-                               dword_ptr =
-                                       (u32 *)&((struct cont_a64_entry *) pkt)->dseg_0_address;
-
-                               /* Load continuation entry data segments. */
-                               for_each_sg(sg, s, remseg, cnt) {
-                                       if (cnt == 5)
-                                               break;
-                                       dma_handle = sg_dma_address(s);
-#if defined(CONFIG_IA64_GENERIC) || defined(CONFIG_IA64_SGI_SN2)
-                               if (ha->flags.use_pci_vchannel)
-                                       sn_pci_set_vchan(ha->pdev, 
-                                                       (unsigned long *)&dma_handle,
-                                                        SCSI_BUS_32(cmd));
-#endif
-                                       *dword_ptr++ =
-                                               cpu_to_le32(pci_dma_lo32(dma_handle));
-                                       *dword_ptr++ =
-                                               cpu_to_le32(pci_dma_hi32(dma_handle));
-                                       *dword_ptr++ =
-                                               cpu_to_le32(sg_dma_len(s));
-                                       dprintk(3, "S/G Segment Cont. phys_addr=%x %x, len=0x%x\n",
-                                               cpu_to_le32(pci_dma_hi32(dma_handle)),
-                                               cpu_to_le32(pci_dma_lo32(dma_handle)),
-                                               cpu_to_le32(sg_dma_len(s)));
-                               }
-                               remseg -= cnt;
-                               dprintk(5, "qla1280_64bit_start_scsi: "
-                                       "continuation packet data - b %i, t "
-                                       "%i, l %i \n", SCSI_BUS_32(cmd),
-                                       SCSI_TCN_32(cmd), SCSI_LUN_32(cmd));
-                               qla1280_dump_buffer(5, (char *)pkt,
-                                                   REQUEST_ENTRY_SIZE);
-                       }
-               } else {        /* No scatter gather data transfer */
-                       dma_handle = pci_map_single(ha->pdev,
-                                       cmd->request_buffer,
-                                       cmd->request_bufflen,
-                                       cmd->sc_data_direction);
-
-                       sp->saved_dma_handle = dma_handle;
-#if defined(CONFIG_IA64_GENERIC) || defined(CONFIG_IA64_SGI_SN2)
-                       if (ha->flags.use_pci_vchannel)
-                               sn_pci_set_vchan(ha->pdev, 
-                                               (unsigned long *)&dma_handle,
-                                                SCSI_BUS_32(cmd));
-#endif
-                       *dword_ptr++ = cpu_to_le32(pci_dma_lo32(dma_handle));
-                       *dword_ptr++ = cpu_to_le32(pci_dma_hi32(dma_handle));
-                       *dword_ptr = cpu_to_le32(cmd->request_bufflen);
-
-                       dprintk(5, "qla1280_64bit_start_scsi: No scatter/"
-                               "gather command packet data - b %i, t %i, "
-                               "l %i \n", SCSI_BUS_32(cmd), SCSI_TCN_32(cmd),
-                               SCSI_LUN_32(cmd));
+                       remseg -= cnt;
+                       dprintk(5, "qla1280_64bit_start_scsi: "
+                               "continuation packet data - b %i, t "
+                               "%i, l %i \n", SCSI_BUS_32(cmd),
+                               SCSI_TCN_32(cmd), SCSI_LUN_32(cmd));
                        qla1280_dump_buffer(5, (char *)pkt,
                                            REQUEST_ENTRY_SIZE);
                }
@@ -3068,12 +3036,11 @@ qla1280_32bit_start_scsi(struct scsi_qla_host *ha, struct srb * sp)
        struct device_reg __iomem *reg = ha->iobase;
        struct scsi_cmnd *cmd = sp->cmd;
        struct cmd_entry *pkt;
-       struct scatterlist *sg = NULL, *s;
        __le32 *dword_ptr;
        int status = 0;
        int cnt;
        int req_cnt;
-       uint16_t seg_cnt;
+       int seg_cnt;
        dma_addr_t dma_handle;
        u8 dir;
 
@@ -3083,18 +3050,8 @@ qla1280_32bit_start_scsi(struct scsi_qla_host *ha, struct srb * sp)
                cmd->cmnd[0]);
 
        /* Calculate number of entries and segments required. */
-       req_cnt = 1;
-       if (cmd->use_sg) {
-               /*
-                * We must build an SG list in adapter format, as the kernel's
-                * SG list cannot be used directly because of data field size
-                * (__alpha__) differences and the kernel SG list uses virtual
-                * addresses where we need physical addresses.
-                */
-               sg = (struct scatterlist *) cmd->request_buffer;
-               seg_cnt = pci_map_sg(ha->pdev, sg, cmd->use_sg,
-                                    cmd->sc_data_direction);
-
+       seg_cnt = scsi_dma_map(cmd);
+       if (seg_cnt) {
                /*
                 * if greater than four sg entries then we need to allocate
                 * continuation entries
@@ -3106,14 +3063,9 @@ qla1280_32bit_start_scsi(struct scsi_qla_host *ha, struct srb * sp)
                }
                dprintk(3, "S/G Transfer cmd=%p seg_cnt=0x%x, req_cnt=%x\n",
                        cmd, seg_cnt, req_cnt);
-       } else if (cmd->request_bufflen) {      /* If data transfer. */
-               dprintk(3, "No S/G transfer t=%x cmd=%p len=%x CDB=%x\n",
-                       SCSI_TCN_32(cmd), cmd, cmd->request_bufflen,
-                       cmd->cmnd[0]);
-               seg_cnt = 1;
-       } else {
-               /* dprintk(1, "No data transfer \n"); */
-               seg_cnt = 0;
+       } else if (seg_cnt < 0) {
+               status = 1;
+               goto out;
        }
 
        if ((req_cnt + 2) >= ha->req_q_cnt) {
@@ -3194,91 +3146,84 @@ qla1280_32bit_start_scsi(struct scsi_qla_host *ha, struct srb * sp)
         * Load data segments.
         */
        if (seg_cnt) {
+               struct scatterlist *sg, *s;
                int remseg = seg_cnt;
+
+               sg = scsi_sglist(cmd);
+
                /* Setup packet address segment pointer. */
                dword_ptr = &pkt->dseg_0_address;
 
-               if (cmd->use_sg) {      /* If scatter gather */
-                       dprintk(3, "Building S/G data segments..\n");
-                       qla1280_dump_buffer(1, (char *)sg, 4 * 16);
+               dprintk(3, "Building S/G data segments..\n");
+               qla1280_dump_buffer(1, (char *)sg, 4 * 16);
+
+               /* Load command entry data segments. */
+               for_each_sg(sg, s, seg_cnt, cnt) {
+                       if (cnt == 4)
+                               break;
+                       *dword_ptr++ =
+                               cpu_to_le32(pci_dma_lo32(sg_dma_address(s)));
+                       *dword_ptr++ = cpu_to_le32(sg_dma_len(s));
+                       dprintk(3, "S/G Segment phys_addr=0x%lx, len=0x%x\n",
+                               (pci_dma_lo32(sg_dma_address(s))),
+                               (sg_dma_len(s)));
+                       remseg--;
+               }
+               /*
+                * Build continuation packets.
+                */
+               dprintk(3, "S/G Building Continuation"
+                       "...seg_cnt=0x%x remains\n", seg_cnt);
+               while (remseg > 0) {
+                       /* Continue from end point */
+                       sg = s;
+                       /* Adjust ring index. */
+                       ha->req_ring_index++;
+                       if (ha->req_ring_index == REQUEST_ENTRY_CNT) {
+                               ha->req_ring_index = 0;
+                               ha->request_ring_ptr =
+                                       ha->request_ring;
+                       } else
+                               ha->request_ring_ptr++;
+
+                       pkt = (struct cmd_entry *)ha->request_ring_ptr;
+
+                       /* Zero out packet. */
+                       memset(pkt, 0, REQUEST_ENTRY_SIZE);
+
+                       /* Load packet defaults. */
+                       ((struct cont_entry *) pkt)->
+                               entry_type = CONTINUE_TYPE;
+                       ((struct cont_entry *) pkt)->entry_count = 1;
 
-                       /* Load command entry data segments. */
-                       for_each_sg(sg, s, seg_cnt, cnt) {
-                               if (cnt == 4)
+                       ((struct cont_entry *) pkt)->sys_define =
+                               (uint8_t) ha->req_ring_index;
+
+                       /* Setup packet address segment pointer. */
+                       dword_ptr =
+                               &((struct cont_entry *) pkt)->dseg_0_address;
+
+                       /* Load continuation entry data segments. */
+                       for_each_sg(sg, s, remseg, cnt) {
+                               if (cnt == 7)
                                        break;
                                *dword_ptr++ =
                                        cpu_to_le32(pci_dma_lo32(sg_dma_address(s)));
-                               *dword_ptr++ = cpu_to_le32(sg_dma_len(s));
-                               dprintk(3, "S/G Segment phys_addr=0x%lx, len=0x%x\n",
-                                       (pci_dma_lo32(sg_dma_address(s))),
-                                       (sg_dma_len(s)));
-                               remseg--;
-                       }
-                       /*
-                        * Build continuation packets.
-                        */
-                       dprintk(3, "S/G Building Continuation"
-                               "...seg_cnt=0x%x remains\n", seg_cnt);
-                       while (remseg > 0) {
-                               /* Continue from end point */
-                               sg = s;
-                               /* Adjust ring index. */
-                               ha->req_ring_index++;
-                               if (ha->req_ring_index == REQUEST_ENTRY_CNT) {
-                                       ha->req_ring_index = 0;
-                                       ha->request_ring_ptr =
-                                               ha->request_ring;
-                               } else
-                                       ha->request_ring_ptr++;
-
-                               pkt = (struct cmd_entry *)ha->request_ring_ptr;
-
-                               /* Zero out packet. */
-                               memset(pkt, 0, REQUEST_ENTRY_SIZE);
-
-                               /* Load packet defaults. */
-                               ((struct cont_entry *) pkt)->
-                                       entry_type = CONTINUE_TYPE;
-                               ((struct cont_entry *) pkt)->entry_count = 1;
-
-                               ((struct cont_entry *) pkt)->sys_define =
-                                       (uint8_t) ha->req_ring_index;
-
-                               /* Setup packet address segment pointer. */
-                               dword_ptr =
-                                       &((struct cont_entry *) pkt)->dseg_0_address;
-
-                               /* Load continuation entry data segments. */
-                               for_each_sg(sg, s, remseg, cnt) {
-                                       if (cnt == 7)
-                                               break;
-                                       *dword_ptr++ =
-                                               cpu_to_le32(pci_dma_lo32(sg_dma_address(s)));
-                                       *dword_ptr++ =
-                                               cpu_to_le32(sg_dma_len(s));
-                                       dprintk(1,
-                                               "S/G Segment Cont. phys_addr=0x%x, "
-                                               "len=0x%x\n",
-                                               cpu_to_le32(pci_dma_lo32(sg_dma_address(s))),
-                                               cpu_to_le32(sg_dma_len(s)));
-                               }
-                               remseg -= cnt;
-                               dprintk(5, "qla1280_32bit_start_scsi: "
-                                       "continuation packet data - "
-                                       "scsi(%i:%i:%i)\n", SCSI_BUS_32(cmd),
-                                       SCSI_TCN_32(cmd), SCSI_LUN_32(cmd));
-                               qla1280_dump_buffer(5, (char *)pkt,
-                                                   REQUEST_ENTRY_SIZE);
+                               *dword_ptr++ =
+                                       cpu_to_le32(sg_dma_len(s));
+                               dprintk(1,
+                                       "S/G Segment Cont. phys_addr=0x%x, "
+                                       "len=0x%x\n",
+                                       cpu_to_le32(pci_dma_lo32(sg_dma_address(s))),
+                                       cpu_to_le32(sg_dma_len(s)));
                        }
-               } else {        /* No S/G data transfer */
-                       dma_handle = pci_map_single(ha->pdev,
-                                       cmd->request_buffer,
-                                       cmd->request_bufflen,
-                                       cmd->sc_data_direction);
-                       sp->saved_dma_handle = dma_handle;
-
-                       *dword_ptr++ = cpu_to_le32(pci_dma_lo32(dma_handle));
-                       *dword_ptr = cpu_to_le32(cmd->request_bufflen);
+                       remseg -= cnt;
+                       dprintk(5, "qla1280_32bit_start_scsi: "
+                               "continuation packet data - "
+                               "scsi(%i:%i:%i)\n", SCSI_BUS_32(cmd),
+                               SCSI_TCN_32(cmd), SCSI_LUN_32(cmd));
+                       qla1280_dump_buffer(5, (char *)pkt,
+                                           REQUEST_ENTRY_SIZE);
                }
        } else {        /* No data transfer at all */
                dprintk(5, "qla1280_32bit_start_scsi: No data, command "
@@ -4086,9 +4031,9 @@ __qla1280_print_scsi_cmd(struct scsi_cmnd *cmd)
        for (i = 0; i < cmd->cmd_len; i++) {
                printk("0x%02x ", cmd->cmnd[i]);
        }
-       printk("  seg_cnt =%d\n", cmd->use_sg);
+       printk("  seg_cnt =%d\n", scsi_sg_count(cmd));
        printk("  request buffer=0x%p, request buffer len=0x%x\n",
-              cmd->request_buffer, cmd->request_bufflen);
+              scsi_sglist(cmd), scsi_bufflen(cmd));
        /* if (cmd->use_sg)
           {
           sg = (struct scatterlist *) cmd->request_buffer;
index 192948822455fd666ee8b7516ecedb812ac5744a..0fb1709ce5e371649c0c90126a3a8558a1fd13a4 100644 (file)
@@ -896,11 +896,11 @@ EXPORT_SYMBOL(__scsi_iterate_devices);
  * starget_for_each_device  -  helper to walk all devices of a target
  * @starget:   target whose devices we want to iterate over.
  *
- * This traverses over each devices of @shost.  The devices have
+ * This traverses over each device of @starget.  The devices have
  * a reference that must be released by scsi_host_put when breaking
  * out of the loop.
  */
-void starget_for_each_device(struct scsi_target *starget, void * data,
+void starget_for_each_device(struct scsi_target *starget, void *data,
                     void (*fn)(struct scsi_device *, void *))
 {
        struct Scsi_Host *shost = dev_to_shost(starget->dev.parent);
@@ -914,6 +914,33 @@ void starget_for_each_device(struct scsi_target *starget, void * data,
 }
 EXPORT_SYMBOL(starget_for_each_device);
 
+/**
+ * __starget_for_each_device  -  helper to walk all devices of a target
+ *                              (UNLOCKED)
+ * @starget:   target whose devices we want to iterate over.
+ *
+ * This traverses over each device of @starget.  It does _not_
+ * take a reference on the scsi_device, so the whole loop must be
+ * protected by shost->host_lock.
+ *
+ * Note:  The only reason why drivers would want to use this is because
+ * they need to access the device list in irq context.  Otherwise you
+ * really want to use starget_for_each_device instead.
+ **/
+void __starget_for_each_device(struct scsi_target *starget, void *data,
+                              void (*fn)(struct scsi_device *, void *))
+{
+       struct Scsi_Host *shost = dev_to_shost(starget->dev.parent);
+       struct scsi_device *sdev;
+
+       __shost_for_each_device(sdev, shost) {
+               if ((sdev->channel == starget->channel) &&
+                   (sdev->id == starget->id))
+                       fn(sdev, data);
+       }
+}
+EXPORT_SYMBOL(__starget_for_each_device);
+
 /**
  * __scsi_device_lookup_by_target - find a device given the target (UNLOCKED)
  * @starget:   SCSI target pointer
index 5e46d842c6f9b3912092b0efa105da6b785b4657..e606cf0a2eb70b368b4f019e71f8f4c623e17a21 100644 (file)
@@ -268,7 +268,7 @@ int sun3scsi_detect(struct scsi_host_template * tpnt)
         ((struct NCR5380_hostdata *)instance->hostdata)->ctrl = 0;
 
        if (request_irq(instance->irq, scsi_sun3_intr,
-                            0, "Sun3SCSI-5380", NULL)) {
+                            0, "Sun3SCSI-5380", instance)) {
 #ifndef REAL_DMA
                printk("scsi%d: IRQ%d not free, interrupts disabled\n",
                       instance->host_no, instance->irq);
@@ -310,7 +310,7 @@ int sun3scsi_detect(struct scsi_host_template * tpnt)
 int sun3scsi_release (struct Scsi_Host *shpnt)
 {
        if (shpnt->irq != SCSI_IRQ_NONE)
-               free_irq (shpnt->irq, NULL);
+               free_irq(shpnt->irq, shpnt);
 
        iounmap((void *)sun3_scsi_regp);
 
index 7cb4a31453e6e3cb73813ddcec50beb2fa8b82fa..02d9727f017a9af8f602b06126c79dffa4304034 100644 (file)
@@ -230,7 +230,7 @@ static int sun3scsi_detect(struct scsi_host_template * tpnt)
         ((struct NCR5380_hostdata *)instance->hostdata)->ctrl = 0;
 
        if (request_irq(instance->irq, scsi_sun3_intr,
-                            0, "Sun3SCSI-5380VME", NULL)) {
+                       0, "Sun3SCSI-5380VME", instance)) {
 #ifndef REAL_DMA
                printk("scsi%d: IRQ%d not free, interrupts disabled\n",
                       instance->host_no, instance->irq);
@@ -279,7 +279,7 @@ static int sun3scsi_detect(struct scsi_host_template * tpnt)
 int sun3scsi_release (struct Scsi_Host *shpnt)
 {
        if (shpnt->irq != SCSI_IRQ_NONE)
-               free_irq (shpnt->irq, NULL);
+               free_irq(shpnt->irq, shpnt);
 
        iounmap((void *)sun3_scsi_regp);
 
index 248d60b8d8994f235c1e01102cabb960243a3f37..041eaaace2c308a42ce1c6abba9b8dd89992b3a7 100644 (file)
@@ -259,7 +259,8 @@ found:
            instance->irq = NCR5380_probe_irq(instance, T128_IRQS);
 
        if (instance->irq != SCSI_IRQ_NONE) 
-           if (request_irq(instance->irq, t128_intr, IRQF_DISABLED, "t128", instance)) {
+           if (request_irq(instance->irq, t128_intr, IRQF_DISABLED, "t128",
+                           instance)) {
                printk("scsi%d : IRQ%d not free, interrupts disabled\n", 
                    instance->host_no, instance->irq);
                instance->irq = SCSI_IRQ_NONE;
@@ -295,7 +296,7 @@ static int t128_release(struct Scsi_Host *shost)
        NCR5380_local_declare();
        NCR5380_setup(shost);
        if (shost->irq)
-               free_irq(shost->irq, NULL);
+               free_irq(shost->irq, shost);
        NCR5380_exit(shost);
        if (shost->io_port && shost->n_io_port)
                release_region(shost->io_port, shost->n_io_port);
index ac67394c737319582f808fe779c1e2ef8f7c134e..64d40a2d4d4d5699167d04d12cecea1c6574b7e0 100644 (file)
 #include <linux/init.h>
 #include <linux/interrupt.h>
 #include <linux/zorro.h>
+
+#include <asm/amigahw.h>
 #include <asm/amigaints.h>
+
 #include <scsi/scsi_host.h>
 #include <scsi/scsi_transport_spi.h>
 
index ed438bc7e98da46549a25c8caeb3e839b1c777ad..d7e1996e2fec299fd8fc7193c67780013163f873 100644 (file)
@@ -600,7 +600,7 @@ config SERIAL_SA1100_CONSOLE
 
 config SERIAL_BFIN
        tristate "Blackfin serial port support"
-       depends on BFIN
+       depends on BLACKFIN
        select SERIAL_CORE
        select SERIAL_BFIN_UART0 if (BF531 || BF532 || BF533 || BF561)
        help
index f3257f708ef91161bb10469ac97c09f998eadf3d..9c95bc0398ad2aa400a0d3268c7315da89a10153 100644 (file)
@@ -45,8 +45,6 @@
 
 #include "ip22zilog.h"
 
-void ip22_do_break(void);
-
 /*
  * On IP22 we need to delay after register accesses but we do not need to
  * flush writes.
@@ -81,12 +79,9 @@ struct uart_ip22zilog_port {
 #define IP22ZILOG_FLAG_REGS_HELD       0x00000040
 #define IP22ZILOG_FLAG_TX_STOPPED      0x00000080
 #define IP22ZILOG_FLAG_TX_ACTIVE       0x00000100
+#define IP22ZILOG_FLAG_RESET_DONE      0x00000200
 
-       unsigned int                    cflag;
-
-       /* L1-A keyboard break state.  */
-       int                             kbd_id;
-       int                             l1_down;
+       unsigned int                    tty_break;
 
        unsigned char                   parity_mask;
        unsigned char                   prev_status;
@@ -250,13 +245,26 @@ static void ip22zilog_maybe_update_regs(struct uart_ip22zilog_port *up,
        }
 }
 
-static void ip22zilog_receive_chars(struct uart_ip22zilog_port *up,
-                                  struct zilog_channel *channel)
+#define Rx_BRK 0x0100                   /* BREAK event software flag.  */
+#define Rx_SYS 0x0200                   /* SysRq event software flag.  */
+
+static struct tty_struct *ip22zilog_receive_chars(struct uart_ip22zilog_port *up,
+                                                 struct zilog_channel *channel)
 {
-       struct tty_struct *tty = up->port.info->tty;    /* XXX info==NULL? */
+       struct tty_struct *tty;
+       unsigned char ch, flag;
+       unsigned int r1;
+
+       tty = NULL;
+       if (up->port.info != NULL &&
+           up->port.info->tty != NULL)
+               tty = up->port.info->tty;
 
-       while (1) {
-               unsigned char ch, r1, flag;
+       for (;;) {
+               ch = readb(&channel->control);
+               ZSDELAY();
+               if (!(ch & Rx_CH_AV))
+                       break;
 
                r1 = read_zsreg(channel, R1);
                if (r1 & (PAR_ERR | Rx_OVR | CRC_ERR)) {
@@ -265,43 +273,26 @@ static void ip22zilog_receive_chars(struct uart_ip22zilog_port *up,
                        ZS_WSYNC(channel);
                }
 
-               ch = readb(&channel->control);
-               ZSDELAY();
-
-               /* This funny hack depends upon BRK_ABRT not interfering
-                * with the other bits we care about in R1.
-                */
-               if (ch & BRK_ABRT)
-                       r1 |= BRK_ABRT;
-
                ch = readb(&channel->data);
                ZSDELAY();
 
                ch &= up->parity_mask;
 
-               if (ZS_IS_CONS(up) && (r1 & BRK_ABRT)) {
-                       /* Wait for BREAK to deassert to avoid potentially
-                        * confusing the PROM.
-                        */
-                       while (1) {
-                               ch = readb(&channel->control);
-                               ZSDELAY();
-                               if (!(ch & BRK_ABRT))
-                                       break;
-                       }
-                       ip22_do_break();
-                       return;
-               }
+               /* Handle the null char got when BREAK is removed.  */
+               if (!ch)
+                       r1 |= up->tty_break;
 
                /* A real serial line, record the character and status.  */
                flag = TTY_NORMAL;
                up->port.icount.rx++;
-               if (r1 & (BRK_ABRT | PAR_ERR | Rx_OVR | CRC_ERR)) {
-                       if (r1 & BRK_ABRT) {
-                               r1 &= ~(PAR_ERR | CRC_ERR);
+               if (r1 & (PAR_ERR | Rx_OVR | CRC_ERR | Rx_SYS | Rx_BRK)) {
+                       up->tty_break = 0;
+
+                       if (r1 & (Rx_SYS | Rx_BRK)) {
                                up->port.icount.brk++;
-                               if (uart_handle_break(&up->port))
-                                       goto next_char;
+                               if (r1 & Rx_SYS)
+                                       continue;
+                               r1 &= ~(PAR_ERR | CRC_ERR);
                        }
                        else if (r1 & PAR_ERR)
                                up->port.icount.parity++;
@@ -310,30 +301,21 @@ static void ip22zilog_receive_chars(struct uart_ip22zilog_port *up,
                        if (r1 & Rx_OVR)
                                up->port.icount.overrun++;
                        r1 &= up->port.read_status_mask;
-                       if (r1 & BRK_ABRT)
+                       if (r1 & Rx_BRK)
                                flag = TTY_BREAK;
                        else if (r1 & PAR_ERR)
                                flag = TTY_PARITY;
                        else if (r1 & CRC_ERR)
                                flag = TTY_FRAME;
                }
-               if (uart_handle_sysrq_char(&up->port, ch))
-                       goto next_char;
 
-               if (up->port.ignore_status_mask == 0xff ||
-                   (r1 & up->port.ignore_status_mask) == 0)
-                       tty_insert_flip_char(tty, ch, flag);
+               if (uart_handle_sysrq_char(&up->port, ch))
+                       continue;
 
-               if (r1 & Rx_OVR)
-                       tty_insert_flip_char(tty, 0, TTY_OVERRUN);
-       next_char:
-               ch = readb(&channel->control);
-               ZSDELAY();
-               if (!(ch & Rx_CH_AV))
-                       break;
+               if (tty)
+                       uart_insert_char(&up->port, r1, Rx_OVR, ch, flag);
        }
-
-       tty_flip_buffer_push(tty);
+       return tty;
 }
 
 static void ip22zilog_status_handle(struct uart_ip22zilog_port *up,
@@ -348,6 +330,15 @@ static void ip22zilog_status_handle(struct uart_ip22zilog_port *up,
        ZSDELAY();
        ZS_WSYNC(channel);
 
+       if (up->curregs[R15] & BRKIE) {
+               if ((status & BRK_ABRT) && !(up->prev_status & BRK_ABRT)) {
+                       if (uart_handle_break(&up->port))
+                               up->tty_break = Rx_SYS;
+                       else
+                               up->tty_break = Rx_BRK;
+               }
+       }
+
        if (ZS_WANTS_MODEM_STATUS(up)) {
                if (status & SYNC)
                        up->port.icount.dsr++;
@@ -356,10 +347,10 @@ static void ip22zilog_status_handle(struct uart_ip22zilog_port *up,
                 * But it does not tell us which bit has changed, we have to keep
                 * track of this ourselves.
                 */
-               if ((status & DCD) ^ up->prev_status)
+               if ((status ^ up->prev_status) ^ DCD)
                        uart_handle_dcd_change(&up->port,
                                               (status & DCD));
-               if ((status & CTS) ^ up->prev_status)
+               if ((status ^ up->prev_status) ^ CTS)
                        uart_handle_cts_change(&up->port,
                                               (status & CTS));
 
@@ -447,19 +438,21 @@ static irqreturn_t ip22zilog_interrupt(int irq, void *dev_id)
        while (up) {
                struct zilog_channel *channel
                        = ZILOG_CHANNEL_FROM_PORT(&up->port);
+               struct tty_struct *tty;
                unsigned char r3;
 
                spin_lock(&up->port.lock);
                r3 = read_zsreg(channel, R3);
 
                /* Channel A */
+               tty = NULL;
                if (r3 & (CHAEXT | CHATxIP | CHARxIP)) {
                        writeb(RES_H_IUS, &channel->control);
                        ZSDELAY();
                        ZS_WSYNC(channel);
 
                        if (r3 & CHARxIP)
-                               ip22zilog_receive_chars(up, channel);
+                               tty = ip22zilog_receive_chars(up, channel);
                        if (r3 & CHAEXT)
                                ip22zilog_status_handle(up, channel);
                        if (r3 & CHATxIP)
@@ -467,18 +460,22 @@ static irqreturn_t ip22zilog_interrupt(int irq, void *dev_id)
                }
                spin_unlock(&up->port.lock);
 
+               if (tty)
+                       tty_flip_buffer_push(tty);
+
                /* Channel B */
                up = up->next;
                channel = ZILOG_CHANNEL_FROM_PORT(&up->port);
 
                spin_lock(&up->port.lock);
+               tty = NULL;
                if (r3 & (CHBEXT | CHBTxIP | CHBRxIP)) {
                        writeb(RES_H_IUS, &channel->control);
                        ZSDELAY();
                        ZS_WSYNC(channel);
 
                        if (r3 & CHBRxIP)
-                               ip22zilog_receive_chars(up, channel);
+                               tty = ip22zilog_receive_chars(up, channel);
                        if (r3 & CHBEXT)
                                ip22zilog_status_handle(up, channel);
                        if (r3 & CHBTxIP)
@@ -486,6 +483,9 @@ static irqreturn_t ip22zilog_interrupt(int irq, void *dev_id)
                }
                spin_unlock(&up->port.lock);
 
+               if (tty)
+                       tty_flip_buffer_push(tty);
+
                up = up->next;
        }
 
@@ -681,11 +681,46 @@ static void ip22zilog_break_ctl(struct uart_port *port, int break_state)
        spin_unlock_irqrestore(&port->lock, flags);
 }
 
+static void __ip22zilog_reset(struct uart_ip22zilog_port *up)
+{
+       struct zilog_channel *channel;
+       int i;
+
+       if (up->flags & IP22ZILOG_FLAG_RESET_DONE)
+               return;
+
+       /* Let pending transmits finish.  */
+       channel = ZILOG_CHANNEL_FROM_PORT(&up->port);
+       for (i = 0; i < 1000; i++) {
+               unsigned char stat = read_zsreg(channel, R1);
+               if (stat & ALL_SNT)
+                       break;
+               udelay(100);
+       }
+
+       if (!ZS_IS_CHANNEL_A(up)) {
+               up++;
+               channel = ZILOG_CHANNEL_FROM_PORT(&up->port);
+       }
+       write_zsreg(channel, R9, FHWRES);
+       ZSDELAY_LONG();
+       (void) read_zsreg(channel, R0);
+
+       up->flags |= IP22ZILOG_FLAG_RESET_DONE;
+       up->next->flags |= IP22ZILOG_FLAG_RESET_DONE;
+}
+
 static void __ip22zilog_startup(struct uart_ip22zilog_port *up)
 {
        struct zilog_channel *channel;
 
        channel = ZILOG_CHANNEL_FROM_PORT(&up->port);
+
+       __ip22zilog_reset(up);
+
+       __load_zsregs(channel, up->curregs);
+       /* set master interrupt enable */
+       write_zsreg(channel, R9, up->curregs[R9]);
        up->prev_status = readb(&channel->control);
 
        /* Enable receiver and transmitter.  */
@@ -859,8 +894,6 @@ ip22zilog_set_termios(struct uart_port *port, struct ktermios *termios,
        else
                up->flags &= ~IP22ZILOG_FLAG_MODEM_STATUS;
 
-       up->cflag = termios->c_cflag;
-
        ip22zilog_maybe_update_regs(up, ZILOG_CHANNEL_FROM_PORT(port));
        uart_update_timeout(port, termios->c_cflag, baud);
 
@@ -992,74 +1025,29 @@ ip22zilog_console_write(struct console *con, const char *s, unsigned int count)
        spin_unlock_irqrestore(&up->port.lock, flags);
 }
 
-void
-ip22serial_console_termios(struct console *con, char *options)
-{
-       int baud = 9600, bits = 8, cflag;
-       int parity = 'n';
-       int flow = 'n';
-
-       if (options)
-               uart_parse_options(options, &baud, &parity, &bits, &flow);
-
-       cflag = CREAD | HUPCL | CLOCAL;
-
-       switch (baud) {
-               case 150: cflag |= B150; break;
-               case 300: cflag |= B300; break;
-               case 600: cflag |= B600; break;
-               case 1200: cflag |= B1200; break;
-               case 2400: cflag |= B2400; break;
-               case 4800: cflag |= B4800; break;
-               case 9600: cflag |= B9600; break;
-               case 19200: cflag |= B19200; break;
-               case 38400: cflag |= B38400; break;
-               default: baud = 9600; cflag |= B9600; break;
-       }
-
-       con->cflag = cflag | CS8;                       /* 8N1 */
-
-       uart_update_timeout(&ip22zilog_port_table[con->index].port, cflag, baud);
-}
-
 static int __init ip22zilog_console_setup(struct console *con, char *options)
 {
        struct uart_ip22zilog_port *up = &ip22zilog_port_table[con->index];
        unsigned long flags;
-       int baud, brg;
-
-       printk("Console: ttyS%d (IP22-Zilog)\n", con->index);
+       int baud = 9600, bits = 8;
+       int parity = 'n';
+       int flow = 'n';
 
-       /* Get firmware console settings.  */
-       ip22serial_console_termios(con, options);
+       up->flags |= IP22ZILOG_FLAG_IS_CONS;
 
-       /* Firmware console speed is limited to 150-->38400 baud so
-        * this hackish cflag thing is OK.
-        */
-       switch (con->cflag & CBAUD) {
-       case B150: baud = 150; break;
-       case B300: baud = 300; break;
-       case B600: baud = 600; break;
-       case B1200: baud = 1200; break;
-       case B2400: baud = 2400; break;
-       case B4800: baud = 4800; break;
-       default: case B9600: baud = 9600; break;
-       case B19200: baud = 19200; break;
-       case B38400: baud = 38400; break;
-       };
-
-       brg = BPS_TO_BRG(baud, ZS_CLOCK / ZS_CLOCK_DIVISOR);
+       printk(KERN_INFO "Console: ttyS%d (IP22-Zilog)\n", con->index);
 
        spin_lock_irqsave(&up->port.lock, flags);
 
-       up->curregs[R15] = BRKIE;
-       ip22zilog_convert_to_zs(up, con->cflag, 0, brg);
+       up->curregs[R15] |= BRKIE;
 
        __ip22zilog_startup(up);
 
        spin_unlock_irqrestore(&up->port.lock, flags);
 
-       return 0;
+       if (options)
+               uart_parse_options(options, &baud, &parity, &bits, &flow);
+       return uart_set_options(&up->port, con, baud, parity, bits, flow);
 }
 
 static struct uart_driver ip22zilog_reg;
@@ -1140,25 +1128,10 @@ static void __init ip22zilog_prepare(void)
                up[(chip * 2) + 1].port.line = (chip * 2) + 1;
                up[(chip * 2) + 1].flags |= IP22ZILOG_FLAG_IS_CHANNEL_A;
        }
-}
-
-static void __init ip22zilog_init_hw(void)
-{
-       int i;
-
-       for (i = 0; i < NUM_CHANNELS; i++) {
-               struct uart_ip22zilog_port *up = &ip22zilog_port_table[i];
-               struct zilog_channel *channel = ZILOG_CHANNEL_FROM_PORT(&up->port);
-               unsigned long flags;
-               int baud, brg;
 
-               spin_lock_irqsave(&up->port.lock, flags);
-
-               if (ZS_IS_CHANNEL_A(up)) {
-                       write_zsreg(channel, R9, FHWRES);
-                       ZSDELAY_LONG();
-                       (void) read_zsreg(channel, R0);
-               }
+       for (channel = 0; channel < NUM_CHANNELS; channel++) {
+               struct uart_ip22zilog_port *up = &ip22zilog_port_table[channel];
+               int brg;
 
                /* Normal serial TTY. */
                up->parity_mask = 0xff;
@@ -1169,16 +1142,10 @@ static void __init ip22zilog_init_hw(void)
                up->curregs[R9] = NV | MIE;
                up->curregs[R10] = NRZ;
                up->curregs[R11] = TCBR | RCBR;
-               baud = 9600;
-               brg = BPS_TO_BRG(baud, ZS_CLOCK / ZS_CLOCK_DIVISOR);
+               brg = BPS_TO_BRG(9600, ZS_CLOCK / ZS_CLOCK_DIVISOR);
                up->curregs[R12] = (brg & 0xff);
                up->curregs[R13] = (brg >> 8) & 0xff;
                up->curregs[R14] = BRENAB;
-               __load_zsregs(channel, up->curregs);
-               /* set master interrupt enable */
-               write_zsreg(channel, R9, up->curregs[R9]);
-
-               spin_unlock_irqrestore(&up->port.lock, flags);
        }
 }
 
@@ -1195,8 +1162,6 @@ static int __init ip22zilog_ports_init(void)
                panic("IP22-Zilog: Unable to register zs interrupt handler.\n");
        }
 
-       ip22zilog_init_hw();
-
        ret = uart_register_driver(&ip22zilog_reg);
        if (ret == 0) {
                int i;
index af3a011b2b244719d95a32a500b4eb72e47c4f45..352fcb8926a62ca506cb0f7f33d8df4a8f22e778 100644 (file)
@@ -585,11 +585,11 @@ serial_pxa_type(struct uart_port *port)
        return up->name;
 }
 
-#ifdef CONFIG_SERIAL_PXA_CONSOLE
-
 static struct uart_pxa_port *serial_pxa_ports[4];
 static struct uart_driver serial_pxa_reg;
 
+#ifdef CONFIG_SERIAL_PXA_CONSOLE
+
 #define BOTH_EMPTY (UART_LSR_TEMT | UART_LSR_THRE)
 
 /*
index 70a09a3d5af0ee6999b98a57d766f4420688d94c..707c5b03bce92c1694f62721bbfe455a405b98bb 100644 (file)
 
 #include "suncore.h"
 
-int sunserial_current_minor = 64;
+static int sunserial_current_minor = 64;
 
-EXPORT_SYMBOL(sunserial_current_minor);
+int sunserial_register_minors(struct uart_driver *drv, int count)
+{
+       int err = 0;
+
+       drv->minor = sunserial_current_minor;
+       drv->nr += count;
+       /* Register the driver on the first call */
+       if (drv->nr == count)
+               err = uart_register_driver(drv);
+       if (err == 0) {
+               sunserial_current_minor += count;
+               drv->tty_driver->name_base = drv->minor - 64;
+       }
+       return err;
+}
+EXPORT_SYMBOL(sunserial_register_minors);
+
+void sunserial_unregister_minors(struct uart_driver *drv, int count)
+{
+       drv->nr -= count;
+       sunserial_current_minor -= count;
+
+       if (drv->nr == 0)
+               uart_unregister_driver(drv);
+}
+EXPORT_SYMBOL(sunserial_unregister_minors);
 
-int sunserial_console_match(struct console *con, struct device_node *dp,
+int __init sunserial_console_match(struct console *con, struct device_node *dp,
                            struct uart_driver *drv, int line)
 {
        int off;
@@ -133,8 +158,6 @@ sunserial_console_termios(struct console *con)
        con->cflag = cflag;
 }
 
-EXPORT_SYMBOL(sunserial_console_termios);
-
 /* Sun serial MOUSE auto baud rate detection.  */
 static struct mouse_baud_cflag {
        int baud;
index 829d7d65d6dbf4dec55e8992a8d77a795b0b02d2..042668aa602e756f00d8c011dbcc4307c04709ef 100644 (file)
@@ -22,7 +22,8 @@
 extern unsigned int suncore_mouse_baud_cflag_next(unsigned int, int *);
 extern int suncore_mouse_baud_detection(unsigned char, int);
 
-extern int sunserial_current_minor;
+extern int sunserial_register_minors(struct uart_driver *, int);
+extern void sunserial_unregister_minors(struct uart_driver *, int);
 
 extern int sunserial_console_match(struct console *, struct device_node *,
                                   struct uart_driver *, int);
index 8ff900b098116ebc7c54f4b5ec676223fe4cf54b..be0fe152891b762135ec1d72ff9a8cd200aea708 100644 (file)
@@ -562,16 +562,10 @@ static int __devinit hv_probe(struct of_device *op, const struct of_device_id *m
 
        port->dev = &op->dev;
 
-       sunhv_reg.minor = sunserial_current_minor;
-       sunhv_reg.nr = 1;
-
-       err = uart_register_driver(&sunhv_reg);
+       err = sunserial_register_minors(&sunhv_reg, 1);
        if (err)
                goto out_free_con_read_page;
 
-       sunhv_reg.tty_driver->name_base = sunhv_reg.minor - 64;
-       sunserial_current_minor += 1;
-
        sunserial_console_match(&sunhv_console, op->node,
                                &sunhv_reg, port->line);
 
@@ -591,8 +585,7 @@ out_remove_port:
        uart_remove_one_port(&sunhv_reg, port);
 
 out_unregister_driver:
-       sunserial_current_minor -= 1;
-       uart_unregister_driver(&sunhv_reg);
+       sunserial_unregister_minors(&sunhv_reg, 1);
 
 out_free_con_read_page:
        kfree(con_read_page);
@@ -614,8 +607,7 @@ static int __devexit hv_remove(struct of_device *dev)
 
        uart_remove_one_port(&sunhv_reg, port);
 
-       sunserial_current_minor -= 1;
-       uart_unregister_driver(&sunhv_reg);
+       sunserial_unregister_minors(&sunhv_reg, 1);
 
        kfree(port);
        sunhv_port = NULL;
index ff610c23314bd74e5b9fa9d3f103334c1c957581..543f93741e6f5e9b09e79fb9f40076554cc9cc1a 100644 (file)
@@ -832,7 +832,6 @@ static struct uart_driver sunsab_reg = {
 };
 
 static struct uart_sunsab_port *sunsab_ports;
-static int num_channels;
 
 #ifdef CONFIG_SERIAL_SUNSAB_CONSOLE
 
@@ -1102,8 +1101,8 @@ static int __init sunsab_init(void)
 {
        struct device_node *dp;
        int err;
+       int num_channels = 0;
 
-       num_channels = 0;
        for_each_node_by_name(dp, "se")
                num_channels += 2;
        for_each_node_by_name(dp, "serial") {
@@ -1117,20 +1116,14 @@ static int __init sunsab_init(void)
                if (!sunsab_ports)
                        return -ENOMEM;
 
-               sunsab_reg.minor = sunserial_current_minor;
-               sunsab_reg.nr = num_channels;
                sunsab_reg.cons = SUNSAB_CONSOLE();
-
-               err = uart_register_driver(&sunsab_reg);
+               err = sunserial_register_minors(&sunsab_reg, num_channels);
                if (err) {
                        kfree(sunsab_ports);
                        sunsab_ports = NULL;
 
                        return err;
                }
-
-               sunsab_reg.tty_driver->name_base = sunsab_reg.minor - 64;
-               sunserial_current_minor += num_channels;
        }
 
        return of_register_driver(&sab_driver, &of_bus_type);
@@ -1139,9 +1132,8 @@ static int __init sunsab_init(void)
 static void __exit sunsab_exit(void)
 {
        of_unregister_driver(&sab_driver);
-       if (num_channels) {
-               sunserial_current_minor -= num_channels;
-               uart_unregister_driver(&sunsab_reg);
+       if (sunsab_reg.nr) {
+               sunserial_unregister_minors(&sunsab_reg, sunsab_reg.nr);
        }
 
        kfree(sunsab_ports);
index e074943feff536bc6be21b435acb527a6453c75b..4e2302d43ab163966234da9091b173b955a9c131 100644 (file)
@@ -1528,14 +1528,12 @@ static struct of_platform_driver su_driver = {
        .remove         = __devexit_p(su_remove),
 };
 
-static int num_uart;
-
 static int __init sunsu_init(void)
 {
        struct device_node *dp;
        int err;
+       int num_uart = 0;
 
-       num_uart = 0;
        for_each_node_by_name(dp, "su") {
                if (su_get_type(dp) == SU_PORT_PORT)
                        num_uart++;
@@ -1552,26 +1550,22 @@ static int __init sunsu_init(void)
        }
 
        if (num_uart) {
-               sunsu_reg.minor = sunserial_current_minor;
-               sunsu_reg.nr = num_uart;
-               err = uart_register_driver(&sunsu_reg);
+               err = sunserial_register_minors(&sunsu_reg, num_uart);
                if (err)
                        return err;
-               sunsu_reg.tty_driver->name_base = sunsu_reg.minor - 64;
-               sunserial_current_minor += num_uart;
        }
 
        err = of_register_driver(&su_driver, &of_bus_type);
        if (err && num_uart)
-               uart_unregister_driver(&sunsu_reg);
+               sunserial_unregister_minors(&sunsu_reg, num_uart);
 
        return err;
 }
 
 static void __exit sunsu_exit(void)
 {
-       if (num_uart)
-               uart_unregister_driver(&sunsu_reg);
+       if (sunsu_reg.nr)
+               sunserial_unregister_minors(&sunsu_reg, sunsu_reg.nr);
 }
 
 module_init(sunsu_init);
index 283bef0d24cb47a0fa0e956af5ef5a95c800a9ce..cb2e405063794f97922aaa6f5eaf9e0d77a15302 100644 (file)
        readb(&((__channel)->control))
 #endif
 
-static int num_sunzilog;
-#define NUM_SUNZILOG   num_sunzilog
-#define NUM_CHANNELS   (NUM_SUNZILOG * 2)
-
 #define ZS_CLOCK               4915200 /* Zilog input clock rate. */
 #define ZS_CLOCK_DIVISOR       16      /* Divisor this driver uses. */
 
@@ -1031,18 +1027,19 @@ static struct uart_driver sunzilog_reg = {
        .major          =       TTY_MAJOR,
 };
 
-static int __init sunzilog_alloc_tables(void)
+static int __init sunzilog_alloc_tables(int num_sunzilog)
 {
        struct uart_sunzilog_port *up;
        unsigned long size;
+       int num_channels = num_sunzilog * 2;
        int i;
 
-       size = NUM_CHANNELS * sizeof(struct uart_sunzilog_port);
+       size = num_channels * sizeof(struct uart_sunzilog_port);
        sunzilog_port_table = kzalloc(size, GFP_KERNEL);
        if (!sunzilog_port_table)
                return -ENOMEM;
 
-       for (i = 0; i < NUM_CHANNELS; i++) {
+       for (i = 0; i < num_channels; i++) {
                up = &sunzilog_port_table[i];
 
                spin_lock_init(&up->port.lock);
@@ -1050,13 +1047,13 @@ static int __init sunzilog_alloc_tables(void)
                if (i == 0)
                        sunzilog_irq_chain = up;
 
-               if (i < NUM_CHANNELS - 1)
+               if (i < num_channels - 1)
                        up->next = up + 1;
                else
                        up->next = NULL;
        }
 
-       size = NUM_SUNZILOG * sizeof(struct zilog_layout __iomem *);
+       size = num_sunzilog * sizeof(struct zilog_layout __iomem *);
        sunzilog_chip_regs = kzalloc(size, GFP_KERNEL);
        if (!sunzilog_chip_regs) {
                kfree(sunzilog_port_table);
@@ -1496,34 +1493,28 @@ static int __init sunzilog_init(void)
        struct device_node *dp;
        int err, uart_count;
        int num_keybms;
+       int num_sunzilog = 0;
 
-       NUM_SUNZILOG = 0;
        num_keybms = 0;
        for_each_node_by_name(dp, "zs") {
-               NUM_SUNZILOG++;
+               num_sunzilog++;
                if (of_find_property(dp, "keyboard", NULL))
                        num_keybms++;
        }
 
        uart_count = 0;
-       if (NUM_SUNZILOG) {
+       if (num_sunzilog) {
                int uart_count;
 
-               err = sunzilog_alloc_tables();
+               err = sunzilog_alloc_tables(num_sunzilog);
                if (err)
                        goto out;
 
-               uart_count = (NUM_SUNZILOG * 2) - (2 * num_keybms);
+               uart_count = (num_sunzilog * 2) - (2 * num_keybms);
 
-               sunzilog_reg.nr = uart_count;
-               sunzilog_reg.minor = sunserial_current_minor;
-               err = uart_register_driver(&sunzilog_reg);
+               err = sunserial_register_minors(&sunzilog_reg, uart_count);
                if (err)
                        goto out_free_tables;
-
-               sunzilog_reg.tty_driver->name_base = sunzilog_reg.minor - 64;
-
-               sunserial_current_minor += uart_count;
        }
 
        err = of_register_driver(&zs_driver, &of_bus_type);
@@ -1557,8 +1548,8 @@ out_unregister_driver:
        of_unregister_driver(&zs_driver);
 
 out_unregister_uart:
-       if (NUM_SUNZILOG) {
-               uart_unregister_driver(&sunzilog_reg);
+       if (num_sunzilog) {
+               sunserial_unregister_minors(&sunzilog_reg, num_sunzilog);
                sunzilog_reg.cons = NULL;
        }
 
@@ -1590,8 +1581,8 @@ static void __exit sunzilog_exit(void)
                zilog_irq = -1;
        }
 
-       if (NUM_SUNZILOG) {
-               uart_unregister_driver(&sunzilog_reg);
+       if (sunzilog_reg.nr) {
+               sunserial_unregister_minors(&sunzilog_reg, sunzilog_reg.nr);
                sunzilog_free_tables();
        }
 }
index a85f2d31a686c69f4f0a076358554bb54016325b..3f593247c41e0d5e9b255720506bd2da2b872249 100644 (file)
@@ -393,6 +393,7 @@ static inline void __init ulite_console_of_find_device(int id)
                        continue;
 
                ulite_ports[id].mapbase = res.start;
+               of_node_put(np);
                return;
        }
 }
index a77ede598d341bcc49581e124868eef1aef4810e..abf05048c638ee224db9b5fcf7f708a6aeccf5f5 100644 (file)
@@ -61,7 +61,7 @@ config SPI_ATMEL
 
 config SPI_BFIN
        tristate "SPI controller driver for ADI Blackfin5xx"
-       depends on SPI_MASTER && BFIN
+       depends on SPI_MASTER && BLACKFIN
        help
          This is the SPI controller master driver for Blackfin 5xx processor.
 
index e007833cca59adfd955b17c7dbcf5adee3b5e3b7..290dbe99647a141125a4465170343c51c770ec02 100644 (file)
 #include <linux/spi/eeprom.h>
 
 
+/*
+ * NOTE: this is an *EEPROM* driver.  The vagaries of product naming
+ * mean that some AT25 products are EEPROMs, and others are FLASH.
+ * Handle FLASH chips with the drivers/mtd/devices/m25p80.c driver,
+ * not this one!
+ */
+
 struct at25_data {
        struct spi_device       *spi;
        struct mutex            lock;
index 0d342dcdd302e176e9178971c0961789fb55b596..ff10808183a36f4e9d642469e42653d50f13ca24 100644 (file)
@@ -195,8 +195,8 @@ static void atmel_spi_next_xfer(struct spi_master *master,
                xfer, xfer->len, xfer->tx_buf, xfer->tx_dma,
                xfer->rx_buf, xfer->rx_dma, spi_readl(as, IMR));
 
-       spi_writel(as, TCR, len);
        spi_writel(as, RCR, len);
+       spi_writel(as, TCR, len);
        spi_writel(as, PTCR, SPI_BIT(TXTEN) | SPI_BIT(RXTEN));
 }
 
@@ -497,7 +497,7 @@ static int atmel_spi_setup(struct spi_device *spi)
        /* chipselect must have been muxed as GPIO (e.g. in board setup) */
        npcs_pin = (unsigned int)spi->controller_data;
        if (!spi->controller_state) {
-               ret = gpio_request(npcs_pin, "spi_npcs");
+               ret = gpio_request(npcs_pin, spi->dev.bus_id);
                if (ret)
                        return ret;
                spi->controller_state = (void *)npcs_pin;
index 5f3d808cbc299d7b1c71dca412ebf250ec4ccf3f..1c2ab541d37d51d866f291f101d20f40f5cfffdd 100644 (file)
@@ -39,7 +39,7 @@
 #include <asm/arch/pxa2xx_spi.h>
 
 MODULE_AUTHOR("Stephen Street");
-MODULE_DESCRIPTION("PXA2xx SSP SPI Contoller");
+MODULE_DESCRIPTION("PXA2xx SSP SPI Controller");
 MODULE_LICENSE("GPL");
 
 #define MAX_BUSES 3
index b31f4431849b25e771d301f956b3afd31b00d2bf..93e9de46977adc9b7bff784147c40f634fcf910b 100644 (file)
@@ -541,10 +541,7 @@ static void spi_complete(void *arg)
  * Also, the caller is guaranteeing that the memory associated with the
  * message will not be freed before this call returns.
  *
- * The return value is a negative error code if the message could not be
- * submitted, else zero.  When the value is zero, then message->status is
- * also defined;  it's the completion code for the transfer, either zero
- * or a negative error code from the controller driver.
+ * It returns zero on success, else a negative error code.
  */
 int spi_sync(struct spi_device *spi, struct spi_message *message)
 {
@@ -554,8 +551,10 @@ int spi_sync(struct spi_device *spi, struct spi_message *message)
        message->complete = spi_complete;
        message->context = &done;
        status = spi_async(spi, message);
-       if (status == 0)
+       if (status == 0) {
                wait_for_completion(&done);
+               status = message->status;
+       }
        message->context = NULL;
        return status;
 }
@@ -589,7 +588,7 @@ int spi_write_then_read(struct spi_device *spi,
                const u8 *txbuf, unsigned n_tx,
                u8 *rxbuf, unsigned n_rx)
 {
-       static DECLARE_MUTEX(lock);
+       static DEFINE_MUTEX(lock);
 
        int                     status;
        struct spi_message      message;
@@ -615,7 +614,7 @@ int spi_write_then_read(struct spi_device *spi,
        }
 
        /* ... unless someone else is using the pre-allocated buffer */
-       if (down_trylock(&lock)) {
+       if (!mutex_trylock(&lock)) {
                local_buf = kmalloc(SPI_BUFSIZ, GFP_KERNEL);
                if (!local_buf)
                        return -ENOMEM;
@@ -628,13 +627,11 @@ int spi_write_then_read(struct spi_device *spi,
 
        /* do the i/o */
        status = spi_sync(spi, &message);
-       if (status == 0) {
+       if (status == 0)
                memcpy(rxbuf, x[1].rx_buf, n_rx);
-               status = message.status;
-       }
 
        if (x[0].tx_buf == buf)
-               up(&lock);
+               mutex_unlock(&lock);
        else
                kfree(local_buf);
 
index 2ef11bb70b2ee9c5b588a432c006efa0cee2320c..7ef39a6e8c065afc97bba75dd26b2b691be95e4b 100644 (file)
@@ -1,17 +1,22 @@
 /*
- * File:         drivers/spi/bfin5xx_spi.c
- * Based on:     N/A
- * Author:       Luke Yang (Analog Devices Inc.)
+ * File:       drivers/spi/bfin5xx_spi.c
+ * Maintainer:
+ *             Bryan Wu <bryan.wu@analog.com>
+ * Original Author:
+ *             Luke Yang (Analog Devices Inc.)
  *
- * Created:      March. 10th 2006
- * Description:  SPI controller driver for Blackfin 5xx
- * Bugs:         Enter bugs at http://blackfin.uclinux.org/
+ * Created:    March. 10th 2006
+ * Description:        SPI controller driver for Blackfin BF5xx
+ * Bugs:       Enter bugs at http://blackfin.uclinux.org/
  *
  * Modified:
  *     March 10, 2006  bfin5xx_spi.c Created. (Luke Yang)
  *      August 7, 2006  added full duplex mode (Axel Weiss & Luke Yang)
+ *      July  17, 2007  add support for BF54x SPI0 controller (Bryan Wu)
+ *      July  30, 2007  add platfrom_resource interface to support multi-port
+ *                      SPI controller (Bryan Wu)
  *
- * Copyright 2004-2006 Analog Devices Inc.
+ * Copyright 2004-2007 Analog Devices 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
 
 #include <linux/init.h>
 #include <linux/module.h>
+#include <linux/delay.h>
 #include <linux/device.h>
+#include <linux/io.h>
 #include <linux/ioport.h>
+#include <linux/irq.h>
 #include <linux/errno.h>
 #include <linux/interrupt.h>
 #include <linux/platform_device.h>
 #include <linux/dma-mapping.h>
 #include <linux/spi/spi.h>
 #include <linux/workqueue.h>
-#include <linux/delay.h>
 
-#include <asm/io.h>
-#include <asm/irq.h>
-#include <asm/delay.h>
 #include <asm/dma.h>
-
+#include <asm/portmux.h>
 #include <asm/bfin5xx_spi.h>
 
-MODULE_AUTHOR("Luke Yang");
-MODULE_DESCRIPTION("Blackfin 5xx SPI Contoller");
-MODULE_LICENSE("GPL");
+#define DRV_NAME       "bfin-spi"
+#define DRV_AUTHOR     "Bryan Wu, Luke Yang"
+#define DRV_DESC       "Blackfin BF5xx on-chip SPI Controller Driver"
+#define DRV_VERSION    "1.0"
 
-#define IS_DMA_ALIGNED(x) (((u32)(x)&0x07)==0)
+MODULE_AUTHOR(DRV_AUTHOR);
+MODULE_DESCRIPTION(DRV_DESC);
+MODULE_LICENSE("GPL");
 
-#define DEFINE_SPI_REG(reg, off) \
-static inline u16 read_##reg(void) \
-            { return *(volatile unsigned short*)(SPI0_REGBASE + off); } \
-static inline void write_##reg(u16 v) \
-            {*(volatile unsigned short*)(SPI0_REGBASE + off) = v;\
-             SSYNC();}
+#define IS_DMA_ALIGNED(x) (((u32)(x)&0x07) == 0)
 
-DEFINE_SPI_REG(CTRL, 0x00)
-DEFINE_SPI_REG(FLAG, 0x04)
-DEFINE_SPI_REG(STAT, 0x08)
-DEFINE_SPI_REG(TDBR, 0x0C)
-DEFINE_SPI_REG(RDBR, 0x10)
-DEFINE_SPI_REG(BAUD, 0x14)
-DEFINE_SPI_REG(SHAW, 0x18)
-#define START_STATE ((void*)0)
-#define RUNNING_STATE ((void*)1)
-#define DONE_STATE ((void*)2)
-#define ERROR_STATE ((void*)-1)
-#define QUEUE_RUNNING 0
-#define QUEUE_STOPPED 1
-int dma_requested;
+#define START_STATE    ((void *)0)
+#define RUNNING_STATE  ((void *)1)
+#define DONE_STATE     ((void *)2)
+#define ERROR_STATE    ((void *)-1)
+#define QUEUE_RUNNING  0
+#define QUEUE_STOPPED  1
 
 struct driver_data {
        /* Driver model hookup */
@@ -83,6 +77,12 @@ struct driver_data {
        /* SPI framework hookup */
        struct spi_master *master;
 
+       /* Regs base of SPI controller */
+       void __iomem *regs_base;
+
+       /* Pin request list */
+       u16 *pin_req;
+
        /* BFIN hookup */
        struct bfin5xx_spi_master *master_info;
 
@@ -107,12 +107,18 @@ struct driver_data {
        void *tx_end;
        void *rx;
        void *rx_end;
+
+       /* DMA stuffs */
+       int dma_channel;
        int dma_mapped;
+       int dma_requested;
        dma_addr_t rx_dma;
        dma_addr_t tx_dma;
+
        size_t rx_map_len;
        size_t tx_map_len;
        u8 n_bytes;
+       int cs_change;
        void (*write) (struct driver_data *);
        void (*read) (struct driver_data *);
        void (*duplex) (struct driver_data *);
@@ -129,28 +135,40 @@ struct chip_data {
        u8 enable_dma;
        u8 bits_per_word;       /* 8 or 16 */
        u8 cs_change_per_word;
-       u8 cs_chg_udelay;
+       u16 cs_chg_udelay;      /* Some devices require > 255usec delay */
        void (*write) (struct driver_data *);
        void (*read) (struct driver_data *);
        void (*duplex) (struct driver_data *);
 };
 
+#define DEFINE_SPI_REG(reg, off) \
+static inline u16 read_##reg(struct driver_data *drv_data) \
+       { return bfin_read16(drv_data->regs_base + off); } \
+static inline void write_##reg(struct driver_data *drv_data, u16 v) \
+       { bfin_write16(drv_data->regs_base + off, v); }
+
+DEFINE_SPI_REG(CTRL, 0x00)
+DEFINE_SPI_REG(FLAG, 0x04)
+DEFINE_SPI_REG(STAT, 0x08)
+DEFINE_SPI_REG(TDBR, 0x0C)
+DEFINE_SPI_REG(RDBR, 0x10)
+DEFINE_SPI_REG(BAUD, 0x14)
+DEFINE_SPI_REG(SHAW, 0x18)
+
 static void bfin_spi_enable(struct driver_data *drv_data)
 {
        u16 cr;
 
-       cr = read_CTRL();
-       write_CTRL(cr | BIT_CTL_ENABLE);
-       SSYNC();
+       cr = read_CTRL(drv_data);
+       write_CTRL(drv_data, (cr | BIT_CTL_ENABLE));
 }
 
 static void bfin_spi_disable(struct driver_data *drv_data)
 {
        u16 cr;
 
-       cr = read_CTRL();
-       write_CTRL(cr & (~BIT_CTL_ENABLE));
-       SSYNC();
+       cr = read_CTRL(drv_data);
+       write_CTRL(drv_data, (cr & (~BIT_CTL_ENABLE)));
 }
 
 /* Caculate the SPI_BAUD register value based on input HZ */
@@ -170,83 +188,71 @@ static int flush(struct driver_data *drv_data)
        unsigned long limit = loops_per_jiffy << 1;
 
        /* wait for stop and clear stat */
-       while (!(read_STAT() & BIT_STAT_SPIF) && limit--)
-               continue;
+       while (!(read_STAT(drv_data) & BIT_STAT_SPIF) && limit--)
+               cpu_relax();
 
-       write_STAT(BIT_STAT_CLR);
+       write_STAT(drv_data, BIT_STAT_CLR);
 
        return limit;
 }
 
+/* Chip select operation functions for cs_change flag */
+static void cs_active(struct driver_data *drv_data, struct chip_data *chip)
+{
+       u16 flag = read_FLAG(drv_data);
+
+       flag |= chip->flag;
+       flag &= ~(chip->flag << 8);
+
+       write_FLAG(drv_data, flag);
+}
+
+static void cs_deactive(struct driver_data *drv_data, struct chip_data *chip)
+{
+       u16 flag = read_FLAG(drv_data);
+
+       flag |= (chip->flag << 8);
+
+       write_FLAG(drv_data, flag);
+
+       /* Move delay here for consistency */
+       if (chip->cs_chg_udelay)
+               udelay(chip->cs_chg_udelay);
+}
+
+#define MAX_SPI_SSEL   7
+
 /* stop controller and re-config current chip*/
-static void restore_state(struct driver_data *drv_data)
+static int restore_state(struct driver_data *drv_data)
 {
        struct chip_data *chip = drv_data->cur_chip;
+       int ret = 0;
 
        /* Clear status and disable clock */
-       write_STAT(BIT_STAT_CLR);
+       write_STAT(drv_data, BIT_STAT_CLR);
        bfin_spi_disable(drv_data);
        dev_dbg(&drv_data->pdev->dev, "restoring spi ctl state\n");
 
-#if defined(CONFIG_BF534) || defined(CONFIG_BF536) || defined(CONFIG_BF537)
-       dev_dbg(&drv_data->pdev->dev, 
-               "chip select number is %d\n", chip->chip_select_num);
-       
-       switch (chip->chip_select_num) {
-       case 1:
-               bfin_write_PORTF_FER(bfin_read_PORTF_FER() | 0x3c00);
-               SSYNC();
-               break;
-
-       case 2:
-       case 3:
-               bfin_write_PORT_MUX(bfin_read_PORT_MUX() | PJSE_SPI);
-               SSYNC();
-               bfin_write_PORTF_FER(bfin_read_PORTF_FER() | 0x3800);
-               SSYNC();
-               break;
-
-       case 4:
-               bfin_write_PORT_MUX(bfin_read_PORT_MUX() | PFS4E_SPI);
-               SSYNC();
-               bfin_write_PORTF_FER(bfin_read_PORTF_FER() | 0x3840);
-               SSYNC();
-               break;
+       /* Load the registers */
+       write_CTRL(drv_data, chip->ctl_reg);
+       write_BAUD(drv_data, chip->baud);
 
-       case 5:
-               bfin_write_PORT_MUX(bfin_read_PORT_MUX() | PFS5E_SPI);
-               SSYNC();
-               bfin_write_PORTF_FER(bfin_read_PORTF_FER() | 0x3820);
-               SSYNC();
-               break;
+       bfin_spi_enable(drv_data);
+       cs_active(drv_data, chip);
 
-       case 6:
-               bfin_write_PORT_MUX(bfin_read_PORT_MUX() | PFS6E_SPI);
-               SSYNC();
-               bfin_write_PORTF_FER(bfin_read_PORTF_FER() | 0x3810);
-               SSYNC();
-               break;
+       if (ret)
+               dev_dbg(&drv_data->pdev->dev,
+                       ": request chip select number %d failed\n",
+                       chip->chip_select_num);
 
-       case 7:
-               bfin_write_PORT_MUX(bfin_read_PORT_MUX() | PJCE_SPI);
-               SSYNC();
-               bfin_write_PORTF_FER(bfin_read_PORTF_FER() | 0x3800);
-               SSYNC();
-               break;
-       }
-#endif
-
-       /* Load the registers */
-       write_CTRL(chip->ctl_reg);
-       write_BAUD(chip->baud);
-       write_FLAG(chip->flag);
+       return ret;
 }
 
 /* used to kick off transfer in rx mode */
-static unsigned short dummy_read(void)
+static unsigned short dummy_read(struct driver_data *drv_data)
 {
        unsigned short tmp;
-       tmp = read_RDBR();
+       tmp = read_RDBR(drv_data);
        return tmp;
 }
 
@@ -255,9 +261,9 @@ static void null_writer(struct driver_data *drv_data)
        u8 n_bytes = drv_data->n_bytes;
 
        while (drv_data->tx < drv_data->tx_end) {
-               write_TDBR(0);
-               while ((read_STAT() & BIT_STAT_TXS))
-                       continue;
+               write_TDBR(drv_data, 0);
+               while ((read_STAT(drv_data) & BIT_STAT_TXS))
+                       cpu_relax();
                drv_data->tx += n_bytes;
        }
 }
@@ -265,75 +271,78 @@ static void null_writer(struct driver_data *drv_data)
 static void null_reader(struct driver_data *drv_data)
 {
        u8 n_bytes = drv_data->n_bytes;
-       dummy_read();
+       dummy_read(drv_data);
 
        while (drv_data->rx < drv_data->rx_end) {
-               while (!(read_STAT() & BIT_STAT_RXS))
-                       continue;
-               dummy_read();
+               while (!(read_STAT(drv_data) & BIT_STAT_RXS))
+                       cpu_relax();
+               dummy_read(drv_data);
                drv_data->rx += n_bytes;
        }
 }
 
 static void u8_writer(struct driver_data *drv_data)
 {
-       dev_dbg(&drv_data->pdev->dev, 
-               "cr8-s is 0x%x\n", read_STAT());
+       dev_dbg(&drv_data->pdev->dev,
+               "cr8-s is 0x%x\n", read_STAT(drv_data));
+
+       /* poll for SPI completion before start */
+       while (!(read_STAT(drv_data) & BIT_STAT_SPIF))
+               cpu_relax();
+
        while (drv_data->tx < drv_data->tx_end) {
-               write_TDBR(*(u8 *) (drv_data->tx));
-               while (read_STAT() & BIT_STAT_TXS)
-                       continue;
+               write_TDBR(drv_data, (*(u8 *) (drv_data->tx)));
+               while (read_STAT(drv_data) & BIT_STAT_TXS)
+                       cpu_relax();
                ++drv_data->tx;
        }
-
-       /* poll for SPI completion before returning */
-       while (!(read_STAT() & BIT_STAT_SPIF))
-               continue;
 }
 
 static void u8_cs_chg_writer(struct driver_data *drv_data)
 {
        struct chip_data *chip = drv_data->cur_chip;
 
+       /* poll for SPI completion before start */
+       while (!(read_STAT(drv_data) & BIT_STAT_SPIF))
+               cpu_relax();
+
        while (drv_data->tx < drv_data->tx_end) {
-               write_FLAG(chip->flag);
-               SSYNC();
-
-               write_TDBR(*(u8 *) (drv_data->tx));
-               while (read_STAT() & BIT_STAT_TXS)
-                       continue;
-               while (!(read_STAT() & BIT_STAT_SPIF))
-                       continue;
-               write_FLAG(0xFF00 | chip->flag);
-               SSYNC();
-               if (chip->cs_chg_udelay)
-                       udelay(chip->cs_chg_udelay);
+               cs_active(drv_data, chip);
+
+               write_TDBR(drv_data, (*(u8 *) (drv_data->tx)));
+               while (read_STAT(drv_data) & BIT_STAT_TXS)
+                       cpu_relax();
+
+               cs_deactive(drv_data, chip);
+
                ++drv_data->tx;
        }
-       write_FLAG(0xFF00);
-       SSYNC();
 }
 
 static void u8_reader(struct driver_data *drv_data)
 {
-       dev_dbg(&drv_data->pdev->dev, 
-               "cr-8 is 0x%x\n", read_STAT());
+       dev_dbg(&drv_data->pdev->dev,
+               "cr-8 is 0x%x\n", read_STAT(drv_data));
+
+       /* poll for SPI completion before start */
+       while (!(read_STAT(drv_data) & BIT_STAT_SPIF))
+               cpu_relax();
 
        /* clear TDBR buffer before read(else it will be shifted out) */
-       write_TDBR(0xFFFF);
+       write_TDBR(drv_data, 0xFFFF);
 
-       dummy_read();
+       dummy_read(drv_data);
 
        while (drv_data->rx < drv_data->rx_end - 1) {
-               while (!(read_STAT() & BIT_STAT_RXS))
-                       continue;
-               *(u8 *) (drv_data->rx) = read_RDBR();
+               while (!(read_STAT(drv_data) & BIT_STAT_RXS))
+                       cpu_relax();
+               *(u8 *) (drv_data->rx) = read_RDBR(drv_data);
                ++drv_data->rx;
        }
 
-       while (!(read_STAT() & BIT_STAT_RXS))
-               continue;
-       *(u8 *) (drv_data->rx) = read_SHAW();
+       while (!(read_STAT(drv_data) & BIT_STAT_RXS))
+               cpu_relax();
+       *(u8 *) (drv_data->rx) = read_SHAW(drv_data);
        ++drv_data->rx;
 }
 
@@ -341,36 +350,47 @@ static void u8_cs_chg_reader(struct driver_data *drv_data)
 {
        struct chip_data *chip = drv_data->cur_chip;
 
-       while (drv_data->rx < drv_data->rx_end) {
-               write_FLAG(chip->flag);
-               SSYNC();
-
-               read_RDBR();    /* kick off */
-               while (!(read_STAT() & BIT_STAT_RXS))
-                       continue;
-               while (!(read_STAT() & BIT_STAT_SPIF))
-                       continue;
-               *(u8 *) (drv_data->rx) = read_SHAW();
-               write_FLAG(0xFF00 | chip->flag);
-               SSYNC();
-               if (chip->cs_chg_udelay)
-                       udelay(chip->cs_chg_udelay);
+       /* poll for SPI completion before start */
+       while (!(read_STAT(drv_data) & BIT_STAT_SPIF))
+               cpu_relax();
+
+       /* clear TDBR buffer before read(else it will be shifted out) */
+       write_TDBR(drv_data, 0xFFFF);
+
+       cs_active(drv_data, chip);
+       dummy_read(drv_data);
+
+       while (drv_data->rx < drv_data->rx_end - 1) {
+               cs_deactive(drv_data, chip);
+
+               while (!(read_STAT(drv_data) & BIT_STAT_RXS))
+                       cpu_relax();
+               cs_active(drv_data, chip);
+               *(u8 *) (drv_data->rx) = read_RDBR(drv_data);
                ++drv_data->rx;
        }
-       write_FLAG(0xFF00);
-       SSYNC();
+       cs_deactive(drv_data, chip);
+
+       while (!(read_STAT(drv_data) & BIT_STAT_RXS))
+               cpu_relax();
+       *(u8 *) (drv_data->rx) = read_SHAW(drv_data);
+       ++drv_data->rx;
 }
 
 static void u8_duplex(struct driver_data *drv_data)
 {
+       /* poll for SPI completion before start */
+       while (!(read_STAT(drv_data) & BIT_STAT_SPIF))
+               cpu_relax();
+
        /* in duplex mode, clk is triggered by writing of TDBR */
        while (drv_data->rx < drv_data->rx_end) {
-               write_TDBR(*(u8 *) (drv_data->tx));
-               while (!(read_STAT() & BIT_STAT_SPIF))
-                       continue;
-               while (!(read_STAT() & BIT_STAT_RXS))
-                       continue;
-               *(u8 *) (drv_data->rx) = read_RDBR();
+               write_TDBR(drv_data, (*(u8 *) (drv_data->tx)));
+               while (read_STAT(drv_data) & BIT_STAT_TXS)
+                       cpu_relax();
+               while (!(read_STAT(drv_data) & BIT_STAT_RXS))
+                       cpu_relax();
+               *(u8 *) (drv_data->rx) = read_RDBR(drv_data);
                ++drv_data->rx;
                ++drv_data->tx;
        }
@@ -380,83 +400,89 @@ static void u8_cs_chg_duplex(struct driver_data *drv_data)
 {
        struct chip_data *chip = drv_data->cur_chip;
 
+       /* poll for SPI completion before start */
+       while (!(read_STAT(drv_data) & BIT_STAT_SPIF))
+               cpu_relax();
+
        while (drv_data->rx < drv_data->rx_end) {
-               write_FLAG(chip->flag);
-               SSYNC();
-
-               write_TDBR(*(u8 *) (drv_data->tx));
-               while (!(read_STAT() & BIT_STAT_SPIF))
-                       continue;
-               while (!(read_STAT() & BIT_STAT_RXS))
-                       continue;
-               *(u8 *) (drv_data->rx) = read_RDBR();
-               write_FLAG(0xFF00 | chip->flag);
-               SSYNC();
-               if (chip->cs_chg_udelay)
-                       udelay(chip->cs_chg_udelay);
+               cs_active(drv_data, chip);
+
+               write_TDBR(drv_data, (*(u8 *) (drv_data->tx)));
+               while (read_STAT(drv_data) & BIT_STAT_TXS)
+                       cpu_relax();
+               while (!(read_STAT(drv_data) & BIT_STAT_RXS))
+                       cpu_relax();
+               *(u8 *) (drv_data->rx) = read_RDBR(drv_data);
+
+               cs_deactive(drv_data, chip);
+
                ++drv_data->rx;
                ++drv_data->tx;
        }
-       write_FLAG(0xFF00);
-       SSYNC();
 }
 
 static void u16_writer(struct driver_data *drv_data)
 {
-       dev_dbg(&drv_data->pdev->dev, 
-               "cr16 is 0x%x\n", read_STAT());
+       dev_dbg(&drv_data->pdev->dev,
+               "cr16 is 0x%x\n", read_STAT(drv_data));
+
+       /* poll for SPI completion before start */
+       while (!(read_STAT(drv_data) & BIT_STAT_SPIF))
+               cpu_relax();
 
        while (drv_data->tx < drv_data->tx_end) {
-               write_TDBR(*(u16 *) (drv_data->tx));
-               while ((read_STAT() & BIT_STAT_TXS))
-                       continue;
+               write_TDBR(drv_data, (*(u16 *) (drv_data->tx)));
+               while ((read_STAT(drv_data) & BIT_STAT_TXS))
+                       cpu_relax();
                drv_data->tx += 2;
        }
-
-       /* poll for SPI completion before returning */
-       while (!(read_STAT() & BIT_STAT_SPIF))
-               continue;
 }
 
 static void u16_cs_chg_writer(struct driver_data *drv_data)
 {
        struct chip_data *chip = drv_data->cur_chip;
 
+       /* poll for SPI completion before start */
+       while (!(read_STAT(drv_data) & BIT_STAT_SPIF))
+               cpu_relax();
+
        while (drv_data->tx < drv_data->tx_end) {
-               write_FLAG(chip->flag);
-               SSYNC();
-
-               write_TDBR(*(u16 *) (drv_data->tx));
-               while ((read_STAT() & BIT_STAT_TXS))
-                       continue;
-               while (!(read_STAT() & BIT_STAT_SPIF))
-                       continue;
-               write_FLAG(0xFF00 | chip->flag);
-               SSYNC();
-               if (chip->cs_chg_udelay)
-                       udelay(chip->cs_chg_udelay);
+               cs_active(drv_data, chip);
+
+               write_TDBR(drv_data, (*(u16 *) (drv_data->tx)));
+               while ((read_STAT(drv_data) & BIT_STAT_TXS))
+                       cpu_relax();
+
+               cs_deactive(drv_data, chip);
+
                drv_data->tx += 2;
        }
-       write_FLAG(0xFF00);
-       SSYNC();
 }
 
 static void u16_reader(struct driver_data *drv_data)
 {
        dev_dbg(&drv_data->pdev->dev,
-               "cr-16 is 0x%x\n", read_STAT());
-       dummy_read();
+               "cr-16 is 0x%x\n", read_STAT(drv_data));
+
+       /* poll for SPI completion before start */
+       while (!(read_STAT(drv_data) & BIT_STAT_SPIF))
+               cpu_relax();
+
+       /* clear TDBR buffer before read(else it will be shifted out) */
+       write_TDBR(drv_data, 0xFFFF);
+
+       dummy_read(drv_data);
 
        while (drv_data->rx < (drv_data->rx_end - 2)) {
-               while (!(read_STAT() & BIT_STAT_RXS))
-                       continue;
-               *(u16 *) (drv_data->rx) = read_RDBR();
+               while (!(read_STAT(drv_data) & BIT_STAT_RXS))
+                       cpu_relax();
+               *(u16 *) (drv_data->rx) = read_RDBR(drv_data);
                drv_data->rx += 2;
        }
 
-       while (!(read_STAT() & BIT_STAT_RXS))
-               continue;
-       *(u16 *) (drv_data->rx) = read_SHAW();
+       while (!(read_STAT(drv_data) & BIT_STAT_RXS))
+               cpu_relax();
+       *(u16 *) (drv_data->rx) = read_SHAW(drv_data);
        drv_data->rx += 2;
 }
 
@@ -464,36 +490,47 @@ static void u16_cs_chg_reader(struct driver_data *drv_data)
 {
        struct chip_data *chip = drv_data->cur_chip;
 
-       while (drv_data->rx < drv_data->rx_end) {
-               write_FLAG(chip->flag);
-               SSYNC();
-
-               read_RDBR();    /* kick off */
-               while (!(read_STAT() & BIT_STAT_RXS))
-                       continue;
-               while (!(read_STAT() & BIT_STAT_SPIF))
-                       continue;
-               *(u16 *) (drv_data->rx) = read_SHAW();
-               write_FLAG(0xFF00 | chip->flag);
-               SSYNC();
-               if (chip->cs_chg_udelay)
-                       udelay(chip->cs_chg_udelay);
+       /* poll for SPI completion before start */
+       while (!(read_STAT(drv_data) & BIT_STAT_SPIF))
+               cpu_relax();
+
+       /* clear TDBR buffer before read(else it will be shifted out) */
+       write_TDBR(drv_data, 0xFFFF);
+
+       cs_active(drv_data, chip);
+       dummy_read(drv_data);
+
+       while (drv_data->rx < drv_data->rx_end - 2) {
+               cs_deactive(drv_data, chip);
+
+               while (!(read_STAT(drv_data) & BIT_STAT_RXS))
+                       cpu_relax();
+               cs_active(drv_data, chip);
+               *(u16 *) (drv_data->rx) = read_RDBR(drv_data);
                drv_data->rx += 2;
        }
-       write_FLAG(0xFF00);
-       SSYNC();
+       cs_deactive(drv_data, chip);
+
+       while (!(read_STAT(drv_data) & BIT_STAT_RXS))
+               cpu_relax();
+       *(u16 *) (drv_data->rx) = read_SHAW(drv_data);
+       drv_data->rx += 2;
 }
 
 static void u16_duplex(struct driver_data *drv_data)
 {
+       /* poll for SPI completion before start */
+       while (!(read_STAT(drv_data) & BIT_STAT_SPIF))
+               cpu_relax();
+
        /* in duplex mode, clk is triggered by writing of TDBR */
        while (drv_data->tx < drv_data->tx_end) {
-               write_TDBR(*(u16 *) (drv_data->tx));
-               while (!(read_STAT() & BIT_STAT_SPIF))
-                       continue;
-               while (!(read_STAT() & BIT_STAT_RXS))
-                       continue;
-               *(u16 *) (drv_data->rx) = read_RDBR();
+               write_TDBR(drv_data, (*(u16 *) (drv_data->tx)));
+               while (read_STAT(drv_data) & BIT_STAT_TXS)
+                       cpu_relax();
+               while (!(read_STAT(drv_data) & BIT_STAT_RXS))
+                       cpu_relax();
+               *(u16 *) (drv_data->rx) = read_RDBR(drv_data);
                drv_data->rx += 2;
                drv_data->tx += 2;
        }
@@ -503,25 +540,25 @@ static void u16_cs_chg_duplex(struct driver_data *drv_data)
 {
        struct chip_data *chip = drv_data->cur_chip;
 
+       /* poll for SPI completion before start */
+       while (!(read_STAT(drv_data) & BIT_STAT_SPIF))
+               cpu_relax();
+
        while (drv_data->tx < drv_data->tx_end) {
-               write_FLAG(chip->flag);
-               SSYNC();
-
-               write_TDBR(*(u16 *) (drv_data->tx));
-               while (!(read_STAT() & BIT_STAT_SPIF))
-                       continue;
-               while (!(read_STAT() & BIT_STAT_RXS))
-                       continue;
-               *(u16 *) (drv_data->rx) = read_RDBR();
-               write_FLAG(0xFF00 | chip->flag);
-               SSYNC();
-               if (chip->cs_chg_udelay)
-                       udelay(chip->cs_chg_udelay);
+               cs_active(drv_data, chip);
+
+               write_TDBR(drv_data, (*(u16 *) (drv_data->tx)));
+               while (read_STAT(drv_data) & BIT_STAT_TXS)
+                       cpu_relax();
+               while (!(read_STAT(drv_data) & BIT_STAT_RXS))
+                       cpu_relax();
+               *(u16 *) (drv_data->rx) = read_RDBR(drv_data);
+
+               cs_deactive(drv_data, chip);
+
                drv_data->rx += 2;
                drv_data->tx += 2;
        }
-       write_FLAG(0xFF00);
-       SSYNC();
 }
 
 /* test if ther is more transfer to be done */
@@ -546,6 +583,7 @@ static void *next_transfer(struct driver_data *drv_data)
  */
 static void giveback(struct driver_data *drv_data)
 {
+       struct chip_data *chip = drv_data->cur_chip;
        struct spi_transfer *last_transfer;
        unsigned long flags;
        struct spi_message *msg;
@@ -565,10 +603,13 @@ static void giveback(struct driver_data *drv_data)
 
        /* disable chip select signal. And not stop spi in autobuffer mode */
        if (drv_data->tx_dma != 0xFFFF) {
-               write_FLAG(0xFF00);
+               cs_deactive(drv_data, chip);
                bfin_spi_disable(drv_data);
        }
 
+       if (!drv_data->cs_change)
+               cs_deactive(drv_data, chip);
+
        if (msg->complete)
                msg->complete(msg->context);
 }
@@ -576,14 +617,15 @@ static void giveback(struct driver_data *drv_data)
 static irqreturn_t dma_irq_handler(int irq, void *dev_id)
 {
        struct driver_data *drv_data = (struct driver_data *)dev_id;
+       struct chip_data *chip = drv_data->cur_chip;
        struct spi_message *msg = drv_data->cur_msg;
 
        dev_dbg(&drv_data->pdev->dev, "in dma_irq_handler\n");
-       clear_dma_irqstat(CH_SPI);
+       clear_dma_irqstat(drv_data->dma_channel);
 
        /* Wait for DMA to complete */
-       while (get_dma_curr_irqstat(CH_SPI) & DMA_RUN)
-               continue;
+       while (get_dma_curr_irqstat(drv_data->dma_channel) & DMA_RUN)
+               cpu_relax();
 
        /*
         * wait for the last transaction shifted out.  HRM states:
@@ -592,18 +634,19 @@ static irqreturn_t dma_irq_handler(int irq, void *dev_id)
         * register until it goes low for 2 successive reads
         */
        if (drv_data->tx != NULL) {
-               while ((bfin_read_SPI_STAT() & TXS) ||
-                      (bfin_read_SPI_STAT() & TXS))
-                       continue;
+               while ((read_STAT(drv_data) & TXS) ||
+                      (read_STAT(drv_data) & TXS))
+                       cpu_relax();
        }
 
-       while (!(bfin_read_SPI_STAT() & SPIF))
-               continue;
-
-       bfin_spi_disable(drv_data);
+       while (!(read_STAT(drv_data) & SPIF))
+               cpu_relax();
 
        msg->actual_length += drv_data->len_in_bytes;
 
+       if (drv_data->cs_change)
+               cs_deactive(drv_data, chip);
+
        /* Move to next transfer */
        msg->state = next_transfer(drv_data);
 
@@ -613,8 +656,8 @@ static irqreturn_t dma_irq_handler(int irq, void *dev_id)
        /* free the irq handler before next transfer */
        dev_dbg(&drv_data->pdev->dev,
                "disable dma channel irq%d\n",
-               CH_SPI);
-       dma_disable_irq(CH_SPI);
+               drv_data->dma_channel);
+       dma_disable_irq(drv_data->dma_channel);
 
        return IRQ_HANDLED;
 }
@@ -690,31 +733,67 @@ static void pump_transfers(unsigned long data)
        drv_data->rx_dma = transfer->rx_dma;
        drv_data->tx_dma = transfer->tx_dma;
        drv_data->len_in_bytes = transfer->len;
+       drv_data->cs_change = transfer->cs_change;
+
+       /* Bits per word setup */
+       switch (transfer->bits_per_word) {
+       case 8:
+               drv_data->n_bytes = 1;
+               width = CFG_SPI_WORDSIZE8;
+               drv_data->read = chip->cs_change_per_word ?
+                       u8_cs_chg_reader : u8_reader;
+               drv_data->write = chip->cs_change_per_word ?
+                       u8_cs_chg_writer : u8_writer;
+               drv_data->duplex = chip->cs_change_per_word ?
+                       u8_cs_chg_duplex : u8_duplex;
+               break;
+
+       case 16:
+               drv_data->n_bytes = 2;
+               width = CFG_SPI_WORDSIZE16;
+               drv_data->read = chip->cs_change_per_word ?
+                       u16_cs_chg_reader : u16_reader;
+               drv_data->write = chip->cs_change_per_word ?
+                       u16_cs_chg_writer : u16_writer;
+               drv_data->duplex = chip->cs_change_per_word ?
+                       u16_cs_chg_duplex : u16_duplex;
+               break;
+
+       default:
+               /* No change, the same as default setting */
+               drv_data->n_bytes = chip->n_bytes;
+               width = chip->width;
+               drv_data->write = drv_data->tx ? chip->write : null_writer;
+               drv_data->read = drv_data->rx ? chip->read : null_reader;
+               drv_data->duplex = chip->duplex ? chip->duplex : null_writer;
+               break;
+       }
+       cr = (read_CTRL(drv_data) & (~BIT_CTL_TIMOD));
+       cr |= (width << 8);
+       write_CTRL(drv_data, cr);
 
-       width = chip->width;
        if (width == CFG_SPI_WORDSIZE16) {
                drv_data->len = (transfer->len) >> 1;
        } else {
                drv_data->len = transfer->len;
        }
-       drv_data->write = drv_data->tx ? chip->write : null_writer;
-       drv_data->read = drv_data->rx ? chip->read : null_reader;
-       drv_data->duplex = chip->duplex ? chip->duplex : null_writer;
-       dev_dbg(&drv_data->pdev->dev,
-               "transfer: drv_data->write is %p, chip->write is %p, null_wr is %p\n",
-               drv_data->write, chip->write, null_writer);
+       dev_dbg(&drv_data->pdev->dev, "transfer: ",
+               "drv_data->write is %p, chip->write is %p, null_wr is %p\n",
+               drv_data->write, chip->write, null_writer);
 
        /* speed and width has been set on per message */
        message->state = RUNNING_STATE;
        dma_config = 0;
 
-       /* restore spi status for each spi transfer */
-       if (transfer->speed_hz) {
-               write_BAUD(hz_to_spi_baud(transfer->speed_hz));
-       } else {
-               write_BAUD(chip->baud);
-       }
-       write_FLAG(chip->flag);
+       /* Speed setup (surely valid because already checked) */
+       if (transfer->speed_hz)
+               write_BAUD(drv_data, hz_to_spi_baud(transfer->speed_hz));
+       else
+               write_BAUD(drv_data, chip->baud);
+
+       write_STAT(drv_data, BIT_STAT_CLR);
+       cr = (read_CTRL(drv_data) & (~BIT_CTL_TIMOD));
+       cs_active(drv_data, chip);
 
        dev_dbg(&drv_data->pdev->dev,
                "now pumping a transfer: width is %d, len is %d\n",
@@ -727,25 +806,25 @@ static void pump_transfers(unsigned long data)
         */
        if (drv_data->cur_chip->enable_dma && drv_data->len > 6) {
 
-               write_STAT(BIT_STAT_CLR);
-               disable_dma(CH_SPI);
-               clear_dma_irqstat(CH_SPI);
+               disable_dma(drv_data->dma_channel);
+               clear_dma_irqstat(drv_data->dma_channel);
                bfin_spi_disable(drv_data);
 
                /* config dma channel */
                dev_dbg(&drv_data->pdev->dev, "doing dma transfer\n");
                if (width == CFG_SPI_WORDSIZE16) {
-                       set_dma_x_count(CH_SPI, drv_data->len);
-                       set_dma_x_modify(CH_SPI, 2);
+                       set_dma_x_count(drv_data->dma_channel, drv_data->len);
+                       set_dma_x_modify(drv_data->dma_channel, 2);
                        dma_width = WDSIZE_16;
                } else {
-                       set_dma_x_count(CH_SPI, drv_data->len);
-                       set_dma_x_modify(CH_SPI, 1);
+                       set_dma_x_count(drv_data->dma_channel, drv_data->len);
+                       set_dma_x_modify(drv_data->dma_channel, 1);
                        dma_width = WDSIZE_8;
                }
 
-               /* set transfer width,direction. And enable spi */
-               cr = (read_CTRL() & (~BIT_CTL_TIMOD));
+               /* poll for SPI completion before start */
+               while (!(read_STAT(drv_data) & BIT_STAT_SPIF))
+                       cpu_relax();
 
                /* dirty hack for autobuffer DMA mode */
                if (drv_data->tx_dma == 0xFFFF) {
@@ -755,13 +834,18 @@ static void pump_transfers(unsigned long data)
                        /* no irq in autobuffer mode */
                        dma_config =
                            (DMAFLOW_AUTO | RESTART | dma_width | DI_EN);
-                       set_dma_config(CH_SPI, dma_config);
-                       set_dma_start_addr(CH_SPI, (unsigned long)drv_data->tx);
-                       enable_dma(CH_SPI);
-                       write_CTRL(cr | CFG_SPI_DMAWRITE | (width << 8) |
-                                  (CFG_SPI_ENABLE << 14));
-
-                       /* just return here, there can only be one transfer in this mode */
+                       set_dma_config(drv_data->dma_channel, dma_config);
+                       set_dma_start_addr(drv_data->dma_channel,
+                                       (unsigned long)drv_data->tx);
+                       enable_dma(drv_data->dma_channel);
+
+                       /* start SPI transfer */
+                       write_CTRL(drv_data,
+                               (cr | CFG_SPI_DMAWRITE | BIT_CTL_ENABLE));
+
+                       /* just return here, there can only be one transfer
+                        * in this mode
+                        */
                        message->status = 0;
                        giveback(drv_data);
                        return;
@@ -772,58 +856,51 @@ static void pump_transfers(unsigned long data)
                        /* set transfer mode, and enable SPI */
                        dev_dbg(&drv_data->pdev->dev, "doing DMA in.\n");
 
-                       /* disable SPI before write to TDBR */
-                       write_CTRL(cr & ~BIT_CTL_ENABLE);
-
                        /* clear tx reg soformer data is not shifted out */
-                       write_TDBR(0xFF);
+                       write_TDBR(drv_data, 0xFFFF);
 
-                       set_dma_x_count(CH_SPI, drv_data->len);
+                       set_dma_x_count(drv_data->dma_channel, drv_data->len);
 
                        /* start dma */
-                       dma_enable_irq(CH_SPI);
+                       dma_enable_irq(drv_data->dma_channel);
                        dma_config = (WNR | RESTART | dma_width | DI_EN);
-                       set_dma_config(CH_SPI, dma_config);
-                       set_dma_start_addr(CH_SPI, (unsigned long)drv_data->rx);
-                       enable_dma(CH_SPI);
+                       set_dma_config(drv_data->dma_channel, dma_config);
+                       set_dma_start_addr(drv_data->dma_channel,
+                                       (unsigned long)drv_data->rx);
+                       enable_dma(drv_data->dma_channel);
+
+                       /* start SPI transfer */
+                       write_CTRL(drv_data,
+                               (cr | CFG_SPI_DMAREAD | BIT_CTL_ENABLE));
 
-                       cr |=
-                           CFG_SPI_DMAREAD | (width << 8) | (CFG_SPI_ENABLE <<
-                                                             14);
-                       /* set transfer mode, and enable SPI */
-                       write_CTRL(cr);
                } else if (drv_data->tx != NULL) {
                        dev_dbg(&drv_data->pdev->dev, "doing DMA out.\n");
 
                        /* start dma */
-                       dma_enable_irq(CH_SPI);
+                       dma_enable_irq(drv_data->dma_channel);
                        dma_config = (RESTART | dma_width | DI_EN);
-                       set_dma_config(CH_SPI, dma_config);
-                       set_dma_start_addr(CH_SPI, (unsigned long)drv_data->tx);
-                       enable_dma(CH_SPI);
-
-                       write_CTRL(cr | CFG_SPI_DMAWRITE | (width << 8) |
-                                  (CFG_SPI_ENABLE << 14));
-
+                       set_dma_config(drv_data->dma_channel, dma_config);
+                       set_dma_start_addr(drv_data->dma_channel,
+                                       (unsigned long)drv_data->tx);
+                       enable_dma(drv_data->dma_channel);
+
+                       /* start SPI transfer */
+                       write_CTRL(drv_data,
+                               (cr | CFG_SPI_DMAWRITE | BIT_CTL_ENABLE));
                }
        } else {
                /* IO mode write then read */
                dev_dbg(&drv_data->pdev->dev, "doing IO transfer\n");
 
-               write_STAT(BIT_STAT_CLR);
-
                if (drv_data->tx != NULL && drv_data->rx != NULL) {
                        /* full duplex mode */
                        BUG_ON((drv_data->tx_end - drv_data->tx) !=
                               (drv_data->rx_end - drv_data->rx));
-                       cr = (read_CTRL() & (~BIT_CTL_TIMOD));  
-                       cr |= CFG_SPI_WRITE | (width << 8) |
-                               (CFG_SPI_ENABLE << 14);
                        dev_dbg(&drv_data->pdev->dev,
                                "IO duplex: cr is 0x%x\n", cr);
 
-                       write_CTRL(cr);
-                       SSYNC();
+                       /* set SPI transfer mode */
+                       write_CTRL(drv_data, (cr | CFG_SPI_WRITE));
 
                        drv_data->duplex(drv_data);
 
@@ -831,14 +908,11 @@ static void pump_transfers(unsigned long data)
                                tranf_success = 0;
                } else if (drv_data->tx != NULL) {
                        /* write only half duplex */
-                       cr = (read_CTRL() & (~BIT_CTL_TIMOD));
-                       cr |= CFG_SPI_WRITE | (width << 8) |
-                               (CFG_SPI_ENABLE << 14);
-                       dev_dbg(&drv_data->pdev->dev, 
+                       dev_dbg(&drv_data->pdev->dev,
                                "IO write: cr is 0x%x\n", cr);
 
-                       write_CTRL(cr);
-                       SSYNC();
+                       /* set SPI transfer mode */
+                       write_CTRL(drv_data, (cr | CFG_SPI_WRITE));
 
                        drv_data->write(drv_data);
 
@@ -846,14 +920,11 @@ static void pump_transfers(unsigned long data)
                                tranf_success = 0;
                } else if (drv_data->rx != NULL) {
                        /* read only half duplex */
-                       cr = (read_CTRL() & (~BIT_CTL_TIMOD));
-                       cr |= CFG_SPI_READ | (width << 8) |
-                               (CFG_SPI_ENABLE << 14);
-                       dev_dbg(&drv_data->pdev->dev, 
+                       dev_dbg(&drv_data->pdev->dev,
                                "IO read: cr is 0x%x\n", cr);
 
-                       write_CTRL(cr);
-                       SSYNC();
+                       /* set SPI transfer mode */
+                       write_CTRL(drv_data, (cr | CFG_SPI_READ));
 
                        drv_data->read(drv_data);
                        if (drv_data->rx != drv_data->rx_end)
@@ -861,7 +932,7 @@ static void pump_transfers(unsigned long data)
                }
 
                if (!tranf_success) {
-                       dev_dbg(&drv_data->pdev->dev, 
+                       dev_dbg(&drv_data->pdev->dev,
                                "IO write error!\n");
                        message->state = ERROR_STATE;
                } else {
@@ -881,9 +952,11 @@ static void pump_transfers(unsigned long data)
 /* pop a msg from queue and kick off real transfer */
 static void pump_messages(struct work_struct *work)
 {
-       struct driver_data *drv_data = container_of(work, struct driver_data, pump_messages);
+       struct driver_data *drv_data;
        unsigned long flags;
 
+       drv_data = container_of(work, struct driver_data, pump_messages);
+
        /* Lock queue and check for queue work */
        spin_lock_irqsave(&drv_data->lock, flags);
        if (list_empty(&drv_data->queue) || drv_data->run == QUEUE_STOPPED) {
@@ -902,6 +975,14 @@ static void pump_messages(struct work_struct *work)
        /* Extract head of queue */
        drv_data->cur_msg = list_entry(drv_data->queue.next,
                                       struct spi_message, queue);
+
+       /* Setup the SSP using the per chip configuration */
+       drv_data->cur_chip = spi_get_ctldata(drv_data->cur_msg->spi);
+       if (restore_state(drv_data)) {
+               spin_unlock_irqrestore(&drv_data->lock, flags);
+               return;
+       };
+
        list_del_init(&drv_data->cur_msg->queue);
 
        /* Initial message state */
@@ -909,15 +990,12 @@ static void pump_messages(struct work_struct *work)
        drv_data->cur_transfer = list_entry(drv_data->cur_msg->transfers.next,
                                            struct spi_transfer, transfer_list);
 
-       /* Setup the SSP using the per chip configuration */
-       drv_data->cur_chip = spi_get_ctldata(drv_data->cur_msg->spi);
-       restore_state(drv_data);
+       dev_dbg(&drv_data->pdev->dev, "got a message to pump, "
+               "state is set to: baud %d, flag 0x%x, ctl 0x%x\n",
+               drv_data->cur_chip->baud, drv_data->cur_chip->flag,
+               drv_data->cur_chip->ctl_reg);
+
        dev_dbg(&drv_data->pdev->dev,
-               "got a message to pump, state is set to: baud %d, flag 0x%x, ctl 0x%x\n",
-               drv_data->cur_chip->baud, drv_data->cur_chip->flag,
-               drv_data->cur_chip->ctl_reg);
-       
-       dev_dbg(&drv_data->pdev->dev, 
                "the first transfer len is %d\n",
                drv_data->cur_transfer->len);
 
@@ -959,6 +1037,22 @@ static int transfer(struct spi_device *spi, struct spi_message *msg)
        return 0;
 }
 
+#define MAX_SPI_SSEL   7
+
+static u16 ssel[3][MAX_SPI_SSEL] = {
+       {P_SPI0_SSEL1, P_SPI0_SSEL2, P_SPI0_SSEL3,
+       P_SPI0_SSEL4, P_SPI0_SSEL5,
+       P_SPI0_SSEL6, P_SPI0_SSEL7},
+
+       {P_SPI1_SSEL1, P_SPI1_SSEL2, P_SPI1_SSEL3,
+       P_SPI1_SSEL4, P_SPI1_SSEL5,
+       P_SPI1_SSEL6, P_SPI1_SSEL7},
+
+       {P_SPI2_SSEL1, P_SPI2_SSEL2, P_SPI2_SSEL3,
+       P_SPI2_SSEL4, P_SPI2_SSEL5,
+       P_SPI2_SSEL6, P_SPI2_SSEL7},
+};
+
 /* first setup for new devices */
 static int setup(struct spi_device *spi)
 {
@@ -993,6 +1087,18 @@ static int setup(struct spi_device *spi)
 
        /* chip_info isn't always needed */
        if (chip_info) {
+               /* Make sure people stop trying to set fields via ctl_reg
+                * when they should actually be using common SPI framework.
+                * Currently we let through: WOM EMISO PSSE GM SZ TIMOD.
+                * Not sure if a user actually needs/uses any of these,
+                * but let's assume (for now) they do.
+                */
+               if (chip_info->ctl_reg & (SPE|MSTR|CPOL|CPHA|LSBF|SIZE)) {
+                       dev_err(&spi->dev, "do not set bits in ctl_reg "
+                               "that the SPI framework manages\n");
+                       return -EINVAL;
+               }
+
                chip->enable_dma = chip_info->enable_dma != 0
                    && drv_data->master_info->enable_dma;
                chip->ctl_reg = chip_info->ctl_reg;
@@ -1015,20 +1121,20 @@ static int setup(struct spi_device *spi)
         * if any one SPI chip is registered and wants DMA, request the
         * DMA channel for it
         */
-       if (chip->enable_dma && !dma_requested) {
+       if (chip->enable_dma && !drv_data->dma_requested) {
                /* register dma irq handler */
-               if (request_dma(CH_SPI, "BF53x_SPI_DMA") < 0) {
+               if (request_dma(drv_data->dma_channel, "BF53x_SPI_DMA") < 0) {
                        dev_dbg(&spi->dev,
                                "Unable to request BlackFin SPI DMA channel\n");
                        return -ENODEV;
                }
-               if (set_dma_callback(CH_SPI, (void *)dma_irq_handler, drv_data)
-                   < 0) {
+               if (set_dma_callback(drv_data->dma_channel,
+                       (void *)dma_irq_handler, drv_data) < 0) {
                        dev_dbg(&spi->dev, "Unable to set dma callback\n");
                        return -EPERM;
                }
-               dma_disable_irq(CH_SPI);
-               dma_requested = 1;
+               dma_disable_irq(drv_data->dma_channel);
+               drv_data->dma_requested = 1;
        }
 
        /*
@@ -1077,6 +1183,14 @@ static int setup(struct spi_device *spi)
 
        spi_set_ctldata(spi, chip);
 
+       dev_dbg(&spi->dev, "chip select number is %d\n", chip->chip_select_num);
+       if ((chip->chip_select_num > 0)
+               && (chip->chip_select_num <= spi->master->num_chipselect))
+               peripheral_request(ssel[spi->master->bus_num]
+                       [chip->chip_select_num-1], DRV_NAME);
+
+       cs_deactive(drv_data, chip);
+
        return 0;
 }
 
@@ -1088,6 +1202,11 @@ static void cleanup(struct spi_device *spi)
 {
        struct chip_data *chip = spi_get_ctldata(spi);
 
+       if ((chip->chip_select_num > 0)
+               && (chip->chip_select_num <= spi->master->num_chipselect))
+               peripheral_free(ssel[spi->master->bus_num]
+                                       [chip->chip_select_num-1]);
+
        kfree(chip);
 }
 
@@ -1183,6 +1302,7 @@ static int __init bfin5xx_spi_probe(struct platform_device *pdev)
        struct bfin5xx_spi_master *platform_info;
        struct spi_master *master;
        struct driver_data *drv_data = 0;
+       struct resource *res;
        int status = 0;
 
        platform_info = dev->platform_data;
@@ -1193,10 +1313,12 @@ static int __init bfin5xx_spi_probe(struct platform_device *pdev)
                dev_err(&pdev->dev, "can not alloc spi_master\n");
                return -ENOMEM;
        }
+
        drv_data = spi_master_get_devdata(master);
        drv_data->master = master;
        drv_data->master_info = platform_info;
        drv_data->pdev = pdev;
+       drv_data->pin_req = platform_info->pin_req;
 
        master->bus_num = pdev->id;
        master->num_chipselect = platform_info->num_chipselect;
@@ -1204,15 +1326,38 @@ static int __init bfin5xx_spi_probe(struct platform_device *pdev)
        master->setup = setup;
        master->transfer = transfer;
 
+       /* Find and map our resources */
+       res = platform_get_resource(pdev, IORESOURCE_MEM, 0);
+       if (res == NULL) {
+               dev_err(dev, "Cannot get IORESOURCE_MEM\n");
+               status = -ENOENT;
+               goto out_error_get_res;
+       }
+
+       drv_data->regs_base = ioremap(res->start, (res->end - res->start + 1));
+       if (drv_data->regs_base == NULL) {
+               dev_err(dev, "Cannot map IO\n");
+               status = -ENXIO;
+               goto out_error_ioremap;
+       }
+
+       drv_data->dma_channel = platform_get_irq(pdev, 0);
+       if (drv_data->dma_channel < 0) {
+               dev_err(dev, "No DMA channel specified\n");
+               status = -ENOENT;
+               goto out_error_no_dma_ch;
+       }
+
        /* Initial and start queue */
        status = init_queue(drv_data);
        if (status != 0) {
-               dev_err(&pdev->dev, "problem initializing queue\n");
+               dev_err(dev, "problem initializing queue\n");
                goto out_error_queue_alloc;
        }
+
        status = start_queue(drv_data);
        if (status != 0) {
-               dev_err(&pdev->dev, "problem starting queue\n");
+               dev_err(dev, "problem starting queue\n");
                goto out_error_queue_alloc;
        }
 
@@ -1220,15 +1365,30 @@ static int __init bfin5xx_spi_probe(struct platform_device *pdev)
        platform_set_drvdata(pdev, drv_data);
        status = spi_register_master(master);
        if (status != 0) {
-               dev_err(&pdev->dev, "problem registering spi master\n");
+               dev_err(dev, "problem registering spi master\n");
                goto out_error_queue_alloc;
        }
-       dev_dbg(&pdev->dev, "controller probe successfully\n");
+
+       status = peripheral_request_list(drv_data->pin_req, DRV_NAME);
+       if (status != 0) {
+               dev_err(&pdev->dev, ": Requesting Peripherals failed\n");
+               goto out_error;
+       }
+
+       dev_info(dev, "%s, Version %s, regs_base@%p, dma channel@%d\n",
+               DRV_DESC, DRV_VERSION, drv_data->regs_base,
+               drv_data->dma_channel);
        return status;
 
-      out_error_queue_alloc:
+out_error_queue_alloc:
        destroy_queue(drv_data);
+out_error_no_dma_ch:
+       iounmap((void *) drv_data->regs_base);
+out_error_ioremap:
+out_error_get_res:
+out_error:
        spi_master_put(master);
+
        return status;
 }
 
@@ -1251,13 +1411,15 @@ static int __devexit bfin5xx_spi_remove(struct platform_device *pdev)
 
        /* Release DMA */
        if (drv_data->master_info->enable_dma) {
-               if (dma_channel_active(CH_SPI))
-                       free_dma(CH_SPI);
+               if (dma_channel_active(drv_data->dma_channel))
+                       free_dma(drv_data->dma_channel);
        }
 
        /* Disconnect from the SPI framework */
        spi_unregister_master(drv_data->master);
 
+       peripheral_free_list(drv_data->pin_req);
+
        /* Prevent double remove */
        platform_set_drvdata(pdev, NULL);
 
@@ -1305,7 +1467,7 @@ static int bfin5xx_spi_resume(struct platform_device *pdev)
 MODULE_ALIAS("bfin-spi-master");       /* for platform bus hotplug */
 static struct platform_driver bfin5xx_spi_driver = {
        .driver = {
-               .name   = "bfin-spi-master",
+               .name   = DRV_NAME,
                .owner  = THIS_MODULE,
        },
        .suspend        = bfin5xx_spi_suspend,
index 7686ba34430f7011a1d65e0fbf5004c2e40d2384..2cd8573fb09c0a5f514440de93c8dd6459e6ed6e 100644 (file)
@@ -1758,5 +1758,5 @@ static void __exit spi_imx_exit(void)
 module_exit(spi_imx_exit);
 
 MODULE_AUTHOR("Andrea Paterniani, <a.paterniani@swapp-eng.it>");
-MODULE_DESCRIPTION("iMX SPI Contoller Driver");
+MODULE_DESCRIPTION("iMX SPI Controller Driver");
 MODULE_LICENSE("GPL");
index 0fa25e2e80fe556cbde8b1e01843f452129dfaea..109d82c1abc05a9844578df75f72ad2f80af03ee 100644 (file)
@@ -96,6 +96,7 @@ static void s3c2410_spigpio_chipselect(struct spi_device *dev, int value)
 
 static int s3c2410_spigpio_probe(struct platform_device *dev)
 {
+       struct s3c2410_spigpio_info *info;
        struct spi_master       *master;
        struct s3c2410_spigpio  *sp;
        int ret;
@@ -113,10 +114,11 @@ static int s3c2410_spigpio_probe(struct platform_device *dev)
        platform_set_drvdata(dev, sp);
 
        /* copy in the plkatform data */
-       sp->info = dev->dev.platform_data;
+       info = sp->info = dev->dev.platform_data;
 
        /* setup spi bitbang adaptor */
        sp->bitbang.master = spi_master_get(master);
+       sp->bitbang.master->bus_num = info->bus_num;
        sp->bitbang.chipselect = s3c2410_spigpio_chipselect;
 
        sp->bitbang.txrx_word[SPI_MODE_0] = s3c2410_spigpio_txrx_mode0;
@@ -124,13 +126,18 @@ static int s3c2410_spigpio_probe(struct platform_device *dev)
        sp->bitbang.txrx_word[SPI_MODE_2] = s3c2410_spigpio_txrx_mode2;
        sp->bitbang.txrx_word[SPI_MODE_3] = s3c2410_spigpio_txrx_mode3;
 
-       /* set state of spi pins */
-       s3c2410_gpio_setpin(sp->info->pin_clk, 0);
-       s3c2410_gpio_setpin(sp->info->pin_mosi, 0);
+       /* set state of spi pins, always assume that the clock is
+        * available, but do check the MOSI and MISO. */
+       s3c2410_gpio_setpin(info->pin_clk, 0);
+       s3c2410_gpio_cfgpin(info->pin_clk, S3C2410_GPIO_OUTPUT);
 
-       s3c2410_gpio_cfgpin(sp->info->pin_clk, S3C2410_GPIO_OUTPUT);
-       s3c2410_gpio_cfgpin(sp->info->pin_mosi, S3C2410_GPIO_OUTPUT);
-       s3c2410_gpio_cfgpin(sp->info->pin_miso, S3C2410_GPIO_INPUT);
+       if (info->pin_mosi < S3C2410_GPH10) {
+               s3c2410_gpio_setpin(info->pin_mosi, 0);
+               s3c2410_gpio_cfgpin(info->pin_mosi, S3C2410_GPIO_OUTPUT);
+       }
+
+       if (info->pin_miso != S3C2410_GPA0 && info->pin_miso < S3C2410_GPH10)
+               s3c2410_gpio_cfgpin(info->pin_miso, S3C2410_GPIO_INPUT);
 
        ret = spi_bitbang_start(&sp->bitbang);
        if (ret)
index 3c8434128554a4434e479d7a42d394940196e684..284f46b3e1ccde24f74013c2f93b9cbc547845e6 100644 (file)
@@ -39,12 +39,12 @@ first subdirectory in the list below that it fits into.
 
 image/         - This is for still image drivers, like scanners or
                  digital cameras.
-input/         - This is for any driver that uses the input subsystem,
+../input/      - This is for any driver that uses the input subsystem,
                  like keyboard, mice, touchscreens, tablets, etc.
-media/         - This is for multimedia drivers, like video cameras,
+../media/      - This is for multimedia drivers, like video cameras,
                  radios, and any other drivers that talk to the v4l
                  subsystem.
-net/           - This is for network drivers.
+../net/                - This is for network drivers.
 serial/                - This is for USB to serial drivers.
 storage/       - This is for USB mass-storage drivers.
 class/         - This is for all USB device drivers that do not fit
index 8586817698ad8db8f9abbee331075eef2c884077..c51f8e9312e055222f2c473039d7ffb19eb45451 100644 (file)
@@ -585,9 +585,6 @@ static int usb_uevent(struct device *dev, struct kobj_uevent_env *env)
 {
        struct usb_device *usb_dev;
 
-       if (!dev)
-               return -ENODEV;
-
        /* driver is often null here; dev_dbg() would oops */
        pr_debug ("usb %s: uevent\n", dev->bus_id);
 
@@ -631,14 +628,6 @@ static int usb_uevent(struct device *dev, struct kobj_uevent_env *env)
                           usb_dev->descriptor.bDeviceProtocol))
                return -ENOMEM;
 
-       if (add_uevent_var(env, "BUSNUM=%03d",
-                          usb_dev->bus->busnum))
-               return -ENOMEM;
-
-       if (add_uevent_var(env, "DEVNUM=%03d",
-                          usb_dev->devnum))
-               return -ENOMEM;
-
        return 0;
 }
 
index fea8256a18d6e1a99c01872a25e99ac3354f3f7c..d5ed3fa9e304b5d76b859b31203ab6bb866a3aa1 100644 (file)
@@ -1311,8 +1311,8 @@ void usb_hcd_flush_endpoint(struct usb_device *udev,
        hcd = bus_to_hcd(udev->bus);
 
        /* No more submits can occur */
-rescan:
        spin_lock_irq(&hcd_urb_list_lock);
+rescan:
        list_for_each_entry (urb, &ep->urb_list, urb_list) {
                int     is_in;
 
@@ -1345,6 +1345,7 @@ rescan:
                usb_put_urb (urb);
 
                /* list contents may have changed */
+               spin_lock(&hcd_urb_list_lock);
                goto rescan;
        }
        spin_unlock_irq(&hcd_urb_list_lock);
index 036c3dea855e66d4df3186dd83df3ecbd20542d7..13b326a13377051e54cf7824adffad8ef21fd1c0 100644 (file)
@@ -335,7 +335,7 @@ static void kick_khubd(struct usb_hub *hub)
        to_usb_interface(hub->intfdev)->pm_usage_cnt = 1;
 
        spin_lock_irqsave(&hub_event_lock, flags);
-       if (!hub->disconnected & list_empty(&hub->event_list)) {
+       if (!hub->disconnected && list_empty(&hub->event_list)) {
                list_add_tail(&hub->event_list, &hub_event_list);
                wake_up(&khubd_wait);
        }
index 316a746e0080ef8a0eface2341fbd8f3e612c60d..fcd40ecbeecce3276a8a1ecb31a0f204c1bf54f5 100644 (file)
@@ -1172,7 +1172,6 @@ int usb_set_interface(struct usb_device *dev, int interface, int alternate)
        struct usb_host_interface *alt;
        int ret;
        int manual = 0;
-       int changed;
 
        if (dev->state == USB_STATE_SUSPENDED)
                return -EHOSTUNREACH;
@@ -1212,8 +1211,7 @@ int usb_set_interface(struct usb_device *dev, int interface, int alternate)
         */
 
        /* prevent submissions using previous endpoint settings */
-       changed = (iface->cur_altsetting != alt);
-       if (changed && device_is_registered(&iface->dev))
+       if (iface->cur_altsetting != alt && device_is_registered(&iface->dev))
                usb_remove_sysfs_intf_files(iface);
        usb_disable_interface(dev, iface);
 
@@ -1250,7 +1248,7 @@ int usb_set_interface(struct usb_device *dev, int interface, int alternate)
         * (Likewise, EP0 never "halts" on well designed devices.)
         */
        usb_enable_interface(dev, iface);
-       if (changed && device_is_registered(&iface->dev))
+       if (device_is_registered(&iface->dev))
                usb_create_sysfs_intf_files(iface);
 
        return 0;
@@ -1348,34 +1346,10 @@ static int usb_if_uevent(struct device *dev, struct kobj_uevent_env *env)
        struct usb_interface *intf;
        struct usb_host_interface *alt;
 
-       if (!dev)
-               return -ENODEV;
-
-       /* driver is often null here; dev_dbg() would oops */
-       pr_debug ("usb %s: uevent\n", dev->bus_id);
-
        intf = to_usb_interface(dev);
        usb_dev = interface_to_usbdev(intf);
        alt = intf->cur_altsetting;
 
-#ifdef CONFIG_USB_DEVICEFS
-       if (add_uevent_var(env, "DEVICE=/proc/bus/usb/%03d/%03d",
-                          usb_dev->bus->busnum, usb_dev->devnum))
-               return -ENOMEM;
-#endif
-
-       if (add_uevent_var(env, "PRODUCT=%x/%x/%x",
-                          le16_to_cpu(usb_dev->descriptor.idVendor),
-                          le16_to_cpu(usb_dev->descriptor.idProduct),
-                          le16_to_cpu(usb_dev->descriptor.bcdDevice)))
-               return -ENOMEM;
-
-       if (add_uevent_var(env, "TYPE=%d/%d/%d",
-                          usb_dev->descriptor.bDeviceClass,
-                          usb_dev->descriptor.bDeviceSubClass,
-                          usb_dev->descriptor.bDeviceProtocol))
-               return -ENOMEM;
-
        if (add_uevent_var(env, "INTERFACE=%d/%d/%d",
                   alt->desc.bInterfaceClass,
                   alt->desc.bInterfaceSubClass,
@@ -1641,12 +1615,6 @@ free_interfaces:
                                intf->dev.bus_id, ret);
                        continue;
                }
-
-               /* The driver's probe method can call usb_set_interface(),
-                * which would mean the interface's sysfs files are already
-                * created.  Just in case, we'll remove them first.
-                */
-               usb_remove_sysfs_intf_files(intf);
                usb_create_sysfs_intf_files(intf);
        }
 
index b04afd06e502131f97024360fd5e1ad3279af9f4..32bd130b1eed33fc542fc39bc5f10c1de4695916 100644 (file)
@@ -735,6 +735,8 @@ int usb_create_sysfs_intf_files(struct usb_interface *intf)
        struct usb_host_interface *alt = intf->cur_altsetting;
        int retval;
 
+       if (intf->sysfs_files_created)
+               return 0;
        retval = sysfs_create_group(&dev->kobj, &intf_attr_grp);
        if (retval)
                return retval;
@@ -746,6 +748,7 @@ int usb_create_sysfs_intf_files(struct usb_interface *intf)
        if (intf->intf_assoc)
                retval = sysfs_create_group(&dev->kobj, &intf_assoc_attr_grp);
        usb_create_intf_ep_files(intf, udev);
+       intf->sysfs_files_created = 1;
        return 0;
 }
 
@@ -753,8 +756,11 @@ void usb_remove_sysfs_intf_files(struct usb_interface *intf)
 {
        struct device *dev = &intf->dev;
 
+       if (!intf->sysfs_files_created)
+               return;
        usb_remove_intf_ep_files(intf);
        device_remove_file(dev, &dev_attr_interface);
        sysfs_remove_group(&dev->kobj, &intf_attr_grp);
        sysfs_remove_group(&intf->dev.kobj, &intf_assoc_attr_grp);
+       intf->sysfs_files_created = 0;
 }
index c4a6f1095b8b636f89e80267713b0c35fb3018a7..8f142370103d48400d3adb6cb6b6f36eab5e4070 100644 (file)
@@ -192,9 +192,34 @@ static void usb_release_dev(struct device *dev)
        kfree(udev);
 }
 
+#ifdef CONFIG_HOTPLUG
+static int usb_dev_uevent(struct device *dev, struct kobj_uevent_env *env)
+{
+       struct usb_device *usb_dev;
+
+       usb_dev = to_usb_device(dev);
+
+       if (add_uevent_var(env, "BUSNUM=%03d", usb_dev->bus->busnum))
+               return -ENOMEM;
+
+       if (add_uevent_var(env, "DEVNUM=%03d", usb_dev->devnum))
+               return -ENOMEM;
+
+       return 0;
+}
+
+#else
+
+static int usb_dev_uevent(struct device *dev, struct kobj_uevent_env *env)
+{
+       return -ENODEV;
+}
+#endif /* CONFIG_HOTPLUG */
+
 struct device_type usb_device_type = {
        .name =         "usb_device",
        .release =      usb_release_dev,
+       .uevent =       usb_dev_uevent,
 };
 
 #ifdef CONFIG_PM
index 87c4f50dfb61b6af50d929efa52cd10ce9db9dc2..d377154658b5abe624568eabecde914a107caff6 100644 (file)
@@ -1241,14 +1241,14 @@ static void pullup_enable(struct omap_udc *udc)
        udc->gadget.dev.parent->power.power_state = PMSG_ON;
        udc->gadget.dev.power.power_state = PMSG_ON;
        UDC_SYSCON1_REG |= UDC_PULLUP_EN;
-       if (!gadget_is_otg(udc->gadget) && !cpu_is_omap15xx())
+       if (!gadget_is_otg(&udc->gadget) && !cpu_is_omap15xx())
                OTG_CTRL_REG |= OTG_BSESSVLD;
        UDC_IRQ_EN_REG = UDC_DS_CHG_IE;
 }
 
 static void pullup_disable(struct omap_udc *udc)
 {
-       if (!gadget_is_otg(udc->gadget) && !cpu_is_omap15xx())
+       if (!gadget_is_otg(&udc->gadget) && !cpu_is_omap15xx())
                OTG_CTRL_REG &= ~OTG_BSESSVLD;
        UDC_IRQ_EN_REG = UDC_DS_CHG_IE;
        UDC_SYSCON1_REG &= ~UDC_PULLUP_EN;
@@ -1386,7 +1386,7 @@ static void update_otg(struct omap_udc *udc)
 {
        u16     devstat;
 
-       if (!gadget_is_otg(udc->gadget))
+       if (!gadget_is_otg(&udc->gadget))
                return;
 
        if (OTG_CTRL_REG & OTG_ID)
index e3e90f8a75e7ffca404685058654e3d90df70336..4ce050c3d13fad9199d91697c4490ede73c70ae5 100644 (file)
 #include <asm/arch/irqs.h>
 
 #include <asm/arch/hardware.h>
-#include <asm/arch/regs-clock.h>
 #include <asm/arch/regs-gpio.h>
-#include <asm/arch/regs-udc.h>
-#include <asm/arch/udc.h>
+
+#include <asm/plat-s3c24xx/regs-udc.h>
+#include <asm/plat-s3c24xx/udc.h>
 
 #include <asm/mach-types.h>
 
@@ -1511,7 +1511,11 @@ static irqreturn_t s3c2410_udc_vbus_irq(int irq, void *_dev)
        unsigned int            value;
 
        dprintk(DEBUG_NORMAL, "%s()\n", __func__);
+
+       /* some cpus cannot read from an line configured to IRQ! */
+       s3c2410_gpio_cfgpin(udc_info->vbus_pin, S3C2410_GPIO_INPUT);
        value = s3c2410_gpio_getpin(udc_info->vbus_pin);
+       s3c2410_gpio_cfgpin(udc_info->vbus_pin, S3C2410_GPIO_SFN2);
 
        if (udc_info->vbus_pin_inverted)
                value = !value;
@@ -1872,9 +1876,9 @@ static int s3c2410_udc_probe(struct platform_device *pdev)
        if (udc_info && udc_info->vbus_pin > 0) {
                irq = s3c2410_gpio_getirq(udc_info->vbus_pin);
                retval = request_irq(irq, s3c2410_udc_vbus_irq,
-                               IRQF_DISABLED | IRQF_TRIGGER_RISING
-                               | IRQF_TRIGGER_FALLING,
-                               gadget_name, udc);
+                                    IRQF_DISABLED | IRQF_TRIGGER_RISING
+                                    | IRQF_TRIGGER_FALLING | IRQF_SHARED,
+                                    gadget_name, udc);
 
                if (retval != 0) {
                        dev_err(dev, "can't get vbus irq %i, err %d\n",
index 177e78ed241b448d78a22fc7c40e193da7a220fd..49a91c5ee51bc4574808302dbf52a1960f703c12 100644 (file)
@@ -156,7 +156,7 @@ config USB_OHCI_HCD_PCI
 
 config USB_OHCI_HCD_SSB
        bool "OHCI support for Broadcom SSB OHCI core"
-       depends on USB_OHCI_HCD && (SSB = y || SSB = CONFIG_USB_OHCI_HCD) && EXPERIMENTAL
+       depends on USB_OHCI_HCD && (SSB = y || SSB = USB_OHCI_HCD) && EXPERIMENTAL
        default n
        ---help---
          Support for the Sonics Silicon Backplane (SSB) attached
index c1514442883e4a4fecd2ff3d3fae3a18c80e8785..5f2d74ed5ad73a299480022938645551d5179b09 100644 (file)
@@ -575,12 +575,15 @@ static int ehci_run (struct usb_hcd *hcd)
         * from the companions to the EHCI controller.  If any of the
         * companions are in the middle of a port reset at the time, it
         * could cause trouble.  Write-locking ehci_cf_port_reset_rwsem
-        * guarantees that no resets are in progress.
+        * guarantees that no resets are in progress.  After we set CF,
+        * a short delay lets the hardware catch up; new resets shouldn't
+        * be started before the port switching actions could complete.
         */
        down_write(&ehci_cf_port_reset_rwsem);
        hcd->state = HC_STATE_RUNNING;
        ehci_writel(ehci, FLAG_CF, &ehci->regs->configured_flag);
        ehci_readl(ehci, &ehci->regs->command); /* unblock posted writes */
+       msleep(5);
        up_write(&ehci_cf_port_reset_rwsem);
 
        temp = HC_VERSION(ehci_readl(ehci, &ehci->caps->hc_capbase));
index 91e999c9f680cec92aed6c38fa58698820d3754e..bc207e3c21f51f193bd6de504b8add1761670cd8 100644 (file)
@@ -819,7 +819,7 @@ static int mts_usb_probe(struct usb_interface *intf,
                goto out_kfree2;
 
        new_desc->host->hostdata[0] = (unsigned long)new_desc;
-       if (scsi_add_host(new_desc->host, NULL)) {
+       if (scsi_add_host(new_desc->host, &dev->dev)) {
                err_retval = -EIO;
                goto out_host_put;
        }
index c567aa7a41ead3643de3c38ab4b286a3c13c283b..5a2c44e4c1f774a3122db6c02a88274ae1d60f5a 100644 (file)
@@ -79,12 +79,22 @@ MODULE_DEVICE_TABLE(usb, device_table);
 
 #define COMMAND_TIMEOUT        (2*HZ)  /* 60 second timeout for a command */
 
+/*
+ * The locking scheme is a vanilla 3-lock:
+ *   adu_device.buflock: A spinlock, covers what IRQs touch.
+ *   adutux_mutex:       A Static lock to cover open_count. It would also cover
+ *                       any globals, but we don't have them in 2.6.
+ *   adu_device.mtx:     A mutex to hold across sleepers like copy_from_user.
+ *                       It covers all of adu_device, except the open_count
+ *                       and what .buflock covers.
+ */
+
 /* Structure to hold all of our device specific stuff */
 struct adu_device {
-       struct mutex            mtx; /* locks this structure */
+       struct mutex            mtx;
        struct usb_device*      udev; /* save off the usb device pointer */
        struct usb_interface*   interface;
-       unsigned char           minor; /* the starting minor number for this device */
+       unsigned int            minor; /* the starting minor number for this device */
        char                    serial_number[8];
 
        int                     open_count; /* number of times this port has been opened */
@@ -107,8 +117,11 @@ struct adu_device {
        char*                   interrupt_out_buffer;
        struct usb_endpoint_descriptor* interrupt_out_endpoint;
        struct urb*             interrupt_out_urb;
+       int                     out_urb_finished;
 };
 
+static DEFINE_MUTEX(adutux_mutex);
+
 static struct usb_driver adu_driver;
 
 static void adu_debug_data(int level, const char *function, int size,
@@ -132,27 +145,31 @@ static void adu_debug_data(int level, const char *function, int size,
  */
 static void adu_abort_transfers(struct adu_device *dev)
 {
-       dbg(2," %s : enter", __FUNCTION__);
+       unsigned long flags;
 
-       if (dev == NULL) {
-               dbg(1," %s : dev is null", __FUNCTION__);
-               goto exit;
-       }
+       dbg(2," %s : enter", __FUNCTION__);
 
        if (dev->udev == NULL) {
                dbg(1," %s : udev is null", __FUNCTION__);
                goto exit;
        }
 
-       dbg(2," %s : udev state %d", __FUNCTION__, dev->udev->state);
-       if (dev->udev->state == USB_STATE_NOTATTACHED) {
-               dbg(1," %s : udev is not attached", __FUNCTION__);
-               goto exit;
-       }
-
        /* shutdown transfer */
-       usb_unlink_urb(dev->interrupt_in_urb);
-       usb_unlink_urb(dev->interrupt_out_urb);
+
+       /* XXX Anchor these instead */
+       spin_lock_irqsave(&dev->buflock, flags);
+       if (!dev->read_urb_finished) {
+               spin_unlock_irqrestore(&dev->buflock, flags);
+               usb_kill_urb(dev->interrupt_in_urb);
+       } else
+               spin_unlock_irqrestore(&dev->buflock, flags);
+
+       spin_lock_irqsave(&dev->buflock, flags);
+       if (!dev->out_urb_finished) {
+               spin_unlock_irqrestore(&dev->buflock, flags);
+               usb_kill_urb(dev->interrupt_out_urb);
+       } else
+               spin_unlock_irqrestore(&dev->buflock, flags);
 
 exit:
        dbg(2," %s : leave", __FUNCTION__);
@@ -162,8 +179,6 @@ static void adu_delete(struct adu_device *dev)
 {
        dbg(2, "%s enter", __FUNCTION__);
 
-       adu_abort_transfers(dev);
-
        /* free data structures */
        usb_free_urb(dev->interrupt_in_urb);
        usb_free_urb(dev->interrupt_out_urb);
@@ -239,7 +254,10 @@ static void adu_interrupt_out_callback(struct urb *urb)
                goto exit;
        }
 
-       wake_up_interruptible(&dev->write_wait);
+       spin_lock(&dev->buflock);
+       dev->out_urb_finished = 1;
+       wake_up(&dev->write_wait);
+       spin_unlock(&dev->buflock);
 exit:
 
        adu_debug_data(5, __FUNCTION__, urb->actual_length,
@@ -252,12 +270,17 @@ static int adu_open(struct inode *inode, struct file *file)
        struct adu_device *dev = NULL;
        struct usb_interface *interface;
        int subminor;
-       int retval = 0;
+       int retval;
 
        dbg(2,"%s : enter", __FUNCTION__);
 
        subminor = iminor(inode);
 
+       if ((retval = mutex_lock_interruptible(&adutux_mutex))) {
+               dbg(2, "%s : mutex lock failed", __FUNCTION__);
+               goto exit_no_lock;
+       }
+
        interface = usb_find_interface(&adu_driver, subminor);
        if (!interface) {
                err("%s - error, can't find device for minor %d",
@@ -267,54 +290,54 @@ static int adu_open(struct inode *inode, struct file *file)
        }
 
        dev = usb_get_intfdata(interface);
-       if (!dev) {
+       if (!dev || !dev->udev) {
                retval = -ENODEV;
                goto exit_no_device;
        }
 
-       /* lock this device */
-       if ((retval = mutex_lock_interruptible(&dev->mtx))) {
-               dbg(2, "%s : mutex lock failed", __FUNCTION__);
+       /* check that nobody else is using the device */
+       if (dev->open_count) {
+               retval = -EBUSY;
                goto exit_no_device;
        }
 
-       /* increment our usage count for the device */
        ++dev->open_count;
        dbg(2,"%s : open count %d", __FUNCTION__, dev->open_count);
 
        /* save device in the file's private structure */
        file->private_data = dev;
 
-       if (dev->open_count == 1) {
-               /* initialize in direction */
-               dev->read_buffer_length = 0;
+       /* initialize in direction */
+       dev->read_buffer_length = 0;
 
-               /* fixup first read by having urb waiting for it */
-               usb_fill_int_urb(dev->interrupt_in_urb,dev->udev,
-                                usb_rcvintpipe(dev->udev,
-                                               dev->interrupt_in_endpoint->bEndpointAddress),
-                                dev->interrupt_in_buffer,
-                                le16_to_cpu(dev->interrupt_in_endpoint->wMaxPacketSize),
-                                adu_interrupt_in_callback, dev,
-                                dev->interrupt_in_endpoint->bInterval);
-               /* dev->interrupt_in_urb->transfer_flags |= URB_ASYNC_UNLINK; */
-               dev->read_urb_finished = 0;
-               retval = usb_submit_urb(dev->interrupt_in_urb, GFP_KERNEL);
-               if (retval)
-                       --dev->open_count;
-       }
-       mutex_unlock(&dev->mtx);
+       /* fixup first read by having urb waiting for it */
+       usb_fill_int_urb(dev->interrupt_in_urb,dev->udev,
+                        usb_rcvintpipe(dev->udev,
+                                       dev->interrupt_in_endpoint->bEndpointAddress),
+                        dev->interrupt_in_buffer,
+                        le16_to_cpu(dev->interrupt_in_endpoint->wMaxPacketSize),
+                        adu_interrupt_in_callback, dev,
+                        dev->interrupt_in_endpoint->bInterval);
+       dev->read_urb_finished = 0;
+       if (usb_submit_urb(dev->interrupt_in_urb, GFP_KERNEL))
+               dev->read_urb_finished = 1;
+       /* we ignore failure */
+       /* end of fixup for first read */
+
+       /* initialize out direction */
+       dev->out_urb_finished = 1;
+
+       retval = 0;
 
 exit_no_device:
+       mutex_unlock(&adutux_mutex);
+exit_no_lock:
        dbg(2,"%s : leave, return value %d ", __FUNCTION__, retval);
-
        return retval;
 }
 
-static int adu_release_internal(struct adu_device *dev)
+static void adu_release_internal(struct adu_device *dev)
 {
-       int retval = 0;
-
        dbg(2," %s : enter", __FUNCTION__);
 
        /* decrement our usage count for the device */
@@ -326,12 +349,11 @@ static int adu_release_internal(struct adu_device *dev)
        }
 
        dbg(2," %s : leave", __FUNCTION__);
-       return retval;
 }
 
 static int adu_release(struct inode *inode, struct file *file)
 {
-       struct adu_device *dev = NULL;
+       struct adu_device *dev;
        int retval = 0;
 
        dbg(2," %s : enter", __FUNCTION__);
@@ -343,15 +365,13 @@ static int adu_release(struct inode *inode, struct file *file)
        }
 
        dev = file->private_data;
-
        if (dev == NULL) {
                dbg(1," %s : object is NULL", __FUNCTION__);
                retval = -ENODEV;
                goto exit;
        }
 
-       /* lock our device */
-       mutex_lock(&dev->mtx); /* not interruptible */
+       mutex_lock(&adutux_mutex); /* not interruptible */
 
        if (dev->open_count <= 0) {
                dbg(1," %s : device not opened", __FUNCTION__);
@@ -359,19 +379,15 @@ static int adu_release(struct inode *inode, struct file *file)
                goto exit;
        }
 
+       adu_release_internal(dev);
        if (dev->udev == NULL) {
                /* the device was unplugged before the file was released */
-               mutex_unlock(&dev->mtx);
-               adu_delete(dev);
-               dev = NULL;
-       } else {
-               /* do the work */
-               retval = adu_release_internal(dev);
+               if (!dev->open_count)   /* ... and we're the last user */
+                       adu_delete(dev);
        }
 
 exit:
-       if (dev)
-               mutex_unlock(&dev->mtx);
+       mutex_unlock(&adutux_mutex);
        dbg(2," %s : leave, return value %d", __FUNCTION__, retval);
        return retval;
 }
@@ -393,12 +409,12 @@ static ssize_t adu_read(struct file *file, __user char *buffer, size_t count,
 
        dev = file->private_data;
        dbg(2," %s : dev=%p", __FUNCTION__, dev);
-       /* lock this object */
+
        if (mutex_lock_interruptible(&dev->mtx))
                return -ERESTARTSYS;
 
        /* verify that the device wasn't unplugged */
-       if (dev->udev == NULL || dev->minor == 0) {
+       if (dev->udev == NULL) {
                retval = -ENODEV;
                err("No device or device unplugged %d", retval);
                goto exit;
@@ -452,7 +468,7 @@ static ssize_t adu_read(struct file *file, __user char *buffer, size_t count,
                                should_submit = 1;
                        } else {
                                /* even the primary was empty - we may need to do IO */
-                               if (dev->interrupt_in_urb->status == -EINPROGRESS) {
+                               if (!dev->read_urb_finished) {
                                        /* somebody is doing IO */
                                        spin_unlock_irqrestore(&dev->buflock, flags);
                                        dbg(2," %s : submitted already", __FUNCTION__);
@@ -460,6 +476,7 @@ static ssize_t adu_read(struct file *file, __user char *buffer, size_t count,
                                        /* we must initiate input */
                                        dbg(2," %s : initiate input", __FUNCTION__);
                                        dev->read_urb_finished = 0;
+                                       spin_unlock_irqrestore(&dev->buflock, flags);
 
                                        usb_fill_int_urb(dev->interrupt_in_urb,dev->udev,
                                                         usb_rcvintpipe(dev->udev,
@@ -469,15 +486,12 @@ static ssize_t adu_read(struct file *file, __user char *buffer, size_t count,
                                                         adu_interrupt_in_callback,
                                                         dev,
                                                         dev->interrupt_in_endpoint->bInterval);
-                                       retval = usb_submit_urb(dev->interrupt_in_urb, GFP_ATOMIC);
-                                       if (!retval) {
-                                               spin_unlock_irqrestore(&dev->buflock, flags);
-                                               dbg(2," %s : submitted OK", __FUNCTION__);
-                                       } else {
+                                       retval = usb_submit_urb(dev->interrupt_in_urb, GFP_KERNEL);
+                                       if (retval) {
+                                               dev->read_urb_finished = 1;
                                                if (retval == -ENOMEM) {
                                                        retval = bytes_read ? bytes_read : -ENOMEM;
                                                }
-                                               spin_unlock_irqrestore(&dev->buflock, flags);
                                                dbg(2," %s : submit failed", __FUNCTION__);
                                                goto exit;
                                        }
@@ -486,10 +500,14 @@ static ssize_t adu_read(struct file *file, __user char *buffer, size_t count,
                                /* we wait for I/O to complete */
                                set_current_state(TASK_INTERRUPTIBLE);
                                add_wait_queue(&dev->read_wait, &wait);
-                               if (!dev->read_urb_finished)
+                               spin_lock_irqsave(&dev->buflock, flags);
+                               if (!dev->read_urb_finished) {
+                                       spin_unlock_irqrestore(&dev->buflock, flags);
                                        timeout = schedule_timeout(COMMAND_TIMEOUT);
-                               else
+                               } else {
+                                       spin_unlock_irqrestore(&dev->buflock, flags);
                                        set_current_state(TASK_RUNNING);
+                               }
                                remove_wait_queue(&dev->read_wait, &wait);
 
                                if (timeout <= 0) {
@@ -509,19 +527,23 @@ static ssize_t adu_read(struct file *file, __user char *buffer, size_t count,
 
        retval = bytes_read;
        /* if the primary buffer is empty then use it */
-       if (should_submit && !dev->interrupt_in_urb->status==-EINPROGRESS) {
+       spin_lock_irqsave(&dev->buflock, flags);
+       if (should_submit && dev->read_urb_finished) {
+               dev->read_urb_finished = 0;
+               spin_unlock_irqrestore(&dev->buflock, flags);
                usb_fill_int_urb(dev->interrupt_in_urb,dev->udev,
                                 usb_rcvintpipe(dev->udev,
                                                dev->interrupt_in_endpoint->bEndpointAddress),
-                                               dev->interrupt_in_buffer,
-                                               le16_to_cpu(dev->interrupt_in_endpoint->wMaxPacketSize),
-                                               adu_interrupt_in_callback,
-                                               dev,
-                                               dev->interrupt_in_endpoint->bInterval);
-               /* dev->interrupt_in_urb->transfer_flags |= URB_ASYNC_UNLINK; */
-               dev->read_urb_finished = 0;
-               usb_submit_urb(dev->interrupt_in_urb, GFP_KERNEL);
+                               dev->interrupt_in_buffer,
+                               le16_to_cpu(dev->interrupt_in_endpoint->wMaxPacketSize),
+                               adu_interrupt_in_callback,
+                               dev,
+                               dev->interrupt_in_endpoint->bInterval);
+               if (usb_submit_urb(dev->interrupt_in_urb, GFP_KERNEL) != 0)
+                       dev->read_urb_finished = 1;
                /* we ignore failure */
+       } else {
+               spin_unlock_irqrestore(&dev->buflock, flags);
        }
 
 exit:
@@ -535,24 +557,24 @@ exit:
 static ssize_t adu_write(struct file *file, const __user char *buffer,
                         size_t count, loff_t *ppos)
 {
+       DECLARE_WAITQUEUE(waita, current);
        struct adu_device *dev;
        size_t bytes_written = 0;
        size_t bytes_to_write;
        size_t buffer_size;
+       unsigned long flags;
        int retval;
-       int timeout = 0;
 
        dbg(2," %s : enter, count = %Zd", __FUNCTION__, count);
 
        dev = file->private_data;
 
-       /* lock this object */
        retval = mutex_lock_interruptible(&dev->mtx);
        if (retval)
                goto exit_nolock;
 
        /* verify that the device wasn't unplugged */
-       if (dev->udev == NULL || dev->minor == 0) {
+       if (dev->udev == NULL) {
                retval = -ENODEV;
                err("No device or device unplugged %d", retval);
                goto exit;
@@ -564,42 +586,37 @@ static ssize_t adu_write(struct file *file, const __user char *buffer,
                goto exit;
        }
 
-
        while (count > 0) {
-               if (dev->interrupt_out_urb->status == -EINPROGRESS) {
-                       timeout = COMMAND_TIMEOUT;
+               add_wait_queue(&dev->write_wait, &waita);
+               set_current_state(TASK_INTERRUPTIBLE);
+               spin_lock_irqsave(&dev->buflock, flags);
+               if (!dev->out_urb_finished) {
+                       spin_unlock_irqrestore(&dev->buflock, flags);
 
-                       while (timeout > 0) {
-                               if (signal_pending(current)) {
+                       mutex_unlock(&dev->mtx);
+                       if (signal_pending(current)) {
                                dbg(1," %s : interrupted", __FUNCTION__);
+                               set_current_state(TASK_RUNNING);
                                retval = -EINTR;
-                               goto exit;
+                               goto exit_onqueue;
                        }
-                       mutex_unlock(&dev->mtx);
-                       timeout = interruptible_sleep_on_timeout(&dev->write_wait, timeout);
+                       if (schedule_timeout(COMMAND_TIMEOUT) == 0) {
+                               dbg(1, "%s - command timed out.", __FUNCTION__);
+                               retval = -ETIMEDOUT;
+                               goto exit_onqueue;
+                       }
+                       remove_wait_queue(&dev->write_wait, &waita);
                        retval = mutex_lock_interruptible(&dev->mtx);
                        if (retval) {
                                retval = bytes_written ? bytes_written : retval;
                                goto exit_nolock;
                        }
-                       if (timeout > 0) {
-                               break;
-                       }
-                       dbg(1," %s : interrupted timeout: %d", __FUNCTION__, timeout);
-               }
-
-
-               dbg(1," %s : final timeout: %d", __FUNCTION__, timeout);
-
-               if (timeout == 0) {
-                       dbg(1, "%s - command timed out.", __FUNCTION__);
-                       retval = -ETIMEDOUT;
-                       goto exit;
-               }
-
-               dbg(4," %s : in progress, count = %Zd", __FUNCTION__, count);
 
+                       dbg(4," %s : in progress, count = %Zd", __FUNCTION__, count);
                } else {
+                       spin_unlock_irqrestore(&dev->buflock, flags);
+                       set_current_state(TASK_RUNNING);
+                       remove_wait_queue(&dev->write_wait, &waita);
                        dbg(4," %s : sending, count = %Zd", __FUNCTION__, count);
 
                        /* write the data into interrupt_out_buffer from userspace */
@@ -622,11 +639,12 @@ static ssize_t adu_write(struct file *file, const __user char *buffer,
                                bytes_to_write,
                                adu_interrupt_out_callback,
                                dev,
-                               dev->interrupt_in_endpoint->bInterval);
-                       /* dev->interrupt_in_urb->transfer_flags |= URB_ASYNC_UNLINK; */
+                               dev->interrupt_out_endpoint->bInterval);
                        dev->interrupt_out_urb->actual_length = bytes_to_write;
+                       dev->out_urb_finished = 0;
                        retval = usb_submit_urb(dev->interrupt_out_urb, GFP_KERNEL);
                        if (retval < 0) {
+                               dev->out_urb_finished = 1;
                                err("Couldn't submit interrupt_out_urb %d", retval);
                                goto exit;
                        }
@@ -637,16 +655,17 @@ static ssize_t adu_write(struct file *file, const __user char *buffer,
                        bytes_written += bytes_to_write;
                }
        }
-
-       retval = bytes_written;
+       mutex_unlock(&dev->mtx);
+       return bytes_written;
 
 exit:
-       /* unlock the device */
        mutex_unlock(&dev->mtx);
 exit_nolock:
-
        dbg(2," %s : leave, return value %d", __FUNCTION__, retval);
+       return retval;
 
+exit_onqueue:
+       remove_wait_queue(&dev->write_wait, &waita);
        return retval;
 }
 
@@ -831,25 +850,22 @@ static void adu_disconnect(struct usb_interface *interface)
        dbg(2," %s : enter", __FUNCTION__);
 
        dev = usb_get_intfdata(interface);
-       usb_set_intfdata(interface, NULL);
 
+       mutex_lock(&dev->mtx);  /* not interruptible */
+       dev->udev = NULL;       /* poison */
        minor = dev->minor;
-
-       /* give back our minor */
        usb_deregister_dev(interface, &adu_class);
-       dev->minor = 0;
+       mutex_unlock(&dev->mtx);
 
-       mutex_lock(&dev->mtx); /* not interruptible */
+       mutex_lock(&adutux_mutex);
+       usb_set_intfdata(interface, NULL);
 
        /* if the device is not opened, then we clean up right now */
        dbg(2," %s : open count %d", __FUNCTION__, dev->open_count);
-       if (!dev->open_count) {
-               mutex_unlock(&dev->mtx);
+       if (!dev->open_count)
                adu_delete(dev);
-       } else {
-               dev->udev = NULL;
-               mutex_unlock(&dev->mtx);
-       }
+
+       mutex_unlock(&adutux_mutex);
 
        dev_info(&interface->dev, "ADU device adutux%d now disconnected\n",
                 (minor - ADU_MINOR_BASE));
index 49c5c5c4c431ee2aabd7ce0b081e913d2634b6f6..06cb71942dc7ee87e52c56c1be0410d64a707be4 100644 (file)
@@ -144,12 +144,14 @@ static void led_disconnect(struct usb_interface *interface)
        struct usb_led *dev;
 
        dev = usb_get_intfdata (interface);
-       usb_set_intfdata (interface, NULL);
 
        device_remove_file(&interface->dev, &dev_attr_blue);
        device_remove_file(&interface->dev, &dev_attr_red);
        device_remove_file(&interface->dev, &dev_attr_green);
 
+       /* first remove the files, then set the pointer to NULL */
+       usb_set_intfdata (interface, NULL);
+
        usb_put_dev(dev->udev);
 
        kfree(dev);
index 9eb4a65ee4d9943026f74de49c4e3013c8f3f65f..d41531139c55e249ce14cd0ca86ada8cd5024409 100644 (file)
@@ -327,6 +327,7 @@ void usb_serial_generic_read_bulk_callback (struct urb *urb)
        struct usb_serial_port *port = (struct usb_serial_port *)urb->context;
        unsigned char *data = urb->transfer_buffer;
        int status = urb->status;
+       unsigned long flags;
 
        dbg("%s - port %d", __FUNCTION__, port->number);
 
@@ -339,11 +340,11 @@ void usb_serial_generic_read_bulk_callback (struct urb *urb)
        usb_serial_debug_data(debug, &port->dev, __FUNCTION__, urb->actual_length, data);
 
        /* Throttle the device if requested by tty */
-       spin_lock(&port->lock);
+       spin_lock_irqsave(&port->lock, flags);
        if (!(port->throttled = port->throttle_req))
                /* Handle data and continue reading from device */
                flush_and_resubmit_read_urb(port);
-       spin_unlock(&port->lock);
+       spin_unlock_irqrestore(&port->lock, flags);
 }
 EXPORT_SYMBOL_GPL(usb_serial_generic_read_bulk_callback);
 
index 1f7ab15df36dead8dc571ecfc7495560fcdf2259..feba9679ace8b35103fc7ac0315adefdf97b855f 100644 (file)
@@ -1215,12 +1215,14 @@ static int keyspan_chars_in_buffer (struct usb_serial_port *port)
 
 static int keyspan_open (struct usb_serial_port *port, struct file *filp)
 {
-       struct keyspan_port_private     *p_priv;
-       struct keyspan_serial_private   *s_priv;
-       struct usb_serial               *serial = port->serial;
+       struct keyspan_port_private     *p_priv;
+       struct keyspan_serial_private   *s_priv;
+       struct usb_serial               *serial = port->serial;
        const struct keyspan_device_details     *d_details;
        int                             i, err;
+       int                             baud_rate, device_port;
        struct urb                      *urb;
+       unsigned int                    cflag;
 
        s_priv = usb_get_serial_data(serial);
        p_priv = usb_get_serial_port_data(port);
@@ -1263,6 +1265,30 @@ static int keyspan_open (struct usb_serial_port *port, struct file *filp)
                /* usb_settoggle(urb->dev, usb_pipeendpoint(urb->pipe), usb_pipeout(urb->pipe), 0); */
        }
 
+       /* get the terminal config for the setup message now so we don't
+        * need to send 2 of them */
+
+       cflag = port->tty->termios->c_cflag;
+       device_port = port->number - port->serial->minor;
+
+       /* Baud rate calculation takes baud rate as an integer
+          so other rates can be generated if desired. */
+       baud_rate = tty_get_baud_rate(port->tty);
+       /* If no match or invalid, leave as default */
+       if (baud_rate >= 0
+           && d_details->calculate_baud_rate(baud_rate, d_details->baudclk,
+                               NULL, NULL, NULL, device_port) == KEYSPAN_BAUD_RATE_OK) {
+               p_priv->baud = baud_rate;
+       }
+
+       /* set CTS/RTS handshake etc. */
+       p_priv->cflag = cflag;
+       p_priv->flow_control = (cflag & CRTSCTS)? flow_cts: flow_none;
+
+       keyspan_send_setup(port, 1);
+       //mdelay(100);
+       //keyspan_set_termios(port, NULL);
+
        return (0);
 }
 
index a5ced7e08cbfc05ca9417b8dd42fd61c624ed27c..c29c91271133584bdc9369f40c3cfd1817ac154a 100644 (file)
@@ -2711,7 +2711,7 @@ static int mos7840_startup(struct usb_serial *serial)
        status = mos7840_set_reg_sync(serial->port[0], ZLP_REG5, Data);
        if (status < 0) {
                dbg("Writing ZLP_REG5 failed status-0x%x\n", status);
-               return -1;
+               goto error;
        } else
                dbg("ZLP_REG5 Writing success status%d\n", status);
 
index 2cd3f1d4b687f834a529e9cf2ccac2688ff123dd..cf8add91de0585a3f40fe150f6d03f9b9100f4dd 100644 (file)
@@ -86,6 +86,7 @@ static struct usb_device_id id_table [] = {
        { USB_DEVICE(ALCOR_VENDOR_ID, ALCOR_PRODUCT_ID) },
        { USB_DEVICE(HUAWEI_VENDOR_ID, HUAWEI_PRODUCT_ID) },
        { USB_DEVICE(WS002IN_VENDOR_ID, WS002IN_PRODUCT_ID) },
+       { USB_DEVICE(COREGA_VENDOR_ID, COREGA_PRODUCT_ID) },
        { }                                     /* Terminating entry */
 };
 
index ed603e3decd6c37b4911972afa03ac8a0fcac4c8..d31f5d299989f2315b280c4ab3092edec912d002 100644 (file)
 #define WS002IN_VENDOR_ID      0x11f6
 #define WS002IN_PRODUCT_ID     0x2001
 
+/* Corega CG-USBRS232R Serial Adapter */
+#define COREGA_VENDOR_ID       0x07aa
+#define COREGA_PRODUCT_ID      0x002a
index 833f6e1e37213e359a628fbd8d82ec22b8a3afad..605ebccdcd51012b5f551538653ffb0ab175eb25 100644 (file)
@@ -136,6 +136,8 @@ static struct usb_device_id id_table_3port [] = {
        { USB_DEVICE(0x0f30, 0x1b1d) }, /* Sierra Wireless MC5720 */
        { USB_DEVICE(0x1199, 0x0218) }, /* Sierra Wireless MC5720 */
        { USB_DEVICE(0x1199, 0x0020) }, /* Sierra Wireless MC5725 */
+       { USB_DEVICE(0x1199, 0x0220) }, /* Sierra Wireless MC5725 */
+       { USB_DEVICE(0x1199, 0x0220) }, /* Sierra Wireless MC5725 */
        { USB_DEVICE(0x1199, 0x0019) }, /* Sierra Wireless AirCard 595 */
        { USB_DEVICE(0x1199, 0x0021) }, /* Sierra Wireless AirCard 597E */
        { USB_DEVICE(0x1199, 0x0120) }, /* Sierra Wireless USB Dongle 595U*/
index 1ba19eaa1970979faa450d71cf143282cc67e93a..836a34ae6ec62a5737c3b46e3f47dfecdeff9c5f 100644 (file)
@@ -177,6 +177,10 @@ static int slave_configure(struct scsi_device *sdev)
                 * is an occasional series of retries that will all fail. */
                sdev->retry_hwerror = 1;
 
+               /* USB disks should allow restart.  Some drives spin down
+                * automatically, requiring a START-STOP UNIT command. */
+               sdev->allow_restart = 1;
+
        } else {
 
                /* Non-disk-type devices don't need to blacklist any pages
index 22ab2380367db98baab1c5bd0e7541b4a253f982..2c27721bd259a5f3c96942d577654fce472aa776 100644 (file)
@@ -342,11 +342,11 @@ UNUSUAL_DEV(  0x04b0, 0x040d, 0x0100, 0x0100,
                US_FL_FIX_CAPACITY),
 
 /* Reported by Graber and Mike Pagano <mpagano-kernel@mpagano.com> */
-UNUSUAL_DEV(  0x04b0, 0x040f, 0x0200, 0x0200,
-       "NIKON",
-       "NIKON DSC D200",
-       US_SC_DEVICE, US_PR_DEVICE, NULL,
-       US_FL_FIX_CAPACITY),
+UNUSUAL_DEV(  0x04b0, 0x040f, 0x0100, 0x0200,
+               "NIKON",
+               "NIKON DSC D200",
+               US_SC_DEVICE, US_PR_DEVICE, NULL,
+               US_FL_FIX_CAPACITY),
 
 /* Reported by Emil Larsson <emil@swip.net> */
 UNUSUAL_DEV(  0x04b0, 0x0411, 0x0100, 0x0101,
@@ -731,6 +731,13 @@ UNUSUAL_DEV(  0x0584, 0x0008, 0x0102, 0x0102,
                US_SC_SCSI, US_PR_ALAUDA, init_alauda, 0 ),
 #endif
 
+/* Reported by RTE <raszilki@yandex.ru> */
+UNUSUAL_DEV(  0x058f, 0x6387, 0x0141, 0x0141,
+               "JetFlash",
+               "TS1GJF2A/120",
+               US_SC_DEVICE, US_PR_DEVICE, NULL,
+               US_FL_MAX_SECTORS_64 ),
+
 /* Fabrizio Fellini <fello@libero.it> */
 UNUSUAL_DEV(  0x0595, 0x4343, 0x0000, 0x2210,
                "Fujifilm",
index 7d86e9eae915a55a05757e8f2cc1cf2839140684..5b3dbcfcda48e6794f71a32d130002229b08c794 100644 (file)
@@ -641,6 +641,17 @@ config FB_VESA
          You will get a boot time penguin logo at no additional cost. Please
          read <file:Documentation/fb/vesafb.txt>. If unsure, say Y.
 
+config FB_EFI
+       bool "EFI-based Framebuffer Support"
+       depends on (FB = y) && X86
+       select FB_CFB_FILLRECT
+       select FB_CFB_COPYAREA
+       select FB_CFB_IMAGEBLIT
+       help
+         This is the EFI frame buffer device driver. If the firmware on
+         your platform is UEFI2.0, select Y to add support for
+         Graphics Output Protocol for early console messages to appear.
+
 config FB_IMAC
        bool "Intel-based Macintosh Framebuffer Support"
        depends on (FB = y) && X86 && EFI
index 59d6c45a910d007f102cc3797f3f9d5986ef4b0d..83e02b3429b64e5da5941301612da65806f73df4 100644 (file)
@@ -118,6 +118,7 @@ obj-$(CONFIG_FB_OMAP)             += omap/
 obj-$(CONFIG_FB_UVESA)            += uvesafb.o
 obj-$(CONFIG_FB_VESA)             += vesafb.o
 obj-$(CONFIG_FB_IMAC)             += imacfb.o
+obj-$(CONFIG_FB_EFI)              += efifb.o
 obj-$(CONFIG_FB_VGA16)            += vga16fb.o
 obj-$(CONFIG_FB_OF)               += offb.o
 obj-$(CONFIG_FB_BF54X_LQ043)     += bf54x-lq043fb.o
index 235b618b41178053670879cb5e9961a164871730..11a3a222dfc3b7a8a6f59991adf0b0354a2af73d 100644 (file)
@@ -268,6 +268,10 @@ static int atmel_lcdfb_set_par(struct fb_info *info)
        /* Turn off the LCD controller and the DMA controller */
        lcdc_writel(sinfo, ATMEL_LCDC_PWRCON, sinfo->guard_time << ATMEL_LCDC_GUARDT_OFFSET);
 
+       /* Wait for the LCDC core to become idle */
+       while (lcdc_readl(sinfo, ATMEL_LCDC_PWRCON) & ATMEL_LCDC_BUSY)
+               msleep(10);
+
        lcdc_writel(sinfo, ATMEL_LCDC_DMACON, 0);
 
        if (info->var.bits_per_pixel == 1)
index 1e32b3d13f2e7123bc86d9be742d747111f763d2..62867cb63fefb2894dfc98096affff66c4fd5d22 100644 (file)
@@ -202,6 +202,7 @@ static struct pci_device_id radeonfb_pci_table[] = {
        CHIP_DEF(PCI_CHIP_RV380_3154,   RV380,  CHIP_HAS_CRTC2 | CHIP_IS_MOBILITY),
        CHIP_DEF(PCI_CHIP_RV370_5B60,   RV380,  CHIP_HAS_CRTC2),
        CHIP_DEF(PCI_CHIP_RV370_5B62,   RV380,  CHIP_HAS_CRTC2),
+       CHIP_DEF(PCI_CHIP_RV370_5B63,   RV380,  CHIP_HAS_CRTC2),
        CHIP_DEF(PCI_CHIP_RV370_5B64,   RV380,  CHIP_HAS_CRTC2),
        CHIP_DEF(PCI_CHIP_RV370_5B65,   RV380,  CHIP_HAS_CRTC2),
        CHIP_DEF(PCI_CHIP_RV370_5460,   RV380,  CHIP_HAS_CRTC2 | CHIP_IS_MOBILITY),
index 267422f66255e466a3fc56a82d7993b29fe52314..b87ed37ac0c1217c93a14638d0fd73b0d56a04bf 100644 (file)
@@ -6,7 +6,7 @@ menu "Console display driver support"
 
 config VGA_CONSOLE
        bool "VGA text console" if EMBEDDED || !X86
-       depends on !ARCH_ACORN && !ARCH_EBSA110 && !4xx && !8xx && !SPARC && !M68K && !PARISC && !FRV && !ARCH_VERSATILE && !SUPERH && !BFIN
+       depends on !ARCH_ACORN && !ARCH_EBSA110 && !4xx && !8xx && !SPARC && !M68K && !PARISC && !FRV && !ARCH_VERSATILE && !SUPERH && !BLACKFIN
        default y
        help
          Saying Y here will allow you to use Linux in text mode through a
diff --git a/drivers/video/efifb.c b/drivers/video/efifb.c
new file mode 100644 (file)
index 0000000..bd779ae
--- /dev/null
@@ -0,0 +1,232 @@
+/*
+ * Framebuffer driver for EFI/UEFI based system
+ *
+ * (c) 2006 Edgar Hucek <gimli@dark-green.com>
+ * Original efi driver written by Gerd Knorr <kraxel@goldbach.in-berlin.de>
+ *
+ */
+
+#include <linux/module.h>
+#include <linux/kernel.h>
+#include <linux/errno.h>
+#include <linux/fb.h>
+#include <linux/platform_device.h>
+#include <linux/screen_info.h>
+
+#include <video/vga.h>
+
+static struct fb_var_screeninfo efifb_defined __initdata = {
+       .activate               = FB_ACTIVATE_NOW,
+       .height                 = -1,
+       .width                  = -1,
+       .right_margin           = 32,
+       .upper_margin           = 16,
+       .lower_margin           = 4,
+       .vsync_len              = 4,
+       .vmode                  = FB_VMODE_NONINTERLACED,
+};
+
+static struct fb_fix_screeninfo efifb_fix __initdata = {
+       .id                     = "EFI VGA",
+       .type                   = FB_TYPE_PACKED_PIXELS,
+       .accel                  = FB_ACCEL_NONE,
+       .visual                 = FB_VISUAL_TRUECOLOR,
+};
+
+static int efifb_setcolreg(unsigned regno, unsigned red, unsigned green,
+                          unsigned blue, unsigned transp,
+                          struct fb_info *info)
+{
+       /*
+        *  Set a single color register. The values supplied are
+        *  already rounded down to the hardware's capabilities
+        *  (according to the entries in the `var' structure). Return
+        *  != 0 for invalid regno.
+        */
+
+       if (regno >= info->cmap.len)
+               return 1;
+
+       if (regno < 16) {
+               red   >>= 8;
+               green >>= 8;
+               blue  >>= 8;
+               ((u32 *)(info->pseudo_palette))[regno] =
+                       (red   << info->var.red.offset)   |
+                       (green << info->var.green.offset) |
+                       (blue  << info->var.blue.offset);
+       }
+       return 0;
+}
+
+static struct fb_ops efifb_ops = {
+       .owner          = THIS_MODULE,
+       .fb_setcolreg   = efifb_setcolreg,
+       .fb_fillrect    = cfb_fillrect,
+       .fb_copyarea    = cfb_copyarea,
+       .fb_imageblit   = cfb_imageblit,
+};
+
+static int __init efifb_probe(struct platform_device *dev)
+{
+       struct fb_info *info;
+       int err;
+       unsigned int size_vmode;
+       unsigned int size_remap;
+       unsigned int size_total;
+
+       efifb_fix.smem_start = screen_info.lfb_base;
+       efifb_defined.bits_per_pixel = screen_info.lfb_depth;
+       efifb_defined.xres = screen_info.lfb_width;
+       efifb_defined.yres = screen_info.lfb_height;
+       efifb_fix.line_length = screen_info.lfb_linelength;
+
+       /*   size_vmode -- that is the amount of memory needed for the
+        *                 used video mode, i.e. the minimum amount of
+        *                 memory we need. */
+       size_vmode = efifb_defined.yres * efifb_fix.line_length;
+
+       /*   size_total -- all video memory we have. Used for
+        *                 entries, ressource allocation and bounds
+        *                 checking. */
+       size_total = screen_info.lfb_size;
+       if (size_total < size_vmode)
+               size_total = size_vmode;
+
+       /*   size_remap -- the amount of video memory we are going to
+        *                 use for efifb.  With modern cards it is no
+        *                 option to simply use size_total as that
+        *                 wastes plenty of kernel address space. */
+       size_remap  = size_vmode * 2;
+       if (size_remap < size_vmode)
+               size_remap = size_vmode;
+       if (size_remap > size_total)
+               size_remap = size_total;
+       efifb_fix.smem_len = size_remap;
+
+       if (!request_mem_region(efifb_fix.smem_start, size_total, "efifb"))
+               /* We cannot make this fatal. Sometimes this comes from magic
+                  spaces our resource handlers simply don't know about */
+               printk(KERN_WARNING
+                      "efifb: cannot reserve video memory at 0x%lx\n",
+                       efifb_fix.smem_start);
+
+       info = framebuffer_alloc(sizeof(u32) * 16, &dev->dev);
+       if (!info) {
+               err = -ENOMEM;
+               goto err_release_mem;
+       }
+       info->pseudo_palette = info->par;
+       info->par = NULL;
+
+       info->screen_base = ioremap(efifb_fix.smem_start, efifb_fix.smem_len);
+       if (!info->screen_base) {
+               printk(KERN_ERR "efifb: abort, cannot ioremap video memory "
+                               "0x%x @ 0x%lx\n",
+                       efifb_fix.smem_len, efifb_fix.smem_start);
+               err = -EIO;
+               goto err_unmap;
+       }
+
+       printk(KERN_INFO "efifb: framebuffer at 0x%lx, mapped to 0x%p, "
+              "using %dk, total %dk\n",
+              efifb_fix.smem_start, info->screen_base,
+              size_remap/1024, size_total/1024);
+       printk(KERN_INFO "efifb: mode is %dx%dx%d, linelength=%d, pages=%d\n",
+              efifb_defined.xres, efifb_defined.yres,
+              efifb_defined.bits_per_pixel, efifb_fix.line_length,
+              screen_info.pages);
+
+       efifb_defined.xres_virtual = efifb_defined.xres;
+       efifb_defined.yres_virtual = efifb_fix.smem_len /
+                                       efifb_fix.line_length;
+       printk(KERN_INFO "efifb: scrolling: redraw\n");
+       efifb_defined.yres_virtual = efifb_defined.yres;
+
+       /* some dummy values for timing to make fbset happy */
+       efifb_defined.pixclock     = 10000000 / efifb_defined.xres *
+                                       1000 / efifb_defined.yres;
+       efifb_defined.left_margin  = (efifb_defined.xres / 8) & 0xf8;
+       efifb_defined.hsync_len    = (efifb_defined.xres / 8) & 0xf8;
+
+       efifb_defined.red.offset    = screen_info.red_pos;
+       efifb_defined.red.length    = screen_info.red_size;
+       efifb_defined.green.offset  = screen_info.green_pos;
+       efifb_defined.green.length  = screen_info.green_size;
+       efifb_defined.blue.offset   = screen_info.blue_pos;
+       efifb_defined.blue.length   = screen_info.blue_size;
+       efifb_defined.transp.offset = screen_info.rsvd_pos;
+       efifb_defined.transp.length = screen_info.rsvd_size;
+
+       printk(KERN_INFO "efifb: %s: "
+              "size=%d:%d:%d:%d, shift=%d:%d:%d:%d\n",
+              "Truecolor",
+              screen_info.rsvd_size,
+              screen_info.red_size,
+              screen_info.green_size,
+              screen_info.blue_size,
+              screen_info.rsvd_pos,
+              screen_info.red_pos,
+              screen_info.green_pos,
+              screen_info.blue_pos);
+
+       efifb_fix.ypanstep  = 0;
+       efifb_fix.ywrapstep = 0;
+
+       info->fbops = &efifb_ops;
+       info->var = efifb_defined;
+       info->fix = efifb_fix;
+       info->flags = FBINFO_FLAG_DEFAULT;
+
+       if (fb_alloc_cmap(&info->cmap, 256, 0) < 0) {
+               err = -ENOMEM;
+               goto err_unmap;
+       }
+       if (register_framebuffer(info) < 0) {
+               err = -EINVAL;
+               goto err_fb_dealoc;
+       }
+       printk(KERN_INFO "fb%d: %s frame buffer device\n",
+              info->node, info->fix.id);
+       return 0;
+
+err_fb_dealoc:
+       fb_dealloc_cmap(&info->cmap);
+err_unmap:
+       iounmap(info->screen_base);
+       framebuffer_release(info);
+err_release_mem:
+       release_mem_region(efifb_fix.smem_start, size_total);
+       return err;
+}
+
+static struct platform_driver efifb_driver = {
+       .probe  = efifb_probe,
+       .driver = {
+               .name   = "efifb",
+       },
+};
+
+static struct platform_device efifb_device = {
+       .name   = "efifb",
+};
+
+static int __init efifb_init(void)
+{
+       int ret;
+
+       if (screen_info.orig_video_isVGA != VIDEO_TYPE_EFI)
+               return -ENODEV;
+
+       ret = platform_driver_register(&efifb_driver);
+
+       if (!ret) {
+               ret = platform_device_register(&efifb_device);
+               if (ret)
+                       platform_driver_unregister(&efifb_driver);
+       }
+       return ret;
+}
+module_init(efifb_init);
+
+MODULE_LICENSE("GPL");
index f836137a0edac366b1d814c4230d7517e88a6b9d..a0df63289b5f83ed9007be92df25c9c5f7065b4c 100644 (file)
@@ -56,13 +56,12 @@ unsigned char *fb_ddc_read(struct i2c_adapter *adapter)
        int i, j;
 
        algo_data->setscl(algo_data->data, 1);
-       algo_data->setscl(algo_data->data, 0);
 
        for (i = 0; i < 3; i++) {
                /* For some old monitors we need the
                 * following process to initialize/stop DDC
                 */
-               algo_data->setsda(algo_data->data, 0);
+               algo_data->setsda(algo_data->data, 1);
                msleep(13);
 
                algo_data->setscl(algo_data->data, 1);
@@ -97,14 +96,15 @@ unsigned char *fb_ddc_read(struct i2c_adapter *adapter)
                algo_data->setsda(algo_data->data, 1);
                msleep(15);
                algo_data->setscl(algo_data->data, 0);
+               algo_data->setsda(algo_data->data, 0);
                if (edid)
                        break;
        }
        /* Release the DDC lines when done or the Apple Cinema HD display
         * will switch off
         */
-       algo_data->setsda(algo_data->data, 0);
-       algo_data->setscl(algo_data->data, 0);
+       algo_data->setsda(algo_data->data, 1);
+       algo_data->setscl(algo_data->data, 1);
 
        return edid;
 }
index 6455fd2a39f2d9c333c8892ae93ddc771ff22ef2..9366ef2bb5f7c5748107fa2346daff6d263c9efa 100644 (file)
@@ -234,10 +234,6 @@ static int __init imacfb_probe(struct platform_device *dev)
                size_remap = size_total;
        imacfb_fix.smem_len = size_remap;
 
-#ifndef __i386__
-       screen_info.imacpm_seg = 0;
-#endif
-
        if (!request_mem_region(imacfb_fix.smem_start, size_total, "imacfb")) {
                printk(KERN_WARNING
                       "imacfb: cannot reserve video memory at 0x%lx\n",
index 75836aa8319196345d5a24123af97e509a643543..9c56c492a6939b6dda69fc454299dbb134771343 100644 (file)
@@ -51,7 +51,6 @@
 #define L1GPU_DISPLAY_SYNC_HSYNC               1
 #define L1GPU_DISPLAY_SYNC_VSYNC               2
 
-#define DDR_SIZE                               (0)     /* used no ddr */
 #define GPU_CMD_BUF_SIZE                       (64 * 1024)
 #define GPU_IOIF                               (0x0d000000UL)
 #define GPU_ALIGN_UP(x)                                _ALIGN_UP((x), 64)
@@ -1060,6 +1059,7 @@ static int __devinit ps3fb_probe(struct ps3_system_bus_device *dev)
        u64 xdr_lpar;
        int status, res_index;
        struct task_struct *task;
+       unsigned long max_ps3fb_size;
 
        status = ps3_open_hv_device(dev);
        if (status) {
@@ -1085,8 +1085,15 @@ static int __devinit ps3fb_probe(struct ps3_system_bus_device *dev)
 
        ps3fb_set_sync(&dev->core);
 
+       max_ps3fb_size = _ALIGN_UP(GPU_IOIF, 256*1024*1024) - GPU_IOIF;
+       if (ps3fb_videomemory.size > max_ps3fb_size) {
+               dev_info(&dev->core, "Limiting ps3fb mem size to %lu bytes\n",
+                        max_ps3fb_size);
+               ps3fb_videomemory.size = max_ps3fb_size;
+       }
+
        /* get gpu context handle */
-       status = lv1_gpu_memory_allocate(DDR_SIZE, 0, 0, 0, 0,
+       status = lv1_gpu_memory_allocate(ps3fb_videomemory.size, 0, 0, 0, 0,
                                         &ps3fb.memory_handle, &ddr_lpar);
        if (status) {
                dev_err(&dev->core, "%s: lv1_gpu_memory_allocate failed: %d\n",
index 15d7787dea876c6548e0319789b0a8325b6a8475..69d7ea02cd489bac96c3e3051678b669547e0211 100644 (file)
@@ -96,10 +96,23 @@ static int virtio_dev_probe(struct device *_d)
        return err;
 }
 
+static int virtio_dev_remove(struct device *_d)
+{
+       struct virtio_device *dev = container_of(_d,struct virtio_device,dev);
+       struct virtio_driver *drv = container_of(dev->dev.driver,
+                                                struct virtio_driver, driver);
+
+       dev->config->set_status(dev, dev->config->get_status(dev)
+                               & ~VIRTIO_CONFIG_S_DRIVER);
+       drv->remove(dev);
+       return 0;
+}
+
 int register_virtio_driver(struct virtio_driver *driver)
 {
        driver->driver.bus = &virtio_bus;
        driver->driver.probe = virtio_dev_probe;
+       driver->driver.remove = virtio_dev_remove;
        return driver_register(&driver->driver);
 }
 EXPORT_SYMBOL_GPL(register_virtio_driver);
index 067c07be928ce3a27512731799b14081a8cbd272..e6c4390d8bd68ff5df14056e1decb13c2435f88d 100644 (file)
@@ -60,6 +60,20 @@ static int zorro_device_probe(struct device *dev)
 }
 
 
+static int zorro_device_remove(struct device *dev)
+{
+       struct zorro_dev *z = to_zorro_dev(dev);
+       struct zorro_driver *drv = to_zorro_driver(dev->driver);
+
+       if (drv) {
+               if (drv->remove)
+                       drv->remove(z);
+               z->driver = NULL;
+       }
+       return 0;
+}
+
+
     /**
      *  zorro_register_driver - register a new Zorro driver
      *  @drv: the driver structure to register
@@ -128,6 +142,7 @@ struct bus_type zorro_bus_type = {
        .name   = "zorro",
        .match  = zorro_bus_match,
        .probe  = zorro_device_probe,
+       .remove = zorro_device_remove,
 };
 
 
index 429a002285075c7556b30f1364a3d091a3052c57..635f3e286ad83a01a062d5bad763d6be54101b93 100644 (file)
@@ -459,6 +459,15 @@ config OCFS2_DEBUG_MASKLOG
          This option will enlarge your kernel, but it allows debugging of
          ocfs2 filesystem issues.
 
+config OCFS2_DEBUG_FS
+       bool "OCFS2 expensive checks"
+       depends on OCFS2_FS
+       default n
+       help
+         This option will enable expensive consistency checks. Enable
+         this option for debugging only as it is likely to decrease
+         performance of the filesystem.
+
 config MINIX_FS
        tristate "Minix fs support"
        help
index f12db415c0f6aa7b2776bdbcec1279a35c17da7f..9dec7d2d546e0e12e200898993f1b272111f5cee 100644 (file)
--- a/fs/aio.c
+++ b/fs/aio.c
@@ -1161,7 +1161,12 @@ retry:
                        ret = 0;
                        if (to.timed_out)       /* Only check after read evt */
                                break;
-                       io_schedule();
+                       /* Try to only show up in io wait if there are ops
+                        *  in flight */
+                       if (ctx->reqs_active)
+                               io_schedule();
+                       else
+                               schedule();
                        if (signal_pending(tsk)) {
                                ret = -EINTR;
                                break;
index 294c41baef6ed35cb65118867f965ebf522b36ec..a64a71d444f50f5d2e0731f375c9994551780743 100644 (file)
@@ -178,7 +178,8 @@ static void bfs_delete_inode(struct inode *inode)
        brelse(bh);
 
         if (bi->i_dsk_ino) {
-               info->si_freeb += BFS_FILEBLOCKS(bi);
+               if (bi->i_sblock)
+                       info->si_freeb += bi->i_eblock + 1 - bi->i_sblock;
                info->si_freei++;
                clear_bit(ino, info->si_imap);
                dump_imap("delete_inode", s);
index 64dd22239b21b4a7181b6c719ae091b76fc7b30d..a609599287aadbeea6c7964b813a407078d93f12 100644 (file)
@@ -1,6 +1,9 @@
 Version 1.52
 ------------
 Fix oops on second mount to server when null auth is used.
+Enable experimental Kerberos support.  Return writebehind errors on flush
+and sync so that events like out of disk space get reported properly on
+cached files.
 
 Version 1.51
 ------------
index b806b11b5560e912f67fca11219381328744dd34..bf11329ac784a8757b31b92d19f66429c3967d27 100644 (file)
@@ -225,12 +225,9 @@ If no password is provided, mount.cifs will prompt for password entry
 
 Restrictions
 ============
-Servers must support the NTLM SMB dialect (which is the most recent, supported 
-by Samba and Windows NT version 4, 2000 and XP and many other SMB/CIFS servers) 
 Servers must support either "pure-TCP" (port 445 TCP/IP CIFS connections) or RFC 
-1001/1002 support for "Netbios-Over-TCP/IP." Neither of these is likely to be a 
-problem as most servers support this.  IPv6 support is planned for the future,
-and is almost complete.
+1001/1002 support for "Netbios-Over-TCP/IP." This is not likely to be a 
+problem as most servers support this.
 
 Valid filenames differ between Windows and Linux.  Windows typically restricts
 filenames which contain certain reserved characters (e.g.the character : 
@@ -458,6 +455,8 @@ A partial list of the supported mount options follows:
                byte range locks).
  remount        remount the share (often used to change from ro to rw mounts
                or vice versa)
+ cifsacl        Report mode bits (e.g. on stat) based on the Windows ACL for
+               the file. (EXPERIMENTAL)
  servern        Specify the server 's netbios name (RFC1001 name) to use
                when attempting to setup a session to the server.  This is
                This is needed for mounting to some older servers (such
@@ -584,8 +583,8 @@ Experimental            When set to 1 used to enable certain experimental
                        performance enhancement was disabled when
                        signing turned on in case buffer was modified
                        just before it was sent, also this flag will
-                       be used to use the new experimental sessionsetup
-                       code).
+                       be used to use the new experimental directory change 
+                       notification code).
 
 These experimental features and tracing can be enabled by changing flags in 
 /proc/fs/cifs (after the cifs module has been installed or built into the 
@@ -608,7 +607,8 @@ the start of smb requests and responses can be enabled via:
 Two other experimental features are under development. To test these
 requires enabling CONFIG_CIFS_EXPERIMENTAL
 
-       ipv6 enablement
+       cifsacl support needed to retrieve approximated mode bits based on
+               the contents on the CIFS ACL.
 
        DNOTIFY fcntl: needed for support of directory change 
                            notification and perhaps later for file leases)
@@ -625,10 +625,7 @@ that they represent all for that share, not just those for which the server
 returned success.
        
 Also note that "cat /proc/fs/cifs/DebugData" will display information about 
-the active sessions and the shares that are mounted.  Note: NTLMv2 enablement 
-will not work since its implementation is not quite complete yet. Do not alter
-the ExtendedSecurity configuration value unless you are doing specific testing.
-Enabling extended security works to Windows 2000 Workstations and XP but not to 
-Windows 2000 server or Samba since it does not usually send "raw NTLMSSP" 
-(instead it sends NTLMSSP encapsulated in SPNEGO/GSSAPI, which support is not 
-complete in the CIFS VFS yet).  
+the active sessions and the shares that are mounted.
+Enabling Kerberos (extended security) works when CONFIG_CIFS_EXPERIMENTAL is enabled
+but requires a user space helper (from the Samba project). NTLM and NTLMv2 and
+LANMAN support do not require this helpr.
index 29d4b2715254847cdf702283b96681e50ce1ed4a..a8852c20072817c6ac3198444a88644951dd99f9 100644 (file)
@@ -16,7 +16,7 @@ SecurityDescriptors
 c) Better pam/winbind integration (e.g. to handle uid mapping
 better)
 
-d) Kerberos/SPNEGO session setup support - (started)
+d) Verify that Kerberos signing works
 
 e) Cleanup now unneeded SessSetup code in
 fs/cifs/connect.c and add back in NTLMSSP code if any servers
index ad54a3a6e43490eff48f2e579a2ce60f687fbb01..1529d2b12e9ce04c02e3821b9d9eb1797974159a 100644 (file)
@@ -66,20 +66,26 @@ struct key_type cifs_spnego_key_type = {
        .describe       = user_describe,
 };
 
+#define MAX_VER_STR_LEN   9 /* length of longest version string e.g.
+                               strlen(";ver=0xFF") */
+#define MAX_MECH_STR_LEN 13 /* length of longest security mechanism name, eg
+                              in future could have strlen(";sec=ntlmsspi") */
+#define MAX_IPV6_ADDR_LEN 42 /* eg FEDC:BA98:7654:3210:FEDC:BA98:7654:3210/60 */
 /* get a key struct with a SPNEGO security blob, suitable for session setup */
 struct key *
-cifs_get_spnego_key(struct cifsSesInfo *sesInfo, const char *hostname)
+cifs_get_spnego_key(struct cifsSesInfo *sesInfo)
 {
        struct TCP_Server_Info *server = sesInfo->server;
        char *description, *dp;
        size_t desc_len;
        struct key *spnego_key;
+       const char *hostname = server->hostname;
 
-
-       /* version + ;ip{4|6}= + address + ;host=hostname +
-               ;sec= + ;uid= + NULL */
-       desc_len = 4 + 5 + 32 + 1 + 5 + strlen(hostname) +
-                  strlen(";sec=krb5") + 7 + sizeof(uid_t)*2 + 1;
+       /* BB: come up with better scheme for determining length */
+       /* length of fields (with semicolons): ver=0xyz ipv4= ipaddress host=
+          hostname sec=mechanism uid=0x uid */
+       desc_len = MAX_VER_STR_LEN + 5 + MAX_IPV6_ADDR_LEN + 1 + 6 +
+                 strlen(hostname) + MAX_MECH_STR_LEN + 8 + (sizeof(uid_t) * 2);
        spnego_key = ERR_PTR(-ENOMEM);
        description = kzalloc(desc_len, GFP_KERNEL);
        if (description == NULL)
@@ -88,7 +94,7 @@ cifs_get_spnego_key(struct cifsSesInfo *sesInfo, const char *hostname)
        dp = description;
        /* start with version and hostname portion of UNC string */
        spnego_key = ERR_PTR(-EINVAL);
-       sprintf(dp, "0x%2.2x;host=%s;", CIFS_SPNEGO_UPCALL_VERSION,
+       sprintf(dp, "ver=0x%x;host=%s;", CIFS_SPNEGO_UPCALL_VERSION,
                hostname);
        dp = description + strlen(description);
 
index f443f3b35134deacaa5c894fe98d0ec5f8d5636f..05a34b17a1ab4411d87875525adfe772e6edf26d 100644 (file)
@@ -41,6 +41,7 @@ struct cifs_spnego_msg {
 
 #ifdef __KERNEL__
 extern struct key_type cifs_spnego_key_type;
+extern struct key *cifs_get_spnego_key(struct cifsSesInfo *sesInfo);
 #endif /* KERNEL */
 
 #endif /* _CIFS_SPNEGO_H */
index dabbce00712b0f23e02e5bfe46e5696850791e1f..c312adcba4fc1b0530cba4e869beeca9763c13d3 100644 (file)
@@ -134,9 +134,10 @@ int compare_sids(const struct cifs_sid *ctsid, const struct cifs_sid *cwsid)
    pmode is the existing mode (we only want to overwrite part of this
    bits to set can be: S_IRWXU, S_IRWXG or S_IRWXO ie 00700 or 00070 or 00007
 */
-static void access_flags_to_mode(__u32 ace_flags, int type, umode_t *pmode,
+static void access_flags_to_mode(__le32 ace_flags, int type, umode_t *pmode,
                                 umode_t *pbits_to_set)
 {
+       __u32 flags = le32_to_cpu(ace_flags);
        /* the order of ACEs is important.  The canonical order is to begin with
           DENY entries followed by ALLOW, otherwise an allow entry could be
           encountered first, making the subsequent deny entry like "dead code"
@@ -146,17 +147,17 @@ static void access_flags_to_mode(__u32 ace_flags, int type, umode_t *pmode,
        /* For deny ACEs we change the mask so that subsequent allow access
           control entries do not turn on the bits we are denying */
        if (type == ACCESS_DENIED) {
-               if (ace_flags & GENERIC_ALL) {
+               if (flags & GENERIC_ALL) {
                        *pbits_to_set &= ~S_IRWXUGO;
                }
-               if ((ace_flags & GENERIC_WRITE) ||
-                       ((ace_flags & FILE_WRITE_RIGHTS) == FILE_WRITE_RIGHTS))
+               if ((flags & GENERIC_WRITE) ||
+                       ((flags & FILE_WRITE_RIGHTS) == FILE_WRITE_RIGHTS))
                        *pbits_to_set &= ~S_IWUGO;
-               if ((ace_flags & GENERIC_READ) ||
-                       ((ace_flags & FILE_READ_RIGHTS) == FILE_READ_RIGHTS))
+               if ((flags & GENERIC_READ) ||
+                       ((flags & FILE_READ_RIGHTS) == FILE_READ_RIGHTS))
                        *pbits_to_set &= ~S_IRUGO;
-               if ((ace_flags & GENERIC_EXECUTE) ||
-                       ((ace_flags & FILE_EXEC_RIGHTS) == FILE_EXEC_RIGHTS))
+               if ((flags & GENERIC_EXECUTE) ||
+                       ((flags & FILE_EXEC_RIGHTS) == FILE_EXEC_RIGHTS))
                        *pbits_to_set &= ~S_IXUGO;
                return;
        } else if (type != ACCESS_ALLOWED) {
@@ -165,25 +166,25 @@ static void access_flags_to_mode(__u32 ace_flags, int type, umode_t *pmode,
        }
        /* else ACCESS_ALLOWED type */
 
-       if (ace_flags & GENERIC_ALL) {
+       if (flags & GENERIC_ALL) {
                *pmode |= (S_IRWXUGO & (*pbits_to_set));
 #ifdef CONFIG_CIFS_DEBUG2
                cFYI(1, ("all perms"));
 #endif
                return;
        }
-       if ((ace_flags & GENERIC_WRITE) ||
-                       ((ace_flags & FILE_WRITE_RIGHTS) == FILE_WRITE_RIGHTS))
+       if ((flags & GENERIC_WRITE) ||
+                       ((flags & FILE_WRITE_RIGHTS) == FILE_WRITE_RIGHTS))
                *pmode |= (S_IWUGO & (*pbits_to_set));
-       if ((ace_flags & GENERIC_READ) ||
-                       ((ace_flags & FILE_READ_RIGHTS) == FILE_READ_RIGHTS))
+       if ((flags & GENERIC_READ) ||
+                       ((flags & FILE_READ_RIGHTS) == FILE_READ_RIGHTS))
                *pmode |= (S_IRUGO & (*pbits_to_set));
-       if ((ace_flags & GENERIC_EXECUTE) ||
-                       ((ace_flags & FILE_EXEC_RIGHTS) == FILE_EXEC_RIGHTS))
+       if ((flags & GENERIC_EXECUTE) ||
+                       ((flags & FILE_EXEC_RIGHTS) == FILE_EXEC_RIGHTS))
                *pmode |= (S_IXUGO & (*pbits_to_set));
 
 #ifdef CONFIG_CIFS_DEBUG2
-       cFYI(1, ("access flags 0x%x mode now 0x%x", ace_flags, *pmode));
+       cFYI(1, ("access flags 0x%x mode now 0x%x", flags, *pmode));
 #endif
        return;
 }
@@ -269,6 +270,13 @@ static void parse_dacl(struct cifs_acl *pdacl, char *end_of_acl,
 
        /* BB need to add parm so we can store the SID BB */
 
+       if (!pdacl) {
+               /* no DACL in the security descriptor, set
+                  all the permissions for user/group/other */
+               inode->i_mode |= S_IRWXUGO;
+               return;
+       }
+
        /* validate that we do not go past end of acl */
        if (end_of_acl < (char *)pdacl + le16_to_cpu(pdacl->size)) {
                cERROR(1, ("ACL too small to parse DACL"));
@@ -286,12 +294,6 @@ static void parse_dacl(struct cifs_acl *pdacl, char *end_of_acl,
           user/group/other have no permissions */
        inode->i_mode &= ~(S_IRWXUGO);
 
-       if (!pdacl) {
-               /* no DACL in the security descriptor, set
-                  all the permissions for user/group/other */
-               inode->i_mode |= S_IRWXUGO;
-               return;
-       }
        acl_base = (char *)pdacl;
        acl_size = sizeof(struct cifs_acl);
 
index 416dc9fe8961ac4e2e0c4eaebbaec7d1e186a739..093beaa3900de3321a2062143daeb04f7e6b17b2 100644 (file)
@@ -266,6 +266,7 @@ cifs_alloc_inode(struct super_block *sb)
        cifs_inode->cifsAttrs = 0x20;   /* default */
        atomic_set(&cifs_inode->inUse, 0);
        cifs_inode->time = 0;
+       cifs_inode->write_behind_rc = 0;
        /* Until the file is open and we have gotten oplock
        info back from the server, can not assume caching of
        file data or metadata */
@@ -852,7 +853,7 @@ static int cifs_oplock_thread(void *dummyarg)
        struct cifsTconInfo *pTcon;
        struct inode *inode;
        __u16  netfid;
-       int rc;
+       int rc, waitrc = 0;
 
        set_freezable();
        do {
@@ -884,9 +885,11 @@ static int cifs_oplock_thread(void *dummyarg)
                                           filemap_fdatawrite(inode->i_mapping);
                                        if (CIFS_I(inode)->clientCanCacheRead
                                                                         == 0) {
-                                               filemap_fdatawait(inode->i_mapping);
+                                               waitrc = filemap_fdatawait(inode->i_mapping);
                                                invalidate_remote_inode(inode);
                                        }
+                                       if (rc == 0)
+                                               rc = waitrc;
                                } else
                                        rc = 0;
                                /* mutex_unlock(&inode->i_mutex);*/
index 87f51f23276f42f23d054679042fb92b1ace313f..1fde2197ad764172622356d0e257b669ea7912cd 100644 (file)
@@ -110,6 +110,7 @@ struct mac_key {
        unsigned int len;
        union {
                char ntlm[CIFS_SESS_KEY_SIZE + 16];
+               char krb5[CIFS_SESS_KEY_SIZE + 16]; /* BB: length correct? */
                struct {
                        char key[16];
                        struct ntlmv2_resp resp;
@@ -139,6 +140,7 @@ struct TCP_Server_Info {
        /* 15 character server name + 0x20 16th byte indicating type = srv */
        char server_RFC1001_name[SERVER_NAME_LEN_WITH_NULL];
        char unicode_server_Name[SERVER_NAME_LEN_WITH_NULL * 2];
+       char *hostname; /* hostname portion of UNC string */
        struct socket *ssocket;
        union {
                struct sockaddr_in sockAddr;
@@ -471,6 +473,17 @@ struct dir_notify_req {
 #define   CIFS_LARGE_BUFFER     2
 #define   CIFS_IOVEC            4    /* array of response buffers */
 
+/* Type of Request to SendReceive2 */
+#define   CIFS_STD_OP          0    /* normal request timeout */
+#define   CIFS_LONG_OP          1    /* long op (up to 45 sec, oplock time) */
+#define   CIFS_VLONG_OP         2    /* sloow op - can take up to 180 seconds */
+#define   CIFS_BLOCKING_OP      4    /* operation can block */
+#define   CIFS_ASYNC_OP         8    /* do not wait for response */
+#define   CIFS_TIMEOUT_MASK 0x00F    /* only one of 5 above set in req */
+#define   CIFS_LOG_ERROR    0x010    /* log NT STATUS if non-zero */
+#define   CIFS_LARGE_BUF_OP 0x020    /* large request buffer */
+#define   CIFS_NO_RESP      0x040    /* no response buffer required */
+
 /* Security Flags: indicate type of session setup needed */
 #define   CIFSSEC_MAY_SIGN     0x00001
 #define   CIFSSEC_MAY_NTLM     0x00002
index dd1d7c200ee63a30e6496d1bbe0f5e153391346e..8350eec49663bef6f139c1af0ddd1cee5fabbbfe 100644 (file)
@@ -48,10 +48,11 @@ extern int SendReceive(const unsigned int /* xid */ , struct cifsSesInfo *,
                        struct smb_hdr * /* input */ ,
                        struct smb_hdr * /* out */ ,
                        int * /* bytes returned */ , const int long_op);
+extern int SendReceiveNoRsp(const unsigned int xid, struct cifsSesInfo *ses,
+                       struct smb_hdr *in_buf, int flags);
 extern int SendReceive2(const unsigned int /* xid */ , struct cifsSesInfo *,
                        struct kvec *, int /* nvec to send */,
-                       int * /* type of buf returned */ , const int long_op,
-                       const int logError /* whether to log status code*/ );
+                       int * /* type of buf returned */ , const int flags);
 extern int SendReceiveBlockingLock(const unsigned int /* xid */ ,
                                        struct cifsTconInfo *,
                                struct smb_hdr * /* input */ ,
@@ -76,8 +77,6 @@ extern void header_assemble(struct smb_hdr *, char /* command */ ,
 extern int small_smb_init_no_tc(const int smb_cmd, const int wct,
                                struct cifsSesInfo *ses,
                                void **request_buf);
-extern struct key *cifs_get_spnego_key(struct cifsSesInfo *sesInfo,
-                                       const char *hostname);
 extern int CIFS_SessSetup(unsigned int xid, struct cifsSesInfo *ses,
                             const int stage,
                             const struct nls_table *nls_cp);
@@ -248,15 +247,15 @@ extern int CIFSSMBQueryReparseLinkInfo(const int xid,
 extern int CIFSSMBOpen(const int xid, struct cifsTconInfo *tcon,
                        const char *fileName, const int disposition,
                        const int access_flags, const int omode,
-                       __u16 * netfid, int *pOplock, FILE_ALL_INFO *,
+                       __u16 *netfid, int *pOplock, FILE_ALL_INFO *,
                        const struct nls_table *nls_codepage, int remap);
 extern int SMBLegacyOpen(const int xid, struct cifsTconInfo *tcon,
                        const char *fileName, const int disposition,
                        const int access_flags, const int omode,
-                       __u16 * netfid, int *pOplock, FILE_ALL_INFO *,
+                       __u16 *netfid, int *pOplock, FILE_ALL_INFO *,
                        const struct nls_table *nls_codepage, int remap);
 extern int CIFSPOSIXCreate(const int xid, struct cifsTconInfo *tcon,
-                       u32 posix_flags, __u64 mode, __u16 * netfid,
+                       u32 posix_flags, __u64 mode, __u16 *netfid,
                        FILE_UNIX_BASIC_INFO *pRetData,
                        __u32 *pOplock, const char *name,
                        const struct nls_table *nls_codepage, int remap);
@@ -277,7 +276,7 @@ extern int CIFSSMBWrite2(const int xid, struct cifsTconInfo *tcon,
                        const __u64 offset, unsigned int *nbytes,
                        struct kvec *iov, const int nvec, const int long_op);
 extern int CIFSGetSrvInodeNumber(const int xid, struct cifsTconInfo *tcon,
-                       const unsigned char *searchName, __u64 * inode_number,
+                       const unsigned char *searchName, __u64 *inode_number,
                        const struct nls_table *nls_codepage,
                        int remap_special_chars);
 extern int cifs_convertUCSpath(char *target, const __le16 *source, int maxlen,
@@ -352,5 +351,5 @@ extern int CIFSSMBSetPosixACL(const int xid, struct cifsTconInfo *tcon,
                const char *local_acl, const int buflen, const int acl_type,
                const struct nls_table *nls_codepage, int remap_special_chars);
 extern int CIFSGetExtAttr(const int xid, struct cifsTconInfo *tcon,
-                       const int netfid, __u64 * pExtAttrBits, __u64 *pMask);
+                       const int netfid, __u64 *pExtAttrBits, __u64 *pMask);
 #endif                 /* _CIFSPROTO_H */
index 59d7b7c037adafa4eac1357c62cc87eff1c1bcc7..9e8a6bef029a8bdd5a607d744205200bb236866f 100644 (file)
@@ -698,9 +698,7 @@ int
 CIFSSMBTDis(const int xid, struct cifsTconInfo *tcon)
 {
        struct smb_hdr *smb_buffer;
-       struct smb_hdr *smb_buffer_response; /* BB removeme BB */
        int rc = 0;
-       int length;
 
        cFYI(1, ("In tree disconnect"));
        /*
@@ -737,16 +735,12 @@ CIFSSMBTDis(const int xid, struct cifsTconInfo *tcon)
        if (rc) {
                up(&tcon->tconSem);
                return rc;
-       } else {
-               smb_buffer_response = smb_buffer; /* BB removeme BB */
        }
-       rc = SendReceive(xid, tcon->ses, smb_buffer, smb_buffer_response,
-                        &length, 0);
+
+       rc = SendReceiveNoRsp(xid, tcon->ses, smb_buffer, 0);
        if (rc)
                cFYI(1, ("Tree disconnect failed %d", rc));
 
-       if (smb_buffer)
-               cifs_small_buf_release(smb_buffer);
        up(&tcon->tconSem);
 
        /* No need to return error on this operation if tid invalidated and
@@ -760,10 +754,8 @@ CIFSSMBTDis(const int xid, struct cifsTconInfo *tcon)
 int
 CIFSSMBLogoff(const int xid, struct cifsSesInfo *ses)
 {
-       struct smb_hdr *smb_buffer_response;
        LOGOFF_ANDX_REQ *pSMB;
        int rc = 0;
-       int length;
 
        cFYI(1, ("In SMBLogoff for session disconnect"));
        if (ses)
@@ -782,8 +774,6 @@ CIFSSMBLogoff(const int xid, struct cifsSesInfo *ses)
                return rc;
        }
 
-       smb_buffer_response = (struct smb_hdr *)pSMB; /* BB removeme BB */
-
        if (ses->server) {
                pSMB->hdr.Mid = GetNextMid(ses->server);
 
@@ -795,8 +785,7 @@ CIFSSMBLogoff(const int xid, struct cifsSesInfo *ses)
        pSMB->hdr.Uid = ses->Suid;
 
        pSMB->AndXCommand = 0xFF;
-       rc = SendReceive(xid, ses, (struct smb_hdr *) pSMB,
-                        smb_buffer_response, &length, 0);
+       rc = SendReceiveNoRsp(xid, ses, (struct smb_hdr *) pSMB, 0);
        if (ses->server) {
                atomic_dec(&ses->server->socketUseCount);
                if (atomic_read(&ses->server->socketUseCount) == 0) {
@@ -807,7 +796,6 @@ CIFSSMBLogoff(const int xid, struct cifsSesInfo *ses)
                }
        }
        up(&ses->sesSem);
-       cifs_small_buf_release(pSMB);
 
        /* if session dead then we do not need to do ulogoff,
                since server closed smb session, no sense reporting
@@ -1255,7 +1243,7 @@ OldOpenRetry:
        pSMB->ByteCount = cpu_to_le16(count);
        /* long_op set to 1 to allow for oplock break timeouts */
        rc = SendReceive(xid, tcon->ses, (struct smb_hdr *) pSMB,
-                        (struct smb_hdr *) pSMBr, &bytes_returned, 1);
+                       (struct smb_hdr *)pSMBr, &bytes_returned, CIFS_LONG_OP);
        cifs_stats_inc(&tcon->num_opens);
        if (rc) {
                cFYI(1, ("Error in Open = %d", rc));
@@ -1368,7 +1356,7 @@ openRetry:
        pSMB->ByteCount = cpu_to_le16(count);
        /* long_op set to 1 to allow for oplock break timeouts */
        rc = SendReceive(xid, tcon->ses, (struct smb_hdr *) pSMB,
-                        (struct smb_hdr *) pSMBr, &bytes_returned, 1);
+                       (struct smb_hdr *)pSMBr, &bytes_returned, CIFS_LONG_OP);
        cifs_stats_inc(&tcon->num_opens);
        if (rc) {
                cFYI(1, ("Error in Open = %d", rc));
@@ -1446,7 +1434,7 @@ CIFSSMBRead(const int xid, struct cifsTconInfo *tcon, const int netfid,
        iov[0].iov_base = (char *)pSMB;
        iov[0].iov_len = pSMB->hdr.smb_buf_length + 4;
        rc = SendReceive2(xid, tcon->ses, iov, 1 /* num iovecs */,
-                        &resp_buf_type, 0 /* not long op */, 1 /* log err */ );
+                        &resp_buf_type, CIFS_STD_OP | CIFS_LOG_ERROR);
        cifs_stats_inc(&tcon->num_reads);
        pSMBr = (READ_RSP *)iov[0].iov_base;
        if (rc) {
@@ -1665,7 +1653,7 @@ CIFSSMBWrite2(const int xid, struct cifsTconInfo *tcon,
 
 
        rc = SendReceive2(xid, tcon->ses, iov, n_vec + 1, &resp_buf_type,
-                         long_op, 0 /* do not log STATUS code */ );
+                         long_op);
        cifs_stats_inc(&tcon->num_writes);
        if (rc) {
                cFYI(1, ("Send error Write2 = %d", rc));
@@ -1707,7 +1695,7 @@ CIFSSMBLock(const int xid, struct cifsTconInfo *tcon,
        int timeout = 0;
        __u16 count;
 
-       cFYI(1, ("In CIFSSMBLock - timeout %d numLock %d", waitFlag, numLock));
+       cFYI(1, ("CIFSSMBLock timeout %d numLock %d", waitFlag, numLock));
        rc = small_smb_init(SMB_COM_LOCKING_ANDX, 8, tcon, (void **) &pSMB);
 
        if (rc)
@@ -1716,10 +1704,10 @@ CIFSSMBLock(const int xid, struct cifsTconInfo *tcon,
        pSMBr = (LOCK_RSP *)pSMB; /* BB removeme BB */
 
        if (lockType == LOCKING_ANDX_OPLOCK_RELEASE) {
-               timeout = -1; /* no response expected */
+               timeout = CIFS_ASYNC_OP; /* no response expected */
                pSMB->Timeout = 0;
        } else if (waitFlag == TRUE) {
-               timeout = 3;  /* blocking operation, no timeout */
+               timeout = CIFS_BLOCKING_OP; /* blocking operation, no timeout */
                pSMB->Timeout = cpu_to_le32(-1);/* blocking - do not time out */
        } else {
                pSMB->Timeout = 0;
@@ -1749,15 +1737,16 @@ CIFSSMBLock(const int xid, struct cifsTconInfo *tcon,
        if (waitFlag) {
                rc = SendReceiveBlockingLock(xid, tcon, (struct smb_hdr *) pSMB,
                        (struct smb_hdr *) pSMBr, &bytes_returned);
+               cifs_small_buf_release(pSMB);
        } else {
-               rc = SendReceive(xid, tcon->ses, (struct smb_hdr *) pSMB,
-                        (struct smb_hdr *) pSMBr, &bytes_returned, timeout);
+               rc = SendReceiveNoRsp(xid, tcon->ses, (struct smb_hdr *)pSMB,
+                                     timeout);
+               /* SMB buffer freed by function above */
        }
        cifs_stats_inc(&tcon->num_locks);
        if (rc) {
                cFYI(1, ("Send error in Lock = %d", rc));
        }
-       cifs_small_buf_release(pSMB);
 
        /* Note: On -EAGAIN error only caller can retry on handle based calls
        since file handle passed in no longer valid */
@@ -1776,7 +1765,9 @@ CIFSSMBPosixLock(const int xid, struct cifsTconInfo *tcon,
        int rc = 0;
        int timeout = 0;
        int bytes_returned = 0;
+       int resp_buf_type = 0;
        __u16 params, param_offset, offset, byte_count, count;
+       struct kvec iov[1];
 
        cFYI(1, ("Posix Lock"));
 
@@ -1818,7 +1809,7 @@ CIFSSMBPosixLock(const int xid, struct cifsTconInfo *tcon,
 
        parm_data->lock_type = cpu_to_le16(lock_type);
        if (waitFlag) {
-               timeout = 3;  /* blocking operation, no timeout */
+               timeout = CIFS_BLOCKING_OP; /* blocking operation, no timeout */
                parm_data->lock_flags = cpu_to_le16(1);
                pSMB->Timeout = cpu_to_le32(-1);
        } else
@@ -1838,8 +1829,13 @@ CIFSSMBPosixLock(const int xid, struct cifsTconInfo *tcon,
                rc = SendReceiveBlockingLock(xid, tcon, (struct smb_hdr *) pSMB,
                        (struct smb_hdr *) pSMBr, &bytes_returned);
        } else {
-               rc = SendReceive(xid, tcon->ses, (struct smb_hdr *) pSMB,
-                       (struct smb_hdr *) pSMBr, &bytes_returned, timeout);
+               iov[0].iov_base = (char *)pSMB;
+               iov[0].iov_len = pSMB->hdr.smb_buf_length + 4;
+               rc = SendReceive2(xid, tcon->ses, iov, 1 /* num iovecs */,
+                               &resp_buf_type, timeout);
+               pSMB = NULL; /* request buf already freed by SendReceive2. Do
+                               not try to free it twice below on exit */
+               pSMBr = (struct smb_com_transaction2_sfi_rsp *)iov[0].iov_base;
        }
 
        if (rc) {
@@ -1874,6 +1870,11 @@ plk_err_exit:
        if (pSMB)
                cifs_small_buf_release(pSMB);
 
+       if (resp_buf_type == CIFS_SMALL_BUFFER)
+               cifs_small_buf_release(iov[0].iov_base);
+       else if (resp_buf_type == CIFS_LARGE_BUFFER)
+               cifs_buf_release(iov[0].iov_base);
+
        /* Note: On -EAGAIN error only caller can retry on handle based calls
           since file handle passed in no longer valid */
 
@@ -1886,8 +1887,6 @@ CIFSSMBClose(const int xid, struct cifsTconInfo *tcon, int smb_file_id)
 {
        int rc = 0;
        CLOSE_REQ *pSMB = NULL;
-       CLOSE_RSP *pSMBr = NULL;
-       int bytes_returned;
        cFYI(1, ("In CIFSSMBClose"));
 
 /* do not retry on dead session on close */
@@ -1897,13 +1896,10 @@ CIFSSMBClose(const int xid, struct cifsTconInfo *tcon, int smb_file_id)
        if (rc)
                return rc;
 
-       pSMBr = (CLOSE_RSP *)pSMB; /* BB removeme BB */
-
        pSMB->FileID = (__u16) smb_file_id;
        pSMB->LastWriteTime = 0xFFFFFFFF;
        pSMB->ByteCount = 0;
-       rc = SendReceive(xid, tcon->ses, (struct smb_hdr *) pSMB,
-                        (struct smb_hdr *) pSMBr, &bytes_returned, 0);
+       rc = SendReceiveNoRsp(xid, tcon->ses, (struct smb_hdr *) pSMB, 0);
        cifs_stats_inc(&tcon->num_closes);
        if (rc) {
                if (rc != -EINTR) {
@@ -1912,8 +1908,6 @@ CIFSSMBClose(const int xid, struct cifsTconInfo *tcon, int smb_file_id)
                }
        }
 
-       cifs_small_buf_release(pSMB);
-
        /* Since session is dead, file will be closed on server already */
        if (rc == -EAGAIN)
                rc = 0;
@@ -3102,7 +3096,7 @@ CIFSSMBGetCIFSACL(const int xid, struct cifsTconInfo *tcon, __u16 fid,
        iov[0].iov_len = pSMB->hdr.smb_buf_length + 4;
 
        rc = SendReceive2(xid, tcon->ses, iov, 1 /* num iovec */, &buf_type,
-                        0 /* not long op */, 0 /* do not log STATUS codes */ );
+                        CIFS_STD_OP);
        cifs_stats_inc(&tcon->num_acl_get);
        if (rc) {
                cFYI(1, ("Send error in QuerySecDesc = %d", rc));
@@ -3763,8 +3757,6 @@ CIFSFindClose(const int xid, struct cifsTconInfo *tcon,
 {
        int rc = 0;
        FINDCLOSE_REQ *pSMB = NULL;
-       CLOSE_RSP *pSMBr = NULL; /* BB removeme BB */
-       int bytes_returned;
 
        cFYI(1, ("In CIFSSMBFindClose"));
        rc = small_smb_init(SMB_COM_FIND_CLOSE2, 1, tcon, (void **)&pSMB);
@@ -3776,16 +3768,13 @@ CIFSFindClose(const int xid, struct cifsTconInfo *tcon,
        if (rc)
                return rc;
 
-       pSMBr = (CLOSE_RSP *)pSMB;  /* BB removeme BB */
        pSMB->FileID = searchHandle;
        pSMB->ByteCount = 0;
-       rc = SendReceive(xid, tcon->ses, (struct smb_hdr *) pSMB,
-                        (struct smb_hdr *) pSMBr, &bytes_returned, 0);
+       rc = SendReceiveNoRsp(xid, tcon->ses, (struct smb_hdr *) pSMB, 0);
        if (rc) {
                cERROR(1, ("Send error in FindClose = %d", rc));
        }
        cifs_stats_inc(&tcon->num_fclose);
-       cifs_small_buf_release(pSMB);
 
        /* Since session is dead, search handle closed on server already */
        if (rc == -EAGAIN)
@@ -4707,11 +4696,9 @@ CIFSSMBSetFileSize(const int xid, struct cifsTconInfo *tcon, __u64 size,
                   __u16 fid, __u32 pid_of_opener, int SetAllocation)
 {
        struct smb_com_transaction2_sfi_req *pSMB  = NULL;
-       struct smb_com_transaction2_sfi_rsp *pSMBr = NULL;
        char *data_offset;
        struct file_end_of_file_info *parm_data;
        int rc = 0;
-       int bytes_returned = 0;
        __u16 params, param_offset, offset, byte_count, count;
 
        cFYI(1, ("SetFileSize (via SetFileInfo) %lld",
@@ -4721,8 +4708,6 @@ CIFSSMBSetFileSize(const int xid, struct cifsTconInfo *tcon, __u64 size,
        if (rc)
                return rc;
 
-       pSMBr = (struct smb_com_transaction2_sfi_rsp *)pSMB;
-
        pSMB->hdr.Pid = cpu_to_le16((__u16)pid_of_opener);
        pSMB->hdr.PidHigh = cpu_to_le16((__u16)(pid_of_opener >> 16));
 
@@ -4773,17 +4758,13 @@ CIFSSMBSetFileSize(const int xid, struct cifsTconInfo *tcon, __u64 size,
        pSMB->Reserved4 = 0;
        pSMB->hdr.smb_buf_length += byte_count;
        pSMB->ByteCount = cpu_to_le16(byte_count);
-       rc = SendReceive(xid, tcon->ses, (struct smb_hdr *) pSMB,
-                        (struct smb_hdr *) pSMBr, &bytes_returned, 0);
+       rc = SendReceiveNoRsp(xid, tcon->ses, (struct smb_hdr *) pSMB, 0);
        if (rc) {
                cFYI(1,
                     ("Send error in SetFileInfo (SetFileSize) = %d",
                      rc));
        }
 
-       if (pSMB)
-               cifs_small_buf_release(pSMB);
-
        /* Note: On -EAGAIN error only caller can retry on handle based calls
                since file handle passed in no longer valid */
 
@@ -4801,10 +4782,8 @@ CIFSSMBSetFileTimes(const int xid, struct cifsTconInfo *tcon,
                    const FILE_BASIC_INFO *data, __u16 fid)
 {
        struct smb_com_transaction2_sfi_req *pSMB  = NULL;
-       struct smb_com_transaction2_sfi_rsp *pSMBr = NULL;
        char *data_offset;
        int rc = 0;
-       int bytes_returned = 0;
        __u16 params, param_offset, offset, byte_count, count;
 
        cFYI(1, ("Set Times (via SetFileInfo)"));
@@ -4813,8 +4792,6 @@ CIFSSMBSetFileTimes(const int xid, struct cifsTconInfo *tcon,
        if (rc)
                return rc;
 
-       pSMBr = (struct smb_com_transaction2_sfi_rsp *)pSMB;
-
        /* At this point there is no need to override the current pid
        with the pid of the opener, but that could change if we someday
        use an existing handle (rather than opening one on the fly) */
@@ -4854,14 +4831,11 @@ CIFSSMBSetFileTimes(const int xid, struct cifsTconInfo *tcon,
        pSMB->hdr.smb_buf_length += byte_count;
        pSMB->ByteCount = cpu_to_le16(byte_count);
        memcpy(data_offset, data, sizeof(FILE_BASIC_INFO));
-       rc = SendReceive(xid, tcon->ses, (struct smb_hdr *) pSMB,
-                        (struct smb_hdr *) pSMBr, &bytes_returned, 0);
+       rc = SendReceiveNoRsp(xid, tcon->ses, (struct smb_hdr *) pSMB, 0);
        if (rc) {
                cFYI(1, ("Send error in Set Time (SetFileInfo) = %d", rc));
        }
 
-       cifs_small_buf_release(pSMB);
-
        /* Note: On -EAGAIN error only caller can retry on handle based calls
                since file handle passed in no longer valid */
 
@@ -5152,7 +5126,8 @@ int CIFSSMBNotify(const int xid, struct cifsTconInfo *tcon,
        pSMB->ByteCount = 0;
 
        rc = SendReceive(xid, tcon->ses, (struct smb_hdr *) pSMB,
-                       (struct smb_hdr *) pSMBr, &bytes_returned, -1);
+                        (struct smb_hdr *)pSMBr, &bytes_returned,
+                        CIFS_ASYNC_OP);
        if (rc) {
                cFYI(1, ("Error in Notify = %d", rc));
        } else {
index c52a76ff4bb9db8c2625ed6213dc0a8b026664d6..fd9147cdb5a98d76b8a354b3b2a8efd518aeb565 100644 (file)
@@ -438,9 +438,9 @@ incomplete_rcv:
                        csocket = server->ssocket;
                        wake_up(&server->response_q);
                        continue;
-               } else if (length < 4) {
-                       cFYI(1, ("less than four bytes received (%d bytes)",
-                             length));
+               } else if (length < pdu_length) {
+                       cFYI(1, ("requested %d bytes but only got %d bytes",
+                                 pdu_length, length));
                        pdu_length -= length;
                        msleep(1);
                        goto incomplete_rcv;
@@ -752,6 +752,7 @@ multi_t2_fnd:
        }
        write_unlock(&GlobalSMBSeslock);
 
+       kfree(server->hostname);
        kfree(server);
        if (length  > 0)
                mempool_resize(cifs_req_poolp, length + cifs_min_rcv,
@@ -760,6 +761,34 @@ multi_t2_fnd:
        return 0;
 }
 
+/* extract the host portion of the UNC string */
+static char *
+extract_hostname(const char *unc)
+{
+       const char *src;
+       char *dst, *delim;
+       unsigned int len;
+
+       /* skip double chars at beginning of string */
+       /* BB: check validity of these bytes? */
+       src = unc + 2;
+
+       /* delimiter between hostname and sharename is always '\\' now */
+       delim = strchr(src, '\\');
+       if (!delim)
+               return ERR_PTR(-EINVAL);
+
+       len = delim - src;
+       dst = kmalloc((len + 1), GFP_KERNEL);
+       if (dst == NULL)
+               return ERR_PTR(-ENOMEM);
+
+       memcpy(dst, src, len);
+       dst[len] = '\0';
+
+       return dst;
+}
+
 static int
 cifs_parse_mount_options(char *options, const char *devname,
                         struct smb_vol *vol)
@@ -1781,11 +1810,8 @@ cifs_mount(struct super_block *sb, struct cifs_sb_info *cifs_sb,
 
        memset(&volume_info, 0, sizeof(struct smb_vol));
        if (cifs_parse_mount_options(mount_data, devname, &volume_info)) {
-               kfree(volume_info.UNC);
-               kfree(volume_info.password);
-               kfree(volume_info.prepath);
-               FreeXid(xid);
-               return -EINVAL;
+               rc = -EINVAL;
+               goto out;
        }
 
        if (volume_info.nullauth) {
@@ -1798,11 +1824,8 @@ cifs_mount(struct super_block *sb, struct cifs_sb_info *cifs_sb,
                cifserror("No username specified");
        /* In userspace mount helper we can get user name from alternate
           locations such as env variables and files on disk */
-               kfree(volume_info.UNC);
-               kfree(volume_info.password);
-               kfree(volume_info.prepath);
-               FreeXid(xid);
-               return -EINVAL;
+               rc = -EINVAL;
+               goto out;
        }
 
        if (volume_info.UNCip && volume_info.UNC) {
@@ -1821,11 +1844,8 @@ cifs_mount(struct super_block *sb, struct cifs_sb_info *cifs_sb,
 
                if (rc <= 0) {
                        /* we failed translating address */
-                       kfree(volume_info.UNC);
-                       kfree(volume_info.password);
-                       kfree(volume_info.prepath);
-                       FreeXid(xid);
-                       return -EINVAL;
+                       rc = -EINVAL;
+                       goto out;
                }
 
                cFYI(1, ("UNC: %s ip: %s", volume_info.UNC, volume_info.UNCip));
@@ -1835,20 +1855,14 @@ cifs_mount(struct super_block *sb, struct cifs_sb_info *cifs_sb,
                /* BB using ip addr as server name to connect to the
                   DFS root below */
                cERROR(1, ("Connecting to DFS root not implemented yet"));
-               kfree(volume_info.UNC);
-               kfree(volume_info.password);
-               kfree(volume_info.prepath);
-               FreeXid(xid);
-               return -EINVAL;
+               rc = -EINVAL;
+               goto out;
        } else /* which servers DFS root would we conect to */ {
                cERROR(1,
                       ("CIFS mount error: No UNC path (e.g. -o "
                        "unc=//192.168.1.100/public) specified"));
-               kfree(volume_info.UNC);
-               kfree(volume_info.password);
-               kfree(volume_info.prepath);
-               FreeXid(xid);
-               return -EINVAL;
+               rc = -EINVAL;
+               goto out;
        }
 
        /* this is needed for ASCII cp to Unicode converts */
@@ -1860,11 +1874,8 @@ cifs_mount(struct super_block *sb, struct cifs_sb_info *cifs_sb,
                if (cifs_sb->local_nls == NULL) {
                        cERROR(1, ("CIFS mount error: iocharset %s not found",
                                 volume_info.iocharset));
-                       kfree(volume_info.UNC);
-                       kfree(volume_info.password);
-                       kfree(volume_info.prepath);
-                       FreeXid(xid);
-                       return -ELIBACC;
+                       rc = -ELIBACC;
+                       goto out;
                }
        }
 
@@ -1878,11 +1889,8 @@ cifs_mount(struct super_block *sb, struct cifs_sb_info *cifs_sb,
                        &sin_server6.sin6_addr,
                        volume_info.username, &srvTcp);
        } else {
-               kfree(volume_info.UNC);
-               kfree(volume_info.password);
-               kfree(volume_info.prepath);
-               FreeXid(xid);
-               return -EINVAL;
+               rc = -EINVAL;
+               goto out;
        }
 
        if (srvTcp) {
@@ -1906,22 +1914,14 @@ cifs_mount(struct super_block *sb, struct cifs_sb_info *cifs_sb,
                                   "Aborting operation"));
                        if (csocket != NULL)
                                sock_release(csocket);
-                       kfree(volume_info.UNC);
-                       kfree(volume_info.password);
-                       kfree(volume_info.prepath);
-                       FreeXid(xid);
-                       return rc;
+                       goto out;
                }
 
                srvTcp = kzalloc(sizeof(struct TCP_Server_Info), GFP_KERNEL);
                if (!srvTcp) {
                        rc = -ENOMEM;
                        sock_release(csocket);
-                       kfree(volume_info.UNC);
-                       kfree(volume_info.password);
-                       kfree(volume_info.prepath);
-                       FreeXid(xid);
-                       return rc;
+                       goto out;
                } else {
                        memcpy(&srvTcp->addr.sockAddr, &sin_server,
                                sizeof(struct sockaddr_in));
@@ -1929,6 +1929,12 @@ cifs_mount(struct super_block *sb, struct cifs_sb_info *cifs_sb,
                        /* BB Add code for ipv6 case too */
                        srvTcp->ssocket = csocket;
                        srvTcp->protocolType = IPV4;
+                       srvTcp->hostname = extract_hostname(volume_info.UNC);
+                       if (IS_ERR(srvTcp->hostname)) {
+                               rc = PTR_ERR(srvTcp->hostname);
+                               sock_release(csocket);
+                               goto out;
+                       }
                        init_waitqueue_head(&srvTcp->response_q);
                        init_waitqueue_head(&srvTcp->request_q);
                        INIT_LIST_HEAD(&srvTcp->pending_mid_q);
@@ -1938,16 +1944,13 @@ cifs_mount(struct super_block *sb, struct cifs_sb_info *cifs_sb,
                        srvTcp->tcpStatus = CifsNew;
                        init_MUTEX(&srvTcp->tcpSem);
                        srvTcp->tsk = kthread_run((void *)(void *)cifs_demultiplex_thread, srvTcp, "cifsd");
-                       if ( IS_ERR(srvTcp->tsk) ) {
+                       if (IS_ERR(srvTcp->tsk)) {
                                rc = PTR_ERR(srvTcp->tsk);
                                cERROR(1, ("error %d create cifsd thread", rc));
                                srvTcp->tsk = NULL;
                                sock_release(csocket);
-                               kfree(volume_info.UNC);
-                               kfree(volume_info.password);
-                               kfree(volume_info.prepath);
-                               FreeXid(xid);
-                               return rc;
+                               kfree(srvTcp->hostname);
+                               goto out;
                        }
                        wait_for_completion(&cifsd_complete);
                        rc = 0;
@@ -1962,8 +1965,6 @@ cifs_mount(struct super_block *sb, struct cifs_sb_info *cifs_sb,
        if (existingCifsSes) {
                pSesInfo = existingCifsSes;
                cFYI(1, ("Existing smb sess found"));
-               kfree(volume_info.password);
-               /* volume_info.UNC freed at end of function */
        } else if (!rc) {
                cFYI(1, ("Existing smb sess not found"));
                pSesInfo = sesInfoAlloc();
@@ -1977,8 +1978,11 @@ cifs_mount(struct super_block *sb, struct cifs_sb_info *cifs_sb,
 
                if (!rc) {
                        /* volume_info.password freed at unmount */
-                       if (volume_info.password)
+                       if (volume_info.password) {
                                pSesInfo->password = volume_info.password;
+                               /* set to NULL to prevent freeing on exit */
+                               volume_info.password = NULL;
+                       }
                        if (volume_info.username)
                                strncpy(pSesInfo->userName,
                                        volume_info.username,
@@ -2000,8 +2004,7 @@ cifs_mount(struct super_block *sb, struct cifs_sb_info *cifs_sb,
                        up(&pSesInfo->sesSem);
                        if (!rc)
                                atomic_inc(&srvTcp->socketUseCount);
-               } else
-                       kfree(volume_info.password);
+               }
        }
 
        /* search for existing tcon to this server share */
@@ -2106,9 +2109,8 @@ cifs_mount(struct super_block *sb, struct cifs_sb_info *cifs_sb,
                                                "", cifs_sb->local_nls,
                                                cifs_sb->mnt_cifs_flags &
                                                  CIFS_MOUNT_MAP_SPECIAL_CHR);
-                                       kfree(volume_info.UNC);
-                                       FreeXid(xid);
-                                       return -ENODEV;
+                                       rc = -ENODEV;
+                                       goto out;
                                } else {
                                        /* BB Do we need to wrap sesSem around
                                         * this TCon call and Unix SetFS as
@@ -2231,6 +2233,12 @@ cifs_mount(struct super_block *sb, struct cifs_sb_info *cifs_sb,
        (in which case it is not needed anymore) but when new sesion is created
        the password ptr is put in the new session structure (in which case the
        password will be freed at unmount time) */
+out:
+       /* zero out password before freeing */
+       if (volume_info.password != NULL) {
+               memset(volume_info.password, 0, strlen(volume_info.password));
+               kfree(volume_info.password);
+       }
        kfree(volume_info.UNC);
        kfree(volume_info.prepath);
        FreeXid(xid);
@@ -2374,7 +2382,7 @@ CIFSSessSetup(unsigned int xid, struct cifsSesInfo *ses,
        pSMB->req_no_secext.ByteCount = cpu_to_le16(count);
 
        rc = SendReceive(xid, ses, smb_buffer, smb_buffer_response,
-                        &bytes_returned, 1);
+                        &bytes_returned, CIFS_LONG_OP);
        if (rc) {
 /* rc = map_smb_to_linux_error(smb_buffer_response); now done in SendReceive */
        } else if ((smb_buffer_response->WordCount == 3)
@@ -2678,7 +2686,7 @@ CIFSNTLMSSPNegotiateSessSetup(unsigned int xid,
        pSMB->req.ByteCount = cpu_to_le16(count);
 
        rc = SendReceive(xid, ses, smb_buffer, smb_buffer_response,
-                        &bytes_returned, 1);
+                        &bytes_returned, CIFS_LONG_OP);
 
        if (smb_buffer_response->Status.CifsError ==
            cpu_to_le32(NT_STATUS_MORE_PROCESSING_REQUIRED))
@@ -3105,7 +3113,7 @@ CIFSNTLMSSPAuthSessSetup(unsigned int xid, struct cifsSesInfo *ses,
        pSMB->req.ByteCount = cpu_to_le16(count);
 
        rc = SendReceive(xid, ses, smb_buffer, smb_buffer_response,
-                        &bytes_returned, 1);
+                        &bytes_returned, CIFS_LONG_OP);
        if (rc) {
 /*   rc = map_smb_to_linux_error(smb_buffer_response) done in SendReceive now */
        } else if ((smb_buffer_response->WordCount == 3) ||
@@ -3381,7 +3389,8 @@ CIFSTCon(unsigned int xid, struct cifsSesInfo *ses,
        pSMB->hdr.smb_buf_length += count;
        pSMB->ByteCount = cpu_to_le16(count);
 
-       rc = SendReceive(xid, ses, smb_buffer, smb_buffer_response, &length, 0);
+       rc = SendReceive(xid, ses, smb_buffer, smb_buffer_response, &length,
+                        CIFS_STD_OP);
 
        /* if (rc) rc = map_smb_to_linux_error(smb_buffer_response); */
        /* above now done in SendReceive */
index 68ad4ca0cfa3109fa155b1c7ef9527ba3bb0aed3..dd26e2759b17780deab354d071e3555ce430d2bb 100644 (file)
@@ -130,7 +130,9 @@ static inline int cifs_open_inode_helper(struct inode *inode, struct file *file,
                if (file->f_path.dentry->d_inode->i_mapping) {
                /* BB no need to lock inode until after invalidate
                   since namei code should already have it locked? */
-                       filemap_write_and_wait(file->f_path.dentry->d_inode->i_mapping);
+                       rc = filemap_write_and_wait(file->f_path.dentry->d_inode->i_mapping);
+                       if (rc != 0)
+                               CIFS_I(file->f_path.dentry->d_inode)->write_behind_rc = rc;
                }
                cFYI(1, ("invalidating remote inode since open detected it "
                         "changed"));
@@ -425,7 +427,9 @@ reopen_error_exit:
                pCifsInode = CIFS_I(inode);
                if (pCifsInode) {
                        if (can_flush) {
-                               filemap_write_and_wait(inode->i_mapping);
+                               rc = filemap_write_and_wait(inode->i_mapping);
+                               if (rc != 0)
+                                       CIFS_I(inode)->write_behind_rc = rc;
                        /* temporarily disable caching while we
                           go to server to get inode info */
                                pCifsInode->clientCanCacheAll = FALSE;
@@ -835,9 +839,9 @@ ssize_t cifs_user_write(struct file *file, const char __user *write_data,
        xid = GetXid();
 
        if (*poffset > file->f_path.dentry->d_inode->i_size)
-               long_op = 2; /* writes past end of file can take a long time */
+               long_op = CIFS_VLONG_OP; /* writes past EOF take long time */
        else
-               long_op = 1;
+               long_op = CIFS_LONG_OP;
 
        for (total_written = 0; write_size > total_written;
             total_written += bytes_written) {
@@ -884,7 +888,7 @@ ssize_t cifs_user_write(struct file *file, const char __user *write_data,
                        }
                } else
                        *poffset += bytes_written;
-               long_op = FALSE; /* subsequent writes fast -
+               long_op = CIFS_STD_OP; /* subsequent writes fast -
                                    15 seconds is plenty */
        }
 
@@ -934,9 +938,9 @@ static ssize_t cifs_write(struct file *file, const char *write_data,
        xid = GetXid();
 
        if (*poffset > file->f_path.dentry->d_inode->i_size)
-               long_op = 2; /* writes past end of file can take a long time */
+               long_op = CIFS_VLONG_OP; /* writes past EOF can be slow */
        else
-               long_op = 1;
+               long_op = CIFS_LONG_OP;
 
        for (total_written = 0; write_size > total_written;
             total_written += bytes_written) {
@@ -1002,7 +1006,7 @@ static ssize_t cifs_write(struct file *file, const char *write_data,
                        }
                } else
                        *poffset += bytes_written;
-               long_op = FALSE; /* subsequent writes fast -
+               long_op = CIFS_STD_OP; /* subsequent writes fast -
                                    15 seconds is plenty */
        }
 
@@ -1087,11 +1091,11 @@ refind_writable:
                                read_unlock(&GlobalSMBSeslock);
                                return open_file;
                        }
-       
+
                        read_unlock(&GlobalSMBSeslock);
                        /* Had to unlock since following call can block */
                        rc = cifs_reopen_file(open_file->pfile, FALSE);
-                       if (!rc) { 
+                       if (!rc) {
                                if (!open_file->closePend)
                                        return open_file;
                                else { /* start over in case this was deleted */
@@ -1114,7 +1118,7 @@ refind_writable:
                        /* can not use this handle, no write
                           pending on this one after all */
                        atomic_dec(&open_file->wrtPending);
-                       
+
                        if (open_file->closePend) /* list could have changed */
                                goto refind_writable;
                        /* else we simply continue to the next entry. Thus
@@ -1360,14 +1364,17 @@ retry:
                                                   open_file->netfid,
                                                   bytes_to_write, offset,
                                                   &bytes_written, iov, n_iov,
-                                                  1);
+                                                  CIFS_LONG_OP);
                                atomic_dec(&open_file->wrtPending);
                                if (rc || bytes_written < bytes_to_write) {
                                        cERROR(1, ("Write2 ret %d, wrote %d",
                                                  rc, bytes_written));
                                        /* BB what if continued retry is
                                           requested via mount flags? */
-                                       set_bit(AS_EIO, &mapping->flags);
+                                       if (rc == -ENOSPC)
+                                               set_bit(AS_ENOSPC, &mapping->flags);
+                                       else
+                                               set_bit(AS_EIO, &mapping->flags);
                                } else {
                                        cifs_stats_bytes_written(cifs_sb->tcon,
                                                                 bytes_written);
@@ -1499,9 +1506,11 @@ int cifs_fsync(struct file *file, struct dentry *dentry, int datasync)
        cFYI(1, ("Sync file - name: %s datasync: 0x%x",
                dentry->d_name.name, datasync));
 
-       rc = filemap_fdatawrite(inode->i_mapping);
-       if (rc == 0)
+       rc = filemap_write_and_wait(inode->i_mapping);
+       if (rc == 0) {
+               rc = CIFS_I(inode)->write_behind_rc;
                CIFS_I(inode)->write_behind_rc = 0;
+       }
        FreeXid(xid);
        return rc;
 }
@@ -1553,8 +1562,11 @@ int cifs_flush(struct file *file, fl_owner_t id)
           filemapfdatawrite appears easier for the time being */
 
        rc = filemap_fdatawrite(inode->i_mapping);
-       if (!rc) /* reset wb rc if we were able to write out dirty pages */
+       /* reset wb rc if we were able to write out dirty pages */
+       if (!rc) {
+               rc = CIFS_I(inode)->write_behind_rc;
                CIFS_I(inode)->write_behind_rc = 0;
+       }
 
        cFYI(1, ("Flush inode %p file %p rc %d", inode, file, rc));
 
index 7d907e84e0327d01d531ef9fa142670de04b1ccb..e915eb1d2e6608f659e9e49ad09d4689249fabb5 100644 (file)
@@ -1233,7 +1233,7 @@ cifs_rename_exit:
 int cifs_revalidate(struct dentry *direntry)
 {
        int xid;
-       int rc = 0;
+       int rc = 0, wbrc = 0;
        char *full_path;
        struct cifs_sb_info *cifs_sb;
        struct cifsInodeInfo *cifsInode;
@@ -1333,7 +1333,9 @@ int cifs_revalidate(struct dentry *direntry)
        if (direntry->d_inode->i_mapping) {
                /* do we need to lock inode until after invalidate completes
                   below? */
-               filemap_fdatawrite(direntry->d_inode->i_mapping);
+               wbrc = filemap_fdatawrite(direntry->d_inode->i_mapping);
+               if (wbrc)
+                       CIFS_I(direntry->d_inode)->write_behind_rc = wbrc;
        }
        if (invalidate_inode) {
        /* shrink_dcache not necessary now that cifs dentry ops
@@ -1342,7 +1344,9 @@ int cifs_revalidate(struct dentry *direntry)
                        shrink_dcache_parent(direntry); */
                if (S_ISREG(direntry->d_inode->i_mode)) {
                        if (direntry->d_inode->i_mapping)
-                               filemap_fdatawait(direntry->d_inode->i_mapping);
+                               wbrc = filemap_fdatawait(direntry->d_inode->i_mapping);
+                               if (wbrc)
+                                       CIFS_I(direntry->d_inode)->write_behind_rc = wbrc;
                        /* may eventually have to do this for open files too */
                        if (list_empty(&(cifsInode->openFileList))) {
                                /* changed on server - flush read ahead pages */
@@ -1485,10 +1489,20 @@ int cifs_setattr(struct dentry *direntry, struct iattr *attrs)
 
        /* BB check if we need to refresh inode from server now ? BB */
 
-       /* need to flush data before changing file size on server */
-       filemap_write_and_wait(direntry->d_inode->i_mapping);
-
        if (attrs->ia_valid & ATTR_SIZE) {
+               /*
+                  Flush data before changing file size on server. If the
+                  flush returns error, store it to report later and continue.
+                  BB: This should be smarter. Why bother flushing pages that
+                  will be truncated anyway? Also, should we error out here if
+                  the flush returns error?
+                */
+               rc = filemap_write_and_wait(direntry->d_inode->i_mapping);
+               if (rc != 0) {
+                       CIFS_I(direntry->d_inode)->write_behind_rc = rc;
+                       rc = 0;
+               }
+
                /* To avoid spurious oplock breaks from server, in the case of
                   inodes that we already have open, avoid doing path based
                   setting of file size if we can do it by handle.
index 899dc6078d9ab7848b3ffda2547161c212c2e9e5..d0cb469daab7337b8285abc907e2740a5ef3abd8 100644 (file)
@@ -29,6 +29,7 @@
 #include "ntlmssp.h"
 #include "nterr.h"
 #include <linux/utsname.h>
+#include "cifs_spnego.h"
 
 extern void SMBNTencrypt(unsigned char *passwd, unsigned char *c8,
                         unsigned char *p24);
@@ -340,11 +341,12 @@ CIFS_SessSetup(unsigned int xid, struct cifsSesInfo *ses, int first_time,
        SESSION_SETUP_ANDX *pSMB;
        __u32 capabilities;
        int count;
-       int resp_buf_type = 0;
-       struct kvec iov[2];
+       int resp_buf_type;
+       struct kvec iov[3];
        enum securityEnum type;
        __u16 action;
        int bytes_remaining;
+       struct key *spnego_key = NULL;
 
        if (ses == NULL)
                return -EINVAL;
@@ -377,24 +379,32 @@ CIFS_SessSetup(unsigned int xid, struct cifsSesInfo *ses, int first_time,
 
        capabilities = cifs_ssetup_hdr(ses, pSMB);
 
-       /* we will send the SMB in two pieces,
-       a fixed length beginning part, and a
-       second part which will include the strings
-       and rest of bcc area, in order to avoid having
-       to do a large buffer 17K allocation */
+       /* we will send the SMB in three pieces:
+       a fixed length beginning part, an optional
+       SPNEGO blob (which can be zero length), and a
+       last part which will include the strings
+       and rest of bcc area. This allows us to avoid
+       a large buffer 17K allocation */
        iov[0].iov_base = (char *)pSMB;
        iov[0].iov_len = smb_buf->smb_buf_length + 4;
 
+       /* setting this here allows the code at the end of the function
+          to free the request buffer if there's an error */
+       resp_buf_type = CIFS_SMALL_BUFFER;
+
        /* 2000 big enough to fit max user, domain, NOS name etc. */
        str_area = kmalloc(2000, GFP_KERNEL);
        if (str_area == NULL) {
-               cifs_small_buf_release(smb_buf);
-               return -ENOMEM;
+               rc = -ENOMEM;
+               goto ssetup_exit;
        }
        bcc_ptr = str_area;
 
        ses->flags &= ~CIFS_SES_LANMAN;
 
+       iov[1].iov_base = NULL;
+       iov[1].iov_len = 0;
+
        if (type == LANMAN) {
 #ifdef CONFIG_CIFS_WEAK_PW_HASH
                char lnm_session_key[CIFS_SESS_KEY_SIZE];
@@ -463,8 +473,8 @@ CIFS_SessSetup(unsigned int xid, struct cifsSesInfo *ses, int first_time,
                   struct ntlmv2_resp */
 
                if (v2_sess_key == NULL) {
-                       cifs_small_buf_release(smb_buf);
-                       return -ENOMEM;
+                       rc = -ENOMEM;
+                       goto ssetup_exit;
                }
 
                pSMB->req_no_secext.Capabilities = cpu_to_le32(capabilities);
@@ -499,22 +509,67 @@ CIFS_SessSetup(unsigned int xid, struct cifsSesInfo *ses, int first_time,
                        unicode_ssetup_strings(&bcc_ptr, ses, nls_cp);
                } else
                        ascii_ssetup_strings(&bcc_ptr, ses, nls_cp);
-       } else /* NTLMSSP or SPNEGO */ {
+       } else if (type == Kerberos) {
+#ifdef CONFIG_CIFS_UPCALL
+               struct cifs_spnego_msg *msg;
+               spnego_key = cifs_get_spnego_key(ses);
+               if (IS_ERR(spnego_key)) {
+                       rc = PTR_ERR(spnego_key);
+                       spnego_key = NULL;
+                       goto ssetup_exit;
+               }
+
+               msg = spnego_key->payload.data;
+               /* bail out if key is too long */
+               if (msg->sesskey_len >
+                   sizeof(ses->server->mac_signing_key.data.krb5)) {
+                       cERROR(1, ("Kerberos signing key too long (%u bytes)",
+                               msg->sesskey_len));
+                       rc = -EOVERFLOW;
+                       goto ssetup_exit;
+               }
+               ses->server->mac_signing_key.len = msg->sesskey_len;
+               memcpy(ses->server->mac_signing_key.data.krb5, msg->data,
+                       msg->sesskey_len);
                pSMB->req.hdr.Flags2 |= SMBFLG2_EXT_SEC;
                capabilities |= CAP_EXTENDED_SECURITY;
                pSMB->req.Capabilities = cpu_to_le32(capabilities);
-               /* BB set password lengths */
+               iov[1].iov_base = msg->data + msg->sesskey_len;
+               iov[1].iov_len = msg->secblob_len;
+               pSMB->req.SecurityBlobLength = cpu_to_le16(iov[1].iov_len);
+
+               if (ses->capabilities & CAP_UNICODE) {
+                       /* unicode strings must be word aligned */
+                       if (iov[0].iov_len % 2) {
+                               *bcc_ptr = 0;
+                               bcc_ptr++;
+                       }
+                       unicode_oslm_strings(&bcc_ptr, nls_cp);
+                       unicode_domain_string(&bcc_ptr, ses, nls_cp);
+               } else
+               /* BB: is this right? */
+                       ascii_ssetup_strings(&bcc_ptr, ses, nls_cp);
+#else /* ! CONFIG_CIFS_UPCALL */
+               cERROR(1, ("Kerberos negotiated but upcall support disabled!"));
+               rc = -ENOSYS;
+               goto ssetup_exit;
+#endif /* CONFIG_CIFS_UPCALL */
+       } else {
+               cERROR(1, ("secType %d not supported!", type));
+               rc = -ENOSYS;
+               goto ssetup_exit;
        }
 
-       count = (long) bcc_ptr - (long) str_area;
+       iov[2].iov_base = str_area;
+       iov[2].iov_len = (long) bcc_ptr - (long) str_area;
+
+       count = iov[1].iov_len + iov[2].iov_len;
        smb_buf->smb_buf_length += count;
 
        BCC_LE(smb_buf) = cpu_to_le16(count);
 
-       iov[1].iov_base = str_area;
-       iov[1].iov_len = count;
-       rc = SendReceive2(xid, ses, iov, 2 /* num_iovecs */, &resp_buf_type,
-                         0 /* not long op */, 1 /* log NT STATUS if any */ );
+       rc = SendReceive2(xid, ses, iov, 3 /* num_iovecs */, &resp_buf_type,
+                         CIFS_STD_OP /* not long */ | CIFS_LOG_ERROR);
        /* SMB request buf freed in SendReceive2 */
 
        cFYI(1, ("ssetup rc from sendrecv2 is %d", rc));
@@ -560,6 +615,8 @@ CIFS_SessSetup(unsigned int xid, struct cifsSesInfo *ses, int first_time,
                                         ses, nls_cp);
 
 ssetup_exit:
+       if (spnego_key)
+               key_put(spnego_key);
        kfree(str_area);
        if (resp_buf_type == CIFS_SMALL_BUFFER) {
                cFYI(1, ("ssetup freeing small buf %p", iov[0].iov_base));
index 7ed32b3cb781a0011a0560b7fe3898825f5c9e4f..50b623ad93205700822888e00c1e684186aac05e 100644 (file)
@@ -308,7 +308,7 @@ smb_send2(struct socket *ssocket, struct kvec *iov, int n_vec,
 
 static int wait_for_free_request(struct cifsSesInfo *ses, const int long_op)
 {
-       if (long_op == -1) {
+       if (long_op == CIFS_ASYNC_OP) {
                /* oplock breaks must not be held up */
                atomic_inc(&ses->server->inFlight);
        } else {
@@ -337,7 +337,7 @@ static int wait_for_free_request(struct cifsSesInfo *ses, const int long_op)
                                   as they are allowed to block on server */
 
                                /* update # of requests on the wire to server */
-                               if (long_op < 3)
+                               if (long_op != CIFS_BLOCKING_OP)
                                        atomic_inc(&ses->server->inFlight);
                                spin_unlock(&GlobalMid_Lock);
                                break;
@@ -415,17 +415,48 @@ static int wait_for_response(struct cifsSesInfo *ses,
        }
 }
 
+
+/*
+ *
+ * Send an SMB Request.  No response info (other than return code)
+ * needs to be parsed.
+ *
+ * flags indicate the type of request buffer and how long to wait
+ * and whether to log NT STATUS code (error) before mapping it to POSIX error
+ *
+ */
+int
+SendReceiveNoRsp(const unsigned int xid, struct cifsSesInfo *ses,
+               struct smb_hdr *in_buf, int flags)
+{
+       int rc;
+       struct kvec iov[1];
+       int resp_buf_type;
+
+       iov[0].iov_base = (char *)in_buf;
+       iov[0].iov_len = in_buf->smb_buf_length + 4;
+       flags |= CIFS_NO_RESP;
+       rc = SendReceive2(xid, ses, iov, 1, &resp_buf_type, flags);
+#ifdef CONFIG_CIFS_DEBUG2
+       cFYI(1, ("SendRcvNoR flags %d rc %d", flags, rc));
+#endif
+       return rc;
+}
+
 int
 SendReceive2(const unsigned int xid, struct cifsSesInfo *ses,
             struct kvec *iov, int n_vec, int *pRespBufType /* ret */,
-            const int long_op, const int logError)
+            const int flags)
 {
        int rc = 0;
+       int long_op;
        unsigned int receive_len;
        unsigned long timeout;
        struct mid_q_entry *midQ;
        struct smb_hdr *in_buf = iov[0].iov_base;
 
+       long_op = flags & CIFS_TIMEOUT_MASK;
+
        *pRespBufType = CIFS_NO_BUFFER;  /* no response buf yet */
 
        if ((ses == NULL) || (ses->server == NULL)) {
@@ -483,15 +514,22 @@ SendReceive2(const unsigned int xid, struct cifsSesInfo *ses,
        if (rc < 0)
                goto out;
 
-       if (long_op == -1)
-               goto out;
-       else if (long_op == 2) /* writes past end of file can take loong time */
+       if (long_op == CIFS_STD_OP)
+               timeout = 15 * HZ;
+       else if (long_op == CIFS_VLONG_OP) /* e.g. slow writes past EOF */
                timeout = 180 * HZ;
-       else if (long_op == 1)
+       else if (long_op == CIFS_LONG_OP)
                timeout = 45 * HZ; /* should be greater than
                        servers oplock break timeout (about 43 seconds) */
-       else
-               timeout = 15 * HZ;
+       else if (long_op == CIFS_ASYNC_OP)
+               goto out;
+       else if (long_op == CIFS_BLOCKING_OP)
+               timeout = 0x7FFFFFFF; /*  large, but not so large as to wrap */
+       else {
+               cERROR(1, ("unknown timeout flag %d", long_op));
+               rc = -EIO;
+               goto out;
+       }
 
        /* wait for 15 seconds or until woken up due to response arriving or
           due to last connection to this server being unmounted */
@@ -566,7 +604,8 @@ SendReceive2(const unsigned int xid, struct cifsSesInfo *ses,
                        }
 
                        /* BB special case reconnect tid and uid here? */
-                       rc = map_smb_to_linux_error(midQ->resp_buf, logError);
+                       rc = map_smb_to_linux_error(midQ->resp_buf,
+                                               flags & CIFS_LOG_ERROR);
 
                        /* convert ByteCount if necessary */
                        if (receive_len >= sizeof(struct smb_hdr) - 4
@@ -574,8 +613,10 @@ SendReceive2(const unsigned int xid, struct cifsSesInfo *ses,
                            (2 * midQ->resp_buf->WordCount) + 2 /* bcc */ )
                                BCC(midQ->resp_buf) =
                                        le16_to_cpu(BCC_LE(midQ->resp_buf));
-                       midQ->resp_buf = NULL;  /* mark it so will not be freed
-                                               by DeleteMidQEntry */
+                       if ((flags & CIFS_NO_RESP) == 0)
+                               midQ->resp_buf = NULL;  /* mark it so buf will
+                                                          not be freed by
+                                                          DeleteMidQEntry */
                } else {
                        rc = -EIO;
                        cFYI(1, ("Bad MID state?"));
@@ -663,17 +704,25 @@ SendReceive(const unsigned int xid, struct cifsSesInfo *ses,
        if (rc < 0)
                goto out;
 
-       if (long_op == -1)
+       if (long_op == CIFS_STD_OP)
+               timeout = 15 * HZ;
+       /* wait for 15 seconds or until woken up due to response arriving or
+          due to last connection to this server being unmounted */
+       else if (long_op == CIFS_ASYNC_OP)
                goto out;
-       else if (long_op == 2) /* writes past end of file can take loong time */
+       else if (long_op == CIFS_VLONG_OP) /* writes past EOF can be slow */
                timeout = 180 * HZ;
-       else if (long_op == 1)
+       else if (long_op == CIFS_LONG_OP)
                timeout = 45 * HZ; /* should be greater than
                        servers oplock break timeout (about 43 seconds) */
-       else
-               timeout = 15 * HZ;
-       /* wait for 15 seconds or until woken up due to response arriving or
-          due to last connection to this server being unmounted */
+       else if (long_op == CIFS_BLOCKING_OP)
+               timeout = 0x7FFFFFFF; /* large but no so large as to wrap */
+       else {
+               cERROR(1, ("unknown timeout flag %d", long_op));
+               rc = -EIO;
+               goto out;
+       }
+
        if (signal_pending(current)) {
                /* if signal pending do not hold up user for full smb timeout
                but we still give response a chance to complete */
@@ -812,7 +861,7 @@ send_lock_cancel(const unsigned int xid, struct cifsTconInfo *tcon,
        pSMB->hdr.Mid = GetNextMid(ses->server);
 
        return SendReceive(xid, ses, in_buf, out_buf,
-                       &bytes_returned, 0);
+                       &bytes_returned, CIFS_STD_OP);
 }
 
 int
@@ -844,7 +893,7 @@ SendReceiveBlockingLock(const unsigned int xid, struct cifsTconInfo *tcon,
           to the same server. We may make this configurable later or
           use ses->maxReq */
 
-       rc = wait_for_free_request(ses, 3);
+       rc = wait_for_free_request(ses, CIFS_BLOCKING_OP);
        if (rc)
                return rc;
 
index bd26e4cbb994f810b0ce8dc8ce3780356e0f66fa..e8b7c3a98a544922f886cf19631aab5a258ec101 100644 (file)
@@ -1954,6 +1954,12 @@ ULONG_IOCTL(TIOCSCTTY)
 COMPATIBLE_IOCTL(TIOCGPTN)
 COMPATIBLE_IOCTL(TIOCSPTLCK)
 COMPATIBLE_IOCTL(TIOCSERGETLSR)
+#ifdef TCGETS2
+COMPATIBLE_IOCTL(TCGETS2)
+COMPATIBLE_IOCTL(TCSETS2)
+COMPATIBLE_IOCTL(TCSETSW2)
+COMPATIBLE_IOCTL(TCSETSF2)
+#endif
 /* Little f */
 COMPATIBLE_IOCTL(FIOCLEX)
 COMPATIBLE_IOCTL(FIONCLEX)
index 4ccaaa4b13b229ec17456789ead9aad76c8078bf..282240afe99e5e223b1732c4c1b58245d90618d8 100644 (file)
--- a/fs/exec.c
+++ b/fs/exec.c
@@ -1780,6 +1780,12 @@ int do_coredump(long signr, int exit_code, struct pt_regs * regs)
           but keep the previous behaviour for now. */
        if (!ispipe && !S_ISREG(inode->i_mode))
                goto close_fail;
+       /*
+        * Dont allow local users get cute and trick others to coredump
+        * into their pre-created files:
+        */
+       if (inode->i_uid != current->fsuid)
+               goto close_fail;
        if (!file->f_op)
                goto close_fail;
        if (!file->f_op->write)
index 7730388c4931857f83ccdf9aa758d3120534d5ab..c87ae29c19cb346d86de36513d43a654ff3362e8 100644 (file)
@@ -178,3 +178,10 @@ extern const struct inode_operations ext2_special_inode_operations;
 /* symlink.c */
 extern const struct inode_operations ext2_fast_symlink_inode_operations;
 extern const struct inode_operations ext2_symlink_inode_operations;
+
+static inline ext2_fsblk_t
+ext2_group_first_block_no(struct super_block *sb, unsigned long group_no)
+{
+       return group_no * (ext2_fsblk_t)EXT2_BLOCKS_PER_GROUP(sb) +
+               le32_to_cpu(EXT2_SB(sb)->s_es->s_first_data_block);
+}
index 3763757f9fe704f088aa83810289929a33b17ad7..80d2f5292cf91f490532e903c0e37795e705de15 100644 (file)
@@ -132,6 +132,21 @@ static void fuse_lookup_init(struct fuse_req *req, struct inode *dir,
        req->out.args[0].value = outarg;
 }
 
+static u64 fuse_get_attr_version(struct fuse_conn *fc)
+{
+       u64 curr_version;
+
+       /*
+        * The spin lock isn't actually needed on 64bit archs, but we
+        * don't yet care too much about such optimizations.
+        */
+       spin_lock(&fc->lock);
+       curr_version = fc->attr_version;
+       spin_unlock(&fc->lock);
+
+       return curr_version;
+}
+
 /*
  * Check whether the dentry is still valid
  *
@@ -171,9 +186,7 @@ static int fuse_dentry_revalidate(struct dentry *entry, struct nameidata *nd)
                        return 0;
                }
 
-               spin_lock(&fc->lock);
-               attr_version = fc->attr_version;
-               spin_unlock(&fc->lock);
+               attr_version = fuse_get_attr_version(fc);
 
                parent = dget_parent(entry);
                fuse_lookup_init(req, parent->d_inode, entry, &outarg);
@@ -264,9 +277,7 @@ static struct dentry *fuse_lookup(struct inode *dir, struct dentry *entry,
                return ERR_PTR(PTR_ERR(forget_req));
        }
 
-       spin_lock(&fc->lock);
-       attr_version = fc->attr_version;
-       spin_unlock(&fc->lock);
+       attr_version = fuse_get_attr_version(fc);
 
        fuse_lookup_init(req, dir, entry, &outarg);
        request_send(fc, req);
@@ -646,6 +657,9 @@ static int fuse_rename(struct inode *olddir, struct dentry *oldent,
        err = req->out.h.error;
        fuse_put_request(fc, req);
        if (!err) {
+               /* ctime changes */
+               fuse_invalidate_attr(oldent->d_inode);
+
                fuse_invalidate_attr(olddir);
                if (olddir != newdir)
                        fuse_invalidate_attr(newdir);
@@ -733,9 +747,7 @@ static int fuse_do_getattr(struct inode *inode, struct kstat *stat,
        if (IS_ERR(req))
                return PTR_ERR(req);
 
-       spin_lock(&fc->lock);
-       attr_version = fc->attr_version;
-       spin_unlock(&fc->lock);
+       attr_version = fuse_get_attr_version(fc);
 
        memset(&inarg, 0, sizeof(inarg));
        memset(&outarg, 0, sizeof(outarg));
@@ -775,6 +787,31 @@ static int fuse_do_getattr(struct inode *inode, struct kstat *stat,
        return err;
 }
 
+int fuse_update_attributes(struct inode *inode, struct kstat *stat,
+                          struct file *file, bool *refreshed)
+{
+       struct fuse_inode *fi = get_fuse_inode(inode);
+       int err;
+       bool r;
+
+       if (fi->i_time < get_jiffies_64()) {
+               r = true;
+               err = fuse_do_getattr(inode, stat, file);
+       } else {
+               r = false;
+               err = 0;
+               if (stat) {
+                       generic_fillattr(inode, stat);
+                       stat->mode = fi->orig_i_mode;
+               }
+       }
+
+       if (refreshed != NULL)
+               *refreshed = r;
+
+       return err;
+}
+
 /*
  * Calling into a user-controlled filesystem gives the filesystem
  * daemon ptrace-like capabilities over the requester process.  This
@@ -862,14 +899,9 @@ static int fuse_permission(struct inode *inode, int mask, struct nameidata *nd)
         */
        if ((fc->flags & FUSE_DEFAULT_PERMISSIONS) ||
            ((mask & MAY_EXEC) && S_ISREG(inode->i_mode))) {
-               struct fuse_inode *fi = get_fuse_inode(inode);
-               if (fi->i_time < get_jiffies_64()) {
-                       err = fuse_do_getattr(inode, NULL, NULL);
-                       if (err)
-                               return err;
-
-                       refreshed = true;
-               }
+               err = fuse_update_attributes(inode, NULL, NULL, &refreshed);
+               if (err)
+                       return err;
        }
 
        if (fc->flags & FUSE_DEFAULT_PERMISSIONS) {
@@ -935,7 +967,6 @@ static int fuse_readdir(struct file *file, void *dstbuf, filldir_t filldir)
        struct page *page;
        struct inode *inode = file->f_path.dentry->d_inode;
        struct fuse_conn *fc = get_fuse_conn(inode);
-       struct fuse_file *ff = file->private_data;
        struct fuse_req *req;
 
        if (is_bad_inode(inode))
@@ -952,7 +983,7 @@ static int fuse_readdir(struct file *file, void *dstbuf, filldir_t filldir)
        }
        req->num_pages = 1;
        req->pages[0] = page;
-       fuse_read_fill(req, ff, inode, file->f_pos, PAGE_SIZE, FUSE_READDIR);
+       fuse_read_fill(req, file, inode, file->f_pos, PAGE_SIZE, FUSE_READDIR);
        request_send(fc, req);
        nbytes = req->out.args[0].size;
        err = req->out.h.error;
@@ -1173,22 +1204,12 @@ static int fuse_getattr(struct vfsmount *mnt, struct dentry *entry,
                        struct kstat *stat)
 {
        struct inode *inode = entry->d_inode;
-       struct fuse_inode *fi = get_fuse_inode(inode);
        struct fuse_conn *fc = get_fuse_conn(inode);
-       int err;
 
        if (!fuse_allow_task(fc, current))
                return -EACCES;
 
-       if (fi->i_time < get_jiffies_64())
-               err = fuse_do_getattr(inode, stat, NULL);
-       else {
-               err = 0;
-               generic_fillattr(inode, stat);
-               stat->mode = fi->orig_i_mode;
-       }
-
-       return err;
+       return fuse_update_attributes(inode, stat, NULL, NULL);
 }
 
 static int fuse_setxattr(struct dentry *entry, const char *name,
index 535b37399009128df2413d3b7632160390113b9c..bb05d227cf30bb074da715a08d438e295fbc8892 100644 (file)
@@ -289,14 +289,16 @@ static int fuse_fsync(struct file *file, struct dentry *de, int datasync)
        return fuse_fsync_common(file, de, datasync, 0);
 }
 
-void fuse_read_fill(struct fuse_req *req, struct fuse_file *ff,
+void fuse_read_fill(struct fuse_req *req, struct file *file,
                    struct inode *inode, loff_t pos, size_t count, int opcode)
 {
        struct fuse_read_in *inarg = &req->misc.read_in;
+       struct fuse_file *ff = file->private_data;
 
        inarg->fh = ff->fh;
        inarg->offset = pos;
        inarg->size = count;
+       inarg->flags = file->f_flags;
        req->in.h.opcode = opcode;
        req->in.h.nodeid = get_node_id(inode);
        req->in.numargs = 1;
@@ -313,9 +315,8 @@ static size_t fuse_send_read(struct fuse_req *req, struct file *file,
                             fl_owner_t owner)
 {
        struct fuse_conn *fc = get_fuse_conn(inode);
-       struct fuse_file *ff = file->private_data;
 
-       fuse_read_fill(req, ff, inode, pos, count, FUSE_READ);
+       fuse_read_fill(req, file, inode, pos, count, FUSE_READ);
        if (owner != NULL) {
                struct fuse_read_in *inarg = &req->misc.read_in;
 
@@ -376,15 +377,16 @@ static void fuse_readpages_end(struct fuse_conn *fc, struct fuse_req *req)
        fuse_put_request(fc, req);
 }
 
-static void fuse_send_readpages(struct fuse_req *req, struct fuse_file *ff,
+static void fuse_send_readpages(struct fuse_req *req, struct file *file,
                                struct inode *inode)
 {
        struct fuse_conn *fc = get_fuse_conn(inode);
        loff_t pos = page_offset(req->pages[0]);
        size_t count = req->num_pages << PAGE_CACHE_SHIFT;
        req->out.page_zeroing = 1;
-       fuse_read_fill(req, ff, inode, pos, count, FUSE_READ);
+       fuse_read_fill(req, file, inode, pos, count, FUSE_READ);
        if (fc->async_read) {
+               struct fuse_file *ff = file->private_data;
                req->ff = fuse_file_get(ff);
                req->end = fuse_readpages_end;
                request_send_background(fc, req);
@@ -396,7 +398,7 @@ static void fuse_send_readpages(struct fuse_req *req, struct fuse_file *ff,
 
 struct fuse_fill_data {
        struct fuse_req *req;
-       struct fuse_file *ff;
+       struct file *file;
        struct inode *inode;
 };
 
@@ -411,7 +413,7 @@ static int fuse_readpages_fill(void *_data, struct page *page)
            (req->num_pages == FUSE_MAX_PAGES_PER_REQ ||
             (req->num_pages + 1) * PAGE_CACHE_SIZE > fc->max_read ||
             req->pages[req->num_pages - 1]->index + 1 != page->index)) {
-               fuse_send_readpages(req, data->ff, inode);
+               fuse_send_readpages(req, data->file, inode);
                data->req = req = fuse_get_req(fc);
                if (IS_ERR(req)) {
                        unlock_page(page);
@@ -435,7 +437,7 @@ static int fuse_readpages(struct file *file, struct address_space *mapping,
        if (is_bad_inode(inode))
                goto out;
 
-       data.ff = file->private_data;
+       data.file = file;
        data.inode = inode;
        data.req = fuse_get_req(fc);
        err = PTR_ERR(data.req);
@@ -445,7 +447,7 @@ static int fuse_readpages(struct file *file, struct address_space *mapping,
        err = read_cache_pages(mapping, pages, fuse_readpages_fill, &data);
        if (!err) {
                if (data.req->num_pages)
-                       fuse_send_readpages(data.req, data.ff, inode);
+                       fuse_send_readpages(data.req, file, inode);
                else
                        fuse_put_request(fc, data.req);
        }
@@ -453,11 +455,31 @@ out:
        return err;
 }
 
-static void fuse_write_fill(struct fuse_req *req, struct fuse_file *ff,
+static ssize_t fuse_file_aio_read(struct kiocb *iocb, const struct iovec *iov,
+                                 unsigned long nr_segs, loff_t pos)
+{
+       struct inode *inode = iocb->ki_filp->f_mapping->host;
+
+       if (pos + iov_length(iov, nr_segs) > i_size_read(inode)) {
+               int err;
+               /*
+                * If trying to read past EOF, make sure the i_size
+                * attribute is up-to-date.
+                */
+               err = fuse_update_attributes(inode, NULL, iocb->ki_filp, NULL);
+               if (err)
+                       return err;
+       }
+
+       return generic_file_aio_read(iocb, iov, nr_segs, pos);
+}
+
+static void fuse_write_fill(struct fuse_req *req, struct file *file,
                            struct inode *inode, loff_t pos, size_t count,
                            int writepage)
 {
        struct fuse_conn *fc = get_fuse_conn(inode);
+       struct fuse_file *ff = file->private_data;
        struct fuse_write_in *inarg = &req->misc.write.in;
        struct fuse_write_out *outarg = &req->misc.write.out;
 
@@ -466,6 +488,7 @@ static void fuse_write_fill(struct fuse_req *req, struct fuse_file *ff,
        inarg->offset = pos;
        inarg->size = count;
        inarg->write_flags = writepage ? FUSE_WRITE_CACHE : 0;
+       inarg->flags = file->f_flags;
        req->in.h.opcode = FUSE_WRITE;
        req->in.h.nodeid = get_node_id(inode);
        req->in.argpages = 1;
@@ -486,7 +509,7 @@ static size_t fuse_send_write(struct fuse_req *req, struct file *file,
                              fl_owner_t owner)
 {
        struct fuse_conn *fc = get_fuse_conn(inode);
-       fuse_write_fill(req, file->private_data, inode, pos, count, 0);
+       fuse_write_fill(req, file, inode, pos, count, 0);
        if (owner != NULL) {
                struct fuse_write_in *inarg = &req->misc.write.in;
                inarg->write_flags |= FUSE_WRITE_LOCKOWNER;
@@ -887,7 +910,7 @@ static sector_t fuse_bmap(struct address_space *mapping, sector_t block)
 static const struct file_operations fuse_file_operations = {
        .llseek         = generic_file_llseek,
        .read           = do_sync_read,
-       .aio_read       = generic_file_aio_read,
+       .aio_read       = fuse_file_aio_read,
        .write          = do_sync_write,
        .aio_write      = generic_file_aio_write,
        .mmap           = fuse_file_mmap,
index 6c5461de1a5fd5c4cbbf806fddb6d12a948841fa..3ab8a3048e8b8fa185028cdeab329463ed6b1245 100644 (file)
@@ -447,7 +447,7 @@ void fuse_send_forget(struct fuse_conn *fc, struct fuse_req *req,
 /**
  * Initialize READ or READDIR request
  */
-void fuse_read_fill(struct fuse_req *req, struct fuse_file *ff,
+void fuse_read_fill(struct fuse_req *req, struct file *file,
                    struct inode *inode, loff_t pos, size_t count, int opcode);
 
 /**
@@ -593,3 +593,6 @@ int fuse_valid_type(int m);
 int fuse_allow_task(struct fuse_conn *fc, struct task_struct *task);
 
 u64 fuse_lock_owner_id(struct fuse_conn *fc, fl_owner_t id);
+
+int fuse_update_attributes(struct inode *inode, struct kstat *stat,
+                          struct file *file, bool *refreshed);
index 9a68d69708457c5ecd387895e77cba73e51e7efb..84f9f7dfdf5b6bc1162d57ff5bf4f3845e7d743a 100644 (file)
@@ -56,6 +56,7 @@ static struct inode *fuse_alloc_inode(struct super_block *sb)
        fi->i_time = 0;
        fi->nodeid = 0;
        fi->nlookup = 0;
+       fi->attr_version = 0;
        INIT_LIST_HEAD(&fi->write_files);
        fi->forget_req = fuse_request_alloc();
        if (!fi->forget_req) {
@@ -562,8 +563,7 @@ static void fuse_send_init(struct fuse_conn *fc, struct fuse_req *req)
        arg->major = FUSE_KERNEL_VERSION;
        arg->minor = FUSE_KERNEL_MINOR_VERSION;
        arg->max_readahead = fc->bdi.ra_pages * PAGE_CACHE_SIZE;
-       arg->flags |= FUSE_ASYNC_READ | FUSE_POSIX_LOCKS | FUSE_FILE_OPS |
-               FUSE_ATOMIC_O_TRUNC;
+       arg->flags |= FUSE_ASYNC_READ | FUSE_POSIX_LOCKS | FUSE_ATOMIC_O_TRUNC;
        req->in.h.opcode = FUSE_INIT;
        req->in.numargs = 1;
        req->in.args[0].size = sizeof(*arg);
index 47552d4a6324effeb085c603c91dfcf945ed46f3..0f69c416eebc6adef7d05eeaf3283083adb9e700 100644 (file)
@@ -602,15 +602,15 @@ int __journal_remove_checkpoint(struct journal_head *jh)
 
        /*
         * There is one special case to worry about: if we have just pulled the
-        * buffer off a committing transaction's forget list, then even if the
-        * checkpoint list is empty, the transaction obviously cannot be
-        * dropped!
+        * buffer off a running or committing transaction's checkpoing list,
+        * then even if the checkpoint list is empty, the transaction obviously
+        * cannot be dropped!
         *
-        * The locking here around j_committing_transaction is a bit sleazy.
+        * The locking here around t_state is a bit sleazy.
         * See the comment at the end of journal_commit_transaction().
         */
-       if (transaction == journal->j_committing_transaction) {
-               JBUFFER_TRACE(jh, "belongs to committing transaction");
+       if (transaction->t_state != T_FINISHED) {
+               JBUFFER_TRACE(jh, "belongs to running/committing transaction");
                goto out;
        }
 
index 8f1f2aa5fb39b2df5b744c2f7e495145cf1b2df8..610264b99a8e8bb357ed46dc9a08735443ab2659 100644 (file)
@@ -858,10 +858,10 @@ restart_loop:
        }
        spin_unlock(&journal->j_list_lock);
        /*
-        * This is a bit sleazy.  We borrow j_list_lock to protect
-        * journal->j_committing_transaction in __journal_remove_checkpoint.
-        * Really, __journal_remove_checkpoint should be using j_state_lock but
-        * it's a bit hassle to hold that across __journal_remove_checkpoint
+        * This is a bit sleazy.  We use j_list_lock to protect transition
+        * of a transaction into T_FINISHED state and calling
+        * __journal_drop_transaction(). Otherwise we could race with
+        * other checkpointing code processing the transaction...
         */
        spin_lock(&journal->j_state_lock);
        spin_lock(&journal->j_list_lock);
index d568ae846741a7a89729794404958d969c98507e..8adebd3e43c690fbf0469cf9b235279998c252c8 100644 (file)
@@ -105,7 +105,7 @@ static int jffs2_garbage_collect_thread(void *_c)
 
                /* Put_super will send a SIGKILL and then wait on the sem.
                 */
-               while (signal_pending(current)) {
+               while (signal_pending(current) || freezing(current)) {
                        siginfo_t info;
                        unsigned long signr;
 
index 35334539d9475dc0188bdb80f4a1d15ef70b56a9..f697b5c74b7c38f5627ea71c9d2ec9ac95bc3eba 100644 (file)
@@ -38,6 +38,7 @@
 #include "nfs4_fs.h"
 #include "delegation.h"
 #include "iostat.h"
+#include "internal.h"
 
 /* #define NFS_DEBUG_VERBOSE 1 */
 
index afcab007a22b519ad1542f47175c1b56fb132cf4..5e8d82f6666be9e1cd4ec1d4d645c394e115d2f1 100644 (file)
@@ -263,17 +263,19 @@ static const struct rpc_call_ops nfs_read_direct_ops = {
  * handled automatically by nfs_direct_read_result().  Otherwise, if
  * no requests have been sent, just return an error.
  */
-static ssize_t nfs_direct_read_schedule(struct nfs_direct_req *dreq, unsigned long user_addr, size_t count, loff_t pos)
+static ssize_t nfs_direct_read_schedule_segment(struct nfs_direct_req *dreq,
+                                               const struct iovec *iov,
+                                               loff_t pos)
 {
        struct nfs_open_context *ctx = dreq->ctx;
        struct inode *inode = ctx->path.dentry->d_inode;
+       unsigned long user_addr = (unsigned long)iov->iov_base;
+       size_t count = iov->iov_len;
        size_t rsize = NFS_SERVER(inode)->rsize;
        unsigned int pgbase;
        int result;
        ssize_t started = 0;
 
-       get_dreq(dreq);
-
        do {
                struct nfs_read_data *data;
                size_t bytes;
@@ -347,15 +349,46 @@ static ssize_t nfs_direct_read_schedule(struct nfs_direct_req *dreq, unsigned lo
                count -= bytes;
        } while (count != 0);
 
+       if (started)
+               return started;
+       return result < 0 ? (ssize_t) result : -EFAULT;
+}
+
+static ssize_t nfs_direct_read_schedule_iovec(struct nfs_direct_req *dreq,
+                                             const struct iovec *iov,
+                                             unsigned long nr_segs,
+                                             loff_t pos)
+{
+       ssize_t result = -EINVAL;
+       size_t requested_bytes = 0;
+       unsigned long seg;
+
+       get_dreq(dreq);
+
+       for (seg = 0; seg < nr_segs; seg++) {
+               const struct iovec *vec = &iov[seg];
+               result = nfs_direct_read_schedule_segment(dreq, vec, pos);
+               if (result < 0)
+                       break;
+               requested_bytes += result;
+               if ((size_t)result < vec->iov_len)
+                       break;
+               pos += vec->iov_len;
+       }
+
        if (put_dreq(dreq))
                nfs_direct_complete(dreq);
 
-       if (started)
+       if (requested_bytes != 0)
                return 0;
-       return result < 0 ? (ssize_t) result : -EFAULT;
+
+       if (result < 0)
+               return result;
+       return -EIO;
 }
 
-static ssize_t nfs_direct_read(struct kiocb *iocb, unsigned long user_addr, size_t count, loff_t pos)
+static ssize_t nfs_direct_read(struct kiocb *iocb, const struct iovec *iov,
+                              unsigned long nr_segs, loff_t pos)
 {
        ssize_t result = 0;
        sigset_t oldset;
@@ -372,9 +405,8 @@ static ssize_t nfs_direct_read(struct kiocb *iocb, unsigned long user_addr, size
        if (!is_sync_kiocb(iocb))
                dreq->iocb = iocb;
 
-       nfs_add_stats(inode, NFSIOS_DIRECTREADBYTES, count);
        rpc_clnt_sigmask(clnt, &oldset);
-       result = nfs_direct_read_schedule(dreq, user_addr, count, pos);
+       result = nfs_direct_read_schedule_iovec(dreq, iov, nr_segs, pos);
        if (!result)
                result = nfs_direct_wait(dreq);
        rpc_clnt_sigunmask(clnt, &oldset);
@@ -601,17 +633,19 @@ static const struct rpc_call_ops nfs_write_direct_ops = {
  * handled automatically by nfs_direct_write_result().  Otherwise, if
  * no requests have been sent, just return an error.
  */
-static ssize_t nfs_direct_write_schedule(struct nfs_direct_req *dreq, unsigned long user_addr, size_t count, loff_t pos, int sync)
+static ssize_t nfs_direct_write_schedule_segment(struct nfs_direct_req *dreq,
+                                                const struct iovec *iov,
+                                                loff_t pos, int sync)
 {
        struct nfs_open_context *ctx = dreq->ctx;
        struct inode *inode = ctx->path.dentry->d_inode;
+       unsigned long user_addr = (unsigned long)iov->iov_base;
+       size_t count = iov->iov_len;
        size_t wsize = NFS_SERVER(inode)->wsize;
        unsigned int pgbase;
        int result;
        ssize_t started = 0;
 
-       get_dreq(dreq);
-
        do {
                struct nfs_write_data *data;
                size_t bytes;
@@ -689,15 +723,48 @@ static ssize_t nfs_direct_write_schedule(struct nfs_direct_req *dreq, unsigned l
                count -= bytes;
        } while (count != 0);
 
+       if (started)
+               return started;
+       return result < 0 ? (ssize_t) result : -EFAULT;
+}
+
+static ssize_t nfs_direct_write_schedule_iovec(struct nfs_direct_req *dreq,
+                                              const struct iovec *iov,
+                                              unsigned long nr_segs,
+                                              loff_t pos, int sync)
+{
+       ssize_t result = 0;
+       size_t requested_bytes = 0;
+       unsigned long seg;
+
+       get_dreq(dreq);
+
+       for (seg = 0; seg < nr_segs; seg++) {
+               const struct iovec *vec = &iov[seg];
+               result = nfs_direct_write_schedule_segment(dreq, vec,
+                                                          pos, sync);
+               if (result < 0)
+                       break;
+               requested_bytes += result;
+               if ((size_t)result < vec->iov_len)
+                       break;
+               pos += vec->iov_len;
+       }
+
        if (put_dreq(dreq))
-               nfs_direct_write_complete(dreq, inode);
+               nfs_direct_write_complete(dreq, dreq->inode);
 
-       if (started)
+       if (requested_bytes != 0)
                return 0;
-       return result < 0 ? (ssize_t) result : -EFAULT;
+
+       if (result < 0)
+               return result;
+       return -EIO;
 }
 
-static ssize_t nfs_direct_write(struct kiocb *iocb, unsigned long user_addr, size_t count, loff_t pos)
+static ssize_t nfs_direct_write(struct kiocb *iocb, const struct iovec *iov,
+                               unsigned long nr_segs, loff_t pos,
+                               size_t count)
 {
        ssize_t result = 0;
        sigset_t oldset;
@@ -720,10 +787,8 @@ static ssize_t nfs_direct_write(struct kiocb *iocb, unsigned long user_addr, siz
        if (!is_sync_kiocb(iocb))
                dreq->iocb = iocb;
 
-       nfs_add_stats(inode, NFSIOS_DIRECTWRITTENBYTES, count);
-
        rpc_clnt_sigmask(clnt, &oldset);
-       result = nfs_direct_write_schedule(dreq, user_addr, count, pos, sync);
+       result = nfs_direct_write_schedule_iovec(dreq, iov, nr_segs, pos, sync);
        if (!result)
                result = nfs_direct_wait(dreq);
        rpc_clnt_sigunmask(clnt, &oldset);
@@ -759,21 +824,16 @@ ssize_t nfs_file_direct_read(struct kiocb *iocb, const struct iovec *iov,
        ssize_t retval = -EINVAL;
        struct file *file = iocb->ki_filp;
        struct address_space *mapping = file->f_mapping;
-       /* XXX: temporary */
-       const char __user *buf = iov[0].iov_base;
-       size_t count = iov[0].iov_len;
+       size_t count;
+
+       count = iov_length(iov, nr_segs);
+       nfs_add_stats(mapping->host, NFSIOS_DIRECTREADBYTES, count);
 
-       dprintk("nfs: direct read(%s/%s, %lu@%Ld)\n",
+       dprintk("nfs: direct read(%s/%s, %zd@%Ld)\n",
                file->f_path.dentry->d_parent->d_name.name,
                file->f_path.dentry->d_name.name,
-               (unsigned long) count, (long long) pos);
-
-       if (nr_segs != 1)
-               goto out;
+               count, (long long) pos);
 
-       retval = -EFAULT;
-       if (!access_ok(VERIFY_WRITE, buf, count))
-               goto out;
        retval = 0;
        if (!count)
                goto out;
@@ -782,7 +842,7 @@ ssize_t nfs_file_direct_read(struct kiocb *iocb, const struct iovec *iov,
        if (retval)
                goto out;
 
-       retval = nfs_direct_read(iocb, (unsigned long) buf, count, pos);
+       retval = nfs_direct_read(iocb, iov, nr_segs, pos);
        if (retval > 0)
                iocb->ki_pos = pos + retval;
 
@@ -821,21 +881,21 @@ ssize_t nfs_file_direct_write(struct kiocb *iocb, const struct iovec *iov,
        ssize_t retval = -EINVAL;
        struct file *file = iocb->ki_filp;
        struct address_space *mapping = file->f_mapping;
-       /* XXX: temporary */
-       const char __user *buf = iov[0].iov_base;
-       size_t count = iov[0].iov_len;
+       size_t count;
+
+       count = iov_length(iov, nr_segs);
+       nfs_add_stats(mapping->host, NFSIOS_DIRECTWRITTENBYTES, count);
 
-       dprintk("nfs: direct write(%s/%s, %lu@%Ld)\n",
+       dfprintk(VFS, "nfs: direct write(%s/%s, %zd@%Ld)\n",
                file->f_path.dentry->d_parent->d_name.name,
                file->f_path.dentry->d_name.name,
-               (unsigned long) count, (long long) pos);
-
-       if (nr_segs != 1)
-               goto out;
+               count, (long long) pos);
 
        retval = generic_write_checks(file, &pos, &count, 0);
        if (retval)
                goto out;
+       if (!count)
+               goto out;       /* return 0 */
 
        retval = -EINVAL;
        if ((ssize_t) count < 0)
@@ -844,15 +904,11 @@ ssize_t nfs_file_direct_write(struct kiocb *iocb, const struct iovec *iov,
        if (!count)
                goto out;
 
-       retval = -EFAULT;
-       if (!access_ok(VERIFY_READ, buf, count))
-               goto out;
-
        retval = nfs_sync_mapping(mapping);
        if (retval)
                goto out;
 
-       retval = nfs_direct_write(iocb, (unsigned long) buf, count, pos);
+       retval = nfs_direct_write(iocb, iov, nr_segs, pos, count);
 
        if (retval > 0)
                iocb->ki_pos = pos + retval;
index 522e5ad4d8ad9b3946e201926c7f799ddf0f2e36..0ee43843f4ec40c79f1516fb869a5eb720cb355c 100644 (file)
 
 #define NFSDBG_FACILITY                NFSDBG_CLIENT
 
+/*
+ * Set the superblock root dentry.
+ * Note that this function frees the inode in case of error.
+ */
+static int nfs_superblock_set_dummy_root(struct super_block *sb, struct inode *inode)
+{
+       /* The mntroot acts as the dummy root dentry for this superblock */
+       if (sb->s_root == NULL) {
+               sb->s_root = d_alloc_root(inode);
+               if (sb->s_root == NULL) {
+                       iput(inode);
+                       return -ENOMEM;
+               }
+               /* Circumvent igrab(): we know the inode is not being freed */
+               atomic_inc(&inode->i_count);
+       }
+       return 0;
+}
+
 /*
  * get an NFS2/NFS3 root dentry from the root filehandle
  */
@@ -54,33 +73,6 @@ struct dentry *nfs_get_root(struct super_block *sb, struct nfs_fh *mntfh)
        struct inode *inode;
        int error;
 
-       /* create a dummy root dentry with dummy inode for this superblock */
-       if (!sb->s_root) {
-               struct nfs_fh dummyfh;
-               struct dentry *root;
-               struct inode *iroot;
-
-               memset(&dummyfh, 0, sizeof(dummyfh));
-               memset(&fattr, 0, sizeof(fattr));
-               nfs_fattr_init(&fattr);
-               fattr.valid = NFS_ATTR_FATTR;
-               fattr.type = NFDIR;
-               fattr.mode = S_IFDIR | S_IRUSR | S_IWUSR;
-               fattr.nlink = 2;
-
-               iroot = nfs_fhget(sb, &dummyfh, &fattr);
-               if (IS_ERR(iroot))
-                       return ERR_PTR(PTR_ERR(iroot));
-
-               root = d_alloc_root(iroot);
-               if (!root) {
-                       iput(iroot);
-                       return ERR_PTR(-ENOMEM);
-               }
-
-               sb->s_root = root;
-       }
-
        /* get the actual root for this mount */
        fsinfo.fattr = &fattr;
 
@@ -96,6 +88,10 @@ struct dentry *nfs_get_root(struct super_block *sb, struct nfs_fh *mntfh)
                return ERR_PTR(PTR_ERR(inode));
        }
 
+       error = nfs_superblock_set_dummy_root(sb, inode);
+       if (error != 0)
+               return ERR_PTR(error);
+
        /* root dentries normally start off anonymous and get spliced in later
         * if the dentry tree reaches them; however if the dentry already
         * exists, we'll pick it up at this point and use it as the root
@@ -241,33 +237,6 @@ struct dentry *nfs4_get_root(struct super_block *sb, struct nfs_fh *mntfh)
 
        dprintk("--> nfs4_get_root()\n");
 
-       /* create a dummy root dentry with dummy inode for this superblock */
-       if (!sb->s_root) {
-               struct nfs_fh dummyfh;
-               struct dentry *root;
-               struct inode *iroot;
-
-               memset(&dummyfh, 0, sizeof(dummyfh));
-               memset(&fattr, 0, sizeof(fattr));
-               nfs_fattr_init(&fattr);
-               fattr.valid = NFS_ATTR_FATTR;
-               fattr.type = NFDIR;
-               fattr.mode = S_IFDIR | S_IRUSR | S_IWUSR;
-               fattr.nlink = 2;
-
-               iroot = nfs_fhget(sb, &dummyfh, &fattr);
-               if (IS_ERR(iroot))
-                       return ERR_PTR(PTR_ERR(iroot));
-
-               root = d_alloc_root(iroot);
-               if (!root) {
-                       iput(iroot);
-                       return ERR_PTR(-ENOMEM);
-               }
-
-               sb->s_root = root;
-       }
-
        /* get the info about the server and filesystem */
        error = nfs4_server_capabilities(server, mntfh);
        if (error < 0) {
@@ -289,6 +258,10 @@ struct dentry *nfs4_get_root(struct super_block *sb, struct nfs_fh *mntfh)
                return ERR_PTR(PTR_ERR(inode));
        }
 
+       error = nfs_superblock_set_dummy_root(sb, inode);
+       if (error != 0)
+               return ERR_PTR(error);
+
        /* root dentries normally start off anonymous and get spliced in later
         * if the dentry tree reaches them; however if the dentry already
         * exists, we'll pick it up at this point and use it as the root
index fa517ae9207f6d04f66fcf4c0b12ef229bc5a176..2426e713b77f19567f82824c39126acacb59721d 100644 (file)
@@ -1054,10 +1054,11 @@ static int nfs_validate_mount_data(void *options,
 {
        struct nfs_mount_data *data = (struct nfs_mount_data *)options;
 
+       memset(args, 0, sizeof(*args));
+
        if (data == NULL)
                goto out_no_data;
 
-       memset(args, 0, sizeof(*args));
        args->flags             = (NFS_MOUNT_VER3 | NFS_MOUNT_TCP);
        args->rsize             = NFS_MAX_FILE_IO_SIZE;
        args->wsize             = NFS_MAX_FILE_IO_SIZE;
@@ -1474,6 +1475,11 @@ static int nfs_xdev_get_sb(struct file_system_type *fs_type, int flags,
                error = PTR_ERR(mntroot);
                goto error_splat_super;
        }
+       if (mntroot->d_inode->i_op != &nfs_dir_inode_operations) {
+               dput(mntroot);
+               error = -ESTALE;
+               goto error_splat_super;
+       }
 
        s->s_flags |= MS_ACTIVE;
        mnt->mnt_sb = s;
@@ -1531,10 +1537,11 @@ static int nfs4_validate_mount_data(void *options,
        struct nfs4_mount_data *data = (struct nfs4_mount_data *)options;
        char *c;
 
+       memset(args, 0, sizeof(*args));
+
        if (data == NULL)
                goto out_no_data;
 
-       memset(args, 0, sizeof(*args));
        args->rsize             = NFS_MAX_FILE_IO_SIZE;
        args->wsize             = NFS_MAX_FILE_IO_SIZE;
        args->timeo             = 600;
index 89527a487ed7d5365464bd6fe537c9014cfce117..51cc1bd6a116643067b29f4cf8549207e2088c65 100644 (file)
@@ -1436,7 +1436,8 @@ out:
        return ret;
 }
 
-int nfs_wb_page_priority(struct inode *inode, struct page *page, int how)
+static int nfs_wb_page_priority(struct inode *inode, struct page *page,
+                               int how)
 {
        loff_t range_start = page_offset(page);
        loff_t range_end = range_start + (loff_t)(PAGE_CACHE_SIZE - 1);
index 556e34ccb005f06fb52b611066a0c4db6e10a071..56f7790cad46d6bb0ca7c7805e62df8561d7dbb0 100644 (file)
@@ -1514,7 +1514,7 @@ int ocfs2_size_fits_inline_data(struct buffer_head *di_bh, u64 new_size)
 {
        struct ocfs2_dinode *di = (struct ocfs2_dinode *)di_bh->b_data;
 
-       if (new_size < le16_to_cpu(di->id2.i_data.id_count))
+       if (new_size <= le16_to_cpu(di->id2.i_data.id_count))
                return 1;
        return 0;
 }
index cd046060114ef4790a0039919bb68e3ff3ab86fd..597e064bb94fa9333ea40ad0387d7b34fa2005dc 100644 (file)
@@ -212,7 +212,7 @@ extern struct mlog_bits mlog_and_bits, mlog_not_bits;
 #define mlog_errno(st) do {                                            \
        int _st = (st);                                                 \
        if (_st != -ERESTARTSYS && _st != -EINTR &&                     \
-           _st != AOP_TRUNCATED_PAGE)                                  \
+           _st != AOP_TRUNCATED_PAGE && _st != -ENOSPC)                \
                mlog(ML_ERROR, "status = %lld\n", (long long)_st);      \
 } while (0)
 
index d84bd155997ba2e3546f0811658c4cfe8956dd75..ee50c9610e7fc1267a87d1e6d210947b0e0f4cf8 100644 (file)
 
 #include "tcp_internal.h"
 
-/* 
- * The linux network stack isn't sparse endian clean.. It has macros like
- * ntohs() which perform the endian checks and structs like sockaddr_in
- * which aren't annotated.  So __force is found here to get the build
- * clean.  When they emerge from the dark ages and annotate the code
- * we can remove these.
- */
-
 #define SC_NODEF_FMT "node %s (num %u) at %u.%u.%u.%u:%u"
 #define SC_NODEF_ARGS(sc) sc->sc_node->nd_name, sc->sc_node->nd_num,   \
                          NIPQUAD(sc->sc_node->nd_ipv4_address),        \
@@ -1500,7 +1492,7 @@ static void o2net_start_connect(struct work_struct *work)
 
        myaddr.sin_family = AF_INET;
        myaddr.sin_addr.s_addr = mynode->nd_ipv4_address;
-       myaddr.sin_port = (__force u16)htons(0); /* any port */
+       myaddr.sin_port = htons(0); /* any port */
 
        ret = sock->ops->bind(sock, (struct sockaddr *)&myaddr,
                              sizeof(myaddr));
@@ -1701,11 +1693,11 @@ static int o2net_accept_one(struct socket *sock)
        if (ret < 0)
                goto out;
 
-       node = o2nm_get_node_by_ip((__force __be32)sin.sin_addr.s_addr);
+       node = o2nm_get_node_by_ip(sin.sin_addr.s_addr);
        if (node == NULL) {
                mlog(ML_NOTICE, "attempt to connect from unknown node at "
                     "%u.%u.%u.%u:%d\n", NIPQUAD(sin.sin_addr.s_addr),
-                    ntohs((__force __be16)sin.sin_port));
+                    ntohs(sin.sin_port));
                ret = -EINVAL;
                goto out;
        }
@@ -1714,7 +1706,7 @@ static int o2net_accept_one(struct socket *sock)
                mlog(ML_NOTICE, "unexpected connect attempted from a lower "
                     "numbered node '%s' at " "%u.%u.%u.%u:%d with num %u\n",
                     node->nd_name, NIPQUAD(sin.sin_addr.s_addr),
-                    ntohs((__force __be16)sin.sin_port), node->nd_num);
+                    ntohs(sin.sin_port), node->nd_num);
                ret = -EINVAL;
                goto out;
        }
@@ -1725,7 +1717,7 @@ static int o2net_accept_one(struct socket *sock)
                mlog(ML_CONN, "attempt to connect from node '%s' at "
                     "%u.%u.%u.%u:%d but it isn't heartbeating\n",
                     node->nd_name, NIPQUAD(sin.sin_addr.s_addr),
-                    ntohs((__force __be16)sin.sin_port));
+                    ntohs(sin.sin_port));
                ret = -EINVAL;
                goto out;
        }
@@ -1742,7 +1734,7 @@ static int o2net_accept_one(struct socket *sock)
                mlog(ML_NOTICE, "attempt to connect from node '%s' at "
                     "%u.%u.%u.%u:%d but it already has an open connection\n",
                     node->nd_name, NIPQUAD(sin.sin_addr.s_addr),
-                    ntohs((__force __be16)sin.sin_port));
+                    ntohs(sin.sin_port));
                goto out;
        }
 
index 1957a5ed219e5845e88c3ec47e1b02e0b34d6a3f..9923278ea6d4df3f3ef0b9cd8247d64e86c9a849 100644 (file)
@@ -344,12 +344,24 @@ static void ocfs2_dentry_iput(struct dentry *dentry, struct inode *inode)
 {
        struct ocfs2_dentry_lock *dl = dentry->d_fsdata;
 
-       mlog_bug_on_msg(!dl && !(dentry->d_flags & DCACHE_DISCONNECTED),
-                       "dentry: %.*s\n", dentry->d_name.len,
-                       dentry->d_name.name);
+       if (!dl) {
+               /*
+                * No dentry lock is ok if we're disconnected or
+                * unhashed.
+                */
+               if (!(dentry->d_flags & DCACHE_DISCONNECTED) &&
+                   !d_unhashed(dentry)) {
+                       unsigned long long ino = 0ULL;
+                       if (inode)
+                               ino = (unsigned long long)OCFS2_I(inode)->ip_blkno;
+                       mlog(ML_ERROR, "Dentry is missing cluster lock. "
+                            "inode: %llu, d_flags: 0x%x, d_name: %.*s\n",
+                            ino, dentry->d_flags, dentry->d_name.len,
+                            dentry->d_name.name);
+               }
 
-       if (!dl)
                goto out;
+       }
 
        mlog_bug_on_msg(dl->dl_count == 0, "dentry: %.*s, count: %u\n",
                        dentry->d_name.len, dentry->d_name.name,
index 62e4a7daa286d86daf1f58d6f092c80e4149f1f0..a54d33d95ada49f6a993c0518168870e1b58c1a2 100644 (file)
@@ -908,7 +908,7 @@ lookup:
                 * but they might own this lockres.  wait on them. */
                bit = find_next_bit(dlm->recovery_map, O2NM_MAX_NODES, 0);
                if (bit < O2NM_MAX_NODES) {
-                       mlog(ML_NOTICE, "%s:%.*s: at least one node (%d) to"
+                       mlog(ML_NOTICE, "%s:%.*s: at least one node (%d) to "
                             "recover before lock mastery can begin\n",
                             dlm->name, namelen, (char *)lockid, bit);
                        wait_on_recovery = 1;
@@ -962,7 +962,7 @@ redo_request:
                spin_lock(&dlm->spinlock);
                bit = find_next_bit(dlm->recovery_map, O2NM_MAX_NODES, 0);
                if (bit < O2NM_MAX_NODES) {
-                       mlog(ML_NOTICE, "%s:%.*s: at least one node (%d) to"
+                       mlog(ML_NOTICE, "%s:%.*s: at least one node (%d) to "
                             "recover before lock mastery can begin\n",
                             dlm->name, namelen, (char *)lockid, bit);
                        wait_on_recovery = 1;
index bbac7cd33e0b453f9db0bcfe668eaa344a10f851..b75b2e1f0e42609e78768c1ab9d72c160639a139 100644 (file)
@@ -399,7 +399,7 @@ static int ocfs2_truncate_file(struct inode *inode,
 
        if (OCFS2_I(inode)->ip_dyn_features & OCFS2_INLINE_DATA_FL) {
                status = ocfs2_truncate_inline(inode, di_bh, new_i_size,
-                                              i_size_read(inode), 0);
+                                              i_size_read(inode), 1);
                if (status)
                        mlog_errno(status);
 
@@ -1521,6 +1521,7 @@ static int ocfs2_remove_inode_range(struct inode *inode,
        u32 trunc_start, trunc_len, cpos, phys_cpos, alloc_size;
        struct ocfs2_super *osb = OCFS2_SB(inode->i_sb);
        struct ocfs2_cached_dealloc_ctxt dealloc;
+       struct address_space *mapping = inode->i_mapping;
 
        ocfs2_init_dealloc_ctxt(&dealloc);
 
@@ -1529,10 +1530,20 @@ static int ocfs2_remove_inode_range(struct inode *inode,
 
        if (OCFS2_I(inode)->ip_dyn_features & OCFS2_INLINE_DATA_FL) {
                ret = ocfs2_truncate_inline(inode, di_bh, byte_start,
-                                           byte_start + byte_len, 1);
-               if (ret)
+                                           byte_start + byte_len, 0);
+               if (ret) {
                        mlog_errno(ret);
-               return ret;
+                       goto out;
+               }
+               /*
+                * There's no need to get fancy with the page cache
+                * truncate of an inline-data inode. We're talking
+                * about less than a page here, which will be cached
+                * in the dinode buffer anyway.
+                */
+               unmap_mapping_range(mapping, 0, 0, 0);
+               truncate_inode_pages(mapping, 0);
+               goto out;
        }
 
        trunc_start = ocfs2_clusters_for_bytes(osb->sb, byte_start);
index 1d5e0cb0fda1ded9ad69ae0365c9c082fc48ca55..ebb2bbe30f358b9384662ee0f3d182a74db83c66 100644 (file)
@@ -455,8 +455,8 @@ static int ocfs2_read_locked_inode(struct inode *inode,
        status = -EINVAL;
        fe = (struct ocfs2_dinode *) bh->b_data;
        if (!OCFS2_IS_VALID_DINODE(fe)) {
-               mlog(ML_ERROR, "Invalid dinode #%llu: signature = %.*s\n",
-                    (unsigned long long)le64_to_cpu(fe->i_blkno), 7,
+               mlog(0, "Invalid dinode #%llu: signature = %.*s\n",
+                    (unsigned long long)args->fi_blkno, 7,
                     fe->i_signature);
                goto bail;
        }
@@ -863,7 +863,7 @@ static int ocfs2_query_inode_wipe(struct inode *inode,
        status = ocfs2_try_open_lock(inode, 1);
        if (status == -EAGAIN) {
                status = 0;
-               mlog(0, "Skipping delete of %llu because it is in use on"
+               mlog(0, "Skipping delete of %llu because it is in use on "
                     "other nodes\n", (unsigned long long)oi->ip_blkno);
                goto bail;
        }
index d272847d5a070491d22cda6b1f0b482423b33a39..58ea88b5af36c44a25e1159f1f13e098a1dd54c4 100644 (file)
@@ -484,6 +484,7 @@ int ocfs2_reserve_local_alloc_bits(struct ocfs2_super *osb,
 
        alloc = (struct ocfs2_dinode *) osb->local_alloc_bh->b_data;
 
+#ifdef OCFS2_DEBUG_FS
        if (le32_to_cpu(alloc->id1.bitmap1.i_used) !=
            ocfs2_local_alloc_count_bits(alloc)) {
                ocfs2_error(osb->sb, "local alloc inode %llu says it has "
@@ -494,6 +495,7 @@ int ocfs2_reserve_local_alloc_bits(struct ocfs2_super *osb,
                status = -EIO;
                goto bail;
        }
+#endif
 
        free_bits = le32_to_cpu(alloc->id1.bitmap1.i_total) -
                le32_to_cpu(alloc->id1.bitmap1.i_used);
@@ -712,9 +714,8 @@ static int ocfs2_sync_local_to_main(struct ocfs2_super *osb,
        void *bitmap;
        struct ocfs2_local_alloc *la = OCFS2_LOCAL_ALLOC(alloc);
 
-       mlog_entry("total = %u, COUNT = %u, used = %u\n",
+       mlog_entry("total = %u, used = %u\n",
                   le32_to_cpu(alloc->id1.bitmap1.i_total),
-                  ocfs2_local_alloc_count_bits(alloc),
                   le32_to_cpu(alloc->id1.bitmap1.i_used));
 
        if (!alloc->id1.bitmap1.i_total) {
index be562ac3e89c25e690e2701cb500cf5c5c12ae77..5ee7754206651baceff8735e57b4b7382e2617e9 100644 (file)
@@ -438,14 +438,14 @@ unlock_osb:
        }
 
        if (!ret) {
-               if (!ocfs2_is_hard_readonly(osb))
-                       ocfs2_set_journal_params(osb);
-
                /* Only save off the new mount options in case of a successful
                 * remount. */
                osb->s_mount_opt = parsed_options.mount_opt;
                osb->s_atime_quantum = parsed_options.atime_quantum;
                osb->preferred_slot = parsed_options.slot;
+
+               if (!ocfs2_is_hard_readonly(osb))
+                       ocfs2_set_journal_params(osb);
        }
 out:
        return ret;
index eba339ecba27b58e3a39d58d54062d1bdbe3a48f..65c62e1bfd6f6cb6170c53a55c90473fe10d5e6b 100644 (file)
@@ -374,7 +374,9 @@ static cputime_t task_stime(struct task_struct *p)
        stime = nsec_to_clock_t(p->se.sum_exec_runtime) -
                        cputime_to_clock_t(task_utime(p));
 
-       p->prev_stime = max(p->prev_stime, clock_t_to_cputime(stime));
+       if (stime >= 0)
+               p->prev_stime = max(p->prev_stime, clock_t_to_cputime(stime));
+
        return p->prev_stime;
 }
 #endif
index a17c26859074e80f47088e4e5a44d900190ed66f..02a63ac04178e64c8f7e2a3bddee2fcadeaf8254 100644 (file)
@@ -2411,19 +2411,23 @@ out:
  * Find the first task with tgid >= tgid
  *
  */
-static struct task_struct *next_tgid(unsigned int tgid,
-               struct pid_namespace *ns)
-{
+struct tgid_iter {
+       unsigned int tgid;
        struct task_struct *task;
+};
+static struct tgid_iter next_tgid(struct pid_namespace *ns, struct tgid_iter iter)
+{
        struct pid *pid;
 
+       if (iter.task)
+               put_task_struct(iter.task);
        rcu_read_lock();
 retry:
-       task = NULL;
-       pid = find_ge_pid(tgid, ns);
+       iter.task = NULL;
+       pid = find_ge_pid(iter.tgid, ns);
        if (pid) {
-               tgid = pid_nr_ns(pid, ns) + 1;
-               task = pid_task(pid, PIDTYPE_PID);
+               iter.tgid = pid_nr_ns(pid, ns);
+               iter.task = pid_task(pid, PIDTYPE_PID);
                /* What we to know is if the pid we have find is the
                 * pid of a thread_group_leader.  Testing for task
                 * being a thread_group_leader is the obvious thing
@@ -2436,23 +2440,25 @@ retry:
                 * found doesn't happen to be a thread group leader.
                 * As we don't care in the case of readdir.
                 */
-               if (!task || !has_group_leader_pid(task))
+               if (!iter.task || !has_group_leader_pid(iter.task)) {
+                       iter.tgid += 1;
                        goto retry;
-               get_task_struct(task);
+               }
+               get_task_struct(iter.task);
        }
        rcu_read_unlock();
-       return task;
+       return iter;
 }
 
 #define TGID_OFFSET (FIRST_PROCESS_ENTRY + ARRAY_SIZE(proc_base_stuff))
 
 static int proc_pid_fill_cache(struct file *filp, void *dirent, filldir_t filldir,
-       struct task_struct *task, int tgid)
+       struct tgid_iter iter)
 {
        char name[PROC_NUMBUF];
-       int len = snprintf(name, sizeof(name), "%d", tgid);
+       int len = snprintf(name, sizeof(name), "%d", iter.tgid);
        return proc_fill_cache(filp, dirent, filldir, name, len,
-                               proc_pid_instantiate, task, NULL);
+                               proc_pid_instantiate, iter.task, NULL);
 }
 
 /* for the /proc/ directory itself, after non-process stuff has been done */
@@ -2460,8 +2466,7 @@ int proc_pid_readdir(struct file * filp, void * dirent, filldir_t filldir)
 {
        unsigned int nr = filp->f_pos - FIRST_PROCESS_ENTRY;
        struct task_struct *reaper = get_proc_task(filp->f_path.dentry->d_inode);
-       struct task_struct *task;
-       int tgid;
+       struct tgid_iter iter;
        struct pid_namespace *ns;
 
        if (!reaper)
@@ -2474,14 +2479,14 @@ int proc_pid_readdir(struct file * filp, void * dirent, filldir_t filldir)
        }
 
        ns = filp->f_dentry->d_sb->s_fs_info;
-       tgid = filp->f_pos - TGID_OFFSET;
-       for (task = next_tgid(tgid, ns);
-            task;
-            put_task_struct(task), task = next_tgid(tgid + 1, ns)) {
-               tgid = task_pid_nr_ns(task, ns);
-               filp->f_pos = tgid + TGID_OFFSET;
-               if (proc_pid_fill_cache(filp, dirent, filldir, task, tgid) < 0) {
-                       put_task_struct(task);
+       iter.task = NULL;
+       iter.tgid = filp->f_pos - TGID_OFFSET;
+       for (iter = next_tgid(ns, iter);
+            iter.task;
+            iter.tgid += 1, iter = next_tgid(ns, iter)) {
+               filp->f_pos = iter.tgid + TGID_OFFSET;
+               if (proc_pid_fill_cache(filp, dirent, filldir, iter) < 0) {
+                       put_task_struct(iter.task);
                        goto out;
                }
        }
index a9806bc21ec3d5480b8b6695c6d3f6fb82a203ad..6a2fe5187b6265db0c896aa9e68ec6fb7507a3a4 100644 (file)
@@ -397,8 +397,11 @@ struct dentry *proc_lookup(struct inode * dir, struct dentry *dentry, struct nam
                        if (de->namelen != dentry->d_name.len)
                                continue;
                        if (!memcmp(dentry->d_name.name, de->name, de->namelen)) {
-                               unsigned int ino = de->low_ino;
+                               unsigned int ino;
 
+                               if (de->shadow_proc)
+                                       de = de->shadow_proc(current, de);
+                               ino = de->low_ino;
                                de_get(de);
                                spin_unlock(&proc_subdir_lock);
                                error = -EINVAL;
@@ -555,41 +558,6 @@ static int proc_register(struct proc_dir_entry * dir, struct proc_dir_entry * dp
        return 0;
 }
 
-/*
- * Kill an inode that got unregistered..
- */
-static void proc_kill_inodes(struct proc_dir_entry *de)
-{
-       struct list_head *p;
-       struct super_block *sb;
-
-       /*
-        * Actually it's a partial revoke().
-        */
-       spin_lock(&sb_lock);
-       list_for_each_entry(sb, &proc_fs_type.fs_supers, s_instances) {
-               file_list_lock();
-               list_for_each(p, &sb->s_files) {
-                       struct file *filp = list_entry(p, struct file,
-                                                       f_u.fu_list);
-                       struct dentry *dentry = filp->f_path.dentry;
-                       struct inode *inode;
-                       const struct file_operations *fops;
-
-                       if (dentry->d_op != &proc_dentry_operations)
-                               continue;
-                       inode = dentry->d_inode;
-                       if (PDE(inode) != de)
-                               continue;
-                       fops = filp->f_op;
-                       filp->f_op = NULL;
-                       fops_put(fops);
-               }
-               file_list_unlock();
-       }
-       spin_unlock(&sb_lock);
-}
-
 static struct proc_dir_entry *proc_create(struct proc_dir_entry **parent,
                                          const char *name,
                                          mode_t mode,
@@ -620,6 +588,7 @@ static struct proc_dir_entry *proc_create(struct proc_dir_entry **parent,
        ent->namelen = len;
        ent->mode = mode;
        ent->nlink = nlink;
+       atomic_set(&ent->count, 1);
        ent->pde_users = 0;
        spin_lock_init(&ent->pde_unload_lock);
        ent->pde_unload_completion = NULL;
@@ -717,7 +686,6 @@ void free_proc_entry(struct proc_dir_entry *de)
 
 /*
  * Remove a /proc entry and free it if it's not currently in use.
- * If it is in use, we set the 'deleted' flag.
  */
 void remove_proc_entry(const char *name, struct proc_dir_entry *parent)
 {
@@ -764,17 +732,10 @@ void remove_proc_entry(const char *name, struct proc_dir_entry *parent)
 continue_removing:
                if (S_ISDIR(de->mode))
                        parent->nlink--;
-               if (!S_ISREG(de->mode))
-                       proc_kill_inodes(de);
                de->nlink = 0;
                WARN_ON(de->subdir);
-               if (!atomic_read(&de->count))
+               if (atomic_dec_and_test(&de->count))
                        free_proc_entry(de);
-               else {
-                       de->deleted = 1;
-                       printk("remove_proc_entry: %s/%s busy, count=%d\n",
-                               parent->name, de->name, atomic_read(&de->count));
-               }
                break;
        }
        spin_unlock(&proc_subdir_lock);
index abe6a3f04368490aa9776dbb919cd1cc5c0dd075..1a551d92e1d8304b604946d5c16da8175fabe102 100644 (file)
@@ -43,13 +43,8 @@ void de_put(struct proc_dir_entry *de)
                        return;
                }
 
-               if (atomic_dec_and_test(&de->count)) {
-                       if (de->deleted) {
-                               printk("de_put: deferred delete of %s\n",
-                                       de->name);
-                               free_proc_entry(de);
-                       }
-               }               
+               if (atomic_dec_and_test(&de->count))
+                       free_proc_entry(de);
                unlock_kernel();
        }
 }
index 1b2b6c6bb47557c2553736b063c79dc48a7a2721..1820eb2ef7623a2c222e9be9b61d0e749f259187 100644 (file)
@@ -78,5 +78,3 @@ static inline int proc_fd(struct inode *inode)
 {
        return PROC_I(inode)->fd;
 }
-
-extern struct file_system_type proc_fs_type;
index 131f9c68be5f1d3b2fa036189f7864ca371c63ae..0afe21ee0607e6b5fe883ad5a3c93a8742d8b585 100644 (file)
@@ -50,89 +50,14 @@ struct net *get_proc_net(const struct inode *inode)
 }
 EXPORT_SYMBOL_GPL(get_proc_net);
 
-static struct proc_dir_entry *proc_net_shadow;
+static struct proc_dir_entry *shadow_pde;
 
-static struct dentry *proc_net_shadow_dentry(struct dentry *parent,
+static struct proc_dir_entry *proc_net_shadow(struct task_struct *task,
                                                struct proc_dir_entry *de)
 {
-       struct dentry *shadow = NULL;
-       struct inode *inode;
-       if (!de)
-               goto out;
-       de_get(de);
-       inode = proc_get_inode(parent->d_inode->i_sb, de->low_ino, de);
-       if (!inode)
-               goto out_de_put;
-       shadow = d_alloc_name(parent, de->name);
-       if (!shadow)
-               goto out_iput;
-       shadow->d_op = parent->d_op; /* proc_dentry_operations */
-       d_instantiate(shadow, inode);
-out:
-       return shadow;
-out_iput:
-       iput(inode);
-out_de_put:
-       de_put(de);
-       goto out;
-}
-
-static void *proc_net_follow_link(struct dentry *parent, struct nameidata *nd)
-{
-       struct net *net = current->nsproxy->net_ns;
-       struct dentry *shadow;
-       shadow = proc_net_shadow_dentry(parent, net->proc_net);
-       if (!shadow)
-               return ERR_PTR(-ENOENT);
-
-       dput(nd->dentry);
-       /* My dentry count is 1 and that should be enough as the
-        * shadow dentry is thrown away immediately.
-        */
-       nd->dentry = shadow;
-       return NULL;
+       return task->nsproxy->net_ns->proc_net;
 }
 
-static struct dentry *proc_net_lookup(struct inode *dir, struct dentry *dentry,
-                                     struct nameidata *nd)
-{
-       struct net *net = current->nsproxy->net_ns;
-       struct dentry *shadow;
-
-       shadow = proc_net_shadow_dentry(nd->dentry, net->proc_net);
-       if (!shadow)
-               return ERR_PTR(-ENOENT);
-
-       dput(nd->dentry);
-       nd->dentry = shadow;
-
-       return shadow->d_inode->i_op->lookup(shadow->d_inode, dentry, nd);
-}
-
-static int proc_net_setattr(struct dentry *dentry, struct iattr *iattr)
-{
-       struct net *net = current->nsproxy->net_ns;
-       struct dentry *shadow;
-       int ret;
-
-       shadow = proc_net_shadow_dentry(dentry->d_parent, net->proc_net);
-       if (!shadow)
-               return -ENOENT;
-       ret = shadow->d_inode->i_op->setattr(shadow, iattr);
-       dput(shadow);
-       return ret;
-}
-
-static const struct file_operations proc_net_dir_operations = {
-       .read                   = generic_read_dir,
-};
-
-static struct inode_operations proc_net_dir_inode_operations = {
-       .follow_link    = proc_net_follow_link,
-       .lookup         = proc_net_lookup,
-       .setattr        = proc_net_setattr,
-};
-
 static __net_init int proc_net_ns_init(struct net *net)
 {
        struct proc_dir_entry *root, *netd, *net_statd;
@@ -185,9 +110,8 @@ static struct pernet_operations __net_initdata proc_net_ns_ops = {
 
 int __init proc_net_init(void)
 {
-       proc_net_shadow = proc_mkdir("net", NULL);
-       proc_net_shadow->proc_iops = &proc_net_dir_inode_operations;
-       proc_net_shadow->proc_fops = &proc_net_dir_operations;
+       shadow_pde = proc_mkdir("net", NULL);
+       shadow_pde->shadow_proc = proc_net_shadow;
 
        return register_pernet_subsys(&proc_net_ns_ops);
 }
index 1f86bb860e049888f96d438acf68d3ea53a25188..81f99e691f99014eeaefb8cefa0c582719074a39 100644 (file)
@@ -98,7 +98,7 @@ static void proc_kill_sb(struct super_block *sb)
        put_pid_ns(ns);
 }
 
-struct file_system_type proc_fs_type = {
+static struct file_system_type proc_fs_type = {
        .name           = "proc",
        .get_sb         = proc_get_sb,
        .kill_sb        = proc_kill_sb,
@@ -207,6 +207,7 @@ struct proc_dir_entry proc_root = {
        .name           = "/proc",
        .mode           = S_IFDIR | S_IRUGO | S_IXUGO, 
        .nlink          = 2, 
+       .count          = ATOMIC_INIT(1),
        .proc_iops      = &proc_root_inode_operations, 
        .proc_fops      = &proc_root_operations,
        .parent         = &proc_root,
index 9aa7a06e093f0a8bd6b48016387ef41128d4b92a..001144621672793c2cb3fd58e3604a990c093312 100644 (file)
@@ -420,12 +420,6 @@ static void *r_start(struct seq_file *m, loff_t * pos)
                return NULL;
 
        up_write(&s->s_umount);
-
-       if (de->deleted) {
-               deactivate_super(s);
-               return NULL;
-       }
-
        return s;
 }
 
index 27d1785b764463c4bc654e9713f41c369d9ea0cb..4045bdcc4b331dbf7f4cdd7c6d781f16021ffbf2 100644 (file)
@@ -119,7 +119,11 @@ static int fill_read_buffer(struct dentry * dentry, struct sysfs_buffer * buffer
 
        sysfs_put_active_two(attr_sd);
 
-       BUG_ON(count > (ssize_t)PAGE_SIZE);
+       /*
+        * The code works fine with PAGE_SIZE return but it's likely to
+        * indicate truncated result or overflow in normal use cases.
+        */
+       BUG_ON(count >= (ssize_t)PAGE_SIZE);
        if (count >= 0) {
                buffer->needs_read_fill = 0;
                buffer->count = count;
index 30f8c2bb0c3e7a4c4aa29e86ae2ffdfc3cd9e00c..aaf2878305ceb6b0108ebb5a0ea832504cd43e54 100644 (file)
@@ -179,7 +179,7 @@ bad_entry:
        goto fail;
 Eend:
        p = (struct ufs_dir_entry *)(kaddr + offs);
-       ufs_error (sb, "ext2_check_page",
+       ufs_error(sb, __FUNCTION__,
                   "entry in directory #%lu spans the page boundary"
                   "offset=%lu",
                   dir->i_ino, (page->index<<PAGE_CACHE_SHIFT)+offs);
index c78c04fd993fe5fe1b95186d8f4d33ecdcf7e8ad..0072cb33ebec5da2f682574fbb36e809d0f1beb9 100644 (file)
@@ -755,13 +755,13 @@ static int ufs_fill_super(struct super_block *sb, void *data, int silent)
                break;
        
        case UFS_MOUNT_UFSTYPE_NEXTSTEP:
-               /*TODO: check may be we need set special dir block size?*/
                UFSD("ufstype=nextstep\n");
                uspi->s_fsize = block_size = 1024;
                uspi->s_fmask = ~(1024 - 1);
                uspi->s_fshift = 10;
                uspi->s_sbsize = super_block_size = 2048;
                uspi->s_sbbase = 0;
+               uspi->s_dirblksize = 1024;
                flags |= UFS_DE_OLD | UFS_UID_OLD | UFS_ST_OLD | UFS_CG_OLD;
                if (!(sb->s_flags & MS_RDONLY)) {
                        if (!silent)
@@ -771,13 +771,13 @@ static int ufs_fill_super(struct super_block *sb, void *data, int silent)
                break;
        
        case UFS_MOUNT_UFSTYPE_NEXTSTEP_CD:
-               /*TODO: check may be we need set special dir block size?*/
                UFSD("ufstype=nextstep-cd\n");
                uspi->s_fsize = block_size = 2048;
                uspi->s_fmask = ~(2048 - 1);
                uspi->s_fshift = 11;
                uspi->s_sbsize = super_block_size = 2048;
                uspi->s_sbbase = 0;
+               uspi->s_dirblksize = 1024;
                flags |= UFS_DE_OLD | UFS_UID_OLD | UFS_ST_OLD | UFS_CG_OLD;
                if (!(sb->s_flags & MS_RDONLY)) {
                        if (!silent)
index b9c8589e05c2e937de37db78f1ea1f532c773f01..a49dd8d4b06974c9a9b8b20ca19bc0663dfe0471 100644 (file)
@@ -725,15 +725,15 @@ xfs_buf_associate_memory(
 {
        int                     rval;
        int                     i = 0;
-       size_t                  ptr;
-       size_t                  end, end_cur;
-       off_t                   offset;
+       unsigned long           pageaddr;
+       unsigned long           offset;
+       size_t                  buflen;
        int                     page_count;
 
-       page_count = PAGE_CACHE_ALIGN(len) >> PAGE_CACHE_SHIFT;
-       offset = (off_t) mem - ((off_t)mem & PAGE_CACHE_MASK);
-       if (offset && (len > PAGE_CACHE_SIZE))
-               page_count++;
+       pageaddr = (unsigned long)mem & PAGE_CACHE_MASK;
+       offset = (unsigned long)mem - pageaddr;
+       buflen = PAGE_CACHE_ALIGN(len + offset);
+       page_count = buflen >> PAGE_CACHE_SHIFT;
 
        /* Free any previous set of page pointers */
        if (bp->b_pages)
@@ -747,22 +747,15 @@ xfs_buf_associate_memory(
                return rval;
 
        bp->b_offset = offset;
-       ptr = (size_t) mem & PAGE_CACHE_MASK;
-       end = PAGE_CACHE_ALIGN((size_t) mem + len);
-       end_cur = end;
-       /* set up first page */
-       bp->b_pages[0] = mem_to_page(mem);
-
-       ptr += PAGE_CACHE_SIZE;
-       bp->b_page_count = ++i;
-       while (ptr < end) {
-               bp->b_pages[i] = mem_to_page((void *)ptr);
-               bp->b_page_count = ++i;
-               ptr += PAGE_CACHE_SIZE;
+
+       for (i = 0; i < bp->b_page_count; i++) {
+               bp->b_pages[i] = mem_to_page((void *)pageaddr);
+               pageaddr += PAGE_CACHE_SIZE;
        }
        bp->b_locked = 0;
 
-       bp->b_count_desired = bp->b_buffer_length = len;
+       bp->b_count_desired = len;
+       bp->b_buffer_length = buflen;
        bp->b_flags |= XBF_MAPPED;
 
        return 0;
@@ -1032,7 +1025,7 @@ xfs_buf_ioend(
        xfs_buf_t               *bp,
        int                     schedule)
 {
-       bp->b_flags &= ~(XBF_READ | XBF_WRITE);
+       bp->b_flags &= ~(XBF_READ | XBF_WRITE | XBF_READ_AHEAD);
        if (bp->b_error == 0)
                bp->b_flags |= XBF_DONE;
 
@@ -1750,6 +1743,8 @@ xfsbufd(
 
        current->flags |= PF_MEMALLOC;
 
+       set_freezable();
+
        do {
                if (unlikely(freezing(current))) {
                        set_bit(XBT_FORCE_SLEEP, &target->bt_flags);
index fb8dd34041eb1cfec27efb511c10b27613a95d42..54c564693d93d287fb030b6f44e945838b35b85f 100644 (file)
@@ -218,6 +218,15 @@ xfs_vm_fault(
 }
 #endif /* CONFIG_XFS_DMAPI */
 
+/*
+ * Unfortunately we can't just use the clean and simple readdir implementation
+ * below, because nfs might call back into ->lookup from the filldir callback
+ * and that will deadlock the low-level btree code.
+ *
+ * Hopefully we'll find a better workaround that allows to use the optimal
+ * version at least for local readdirs for 2.6.25.
+ */
+#if 0
 STATIC int
 xfs_file_readdir(
        struct file     *filp,
@@ -249,6 +258,121 @@ xfs_file_readdir(
                return -error;
        return 0;
 }
+#else
+
+struct hack_dirent {
+       int             namlen;
+       loff_t          offset;
+       u64             ino;
+       unsigned int    d_type;
+       char            name[];
+};
+
+struct hack_callback {
+       char            *dirent;
+       size_t          len;
+       size_t          used;
+};
+
+STATIC int
+xfs_hack_filldir(
+       void            *__buf,
+       const char      *name,
+       int             namlen,
+       loff_t          offset,
+       u64             ino,
+       unsigned int    d_type)
+{
+       struct hack_callback *buf = __buf;
+       struct hack_dirent *de = (struct hack_dirent *)(buf->dirent + buf->used);
+
+       if (buf->used + sizeof(struct hack_dirent) + namlen > buf->len)
+               return -EINVAL;
+
+       de->namlen = namlen;
+       de->offset = offset;
+       de->ino = ino;
+       de->d_type = d_type;
+       memcpy(de->name, name, namlen);
+       buf->used += sizeof(struct hack_dirent) + namlen;
+       return 0;
+}
+
+STATIC int
+xfs_file_readdir(
+       struct file     *filp,
+       void            *dirent,
+       filldir_t       filldir)
+{
+       struct inode    *inode = filp->f_path.dentry->d_inode;
+       xfs_inode_t     *ip = XFS_I(inode);
+       struct hack_callback buf;
+       struct hack_dirent *de;
+       int             error;
+       loff_t          size;
+       int             eof = 0;
+       xfs_off_t       start_offset, curr_offset, offset;
+
+       /*
+        * Try fairly hard to get memory
+        */
+       buf.len = PAGE_CACHE_SIZE;
+       do {
+               buf.dirent = kmalloc(buf.len, GFP_KERNEL);
+               if (buf.dirent)
+                       break;
+               buf.len >>= 1;
+       } while (buf.len >= 1024);
+
+       if (!buf.dirent)
+               return -ENOMEM;
+
+       curr_offset = filp->f_pos;
+       if (curr_offset == 0x7fffffff)
+               offset = 0xffffffff;
+       else
+               offset = filp->f_pos;
+
+       while (!eof) {
+               int reclen;
+               start_offset = offset;
+
+               buf.used = 0;
+               error = -xfs_readdir(ip, &buf, buf.len, &offset,
+                                    xfs_hack_filldir);
+               if (error || offset == start_offset) {
+                       size = 0;
+                       break;
+               }
+
+               size = buf.used;
+               de = (struct hack_dirent *)buf.dirent;
+               while (size > 0) {
+                       if (filldir(dirent, de->name, de->namlen,
+                                       curr_offset & 0x7fffffff,
+                                       de->ino, de->d_type)) {
+                               goto done;
+                       }
+
+                       reclen = sizeof(struct hack_dirent) + de->namlen;
+                       size -= reclen;
+                       curr_offset = de->offset /* & 0x7fffffff */;
+                       de = (struct hack_dirent *)((char *)de + reclen);
+               }
+       }
+
+ done:
+       if (!error) {
+               if (size == 0)
+                       filp->f_pos = offset & 0x7fffffff;
+               else if (de)
+                       filp->f_pos = curr_offset;
+       }
+
+       kfree(buf.dirent);
+       return error;
+}
+#endif
 
 STATIC int
 xfs_file_mmap(
index 2b34bad48b079c73da80bc47c696d92a51198bd4..98a56568bb24a942640729e47bd5d0e6a6d2234f 100644 (file)
@@ -1047,24 +1047,20 @@ xfs_ioc_bulkstat(
        if ((count = bulkreq.icount) <= 0)
                return -XFS_ERROR(EINVAL);
 
+       if (bulkreq.ubuffer == NULL)
+               return -XFS_ERROR(EINVAL);
+
        if (cmd == XFS_IOC_FSINUMBERS)
                error = xfs_inumbers(mp, &inlast, &count,
                                        bulkreq.ubuffer, xfs_inumbers_fmt);
        else if (cmd == XFS_IOC_FSBULKSTAT_SINGLE)
                error = xfs_bulkstat_single(mp, &inlast,
                                                bulkreq.ubuffer, &done);
-       else {  /* XFS_IOC_FSBULKSTAT */
-               if (count == 1 && inlast != 0) {
-                       inlast++;
-                       error = xfs_bulkstat_single(mp, &inlast,
-                                       bulkreq.ubuffer, &done);
-               } else {
-                       error = xfs_bulkstat(mp, &inlast, &count,
-                               (bulkstat_one_pf)xfs_bulkstat_one, NULL,
-                               sizeof(xfs_bstat_t), bulkreq.ubuffer,
-                               BULKSTAT_FG_QUICK, &done);
-               }
-       }
+       else    /* XFS_IOC_FSBULKSTAT */
+               error = xfs_bulkstat(mp, &inlast, &count,
+                       (bulkstat_one_pf)xfs_bulkstat_one, NULL,
+                       sizeof(xfs_bstat_t), bulkreq.ubuffer,
+                       BULKSTAT_FG_QUICK, &done);
 
        if (error)
                return -error;
index 0046bdd5b7f11df4bf077e5144e306f01608e6ee..bf2a956b63c28490f4eae13cd8d58a09df17ce81 100644 (file)
@@ -291,6 +291,9 @@ xfs_ioc_bulkstat_compat(
        if ((count = bulkreq.icount) <= 0)
                return -XFS_ERROR(EINVAL);
 
+       if (bulkreq.ubuffer == NULL)
+               return -XFS_ERROR(EINVAL);
+
        if (cmd == XFS_IOC_FSINUMBERS)
                error = xfs_inumbers(mp, &inlast, &count,
                                bulkreq.ubuffer, xfs_inumbers_fmt_compat);
index ac50f8a37582acac8089ccbd7bbf382815b8e81d..37e116779eb187945edba30b9322b9b708518b5a 100644 (file)
@@ -117,7 +117,7 @@ xfs_ichgtime(
         */
        SYNCHRONIZE();
        ip->i_update_core = 1;
-       if (!(inode->i_state & I_SYNC))
+       if (!(inode->i_state & I_NEW))
                mark_inode_dirty_sync(inode);
 }
 
@@ -169,7 +169,7 @@ xfs_ichgtime_fast(
         */
        SYNCHRONIZE();
        ip->i_update_core = 1;
-       if (!(inode->i_state & I_SYNC))
+       if (!(inode->i_state & I_NEW))
                mark_inode_dirty_sync(inode);
 }
 
index b5f91281b70715e9d27c41b20d2d098b60689dc5..d488645f833d709f59fdb940bb6112e72d664655 100644 (file)
@@ -1008,6 +1008,9 @@ xfs_qm_sync(
        boolean_t       nowait;
        int             error;
 
+       if (! XFS_IS_QUOTA_ON(mp))
+               return 0;
+
        restarts = 0;
        /*
         * We won't block unless we are asked to.
index 488836e204a3493f968a9e473ce1b00eca67823d..fb69ef180b275f9d0300dc5faa23483e7936f5e7 100644 (file)
@@ -267,7 +267,7 @@ finish_inode:
        icl = NULL;
        if (radix_tree_gang_lookup(&pag->pag_ici_root, (void**)&iq,
                                                        first_index, 1)) {
-               if ((iq->i_ino & mask) == first_index)
+               if ((XFS_INO_TO_AGINO(mp, iq->i_ino) & mask) == first_index)
                        icl = iq->i_cluster;
        }
 
index 9972992fd3c3ced53433cc81460ceba6ea7eaf8e..9fc4c288652980e4d81c2da25fc5470f13d8b664 100644 (file)
@@ -316,6 +316,8 @@ xfs_bulkstat_use_dinode(
        return 1;
 }
 
+#define XFS_BULKSTAT_UBLEFT(ubleft)    ((ubleft) >= statstruct_size)
+
 /*
  * Return stat information in bulk (by-inode) for the filesystem.
  */
@@ -353,7 +355,7 @@ xfs_bulkstat(
        xfs_inobt_rec_incore_t  *irbp;  /* current irec buffer pointer */
        xfs_inobt_rec_incore_t  *irbuf; /* start of irec buffer */
        xfs_inobt_rec_incore_t  *irbufend; /* end of good irec buffer entries */
-       xfs_ino_t               lastino=0; /* last inode number returned */
+       xfs_ino_t               lastino; /* last inode number returned */
        int                     nbcluster; /* # of blocks in a cluster */
        int                     nicluster; /* # of inodes in a cluster */
        int                     nimask; /* mask for inode clusters */
@@ -373,6 +375,7 @@ xfs_bulkstat(
         * Get the last inode value, see if there's nothing to do.
         */
        ino = (xfs_ino_t)*lastinop;
+       lastino = ino;
        dip = NULL;
        agno = XFS_INO_TO_AGNO(mp, ino);
        agino = XFS_INO_TO_AGINO(mp, ino);
@@ -382,6 +385,9 @@ xfs_bulkstat(
                *ubcountp = 0;
                return 0;
        }
+       if (!ubcountp || *ubcountp <= 0) {
+               return EINVAL;
+       }
        ubcount = *ubcountp; /* statstruct's */
        ubleft = ubcount * statstruct_size; /* bytes */
        *ubcountp = ubelem = 0;
@@ -402,7 +408,8 @@ xfs_bulkstat(
         * inode returned; 0 means start of the allocation group.
         */
        rval = 0;
-       while (ubleft >= statstruct_size && agno < mp->m_sb.sb_agcount) {
+       while (XFS_BULKSTAT_UBLEFT(ubleft) && agno < mp->m_sb.sb_agcount) {
+               cond_resched();
                bp = NULL;
                down_read(&mp->m_peraglock);
                error = xfs_ialloc_read_agi(mp, NULL, agno, &agbp);
@@ -499,6 +506,7 @@ xfs_bulkstat(
                                        break;
                                error = xfs_inobt_lookup_ge(cur, agino, 0, 0,
                                                            &tmp);
+                               cond_resched();
                        }
                        /*
                         * If ran off the end of the ag either with an error,
@@ -542,6 +550,7 @@ xfs_bulkstat(
                         */
                        agino = gino + XFS_INODES_PER_CHUNK;
                        error = xfs_inobt_increment(cur, 0, &tmp);
+                       cond_resched();
                }
                /*
                 * Drop the btree buffers and the agi buffer.
@@ -555,12 +564,12 @@ xfs_bulkstat(
                 */
                irbufend = irbp;
                for (irbp = irbuf;
-                    irbp < irbufend && ubleft >= statstruct_size; irbp++) {
+                    irbp < irbufend && XFS_BULKSTAT_UBLEFT(ubleft); irbp++) {
                        /*
                         * Now process this chunk of inodes.
                         */
                        for (agino = irbp->ir_startino, chunkidx = clustidx = 0;
-                            ubleft > 0 &&
+                            XFS_BULKSTAT_UBLEFT(ubleft) &&
                                irbp->ir_freecount < XFS_INODES_PER_CHUNK;
                             chunkidx++, clustidx++, agino++) {
                                ASSERT(chunkidx < XFS_INODES_PER_CHUNK);
@@ -663,15 +672,13 @@ xfs_bulkstat(
                                                ubleft, private_data,
                                                bno, &ubused, dip, &fmterror);
                                if (fmterror == BULKSTAT_RV_NOTHING) {
-                                        if (error == EFAULT) {
-                                                ubleft = 0;
-                                                rval = error;
-                                                break;
-                                        }
-                                       else if (error == ENOMEM)
+                                       if (error && error != ENOENT &&
+                                               error != EINVAL) {
                                                ubleft = 0;
-                                       else
-                                               lastino = ino;
+                                               rval = error;
+                                               break;
+                                       }
+                                       lastino = ino;
                                        continue;
                                }
                                if (fmterror == BULKSTAT_RV_GIVEUP) {
@@ -686,6 +693,8 @@ xfs_bulkstat(
                                ubelem++;
                                lastino = ino;
                        }
+
+                       cond_resched();
                }
 
                if (bp)
@@ -694,11 +703,12 @@ xfs_bulkstat(
                /*
                 * Set up for the next loop iteration.
                 */
-               if (ubleft > 0) {
+               if (XFS_BULKSTAT_UBLEFT(ubleft)) {
                        if (end_of_ag) {
                                agno++;
                                agino = 0;
-                       }
+                       } else
+                               agino = XFS_INO_TO_AGINO(mp, lastino);
                } else
                        break;
        }
@@ -707,6 +717,11 @@ xfs_bulkstat(
         */
        kmem_free(irbuf, irbsize);
        *ubcountp = ubelem;
+       /*
+        * Found some inodes, return them now and return the error next time.
+        */
+       if (ubelem)
+               rval = 0;
        if (agno >= mp->m_sb.sb_agcount) {
                /*
                 * If we ran out of filesystem, mark lastino as off
index 26d79f6db8a044490c95c8752a40a9fa4c68eff5..76411b1fc4fd4778e2e35cda00da46ead7b7dd5e 100644 (file)
@@ -78,7 +78,6 @@ struct acpi_processor_cx {
 struct acpi_processor_power {
        struct cpuidle_device dev;
        struct acpi_processor_cx *state;
-       struct acpi_processor_cx *bm_state;
        unsigned long bm_check_timestamp;
        u32 default_state;
        u32 bm_activity;
index c0d7075982c16d9dee7884c8b0c29080de97b559..79054965baa636c41582d928a29def0c63286477 100644 (file)
@@ -33,6 +33,7 @@
 
 #include <linux/mtd/partitions.h>
 #include <linux/device.h>
+#include <linux/i2c.h>
 #include <linux/spi/spi.h>
 
  /* USB Device */
@@ -94,7 +95,7 @@ struct at91_nand_data {
 extern void __init at91_add_device_nand(struct at91_nand_data *data);
 
  /* I2C*/
-extern void __init at91_add_device_i2c(void);
+extern void __init at91_add_device_i2c(struct i2c_board_info *devices, int nr_devices);
 
  /* SPI */
 extern void __init at91_add_device_spi(struct spi_board_info *devices, int nr_devices);
index e6963958572167bbc515d07302fa1c8253f47004..27c580898958f2ab96551b1417df33ce86f9179a 100644 (file)
  */
 #define NR_IXP23XX_MACH_IRQS           32
 
-#define NR_IRQS                                NR_IXP23XX_IRQS + NR_IXP23XX_MACH_IRQS
+#define NR_IRQS                                (NR_IXP23XX_IRQS + NR_IXP23XX_MACH_IRQS)
 
 #define IXP23XX_MACH_IRQ(irq)          (NR_IXP23XX_IRQ + (irq))
 
index b3cf33441f6e6915e991d6fa9e1cad314343d8b2..56d2c98e143c6abfcdbdd8c48314654cba16ee4e 100644 (file)
@@ -37,7 +37,7 @@
 #define OMAP1510P1_EMIFF_PRI_VALUE             0x00
 
 #define NR_FPGA_IRQS           24
-#define NR_IRQS                 IH_BOARD_BASE + NR_FPGA_IRQS
+#define NR_IRQS                 (IH_BOARD_BASE + NR_FPGA_IRQS)
 
 #ifndef __ASSEMBLY__
 void fpga_write(unsigned char val, int reg);
index 6238dbf7a2361ce0a628ee3a2e16b8c4093f2fbb..b76ee6d1f5b44b7949a29504561086aa41ef6c92 100644 (file)
@@ -13,7 +13,7 @@
 
 #define PXA_IRQ(x)     (x)
 
-#ifdef CONFIG_PXA27x
+#if defined(CONFIG_PXA27x) || defined(CONFIG_PXA3xx)
 #define IRQ_SSP3       PXA_IRQ(0)      /* SSP3 service request */
 #define IRQ_MSL                PXA_IRQ(1)      /* MSL Interface interrupt */
 #define IRQ_USBH2      PXA_IRQ(2)      /* USB Host interrupt 1 (OHCI) */
 #define        IRQ_RTC1Hz      PXA_IRQ(30)     /* RTC HZ Clock Tick */
 #define        IRQ_RTCAlrm     PXA_IRQ(31)     /* RTC Alarm */
 
-#ifdef CONFIG_PXA27x
+#if defined(CONFIG_PXA27x) || defined(CONFIG_PXA3xx)
 #define IRQ_TPM                PXA_IRQ(32)     /* TPM interrupt */
 #define IRQ_CAMERA     PXA_IRQ(33)     /* Camera Interface */
 #endif
 
+#ifdef CONFIG_PXA3xx
+#define IRQ_SSP4       PXA_IRQ(13)     /* SSP4 service request */
+#define IRQ_CIR                PXA_IRQ(34)     /* Consumer IR */
+#define IRQ_TSI                PXA_IRQ(36)     /* Touch Screen Interface (PXA320) */
+#define IRQ_USIM2      PXA_IRQ(38)     /* USIM2 Controller */
+#define IRQ_GRPHICS    PXA_IRQ(39)     /* Graphics Controller */
+#define IRQ_MMC2       PXA_IRQ(41)     /* MMC2 Controller */
+#define IRQ_1WIRE      PXA_IRQ(44)     /* 1-Wire Controller */
+#define IRQ_NAND       PXA_IRQ(45)     /* NAND Controller */
+#define IRQ_USB2       PXA_IRQ(46)     /* USB 2.0 Device Controller */
+#define IRQ_WAKEUP0    PXA_IRQ(49)     /* EXT_WAKEUP0 */
+#define IRQ_WAKEUP1    PXA_IRQ(50)     /* EXT_WAKEUP1 */
+#define IRQ_DMEMC      PXA_IRQ(51)     /* Dynamic Memory Controller */
+#define IRQ_MMC3       PXA_IRQ(55)     /* MMC3 Controller (PXA310) */
+#endif
+
 #define PXA_GPIO_IRQ_BASE      (64)
 #define PXA_GPIO_IRQ_NUM       (128)
 
index 822a27cd7864e3e6e7b8978424ed4ce1406aa80e..a209966498897848f319e7d340efdee8a255b3f0 100644 (file)
 #define GPIO62_LCD_CS_N                MFP_CFG_DRV(GPIO62, AF2, DS01X)
 #define GPIO72_LCD_FCLK                MFP_CFG_DRV(GPIO72, AF1, DS01X)
 #define GPIO73_LCD_LCLK                MFP_CFG_DRV(GPIO73, AF1, DS01X)
-#define GPIO74_LCD_PCLK                MFP_CFG_DRV(GPIO74, AF1, DS01X)
+#define GPIO74_LCD_PCLK                MFP_CFG_DRV(GPIO74, AF1, DS02X)
 #define GPIO75_LCD_BIAS                MFP_CFG_DRV(GPIO75, AF1, DS01X)
 #define GPIO76_LCD_VSYNC       MFP_CFG_DRV(GPIO76, AF2, DS01X)
 
index 488a5bbc49e994ac1d65a7db3445baa9f2696459..52deedcaf3bd5fe3ebb9aa966302b49e3b729bc0 100644 (file)
@@ -18,7 +18,7 @@
 #include <asm/arch/mfp.h>
 
 /* GPIO */
-#define GPIO46_GPIO            MFP_CFG(GPIO6, AF0)
+#define GPIO46_GPIO            MFP_CFG(GPIO46, AF0)
 #define GPIO49_GPIO            MFP_CFG(GPIO49, AF0)
 #define GPIO50_GPIO            MFP_CFG(GPIO50, AF0)
 #define GPIO51_GPIO            MFP_CFG(GPIO51, AF0)
index ac4157af5a8e5878a2883358fb9c5bb5e499b21b..03c508d94f0e86c2b8b3633a1fa2aed18df89a80 100644 (file)
@@ -346,23 +346,31 @@ typedef uint32_t mfp_cfg_t;
 #define MFP_CFG_PIN(mfp_cfg)   (((mfp_cfg) >> 16) & 0xffff)
 #define MFP_CFG_VAL(mfp_cfg)   ((mfp_cfg) & 0xffff)
 
-#define MFPR_DEFAULT   (0x0000)
+/*
+ * MFP register defaults to
+ *   drive strength fast 3mA (010'b)
+ *   edge detection logic disabled
+ *   alternate function 0
+ */
+#define MFPR_DEFAULT   (0x0840)
 
 #define MFP_CFG(pin, af)               \
        ((MFP_PIN_##pin << 16) | MFPR_DEFAULT | (MFP_##af))
 
 #define MFP_CFG_DRV(pin, af, drv)      \
-       ((MFP_PIN_##pin << 16) | MFPR_DEFAULT |\
+       ((MFP_PIN_##pin << 16) | (MFPR_DEFAULT & ~MFPR_DRV_MASK) |\
         ((MFP_##drv) << 10) | (MFP_##af))
 
 #define MFP_CFG_LPM(pin, af, lpm)      \
-       ((MFP_PIN_##pin << 16) | MFPR_DEFAULT | (MFP_##af) |\
+       ((MFP_PIN_##pin << 16) | (MFPR_DEFAULT & ~MFPR_LPM_MASK) |\
         (((MFP_LPM_##lpm) & 0x3) << 7)  |\
         (((MFP_LPM_##lpm) & 0x4) << 12) |\
-        (((MFP_LPM_##lpm) & 0x8) << 10))
+        (((MFP_LPM_##lpm) & 0x8) << 10) |\
+        (MFP_##af))
 
 #define MFP_CFG_X(pin, af, drv, lpm)   \
-       ((MFP_PIN_##pin << 16) | MFPR_DEFAULT |\
+       ((MFP_PIN_##pin << 16) |\
+        (MFPR_DEFAULT & ~(MFPR_DRV_MASK | MFPR_LPM_MASK)) |\
         ((MFP_##drv) << 10) | (MFP_##af) |\
         (((MFP_LPM_##lpm) & 0x3) << 7)  |\
         (((MFP_LPM_##lpm) & 0x4) << 12) |\
index bb68b598c4360ab4d7d81463534238cfa42651cf..6b33df6f1995055e9e0b38de9e67b0da13961a65 100644 (file)
 #define DALGN          __REG(0x400000a0)  /* DMA Alignment Register */
 #define DINT           __REG(0x400000f0)  /* DMA Interrupt Register */
 
-#define DRCMR(n)       __REG2(0x40000100, (n)<<2)
+#define DRCMR(n)       (*(((n) < 64) ? \
+                       &__REG2(0x40000100, ((n) & 0x3f) << 2) : \
+                       &__REG2(0x40001100, ((n) & 0x3f) << 2)))
+
 #define DRCMR0         __REG(0x40000100)  /* Request to Channel Map Register for DREQ 0 */
 #define DRCMR1         __REG(0x40000104)  /* Request to Channel Map Register for DREQ 1 */
 #define DRCMR2         __REG(0x40000108)  /* Request to Channel Map Register for I2S receive Request */
index c1e4db7c971039e95b51c4b1db733b32b8cea458..ba1dca88d48069dcb59040001b796c4b6c24399e 100644 (file)
@@ -21,6 +21,8 @@ struct s3c2410_spigpio_info {
        unsigned long            pin_mosi;
        unsigned long            pin_miso;
 
+       int                      bus_num;
+
        unsigned long            board_size;
        struct spi_board_info   *board_info;
 
index dfaaa88cd412bc402fb339cb8ffb516df567426b..670674749b20eb2d96b922e5478d9bd7bfd10381 100644 (file)
@@ -116,15 +116,16 @@ extern void flush_icache_page(struct vm_area_struct *vma, struct page *page);
  * flush with all configurations.
  */
 extern void flush_icache_range(unsigned long start, unsigned long end);
-extern void flush_icache_user_range(struct vm_area_struct *vma,
-                                   struct page *page,
-                                   unsigned long addr, int len);
 
-#define copy_to_user_page(vma, page, vaddr, dst, src, len) do {        \
-       memcpy(dst, src, len);                                  \
-       flush_icache_user_range(vma, page, vaddr, len);         \
-} while(0)
-#define copy_from_user_page(vma, page, vaddr, dst, src, len)   \
-       memcpy(dst, src, len)
+extern void copy_to_user_page(struct vm_area_struct *vma, struct page *page,
+               unsigned long vaddr, void *dst, const void *src,
+               unsigned long len);
+
+static inline void copy_from_user_page(struct vm_area_struct *vma,
+               struct page *page, unsigned long vaddr, void *dst,
+               const void *src, unsigned long len)
+{
+       memcpy(dst, src, len);
+}
 
 #endif /* __ASM_AVR32_CACHEFLUSH_H */
index 46f73180a127604e6a0d54f9953579e86ae7c900..996405e0393f8e999289d503d2902d9e50a47e6e 100644 (file)
@@ -1,7 +1,7 @@
 /*
- * AVR32 OCD Registers
+ * AVR32 OCD Interface and register definitions
  *
- * Copyright (C) 2004-2006 Atmel Corporation
+ * Copyright (C) 2004-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
 #ifndef __ASM_AVR32_OCD_H
 #define __ASM_AVR32_OCD_H
 
-/* Debug Registers */
-#define DBGREG_DID               0
-#define DBGREG_DC                8
-#define DBGREG_DS               16
-#define DBGREG_RWCS             28
-#define DBGREG_RWA              36
-#define DBGREG_RWD              40
-#define DBGREG_WT               44
-#define DBGREG_DTC              52
-#define DBGREG_DTSA0            56
-#define DBGREG_DTSA1            60
-#define DBGREG_DTEA0            72
-#define DBGREG_DTEA1            76
-#define DBGREG_BWC0A            88
-#define DBGREG_BWC0B            92
-#define DBGREG_BWC1A            96
-#define DBGREG_BWC1B           100
-#define DBGREG_BWC2A           104
-#define DBGREG_BWC2B           108
-#define DBGREG_BWC3A           112
-#define DBGREG_BWC3B           116
-#define DBGREG_BWA0A           120
-#define DBGREG_BWA0B           124
-#define DBGREG_BWA1A           128
-#define DBGREG_BWA1B           132
-#define DBGREG_BWA2A           136
-#define DBGREG_BWA2B           140
-#define DBGREG_BWA3A           144
-#define DBGREG_BWA3B           148
-#define DBGREG_BWD3A           153
-#define DBGREG_BWD3B           156
-
-#define DBGREG_PID             284
-
-#define SABAH_OCD              0x01
-#define SABAH_ICACHE           0x02
-#define SABAH_MEM_CACHED       0x04
-#define SABAH_MEM_UNCACHED     0x05
-
-/* Fields in the Development Control register */
-#define DC_SS_BIT              8
-
-#define DC_SS                  (1 <<  DC_SS_BIT)
-#define DC_DBE                 (1 << 13)
-#define DC_RID                 (1 << 27)
-#define DC_ORP                 (1 << 28)
-#define DC_MM                  (1 << 29)
-#define DC_RES                 (1 << 30)
-
-/* Fields in the Development Status register */
-#define DS_SSS                 (1 <<  0)
-#define DS_SWB                 (1 <<  1)
-#define DS_HWB                 (1 <<  2)
-#define DS_BP_SHIFT            8
-#define DS_BP_MASK             (0xff << DS_BP_SHIFT)
-
-#define __mfdr(addr)                                                   \
-({                                                                     \
-       register unsigned long value;                                   \
-       asm volatile("mfdr      %0, %1" : "=r"(value) : "i"(addr));     \
-       value;                                                          \
-})
-#define __mtdr(addr, value)                                            \
-       asm volatile("mtdr      %0, %1" : : "i"(addr), "r"(value))
+/* OCD Register offsets. Abbreviations used below:
+ *
+ *      BP      Breakpoint
+ *      Comm    Communication
+ *      DT      Data Trace
+ *      PC      Program Counter
+ *      PID     Process ID
+ *      R/W     Read/Write
+ *      WP      Watchpoint
+ */
+#define OCD_DID                                0x0000  /* Device ID */
+#define OCD_DC                         0x0008  /* Development Control */
+#define OCD_DS                         0x0010  /* Development Status */
+#define OCD_RWCS                       0x001c  /* R/W Access Control */
+#define OCD_RWA                                0x0024  /* R/W Access Address */
+#define OCD_RWD                                0x0028  /* R/W Access Data */
+#define OCD_WT                         0x002c  /* Watchpoint Trigger */
+#define OCD_DTC                                0x0034  /* Data Trace Control */
+#define OCD_DTSA0                      0x0038  /* DT Start Addr Channel 0 */
+#define OCD_DTSA1                      0x003c  /* DT Start Addr Channel 1 */
+#define OCD_DTEA0                      0x0048  /* DT End Addr Channel 0 */
+#define OCD_DTEA1                      0x004c  /* DT End Addr Channel 1 */
+#define OCD_BWC0A                      0x0058  /* PC BP/WP Control 0A */
+#define OCD_BWC0B                      0x005c  /* PC BP/WP Control 0B */
+#define OCD_BWC1A                      0x0060  /* PC BP/WP Control 1A */
+#define OCD_BWC1B                      0x0064  /* PC BP/WP Control 1B */
+#define OCD_BWC2A                      0x0068  /* PC BP/WP Control 2A */
+#define OCD_BWC2B                      0x006c  /* PC BP/WP Control 2B */
+#define OCD_BWC3A                      0x0070  /* Data BP/WP Control 3A */
+#define OCD_BWC3B                      0x0074  /* Data BP/WP Control 3B */
+#define OCD_BWA0A                      0x0078  /* PC BP/WP Address 0A */
+#define OCD_BWA0B                      0x007c  /* PC BP/WP Address 0B */
+#define OCD_BWA1A                      0x0080  /* PC BP/WP Address 1A */
+#define OCD_BWA1B                      0x0084  /* PC BP/WP Address 1B */
+#define OCD_BWA2A                      0x0088  /* PC BP/WP Address 2A */
+#define OCD_BWA2B                      0x008c  /* PC BP/WP Address 2B */
+#define OCD_BWA3A                      0x0090  /* Data BP/WP Address 3A */
+#define OCD_BWA3B                      0x0094  /* Data BP/WP Address 3B */
+#define OCD_NXCFG                      0x0100  /* Nexus Configuration */
+#define OCD_DINST                      0x0104  /* Debug Instruction */
+#define OCD_DPC                                0x0108  /* Debug Program Counter */
+#define OCD_CPUCM                      0x010c  /* CPU Control Mask */
+#define OCD_DCCPU                      0x0110  /* Debug Comm CPU */
+#define OCD_DCEMU                      0x0114  /* Debug Comm Emulator */
+#define OCD_DCSR                       0x0118  /* Debug Comm Status */
+#define OCD_PID                                0x011c  /* Ownership Trace PID */
+#define OCD_EPC0                       0x0120  /* Event Pair Control 0 */
+#define OCD_EPC1                       0x0124  /* Event Pair Control 1 */
+#define OCD_EPC2                       0x0128  /* Event Pair Control 2 */
+#define OCD_EPC3                       0x012c  /* Event Pair Control 3 */
+#define OCD_AXC                                0x0130  /* AUX port Control */
+
+/* Bits in DID */
+#define OCD_DID_MID_START              1
+#define OCD_DID_MID_SIZE               11
+#define OCD_DID_PN_START               12
+#define OCD_DID_PN_SIZE                        16
+#define OCD_DID_RN_START               28
+#define OCD_DID_RN_SIZE                        4
+
+/* Bits in DC */
+#define OCD_DC_TM_START                        0
+#define OCD_DC_TM_SIZE                 2
+#define OCD_DC_EIC_START               3
+#define OCD_DC_EIC_SIZE                        2
+#define OCD_DC_OVC_START               5
+#define OCD_DC_OVC_SIZE                        3
+#define OCD_DC_SS_BIT                  8
+#define OCD_DC_DBR_BIT                 12
+#define OCD_DC_DBE_BIT                 13
+#define OCD_DC_EOS_START               20
+#define OCD_DC_EOS_SIZE                        2
+#define OCD_DC_SQA_BIT                 22
+#define OCD_DC_IRP_BIT                 23
+#define OCD_DC_IFM_BIT                 24
+#define OCD_DC_TOZ_BIT                 25
+#define OCD_DC_TSR_BIT                 26
+#define OCD_DC_RID_BIT                 27
+#define OCD_DC_ORP_BIT                 28
+#define OCD_DC_MM_BIT                  29
+#define OCD_DC_RES_BIT                 30
+#define OCD_DC_ABORT_BIT               31
+
+/* Bits in DS */
+#define OCD_DS_SSS_BIT                 0
+#define OCD_DS_SWB_BIT                 1
+#define OCD_DS_HWB_BIT                 2
+#define OCD_DS_HWE_BIT                 3
+#define OCD_DS_STP_BIT                 4
+#define OCD_DS_DBS_BIT                 5
+#define OCD_DS_BP_START                        8
+#define OCD_DS_BP_SIZE                 8
+#define OCD_DS_INC_BIT                 24
+#define OCD_DS_BOZ_BIT                 25
+#define OCD_DS_DBA_BIT                 26
+#define OCD_DS_EXB_BIT                 27
+#define OCD_DS_NTBF_BIT                        28
+
+/* Bits in RWCS */
+#define OCD_RWCS_DV_BIT                        0
+#define OCD_RWCS_ERR_BIT               1
+#define OCD_RWCS_CNT_START             2
+#define OCD_RWCS_CNT_SIZE              14
+#define OCD_RWCS_CRC_BIT               19
+#define OCD_RWCS_NTBC_START            20
+#define OCD_RWCS_NTBC_SIZE             2
+#define OCD_RWCS_NTE_BIT               22
+#define OCD_RWCS_NTAP_BIT              23
+#define OCD_RWCS_WRAPPED_BIT           24
+#define OCD_RWCS_CCTRL_START           25
+#define OCD_RWCS_CCTRL_SIZE            2
+#define OCD_RWCS_SZ_START              27
+#define OCD_RWCS_SZ_SIZE               3
+#define OCD_RWCS_RW_BIT                        30
+#define OCD_RWCS_AC_BIT                        31
+
+/* Bits in RWA */
+#define OCD_RWA_RWA_START              0
+#define OCD_RWA_RWA_SIZE               32
+
+/* Bits in RWD */
+#define OCD_RWD_RWD_START              0
+#define OCD_RWD_RWD_SIZE               32
+
+/* Bits in WT */
+#define OCD_WT_DTE_START               20
+#define OCD_WT_DTE_SIZE                        3
+#define OCD_WT_DTS_START               23
+#define OCD_WT_DTS_SIZE                        3
+#define OCD_WT_PTE_START               26
+#define OCD_WT_PTE_SIZE                        3
+#define OCD_WT_PTS_START               29
+#define OCD_WT_PTS_SIZE                        3
+
+/* Bits in DTC */
+#define OCD_DTC_T0WP_BIT               0
+#define OCD_DTC_T1WP_BIT               1
+#define OCD_DTC_ASID0EN_BIT            2
+#define OCD_DTC_ASID0_START            3
+#define OCD_DTC_ASID0_SIZE             8
+#define OCD_DTC_ASID1EN_BIT            11
+#define OCD_DTC_ASID1_START            12
+#define OCD_DTC_ASID1_SIZE             8
+#define OCD_DTC_RWT1_START             28
+#define OCD_DTC_RWT1_SIZE              2
+#define OCD_DTC_RWT0_START             30
+#define OCD_DTC_RWT0_SIZE              2
+
+/* Bits in DTSA0 */
+#define OCD_DTSA0_DTSA_START           0
+#define OCD_DTSA0_DTSA_SIZE            32
+
+/* Bits in DTSA1 */
+#define OCD_DTSA1_DTSA_START           0
+#define OCD_DTSA1_DTSA_SIZE            32
+
+/* Bits in DTEA0 */
+#define OCD_DTEA0_DTEA_START           0
+#define OCD_DTEA0_DTEA_SIZE            32
+
+/* Bits in DTEA1 */
+#define OCD_DTEA1_DTEA_START           0
+#define OCD_DTEA1_DTEA_SIZE            32
+
+/* Bits in BWC0A */
+#define OCD_BWC0A_ASIDEN_BIT           0
+#define OCD_BWC0A_ASID_START           1
+#define OCD_BWC0A_ASID_SIZE            8
+#define OCD_BWC0A_EOC_BIT              14
+#define OCD_BWC0A_AME_BIT              25
+#define OCD_BWC0A_BWE_START            30
+#define OCD_BWC0A_BWE_SIZE             2
+
+/* Bits in BWC0B */
+#define OCD_BWC0B_ASIDEN_BIT           0
+#define OCD_BWC0B_ASID_START           1
+#define OCD_BWC0B_ASID_SIZE            8
+#define OCD_BWC0B_EOC_BIT              14
+#define OCD_BWC0B_AME_BIT              25
+#define OCD_BWC0B_BWE_START            30
+#define OCD_BWC0B_BWE_SIZE             2
+
+/* Bits in BWC1A */
+#define OCD_BWC1A_ASIDEN_BIT           0
+#define OCD_BWC1A_ASID_START           1
+#define OCD_BWC1A_ASID_SIZE            8
+#define OCD_BWC1A_EOC_BIT              14
+#define OCD_BWC1A_AME_BIT              25
+#define OCD_BWC1A_BWE_START            30
+#define OCD_BWC1A_BWE_SIZE             2
+
+/* Bits in BWC1B */
+#define OCD_BWC1B_ASIDEN_BIT           0
+#define OCD_BWC1B_ASID_START           1
+#define OCD_BWC1B_ASID_SIZE            8
+#define OCD_BWC1B_EOC_BIT              14
+#define OCD_BWC1B_AME_BIT              25
+#define OCD_BWC1B_BWE_START            30
+#define OCD_BWC1B_BWE_SIZE             2
+
+/* Bits in BWC2A */
+#define OCD_BWC2A_ASIDEN_BIT           0
+#define OCD_BWC2A_ASID_START           1
+#define OCD_BWC2A_ASID_SIZE            8
+#define OCD_BWC2A_EOC_BIT              14
+#define OCD_BWC2A_AMB_START            20
+#define OCD_BWC2A_AMB_SIZE             5
+#define OCD_BWC2A_AME_BIT              25
+#define OCD_BWC2A_BWE_START            30
+#define OCD_BWC2A_BWE_SIZE             2
+
+/* Bits in BWC2B */
+#define OCD_BWC2B_ASIDEN_BIT           0
+#define OCD_BWC2B_ASID_START           1
+#define OCD_BWC2B_ASID_SIZE            8
+#define OCD_BWC2B_EOC_BIT              14
+#define OCD_BWC2B_AME_BIT              25
+#define OCD_BWC2B_BWE_START            30
+#define OCD_BWC2B_BWE_SIZE             2
+
+/* Bits in BWC3A */
+#define OCD_BWC3A_ASIDEN_BIT           0
+#define OCD_BWC3A_ASID_START           1
+#define OCD_BWC3A_ASID_SIZE            8
+#define OCD_BWC3A_SIZE_START           9
+#define OCD_BWC3A_SIZE_SIZE            3
+#define OCD_BWC3A_EOC_BIT              14
+#define OCD_BWC3A_BWO_START            16
+#define OCD_BWC3A_BWO_SIZE             2
+#define OCD_BWC3A_BME_START            20
+#define OCD_BWC3A_BME_SIZE             4
+#define OCD_BWC3A_BRW_START            28
+#define OCD_BWC3A_BRW_SIZE             2
+#define OCD_BWC3A_BWE_START            30
+#define OCD_BWC3A_BWE_SIZE             2
+
+/* Bits in BWC3B */
+#define OCD_BWC3B_ASIDEN_BIT           0
+#define OCD_BWC3B_ASID_START           1
+#define OCD_BWC3B_ASID_SIZE            8
+#define OCD_BWC3B_SIZE_START           9
+#define OCD_BWC3B_SIZE_SIZE            3
+#define OCD_BWC3B_EOC_BIT              14
+#define OCD_BWC3B_BWO_START            16
+#define OCD_BWC3B_BWO_SIZE             2
+#define OCD_BWC3B_BME_START            20
+#define OCD_BWC3B_BME_SIZE             4
+#define OCD_BWC3B_BRW_START            28
+#define OCD_BWC3B_BRW_SIZE             2
+#define OCD_BWC3B_BWE_START            30
+#define OCD_BWC3B_BWE_SIZE             2
+
+/* Bits in BWA0A */
+#define OCD_BWA0A_BWA_START            0
+#define OCD_BWA0A_BWA_SIZE             32
+
+/* Bits in BWA0B */
+#define OCD_BWA0B_BWA_START            0
+#define OCD_BWA0B_BWA_SIZE             32
+
+/* Bits in BWA1A */
+#define OCD_BWA1A_BWA_START            0
+#define OCD_BWA1A_BWA_SIZE             32
+
+/* Bits in BWA1B */
+#define OCD_BWA1B_BWA_START            0
+#define OCD_BWA1B_BWA_SIZE             32
+
+/* Bits in BWA2A */
+#define OCD_BWA2A_BWA_START            0
+#define OCD_BWA2A_BWA_SIZE             32
+
+/* Bits in BWA2B */
+#define OCD_BWA2B_BWA_START            0
+#define OCD_BWA2B_BWA_SIZE             32
+
+/* Bits in BWA3A */
+#define OCD_BWA3A_BWA_START            0
+#define OCD_BWA3A_BWA_SIZE             32
+
+/* Bits in BWA3B */
+#define OCD_BWA3B_BWA_START            0
+#define OCD_BWA3B_BWA_SIZE             32
+
+/* Bits in NXCFG */
+#define OCD_NXCFG_NXARCH_START         0
+#define OCD_NXCFG_NXARCH_SIZE          4
+#define OCD_NXCFG_NXOCD_START          4
+#define OCD_NXCFG_NXOCD_SIZE           4
+#define OCD_NXCFG_NXPCB_START          8
+#define OCD_NXCFG_NXPCB_SIZE           4
+#define OCD_NXCFG_NXDB_START           12
+#define OCD_NXCFG_NXDB_SIZE            4
+#define OCD_NXCFG_MXMSEO_BIT           16
+#define OCD_NXCFG_NXMDO_START          17
+#define OCD_NXCFG_NXMDO_SIZE           4
+#define OCD_NXCFG_NXPT_BIT             21
+#define OCD_NXCFG_NXOT_BIT             22
+#define OCD_NXCFG_NXDWT_BIT            23
+#define OCD_NXCFG_NXDRT_BIT            24
+#define OCD_NXCFG_NXDTC_START          25
+#define OCD_NXCFG_NXDTC_SIZE           3
+#define OCD_NXCFG_NXDMA_BIT            28
+
+/* Bits in DINST */
+#define OCD_DINST_DINST_START          0
+#define OCD_DINST_DINST_SIZE           32
+
+/* Bits in CPUCM */
+#define OCD_CPUCM_BEM_BIT              1
+#define OCD_CPUCM_FEM_BIT              2
+#define OCD_CPUCM_REM_BIT              3
+#define OCD_CPUCM_IBEM_BIT             4
+#define OCD_CPUCM_IEEM_BIT             5
+
+/* Bits in DCCPU */
+#define OCD_DCCPU_DATA_START           0
+#define OCD_DCCPU_DATA_SIZE            32
+
+/* Bits in DCEMU */
+#define OCD_DCEMU_DATA_START           0
+#define OCD_DCEMU_DATA_SIZE            32
+
+/* Bits in DCSR */
+#define OCD_DCSR_CPUD_BIT              0
+#define OCD_DCSR_EMUD_BIT              1
+
+/* Bits in PID */
+#define OCD_PID_PROCESS_START          0
+#define OCD_PID_PROCESS_SIZE           32
+
+/* Bits in EPC0 */
+#define OCD_EPC0_RNG_START             0
+#define OCD_EPC0_RNG_SIZE              2
+#define OCD_EPC0_CE_BIT                        4
+#define OCD_EPC0_ECNT_START            16
+#define OCD_EPC0_ECNT_SIZE             16
+
+/* Bits in EPC1 */
+#define OCD_EPC1_RNG_START             0
+#define OCD_EPC1_RNG_SIZE              2
+#define OCD_EPC1_ATB_BIT               5
+#define OCD_EPC1_AM_BIT                        6
+
+/* Bits in EPC2 */
+#define OCD_EPC2_RNG_START             0
+#define OCD_EPC2_RNG_SIZE              2
+#define OCD_EPC2_DB_START              2
+#define OCD_EPC2_DB_SIZE               2
+
+/* Bits in EPC3 */
+#define OCD_EPC3_RNG_START             0
+#define OCD_EPC3_RNG_SIZE              2
+#define OCD_EPC3_DWE_BIT               2
+
+/* Bits in AXC */
+#define OCD_AXC_DIV_START              0
+#define OCD_AXC_DIV_SIZE               4
+#define OCD_AXC_AXE_BIT                        8
+#define OCD_AXC_AXS_BIT                        9
+#define OCD_AXC_DDR_BIT                        10
+#define OCD_AXC_LS_BIT                 11
+#define OCD_AXC_REX_BIT                        12
+#define OCD_AXC_REXTEN_BIT             13
+
+/* Constants for DC:EIC */
+#define OCD_EIC_PROGRAM_AND_DATA_TRACE 0
+#define OCD_EIC_BREAKPOINT             1
+#define OCD_EIC_NOP                    2
+
+/* Constants for DC:OVC */
+#define OCD_OVC_OVERRUN                        0
+#define OCD_OVC_DELAY_CPU_BTM          1
+#define OCD_OVC_DELAY_CPU_DTM          2
+#define OCD_OVC_DELAY_CPU_BTM_DTM      3
+
+/* Constants for DC:EOS */
+#define OCD_EOS_NOP                    0
+#define OCD_EOS_DEBUG_MODE             1
+#define OCD_EOS_BREAKPOINT_WATCHPOINT  2
+#define OCD_EOS_THQ                    3
+
+/* Constants for RWCS:NTBC */
+#define OCD_NTBC_OVERWRITE             0
+#define OCD_NTBC_DISABLE               1
+#define OCD_NTBC_BREAKPOINT            2
+
+/* Constants for RWCS:CCTRL */
+#define OCD_CCTRL_AUTO                 0
+#define OCD_CCTRL_CACHED               1
+#define OCD_CCTRL_UNCACHED             2
+
+/* Constants for RWCS:SZ */
+#define OCD_SZ_BYTE                    0
+#define OCD_SZ_HALFWORD                        1
+#define OCD_SZ_WORD                    2
+
+/* Constants for WT:PTS */
+#define OCD_PTS_DISABLED               0
+#define OCD_PTS_PROGRAM_0B             1
+#define OCD_PTS_PROGRAM_1A             2
+#define OCD_PTS_PROGRAM_1B             3
+#define OCD_PTS_PROGRAM_2A             4
+#define OCD_PTS_PROGRAM_2B             5
+#define OCD_PTS_DATA_3A                        6
+#define OCD_PTS_DATA_3B                        7
+
+/* Constants for DTC:RWT1 */
+#define OCD_RWT1_NO_TRACE              0
+#define OCD_RWT1_DATA_READ             1
+#define OCD_RWT1_DATA_WRITE            2
+#define OCD_RWT1_DATA_READ_WRITE       3
+
+/* Constants for DTC:RWT0 */
+#define OCD_RWT0_NO_TRACE              0
+#define OCD_RWT0_DATA_READ             1
+#define OCD_RWT0_DATA_WRITE            2
+#define OCD_RWT0_DATA_READ_WRITE       3
+
+/* Constants for BWC0A:BWE */
+#define OCD_BWE_DISABLED               0
+#define OCD_BWE_BREAKPOINT_ENABLED     1
+#define OCD_BWE_WATCHPOINT_ENABLED     3
+
+/* Constants for BWC0B:BWE */
+#define OCD_BWE_DISABLED               0
+#define OCD_BWE_BREAKPOINT_ENABLED     1
+#define OCD_BWE_WATCHPOINT_ENABLED     3
+
+/* Constants for BWC1A:BWE */
+#define OCD_BWE_DISABLED               0
+#define OCD_BWE_BREAKPOINT_ENABLED     1
+#define OCD_BWE_WATCHPOINT_ENABLED     3
+
+/* Constants for BWC1B:BWE */
+#define OCD_BWE_DISABLED               0
+#define OCD_BWE_BREAKPOINT_ENABLED     1
+#define OCD_BWE_WATCHPOINT_ENABLED     3
+
+/* Constants for BWC2A:BWE */
+#define OCD_BWE_DISABLED               0
+#define OCD_BWE_BREAKPOINT_ENABLED     1
+#define OCD_BWE_WATCHPOINT_ENABLED     3
+
+/* Constants for BWC2B:BWE */
+#define OCD_BWE_DISABLED               0
+#define OCD_BWE_BREAKPOINT_ENABLED     1
+#define OCD_BWE_WATCHPOINT_ENABLED     3
+
+/* Constants for BWC3A:SIZE */
+#define OCD_SIZE_BYTE_ACCESS           4
+#define OCD_SIZE_HALFWORD_ACCESS       5
+#define OCD_SIZE_WORD_ACCESS           6
+#define OCD_SIZE_DOUBLE_WORD_ACCESS    7
+
+/* Constants for BWC3A:BRW */
+#define OCD_BRW_READ_BREAK             0
+#define OCD_BRW_WRITE_BREAK            1
+#define OCD_BRW_ANY_ACCES_BREAK                2
+
+/* Constants for BWC3A:BWE */
+#define OCD_BWE_DISABLED               0
+#define OCD_BWE_BREAKPOINT_ENABLED     1
+#define OCD_BWE_WATCHPOINT_ENABLED     3
+
+/* Constants for BWC3B:SIZE */
+#define OCD_SIZE_BYTE_ACCESS           4
+#define OCD_SIZE_HALFWORD_ACCESS       5
+#define OCD_SIZE_WORD_ACCESS           6
+#define OCD_SIZE_DOUBLE_WORD_ACCESS    7
+
+/* Constants for BWC3B:BRW */
+#define OCD_BRW_READ_BREAK             0
+#define OCD_BRW_WRITE_BREAK            1
+#define OCD_BRW_ANY_ACCES_BREAK                2
+
+/* Constants for BWC3B:BWE */
+#define OCD_BWE_DISABLED               0
+#define OCD_BWE_BREAKPOINT_ENABLED     1
+#define OCD_BWE_WATCHPOINT_ENABLED     3
+
+/* Constants for EPC0:RNG */
+#define OCD_RNG_DISABLED               0
+#define OCD_RNG_EXCLUSIVE              1
+#define OCD_RNG_INCLUSIVE              2
+
+/* Constants for EPC1:RNG */
+#define OCD_RNG_DISABLED               0
+#define OCD_RNG_EXCLUSIVE              1
+#define OCD_RNG_INCLUSIVE              2
+
+/* Constants for EPC2:RNG */
+#define OCD_RNG_DISABLED               0
+#define OCD_RNG_EXCLUSIVE              1
+#define OCD_RNG_INCLUSIVE              2
+
+/* Constants for EPC2:DB */
+#define OCD_DB_DISABLED                        0
+#define OCD_DB_CHAINED_B               1
+#define OCD_DB_CHAINED_A               2
+#define OCD_DB_AHAINED_A_AND_B         3
+
+/* Constants for EPC3:RNG */
+#define OCD_RNG_DISABLED               0
+#define OCD_RNG_EXCLUSIVE              1
+#define OCD_RNG_INCLUSIVE              2
+
+#ifndef __ASSEMBLER__
+
+/* Register access macros */
+static inline unsigned long __ocd_read(unsigned int reg)
+{
+       return __builtin_mfdr(reg);
+}
+
+static inline void __ocd_write(unsigned int reg, unsigned long value)
+{
+       __builtin_mtdr(reg, value);
+}
+
+#define ocd_read(reg)                  __ocd_read(OCD_##reg)
+#define ocd_write(reg, value)          __ocd_write(OCD_##reg, value)
+
+#endif /* !__ASSEMBLER__ */
 
 #endif /* __ASM_AVR32_OCD_H */
index 6a64833756a6df85474886835c15ac5b5580a2b1..a52576b25afe9a47af07c9d9b27d6cea4ae1e889 100644 (file)
@@ -139,6 +139,9 @@ extern void show_regs_log_lvl(struct pt_regs *regs, const char *log_lvl);
 extern void show_stack_log_lvl(struct task_struct *tsk, unsigned long sp,
                               struct pt_regs *regs, const char *log_lvl);
 
+#define task_pt_regs(p) \
+       ((struct pt_regs *)(THREAD_SIZE + task_stack_page(p)) - 1)
+
 #define KSTK_EIP(tsk)  ((tsk)->thread.cpu_context.pc)
 #define KSTK_ESP(tsk)  ((tsk)->thread.cpu_context.ksp)
 
index 60f0f19a81f17afeac3bcb2fe101dd9b8fae8c3e..8c5dba5e33dfd396e6b67b61b1454e4c7d70e20b 100644 (file)
@@ -14,8 +14,7 @@
 /*
  * Status Register bits
  */
-#define SR_H           0x40000000
-#define SR_R           0x20000000
+#define SR_H           0x20000000
 #define SR_J           0x10000000
 #define SR_DM          0x08000000
 #define SR_D           0x04000000
@@ -35,8 +34,7 @@
 #define SR_I0M         0x00020000
 #define SR_GM          0x00010000
 
-#define SR_H_BIT       30
-#define SR_R_BIT       29
+#define SR_H_BIT       29
 #define SR_J_BIT       28
 #define SR_DM_BIT      27
 #define SR_D_BIT       26
index dd21182b60e0fd11fd6c873a67e3e694229fb340..d4e0950170ca786e350f6382f94d36fa49fd909b 100644 (file)
@@ -93,6 +93,8 @@
 #define SYSREG_I3M_SIZE                                1
 #define SYSREG_EM_OFFSET                       21
 #define SYSREG_EM_SIZE                         1
+#define SYSREG_MODE_OFFSET                     22
+#define SYSREG_MODE_SIZE                       3
 #define SYSREG_M0_OFFSET                       22
 #define SYSREG_M0_SIZE                         1
 #define SYSREG_M1_OFFSET                       23
index dc2d527cef4132532db6bda322f66167618f1d7f..c600cc15cbcb640d2d7941f0991fb823dd8fd2f4 100644 (file)
@@ -35,8 +35,8 @@
 #include <asm/ocd.h>
 #define finish_arch_switch(prev)                       \
        do {                                            \
-               __mtdr(DBGREG_PID, prev->pid);          \
-               __mtdr(DBGREG_PID, current->pid);       \
+               ocd_write(PID, prev->pid);              \
+               ocd_write(PID, current->pid);           \
        } while(0)
 #endif
 
index 17dacf3f36d39bf8ef820a5a7b5c509dfe1a7a5b..184b574289b431ba8f5981ee572a3a1ce7ce5c80 100644 (file)
@@ -25,6 +25,11 @@ struct thread_info {
        unsigned long           flags;          /* low level flags */
        __u32                   cpu;
        __s32                   preempt_count;  /* 0 => preemptable, <0 => BUG */
+       __u32                   rar_saved;      /* return address... */
+       __u32                   rsr_saved;      /* ...and status register
+                                                  saved by debug handler
+                                                  when setting up
+                                                  trampoline */
        struct restart_block    restart_block;
        __u8                    supervisor_stack[0];
 };
@@ -78,8 +83,8 @@ static inline struct thread_info *current_thread_info(void)
 #define TIF_NEED_RESCHED        2       /* rescheduling necessary */
 #define TIF_POLLING_NRFLAG      3       /* true if poll_idle() is polling
                                           TIF_NEED_RESCHED */
-#define TIF_BREAKPOINT         4       /* true if we should break after return */
-#define TIF_SINGLE_STEP                5       /* single step after next break */
+#define TIF_BREAKPOINT         4       /* enter monitor mode on return */
+#define TIF_SINGLE_STEP                5       /* single step in progress */
 #define TIF_MEMDIE             6
 #define TIF_RESTORE_SIGMASK    7       /* restore signal mask in do_signal */
 #define TIF_CPU_GOING_TO_SLEEP 8       /* CPU is entering sleep 0 mode */
@@ -89,18 +94,24 @@ static inline struct thread_info *current_thread_info(void)
 #define _TIF_SIGPENDING                (1 << TIF_SIGPENDING)
 #define _TIF_NEED_RESCHED      (1 << TIF_NEED_RESCHED)
 #define _TIF_POLLING_NRFLAG    (1 << TIF_POLLING_NRFLAG)
-#define _TIF_BREAKPOINT                (1 << TIF_BREAKPOINT)
 #define _TIF_SINGLE_STEP       (1 << TIF_SINGLE_STEP)
 #define _TIF_MEMDIE            (1 << TIF_MEMDIE)
 #define _TIF_RESTORE_SIGMASK   (1 << TIF_RESTORE_SIGMASK)
 #define _TIF_CPU_GOING_TO_SLEEP (1 << TIF_CPU_GOING_TO_SLEEP)
 
-/* XXX: These two masks must never span more than 16 bits! */
+/* Note: The masks below must never span more than 16 bits! */
+
 /* work to do on interrupt/exception return */
-#define _TIF_WORK_MASK         0x0000013e
+#define _TIF_WORK_MASK                         \
+       ((1 << TIF_SIGPENDING)                  \
+        | (1 << TIF_NEED_RESCHED)              \
+        | (1 << TIF_POLLING_NRFLAG)            \
+        | (1 << TIF_BREAKPOINT)                \
+        | (1 << TIF_RESTORE_SIGMASK))
+
 /* work to do on any return to userspace */
-#define _TIF_ALLWORK_MASK      0x0000013f
+#define _TIF_ALLWORK_MASK      (_TIF_WORK_MASK | (1 << TIF_SYSCALL_TRACE))
 /* work to do on return from debug mode */
-#define _TIF_DBGWORK_MASK      0x0000017e
+#define _TIF_DBGWORK_MASK      (_TIF_WORK_MASK & ~(1 << TIF_BREAKPOINT))
 
 #endif /* __ASM_AVR32_THREAD_INFO_H */
index 0212e180b90e327d1a82c9c68145c551ab757843..39bdd86871cf1bd496262cb55dc1cc06511fbe59 100644 (file)
@@ -50,8 +50,8 @@ extern unsigned long get_sclk(void);
 extern unsigned long sclk_to_usecs(unsigned long sclk);
 extern unsigned long usecs_to_sclk(unsigned long usecs);
 
-extern void dump_thread(struct pt_regs *regs, struct user *dump);
-extern void dump_bfin_regs(struct pt_regs *fp, void *retaddr);
+extern void dump_bfin_process(struct pt_regs *regs);
+extern void dump_bfin_mem(void *retaddr);
 extern void dump_bfin_trace_buffer(void);
 
 extern int init_arch_irq(void);
@@ -63,6 +63,7 @@ extern void bfin_dcache_init(void);
 extern int read_iloc(void);
 extern int bfin_console_init(void);
 extern asmlinkage void lower_to_irq14(void);
+extern asmlinkage void bfin_return_from_exception(void);
 extern void init_exception_vectors(void);
 extern void init_dma(void);
 extern void program_IAR(void);
index f617d8765451dab134799589a1265b08e6e96fce..1a0b57f6a3d4549c4411243d432cd1009dcf37ad 100644 (file)
 struct bfin5xx_spi_master {
        u16 num_chipselect;
        u8 enable_dma;
+       u16 pin_req[4];
 };
 
 /* spi_board_info.controller_data for SPI slave devices,
@@ -162,7 +163,7 @@ struct bfin5xx_spi_chip {
        u8 enable_dma;
        u8 bits_per_word;
        u8 cs_change_per_word;
-       u8 cs_chg_udelay;
+       u16 cs_chg_udelay; /* Some devices require 16-bit delays */
 };
 
 #endif /* _SPI_CHANNEL_H_ */
index bec6ecdf1bdbc5cd23a5421c28f194132fbaa9f6..c4d0596e8e9f2ec779648277c9b3fae81cded2fb 100644 (file)
@@ -27,6 +27,9 @@
  * 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
  */
 
+#ifndef __ASM_CPLBINIT_H__
+#define __ASM_CPLBINIT_H__
+
 #include <asm/blackfin.h>
 #include <asm/cplb.h>
 
@@ -57,8 +60,8 @@ struct cplb_tab {
        u16 size;
 };
 
-extern u_long icplb_table[MAX_CPLBS+1];
-extern u_long dcplb_table[MAX_CPLBS+1];
+extern u_long icplb_table[];
+extern u_long dcplb_table[];
 
 /* Till here we are discussing about the static memory management model.
  * However, the operating envoronments commonly define more CPLB
@@ -69,28 +72,16 @@ extern u_long dcplb_table[MAX_CPLBS+1];
  * This is how Page descriptor Table is implemented in uClinux/Blackfin.
  */
 
-#ifdef CONFIG_CPLB_SWITCH_TAB_L1
-extern u_long ipdt_table[MAX_SWITCH_I_CPLBS+1]__attribute__((l1_data));
-extern u_long dpdt_table[MAX_SWITCH_D_CPLBS+1]__attribute__((l1_data));
-
-#ifdef CONFIG_CPLB_INFO
-extern u_long ipdt_swapcount_table[MAX_SWITCH_I_CPLBS]__attribute__((l1_data));
-extern u_long dpdt_swapcount_table[MAX_SWITCH_D_CPLBS]__attribute__((l1_data));
-#endif /* CONFIG_CPLB_INFO */
-
-#else
-
-extern u_long ipdt_table[MAX_SWITCH_I_CPLBS+1];
-extern u_long dpdt_table[MAX_SWITCH_D_CPLBS+1];
-
+extern u_long ipdt_table[];
+extern u_long dpdt_table[];
 #ifdef CONFIG_CPLB_INFO
-extern u_long ipdt_swapcount_table[MAX_SWITCH_I_CPLBS];
-extern u_long dpdt_swapcount_table[MAX_SWITCH_D_CPLBS];
-#endif /* CONFIG_CPLB_INFO */
-
-#endif /*CONFIG_CPLB_SWITCH_TAB_L1*/
+extern u_long ipdt_swapcount_table[];
+extern u_long dpdt_swapcount_table[];
+#endif
 
 extern unsigned long reserved_mem_dcache_on;
 extern unsigned long reserved_mem_icache_on;
 
 extern void generate_cpl_tables(void);
+
+#endif
index 52e7a10d7ff8becd559b8548d000fac4176e21ee..473a8113277f097c6fffdf61a64c22447d7cb2e3 100644 (file)
@@ -1,29 +1,47 @@
-#ifndef _BLACKFIN_DELAY_H
-#define _BLACKFIN_DELAY_H
-
-static inline void __delay(unsigned long loops)
-{
-
-/* FIXME: Currently the assembler doesn't recognize Loop Register Clobbers,
-   uncomment this as soon those are implemented */
 /*
-      __asm__ __volatile__ (  "\t LSETUP (1f,1f) LC0= %0\n\t"
-                              "1:\t NOP;\n\t"
-                              : :"a" (loops)
-                              : "LT0","LB0","LC0");
+ * delay.h - delay functions
+ *
+ * Copyright (c) 2004-2007 Analog Devices Inc.
+ *
+ * Licensed under the GPL-2 or later.
+ */
+
+#ifndef __ASM_DELAY_H__
+#define __ASM_DELAY_H__
 
-*/
+#include <asm/mach/anomaly.h>
 
-       __asm__ __volatile__("[--SP] = LC0;\n\t"
-                            "[--SP] = LT0;\n\t"
-                            "[--SP] = LB0;\n\t"
-                            "LSETUP (1f,1f) LC0 = %0;\n\t"
-                            "1:\t NOP;\n\t"
-                            "LB0 = [SP++];\n\t"
-                               "LT0 = [SP++];\n\t"
-                               "LC0 = [SP++];\n"
-                               :
-                               :"a" (loops));
+static inline void __delay(unsigned long loops)
+{
+       if (ANOMALY_05000312) {
+               /* Interrupted loads to loop registers -> bad */
+               unsigned long tmp;
+               __asm__ __volatile__(
+                       "[--SP] = LC0;"
+                       "[--SP] = LT0;"
+                       "[--SP] = LB0;"
+                       "LSETUP (1f,1f) LC0 = %1;"
+                       "1: NOP;"
+                       /* We take advantage of the fact that LC0 is 0 at
+                        * the end of the loop.  Otherwise we'd need some
+                        * NOPs after the CLI here.
+                        */
+                       "CLI %0;"
+                       "LB0 = [SP++];"
+                       "LT0 = [SP++];"
+                       "LC0 = [SP++];"
+                       "STI %0;"
+                       : "=d" (tmp)
+                       : "a" (loops)
+               );
+       } else
+               __asm__ __volatile__ (
+                       "LSETUP(1f, 1f) LC0 = %0;"
+                       "1: NOP;"
+                       :
+                       : "a" (loops)
+                       : "LT0", "LB0", "LC0"
+               );
 }
 
 #include <linux/param.h>       /* needed for HZ */
@@ -41,4 +59,4 @@ static inline void udelay(unsigned long usecs)
        __delay(usecs * loops_per_jiffy / (1000000 / HZ));
 }
 
-#endif                         /* defined(_BLACKFIN_DELAY_H) */
+#endif
index d1d2e6be3b59328f42f02d46e91402cffd0b5ab8..1601d62f39a57785a925d6e2ca3a260a5bd9cabe 100644 (file)
@@ -122,6 +122,7 @@ extern void outsl(unsigned long port, const void *addr, unsigned long count);
 extern void insb(unsigned long port, void *addr, unsigned long count);
 extern void insw(unsigned long port, void *addr, unsigned long count);
 extern void insl(unsigned long port, void *addr, unsigned long count);
+extern void insl_16(unsigned long port, void *addr, unsigned long count);
 
 extern void dma_outsb(unsigned long port, const void *addr, unsigned short count);
 extern void dma_outsw(unsigned long port, const void *addr, unsigned short count);
index 304f5bcfebe4c56478f3447ccc021eb4dece1f5f..4e2b3f2020e5a4bb71c073526023fc7ef2b1f3d8 100644 (file)
 
 #define GPIO_IRQ_BASE  IRQ_PF0
 
-#ifdef CONFIG_IRQCHIP_DEMUX_GPIO
 #define NR_IRQS     (IRQ_PH15+1)
-#else
-#define NR_IRQS     (SYS_IRQS+1)
-#endif
 
 #define IVG7            7
 #define IVG8            8
index c5aa20102b24a0e89c115849138ca30aa1d84da0..193082deaa4e22214d510f88334eec59a9ecc3cb 100644 (file)
@@ -47,6 +47,7 @@
 /* Boot ROM Memory */
 
 #define BOOT_ROM_START         0xEF000000
+#define BOOT_ROM_LENGTH                0x8000
 
 /* Level 1 Memory */
 
@@ -90,9 +91,7 @@
 
 /* Scratch Pad Memory */
 
-#if defined(CONFIG_BF527) || defined(CONFIG_BF536) || defined(CONFIG_BF534)
 #define L1_SCRATCH_START       0xFFB00000
 #define L1_SCRATCH_LENGTH      0x1000
-#endif
 
 #endif                         /* _MEM_MAP_527_H_ */
index 452fb825d891122ce674eda8b169538dcfdc0f85..832e6f6122da332d91072457ffbadaf56b6e9eff 100644 (file)
@@ -130,11 +130,7 @@ Core        Emulation               **
 
 #define GPIO_IRQ_BASE          IRQ_PF0
 
-#ifdef CONFIG_IRQCHIP_DEMUX_GPIO
 #define        NR_IRQS         (IRQ_PF15+1)
-#else
-#define        NR_IRQS         SYS_IRQS
-#endif
 
 #define IVG7                   7
 #define IVG8                   8
index 94d8c4062eb7c154207131f1085d034c4080e11e..bd30b6f3be006bdab7d021866c003c1be5675666 100644 (file)
@@ -1,4 +1,3 @@
-
 /*
  * File:         include/asm-blackfin/mach-bf533/mem_map.h
  * Based on:
@@ -48,6 +47,7 @@
 /* Boot ROM Memory */
 
 #define BOOT_ROM_START         0xEF000000
+#define BOOT_ROM_LENGTH                0x400
 
 /* Level 1 Memory */
 
 
 /* Scratch Pad Memory */
 
-#if defined(CONFIG_BF533) || defined(CONFIG_BF532) || defined(CONFIG_BF531)
 #define L1_SCRATCH_START       0xFFB00000
 #define L1_SCRATCH_LENGTH      0x1000
-#endif
 
 #endif                         /* _MEM_MAP_533_H_ */
index b88d7a03ee3e70f8affbbe771d2717bf6fa82ef7..137f4884acfe3ef59d952c992310e3a30acc6a79 100644 (file)
@@ -42,7 +42,7 @@
 #define P_SPORT0_DRPRI (P_DONTCARE)
 
 #define P_SPI0_MOSI    (P_DONTCARE)
-#define P_SPI0_MIS0    (P_DONTCARE)
+#define P_SPI0_MISO    (P_DONTCARE)
 #define P_SPI0_SCK     (P_DONTCARE)
 #define P_SPI0_SSEL7   (P_DEFINED | P_IDENT(GPIO_PF7))
 #define P_SPI0_SSEL6   (P_DEFINED | P_IDENT(GPIO_PF6))
index 36c44bc1a917d8acd6a6da642f0dc033234d2e05..be6f2ff77f311a0153414c428252dadfbd65b786 100644 (file)
@@ -162,11 +162,7 @@ Core        Emulation               **
 
 #define GPIO_IRQ_BASE  IRQ_PF0
 
-#ifdef CONFIG_IRQCHIP_DEMUX_GPIO
 #define NR_IRQS     (IRQ_PH15+1)
-#else
-#define NR_IRQS     (IRQ_UART1_ERROR+1)
-#endif
 
 #define IVG7            7
 #define IVG8            8
index 18759e38eaae3dce208f13066ced2ca3ba239a42..5c6726d6f3b17c10f169049f3b0e48dcf99f315d 100644 (file)
@@ -47,6 +47,7 @@
 /* Boot ROM Memory */
 
 #define BOOT_ROM_START         0xEF000000
+#define BOOT_ROM_LENGTH                0x800
 
 /* Level 1 Memory */
 
 
 /* Scratch Pad Memory */
 
-#if defined(CONFIG_BF537) || defined(CONFIG_BF536) || defined(CONFIG_BF534)
 #define L1_SCRATCH_START       0xFFB00000
 #define L1_SCRATCH_LENGTH      0x1000
-#endif
 
 #endif                         /* _MEM_MAP_537_H_ */
index 7e6d349beb088680b41cec91cabd591c3348f1f6..e748588e8930c2976d270bc03f8e88d1ff969551 100644 (file)
 
 #define AMGCTLVAL      (V_AMBEN | V_AMCKEN)
 
-#ifdef CONFIG_BF542
-#define CPU "BF542"
-#define CPUID 0x027c8000
-#endif
-#ifdef CONFIG_BF544
-#define CPU "BF544"
-#define CPUID 0x027c8000
-#endif
-#ifdef CONFIG_BF548
-#define CPU "BF548"
-#define CPUID 0x027c6000
-#endif
-#ifdef CONFIG_BF549
-#define CPU "BF549"
-#endif
-#ifndef CPU
-#define        CPU "UNKNOWN"
-#define CPUID 0x0
+#if defined(CONFIG_BF542)
+# define CPU   "BF542"
+# define CPUID 0x027c8000
+#elif defined(CONFIG_BF544)
+# define CPU "BF544"
+# define CPUID 0x027c8000
+#elif defined(CONFIG_BF547)
+# define CPU "BF547"
+#elif defined(CONFIG_BF548)
+# define CPU "BF548"
+# define CPUID 0x027c6000
+#elif defined(CONFIG_BF549)
+# define CPU "BF549"
+#else
+# define CPU "UNKNOWN"
+# define CPUID 0x0
 #endif
 
 #endif /* __MACH_BF48_H__  */
index 760307e34b9e751f25a55c64c26f6d47c768eedc..b8b9870e26977c1f1d0c02e1a031c5a6c5c0c580 100644 (file)
 
 /* Bit masks for HOST_STATUS */
 
-#define                     READY  0x1        /* DMA Ready */
+#define                 DMA_READY  0x1        /* DMA Ready */
 #define                  FIFOFULL  0x2        /* FIFO Full */
 #define                 FIFOEMPTY  0x4        /* FIFO Empty */
 #define                  COMPLETE  0x8        /* DMA Complete */
index 70af33c963b068c89455905378ba95b171a7cf44..ecbca952985ca4836ad4a9e23ec336a31f324588 100644 (file)
 
 /* Bit masks for HOST_STATUS */
 
-#define                     READY  0x1        /* DMA Ready */
+#define                 DMA_READY  0x1        /* DMA Ready */
 #define                  FIFOFULL  0x2        /* FIFO Full */
 #define                 FIFOEMPTY  0x4        /* FIFO Empty */
 #define                  COMPLETE  0x8        /* DMA Complete */
index da979cb62f7dc36a88067ec436e2d4a0405b9fdd..319a48590c9c41965bb2210c08793f52e64e096f 100644 (file)
 #define                   RESTART  0x20       /* Work Unit Transitions */
 #define                    DI_SEL  0x40       /* Data Interrupt Timing Select */
 #define                     DI_EN  0x80       /* Data Interrupt Enable */
+
 #define                    NDSIZE  0xf00      /* Flex Descriptor Size */
+#define                  NDSIZE_0 0x0000      /* Next Descriptor Size = 0 (Stop/Autobuffer) */
+#define                  NDSIZE_1 0x0100      /* Next Descriptor Size = 1 */
+#define                  NDSIZE_2 0x0200      /* Next Descriptor Size = 2 */
+#define                  NDSIZE_3 0x0300      /* Next Descriptor Size = 3 */
+#define                  NDSIZE_4 0x0400      /* Next Descriptor Size = 4 */
+#define                  NDSIZE_5 0x0500      /* Next Descriptor Size = 5 */
+#define                  NDSIZE_6 0x0600      /* Next Descriptor Size = 6 */
+#define                  NDSIZE_7 0x0700      /* Next Descriptor Size = 7 */
+#define                  NDSIZE_8 0x0800      /* Next Descriptor Size = 8 */
+#define                  NDSIZE_9 0x0900      /* Next Descriptor Size = 9 */
+
 #define                   DMAFLOW  0xf000     /* Next Operation */
+#define              DMAFLOW_STOP  0x0000     /* Stop Mode */
+#define              DMAFLOW_AUTO  0x1000     /* Autobuffer Mode */
+#define             DMAFLOW_ARRAY  0x4000     /* Descriptor Array Mode */
+#define             DMAFLOW_SMALL  0x6000     /* Small Model Descriptor List Mode */
+#define             DMAFLOW_LARGE  0x7000     /* Large Model Descriptor List Mode */
 
 /* Bit masks for DMAx_IRQ_STATUS, MDMA_Sx_IRQ_STATUS, MDMA_Dx_IRQ_STATUS */
 
index 3b08cf9bd6f36ec4bf2068a90df9648c1f2c2248..9fb7bc5399a828f851df28a5c6a14e612d085156 100644 (file)
@@ -338,11 +338,7 @@ Events         (highest priority)  EMU         0
 
 #define GPIO_IRQ_BASE  IRQ_PA0
 
-#ifdef CONFIG_IRQCHIP_DEMUX_GPIO
 #define NR_IRQS     (IRQ_PJ15+1)
-#else
-#define NR_IRQS     (SYS_IRQS+1)
-#endif
 
 /* For compatibility reasons with existing code */
 
index ec1597e318315ca40286ab3aed1f8ebc09ecc511..f99f47bc3a0796162796c75470497742a80d992c 100644 (file)
 /* Boot ROM Memory */
 
 #define BOOT_ROM_START         0xEF000000
+#define BOOT_ROM_LENGTH                0x1000
+
+/* L1 Instruction ROM */
+
+#define L1_ROM_START           0xFFA14000
+#define L1_ROM_LENGTH          0x10000
 
 /* Level 1 Memory */
 
 #define BFIN_DSUPBANKS 0
 #endif /*CONFIG_BFIN_DCACHE*/
 
+/* Level 2 Memory */
+#if !defined(CONFIG_BF542)
+# define L2_START          0xFEB00000
+# if defined(CONFIG_BF544)
+#  define L2_LENGTH        0x10000
+# else
+#  define L2_LENGTH        0x20000
+# endif
+#endif
+
 /* Scratch Pad Memory */
 
-#if defined(CONFIG_BF54x)
 #define L1_SCRATCH_START       0xFFB00000
 #define L1_SCRATCH_LENGTH      0x1000
-#endif
 
 #endif/* _MEM_MAP_548_H_ */
index 17e1d5dcef028ba85662e000a1c0a79ff65398d8..3ef9e5f36136d09f3f385142589b8b92b7301e93 100644 (file)
 #define SUPPORTED_REVID                0x3
 
 #define OFFSET_(x) ((x) & 0x0000FFFF)
-#define L1_ISRAM               0xFFA00000
-#define L1_ISRAM_END           0xFFA04000
-#define DATA_BANKA_SRAM                0xFF800000
-#define DATA_BANKA_SRAM_END    0xFF804000
-#define DATA_BANKB_SRAM                0xFF900000
-#define DATA_BANKB_SRAM_END    0xFF904000
-#define L1_DSRAMA              0xFF800000
-#define L1_DSRAMA_END          0xFF804000
-#define L1_DSRAMB              0xFF900000
-#define L1_DSRAMB_END          0xFF904000
-#define L2_SRAM                        0xFEB00000
-#define L2_SRAM_END            0xFEB20000
-#define AMB_FLASH              0x20000000
-#define AMB_FLASH_END          0x21000000
-#define AMB_FLASH_LENGTH       0x01000000
-#define L1_ISRAM_LENGTH                0x4000
-#define L1_DSRAMA_LENGTH       0x4000
-#define L1_DSRAMB_LENGTH       0x4000
-#define L2_SRAM_LENGTH         0x20000
 
 /*some misc defines*/
 #define IMASK_IVG15            0x8000
index 7945e8a3a8412fffa55c7b12ddd87773873e8bc4..c3c0eb13c819e43cd843bfdedb6bdbf039b57208 100644 (file)
@@ -55,6 +55,7 @@
 /* For MMR's that are reserved on Core B, set up defines to better integrate with other ports */
 #define SWRST                   SICA_SWRST
 #define SYSCR                   SICA_SYSCR
+#define DOUBLE_FAULT            (DOUBLE_FAULT_B|DOUBLE_FAULT_A)
 #define RESET_DOUBLE            (SWRST_DBL_FAULT_B|SWRST_DBL_FAULT_A)
 #define RESET_WDOG              (SWRST_WDT_B|SWRST_WDT_A)
 #define RESET_SOFTWARE          (SWRST_OCCURRED)
 #define        PLL_LOCKED                      0x0020  /* PLL_LOCKCNT Has Been Reached                                 */
 
 /* SWRST Mask */
-#define SYSTEM_RESET           0x00000007      /* Initiates a system software reset */
-#define SWRST_DBL_FAULT_B      0x00000800      /* SWRST Core B Double Fault */
-#define SWRST_DBL_FAULT_A      0x00001000      /* SWRST Core A Double Fault */
-#define SWRST_WDT_B                   0x00002000       /* SWRST Watchdog B */
-#define SWRST_WDT_A                   0x00004000       /* SWRST Watchdog A */
-#define SWRST_OCCURRED         0x00008000      /* SWRST Status */
+#define SYSTEM_RESET           0x0007  /* Initiates a system software reset */
+#define DOUBLE_FAULT_A         0x0008  /* Core A Double Fault Causes Reset */
+#define DOUBLE_FAULT_B         0x0010  /* Core B Double Fault Causes Reset */
+#define SWRST_DBL_FAULT_A      0x0800  /* SWRST Core A Double Fault */
+#define SWRST_DBL_FAULT_B      0x1000  /* SWRST Core B Double Fault */
+#define SWRST_WDT_B                   0x2000   /* SWRST Watchdog B */
+#define SWRST_WDT_A                   0x4000   /* SWRST Watchdog A */
+#define SWRST_OCCURRED         0x8000  /* SWRST Status */
 
 /* *************  SYSTEM INTERRUPT CONTROLLER MASKS ***************** */
 
index 12789927db3d976ec7e807a6416d23d477841244..83f0383957d25e099f36e04c139bf4197e7d705c 100644 (file)
 
 #define GPIO_IRQ_BASE          IRQ_PF0
 
-#ifdef CONFIG_IRQCHIP_DEMUX_GPIO
 #define NR_IRQS                        (IRQ_PF47 + 1)
-#else
-#define NR_IRQS                        SYS_IRQS
-#endif
 
 #define IVG7                   7
 #define IVG8                   8
index f7ac09cf2c3d3be80a8d532f6face2d2ac64e171..c26d8486cc4b833d85ed36204f5642c2c2608dce 100644 (file)
 #define ASYNC_BANK0_BASE       0x20000000       /* Async Bank 0 */
 #define ASYNC_BANK0_SIZE       0x04000000      /* 64M */
 
+/* Boot ROM Memory */
+
+#define BOOT_ROM_START         0xEF000000
+#define BOOT_ROM_LENGTH                0x800
+
 /* Level 1 Memory */
 
 #ifdef CONFIG_BFIN_ICACHE
@@ -67,9 +72,7 @@
 
 /* Scratch Pad Memory */
 
-#if defined(CONFIG_BF561)
 #define L1_SCRATCH_START       0xFFB00000
 #define L1_SCRATCH_LENGTH      0x1000
-#endif
 
 #endif                         /* _MEM_MAP_533_H_ */
index c1d8c4a78fcfc7a4a7e8e7b840ce30e856d139bd..e8967f6124f7ea2eb0a3878ec9fbc70c142e9c9d 100644 (file)
@@ -46,7 +46,7 @@
 #endif
 
 #define bfin_read8(addr) ({ \
-       uint8_t __v; \
+       uint32_t __v; \
        __asm__ __volatile__( \
                NOP_PAD_ANOMALY_05000198 \
                "%0 = b[%1] (z);" \
@@ -56,7 +56,7 @@
        __v; })
 
 #define bfin_read16(addr) ({ \
-       uint16_t __v; \
+       uint32_t __v; \
        __asm__ __volatile__( \
                NOP_PAD_ANOMALY_05000198 \
                "%0 = w[%1] (z);" \
@@ -80,7 +80,7 @@
                NOP_PAD_ANOMALY_05000198 \
                "b[%0] = %1;" \
                : \
-               : "a" (addr), "d" (val) \
+               : "a" (addr), "d" ((uint8_t)(val)) \
                : "memory" \
        )
 
@@ -89,7 +89,7 @@
                NOP_PAD_ANOMALY_05000198 \
                "w[%0] = %1;" \
                : \
-               : "a" (addr), "d" (val) \
+               : "a" (addr), "d" ((uint16_t)(val)) \
                : "memory" \
        )
 
index 3b671d5fd70d5c6110fe05a2097d5a37fe92304f..cbaff24b4b25040dda2b82fb9d84397d299adaf9 100644 (file)
@@ -1,6 +1,6 @@
 
 /* This handles the memory map.. */
 
-#ifdef CONFIG_BFIN
+#ifdef CONFIG_BLACKFIN
 #define PAGE_OFFSET_RAW                0x00000000
 #endif
index e8ada91ab0020a09fe0fe2083cb368a01328b3fc..321f4d96e4ae481ff248eb1e6b36b64233c1bc32 100644 (file)
@@ -1,6 +1,8 @@
 #ifndef _BLACKFIN_STRING_H_
 #define _BLACKFIN_STRING_H_
 
+#include <linux/types.h>
+
 #ifdef __KERNEL__              /* only set these up for kernel code */
 
 #define __HAVE_ARCH_STRCPY
index fe365b1b7ca8085cc54acf8197618aca85aa192c..ee1cbf73a9ab2a8993eb8eec90531a7e90b70baf 100644 (file)
 
 #ifndef __ASSEMBLY__
 
-#define HWC_x2 "System MMR Error\nAn error occurred due to an invalid access to an System MMR location\nPossible reason: a 32-bit register is accessed with a 16-bit instruction,\nor a 16-bit register is accessed with a 32-bit instruction.\n"
-#define HWC_x3 "External Memory Addressing Error\n"
-#define HWC_x12 "Performance Monitor Overflow\n"
-#define HWC_x18 "RAISE 5 instruction\n Software issued a RAISE 5 instruction to invoke the Hardware\n"
-#define HWC_default "Reserved\n"
-
-#define EXC_0x03 "Application stack overflow\n - Please increase the stack size of the application using elf2flt -s option,\n and/or reduce the stack use of the application.\n"
-#define EXC_0x10 "Single step\n - When the processor is in single step mode, every instruction\n generates an exception. Primarily used for debugging.\n"
-#define EXC_0x11 "Exception caused by a trace buffer full condition\n - The processor takes this exception when the trace\n buffer overflows (only when enabled by the Trace Unit Control register).\n"
-#define EXC_0x21 "Undefined instruction\n - May be used to emulate instructions that are not defined for\n a particular processor implementation.\n"
-#define EXC_0x22 "Illegal instruction combination\n - See section for multi-issue rules in the ADSP-BF53x Blackfin\n Processor Instruction Set Reference.\n"
-#define EXC_0x23 "Data access CPLB protection violation\n - Attempted read or write to Supervisor resource,\n or illegal data memory access. \n"
-#define EXC_0x24 "Data access misaligned address violation\n - Attempted misaligned data memory or data cache access.\n"
-#define EXC_0x25 "Unrecoverable event\n - For example, an exception generated while processing a previous exception.\n"
-#define EXC_0x26 "Data access CPLB miss\n - Used by the MMU to signal a CPLB miss on a data access.\n"
-#define EXC_0x27 "Data access multiple CPLB hits\n - More than one CPLB entry matches data fetch address.\n"
-#define EXC_0x28 "Program Sequencer Exception caused by an emulation watchpoint match\n - There is a watchpoint match, and one of the EMUSW\n bits in the Watchpoint Instruction Address Control register (WPIACTL) is set.\n"
-#define EXC_0x2A "Instruction fetch misaligned address violation\n - Attempted misaligned instruction cache fetch. On a misaligned instruction fetch exception,\n the return address provided in RETX is the destination address which is misaligned, rather than the address of the offending instruction.\n"
-#define EXC_0x2B "CPLB protection violation\n - Illegal instruction fetch access (memory protection violation).\n"
-#define EXC_0x2C "Instruction fetch CPLB miss\n - CPLB miss on an instruction fetch.\n"
-#define EXC_0x2D "Instruction fetch multiple CPLB hits\n - More than one CPLB entry matches instruction fetch address.\n"
-#define EXC_0x2E "Illegal use of supervisor resource\n - Attempted to use a Supervisor register or instruction from User mode.\n Supervisor resources are registers and instructions that are reserved\n for Supervisor use: Supervisor only registers, all MMRs, and Supervisor\n only instructions.\n"
+#define HWC_x2(level) \
+       "System MMR Error\n" \
+       level " - An error occurred due to an invalid access to an System MMR location\n" \
+       level "   Possible reason: a 32-bit register is accessed with a 16-bit instruction\n" \
+       level "   or a 16-bit register is accessed with a 32-bit instruction.\n"
+#define HWC_x3(level) \
+       "External Memory Addressing Error\n"
+#define HWC_x12(level) \
+       "Performance Monitor Overflow\n"
+#define HWC_x18(level) \
+       "RAISE 5 instruction\n" \
+       level "    Software issued a RAISE 5 instruction to invoke the Hardware\n"
+#define HWC_default(level) \
+        "Reserved\n"
+#define EXC_0x03(level) \
+       "Application stack overflow\n" \
+       level " - Please increase the stack size of the application using elf2flt -s option,\n" \
+       level "   and/or reduce the stack use of the application.\n"
+#define EXC_0x10(level) \
+       "Single step\n" \
+       level " - When the processor is in single step mode, every instruction\n" \
+       level "   generates an exception. Primarily used for debugging.\n"
+#define EXC_0x11(level) \
+       "Exception caused by a trace buffer full condition\n" \
+       level " - The processor takes this exception when the trace\n" \
+       level "   buffer overflows (only when enabled by the Trace Unit Control register).\n"
+#define EXC_0x21(level) \
+       "Undefined instruction\n" \
+       level " - May be used to emulate instructions that are not defined for\n" \
+       level "   a particular processor implementation.\n"
+#define EXC_0x22(level) \
+       "Illegal instruction combination\n" \
+       level " - See section for multi-issue rules in the ADSP-BF53x Blackfin\n" \
+       level "   Processor Instruction Set Reference.\n"
+#define EXC_0x23(level) \
+       "Data access CPLB protection violation\n" \
+       level " - Attempted read or write to Supervisor resource,\n" \
+       level "   or illegal data memory access. \n"
+#define EXC_0x24(level) \
+       "Data access misaligned address violation\n" \
+       level " - Attempted misaligned data memory or data cache access.\n"
+#define EXC_0x25(level) \
+       "Unrecoverable event\n" \
+       level " - For example, an exception generated while processing a previous exception.\n"
+#define EXC_0x26(level) \
+       "Data access CPLB miss\n" \
+       level " - Used by the MMU to signal a CPLB miss on a data access.\n"
+#define EXC_0x27(level) \
+       "Data access multiple CPLB hits\n" \
+       level " - More than one CPLB entry matches data fetch address.\n"
+#define EXC_0x28(level) \
+       "Program Sequencer Exception caused by an emulation watchpoint match\n" \
+       level " - There is a watchpoint match, and one of the EMUSW\n" \
+       level "   bits in the Watchpoint Instruction Address Control register (WPIACTL) is set.\n"
+#define EXC_0x2A(level) \
+       "Instruction fetch misaligned address violation\n" \
+       level " - Attempted misaligned instruction cache fetch. On a misaligned instruction fetch\n" \
+       level "   exception, the return address provided in RETX is the destination address which is\n" \
+       level "   misaligned, rather than the address of the offending instruction.\n"
+#define EXC_0x2B(level) \
+       "CPLB protection violation\n" \
+       level " - Illegal instruction fetch access (memory protection violation).\n"
+#define EXC_0x2C(level) \
+       "Instruction fetch CPLB miss\n" \
+       level " - CPLB miss on an instruction fetch.\n"
+#define EXC_0x2D(level) \
+       "Instruction fetch multiple CPLB hits\n" \
+       level " - More than one CPLB entry matches instruction fetch address.\n"
+#define EXC_0x2E(level) \
+       "Illegal use of supervisor resource\n" \
+       level " - Attempted to use a Supervisor register or instruction from User mode.\n" \
+       level "   Supervisor resources are registers and instructions that are reserved\n" \
+       level "   for Supervisor use: Supervisor only registers, all MMRs, and Supervisor\n" \
+       level "   only instructions.\n"
 
 #endif                         /* __ASSEMBLY__ */
 #endif                         /* _BFIN_TRAPS_H */
index cfe3692b23e580a01ccf0ad7a9102e854c8be792..a4a22cc358987c86999ef602301b2ca189526dfe 100644 (file)
@@ -12,7 +12,7 @@
  *   then it defines them prior including asm-generic/resource.h. )
  */
 
-#define RLIMIT_CPU             0       /* CPU time in ms */
+#define RLIMIT_CPU             0       /* CPU time in sec */
 #define RLIMIT_FSIZE           1       /* Maximum filesize */
 #define RLIMIT_DATA            2       /* max data size */
 #define RLIMIT_STACK           3       /* max stack size */
index 20413145fabb904ecc9533bd92b35c09933947d8..23e67013439fbbc2c3e2439a2dbd305028f63ae8 100644 (file)
@@ -6,7 +6,7 @@
 #ifndef _ASM_H8300_TIMEX_H
 #define _ASM_H8300_TIMEX_H
 
-#define CLOCK_TICK_RATE CONFIG_CPU_CLOCK*1000/8192 /* Timer input freq. */
+#define CLOCK_TICK_RATE (CONFIG_CPU_CLOCK*1000/8192) /* Timer input freq. */
 
 typedef unsigned long cycles_t;
 extern short h8300_timer_count;
index 49730ffbbae41f25251aa4e44bb9090e48b41341..81bcd5e517898af73ac5b096c8e1eed682968f6d 100644 (file)
@@ -94,6 +94,7 @@ ia64_acpi_release_global_lock (unsigned int *lock)
 #define acpi_noirq 0   /* ACPI always enabled on IA64 */
 #define acpi_pci_disabled 0 /* ACPI PCI always enabled on IA64 */
 #define acpi_strict 1  /* no ACPI spec workarounds on IA64 */
+#define acpi_processor_cstate_check(x) (x) /* no idle limits on IA64 :) */
 static inline void disable_acpi(void) { }
 
 const char *acpi_get_sysname (void);
index b8f712859140504c7c3cff48f518a0f7fd7d8014..a3a4288daae81186ecbb112c8645035f2ba26936 100644 (file)
@@ -80,7 +80,6 @@ extern int iosapic_remove (unsigned int gsi_base);
 #else
 #define iosapic_remove(gsi_base)                               (-EINVAL)
 #endif /* CONFIG_HOTPLUG */
-extern int gsi_to_vector (unsigned int gsi);
 extern int gsi_to_irq (unsigned int gsi);
 extern int iosapic_register_intr (unsigned int gsi, unsigned long polarity,
                                  unsigned long trigger);
@@ -94,7 +93,6 @@ extern int __init iosapic_register_platform_intr (u32 int_type,
                                           u16 eid, u16 id,
                                           unsigned long polarity,
                                           unsigned long trigger);
-extern unsigned int iosapic_version (char __iomem *addr);
 
 #ifdef CONFIG_NUMA
 extern void __devinit map_iosapic_to_node (unsigned int, int);
index c039820dba7cf5d9685e8518d365e7a99c867957..1effcd0f5e631502eab4eb005e4393a146b14858 100644 (file)
@@ -149,16 +149,21 @@ static inline unsigned int get_thread_fault_code(void)
 #define TIF_NEED_RESCHED       2       /* rescheduling necessary */
 #define TIF_SINGLESTEP         3       /* restore singlestep on return to user mode */
 #define TIF_IRET               4       /* return with iret */
-#define TIF_POLLING_NRFLAG     16      /* true if poll_idle() is polling TIF_NEED_RESCHED */
-                                       /* 31..28 fault code */
-#define TIF_MEMDIE             17
+#define TIF_RESTORE_SIGMASK    8       /* restore signal mask in do_signal() */
+#define TIF_USEDFPU            16      /* FPU was used by this task this quantum (SMP) */
+#define TIF_POLLING_NRFLAG     17      /* true if poll_idle() is polling TIF_NEED_RESCHED */
+#define TIF_MEMDIE             18      /* OOM killer killed process */
+#define TIF_FREEZE             19      /* is freezing for suspend */
 
 #define _TIF_SYSCALL_TRACE     (1<<TIF_SYSCALL_TRACE)
 #define _TIF_SIGPENDING                (1<<TIF_SIGPENDING)
 #define _TIF_NEED_RESCHED      (1<<TIF_NEED_RESCHED)
 #define _TIF_SINGLESTEP                (1<<TIF_SINGLESTEP)
 #define _TIF_IRET              (1<<TIF_IRET)
+#define _TIF_RESTORE_SIGMASK   (1<<TIF_RESTORE_SIGMASK)
+#define _TIF_USEDFPU           (1<<TIF_USEDFPU)
 #define _TIF_POLLING_NRFLAG    (1<<TIF_POLLING_NRFLAG)
+#define _TIF_FREEZE            (1<<TIF_FREEZE)
 
 #define _TIF_WORK_MASK         0x0000FFFE      /* work to do on interrupt/exception return */
 #define _TIF_ALLWORK_MASK      0x0000FFFF      /* work to do on any return to u-space */
index cbbd53762ea64f17e71ff772c2bc5429eb6cd14f..f467eac9ba70cf3e77402bbc1fc0140a774ce032 100644 (file)
 #define __NR_mq_getsetattr     (__NR_mq_open+5)
 #define __NR_kexec_load                283
 #define __NR_waitid            284
+/* 285 is unused */
+#define __NR_add_key           286
+#define __NR_request_key       287
+#define __NR_keyctl            288
+#define __NR_ioprio_set                289
+#define __NR_ioprio_get                290
+#define __NR_inotify_init      291
+#define __NR_inotify_add_watch 292
+#define __NR_inotify_rm_watch  293
+#define __NR_migrate_pages     294
+#define __NR_openat            295
+#define __NR_mkdirat           296
+#define __NR_mknodat           297
+#define __NR_fchownat          298
+#define __NR_futimesat         299
+#define __NR_fstatat64         300
+#define __NR_unlinkat          301
+#define __NR_renameat          302
+#define __NR_linkat            303
+#define __NR_symlinkat         304
+#define __NR_readlinkat                305
+#define __NR_fchmodat          306
+#define __NR_faccessat         307
+#define __NR_pselect6          308
+#define __NR_ppoll             309
+#define __NR_unshare           310
+#define __NR_set_robust_list   311
+#define __NR_get_robust_list   312
+#define __NR_splice            313
+#define __NR_sync_file_range   314
+#define __NR_tee               315
+#define __NR_vmsplice          316
+#define __NR_move_pages                317
+#define __NR_getcpu            318
+#define __NR_epoll_pwait       319
+#define __NR_utimensat         320
+#define __NR_signalfd          321
+#define __NR_timerfd           322
+#define __NR_eventfd           323
+#define __NR_fallocate         324
 
 #ifdef __KERNEL__
 
-#define NR_syscalls 285
+#define NR_syscalls 325
 
 #define __ARCH_WANT_IPC_PARSE_VERSION
 #define __ARCH_WANT_STAT64
 #define __ARCH_WANT_SYS_OLDUMOUNT
 #define __ARCH_WANT_SYS_RT_SIGACTION
 
+#define __IGNORE_lchown
+#define __IGNORE_setuid
+#define __IGNORE_getuid
+#define __IGNORE_setgid
+#define __IGNORE_getgid
+#define __IGNORE_geteuid
+#define __IGNORE_getegid
+#define __IGNORE_fcntl
+#define __IGNORE_setreuid
+#define __IGNORE_setregid
+#define __IGNORE_getrlimit
+#define __IGNORE_getgroups
+#define __IGNORE_setgroups
+#define __IGNORE_select
+#define __IGNORE_mmap
+#define __IGNORE_fchown
+#define __IGNORE_setfsuid
+#define __IGNORE_setfsgid
+#define __IGNORE_setresuid
+#define __IGNORE_getresuid
+#define __IGNORE_setresgid
+#define __IGNORE_getresgid
+#define __IGNORE_chown
+
 /*
  * "Conditional" syscalls
  *
diff --git a/include/asm-mips/8253pit.h b/include/asm-mips/8253pit.h
deleted file mode 100644 (file)
index 285f784..0000000
+++ /dev/null
@@ -1,10 +0,0 @@
-/*
- * 8253/8254 Programmable Interval Timer
- */
-
-#ifndef _8253PIT_H
-#define _8253PIT_H
-
-#define PIT_TICK_RATE  1193182UL
-
-#endif
index f6bd308f047f46929c34b730ebbaac28c8a15402..5ea701fc3425787d8309f90fdb07ec2737748d5e 100644 (file)
 #endif
 
 #ifndef cpu_dcache_line_size
-#define cpu_dcache_line_size() current_cpu_data.dcache.linesz
+#define cpu_dcache_line_size() cpu_data[0].dcache.linesz
 #endif
 #ifndef cpu_icache_line_size
-#define cpu_icache_line_size() current_cpu_data.icache.linesz
+#define cpu_icache_line_size() cpu_data[0].icache.linesz
 #endif
 #ifndef cpu_scache_line_size
-#define cpu_scache_line_size() current_cpu_data.scache.linesz
+#define cpu_scache_line_size() cpu_data[0].scache.linesz
 #endif
 
 #endif /* __ASM_CPU_FEATURES_H */
index 833437d31ef1634c1286d957b8cca8971bc158f2..d6a6c21f16db507f7e8f362f63427fdfbd922d43 100644 (file)
@@ -92,6 +92,7 @@
 #define MAX_DMA_ADDRESS                (PAGE_OFFSET + 0x01000000)
 #endif
 #define MAX_DMA_PFN            PFN_DOWN(virt_to_phys((void *)MAX_DMA_ADDRESS))
+#define MAX_DMA32_PFN          (1UL << (32 - PAGE_SHIFT))
 
 /* 8237 DMA controllers */
 #define IO_DMA1_BASE   0x00    /* 8 bit slave DMA, channels 0..3 */
index 3e7e30d4f4184b5a61a95786bcb0cfefe33f84f2..17f082cfea85c055cda99f1fcd6305331daa726e 100644 (file)
@@ -35,7 +35,7 @@
                "       .set    mips0                           \n"     \
                "       .section .fixup,\"ax\"                  \n"     \
                "4:     li      %0, %6                          \n"     \
-               "       j       2b                              \n"     \
+               "       j       3b                              \n"     \
                "       .previous                               \n"     \
                "       .section __ex_table,\"a\"               \n"     \
                "       "__UA_ADDR "\t1b, 4b                    \n"     \
@@ -61,7 +61,7 @@
                "       .set    mips0                           \n"     \
                "       .section .fixup,\"ax\"                  \n"     \
                "4:     li      %0, %6                          \n"     \
-               "       j       2b                              \n"     \
+               "       j       3b                              \n"     \
                "       .previous                               \n"     \
                "       .section __ex_table,\"a\"               \n"     \
                "       "__UA_ADDR "\t1b, 4b                    \n"     \
@@ -200,4 +200,4 @@ futex_atomic_cmpxchg_inatomic(int __user *uaddr, int oldval, int newval)
 }
 
 #endif
-#endif
+#endif /* _ASM_FUTEX_H */
index 032ca73f181bec27c0f7b741862ada66ec104342..5dabc870b32295779a6d2a93bbed0d90ac6a1f90 100644 (file)
@@ -12,6 +12,8 @@
 #define PIT_CH0                        0x40
 #define PIT_CH2                        0x42
 
+#define PIT_TICK_RATE          1193182UL
+
 extern spinlock_t i8253_lock;
 
 extern void setup_pit_timer(void);
index ab5612f90f6f8d433426f8311120f912e1d056cd..85bc5302bce0142494a3a2e79599f1499e5f9780 100644 (file)
@@ -22,7 +22,7 @@ enum ip32_irq_no {
         * CPU interrupts are 0 ... 7
         */
 
-       CRIME_IRQ_BASE                  = MIPS_CPU_IRQ_BASE,
+       CRIME_IRQ_BASE                  = MIPS_CPU_IRQ_BASE + 8,
 
        /*
         * MACE
index 3bdce9126f16c9eccb8b7fa6143f2d15a7526b6d..bf7701243d711637220f9b550aa1c72b1eb05628 100644 (file)
@@ -526,7 +526,7 @@ extern struct au1xxx_irqmap au1xxx_irq_map[];
 /* Au1000 */
 #ifdef CONFIG_SOC_AU1000
 enum soc_au1000_ints {
-       AU1000_FIRST_INT        = MIPS_CPU_IRQ_BASE,
+       AU1000_FIRST_INT        = MIPS_CPU_IRQ_BASE + 8,
        AU1000_UART0_INT        = AU1000_FIRST_INT,
        AU1000_UART1_INT,                               /* au1000 */
        AU1000_UART2_INT,                               /* au1000 */
@@ -605,7 +605,7 @@ enum soc_au1000_ints {
 /* Au1500 */
 #ifdef CONFIG_SOC_AU1500
 enum soc_au1500_ints {
-       AU1500_FIRST_INT        = MIPS_CPU_IRQ_BASE,
+       AU1500_FIRST_INT        = MIPS_CPU_IRQ_BASE + 8,
        AU1500_UART0_INT        = AU1500_FIRST_INT,
        AU1000_PCI_INTA,                                /* au1500 */
        AU1000_PCI_INTB,                                /* au1500 */
@@ -686,7 +686,7 @@ enum soc_au1500_ints {
 /* Au1100 */
 #ifdef CONFIG_SOC_AU1100
 enum soc_au1100_ints {
-       AU1100_FIRST_INT        = MIPS_CPU_IRQ_BASE,
+       AU1100_FIRST_INT        = MIPS_CPU_IRQ_BASE + 8,
        AU1100_UART0_INT,
        AU1100_UART1_INT,
        AU1100_SD_INT,
@@ -761,7 +761,7 @@ enum soc_au1100_ints {
 
 #ifdef CONFIG_SOC_AU1550
 enum soc_au1550_ints {
-       AU1550_FIRST_INT        = MIPS_CPU_IRQ_BASE,
+       AU1550_FIRST_INT        = MIPS_CPU_IRQ_BASE + 8,
        AU1550_UART0_INT        = AU1550_FIRST_INT,
        AU1550_PCI_INTA,
        AU1550_PCI_INTB,
@@ -851,7 +851,7 @@ enum soc_au1550_ints {
 
 #ifdef CONFIG_SOC_AU1200
 enum soc_au1200_ints {
-       AU1200_FIRST_INT        = MIPS_CPU_IRQ_BASE,
+       AU1200_FIRST_INT        = MIPS_CPU_IRQ_BASE + 8,
        AU1200_UART0_INT        = AU1200_FIRST_INT,
        AU1200_SWT_INT,
        AU1200_SD_INT,
@@ -948,11 +948,12 @@ enum soc_au1200_ints {
 
 #endif /* CONFIG_SOC_AU1200 */
 
-#define AU1000_INTC0_INT_BASE  (MIPS_CPU_IRQ_BASE + 0)
-#define AU1000_INTC0_INT_LAST  (MIPS_CPU_IRQ_BASE + 31)
-#define AU1000_INTC1_INT_BASE  (MIPS_CPU_IRQ_BASE + 32)
-#define AU1000_INTC1_INT_LAST  (MIPS_CPU_IRQ_BASE + 63)
-#define AU1000_MAX_INTR                (MIPS_CPU_IRQ_BASE + 63)
+#define AU1000_INTC0_INT_BASE  (MIPS_CPU_IRQ_BASE + 8)
+#define AU1000_INTC0_INT_LAST  (AU1000_INTC0_INT_BASE + 31)
+#define AU1000_INTC1_INT_BASE  (AU1000_INTC0_INT_BASE + 32)
+#define AU1000_INTC1_INT_LAST  (AU1000_INTC1_INT_BASE + 31)
+
+#define AU1000_MAX_INTR        AU1000_INTC1_INT_LAST
 #define INTX                   0xFF                    /* not valid */
 
 /* Programmable Counters 0 and 1 */
index 9e7d1ba21b557cc5051241fed588d5746f378b4d..9e0028f60a43bb1b0be30cb91dc3cd01924bd27b 100644 (file)
 
 #define NUM_AU1100_MMC_CONTROLLERS     2
 
-
-#define AU1100_SD_IRQ  2
+#if defined(CONFIG_SOC_AU1100)
+#define AU1100_SD_IRQ  AU1100_SD_INT
+#elif defined(CONFIG_SOC_AU1200)
+#define AU1100_SD_IRQ  AU1200_SD_INT
+#endif
 
 
 #define SD0_BASE       0xB0600000
index 90e4b403f53183b7eb5c08b3880f90a9760e3f85..a944eda4faf5ef5f1f3e6ff53932056cf4ce7e4f 100644 (file)
@@ -68,11 +68,15 @@ do {                                                                        \
        if (cpu_has_dsp)                                                \
                __save_dsp(prev);                                       \
        (last) = resume(prev, next, task_thread_info(next));            \
+} while (0)
+
+#define finish_arch_switch(prev)                                       \
+do {                                                                   \
        if (cpu_has_dsp)                                                \
                __restore_dsp(current);                                 \
        if (cpu_has_userlocal)                                          \
-               write_c0_userlocal(task_thread_info(current)->tp_value);\
-} while(0)
+               write_c0_userlocal(current_thread_info()->tp_value);    \
+} while (0)
 
 static inline unsigned long __xchg_u32(volatile int * m, unsigned int val)
 {
@@ -205,8 +209,6 @@ extern void *set_except_vector(int n, void *addr);
 extern unsigned long ebase;
 extern void per_cpu_trap_init(void);
 
-extern int stop_a_enabled;
-
 /*
  * See include/asm-ia64/system.h; prevents deadlock on SMP
  * systems.
index ee1663e64da1aad67162a469c690a605de5e45e7..7717934f94c35122ba55e9a4830cbc91c1bcf216 100644 (file)
@@ -58,10 +58,22 @@ extern int (*perf_irq)(void);
  * Initialize the calling CPU's compare interrupt as clockevent device
  */
 #ifdef CONFIG_CEVT_R4K
-extern void mips_clockevent_init(void);
+extern int mips_clockevent_init(void);
 extern unsigned int __weak get_c0_compare_int(void);
 #else
-static inline void mips_clockevent_init(void)
+static inline int mips_clockevent_init(void)
+{
+       return -ENXIO;
+}
+#endif
+
+/*
+ * Initialize the count register as a clocksource
+ */
+#ifdef CONFIG_CEVT_R4K
+extern void init_mips_clocksource(void);
+#else
+static inline void init_mips_clocksource(void)
 {
 }
 #endif
index 5e0c3ca5450b02e0f626523e6f405590d2c51a24..deda8c311373bb685771e38c44bc44668772d4d0 100644 (file)
@@ -645,8 +645,7 @@ int pdc_soft_power_button(int sw_control);
 void pdc_io_reset(void);
 void pdc_io_reset_devices(void);
 int pdc_iodc_getc(void);
-void pdc_iodc_putc(unsigned char c);
-void pdc_iodc_outc(unsigned char c);
+int pdc_iodc_print(unsigned char *str, unsigned count);
 void pdc_printf(const char *fmt, ...);
 
 void pdc_emergency_unlock(void);
index 374d0db37e1c1babf0ee08d935d5f3888e443f6c..17110aff26e708c242d9d2fd3855d5d48aea204f 100644 (file)
@@ -6,6 +6,10 @@
 
 #define PPC_MEMSTART   0
 
+#ifdef CONFIG_NOT_COHERENT_CACHE
+#define ARCH_KMALLOC_MINALIGN  L1_CACHE_BYTES
+#endif
+
 #ifndef __ASSEMBLY__
 /*
  * The basic type of a PTE - 64 bits for those CPUs with > 32 bit
index dc318458b5fe528a0642b3f5783fe92239ca2511..d8bdc79db12e2767b1dec66cf74a530975fb8f49 100644 (file)
@@ -246,7 +246,6 @@ static inline struct pci_controller *pci_bus_to_host(struct pci_bus *bus)
        return PCI_DN(busdn)->phb;
 }
 
-extern void pcibios_free_controller(struct pci_controller *phb);
 
 extern void isa_bridge_find_early(struct pci_controller *hose);
 
@@ -282,9 +281,11 @@ extern void
 pci_process_bridge_OF_ranges(struct pci_controller *hose,
                           struct device_node *dev, int primary);
 
-/* Allocate a new PCI host bridge structure */
+/* Allocate & free a PCI host bridge structure */
 extern struct pci_controller *
 pcibios_alloc_controller(struct device_node *dev);
+extern void pcibios_free_controller(struct pci_controller *phb);
+
 #ifdef CONFIG_PCI
 extern unsigned long pci_address_to_pio(phys_addr_t address);
 extern int pcibios_vaddr_is_ioport(void __iomem *address);
index fea2d8ff1e7330066837038fec03127c70495058..d1332bbcbd9ba29eee90b389cffdc6ea90d3e5ca 100644 (file)
@@ -86,6 +86,11 @@ extern int icache_44x_need_flush;
  * entries per page directory level: our page-table tree is two-level, so
  * we don't really have any PMD directory.
  */
+#ifndef __ASSEMBLY__
+#define PTE_TABLE_SIZE (sizeof(pte_t) << PTE_SHIFT)
+#define PGD_TABLE_SIZE (sizeof(pgd_t) << (32 - PGDIR_SHIFT))
+#endif /* __ASSEMBLY__ */
+
 #define PTRS_PER_PTE   (1 << PTE_SHIFT)
 #define PTRS_PER_PMD   1
 #define PTRS_PER_PGD   (1 << (32 - PGDIR_SHIFT))
index 780f82642756cd4dc3e319687f944432cf297f15..ce5de6e0e6907915f0982da71afbcc8d9d6590dd 100644 (file)
@@ -237,18 +237,14 @@ struct cpu_usage {
 
 DECLARE_PER_CPU(struct cpu_usage, cpu_usage_array);
 
-#ifdef CONFIG_VIRT_CPU_ACCOUNTING
-extern void account_process_vtime(struct task_struct *tsk);
-#else
-#define account_process_vtime(tsk)             do { } while (0)
-#endif
-
 #if defined(CONFIG_VIRT_CPU_ACCOUNTING)
 extern void calculate_steal_time(void);
 extern void snapshot_timebases(void);
+#define account_process_vtime(tsk)             account_process_tick(tsk, 0)
 #else
 #define calculate_steal_time()                 do { } while (0)
 #define snapshot_timebases()                   do { } while (0)
+#define account_process_vtime(tsk)             do { } while (0)
 #endif
 
 extern void secondary_cpu_time_init(void);
index 8a94f0eba5e98afd1621e6ec9ec17015ceaae64b..f01393224b52dfe66ad88ef3bedad00f49a7fca4 100644 (file)
@@ -77,6 +77,10 @@ struct vdso_data {
        /* those additional ones don't have to be located anywhere
         * special as they were not part of the original systemcfg
         */
+       __u32 dcache_block_size;                /* L1 d-cache block size     */
+       __u32 icache_block_size;                /* L1 i-cache block size     */
+       __u32 dcache_log_block_size;            /* L1 d-cache log block size */
+       __u32 icache_log_block_size;            /* L1 i-cache log block size */
        __s32 wtom_clock_sec;                   /* Wall to monotonic clock */
        __s32 wtom_clock_nsec;
        __u32 syscall_map_64[SYSCALL_MAP_SIZE]; /* map of syscalls  */
@@ -99,6 +103,10 @@ struct vdso_data {
        __s32 wtom_clock_sec;                   /* Wall to monotonic clock */
        __s32 wtom_clock_nsec;
        __u32 syscall_map_32[SYSCALL_MAP_SIZE]; /* map of syscalls */
+       __u32 dcache_block_size;        /* L1 d-cache block size     */
+       __u32 icache_block_size;        /* L1 i-cache block size     */
+       __u32 dcache_log_block_size;    /* L1 d-cache log block size */
+       __u32 icache_log_block_size;    /* L1 i-cache log block size */
 };
 
 #endif /* CONFIG_PPC64 */
index d866d3385556d3f06d00e870b80d5b0e06b209bb..44bda786eef7f11bf86ffc012f661e7c4e545c52 100644 (file)
@@ -388,6 +388,11 @@ extern void (*_machine_power_off)(void);
 
 #define arch_align_stack(x) (x)
 
+#ifdef CONFIG_TRACE_IRQFLAGS
+extern psw_t sysc_restore_trace_psw;
+extern psw_t io_restore_trace_psw;
+#endif
+
 #endif /* __KERNEL__ */
 
 #endif
index b91246153b7ef4b90372b8e1982f7114bd8cd97d..9d528ada3c148615b6e09371aacaced7fdfcc867 100644 (file)
@@ -43,7 +43,7 @@ extern void __flush_purge_region(void *start, int size);
 extern void __flush_invalidate_region(void *start, int size);
 #endif
 
-#ifdef CONFIG_CPU_SH4
+#if defined(CONFIG_CPU_SH4) && !defined(CONFIG_CACHE_OFF)
 extern void copy_to_user_page(struct vm_area_struct *vma,
        struct page *page, unsigned long vaddr, void *dst, const void *src,
        unsigned long len);
index 0693689d4146bdb1be887638a8c6ade246843e35..f8a89793ac8cbb865dbedb2b70181236d2a4288d 100644 (file)
@@ -1,5 +1,32 @@
+#ifndef _ASM_X86_ACPI_H
+#define _ASM_X86_ACPI_H
+
 #ifdef CONFIG_X86_32
 # include "acpi_32.h"
 #else
 # include "acpi_64.h"
 #endif
+
+#include <asm/processor.h>
+
+/*
+ * Check if the CPU can handle C2 and deeper
+ */
+static inline unsigned int acpi_processor_cstate_check(unsigned int max_cstate)
+{
+       /*
+        * Early models (<=5) of AMD Opterons are not supposed to go into
+        * C2 state.
+        *
+        * Steppings 0x0A and later are good
+        */
+       if (boot_cpu_data.x86 == 0x0F &&
+           boot_cpu_data.x86_vendor == X86_VENDOR_AMD &&
+           boot_cpu_data.x86_model <= 0x05 &&
+           boot_cpu_data.x86_mask < 0x0A)
+               return 1;
+       else
+               return max_cstate;
+}
+
+#endif
index 4091b33dcb10f28cfbd1ae1013b3477e2512e742..be158b27d54b38854f8c63d713daa83fbdaa3954 100644 (file)
@@ -120,6 +120,7 @@ extern int local_apic_timer_disabled;
 
 #else /* !CONFIG_X86_LOCAL_APIC */
 static inline void lapic_shutdown(void) { }
+#define local_apic_timer_c2_ok         1
 
 #endif /* !CONFIG_X86_LOCAL_APIC */
 
index b1f3c1ea55d959687f278b0107b63a96e9c69e8e..ad8d6e758785ca283b33b802880945f4e8c1f4ee 100644 (file)
@@ -61,6 +61,7 @@ extern unsigned long force_hpet_address;
 extern int hpet_force_user;
 extern int is_hpet_enabled(void);
 extern int hpet_enable(void);
+extern void hpet_disable(void);
 extern unsigned long hpet_readl(unsigned long a);
 extern void force_hpet_resume(void);
 
index 8ccedf7a0a5af4ce4679294bfacb44f597eebb73..e3c16c981e4627beca2b3bd2240d51e67b64918a 100644 (file)
@@ -132,6 +132,11 @@ extern unsigned long acpi_realmode_flags;
 int acpi_register_gsi (u32 gsi, int triggering, int polarity);
 int acpi_gsi_to_irq (u32 gsi, unsigned int *irq);
 
+#ifdef CONFIG_X86_IO_APIC
+extern int acpi_get_override_irq(int bus_irq, int *trigger, int *polarity);
+#else
+#define acpi_get_override_irq(bus, trigger, polarity) (-1)
+#endif
 /*
  * This function undoes the effect of one call to acpi_register_gsi().
  * If this matches the last registration, any IRQ resources for gsi
index d62fcee9a08aa8b620436047fadb679f84095b04..9ec43186ba80b840a3e2c4104739201990e7d772 100644 (file)
@@ -30,3 +30,10 @@ SUBSYS(cpu_cgroup)
 #endif
 
 /* */
+
+#ifdef CONFIG_CGROUP_CPUACCT
+SUBSYS(cpuacct)
+#endif
+
+/* */
+
index 16a51546db444f9cbbbc0d845b312621eec0ae44..c4e00161a247975aca754484ecb5f232d1ff4f08 100644 (file)
@@ -92,6 +92,7 @@ struct cpuidle_device {
        struct kobject          kobj;
        struct completion       kobj_unregister;
        void                    *governor_data;
+       struct cpuidle_state    *safe_state;
 };
 
 DECLARE_PER_CPU(struct cpuidle_device *, cpuidle_devices);
index 0f6c86c634fd601482c6cca840999b89c5ca4b4f..84cec2aa9f1e98bd70ad9bb65ac58c06e2e9e5b4 100644 (file)
@@ -563,11 +563,4 @@ enum {
                                         ~EXT2_DIR_ROUND)
 #define EXT2_MAX_REC_LEN               ((1<<16)-1)
 
-static inline ext2_fsblk_t
-ext2_group_first_block_no(struct super_block *sb, unsigned long group_no)
-{
-       return group_no * (ext2_fsblk_t)EXT2_BLOCKS_PER_GROUP(sb) +
-               le32_to_cpu(EXT2_SB(sb)->s_es->s_first_data_block);
-}
-
 #endif /* _LINUX_EXT2_FS_H */
index d0c437028c80a18b1cace46c89bf59b92a39f59e..5c86f1196c3ad132ed714d2a07eb2bfed832bc47 100644 (file)
@@ -16,6 +16,7 @@
  *  - add lk_flags in fuse_lk_in
  *  - add lock_owner field to fuse_setattr_in, fuse_read_in and fuse_write_in
  *  - add blksize field to fuse_attr
+ *  - add file flags field to fuse_read_in and fuse_write_in
  */
 
 #include <asm/types.h>
@@ -280,6 +281,8 @@ struct fuse_read_in {
        __u32   size;
        __u32   read_flags;
        __u64   lock_owner;
+       __u32   flags;
+       __u32   padding;
 };
 
 #define FUSE_COMPAT_WRITE_IN_SIZE 24
@@ -290,6 +293,8 @@ struct fuse_write_in {
        __u32   size;
        __u32   write_flags;
        __u64   lock_owner;
+       __u32   flags;
+       __u32   padding;
 };
 
 struct fuse_write_out {
index 84598fa2e9de4c8aebe8ebf625bb667bfa505b18..65c2d247068b298b769e999d99f563c14312299e 100644 (file)
@@ -85,7 +85,8 @@
 
 /* hashing types */
 #define BOND_XMIT_POLICY_LAYER2                0 /* layer 2 (MAC only), default */
-#define BOND_XMIT_POLICY_LAYER34       1 /* layer 3+4 (IP ^ MAC) */
+#define BOND_XMIT_POLICY_LAYER34       1 /* layer 3+4 (IP ^ (TCP || UDP)) */
+#define BOND_XMIT_POLICY_LAYER23       2 /* layer 2+3 (IP ^ MAC) */
 
 typedef struct ifbond {
        __s32 bond_mode;
index 1246d46abbc089c6a87322b46fe6b03bde1f0189..80335b7d77c5bea2d9f64320c46fb19dfcb60cc2 100644 (file)
@@ -91,6 +91,9 @@ struct net_lro_mgr {
        int max_desc; /* Max number of LRO descriptors  */
        int max_aggr; /* Max number of LRO packets to be aggregated */
 
+       int frag_align_pad; /* Padding required to properly align layer 3
+                            * headers in generated skb when using frags */
+
        struct net_lro_desc *lro_arr; /* Array of LRO descriptors */
 
        /*
index b45f240a8c45029d0d45107f40d5761f97028e2f..2075d6da2a313d9791ea1e714cb5beb18c91f7e6 100644 (file)
@@ -530,6 +530,11 @@ struct input_absinfo {
 #define KEY_DOLLAR             0x1b2
 #define KEY_EURO               0x1b3
 
+#define KEY_FRAMEBACK          0x1b4   /* Consumer - transport controls */
+#define KEY_FRAMEFORWARD       0x1b5
+
+#define KEY_CONTEXT_MENU       0x1b6   /* GenDesc - system context menu */
+
 #define KEY_DEL_EOL            0x1c0
 #define KEY_DEL_EOS            0x1c1
 #define KEY_INS_LINE           0x1c2
index 16e7ed855a18d9a1bc7fafd58d70f01e0753ae19..d9ecd13393b0859ffa98034ec9cb77a3bd8f1912 100644 (file)
@@ -439,6 +439,8 @@ struct transaction_s
        /*
         * Transaction's current state
         * [no locking - only kjournald alters this]
+        * [j_list_lock] guards transition of a transaction into T_FINISHED
+        * state and subsequent call of __journal_drop_transaction()
         * FIXME: needs barriers
         * KLUDGE: [use j_state_lock]
         */
index c91fc0c9c4951418bc70b7cb8f957da08a9699c3..15f2853ea58f70dbbf533198dfb286aa8bf4e73f 100644 (file)
@@ -126,7 +126,7 @@ struct kbdiacrs {
 #define KDSKBDIACR      0x4B4B  /* write kernel accent table */
 
 struct kbdiacruc {
-        __u32 diacr, base, result;
+       unsigned int diacr, base, result;
 };
 struct kbdiacrsuc {
         unsigned int kb_cnt;    /* number of entries in following array */
index dc1178f6184b1480da56a11eeba46bc0f2cc2b14..b4130ff58d0c1be1543c21281e7189a7383834a5 100644 (file)
@@ -14,6 +14,7 @@
 
 #include <linux/list.h>
 #include <linux/spinlock.h>
+#include <linux/rwsem.h>
 
 struct device;
 /*
@@ -43,7 +44,7 @@ struct led_classdev {
 
 #ifdef CONFIG_LEDS_TRIGGERS
        /* Protects the trigger data below */
-       rwlock_t                 trigger_lock;
+       struct rw_semaphore      trigger_lock;
 
        struct led_trigger      *trigger;
        struct list_head         trig_list;
index 56a5673aebad3ecd0384d861f88ae61d65c166f3..ef52a07c43d8da63eba34a0dd571dc90c8d3310e 100644 (file)
@@ -340,6 +340,7 @@ enum {
        ATA_HORKAGE_HPA_SIZE    = (1 << 6),     /* native size off by one */
        ATA_HORKAGE_IPM         = (1 << 7),     /* Link PM problems */
        ATA_HORKAGE_IVB         = (1 << 8),     /* cbl det validity bit bugs */
+       ATA_HORKAGE_STUCK_ERR   = (1 << 9),     /* stuck ERR on next PACKET */
 
         /* DMA mask for user DMA control: User visible values; DO NOT
            renumber */
@@ -771,8 +772,6 @@ static inline int ata_port_is_dummy(struct ata_port *ap)
 
 extern void sata_print_link_status(struct ata_link *link);
 extern void ata_port_probe(struct ata_port *);
-extern void __sata_phy_reset(struct ata_port *ap);
-extern void sata_phy_reset(struct ata_port *ap);
 extern void ata_bus_reset(struct ata_port *ap);
 extern int sata_set_spd(struct ata_link *link);
 extern int sata_link_debounce(struct ata_link *link,
@@ -994,8 +993,6 @@ extern void sata_pmp_do_eh(struct ata_port *ap,
 /*
  * EH
  */
-extern void ata_eng_timeout(struct ata_port *ap);
-
 extern void ata_port_schedule_eh(struct ata_port *ap);
 extern int ata_link_abort(struct ata_link *link);
 extern int ata_port_abort(struct ata_port *ap);
index 520238cbae5d10424ead32f6c9b03472c790decf..1b7b95c67acaf5df2fd9cb860599931119ddc029 100644 (file)
@@ -12,6 +12,7 @@
 #include <linux/prio_tree.h>
 #include <linux/debug_locks.h>
 #include <linux/mm_types.h>
+#include <linux/security.h>
 
 struct mempolicy;
 struct anon_vma;
@@ -512,6 +513,21 @@ static inline void set_page_links(struct page *page, enum zone_type zone,
        set_page_section(page, pfn_to_section_nr(pfn));
 }
 
+/*
+ * If a hint addr is less than mmap_min_addr change hint to be as
+ * low as possible but still greater than mmap_min_addr
+ */
+static inline unsigned long round_hint_to_min(unsigned long hint)
+{
+#ifdef CONFIG_SECURITY
+       hint &= PAGE_MASK;
+       if (((void *)hint != NULL) &&
+           (hint < mmap_min_addr))
+               return PAGE_ALIGN(mmap_min_addr);
+#endif
+       return hint;
+}
+
 /*
  * Some inline functions in vmstat.h depend on page_zone()
  */
index e82a6ebc725d7b18a76fdccc9d58853b42a8bdba..2d15d4aac09407e94ee859c3c1a76c1dd9717041 100644 (file)
@@ -422,7 +422,6 @@ extern long nfs_sync_mapping_wait(struct address_space *, struct writeback_contr
 extern int nfs_wb_all(struct inode *inode);
 extern int nfs_wb_nocommit(struct inode *inode);
 extern int nfs_wb_page(struct inode *inode, struct page* page);
-extern int nfs_wb_page_priority(struct inode *inode, struct page* page, int how);
 extern int nfs_wb_page_cancel(struct inode *inode, struct page* page);
 #if defined(CONFIG_NFS_V3) || defined(CONFIG_NFS_V4)
 extern int  nfs_commit_inode(struct inode *, int);
index 1ee009e8fec8c6a670c7a33ac7da40b0844d3b80..111aa10f11369deed862766a8cb7b27956099f87 100644 (file)
 #define PCI_DEVICE_ID_NVIDIA_NVENET_33              0x0761
 #define PCI_DEVICE_ID_NVIDIA_NVENET_34              0x0762
 #define PCI_DEVICE_ID_NVIDIA_NVENET_35              0x0763
+#define PCI_DEVICE_ID_NVIDIA_NVENET_36              0x0AB0
+#define PCI_DEVICE_ID_NVIDIA_NVENET_37              0x0AB1
+#define PCI_DEVICE_ID_NVIDIA_NVENET_38              0x0AB2
+#define PCI_DEVICE_ID_NVIDIA_NVENET_39              0x0AB3
 
 #define PCI_VENDOR_ID_IMS              0x10e0
 #define PCI_DEVICE_ID_IMS_TT128                0x9128
index f0742b6aaa649ba49b6a9a8543bcd4083bb12b1e..554836edd915ef027011a9127b81b7188f3388ad 100644 (file)
@@ -58,6 +58,8 @@ typedef enum {
        PHY_INTERFACE_MODE_RMII,
        PHY_INTERFACE_MODE_RGMII,
        PHY_INTERFACE_MODE_RGMII_ID,
+       PHY_INTERFACE_MODE_RGMII_RXID,
+       PHY_INTERFACE_MODE_RGMII_TXID,
        PHY_INTERFACE_MODE_RTBI
 } phy_interface_t;
 
@@ -401,6 +403,7 @@ int phy_mii_ioctl(struct phy_device *phydev,
 int phy_start_interrupts(struct phy_device *phydev);
 void phy_print_status(struct phy_device *phydev);
 struct phy_device* phy_device_create(struct mii_bus *bus, int addr, int phy_id);
+void phy_device_free(struct phy_device *phydev);
 
 extern struct bus_type mdio_bus_type;
 #endif /* __PHY_H */
index 664d68cb1fbde9ba4f78d2099924ed9f209aa1ff..0a0426c2867d7f03bbf257887d588db4ea0be7af 100644 (file)
@@ -13,8 +13,8 @@
 #include <linux/errno.h>
 #include <linux/mod_devicetable.h>
 
-#define PNP_MAX_PORT           8
-#define PNP_MAX_MEM            4
+#define PNP_MAX_PORT           24
+#define PNP_MAX_MEM            12
 #define PNP_MAX_IRQ            2
 #define PNP_MAX_DMA            2
 #define PNP_NAME_LEN           50
index 1273c6ec535c96c1f5151ca47bcc0e9d1ad8db66..a5316829215b4baa861db001db567ac93d836282 100644 (file)
@@ -48,6 +48,8 @@ typedef       int (read_proc_t)(char *page, char **start, off_t off,
 typedef        int (write_proc_t)(struct file *file, const char __user *buffer,
                           unsigned long count, void *data);
 typedef int (get_info_t)(char *, char **, off_t, int);
+typedef struct proc_dir_entry *(shadow_proc_t)(struct task_struct *task,
+                                               struct proc_dir_entry *pde);
 
 struct proc_dir_entry {
        unsigned int low_ino;
@@ -75,10 +77,10 @@ struct proc_dir_entry {
        read_proc_t *read_proc;
        write_proc_t *write_proc;
        atomic_t count;         /* use count */
-       int deleted;            /* delete flag */
        int pde_users;  /* number of callers into module in progress */
        spinlock_t pde_unload_lock; /* proc_fops checks and pde_users bumps */
        struct completion *pde_unload_completion;
+       shadow_proc_t *shadow_proc;
 };
 
 struct kcore_list {
index 6d5e4a46781ef1ca6dff692b6685e2e645c42153..f2d0d15277216f9655ab254f3f9c9ef3ea471972 100644 (file)
@@ -133,6 +133,9 @@ struct rtc_class_ops {
 #define RTC_DEVICE_NAME_SIZE 20
 struct rtc_task;
 
+/* flags */
+#define RTC_DEV_BUSY 0
+
 struct rtc_device
 {
        struct device dev;
@@ -145,7 +148,7 @@ struct rtc_device
        struct mutex ops_lock;
 
        struct cdev char_dev;
-       struct mutex char_lock;
+       unsigned long flags;
 
        unsigned long irq_data;
        spinlock_t irq_lock;
index 25973504414823b7876d2f34256ea1f103018ddb..416e000dfe81c0febed74c4f8aef8bcd979565db 100644 (file)
 
 #define SG_MAGIC       0x87654321
 
+/*
+ * We overload the LSB of the page pointer to indicate whether it's
+ * a valid sg entry, or whether it points to the start of a new scatterlist.
+ * Those low bits are there for everyone! (thanks mason :-)
+ */
+#define sg_is_chain(sg)                ((sg)->page_link & 0x01)
+#define sg_is_last(sg)         ((sg)->page_link & 0x02)
+#define sg_chain_ptr(sg)       \
+       ((struct scatterlist *) ((sg)->page_link & ~0x03))
+
 /**
  * sg_assign_page - Assign a given page to an SG entry
  * @sg:                    SG entry
@@ -47,6 +57,7 @@ static inline void sg_assign_page(struct scatterlist *sg, struct page *page)
        BUG_ON((unsigned long) page & 0x03);
 #ifdef CONFIG_DEBUG_SG
        BUG_ON(sg->sg_magic != SG_MAGIC);
+       BUG_ON(sg_is_chain(sg));
 #endif
        sg->page_link = page_link | (unsigned long) page;
 }
@@ -73,7 +84,14 @@ static inline void sg_set_page(struct scatterlist *sg, struct page *page,
        sg->length = len;
 }
 
-#define sg_page(sg)    ((struct page *) ((sg)->page_link & ~0x3))
+static inline struct page *sg_page(struct scatterlist *sg)
+{
+#ifdef CONFIG_DEBUG_SG
+       BUG_ON(sg->sg_magic != SG_MAGIC);
+       BUG_ON(sg_is_chain(sg));
+#endif
+       return (struct page *)((sg)->page_link & ~0x3);
+}
 
 /**
  * sg_set_buf - Set sg entry to point at given data
@@ -88,16 +106,6 @@ static inline void sg_set_buf(struct scatterlist *sg, const void *buf,
        sg_set_page(sg, virt_to_page(buf), buflen, offset_in_page(buf));
 }
 
-/*
- * We overload the LSB of the page pointer to indicate whether it's
- * a valid sg entry, or whether it points to the start of a new scatterlist.
- * Those low bits are there for everyone! (thanks mason :-)
- */
-#define sg_is_chain(sg)                ((sg)->page_link & 0x01)
-#define sg_is_last(sg)         ((sg)->page_link & 0x02)
-#define sg_chain_ptr(sg)       \
-       ((struct scatterlist *) ((sg)->page_link & ~0x03))
-
 /**
  * sg_next - return the next scatterlist entry in a list
  * @sg:                The current sg entry
@@ -179,6 +187,13 @@ static inline void sg_chain(struct scatterlist *prv, unsigned int prv_nents,
 #ifndef ARCH_HAS_SG_CHAIN
        BUG();
 #endif
+
+       /*
+        * offset and length are unused for chain entry.  Clear them.
+        */
+       prv->offset = 0;
+       prv->length = 0;
+
        /*
         * Set lowest bit to indicate a link pointer, and make sure to clear
         * the termination bit if it happens to be set.
index ee800e7a70de427ae9ce46e34c27ac659d04336b..ac3d496fbd20266ad6ef88848f967eb8a550047a 100644 (file)
@@ -282,6 +282,10 @@ static inline void touch_all_softlockup_watchdogs(void)
 
 /* Attach to any functions which should be ignored in wchan output. */
 #define __sched                __attribute__((__section__(".sched.text")))
+
+/* Linker adds these: start and end of __sched functions */
+extern char __sched_text_start[], __sched_text_end[];
+
 /* Is this address in the __sched functions? */
 extern int in_sched_functions(unsigned long addr);
 
index 827b85bbf388213304c6614eee4d0a57bd2b1845..1ee2c05142f627ba68cfcf17205a1ae3e38b8893 100644 (file)
@@ -63,6 +63,8 @@ struct screen_info {
 
 #define VIDEO_TYPE_PMAC                0x60    /* PowerMacintosh frame buffer. */
 
+#define VIDEO_TYPE_EFI         0x70    /* EFI graphic mode             */
+
 #ifdef __KERNEL__
 extern struct screen_info screen_info;
 
index 6a5203fb9cf1fdae9b7bbb9ff8cd6e36de374592..9963f81fea9a080e63b4093023ff7ad98f23a5ac 100644 (file)
@@ -437,7 +437,7 @@ uart_handle_sysrq_char(struct uart_port *port, unsigned int ch)
 #ifdef SUPPORT_SYSRQ
        if (port->sysrq) {
                if (ch && time_before(jiffies, port->sysrq)) {
-                       handle_sysrq(ch, port->info->tty);
+                       handle_sysrq(ch, port->info ? port->info->tty : NULL);
                        port->sysrq = 0;
                        return 1;
                }
index 91140fe8c119a317b28d62ce1255f00d8719dba8..bddd50bd6878856ba20363ec2dda6101cde0f879 100644 (file)
@@ -356,7 +356,6 @@ static inline struct sk_buff *alloc_skb_fclone(unsigned int size,
        return __alloc_skb(size, priority, 1, -1);
 }
 
-extern void           kfree_skbmem(struct sk_buff *skb);
 extern struct sk_buff *skb_morph(struct sk_buff *dst, struct sk_buff *src);
 extern struct sk_buff *skb_clone(struct sk_buff *skb,
                                 gfp_t priority);
index 3347c72b848abaadd0f12fd0e650dbf8323729ce..3912cf16361ee98aa9334399fe6d8289e3270364 100644 (file)
@@ -88,11 +88,6 @@ enum {
        CTL_SLOTTABLE_TCP,
        CTL_MIN_RESVPORT,
        CTL_MAX_RESVPORT,
-       CTL_SLOTTABLE_RDMA,
-       CTL_RDMA_MAXINLINEREAD,
-       CTL_RDMA_MAXINLINEWRITE,
-       CTL_RDMA_WRITEPADDING,
-       CTL_RDMA_MEMREG,
 };
 
 #endif /* _LINUX_SUNRPC_DEBUG_H_ */
index 2c6c2c2783d8b899940280c47a70ee3bff588e18..c2a46c45c8f75a3dab16327b78651501e1bd5740 100644 (file)
@@ -9,12 +9,6 @@
 
 #ifdef __KERNEL__
 
-/*
- * Socket transport setup operations
- */
-struct rpc_xprt *xs_setup_udp(struct xprt_create *args);
-struct rpc_xprt *xs_setup_tcp(struct xprt_create *args);
-
 int            init_socket_xprt(void);
 void           cleanup_socket_xprt(void);
 
index e99171f01b4cf482c2cd8720dea2f0921c08b4e2..4f5047df8a9efbf6672c31883222f902f5ee6c8b 100644 (file)
@@ -70,7 +70,6 @@ enum
        CTL_ABI=9,              /* Binary emulation */
        CTL_CPU=10,             /* CPU stuff (speed scaling, etc) */
        CTL_ARLAN=254,          /* arlan wireless driver */
-       CTL_APPLDATA=2120,      /* s390 appldata */
        CTL_S390DBF=5677,       /* s390 debug */
        CTL_SUNRPC=7249,        /* sunrpc debug */
        CTL_PM=9899,            /* frv power management */
@@ -207,11 +206,6 @@ enum
        VM_PANIC_ON_OOM=33,     /* panic at out-of-memory */
        VM_VDSO_ENABLED=34,     /* map VDSO into new processes? */
        VM_MIN_SLAB=35,          /* Percent pages ignored by zone reclaim */
-
-       /* s390 vm cmm sysctls */
-       VM_CMM_PAGES=1111,
-       VM_CMM_TIMED_PAGES=1112,
-       VM_CMM_TIMEOUT=1113,
 };
 
 
index 1c4eb41dbd89df9182c3fcdbf9f418c5958cc5c6..9c4ad755d7e57cd856409589617ed31917abe6d5 100644 (file)
@@ -7,12 +7,25 @@
 #ifndef _LINUX_THREAD_INFO_H
 #define _LINUX_THREAD_INFO_H
 
+#include <linux/types.h>
+
 /*
- * System call restart block. 
+ * System call restart block.
  */
 struct restart_block {
        long (*fn)(struct restart_block *);
-       unsigned long arg0, arg1, arg2, arg3;
+       union {
+               struct {
+                       unsigned long arg0, arg1, arg2, arg3;
+               };
+               /* For futex_wait */
+               struct {
+                       u32 *uaddr;
+                       u32 val;
+                       u32 flags;
+                       u64 time;
+               } futex;
+       };
 };
 
 extern long do_no_restart_syscall(struct restart_block *parm);
index 37ac3ff90fafb16f7814297d247c2a3c28c59204..24c6a2b59511edbe9ba01d22ba265a202645bed7 100644 (file)
@@ -137,6 +137,7 @@ struct timex {
 #define ADJ_TIMECONST          0x0020  /* pll time constant */
 #define ADJ_TICK               0x4000  /* tick value */
 #define ADJ_OFFSET_SINGLESHOT  0x8001  /* old-fashioned adjtime */
+#define ADJ_OFFSET_SS_READ     0xa001  /* read-only adjtime */
 
 /* xntp 3.4 compatibility names */
 #define MOD_OFFSET     ADJ_OFFSET
index c5c8f169d3cffe001f893d09c0b93272efeb1986..416ee7617d9eac56ad07b320c814742d19998d65 100644 (file)
@@ -157,6 +157,7 @@ struct usb_interface {
                                         * bound to */
        enum usb_interface_condition condition;         /* state of binding */
        unsigned is_active:1;           /* the interface is not suspended */
+       unsigned sysfs_files_created:1; /* the sysfs attributes exist */
        unsigned needs_remote_wakeup:1; /* driver requires remote wakeup */
 
        struct device dev;              /* interface specific device info */
index 342dd5a7e8bb822f139955bb91ba9cab069b3e2f..8ca5a7fbc9ecaf38d8baefa7da3618aadd628828 100644 (file)
@@ -102,7 +102,8 @@ struct usbdevfs_urb {
        int start_frame;
        int number_of_packets;
        int error_count;
-       unsigned int signr;  /* signal to be sent on error, -1 if none should be sent */
+       unsigned int signr;     /* signal to be sent on completion,
+                                 or 0 if none should be sent. */
        void *usercontext;
        struct usbdevfs_iso_packet_desc iso_frame_desc[0];
 };
index 0fa5d591255561b00e5cea79586c4eccdada9697..4fd5d0eaa935fba6dab336565f4c70004dd12555 100644 (file)
@@ -208,6 +208,8 @@ int videobuf_cgmbuf(struct videobuf_queue *q,
 int videobuf_streamon(struct videobuf_queue *q);
 int videobuf_streamoff(struct videobuf_queue *q);
 
+void videobuf_stop(struct videobuf_queue *q);
+
 int videobuf_read_start(struct videobuf_queue *q);
 void videobuf_read_stop(struct videobuf_queue *q);
 ssize_t videobuf_read_stream(struct videobuf_queue *q,
index 164d13211165422ef32ed5e206025d8daf060ed0..d8ae48439f120a27b18e7d226ba49d54a16b322e 100644 (file)
@@ -115,8 +115,16 @@ extern u32 ieee80211_debug_level;
 do { if (ieee80211_debug_level & (level)) \
   printk(KERN_DEBUG "ieee80211: %c %s " fmt, \
          in_interrupt() ? 'I' : 'U', __FUNCTION__ , ## args); } while (0)
+static inline bool ieee80211_ratelimit_debug(u32 level)
+{
+       return (ieee80211_debug_level & level) && net_ratelimit();
+}
 #else
 #define IEEE80211_DEBUG(level, fmt, args...) do {} while (0)
+static inline bool ieee80211_ratelimit_debug(u32 level)
+{
+       return false;
+}
 #endif                         /* CONFIG_IEEE80211_DEBUG */
 
 /* escape_essid() is intended to be used in debug (and possibly error)
index 469216d936631d3e76a4d92544b7e9f32e5c0706..37f6cb11212723f7f2094a16b6cec92bbe9ef670 100644 (file)
@@ -186,9 +186,8 @@ static inline void inet_ehash_locks_free(struct inet_hashinfo *hashinfo)
                if (size > PAGE_SIZE)
                        vfree(hashinfo->ehash_locks);
                else
-#else
-               kfree(hashinfo->ehash_locks);
 #endif
+               kfree(hashinfo->ehash_locks);
                hashinfo->ehash_locks = NULL;
        }
 }
index 67ea2c0c0ab75a1fb1a40dd31c734c6326f73cca..8a7d59be8a0d0e4886d9384215b315a1f1f320a1 100644 (file)
@@ -327,40 +327,6 @@ extern int ip_vs_get_debug_level(void);
 #define FTPPORT  __constant_htons(21)
 #define FTPDATA  __constant_htons(20)
 
-/*
- *      IPVS sysctl variables under the /proc/sys/net/ipv4/vs/
- */
-#define NET_IPV4_VS              21
-
-enum {
-       NET_IPV4_VS_DEBUG_LEVEL=1,
-       NET_IPV4_VS_AMEMTHRESH=2,
-       NET_IPV4_VS_AMDROPRATE=3,
-       NET_IPV4_VS_DROP_ENTRY=4,
-       NET_IPV4_VS_DROP_PACKET=5,
-       NET_IPV4_VS_SECURE_TCP=6,
-       NET_IPV4_VS_TO_ES=7,
-       NET_IPV4_VS_TO_SS=8,
-       NET_IPV4_VS_TO_SR=9,
-       NET_IPV4_VS_TO_FW=10,
-       NET_IPV4_VS_TO_TW=11,
-       NET_IPV4_VS_TO_CL=12,
-       NET_IPV4_VS_TO_CW=13,
-       NET_IPV4_VS_TO_LA=14,
-       NET_IPV4_VS_TO_LI=15,
-       NET_IPV4_VS_TO_SA=16,
-       NET_IPV4_VS_TO_UDP=17,
-       NET_IPV4_VS_TO_ICMP=18,
-       NET_IPV4_VS_LBLC_EXPIRE=19,
-       NET_IPV4_VS_LBLCR_EXPIRE=20,
-       NET_IPV4_VS_CACHE_BYPASS=22,
-       NET_IPV4_VS_EXPIRE_NODEST_CONN=23,
-       NET_IPV4_VS_SYNC_THRESHOLD=24,
-       NET_IPV4_VS_NAT_ICMP_SEND=25,
-       NET_IPV4_VS_EXPIRE_QUIESCENT_TEMPLATE=26,
-       NET_IPV4_VS_LAST
-};
-
 /*
  *      TCP State Values
  */
index f7ce6259f86fb50754df9e1ee27744744ffad1f8..59b0b19205a290e07d666d259012979ae4d1d800 100644 (file)
@@ -109,7 +109,6 @@ struct in_device;
 extern int             ip_rt_init(void);
 extern void            ip_rt_redirect(__be32 old_gw, __be32 dst, __be32 new_gw,
                                       __be32 src, struct net_device *dev);
-extern void            ip_rt_advice(struct rtable **rp, int advice);
 extern void            rt_cache_flush(int how);
 extern int             __ip_route_output_key(struct rtable **, const struct flowi *flp);
 extern int             ip_route_output_key(struct rtable **, struct flowi *flp);
index f30b537d69525168e078a2eb8a0c39a51ef6bdc1..05f22a6afbcdc4cceeefd4431696db74c384f044 100644 (file)
@@ -441,11 +441,14 @@ enum {
        SCTP_AUTH_HMAC_ID_RESERVED_0,
        SCTP_AUTH_HMAC_ID_SHA1,
        SCTP_AUTH_HMAC_ID_RESERVED_2,
-       SCTP_AUTH_HMAC_ID_SHA256
+#if defined (CONFIG_CRYPTO_SHA256) || defined (CONFIG_CRYPTO_SHA256_MODULE)
+       SCTP_AUTH_HMAC_ID_SHA256,
+#endif
+       __SCTP_AUTH_HMAC_MAX
 };
 
-#define SCTP_AUTH_HMAC_ID_MAX  SCTP_AUTH_HMAC_ID_SHA256
-#define SCTP_AUTH_NUM_HMACS (SCTP_AUTH_HMAC_ID_SHA256 + 1)
+#define SCTP_AUTH_HMAC_ID_MAX  __SCTP_AUTH_HMAC_MAX - 1
+#define SCTP_AUTH_NUM_HMACS    __SCTP_AUTH_HMAC_MAX
 #define SCTP_SHA1_SIG_SIZE 20
 #define SCTP_SHA256_SIG_SIZE 32
 
index eb3113c38a943469c74b76163f6ee448b528d66f..002a00a4e6be0447ac654bdab49a7c5a5f824077 100644 (file)
@@ -1184,6 +1184,9 @@ int sctp_bind_addr_copy(struct sctp_bind_addr *dest,
                        const struct sctp_bind_addr *src,
                        sctp_scope_t scope, gfp_t gfp,
                        int flags);
+int sctp_bind_addr_dup(struct sctp_bind_addr *dest,
+                       const struct sctp_bind_addr *src,
+                       gfp_t gfp);
 int sctp_add_bind_addr(struct sctp_bind_addr *, union sctp_addr *,
                       __u8 use_as_src, gfp_t gfp);
 int sctp_del_bind_addr(struct sctp_bind_addr *, union sctp_addr *);
index 567e468d74929c993f6c8fd14271068dc6bc0eb3..67e35c7e230c42a08bb718e6508d3826dbbe6cdd 100644 (file)
@@ -1236,6 +1236,9 @@ static inline struct sk_buff *sk_stream_alloc_pskb(struct sock *sk,
 {
        struct sk_buff *skb;
 
+       /* The TCP header must be at least 32-bit aligned.  */
+       size = ALIGN(size, 4);
+
        skb = alloc_skb_fclone(size + sk->sk_prot->max_header, gfp);
        if (skb) {
                skb->truesize += mem;
index d695cea7730da4a4bd16da6c0ce7bfcf2680767f..cb5b033e0e59c205980243d2b7e494db0925f218 100644 (file)
@@ -1288,6 +1288,9 @@ static inline void tcp_insert_write_queue_before(struct sk_buff *new,
                                                  struct sock *sk)
 {
        __skb_insert(new, skb->prev, skb, &sk->sk_write_queue);
+
+       if (sk->sk_send_head == skb)
+               sk->sk_send_head = new;
 }
 
 static inline void tcp_unlink_write_queue(struct sk_buff *skb, struct sock *sk)
index 66e9058357e02d85d8617b9cd58edf893fff0b30..6c2d80b36aa1b21f0066c284a64df692e375b948 100644 (file)
@@ -242,6 +242,9 @@ extern struct scsi_device *__scsi_device_lookup_by_target(struct scsi_target *,
                                                          uint);
 extern void starget_for_each_device(struct scsi_target *, void *,
                     void (*fn)(struct scsi_device *, void *));
+extern void __starget_for_each_device(struct scsi_target *, void *,
+                                     void (*fn)(struct scsi_device *,
+                                                void *));
 
 /* only exposed to implement shost_for_each_device */
 extern struct scsi_device *__scsi_iterate_devices(struct Scsi_Host *,
index a2be8ad8894b2d7386104ac6fa3193e1ddf61abe..a9781eb0da09be35cfcb2e6068a4cf14653028e8 100644 (file)
@@ -1,3 +1,3 @@
 /* include/version.h.  Generated by alsa/ksync script.  */
 #define CONFIG_SND_VERSION "1.0.15"
-#define CONFIG_SND_DATE " (Tue Oct 23 06:09:18 2007 UTC)"
+#define CONFIG_SND_DATE " (Tue Nov 20 19:16:42 2007 UTC)"
index c5b354b1409e13e80d32e366b5a9844d9481e0d6..404bbf3699becba6bc43dbe9c945506ad1a93d2c 100644 (file)
@@ -354,6 +354,13 @@ config FAIR_CGROUP_SCHED
 
 endchoice
 
+config CGROUP_CPUACCT
+       bool "Simple CPU accounting cgroup subsystem"
+       depends on CGROUPS
+       help
+         Provides a simple Resource Controller for monitoring the
+         total CPU consumed by the tasks in a cgroup
+
 config SYSFS_DEPRECATED
        bool "Create deprecated sysfs files"
        default y
@@ -438,7 +445,7 @@ menuconfig EMBEDDED
 
 config UID16
        bool "Enable 16-bit UID system calls" if EMBEDDED
-       depends on ARM || BFIN || CRIS || FRV || H8300 || X86_32 || M68K || (S390 && !64BIT) || SUPERH || SPARC32 || (SPARC64 && SPARC32_COMPAT) || UML || (X86_64 && IA32_EMULATION)
+       depends on ARM || BLACKFIN || CRIS || FRV || H8300 || X86_32 || M68K || (S390 && !64BIT) || SUPERH || SPARC32 || (SPARC64 && SPARC32_COMPAT) || UML || (X86_64 && IA32_EMULATION)
        default y
        help
          This enables the legacy 16-bit UID syscall wrappers.
index fd4fc12d262464b0b763e2e0fb5dd1781f2a3b70..614241b5200cf906c066288ac15a42df835490ce 100644 (file)
@@ -55,12 +55,18 @@ static void __init handle_initrd(void)
        sys_mount(".", "/", NULL, MS_MOVE, NULL);
        sys_chroot(".");
 
+       /*
+        * In case that a resume from disk is carried out by linuxrc or one of
+        * its children, we need to tell the freezer not to wait for us.
+        */
+       current->flags |= PF_FREEZER_SKIP;
+
        pid = kernel_thread(do_linuxrc, "/linuxrc", SIGCHLD);
        if (pid > 0)
-               while (pid != sys_wait4(-1, NULL, 0, NULL)) {
-                       try_to_freeze();
+               while (pid != sys_wait4(-1, NULL, 0, NULL))
                        yield();
-               }
+
+       current->flags &= ~PF_FREEZER_SKIP;
 
        /* move initrd to rootfs' /old */
        sys_fchdir(old_fd);
index 1e04cd464af9b5ad961684dd358a97870bc36323..6ca7b97114f3c599d1fbb5c7beea0f7003bd4217 100644 (file)
@@ -1138,8 +1138,10 @@ asmlinkage long sys_mq_getsetattr(mqd_t mqdes,
        omqstat.mq_flags = filp->f_flags & O_NONBLOCK;
        if (u_mqstat) {
                ret = audit_mq_getsetattr(mqdes, &mqstat);
-               if (ret != 0)
-                       goto out;
+               if (ret != 0) {
+                       spin_unlock(&info->lock);
+                       goto out_fput;
+               }
                if (mqstat.mq_flags & O_NONBLOCK)
                        filp->f_flags |= O_NONBLOCK;
                else
index f5f2c769d95e76bfe0c0b5ca702e40f44083a366..468f47ad750395dcf2685b3b112dbcfb9ae43e7e 100644 (file)
@@ -20,8 +20,8 @@ config PROFILING
 
 config OPROFILE
        tristate "OProfile system profiling (EXPERIMENTAL)"
-       depends on PROFILING
-       depends on ALPHA || ARM || BLACKFIN || X86_32 || IA64 || M32R || MIPS || PARISC || PPC || S390 || SUPERH || SPARC || X86_64
+       depends on PROFILING && !UML
+       depends on ARCH_SUPPORTS_OPROFILE || ALPHA || ARM || BLACKFIN || IA64 || M32R || PARISC || PPC || S390 || SUPERH || SPARC
        help
          OProfile is a profiling system capable of profiling the
          whole system, include the kernel, kernel modules, libraries,
@@ -31,7 +31,7 @@ config OPROFILE
 
 config KPROBES
        bool "Kprobes"
-       depends on KALLSYMS && MODULES
+       depends on KALLSYMS && MODULES && !UML
        depends on X86_32 || IA64 || PPC || S390 || SPARC64 || X86_64 || AVR32
        help
          Kprobes allows you to trap at almost any kernel address and
index fce53d8df8a7ade114a002885a8cbfc1cdbedc49..cf19547cc9e42d346c49b0e51e89aa5fb19364d6 100644 (file)
@@ -413,7 +413,7 @@ static u32 encode_float(u64 value)
  *  The acct_process() call is the workhorse of the process
  *  accounting system. The struct acct is built here and then written
  *  into the accounting file. This function should only be called from
- *  do_exit().
+ *  do_exit() or when switching to a different output file.
  */
 
 /*
index cd0f1d4137a734abb393a5ebc5a8534b2b8f882a..549c0558ba68273c7586b26f6579d12c27d0f79d 100644 (file)
@@ -1357,7 +1357,7 @@ static int wait_task_stopped(struct task_struct *p, int delayed_group_leader,
                             int __user *stat_addr, struct rusage __user *ru)
 {
        int retval, exit_code;
-       struct pid_namespace *ns;
+       pid_t pid;
 
        if (!p->exit_code)
                return 0;
@@ -1376,12 +1376,11 @@ static int wait_task_stopped(struct task_struct *p, int delayed_group_leader,
         * keep holding onto the tasklist_lock while we call getrusage and
         * possibly take page faults for user memory.
         */
-       ns = current->nsproxy->pid_ns;
+       pid = task_pid_nr_ns(p, current->nsproxy->pid_ns);
        get_task_struct(p);
        read_unlock(&tasklist_lock);
 
        if (unlikely(noreap)) {
-               pid_t pid = task_pid_nr_ns(p, ns);
                uid_t uid = p->uid;
                int why = (p->ptrace & PT_PTRACED) ? CLD_TRAPPED : CLD_STOPPED;
 
@@ -1389,7 +1388,7 @@ static int wait_task_stopped(struct task_struct *p, int delayed_group_leader,
                if (unlikely(!exit_code) || unlikely(p->exit_state))
                        goto bail_ref;
                return wait_noreap_copyout(p, pid, uid,
-                                          why, (exit_code << 8) | 0x7f,
+                                          why, exit_code,
                                           infop, ru);
        }
 
@@ -1451,11 +1450,11 @@ bail_ref:
        if (!retval && infop)
                retval = put_user(exit_code, &infop->si_status);
        if (!retval && infop)
-               retval = put_user(task_pid_nr_ns(p, ns), &infop->si_pid);
+               retval = put_user(pid, &infop->si_pid);
        if (!retval && infop)
                retval = put_user(p->uid, &infop->si_uid);
        if (!retval)
-               retval = task_pid_nr_ns(p, ns);
+               retval = pid;
        put_task_struct(p);
 
        BUG_ON(!retval);
index 8ca1a14cdc8c12ee8e592f7913f07f22dcec3d9b..8dd8ff2810095d9bab2e511e60dbfe2500ef8b90 100644 (file)
@@ -1292,23 +1292,14 @@ static struct task_struct *copy_process(unsigned long clone_flags,
                        __ptrace_link(p, current->parent);
 
                if (thread_group_leader(p)) {
-                       if (clone_flags & CLONE_NEWPID) {
+                       if (clone_flags & CLONE_NEWPID)
                                p->nsproxy->pid_ns->child_reaper = p;
-                               p->signal->tty = NULL;
-                               set_task_pgrp(p, p->pid);
-                               set_task_session(p, p->pid);
-                               attach_pid(p, PIDTYPE_PGID, pid);
-                               attach_pid(p, PIDTYPE_SID, pid);
-                       } else {
-                               p->signal->tty = current->signal->tty;
-                               set_task_pgrp(p, task_pgrp_nr(current));
-                               set_task_session(p, task_session_nr(current));
-                               attach_pid(p, PIDTYPE_PGID,
-                                               task_pgrp(current));
-                               attach_pid(p, PIDTYPE_SID,
-                                               task_session(current));
-                       }
 
+                       p->signal->tty = current->signal->tty;
+                       set_task_pgrp(p, task_pgrp_nr(current));
+                       set_task_session(p, task_session_nr(current));
+                       attach_pid(p, PIDTYPE_PGID, task_pgrp(current));
+                       attach_pid(p, PIDTYPE_SID, task_session(current));
                        list_add_tail_rcu(&p->tasks, &init_task.tasks);
                        __get_cpu_var(process_counts)++;
                }
index 9dc591ab681a92c87209463e922f1a06e8d9bfa7..172a1aeeafdb5a148f6a0063bc3bc719b1974096 100644 (file)
@@ -658,7 +658,7 @@ static int wake_futex_pi(u32 __user *uaddr, u32 uval, struct futex_q *this)
 
                if (curval == -EFAULT)
                        ret = -EFAULT;
-               if (curval != uval)
+               else if (curval != uval)
                        ret = -EINVAL;
                if (ret) {
                        spin_unlock(&pi_state->pi_mutex.wait_lock);
@@ -1149,9 +1149,9 @@ static int fixup_pi_state_owner(u32 __user *uaddr, struct futex_q *q,
 
 /*
  * In case we must use restart_block to restart a futex_wait,
- * we encode in the 'arg3' shared capability
+ * we encode in the 'flags' shared capability
  */
-#define ARG3_SHARED  1
+#define FLAGS_SHARED  1
 
 static long futex_wait_restart(struct restart_block *restart);
 
@@ -1290,12 +1290,13 @@ static int futex_wait(u32 __user *uaddr, struct rw_semaphore *fshared,
                struct restart_block *restart;
                restart = &current_thread_info()->restart_block;
                restart->fn = futex_wait_restart;
-               restart->arg0 = (unsigned long)uaddr;
-               restart->arg1 = (unsigned long)val;
-               restart->arg2 = (unsigned long)abs_time;
-               restart->arg3 = 0;
+               restart->futex.uaddr = (u32 *)uaddr;
+               restart->futex.val = val;
+               restart->futex.time = abs_time->tv64;
+               restart->futex.flags = 0;
+
                if (fshared)
-                       restart->arg3 |= ARG3_SHARED;
+                       restart->futex.flags |= FLAGS_SHARED;
                return -ERESTART_RESTARTBLOCK;
        }
 
@@ -1310,15 +1311,15 @@ static int futex_wait(u32 __user *uaddr, struct rw_semaphore *fshared,
 
 static long futex_wait_restart(struct restart_block *restart)
 {
-       u32 __user *uaddr = (u32 __user *)restart->arg0;
-       u32 val = (u32)restart->arg1;
-       ktime_t *abs_time = (ktime_t *)restart->arg2;
+       u32 __user *uaddr = (u32 __user *)restart->futex.uaddr;
        struct rw_semaphore *fshared = NULL;
+       ktime_t t;
 
+       t.tv64 = restart->futex.time;
        restart->fn = do_no_restart_syscall;
-       if (restart->arg3 & ARG3_SHARED)
+       if (restart->futex.flags & FLAGS_SHARED)
                fshared = &current->mm->mmap_sem;
-       return (long)futex_wait(uaddr, fshared, val, abs_time);
+       return (long)futex_wait(uaddr, fshared, restart->futex.val, &t);
 }
 
 
index 22a25142e4cf923967d770ef23a7992d1b19ff42..e65dd0b47cdc13a31abc762315152cb49edea8d8 100644 (file)
@@ -850,6 +850,14 @@ hrtimer_start(struct hrtimer *timer, ktime_t tim, const enum hrtimer_mode mode)
 #ifdef CONFIG_TIME_LOW_RES
                tim = ktime_add(tim, base->resolution);
 #endif
+               /*
+                * Careful here: User space might have asked for a
+                * very long sleep, so the add above might result in a
+                * negative number, which enqueues the timer in front
+                * of the queue.
+                */
+               if (tim.tv64 < 0)
+                       tim.tv64 = KTIME_MAX;
        }
        timer->expires = tim;
 
index 474219a41929701324f37c761d0063244200bb80..2fc25810509e187441297e4d2b8873e3d2db8ea3 100644 (file)
 
 /* These will be re-linked against their real values during the second link stage */
 extern const unsigned long kallsyms_addresses[] __attribute__((weak));
-extern const unsigned long kallsyms_num_syms __attribute__((weak));
 extern const u8 kallsyms_names[] __attribute__((weak));
 
+/* tell the compiler that the count isn't in the small data section if the arch
+ * has one (eg: FRV)
+ */
+extern const unsigned long kallsyms_num_syms
+__attribute__((weak, section(".rodata")));
+
 extern const u8 kallsyms_token_table[] __attribute__((weak));
 extern const u16 kallsyms_token_index[] __attribute__((weak));
 
index ed38bbfc48a3b84d4b290423d2443b2f32ff331c..723bd9f9255687f7820b0e151ae23a3d5ca81e7b 100644 (file)
@@ -2654,10 +2654,15 @@ static void check_flags(unsigned long flags)
        if (!debug_locks)
                return;
 
-       if (irqs_disabled_flags(flags))
-               DEBUG_LOCKS_WARN_ON(current->hardirqs_enabled);
-       else
-               DEBUG_LOCKS_WARN_ON(!current->hardirqs_enabled);
+       if (irqs_disabled_flags(flags)) {
+               if (DEBUG_LOCKS_WARN_ON(current->hardirqs_enabled)) {
+                       printk("possible reason: unannotated irqs-off.\n");
+               }
+       } else {
+               if (DEBUG_LOCKS_WARN_ON(!current->hardirqs_enabled)) {
+                       printk("possible reason: unannotated irqs-on.\n");
+               }
+       }
 
        /*
         * We dont accurately track softirq state in e.g.
@@ -3054,11 +3059,6 @@ void __init lockdep_info(void)
 #endif
 }
 
-static inline int in_range(const void *start, const void *addr, const void *end)
-{
-       return addr >= start && addr <= end;
-}
-
 static void
 print_freed_lock_bug(struct task_struct *curr, const void *mem_from,
                     const void *mem_to, struct held_lock *hlock)
@@ -3080,6 +3080,13 @@ print_freed_lock_bug(struct task_struct *curr, const void *mem_from,
        dump_stack();
 }
 
+static inline int not_in_range(const void* mem_from, unsigned long mem_len,
+                               const void* lock_from, unsigned long lock_len)
+{
+       return lock_from + lock_len <= mem_from ||
+               mem_from + mem_len <= lock_from;
+}
+
 /*
  * Called when kernel memory is freed (or unmapped), or if a lock
  * is destroyed or reinitialized - this code checks whether there is
@@ -3087,7 +3094,6 @@ print_freed_lock_bug(struct task_struct *curr, const void *mem_from,
  */
 void debug_check_no_locks_freed(const void *mem_from, unsigned long mem_len)
 {
-       const void *mem_to = mem_from + mem_len, *lock_from, *lock_to;
        struct task_struct *curr = current;
        struct held_lock *hlock;
        unsigned long flags;
@@ -3100,14 +3106,11 @@ void debug_check_no_locks_freed(const void *mem_from, unsigned long mem_len)
        for (i = 0; i < curr->lockdep_depth; i++) {
                hlock = curr->held_locks + i;
 
-               lock_from = (void *)hlock->instance;
-               lock_to = (void *)(hlock->instance + 1);
-
-               if (!in_range(mem_from, lock_from, mem_to) &&
-                                       !in_range(mem_from, lock_to, mem_to))
+               if (not_in_range(mem_from, mem_len, hlock->instance,
+                                       sizeof(*hlock->instance)))
                        continue;
 
-               print_freed_lock_bug(curr, mem_from, mem_to, hlock);
+               print_freed_lock_bug(curr, mem_from, mem_from + mem_len, hlock);
                break;
        }
        local_irq_restore(flags);
@@ -3173,6 +3176,13 @@ retry:
                printk(" locked it.\n");
 
        do_each_thread(g, p) {
+               /*
+                * It's not reliable to print a task's held locks
+                * if it's not sleeping (or if it's not the current
+                * task):
+                */
+               if (p->state == TASK_RUNNING && p != current)
+                       continue;
                if (p->lockdep_depth)
                        lockdep_print_held_locks(p);
                if (!unlock)
index 3202c9950073ebc05fb232a625da27d2ec35eee8..91fe6958b6e1b253f98c2ab08518693df00a1497 100644 (file)
@@ -81,7 +81,8 @@ int unregister_module_notifier(struct notifier_block * nb)
 }
 EXPORT_SYMBOL(unregister_module_notifier);
 
-/* We require a truly strong try_module_get() */
+/* We require a truly strong try_module_get(): 0 means failure due to
+   ongoing or failed initialization etc. */
 static inline int strong_try_module_get(struct module *mod)
 {
        if (mod && mod->state == MODULE_STATE_COMING)
@@ -952,7 +953,8 @@ static unsigned long resolve_symbol(Elf_Shdr *sechdrs,
        ret = __find_symbol(name, &owner, &crc,
                        !(mod->taints & TAINT_PROPRIETARY_MODULE));
        if (ret) {
-               /* use_module can fail due to OOM, or module unloading */
+               /* use_module can fail due to OOM,
+                  or module initialization or unloading */
                if (!check_version(sechdrs, versindex, name, mod, crc) ||
                    !use_module(mod, owner))
                        ret = 0;
@@ -1369,7 +1371,7 @@ dup:
        return ret;
 }
 
-/* Change all symbols so that sh_value encodes the pointer directly. */
+/* Change all symbols so that st_value encodes the pointer directly. */
 static int simplify_symbols(Elf_Shdr *sechdrs,
                            unsigned int symindex,
                            const char *strtab,
index 38933cafea8abdf3042dde657798fbce7dc84c6e..c6e551de795be75247f25634d5d27a70740f1948 100644 (file)
@@ -209,9 +209,8 @@ static inline struct task_group *task_group(struct task_struct *p)
        tg = container_of(task_subsys_state(p, cpu_cgroup_subsys_id),
                                struct task_group, css);
 #else
-       tg  = &init_task_group;
+       tg = &init_task_group;
 #endif
-
        return tg;
 }
 
@@ -249,15 +248,16 @@ struct cfs_rq {
 #ifdef CONFIG_FAIR_GROUP_SCHED
        struct rq *rq;  /* cpu runqueue to which this cfs_rq is attached */
 
-       /* leaf cfs_rqs are those that hold tasks (lowest schedulable entity in
+       /*
+        * leaf cfs_rqs are those that hold tasks (lowest schedulable entity in
         * a hierarchy). Non-leaf lrqs hold other higher schedulable entities
         * (like users, containers etc.)
         *
         * leaf_cfs_rq_list ties together list of leaf cfs_rq's in a cpu. This
         * list is used during load balance.
         */
-       struct list_head leaf_cfs_rq_list; /* Better name : task_cfs_rq_list? */
-       struct task_group *tg;    /* group that "owns" this runqueue */
+       struct list_head leaf_cfs_rq_list;
+       struct task_group *tg;  /* group that "owns" this runqueue */
 #endif
 };
 
@@ -300,7 +300,7 @@ struct rq {
        /* list of leaf cfs_rq on this cpu: */
        struct list_head leaf_cfs_rq_list;
 #endif
-       struct rt_rq  rt;
+       struct rt_rq rt;
 
        /*
         * This is part of a global counter where only the total sum
@@ -457,8 +457,8 @@ enum {
        SCHED_FEAT_NEW_FAIR_SLEEPERS    = 1,
        SCHED_FEAT_WAKEUP_PREEMPT       = 2,
        SCHED_FEAT_START_DEBIT          = 4,
-       SCHED_FEAT_TREE_AVG             = 8,
-       SCHED_FEAT_APPROX_AVG           = 16,
+       SCHED_FEAT_TREE_AVG             = 8,
+       SCHED_FEAT_APPROX_AVG           = 16,
 };
 
 const_debug unsigned int sysctl_sched_features =
@@ -488,7 +488,12 @@ unsigned long long cpu_clock(int cpu)
 
        local_irq_save(flags);
        rq = cpu_rq(cpu);
-       update_rq_clock(rq);
+       /*
+        * Only call sched_clock() if the scheduler has already been
+        * initialized (some code might call cpu_clock() very early):
+        */
+       if (rq->idle)
+               update_rq_clock(rq);
        now = rq->clock;
        local_irq_restore(flags);
 
@@ -591,7 +596,7 @@ static inline struct rq *__task_rq_lock(struct task_struct *p)
 
 /*
  * task_rq_lock - lock the runqueue a given task resides on and disable
- * interrupts.  Note the ordering: we can safely lookup the task_rq without
+ * interrupts. Note the ordering: we can safely lookup the task_rq without
  * explicitly disabling preemption.
  */
 static struct rq *task_rq_lock(struct task_struct *p, unsigned long *flags)
@@ -779,7 +784,7 @@ static inline void update_load_sub(struct load_weight *lw, unsigned long dec)
  * To aid in avoiding the subversion of "niceness" due to uneven distribution
  * of tasks with abnormal "nice" values across CPUs the contribution that
  * each task makes to its run queue's load is weighted according to its
- * scheduling class and "nice" value.  For SCHED_NORMAL tasks this is just a
+ * scheduling class and "nice" value. For SCHED_NORMAL tasks this is just a
  * scaled version of the new time slice allocation that they receive on time
  * slice expiry etc.
  */
@@ -854,6 +859,12 @@ iter_move_one_task(struct rq *this_rq, int this_cpu, struct rq *busiest,
                   struct rq_iterator *iterator);
 #endif
 
+#ifdef CONFIG_CGROUP_CPUACCT
+static void cpuacct_charge(struct task_struct *tsk, u64 cputime);
+#else
+static inline void cpuacct_charge(struct task_struct *tsk, u64 cputime) {}
+#endif
+
 #include "sched_stats.h"
 #include "sched_idletask.c"
 #include "sched_fair.c"
@@ -1848,7 +1859,7 @@ prepare_task_switch(struct rq *rq, struct task_struct *prev,
  * 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
+ * so, we finish that here outside of the runqueue lock. (Doing it
  * with the lock held can cause deadlocks; see schedule() for
  * details.)
  */
@@ -2130,7 +2141,7 @@ static void double_lock_balance(struct rq *this_rq, struct rq *busiest)
 /*
  * If dest_cpu is allowed for this process, migrate the task to it.
  * This is accomplished by forcing the cpu_allowed mask to only
- * allow dest_cpu, which will force the cpu onto dest_cpu.  Then
+ * allow dest_cpu, which will force the cpu onto dest_cpu. Then
  * the cpu_allowed mask is restored.
  */
 static void sched_migrate_task(struct task_struct *p, int dest_cpu)
@@ -2575,7 +2586,7 @@ group_next:
         * tasks around. Thus we look for the minimum possible imbalance.
         * Negative imbalances (*we* are more loaded than anyone else) will
         * be counted as no imbalance for these purposes -- we can't fix that
-        * by pulling tasks to us.  Be careful of negative numbers as they'll
+        * by pulling tasks to us. Be careful of negative numbers as they'll
         * appear as very large values with unsigned longs.
         */
        if (max_load <= busiest_load_per_task)
@@ -3010,7 +3021,7 @@ static void active_load_balance(struct rq *busiest_rq, int busiest_cpu)
 
        /*
         * This condition is "impossible", if it occurs
-        * we need to fix it.  Originally reported by
+        * we need to fix it. Originally reported by
         * Bjorn Helgaas on a 128-cpu setup.
         */
        BUG_ON(busiest_rq == target_rq);
@@ -3042,7 +3053,7 @@ static void active_load_balance(struct rq *busiest_rq, int busiest_cpu)
 #ifdef CONFIG_NO_HZ
 static struct {
        atomic_t load_balancer;
-       cpumask_t  cpu_mask;
+       cpumask_t cpu_mask;
 } nohz ____cacheline_aligned = {
        .load_balancer = ATOMIC_INIT(-1),
        .cpu_mask = CPU_MASK_NONE,
@@ -3546,7 +3557,7 @@ static noinline void __schedule_bug(struct task_struct *prev)
 static inline void schedule_debug(struct task_struct *prev)
 {
        /*
-        * Test if we are atomic.  Since do_exit() needs to call into
+        * 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.
         */
@@ -3668,7 +3679,7 @@ EXPORT_SYMBOL(schedule);
 #ifdef CONFIG_PREEMPT
 /*
  * this is the entry point to schedule() from in-kernel preemption
- * off of preempt_enable.  Kernel preemptions off return from interrupt
+ * off of preempt_enable. Kernel preemptions off return from interrupt
  * occur there and call schedule directly.
  */
 asmlinkage void __sched preempt_schedule(void)
@@ -3680,7 +3691,7 @@ asmlinkage void __sched preempt_schedule(void)
 #endif
        /*
         * If there is a non-zero preempt_count or interrupts are disabled,
-        * we do not want to preempt the current task.  Just return..
+        * we do not want to preempt the current task. Just return..
         */
        if (likely(ti->preempt_count || irqs_disabled()))
                return;
@@ -3766,12 +3777,12 @@ int default_wake_function(wait_queue_t *curr, unsigned mode, int 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
+ * 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
+ * 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.
  */
 static void __wake_up_common(wait_queue_head_t *q, unsigned int mode,
@@ -4384,8 +4395,8 @@ do_sched_setscheduler(pid_t pid, int policy, struct sched_param __user *param)
  * @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)
+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)
@@ -4485,7 +4496,7 @@ long sched_setaffinity(pid_t pid, cpumask_t new_mask)
 
        /*
         * It is not safe to call set_cpus_allowed with the
-        * tasklist_lock held.  We will bump the task_struct's
+        * tasklist_lock held. We will bump the task_struct's
         * usage count and then drop tasklist_lock.
         */
        get_task_struct(p);
@@ -4681,7 +4692,7 @@ 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
+ * 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).
  */
@@ -4735,7 +4746,7 @@ void __sched yield(void)
 EXPORT_SYMBOL(yield);
 
 /*
- * This task is about to go to sleep on IO.  Increment rq->nr_iowait so
+ * 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
@@ -4844,17 +4855,21 @@ long sys_sched_rr_get_interval(pid_t pid, struct timespec __user *interval)
        if (retval)
                goto out_unlock;
 
-       if (p->policy == SCHED_FIFO)
-               time_slice = 0;
-       else if (p->policy == SCHED_RR)
+       /*
+        * Time slice is 0 for SCHED_FIFO tasks and for SCHED_OTHER
+        * tasks that are on an otherwise idle runqueue:
+        */
+       time_slice = 0;
+       if (p->policy == SCHED_RR) {
                time_slice = DEF_TIMESLICE;
-       else {
+       else {
                struct sched_entity *se = &p->se;
                unsigned long flags;
                struct rq *rq;
 
                rq = task_rq_lock(p, &flags);
-               time_slice = NS_TO_JIFFIES(sched_slice(cfs_rq_of(se), se));
+               if (rq->cfs.load.weight)
+                       time_slice = NS_TO_JIFFIES(sched_slice(&rq->cfs, se));
                task_rq_unlock(rq, &flags);
        }
        read_unlock(&tasklist_lock);
@@ -5040,7 +5055,7 @@ static inline void sched_init_granularity(void)
  * 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
+ * task must not exit() & deallocate itself prematurely. The
  * call is not atomic; no spinlocks may be held.
  */
 int set_cpus_allowed(struct task_struct *p, cpumask_t new_mask)
@@ -5077,7 +5092,7 @@ out:
 EXPORT_SYMBOL_GPL(set_cpus_allowed);
 
 /*
- * Move (not current) task off this cpu, onto dest cpu.  We're doing
+ * Move (not current) task off this cpu, onto dest cpu. We're doing
  * this because either it can't run here any more (set_cpus_allowed()
  * away from this CPU, or CPU going down), or because we're
  * attempting to rebalance this task on exec (sched_exec).
@@ -5222,7 +5237,7 @@ static void move_task_off_dead_cpu(int dead_cpu, struct task_struct *p)
                         * Try to stay on the same cpuset, where the
                         * current cpuset may be a subset of all cpus.
                         * The cpuset_cpus_allowed_locked() variant of
-                        * cpuset_cpus_allowed() will not block.  It must be
+                        * cpuset_cpus_allowed() will not block. It must be
                         * called within calls to cpuset_lock/cpuset_unlock.
                         */
                        rq = task_rq_lock(p, &flags);
@@ -5235,10 +5250,11 @@ static void move_task_off_dead_cpu(int dead_cpu, struct task_struct *p)
                         * kernel threads (both mm NULL), since they never
                         * leave kernel.
                         */
-                       if (p->mm && printk_ratelimit())
+                       if (p->mm && printk_ratelimit()) {
                                printk(KERN_INFO "process %d (%s) no "
                                       "longer affine to cpu%d\n",
-                              task_pid_nr(p), p->comm, dead_cpu);
+                                       task_pid_nr(p), p->comm, dead_cpu);
+                       }
                }
        } while (!__migrate_task_irq(p, dead_cpu, dest_cpu));
 }
@@ -5340,7 +5356,7 @@ static void migrate_dead(unsigned int dead_cpu, struct task_struct *p)
 
        /*
         * Drop lock around migration; if someone else moves it,
-        * that's OK.  No task can be added to this CPU, so iteration is
+        * that's OK. No task can be added to this CPU, so iteration is
         * fine.
         */
        spin_unlock_irq(&rq->lock);
@@ -5404,7 +5420,7 @@ static void sd_free_ctl_entry(struct ctl_table **tablep)
        /*
         * 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
+        * will always be set. In the lowest directory the names are
         * static strings and all have proc handlers.
         */
        for (entry = *tablep; entry->mode; entry++) {
@@ -5466,7 +5482,7 @@ sd_alloc_ctl_domain_table(struct sched_domain *sd)
        return table;
 }
 
-static ctl_table * sd_alloc_ctl_cpu_table(int cpu)
+static ctl_table *sd_alloc_ctl_cpu_table(int cpu)
 {
        struct ctl_table *entry, *table;
        struct sched_domain *sd;
@@ -5575,7 +5591,7 @@ migration_call(struct notifier_block *nfb, unsigned long action, void *hcpu)
        case CPU_UP_CANCELED_FROZEN:
                if (!cpu_rq(cpu)->migration_thread)
                        break;
-               /* Unbind it from offline cpu so it can run.  Fall thru. */
+               /* Unbind it from offline cpu so it can run. Fall thru. */
                kthread_bind(cpu_rq(cpu)->migration_thread,
                             any_online_cpu(cpu_online_map));
                kthread_stop(cpu_rq(cpu)->migration_thread);
@@ -5602,9 +5618,11 @@ migration_call(struct notifier_block *nfb, unsigned long action, void *hcpu)
                migrate_nr_uninterruptible(rq);
                BUG_ON(rq->nr_running != 0);
 
-               /* No need to migrate the tasks: it was best-effort if
-                * they didn't take sched_hotcpu_mutex.  Just wake up
-                * the requestors. */
+               /*
+                * No need to migrate the tasks: it was best-effort if
+                * they didn't take sched_hotcpu_mutex. Just wake up
+                * the requestors.
+                */
                spin_lock_irq(&rq->lock);
                while (!list_empty(&rq->migration_queue)) {
                        struct migration_req *req;
@@ -5912,7 +5930,7 @@ init_sched_build_groups(cpumask_t span, const cpumask_t *cpu_map,
  * @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
+ * 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.
@@ -5952,7 +5970,7 @@ static int find_next_best_node(int node, unsigned long *used_nodes)
  * @node: node whose cpumask we're constructing
  * @size: number of nodes to include in this span
  *
- * Given a node, construct a good cpumask for its sched_domain to span.  It
+ * 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.
  */
@@ -5989,8 +6007,8 @@ int sched_smt_power_savings = 0, sched_mc_power_savings = 0;
 static DEFINE_PER_CPU(struct sched_domain, cpu_domains);
 static DEFINE_PER_CPU(struct sched_group, sched_group_cpus);
 
-static int cpu_to_cpu_group(int cpu, const cpumask_t *cpu_map,
-                           struct sched_group **sg)
+static int
+cpu_to_cpu_group(int cpu, const cpumask_t *cpu_map, struct sched_group **sg)
 {
        if (sg)
                *sg = &per_cpu(sched_group_cpus, cpu);
@@ -6007,8 +6025,8 @@ static DEFINE_PER_CPU(struct sched_group, sched_group_core);
 #endif
 
 #if defined(CONFIG_SCHED_MC) && defined(CONFIG_SCHED_SMT)
-static int cpu_to_core_group(int cpu, const cpumask_t *cpu_map,
-                            struct sched_group **sg)
+static int
+cpu_to_core_group(int cpu, const cpumask_t *cpu_map, struct sched_group **sg)
 {
        int group;
        cpumask_t mask = per_cpu(cpu_sibling_map, cpu);
@@ -6019,8 +6037,8 @@ static int cpu_to_core_group(int cpu, const cpumask_t *cpu_map,
        return group;
 }
 #elif defined(CONFIG_SCHED_MC)
-static int cpu_to_core_group(int cpu, const cpumask_t *cpu_map,
-                            struct sched_group **sg)
+static int
+cpu_to_core_group(int cpu, const cpumask_t *cpu_map, struct sched_group **sg)
 {
        if (sg)
                *sg = &per_cpu(sched_group_core, cpu);
@@ -6031,8 +6049,8 @@ static int cpu_to_core_group(int cpu, const cpumask_t *cpu_map,
 static DEFINE_PER_CPU(struct sched_domain, phys_domains);
 static DEFINE_PER_CPU(struct sched_group, sched_group_phys);
 
-static int cpu_to_phys_group(int cpu, const cpumask_t *cpu_map,
-                            struct sched_group **sg)
+static int
+cpu_to_phys_group(int cpu, const cpumask_t *cpu_map, struct sched_group **sg)
 {
        int group;
 #ifdef CONFIG_SCHED_MC
@@ -6212,7 +6230,7 @@ static int build_sched_domains(const cpumask_t *cpu_map)
         * Allocate the per-node list of sched groups
         */
        sched_group_nodes = kcalloc(MAX_NUMNODES, sizeof(struct sched_group *),
-                                          GFP_KERNEL);
+                                   GFP_KERNEL);
        if (!sched_group_nodes) {
                printk(KERN_WARNING "Can not alloc sched group node list\n");
                return -ENOMEM;
@@ -6459,7 +6477,7 @@ static int ndoms_cur;             /* number of sched domains in 'doms_cur' */
 static cpumask_t fallback_doms;
 
 /*
- * Set up scheduler domains and groups.  Callers must hold the hotplug lock.
+ * 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.
  */
@@ -6501,19 +6519,19 @@ static void detach_destroy_domains(const cpumask_t *cpu_map)
 
 /*
  * Partition sched domains as specified by the 'ndoms_new'
- * cpumasks in the array doms_new[] of cpumasks.  This compares
+ * 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_t'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
+ * 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
+ * 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,
  * and partition_sched_domains() will fallback to the single partition
  * 'fallback_doms'.
@@ -6643,7 +6661,7 @@ int sched_create_sysfs_power_savings_entries(struct sysdev_class *cls)
 #endif
 
 /*
- * Force a reinitialization of the sched domains hierarchy.  The domains
+ * Force a reinitialization of the sched domains hierarchy. The domains
  * and groups cannot be updated in place without racing with the balancing
  * code, so we temporarily attach all running cpus to the NULL domain
  * which will prevent rebalancing while the sched domains are recalculated.
@@ -6708,9 +6726,6 @@ void __init sched_init_smp(void)
 
 int in_sched_functions(unsigned long addr)
 {
-       /* Linker adds these: start and end of __sched functions */
-       extern char __sched_text_start[], __sched_text_end[];
-
        return in_lock_functions(addr) ||
                (addr >= (unsigned long)__sched_text_start
                && addr < (unsigned long)__sched_text_end);
@@ -6936,8 +6951,8 @@ struct task_struct *curr_task(int cpu)
  * @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
+ * 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
@@ -7186,16 +7201,17 @@ cpu_cgroup_create(struct cgroup_subsys *ss, struct cgroup *cgrp)
        return &tg->css;
 }
 
-static void cpu_cgroup_destroy(struct cgroup_subsys *ss,
-                              struct cgroup *cgrp)
+static void
+cpu_cgroup_destroy(struct cgroup_subsys *ss, struct cgroup *cgrp)
 {
        struct task_group *tg = cgroup_tg(cgrp);
 
        sched_destroy_group(tg);
 }
 
-static int cpu_cgroup_can_attach(struct cgroup_subsys *ss,
-                            struct cgroup *cgrp, struct task_struct *tsk)
+static int
+cpu_cgroup_can_attach(struct cgroup_subsys *ss, struct cgroup *cgrp,
+                     struct task_struct *tsk)
 {
        /* We don't support RT-tasks being in separate groups */
        if (tsk->sched_class != &fair_sched_class)
@@ -7224,38 +7240,12 @@ static u64 cpu_shares_read_uint(struct cgroup *cgrp, struct cftype *cft)
        return (u64) tg->shares;
 }
 
-static u64 cpu_usage_read(struct cgroup *cgrp, struct cftype *cft)
-{
-       struct task_group *tg = cgroup_tg(cgrp);
-       unsigned long flags;
-       u64 res = 0;
-       int i;
-
-       for_each_possible_cpu(i) {
-               /*
-                * Lock to prevent races with updating 64-bit counters
-                * on 32-bit arches.
-                */
-               spin_lock_irqsave(&cpu_rq(i)->lock, flags);
-               res += tg->se[i]->sum_exec_runtime;
-               spin_unlock_irqrestore(&cpu_rq(i)->lock, flags);
-       }
-       /* Convert from ns to ms */
-       do_div(res, NSEC_PER_MSEC);
-
-       return res;
-}
-
 static struct cftype cpu_files[] = {
        {
                .name = "shares",
                .read_uint = cpu_shares_read_uint,
                .write_uint = cpu_shares_write_uint,
        },
-       {
-               .name = "usage",
-               .read_uint = cpu_usage_read,
-       },
 };
 
 static int cpu_cgroup_populate(struct cgroup_subsys *ss, struct cgroup *cont)
@@ -7275,3 +7265,126 @@ struct cgroup_subsys cpu_cgroup_subsys = {
 };
 
 #endif /* CONFIG_FAIR_CGROUP_SCHED */
+
+#ifdef CONFIG_CGROUP_CPUACCT
+
+/*
+ * CPU accounting code for task groups.
+ *
+ * Based on the work by Paul Menage (menage@google.com) and Balbir Singh
+ * (balbir@in.ibm.com).
+ */
+
+/* track cpu usage of a group of tasks */
+struct cpuacct {
+       struct cgroup_subsys_state css;
+       /* cpuusage holds pointer to a u64-type object on every cpu */
+       u64 *cpuusage;
+};
+
+struct cgroup_subsys cpuacct_subsys;
+
+/* return cpu accounting group corresponding to this container */
+static inline struct cpuacct *cgroup_ca(struct cgroup *cont)
+{
+       return container_of(cgroup_subsys_state(cont, cpuacct_subsys_id),
+                           struct cpuacct, css);
+}
+
+/* return cpu accounting group to which this task belongs */
+static inline struct cpuacct *task_ca(struct task_struct *tsk)
+{
+       return container_of(task_subsys_state(tsk, cpuacct_subsys_id),
+                           struct cpuacct, css);
+}
+
+/* create a new cpu accounting group */
+static struct cgroup_subsys_state *cpuacct_create(
+       struct cgroup_subsys *ss, struct cgroup *cont)
+{
+       struct cpuacct *ca = kzalloc(sizeof(*ca), GFP_KERNEL);
+
+       if (!ca)
+               return ERR_PTR(-ENOMEM);
+
+       ca->cpuusage = alloc_percpu(u64);
+       if (!ca->cpuusage) {
+               kfree(ca);
+               return ERR_PTR(-ENOMEM);
+       }
+
+       return &ca->css;
+}
+
+/* destroy an existing cpu accounting group */
+static void
+cpuacct_destroy(struct cgroup_subsys *ss, struct cgroup *cont)
+{
+       struct cpuacct *ca = cgroup_ca(cont);
+
+       free_percpu(ca->cpuusage);
+       kfree(ca);
+}
+
+/* return total cpu usage (in nanoseconds) of a group */
+static u64 cpuusage_read(struct cgroup *cont, struct cftype *cft)
+{
+       struct cpuacct *ca = cgroup_ca(cont);
+       u64 totalcpuusage = 0;
+       int i;
+
+       for_each_possible_cpu(i) {
+               u64 *cpuusage = percpu_ptr(ca->cpuusage, i);
+
+               /*
+                * Take rq->lock to make 64-bit addition safe on 32-bit
+                * platforms.
+                */
+               spin_lock_irq(&cpu_rq(i)->lock);
+               totalcpuusage += *cpuusage;
+               spin_unlock_irq(&cpu_rq(i)->lock);
+       }
+
+       return totalcpuusage;
+}
+
+static struct cftype files[] = {
+       {
+               .name = "usage",
+               .read_uint = cpuusage_read,
+       },
+};
+
+static int cpuacct_populate(struct cgroup_subsys *ss, struct cgroup *cont)
+{
+       return cgroup_add_files(cont, ss, files, ARRAY_SIZE(files));
+}
+
+/*
+ * charge this task's execution time to its accounting group.
+ *
+ * called with rq->lock held.
+ */
+static void cpuacct_charge(struct task_struct *tsk, u64 cputime)
+{
+       struct cpuacct *ca;
+
+       if (!cpuacct_subsys.active)
+               return;
+
+       ca = task_ca(tsk);
+       if (ca) {
+               u64 *cpuusage = percpu_ptr(ca->cpuusage, task_cpu(tsk));
+
+               *cpuusage += cputime;
+       }
+}
+
+struct cgroup_subsys cpuacct_subsys = {
+       .name = "cpuacct",
+       .create = cpuacct_create,
+       .destroy = cpuacct_destroy,
+       .populate = cpuacct_populate,
+       .subsys_id = cpuacct_subsys_id,
+};
+#endif /* CONFIG_CGROUP_CPUACCT */
index ca198a797bfab87691616f05da95c16912bd105b..d30467b47ddd0cd681f6da0afbe9c96c8b52df93 100644 (file)
@@ -199,7 +199,7 @@ static int sched_debug_show(struct seq_file *m, void *v)
        u64 now = ktime_to_ns(ktime_get());
        int cpu;
 
-       SEQ_printf(m, "Sched Debug Version: v0.06-v22, %s %.*s\n",
+       SEQ_printf(m, "Sched Debug Version: v0.07, %s %.*s\n",
                init_utsname()->release,
                (int)strcspn(init_utsname()->version, " "),
                init_utsname()->version);
@@ -327,10 +327,12 @@ void proc_sched_show_task(struct task_struct *p, struct seq_file *m)
                        avg_atom = -1LL;
 
                avg_per_cpu = p->se.sum_exec_runtime;
-               if (p->se.nr_migrations)
-                       avg_per_cpu = div64_64(avg_per_cpu, p->se.nr_migrations);
-               else
+               if (p->se.nr_migrations) {
+                       avg_per_cpu = div64_64(avg_per_cpu,
+                                              p->se.nr_migrations);
+               } else {
                        avg_per_cpu = -1LL;
+               }
 
                __PN(avg_atom);
                __PN(avg_per_cpu);
index ee00da284b1230233f0fb0c0d2028cb2579c441f..c33f0ceb3de9a64dc43538f7d9427c89a4b98eeb 100644 (file)
@@ -22,7 +22,7 @@
 
 /*
  * Targeted preemption latency for CPU-bound tasks:
- * (default: 20ms * ilog(ncpus), units: nanoseconds)
+ * (default: 20ms * (1 + ilog(ncpus)), units: nanoseconds)
  *
  * NOTE: this latency value is not the same as the concept of
  * 'timeslice length' - timeslices in CFS are of variable length
@@ -36,14 +36,14 @@ unsigned int sysctl_sched_latency = 20000000ULL;
 
 /*
  * Minimal preemption granularity for CPU-bound tasks:
- * (default: 1 msec * ilog(ncpus), units: nanoseconds)
+ * (default: 4 msec * (1 + ilog(ncpus)), units: nanoseconds)
  */
-unsigned int sysctl_sched_min_granularity = 1000000ULL;
+unsigned int sysctl_sched_min_granularity = 4000000ULL;
 
 /*
  * is kept at sysctl_sched_latency / sysctl_sched_min_granularity
  */
-static unsigned int sched_nr_latency = 20;
+static unsigned int sched_nr_latency = 5;
 
 /*
  * After fork, child runs first. (default) If set to 0 then
@@ -61,7 +61,7 @@ unsigned int __read_mostly sysctl_sched_compat_yield;
 
 /*
  * SCHED_BATCH wake-up granularity.
- * (default: 10 msec * ilog(ncpus), units: nanoseconds)
+ * (default: 10 msec * (1 + ilog(ncpus)), units: nanoseconds)
  *
  * This option delays the preemption effects of decoupled workloads
  * and reduces their over-scheduling. Synchronous workloads will still
@@ -71,7 +71,7 @@ unsigned int sysctl_sched_batch_wakeup_granularity = 10000000UL;
 
 /*
  * SCHED_OTHER wake-up granularity.
- * (default: 10 msec * ilog(ncpus), units: nanoseconds)
+ * (default: 10 msec * (1 + ilog(ncpus)), units: nanoseconds)
  *
  * This option delays the preemption effects of decoupled workloads
  * and reduces their over-scheduling. Synchronous workloads will still
@@ -351,6 +351,12 @@ static void update_curr(struct cfs_rq *cfs_rq)
 
        __update_curr(cfs_rq, curr, delta_exec);
        curr->exec_start = now;
+
+       if (entity_is_task(curr)) {
+               struct task_struct *curtask = task_of(curr);
+
+               cpuacct_charge(curtask, delta_exec);
+       }
 }
 
 static inline void
@@ -793,8 +799,9 @@ static void dequeue_task_fair(struct rq *rq, struct task_struct *p, int sleep)
  */
 static void yield_task_fair(struct rq *rq)
 {
-       struct cfs_rq *cfs_rq = task_cfs_rq(rq->curr);
-       struct sched_entity *rightmost, *se = &rq->curr->se;
+       struct task_struct *curr = rq->curr;
+       struct cfs_rq *cfs_rq = task_cfs_rq(curr);
+       struct sched_entity *rightmost, *se = &curr->se;
 
        /*
         * Are we the only task in the tree?
@@ -802,7 +809,7 @@ static void yield_task_fair(struct rq *rq)
        if (unlikely(cfs_rq->nr_running == 1))
                return;
 
-       if (likely(!sysctl_sched_compat_yield)) {
+       if (likely(!sysctl_sched_compat_yield) && curr->policy != SCHED_BATCH) {
                __update_rq_clock(rq);
                /*
                 * Update run-time statistics of the 'current'.
index 8abd752a0ebd9fa9d9bb8f9c61100923d5df17ac..ee9c8b6529e9bad0c0b09708713c861e13363675 100644 (file)
@@ -23,6 +23,7 @@ static void update_curr_rt(struct rq *rq)
 
        curr->se.sum_exec_runtime += delta_exec;
        curr->se.exec_start = rq->clock;
+       cpuacct_charge(curr, delta_exec);
 }
 
 static void enqueue_task_rt(struct rq *rq, struct task_struct *p, int wakeup)
index 630178e53bb6210d156ee94f9f9c4f3e96e473dd..5b32433e7ee5719cb061956e53ec4ef2a242d903 100644 (file)
@@ -52,7 +52,8 @@ static int show_schedstat(struct seq_file *seq, void *v)
                                    sd->lb_nobusyq[itype],
                                    sd->lb_nobusyg[itype]);
                        }
-                       seq_printf(seq, " %u %u %u %u %u %u %u %u %u %u %u %u\n",
+                       seq_printf(seq,
+                                  " %u %u %u %u %u %u %u %u %u %u %u %u\n",
                            sd->alb_count, sd->alb_failed, sd->alb_pushed,
                            sd->sbe_count, sd->sbe_balanced, sd->sbe_pushed,
                            sd->sbf_count, sd->sbf_balanced, sd->sbf_pushed,
index 0deed82a61568d6660a7f4ee625c490ffecffcc5..8ac51714b08ca7ec4261b8544fc62524dad8a3e4 100644 (file)
@@ -1588,6 +1588,10 @@ struct ctl_table_header *register_sysctl_table(struct ctl_table * table)
 void unregister_sysctl_table(struct ctl_table_header * header)
 {
        might_sleep();
+
+       if (header == NULL)
+               return;
+
        spin_lock(&sysctl_lock);
        start_unregistering(header);
        spin_unlock(&sysctl_lock);
index 4abc6d2306f451e8da9141e753b7b517045edda6..bed939f82c31577aadb15ef84714f0869942d34f 100644 (file)
@@ -96,7 +96,7 @@ static struct trans_ctl_table trans_kern_table[] = {
 
        { KERN_PTY,                     "pty",          trans_pty_table },
        { KERN_NGROUPS_MAX,             "ngroups_max" },
-       { KERN_SPARC_SCONS_PWROFF,      "scons_poweroff" },
+       { KERN_SPARC_SCONS_PWROFF,      "scons-poweroff" },
        { KERN_HZ_TIMER,                "hz_timer" },
        { KERN_UNKNOWN_NMI_PANIC,       "unknown_nmi_panic" },
        { KERN_BOOTLOADER_TYPE,         "bootloader_type" },
@@ -140,9 +140,6 @@ static struct trans_ctl_table trans_vm_table[] = {
        { VM_PANIC_ON_OOM,              "panic_on_oom" },
        { VM_VDSO_ENABLED,              "vdso_enabled" },
        { VM_MIN_SLAB,                  "min_slab_ratio" },
-       { VM_CMM_PAGES,                 "cmm_pages" },
-       { VM_CMM_TIMED_PAGES,           "cmm_timed_pages" },
-       { VM_CMM_TIMEOUT,               "cmm_timeout" },
 
        {}
 };
@@ -237,36 +234,6 @@ static struct trans_ctl_table trans_net_ipv4_conf_table[] = {
        {}
 };
 
-
-static struct trans_ctl_table trans_net_ipv4_vs_table[] = {
-       { NET_IPV4_VS_AMEMTHRESH,       "amemthresh" },
-       { NET_IPV4_VS_DEBUG_LEVEL,      "debug_level" },
-       { NET_IPV4_VS_AMDROPRATE,       "am_droprate" },
-       { NET_IPV4_VS_DROP_ENTRY,       "drop_entry" },
-       { NET_IPV4_VS_DROP_PACKET,      "drop_packet" },
-       { NET_IPV4_VS_SECURE_TCP,       "secure_tcp" },
-       { NET_IPV4_VS_TO_ES,            "timeout_established" },
-       { NET_IPV4_VS_TO_SS,            "timeout_synsent" },
-       { NET_IPV4_VS_TO_SR,            "timeout_synrecv" },
-       { NET_IPV4_VS_TO_FW,            "timeout_finwait" },
-       { NET_IPV4_VS_TO_TW,            "timeout_timewait" },
-       { NET_IPV4_VS_TO_CL,            "timeout_close" },
-       { NET_IPV4_VS_TO_CW,            "timeout_closewait" },
-       { NET_IPV4_VS_TO_LA,            "timeout_lastack" },
-       { NET_IPV4_VS_TO_LI,            "timeout_listen" },
-       { NET_IPV4_VS_TO_SA,            "timeout_synack" },
-       { NET_IPV4_VS_TO_UDP,           "timeout_udp" },
-       { NET_IPV4_VS_TO_ICMP,          "timeout_icmp" },
-       { NET_IPV4_VS_CACHE_BYPASS,     "cache_bypass" },
-       { NET_IPV4_VS_EXPIRE_NODEST_CONN,       "expire_nodest_conn" },
-       { NET_IPV4_VS_EXPIRE_QUIESCENT_TEMPLATE,        "expire_quiescent_template" },
-       { NET_IPV4_VS_SYNC_THRESHOLD,           "sync_threshold" },
-       { NET_IPV4_VS_NAT_ICMP_SEND,    "nat_icmp_send" },
-       { NET_IPV4_VS_LBLC_EXPIRE,              "lblc_expiration" },
-       { NET_IPV4_VS_LBLCR_EXPIRE,             "lblcr_expiration" },
-       {}
-};
-
 static struct trans_ctl_table trans_net_neigh_vars_table[] = {
        { NET_NEIGH_MCAST_SOLICIT,      "mcast_solicit" },
        { NET_NEIGH_UCAST_SOLICIT,      "ucast_solicit" },
@@ -341,7 +308,6 @@ static struct trans_ctl_table trans_net_ipv4_table[] = {
        { NET_IPV4_ROUTE,               "route",        trans_net_ipv4_route_table },
        /* NET_IPV4_FIB_HASH unused */
        { NET_IPV4_NETFILTER,           "netfilter",    trans_net_ipv4_netfilter_table },
-       { NET_IPV4_VS,                  "vs",           trans_net_ipv4_vs_table },
 
        { NET_IPV4_TCP_TIMESTAMPS,              "tcp_timestamps" },
        { NET_IPV4_TCP_WINDOW_SCALING,          "tcp_window_scaling" },
@@ -1219,16 +1185,6 @@ static struct trans_ctl_table trans_arlan_table[] = {
        {}
 };
 
-static struct trans_ctl_table trans_appldata_table[] = {
-       { CTL_APPLDATA_TIMER,           "timer" },
-       { CTL_APPLDATA_INTERVAL,        "interval" },
-       { CTL_APPLDATA_OS,              "os" },
-       { CTL_APPLDATA_NET_SUM,         "net_sum" },
-       { CTL_APPLDATA_MEM,             "mem" },
-       {}
-
-};
-
 static struct trans_ctl_table trans_s390dbf_table[] = {
        { 5678 /* CTL_S390DBF_STOPPABLE */,     "debug_stoppable" },
        { 5679 /* CTL_S390DBF_ACTIVE */,        "debug_active" },
@@ -1273,7 +1229,6 @@ static struct trans_ctl_table trans_root_table[] = {
        { CTL_ABI,      "abi" },
        /* CTL_CPU not used */
        { CTL_ARLAN,    "arlan",        trans_arlan_table },
-       { CTL_APPLDATA, "appldata",     trans_appldata_table },
        { CTL_S390DBF,  "s390dbf",      trans_s390dbf_table },
        { CTL_SUNRPC,   "sunrpc",       trans_sunrpc_table },
        { CTL_PM,       "pm",           trans_pm_table },
index 822beebe664a59e98d3557c98a7ff8632423f6a1..5fb139fef9fa78821e0f85d640d211b1fbb0f5c7 100644 (file)
@@ -78,6 +78,11 @@ int clockevents_program_event(struct clock_event_device *dev, ktime_t expires,
        unsigned long long clc;
        int64_t delta;
 
+       if (unlikely(expires.tv64 < 0)) {
+               WARN_ON_ONCE(1);
+               return -ETIME;
+       }
+
        delta = ktime_to_ns(ktime_sub(expires, now));
 
        if (delta <= 0)
index 14a2ecf2b318f82bd87d22031da05738e3773fd4..e64efaf957e8485b4d233412a69fdf45a1225691 100644 (file)
@@ -249,10 +249,12 @@ int do_adjtimex(struct timex *txc)
 
        /* Now we validate the data before disabling interrupts */
 
-       if ((txc->modes & ADJ_OFFSET_SINGLESHOT) == ADJ_OFFSET_SINGLESHOT)
+       if ((txc->modes & ADJ_OFFSET_SINGLESHOT) == ADJ_OFFSET_SINGLESHOT) {
          /* singleshot must not be used with any other mode bits */
-               if (txc->modes != ADJ_OFFSET_SINGLESHOT)
+               if (txc->modes != ADJ_OFFSET_SINGLESHOT &&
+                                       txc->modes != ADJ_OFFSET_SS_READ)
                        return -EINVAL;
+       }
 
        if (txc->modes != ADJ_OFFSET_SINGLESHOT && (txc->modes & ADJ_OFFSET))
          /* adjustment Offset limited to +- .512 seconds */
@@ -372,7 +374,8 @@ int do_adjtimex(struct timex *txc)
 leave: if ((time_status & (STA_UNSYNC|STA_CLOCKERR)) != 0)
                result = TIME_ERROR;
 
-       if ((txc->modes & ADJ_OFFSET_SINGLESHOT) == ADJ_OFFSET_SINGLESHOT)
+       if ((txc->modes == ADJ_OFFSET_SINGLESHOT) ||
+                       (txc->modes == ADJ_OFFSET_SS_READ))
                txc->offset = save_adjust;
        else
                txc->offset = ((long)shift_right(time_offset, SHIFT_UPDATE)) *
index 27a2338deb4ae32d12dd0789a63503666d8e66c1..cb89fa8db110a98df702bbd4bed884d1b45b25dd 100644 (file)
@@ -133,6 +133,8 @@ void tick_nohz_update_jiffies(void)
        if (!ts->tick_stopped)
                return;
 
+       touch_softlockup_watchdog();
+
        cpu_clear(cpu, nohz_cpu_mask);
        now = ktime_get();
 
index 0f3aa0234107e3742b7727565b8343539df122c9..8320a87f3e5a11f11e2159488cf2dc3f6d9371d3 100644 (file)
@@ -337,8 +337,11 @@ struct user_struct * alloc_uid(struct user_namespace *ns, uid_t uid)
                struct user_struct *new;
 
                new = kmem_cache_alloc(uid_cachep, GFP_KERNEL);
-               if (!new)
+               if (!new) {
+                       uids_mutex_unlock();
                        return NULL;
+               }
+
                new->uid = uid;
                atomic_set(&new->__count, 1);
                atomic_set(&new->processes, 0);
@@ -355,6 +358,7 @@ struct user_struct * alloc_uid(struct user_namespace *ns, uid_t uid)
 
                if (alloc_uid_keyring(new, current) < 0) {
                        kmem_cache_free(uid_cachep, new);
+                       uids_mutex_unlock();
                        return NULL;
                }
 
@@ -362,6 +366,7 @@ struct user_struct * alloc_uid(struct user_namespace *ns, uid_t uid)
                        key_put(new->uid_keyring);
                        key_put(new->session_keyring);
                        kmem_cache_free(uid_cachep, new);
+                       uids_mutex_unlock();
                        return NULL;
                }
 
index c76c06466bfd07fe11fab8a592075ac0a38b807b..fe3a56c2256d7ee44e46813aeee597559ba29131 100644 (file)
 static void *get_uts(ctl_table *table, int write)
 {
        char *which = table->data;
+       struct uts_namespace *uts_ns;
+
+       uts_ns = current->nsproxy->uts_ns;
+       which = (which - (char *)&init_uts_ns) + (char *)uts_ns;
 
        if (!write)
                down_read(&uts_sem);
index 1e5f207b90748d3a79a8f739e0efbcd9606baddc..a60109307d329dda8d0a616018a83090499fcced 100644 (file)
@@ -359,7 +359,7 @@ config DEBUG_HIGHMEM
 config DEBUG_BUGVERBOSE
        bool "Verbose BUG() reporting (adds 70K)" if DEBUG_KERNEL && EMBEDDED
        depends on BUG
-       depends on ARM || AVR32 || M32R || M68K || SPARC32 || SPARC64 || FRV || SUPERH || GENERIC_BUG || BFIN
+       depends on ARM || AVR32 || M32R || M68K || SPARC32 || SPARC64 || FRV || SUPERH || GENERIC_BUG || BLACKFIN
        default !EMBEDDED
        help
          Say Y here to make BUG() panics output the file name and line number
@@ -409,7 +409,7 @@ config DEBUG_SG
 
 config FRAME_POINTER
        bool "Compile the kernel with frame pointers"
-       depends on DEBUG_KERNEL && (X86 || CRIS || M68K || M68KNOMMU || FRV || UML || S390 || AVR32 || SUPERH || BFIN)
+       depends on DEBUG_KERNEL && (X86 || CRIS || M68K || M68KNOMMU || FRV || UML || S390 || AVR32 || SUPERH || BLACKFIN)
        default y if DEBUG_INFO && UML
        help
          If you say Y here the resulting kernel image will be slightly larger
index bd5edaeaa80b8c433078e44fda273759c33b80d0..343546550dc906b92b44605bfb613f7d740c1467 100644 (file)
@@ -106,7 +106,8 @@ void hex_dump_to_buffer(const void *buf, size_t len, int rowsize,
        while (lx < (linebuflen - 1) && lx < (ascii_column - 1))
                linebuf[lx++] = ' ';
        for (j = 0; (j < rowsize) && (j < len) && (lx + 2) < linebuflen; j++)
-               linebuf[lx++] = isprint(ptr[j]) ? ptr[j] : '.';
+               linebuf[lx++] = (isascii(ptr[j]) && isprint(ptr[j])) ? ptr[j]
+                               : '.';
 nil:
        linebuf[lx++] = '\0';
 }
index a7e3bf4d3c70317273b63003dc18f714a546ac36..b52e9f4ef3719f58c8217deb5e26bdfd59ebaeb9 100644 (file)
@@ -313,8 +313,8 @@ int kobject_rename(struct kobject * kobj, const char *new_name)
                struct kobject *temp_kobj;
                temp_kobj = kset_find_obj(kobj->kset, new_name);
                if (temp_kobj) {
-                       printk(KERN_WARNING "kobject '%s' can not be renamed "
-                              "to '%s' as '%s' is already in existance.\n",
+                       printk(KERN_WARNING "kobject '%s' cannot be renamed "
+                              "to '%s' as '%s' is already in existence.\n",
                               kobject_name(kobj), new_name, new_name);
                        kobject_put(temp_kobj);
                        return -EINVAL;
index 88c98a2ec8d93efd79b230ca98feed8658f406a4..be8bda3862f5f34595dcdbeb6284e30071ef7409 100644 (file)
@@ -7,7 +7,7 @@
  *             2 of the License, or (at your option) any later version.
  *
  * Authors:    Thomas Graf <tgraf@suug.ch>
- *             Pablo Neira Ayuso <pablo@eurodev.net>
+ *             Pablo Neira Ayuso <pablo@netfilter.org>
  *
  * ==========================================================================
  *
@@ -250,7 +250,8 @@ unsigned int textsearch_find_continuous(struct ts_config *conf,
  *       the various search algorithms.
  *
  * Returns a new textsearch configuration according to the specified
- *         parameters or a ERR_PTR().
+ * parameters or a ERR_PTR(). If a zero length pattern is passed, this
+ * function returns EINVAL.
  */
 struct ts_config *textsearch_prepare(const char *algo, const void *pattern,
                                     unsigned int len, gfp_t gfp_mask, int flags)
@@ -259,6 +260,9 @@ struct ts_config *textsearch_prepare(const char *algo, const void *pattern,
        struct ts_config *conf;
        struct ts_ops *ops;
        
+       if (len == 0)
+               return ERR_PTR(-EINVAL);
+
        ops = lookup_ts_algo(algo);
 #ifdef CONFIG_KMOD
        /*
index b0ceb29da4c7a9b8c230e1956e324b62b1905727..e8644b1e5527df1069f968d17d1893fa0dc3e5fa 100644 (file)
@@ -7,7 +7,7 @@
 
 int bdi_init(struct backing_dev_info *bdi)
 {
-       int i, j;
+       int i;
        int err;
 
        for (i = 0; i < NR_BDI_STAT_ITEMS; i++) {
@@ -21,7 +21,7 @@ int bdi_init(struct backing_dev_info *bdi)
 
        if (err) {
 err:
-               for (j = 0; j < i; j++)
+               while (i--)
                        percpu_counter_destroy(&bdi->bdi_stat[i]);
        }
 
index 32132f3cd641a9bdea85c101aebfb51315ee0456..e233fff61b4bd036382a26811849653ebfd4b9e5 100644 (file)
@@ -314,7 +314,7 @@ __xip_file_write(struct file *filp, const char __user *buf,
                fault_in_pages_readable(buf, bytes);
                kaddr = kmap_atomic(page, KM_USER0);
                copied = bytes -
-                       __copy_from_user_inatomic_nocache(kaddr, buf, bytes);
+                       __copy_from_user_inatomic_nocache(kaddr + offset, buf, bytes);
                kunmap_atomic(kaddr, KM_USER0);
                flush_dcache_page(page);
 
index 6121b57bbe966735a6c44ae1f77854f2cec7c74b..6f978218c2c808b7dad3e0c184cc44ec35f2585d 100644 (file)
@@ -907,7 +907,7 @@ int follow_hugetlb_page(struct mm_struct *mm, struct vm_area_struct *vma,
                 */
                pte = huge_pte_offset(mm, vaddr & HPAGE_MASK);
 
-               if (!pte || pte_none(*pte)) {
+               if (!pte || pte_none(*pte) || (write && !pte_write(*pte))) {
                        int ret;
 
                        spin_unlock(&mm->page_table_lock);
index facc1a75bd4fdbc9f274dbc26a7e536f0eb8f561..15678aa6ec73a4389d1c523fe542144cd3050836 100644 (file)
--- a/mm/mmap.c
+++ b/mm/mmap.c
@@ -912,6 +912,9 @@ unsigned long do_mmap_pgoff(struct file * file, unsigned long addr,
        if (!len)
                return -EINVAL;
 
+       if (!(flags & MAP_FIXED))
+               addr = round_hint_to_min(addr);
+
        error = arch_mmap_check(addr, len, flags);
        if (error)
                return error;
@@ -1615,6 +1618,12 @@ static inline int expand_downwards(struct vm_area_struct *vma,
         */
        if (unlikely(anon_vma_prepare(vma)))
                return -ENOMEM;
+
+       address &= PAGE_MASK;
+       error = security_file_mmap(0, 0, 0, 0, address, 1);
+       if (error)
+               return error;
+
        anon_vma_lock(vma);
 
        /*
@@ -1622,8 +1631,6 @@ static inline int expand_downwards(struct vm_area_struct *vma,
         * is required to hold the mmap_sem in read mode.  We need the
         * anon_vma lock to serialize against concurrent expand_stacks.
         */
-       address &= PAGE_MASK;
-       error = 0;
 
        /* Somebody else might have raced and expanded it already */
        if (address < vma->vm_start) {
@@ -1934,6 +1941,10 @@ unsigned long do_brk(unsigned long addr, unsigned long len)
        if (is_hugepage_only_range(mm, addr, len))
                return -EINVAL;
 
+       error = security_file_mmap(0, 0, 0, 0, addr, 1);
+       if (error)
+               return error;
+
        flags = VM_DATA_DEFAULT_FLAGS | VM_ACCOUNT | mm->def_flags;
 
        error = arch_mmap_check(addr, len, flags);
index 35622c59092546b9fd91d1aa31eceb3504bae41d..b989cb928a7cf29ec5ad66ff519f80633bfe8129 100644 (file)
@@ -829,6 +829,9 @@ unsigned long do_mmap_pgoff(struct file *file,
        void *result;
        int ret;
 
+       if (!(flags & MAP_FIXED))
+               addr = round_hint_to_min(addr);
+
        /* decide whether we should attempt the mapping, and if so what sort of
         * mapping */
        ret = validate_mmap_request(file, addr, len, prot, flags, pgoff,
index 12376ae3f7334e124d488b1d7bc3d291d64e9be1..b5a58d476c1a66a7cc6ce94adaedfc9e2aff0a06 100644 (file)
@@ -305,7 +305,6 @@ static inline void prep_zero_page(struct page *page, int order, gfp_t gfp_flags)
 {
        int i;
 
-       VM_BUG_ON((gfp_flags & (__GFP_WAIT | __GFP_HIGHMEM)) == __GFP_HIGHMEM);
        /*
         * clear_highpage() will use KM_USER0, so it's a bug to use __GFP_ZERO
         * and __GFP_HIGHMEM from hard or soft interrupt context.
@@ -3266,6 +3265,16 @@ static void inline setup_usemap(struct pglist_data *pgdat,
 #endif /* CONFIG_SPARSEMEM */
 
 #ifdef CONFIG_HUGETLB_PAGE_SIZE_VARIABLE
+
+/* Return a sensible default order for the pageblock size. */
+static inline int pageblock_default_order(void)
+{
+       if (HPAGE_SHIFT > PAGE_SHIFT)
+               return HUGETLB_PAGE_ORDER;
+
+       return MAX_ORDER-1;
+}
+
 /* Initialise the number of pages represented by NR_PAGEBLOCK_BITS */
 static inline void __init set_pageblock_order(unsigned int order)
 {
@@ -3281,7 +3290,16 @@ static inline void __init set_pageblock_order(unsigned int order)
 }
 #else /* CONFIG_HUGETLB_PAGE_SIZE_VARIABLE */
 
-/* Defined this way to avoid accidently referencing HUGETLB_PAGE_ORDER */
+/*
+ * When CONFIG_HUGETLB_PAGE_SIZE_VARIABLE is not set, set_pageblock_order()
+ * and pageblock_default_order() are unused as pageblock_order is set
+ * at compile-time. See include/linux/pageblock-flags.h for the values of
+ * pageblock_order based on the kernel config
+ */
+static inline int pageblock_default_order(unsigned int order)
+{
+       return MAX_ORDER-1;
+}
 #define set_pageblock_order(x) do {} while (0)
 
 #endif /* CONFIG_HUGETLB_PAGE_SIZE_VARIABLE */
@@ -3366,7 +3384,7 @@ static void __meminit free_area_init_core(struct pglist_data *pgdat,
                if (!size)
                        continue;
 
-               set_pageblock_order(HUGETLB_PAGE_ORDER);
+               set_pageblock_order(pageblock_default_order());
                setup_usemap(pgdat, zone, size);
                ret = init_currently_empty_zone(zone, zone_start_pfn,
                                                size, MEMMAP_EARLY);
index dc3be5f5b0dafd029860d7303d7e6e471a678597..dbc2ca2057a54ff2c4a709de4b6e9a01694241bb 100644 (file)
--- a/mm/rmap.c
+++ b/mm/rmap.c
@@ -471,11 +471,12 @@ int page_mkclean(struct page *page)
 
        if (page_mapped(page)) {
                struct address_space *mapping = page_mapping(page);
-               if (mapping)
+               if (mapping) {
                        ret = page_mkclean_file(mapping, page);
-               if (page_test_dirty(page)) {
-                       page_clear_dirty(page);
-                       ret = 1;
+                       if (page_test_dirty(page)) {
+                               page_clear_dirty(page);
+                               ret = 1;
+                       }
                }
        }
 
index 253d205914bad382e48abfd49393f6fe87179646..51b3d6ccddab75ba33b7fded5ffaf75700770ccd 100644 (file)
@@ -1072,7 +1072,7 @@ shmem_alloc_page(gfp_t gfp, struct shmem_inode_info *info,
        pvma.vm_policy = mpol_shared_policy_lookup(&info->policy, idx);
        pvma.vm_pgoff = idx;
        pvma.vm_end = PAGE_SIZE;
-       page = alloc_page_vma(gfp | __GFP_ZERO, &pvma, 0);
+       page = alloc_page_vma(gfp, &pvma, 0);
        mpol_free(pvma.vm_policy);
        return page;
 }
@@ -1093,7 +1093,7 @@ shmem_swapin(struct shmem_inode_info *info,swp_entry_t entry,unsigned long idx)
 static inline struct page *
 shmem_alloc_page(gfp_t gfp,struct shmem_inode_info *info, unsigned long idx)
 {
-       return alloc_page(gfp | __GFP_ZERO);
+       return alloc_page(gfp);
 }
 #endif
 
@@ -1306,6 +1306,7 @@ repeat:
 
                info->alloced++;
                spin_unlock(&info->lock);
+               clear_highpage(filepage);
                flush_dcache_page(filepage);
                SetPageUptodate(filepage);
        }
index c31cd3682a0b77ded3ac4e76cded3f427537a551..2e338a5f7b14c6d29216f4c54a74ef5259be01fa 100644 (file)
--- a/mm/slab.c
+++ b/mm/slab.c
@@ -2881,6 +2881,8 @@ static void *cache_free_debugcheck(struct kmem_cache *cachep, void *objp,
        unsigned int objnr;
        struct slab *slabp;
 
+       BUG_ON(virt_to_cache(objp) != cachep);
+
        objp -= obj_offset(cachep);
        kfree_debugcheck(objp);
        page = virt_to_head_page(objp);
@@ -3759,8 +3761,6 @@ void kmem_cache_free(struct kmem_cache *cachep, void *objp)
 {
        unsigned long flags;
 
-       BUG_ON(virt_to_cache(objp) != cachep);
-
        local_irq_save(flags);
        debug_check_no_locks_freed(objp, obj_size(cachep));
        __cache_free(cachep, objp);
@@ -4475,3 +4475,4 @@ size_t ksize(const void *objp)
 
        return obj_size(virt_to_cache(objp));
 }
+EXPORT_SYMBOL(ksize);
index 08a9bd91a1aaf517f1b17ff688fa9f612273f873..773a7aa80ab5ce53883cd7ad4d07a6019a175fe0 100644 (file)
--- a/mm/slob.c
+++ b/mm/slob.c
@@ -330,7 +330,7 @@ static void *slob_alloc(size_t size, gfp_t gfp, int align, int node)
 
        /* Not enough space: must allocate a new page */
        if (!b) {
-               b = slob_new_page(gfp, 0, node);
+               b = slob_new_page(gfp & ~__GFP_ZERO, 0, node);
                if (!b)
                        return 0;
                sp = (struct slob_page *)virt_to_page(b);
@@ -495,6 +495,7 @@ size_t ksize(const void *block)
        else
                return sp->page.private;
 }
+EXPORT_SYMBOL(ksize);
 
 struct kmem_cache {
        unsigned int size, align;
index 9acb413858ac532e9a668d4d2b351f4acdbd14c3..9c1d9f3b364f63d7a6be5cdc5f98f2b18f8f797a 100644 (file)
--- a/mm/slub.c
+++ b/mm/slub.c
@@ -1468,6 +1468,9 @@ static void *__slab_alloc(struct kmem_cache *s,
        void **object;
        struct page *new;
 
+       /* We handle __GFP_ZERO in the caller */
+       gfpflags &= ~__GFP_ZERO;
+
        if (!c->page)
                goto new_slab;
 
@@ -2558,8 +2561,12 @@ size_t ksize(const void *object)
        if (unlikely(object == ZERO_SIZE_PTR))
                return 0;
 
-       page = get_object_page(object);
+       page = virt_to_head_page(object);
        BUG_ON(!page);
+
+       if (unlikely(!PageSlab(page)))
+               return PAGE_SIZE << compound_order(page);
+
        s = page->slab;
        BUG_ON(!s);
 
index 22620f6a976bd3909a92ad1d8f1720ab09e4dce4..cd75b21dd4c312e1cf3dcf22a2801ad2f49c24c6 100644 (file)
  * or to back the page tables that are used to create the mapping.
  * Uses the main allocators if they are available, else bootmem.
  */
+
+static void * __init_refok __earlyonly_bootmem_alloc(int node,
+                               unsigned long size,
+                               unsigned long align,
+                               unsigned long goal)
+{
+       return __alloc_bootmem_node(NODE_DATA(node), size, align, goal);
+}
+
+
 void * __meminit vmemmap_alloc_block(unsigned long size, int node)
 {
        /* If the main allocator is up use that, fallback to bootmem. */
@@ -44,7 +54,7 @@ void * __meminit vmemmap_alloc_block(unsigned long size, int node)
                        return page_address(page);
                return NULL;
        } else
-               return __alloc_bootmem_node(NODE_DATA(node), size, size,
+               return __earlyonly_bootmem_alloc(node, size, size,
                                __pa(MAX_DMA_ADDRESS));
 }
 
index 6567213959cbac09f68a2a4973d4283361688196..4add9bd4bc8d51c8785c65028211578e4bbe4508 100644 (file)
@@ -124,8 +124,8 @@ static void __exit vlan_cleanup_module(void)
 {
        int i;
 
-       vlan_netlink_fini();
        vlan_ioctl_set(NULL);
+       vlan_netlink_fini();
 
        /* Un-register us from receiving netdevice events */
        unregister_netdevice_notifier(&vlan_notifier_block);
@@ -776,7 +776,7 @@ static int vlan_ioctl_handler(struct net *net, void __user *arg)
        case SET_VLAN_NAME_TYPE_CMD:
                err = -EPERM;
                if (!capable(CAP_NET_ADMIN))
-                       return -EPERM;
+                       break;
                if ((args.u.name_type >= 0) &&
                    (args.u.name_type < VLAN_NAME_TYPE_HIGHEST)) {
                        vlan_name_type = args.u.name_type;
index 7a36878241dabf132f09fb861afca2b68f10ca77..4f99bb86af5c594b1bb77042ba43b321a9d50d4a 100644 (file)
@@ -462,7 +462,8 @@ int vlan_dev_hard_start_xmit(struct sk_buff *skb, struct net_device *dev)
         * OTHER THINGS LIKE FDDI/TokenRing/802.3 SNAPs...
         */
 
-       if (veth->h_vlan_proto != htons(ETH_P_8021Q)) {
+       if (veth->h_vlan_proto != htons(ETH_P_8021Q) ||
+               VLAN_DEV_INFO(dev)->flags & VLAN_FLAG_REORDER_HDR) {
                int orig_headroom = skb_headroom(skb);
                unsigned short veth_TCI;
 
index 93867bb6cc978ca76c07c6de8bb31f55b0e8dc79..a9018287312071c4cd77a442b062b7444c7b72bf 100644 (file)
@@ -39,7 +39,7 @@ static int __init br_init(void)
 
        err = br_fdb_init();
        if (err)
-               goto err_out1;
+               goto err_out;
 
        err = br_netfilter_init();
        if (err)
@@ -65,6 +65,8 @@ err_out3:
 err_out2:
        br_netfilter_fini();
 err_out1:
+       br_fdb_fini();
+err_out:
        llc_sap_put(br_stp_sap);
        return err;
 }
index eb57502bb2641b7087b50a8c2577699f3b3ab388..bc40377136a2631a19d73372a24f15f2ce010222 100644 (file)
@@ -44,7 +44,7 @@ int __init br_fdb_init(void)
        return 0;
 }
 
-void __exit br_fdb_fini(void)
+void br_fdb_fini(void)
 {
        kmem_cache_destroy(br_fdb_cache);
 }
index 3cedd4eeeed6f30826c671a4e0cfd5575fc88a51..0ee79a726d91f3159e293282013dd7fad395760e 100644 (file)
@@ -122,6 +122,7 @@ static inline int is_link_local(const unsigned char *dest)
 struct sk_buff *br_handle_frame(struct net_bridge_port *p, struct sk_buff *skb)
 {
        const unsigned char *dest = eth_hdr(skb)->h_dest;
+       int (*rhook)(struct sk_buff *skb);
 
        if (!is_valid_ether_addr(eth_hdr(skb)->h_source))
                goto drop;
@@ -147,9 +148,9 @@ struct sk_buff *br_handle_frame(struct net_bridge_port *p, struct sk_buff *skb)
 
        switch (p->state) {
        case BR_STATE_FORWARDING:
-
-               if (br_should_route_hook) {
-                       if (br_should_route_hook(skb))
+               rhook = rcu_dereference(br_should_route_hook);
+               if (rhook != NULL) {
+                       if (rhook(skb))
                                return skb;
                        dest = eth_hdr(skb)->h_dest;
                }
index 392d877040d31897f063d97c49b49ff7c1949532..6436d30a550eac56f42a2d2a8a44aab7295cb9fa 100644 (file)
@@ -187,7 +187,7 @@ static int ebt_among_check(const char *tablename, unsigned int hookmask,
 
        if (datalen != EBT_ALIGN(expected_length)) {
                printk(KERN_WARNING
-                      "ebtables: among: wrong size: %d"
+                      "ebtables: among: wrong size: %d "
                       "against expected %d, rounded to %Zd\n",
                       datalen, expected_length,
                       EBT_ALIGN(expected_length));
index e44519ebf1d22b7054232a7ec6da86e6cff2461f..be6f18681053174667c6e7a2abcb4c79afe7c622 100644 (file)
@@ -70,13 +70,13 @@ static int __init ebtable_broute_init(void)
        if (ret < 0)
                return ret;
        /* see br_input.c */
-       br_should_route_hook = ebt_broute;
+       rcu_assign_pointer(br_should_route_hook, ebt_broute);
        return ret;
 }
 
 static void __exit ebtable_broute_fini(void)
 {
-       br_should_route_hook = NULL;
+       rcu_assign_pointer(br_should_route_hook, NULL);
        synchronize_net();
        ebt_unregister_table(&broute_table);
 }
index 86d62611f2fcc4583f2eaf9a40d600718944ad97..26a3a3a15be063564c95addc815b64457860c585 100644 (file)
@@ -3972,8 +3972,7 @@ void synchronize_net(void)
  *     @dev: device
  *
  *     This function shuts down a device interface and removes it
- *     from the kernel tables. On success 0 is returned, on a failure
- *     a negative errno code is returned.
+ *     from the kernel tables.
  *
  *     Callers must hold the rtnl semaphore.  You may want
  *     unregister_netdev() instead of this.
@@ -3991,8 +3990,7 @@ void unregister_netdevice(struct net_device *dev)
  *     @dev: device
  *
  *     This function shuts down a device interface and removes it
- *     from the kernel tables. On success 0 is returned, on a failure
- *     a negative errno code is returned.
+ *     from the kernel tables.
  *
  *     This is just a wrapper for unregister_netdevice that takes
  *     the rtnl semaphore.  In general you want to use this and not
index de33f36947e9064294085e6f775881b98a636a8a..285ec3ed9b378179248b8d8900ad983c9ee0f210 100644 (file)
@@ -2463,8 +2463,6 @@ static int pktgen_output_ipsec(struct sk_buff *skb, struct pktgen_dev *pkt_dev)
 
        x->curlft.bytes +=skb->len;
        x->curlft.packets++;
-       spin_unlock(&x->lock);
-
 error:
        spin_unlock(&x->lock);
        return err;
index 32d5826b7177078eb51dd99bc1887b974516888f..5b4ce9b4dd2060c9fd5920bfad967493b7e7eea6 100644 (file)
@@ -275,12 +275,11 @@ static void skb_release_data(struct sk_buff *skb)
 /*
  *     Free an skbuff by memory without cleaning the state.
  */
-void kfree_skbmem(struct sk_buff *skb)
+static void kfree_skbmem(struct sk_buff *skb)
 {
        struct sk_buff *other;
        atomic_t *fclone_ref;
 
-       skb_release_data(skb);
        switch (skb->fclone) {
        case SKB_FCLONE_UNAVAILABLE:
                kmem_cache_free(skbuff_head_cache, skb);
@@ -307,16 +306,8 @@ void kfree_skbmem(struct sk_buff *skb)
        }
 }
 
-/**
- *     __kfree_skb - private function
- *     @skb: buffer
- *
- *     Free an sk_buff. Release anything attached to the buffer.
- *     Clean the state. This is an internal helper function. Users should
- *     always call kfree_skb
- */
-
-void __kfree_skb(struct sk_buff *skb)
+/* Free everything but the sk_buff shell. */
+static void skb_release_all(struct sk_buff *skb)
 {
        dst_release(skb->dst);
 #ifdef CONFIG_XFRM
@@ -340,7 +331,21 @@ void __kfree_skb(struct sk_buff *skb)
        skb->tc_verd = 0;
 #endif
 #endif
+       skb_release_data(skb);
+}
+
+/**
+ *     __kfree_skb - private function
+ *     @skb: buffer
+ *
+ *     Free an sk_buff. Release anything attached to the buffer.
+ *     Clean the state. This is an internal helper function. Users should
+ *     always call kfree_skb
+ */
 
+void __kfree_skb(struct sk_buff *skb)
+{
+       skb_release_all(skb);
        kfree_skbmem(skb);
 }
 
@@ -441,7 +446,7 @@ static struct sk_buff *__skb_clone(struct sk_buff *n, struct sk_buff *skb)
  */
 struct sk_buff *skb_morph(struct sk_buff *dst, struct sk_buff *src)
 {
-       skb_release_data(dst);
+       skb_release_all(dst);
        return __skb_clone(dst, src);
 }
 EXPORT_SYMBOL_GPL(skb_morph);
index 40ad428a27f56dcf1aff0eed16b69dfa49cda4e2..d26b88dbbb45cbab0b5de86bf0151d9cfa3a6638 100644 (file)
@@ -166,7 +166,7 @@ static u32 dccp_li_calc_first_li(struct sock *sk,
        }
 
        if (unlikely(interval == 0)) {
-               DCCP_WARN("%s(%p), Could not find a win_count interval > 0."
+               DCCP_WARN("%s(%p), Could not find a win_count interval > 0. "
                          "Defaulting to 1\n", dccp_role(sk), sk);
                interval = 1;
        }
index 66e266fb5908b4976448da87ddc74d509c25b10f..3bc82dc83b387d33f92d496d81383c9346296f9d 100644 (file)
@@ -651,16 +651,18 @@ static int dn_nl_deladdr(struct sk_buff *skb, struct nlmsghdr *nlh, void *arg)
        struct dn_dev *dn_db;
        struct ifaddrmsg *ifm;
        struct dn_ifaddr *ifa, **ifap;
-       int err = -EADDRNOTAVAIL;
+       int err;
 
        err = nlmsg_parse(nlh, sizeof(*ifm), tb, IFA_MAX, dn_ifa_policy);
        if (err < 0)
                goto errout;
 
+       err = -ENODEV;
        ifm = nlmsg_data(nlh);
        if ((dn_db = dn_dev_by_index(ifm->ifa_index)) == NULL)
                goto errout;
 
+       err = -EADDRNOTAVAIL;
        for (ifap = &dn_db->ifa_list; (ifa = *ifap); ifap = &ifa->ifa_next) {
                if (tb[IFA_LOCAL] &&
                    nla_memcmp(tb[IFA_LOCAL], &ifa->ifa_local, 2))
index c6d760d9fbbe2a83fb3902ee040d6e1db3ce16df..208bf35b55463d10d95222f36e38c11bedf8c18a 100644 (file)
@@ -338,7 +338,7 @@ static int ieee80211_ccmp_decrypt(struct sk_buff *skb, int hdr_len, void *priv)
        pos += 8;
 
        if (ccmp_replay_check(pn, key->rx_pn)) {
-               if (net_ratelimit()) {
+               if (ieee80211_ratelimit_debug(IEEE80211_DL_DROP)) {
                        IEEE80211_DEBUG_DROP("CCMP: replay detected: STA=%s "
                                 "previous PN %02x%02x%02x%02x%02x%02x "
                                 "received PN %02x%02x%02x%02x%02x%02x\n",
index 58b22619ab15c160ad072cbd65edbc7931ba7b98..8e146949fc6f595eb75ca15f234060347ade8c89 100644 (file)
@@ -464,7 +464,7 @@ static int ieee80211_tkip_decrypt(struct sk_buff *skb, int hdr_len, void *priv)
        pos += 8;
 
        if (tkip_replay_check(iv32, iv16, tkey->rx_iv32, tkey->rx_iv16)) {
-               if (net_ratelimit()) {
+               if (ieee80211_ratelimit_debug(IEEE80211_DL_DROP)) {
                        IEEE80211_DEBUG_DROP("TKIP: replay detected: STA=%s"
                               " previous TSC %08x%04x received TSC "
                               "%08x%04x\n", print_mac(mac, hdr->addr2),
@@ -504,7 +504,7 @@ static int ieee80211_tkip_decrypt(struct sk_buff *skb, int hdr_len, void *priv)
                         * it needs to be recalculated for the next packet. */
                        tkey->rx_phase1_done = 0;
                }
-               if (net_ratelimit()) {
+               if (ieee80211_ratelimit_debug(IEEE80211_DL_DROP)) {
                        IEEE80211_DEBUG_DROP("TKIP: ICV error detected: STA="
                               "%s\n", print_mac(mac, hdr->addr2));
                }
index a4c3c51140a3a3cb55533f7842cc673fe50bd6a7..6d06f1385e2803cd1f263917e8bd6f8d2684a834 100644 (file)
@@ -144,7 +144,8 @@ static int ieee80211_copy_snap(u8 * data, u16 h_proto)
        snap->oui[1] = oui[1];
        snap->oui[2] = oui[2];
 
-       *(u16 *) (data + SNAP_SIZE) = htons(h_proto);
+       h_proto = htons(h_proto);
+       memcpy(data + SNAP_SIZE, &h_proto, sizeof(u16));
 
        return SNAP_SIZE + sizeof(u16);
 }
index 36d6798947b59026eb400c6b06882099fddd8ba0..b3f366a33a5cd4f834a512f2dfa7bad2963356f4 100644 (file)
 #include <net/tcp.h>
 #include <net/sock.h>
 #include <net/arp.h>
-#if defined(CONFIG_AX25) || defined(CONFIG_AX25_MODULE)
 #include <net/ax25.h>
-#if defined(CONFIG_NETROM) || defined(CONFIG_NETROM_MODULE)
 #include <net/netrom.h>
-#endif
-#endif
 #if defined(CONFIG_ATM_CLIP) || defined(CONFIG_ATM_CLIP_MODULE)
 #include <net/atmclip.h>
 struct neigh_table *clip_tbl_hook;
@@ -731,20 +727,10 @@ static int arp_process(struct sk_buff *skb)
                    htons(dev_type) != arp->ar_hrd)
                        goto out;
                break;
-#ifdef CONFIG_NET_ETHERNET
        case ARPHRD_ETHER:
-#endif
-#ifdef CONFIG_TR
        case ARPHRD_IEEE802_TR:
-#endif
-#ifdef CONFIG_FDDI
        case ARPHRD_FDDI:
-#endif
-#ifdef CONFIG_NET_FC
        case ARPHRD_IEEE802:
-#endif
-#if defined(CONFIG_NET_ETHERNET) || defined(CONFIG_TR) || \
-    defined(CONFIG_FDDI)        || defined(CONFIG_NET_FC)
                /*
                 * ETHERNET, Token Ring and Fibre Channel (which are IEEE 802
                 * devices, according to RFC 2625) devices will accept ARP
@@ -759,21 +745,16 @@ static int arp_process(struct sk_buff *skb)
                    arp->ar_pro != htons(ETH_P_IP))
                        goto out;
                break;
-#endif
-#if defined(CONFIG_AX25) || defined(CONFIG_AX25_MODULE)
        case ARPHRD_AX25:
                if (arp->ar_pro != htons(AX25_P_IP) ||
                    arp->ar_hrd != htons(ARPHRD_AX25))
                        goto out;
                break;
-#if defined(CONFIG_NETROM) || defined(CONFIG_NETROM_MODULE)
        case ARPHRD_NETROM:
                if (arp->ar_pro != htons(AX25_P_IP) ||
                    arp->ar_hrd != htons(ARPHRD_NETROM))
                        goto out;
                break;
-#endif
-#endif
        }
 
        /* Understand only these message types */
@@ -828,7 +809,8 @@ static int arp_process(struct sk_buff *skb)
                if (arp->ar_op == htons(ARPOP_REQUEST) &&
                    inet_addr_type(tip) == RTN_LOCAL &&
                    !arp_ignore(in_dev,dev,sip,tip))
-                       arp_send(ARPOP_REPLY,ETH_P_ARP,tip,dev,tip,sha,dev->dev_addr,dev->dev_addr);
+                       arp_send(ARPOP_REPLY, ETH_P_ARP, sip, dev, tip, sha,
+                                dev->dev_addr, sha);
                goto out;
        }
 
index 55d199e4ae212813dd737a9cf2706b7f9cccbe38..3168c3de49193922a0b1ca641bcc3680e6a5107e 100644 (file)
@@ -516,8 +516,6 @@ static struct in_ifaddr *rtm_to_ifaddr(struct nlmsghdr *nlh)
                goto errout;
        }
 
-       ipv4_devconf_setall(in_dev);
-
        ifa = inet_alloc_ifa();
        if (ifa == NULL) {
                /*
@@ -528,6 +526,7 @@ static struct in_ifaddr *rtm_to_ifaddr(struct nlmsghdr *nlh)
                goto errout;
        }
 
+       ipv4_devconf_setall(in_dev);
        in_dev_hold(in_dev);
 
        if (tb[IFA_ADDRESS] == NULL)
index c31bccb9b526c99d539c1c13a94531f23c982318..1738113268bc12f1e1a23e4a1ca14bb82a637ffa 100644 (file)
@@ -9,6 +9,7 @@
 #include <linux/pfkeyv2.h>
 #include <linux/random.h>
 #include <linux/spinlock.h>
+#include <linux/in6.h>
 #include <net/icmp.h>
 #include <net/protocol.h>
 #include <net/udp.h>
@@ -224,6 +225,10 @@ static int esp_input(struct xfrm_state *x, struct sk_buff *skb)
 
        /* ... check padding bits here. Silly. :-) */
 
+       /* RFC4303: Drop dummy packets without any error */
+       if (nexthdr[1] == IPPROTO_NONE)
+               goto out;
+
        iph = ip_hdr(skb);
        ihl = iph->ihl * 4;
 
index b0170732b5e9e962ed1fca65cf930c3bf4cc98f0..e468e7a7aac4d8c7940955eac466af2e6303858f 100644 (file)
@@ -51,6 +51,29 @@ static struct sock *idiagnl;
 #define INET_DIAG_PUT(skb, attrtype, attrlen) \
        RTA_DATA(__RTA_PUT(skb, attrtype, attrlen))
 
+static DEFINE_MUTEX(inet_diag_table_mutex);
+
+static const struct inet_diag_handler *inet_diag_lock_handler(int type)
+{
+#ifdef CONFIG_KMOD
+       if (!inet_diag_table[type])
+               request_module("net-pf-%d-proto-%d-type-%d", PF_NETLINK,
+                              NETLINK_INET_DIAG, type);
+#endif
+
+       mutex_lock(&inet_diag_table_mutex);
+       if (!inet_diag_table[type])
+               return ERR_PTR(-ENOENT);
+
+       return inet_diag_table[type];
+}
+
+static inline void inet_diag_unlock_handler(
+       const struct inet_diag_handler *handler)
+{
+       mutex_unlock(&inet_diag_table_mutex);
+}
+
 static int inet_csk_diag_fill(struct sock *sk,
                              struct sk_buff *skb,
                              int ext, u32 pid, u32 seq, u16 nlmsg_flags,
@@ -235,9 +258,12 @@ static int inet_diag_get_exact(struct sk_buff *in_skb,
        struct inet_hashinfo *hashinfo;
        const struct inet_diag_handler *handler;
 
-       handler = inet_diag_table[nlh->nlmsg_type];
-       BUG_ON(handler == NULL);
+       handler = inet_diag_lock_handler(nlh->nlmsg_type);
+       if (!handler)
+               return -ENOENT;
+
        hashinfo = handler->idiag_hashinfo;
+       err = -EINVAL;
 
        if (req->idiag_family == AF_INET) {
                sk = inet_lookup(hashinfo, req->id.idiag_dst[0],
@@ -255,11 +281,12 @@ static int inet_diag_get_exact(struct sk_buff *in_skb,
        }
 #endif
        else {
-               return -EINVAL;
+               goto unlock;
        }
 
+       err = -ENOENT;
        if (sk == NULL)
-               return -ENOENT;
+               goto unlock;
 
        err = -ESTALE;
        if ((req->id.idiag_cookie[0] != INET_DIAG_NOCOOKIE ||
@@ -296,6 +323,8 @@ out:
                else
                        sock_put(sk);
        }
+unlock:
+       inet_diag_unlock_handler(handler);
        return err;
 }
 
@@ -678,8 +707,10 @@ static int inet_diag_dump(struct sk_buff *skb, struct netlink_callback *cb)
        const struct inet_diag_handler *handler;
        struct inet_hashinfo *hashinfo;
 
-       handler = inet_diag_table[cb->nlh->nlmsg_type];
-       BUG_ON(handler == NULL);
+       handler = inet_diag_lock_handler(cb->nlh->nlmsg_type);
+       if (!handler)
+               goto no_handler;
+
        hashinfo = handler->idiag_hashinfo;
 
        s_i = cb->args[1];
@@ -743,7 +774,7 @@ skip_listen_ht:
        }
 
        if (!(r->idiag_states & ~(TCPF_LISTEN | TCPF_SYN_RECV)))
-               return skb->len;
+               goto unlock;
 
        for (i = s_i; i < hashinfo->ehash_size; i++) {
                struct inet_ehash_bucket *head = &hashinfo->ehash[i];
@@ -805,6 +836,9 @@ next_dying:
 done:
        cb->args[1] = i;
        cb->args[2] = num;
+unlock:
+       inet_diag_unlock_handler(handler);
+no_handler:
        return skb->len;
 }
 
@@ -816,15 +850,6 @@ static int inet_diag_rcv_msg(struct sk_buff *skb, struct nlmsghdr *nlh)
            nlmsg_len(nlh) < hdrlen)
                return -EINVAL;
 
-#ifdef CONFIG_KMOD
-       if (inet_diag_table[nlh->nlmsg_type] == NULL)
-               request_module("net-pf-%d-proto-%d-type-%d", PF_NETLINK,
-                              NETLINK_INET_DIAG, nlh->nlmsg_type);
-#endif
-
-       if (inet_diag_table[nlh->nlmsg_type] == NULL)
-               return -ENOENT;
-
        if (nlh->nlmsg_flags & NLM_F_DUMP) {
                if (nlmsg_attrlen(nlh, hdrlen)) {
                        struct nlattr *attr;
@@ -853,8 +878,6 @@ static void inet_diag_rcv(struct sk_buff *skb)
        mutex_unlock(&inet_diag_mutex);
 }
 
-static DEFINE_SPINLOCK(inet_diag_register_lock);
-
 int inet_diag_register(const struct inet_diag_handler *h)
 {
        const __u16 type = h->idiag_type;
@@ -863,13 +886,13 @@ int inet_diag_register(const struct inet_diag_handler *h)
        if (type >= INET_DIAG_GETSOCK_MAX)
                goto out;
 
-       spin_lock(&inet_diag_register_lock);
+       mutex_lock(&inet_diag_table_mutex);
        err = -EEXIST;
        if (inet_diag_table[type] == NULL) {
                inet_diag_table[type] = h;
                err = 0;
        }
-       spin_unlock(&inet_diag_register_lock);
+       mutex_unlock(&inet_diag_table_mutex);
 out:
        return err;
 }
@@ -882,11 +905,9 @@ void inet_diag_unregister(const struct inet_diag_handler *h)
        if (type >= INET_DIAG_GETSOCK_MAX)
                return;
 
-       spin_lock(&inet_diag_register_lock);
+       mutex_lock(&inet_diag_table_mutex);
        inet_diag_table[type] = NULL;
-       spin_unlock(&inet_diag_register_lock);
-
-       synchronize_rcu();
+       mutex_unlock(&inet_diag_table_mutex);
 }
 EXPORT_SYMBOL_GPL(inet_diag_unregister);
 
index ac3b1d3dba2e0e81d2d032076aa429d14e6cf27f..9a96c277393d3d72a5d622087c3df0a263e824a5 100644 (file)
@@ -401,10 +401,11 @@ static struct sk_buff *lro_gen_skb(struct net_lro_mgr *lro_mgr,
        int data_len = len;
        int hdr_len = min(len, hlen);
 
-       skb = netdev_alloc_skb(lro_mgr->dev, hlen);
+       skb = netdev_alloc_skb(lro_mgr->dev, hlen + lro_mgr->frag_align_pad);
        if (!skb)
                return NULL;
 
+       skb_reserve(skb, lro_mgr->frag_align_pad);
        skb->len = len;
        skb->data_len = len - hdr_len;
        skb->truesize += true_size;
index 20c884a57721b472ec1c5e756aac3f38b703827d..8fba20256f52abeae41df323563a8c04149b1293 100644 (file)
@@ -637,7 +637,7 @@ static int ip_vs_out_icmp(struct sk_buff *skb, int *related)
        verdict = NF_DROP;
 
        if (IP_VS_FWD_METHOD(cp) != 0) {
-               IP_VS_ERR("shouldn't reach here, because the box is on the"
+               IP_VS_ERR("shouldn't reach here, because the box is on the "
                          "half connection in the tun/dr module.\n");
        }
 
index b64cf45a9eadde464169663688b53da624a2a0fd..693d92490c117a587db3b882d648fa179c201698 100644 (file)
@@ -1424,7 +1424,6 @@ proc_do_sync_threshold(ctl_table *table, int write, struct file *filp,
 
 static struct ctl_table vs_vars[] = {
        {
-               .ctl_name       = NET_IPV4_VS_AMEMTHRESH,
                .procname       = "amemthresh",
                .data           = &sysctl_ip_vs_amemthresh,
                .maxlen         = sizeof(int),
@@ -1433,7 +1432,6 @@ static struct ctl_table vs_vars[] = {
        },
 #ifdef CONFIG_IP_VS_DEBUG
        {
-               .ctl_name       = NET_IPV4_VS_DEBUG_LEVEL,
                .procname       = "debug_level",
                .data           = &sysctl_ip_vs_debug_level,
                .maxlen         = sizeof(int),
@@ -1442,7 +1440,6 @@ static struct ctl_table vs_vars[] = {
        },
 #endif
        {
-               .ctl_name       = NET_IPV4_VS_AMDROPRATE,
                .procname       = "am_droprate",
                .data           = &sysctl_ip_vs_am_droprate,
                .maxlen         = sizeof(int),
@@ -1450,7 +1447,6 @@ static struct ctl_table vs_vars[] = {
                .proc_handler   = &proc_dointvec,
        },
        {
-               .ctl_name       = NET_IPV4_VS_DROP_ENTRY,
                .procname       = "drop_entry",
                .data           = &sysctl_ip_vs_drop_entry,
                .maxlen         = sizeof(int),
@@ -1458,7 +1454,6 @@ static struct ctl_table vs_vars[] = {
                .proc_handler   = &proc_do_defense_mode,
        },
        {
-               .ctl_name       = NET_IPV4_VS_DROP_PACKET,
                .procname       = "drop_packet",
                .data           = &sysctl_ip_vs_drop_packet,
                .maxlen         = sizeof(int),
@@ -1466,7 +1461,6 @@ static struct ctl_table vs_vars[] = {
                .proc_handler   = &proc_do_defense_mode,
        },
        {
-               .ctl_name       = NET_IPV4_VS_SECURE_TCP,
                .procname       = "secure_tcp",
                .data           = &sysctl_ip_vs_secure_tcp,
                .maxlen         = sizeof(int),
@@ -1475,7 +1469,6 @@ static struct ctl_table vs_vars[] = {
        },
 #if 0
        {
-               .ctl_name       = NET_IPV4_VS_TO_ES,
                .procname       = "timeout_established",
                .data   = &vs_timeout_table_dos.timeout[IP_VS_S_ESTABLISHED],
                .maxlen         = sizeof(int),
@@ -1483,7 +1476,6 @@ static struct ctl_table vs_vars[] = {
                .proc_handler   = &proc_dointvec_jiffies,
        },
        {
-               .ctl_name       = NET_IPV4_VS_TO_SS,
                .procname       = "timeout_synsent",
                .data   = &vs_timeout_table_dos.timeout[IP_VS_S_SYN_SENT],
                .maxlen         = sizeof(int),
@@ -1491,7 +1483,6 @@ static struct ctl_table vs_vars[] = {
                .proc_handler   = &proc_dointvec_jiffies,
        },
        {
-               .ctl_name       = NET_IPV4_VS_TO_SR,
                .procname       = "timeout_synrecv",
                .data   = &vs_timeout_table_dos.timeout[IP_VS_S_SYN_RECV],
                .maxlen         = sizeof(int),
@@ -1499,7 +1490,6 @@ static struct ctl_table vs_vars[] = {
                .proc_handler   = &proc_dointvec_jiffies,
        },
        {
-               .ctl_name       = NET_IPV4_VS_TO_FW,
                .procname       = "timeout_finwait",
                .data   = &vs_timeout_table_dos.timeout[IP_VS_S_FIN_WAIT],
                .maxlen         = sizeof(int),
@@ -1507,7 +1497,6 @@ static struct ctl_table vs_vars[] = {
                .proc_handler   = &proc_dointvec_jiffies,
        },
        {
-               .ctl_name       = NET_IPV4_VS_TO_TW,
                .procname       = "timeout_timewait",
                .data   = &vs_timeout_table_dos.timeout[IP_VS_S_TIME_WAIT],
                .maxlen         = sizeof(int),
@@ -1515,7 +1504,6 @@ static struct ctl_table vs_vars[] = {
                .proc_handler   = &proc_dointvec_jiffies,
        },
        {
-               .ctl_name       = NET_IPV4_VS_TO_CL,
                .procname       = "timeout_close",
                .data   = &vs_timeout_table_dos.timeout[IP_VS_S_CLOSE],
                .maxlen         = sizeof(int),
@@ -1523,7 +1511,6 @@ static struct ctl_table vs_vars[] = {
                .proc_handler   = &proc_dointvec_jiffies,
        },
        {
-               .ctl_name       = NET_IPV4_VS_TO_CW,
                .procname       = "timeout_closewait",
                .data   = &vs_timeout_table_dos.timeout[IP_VS_S_CLOSE_WAIT],
                .maxlen         = sizeof(int),
@@ -1531,7 +1518,6 @@ static struct ctl_table vs_vars[] = {
                .proc_handler   = &proc_dointvec_jiffies,
        },
        {
-               .ctl_name       = NET_IPV4_VS_TO_LA,
                .procname       = "timeout_lastack",
                .data   = &vs_timeout_table_dos.timeout[IP_VS_S_LAST_ACK],
                .maxlen         = sizeof(int),
@@ -1539,7 +1525,6 @@ static struct ctl_table vs_vars[] = {
                .proc_handler   = &proc_dointvec_jiffies,
        },
        {
-               .ctl_name       = NET_IPV4_VS_TO_LI,
                .procname       = "timeout_listen",
                .data   = &vs_timeout_table_dos.timeout[IP_VS_S_LISTEN],
                .maxlen         = sizeof(int),
@@ -1547,7 +1532,6 @@ static struct ctl_table vs_vars[] = {
                .proc_handler   = &proc_dointvec_jiffies,
        },
        {
-               .ctl_name       = NET_IPV4_VS_TO_SA,
                .procname       = "timeout_synack",
                .data   = &vs_timeout_table_dos.timeout[IP_VS_S_SYNACK],
                .maxlen         = sizeof(int),
@@ -1555,7 +1539,6 @@ static struct ctl_table vs_vars[] = {
                .proc_handler   = &proc_dointvec_jiffies,
        },
        {
-               .ctl_name       = NET_IPV4_VS_TO_UDP,
                .procname       = "timeout_udp",
                .data   = &vs_timeout_table_dos.timeout[IP_VS_S_UDP],
                .maxlen         = sizeof(int),
@@ -1563,7 +1546,6 @@ static struct ctl_table vs_vars[] = {
                .proc_handler   = &proc_dointvec_jiffies,
        },
        {
-               .ctl_name       = NET_IPV4_VS_TO_ICMP,
                .procname       = "timeout_icmp",
                .data   = &vs_timeout_table_dos.timeout[IP_VS_S_ICMP],
                .maxlen         = sizeof(int),
@@ -1572,7 +1554,6 @@ static struct ctl_table vs_vars[] = {
        },
 #endif
        {
-               .ctl_name       = NET_IPV4_VS_CACHE_BYPASS,
                .procname       = "cache_bypass",
                .data           = &sysctl_ip_vs_cache_bypass,
                .maxlen         = sizeof(int),
@@ -1580,7 +1561,6 @@ static struct ctl_table vs_vars[] = {
                .proc_handler   = &proc_dointvec,
        },
        {
-               .ctl_name       = NET_IPV4_VS_EXPIRE_NODEST_CONN,
                .procname       = "expire_nodest_conn",
                .data           = &sysctl_ip_vs_expire_nodest_conn,
                .maxlen         = sizeof(int),
@@ -1588,7 +1568,6 @@ static struct ctl_table vs_vars[] = {
                .proc_handler   = &proc_dointvec,
        },
        {
-               .ctl_name       = NET_IPV4_VS_EXPIRE_QUIESCENT_TEMPLATE,
                .procname       = "expire_quiescent_template",
                .data           = &sysctl_ip_vs_expire_quiescent_template,
                .maxlen         = sizeof(int),
@@ -1596,7 +1575,6 @@ static struct ctl_table vs_vars[] = {
                .proc_handler   = &proc_dointvec,
        },
        {
-               .ctl_name       = NET_IPV4_VS_SYNC_THRESHOLD,
                .procname       = "sync_threshold",
                .data           = &sysctl_ip_vs_sync_threshold,
                .maxlen         = sizeof(sysctl_ip_vs_sync_threshold),
@@ -1604,7 +1582,6 @@ static struct ctl_table vs_vars[] = {
                .proc_handler   = &proc_do_sync_threshold,
        },
        {
-               .ctl_name       = NET_IPV4_VS_NAT_ICMP_SEND,
                .procname       = "nat_icmp_send",
                .data           = &sysctl_ip_vs_nat_icmp_send,
                .maxlen         = sizeof(int),
@@ -1616,7 +1593,6 @@ static struct ctl_table vs_vars[] = {
 
 static ctl_table vs_table[] = {
        {
-               .ctl_name       = NET_IPV4_VS,
                .procname       = "vs",
                .mode           = 0555,
                .child          = vs_vars
index 052f4ed59174ac0b40012712e33e06fabe0a72cb..ad89644ef5d27e797f9a188451dc4f5c315cce70 100644 (file)
@@ -114,7 +114,6 @@ struct ip_vs_lblc_table {
 
 static ctl_table vs_vars_table[] = {
        {
-               .ctl_name       = NET_IPV4_VS_LBLC_EXPIRE,
                .procname       = "lblc_expiration",
                .data           = &sysctl_ip_vs_lblc_expiration,
                .maxlen         = sizeof(int),
@@ -126,7 +125,6 @@ static ctl_table vs_vars_table[] = {
 
 static ctl_table vs_table[] = {
        {
-               .ctl_name       = NET_IPV4_VS,
                .procname       = "vs",
                .mode           = 0555,
                .child          = vs_vars_table
@@ -582,9 +580,14 @@ static struct ip_vs_scheduler ip_vs_lblc_scheduler =
 
 static int __init ip_vs_lblc_init(void)
 {
+       int ret;
+
        INIT_LIST_HEAD(&ip_vs_lblc_scheduler.n_list);
        sysctl_header = register_sysctl_table(lblc_root_table);
-       return register_ip_vs_scheduler(&ip_vs_lblc_scheduler);
+       ret = register_ip_vs_scheduler(&ip_vs_lblc_scheduler);
+       if (ret)
+               unregister_sysctl_table(sysctl_header);
+       return ret;
 }
 
 
index 427b593c1069b82bab52215a16767db96fe6ae91..2a5ed85a3352f6a7ad06658c478cf29d7065d62a 100644 (file)
@@ -302,7 +302,6 @@ struct ip_vs_lblcr_table {
 
 static ctl_table vs_vars_table[] = {
        {
-               .ctl_name       = NET_IPV4_VS_LBLCR_EXPIRE,
                .procname       = "lblcr_expiration",
                .data           = &sysctl_ip_vs_lblcr_expiration,
                .maxlen         = sizeof(int),
@@ -314,7 +313,6 @@ static ctl_table vs_vars_table[] = {
 
 static ctl_table vs_table[] = {
        {
-               .ctl_name       = NET_IPV4_VS,
                .procname       = "vs",
                .mode           = 0555,
                .child          = vs_vars_table
@@ -771,9 +769,14 @@ static struct ip_vs_scheduler ip_vs_lblcr_scheduler =
 
 static int __init ip_vs_lblcr_init(void)
 {
+       int ret;
+
        INIT_LIST_HEAD(&ip_vs_lblcr_scheduler.n_list);
        sysctl_header = register_sysctl_table(lblcr_root_table);
-       return register_ip_vs_scheduler(&ip_vs_lblcr_scheduler);
+       ret = register_ip_vs_scheduler(&ip_vs_lblcr_scheduler);
+       if (ret)
+               unregister_sysctl_table(sysctl_header);
+       return ret;
 }
 
 
index e844ddb82b9a9e20cdedaf886111cb21e0daf23e..c0e11ec8f0f991d7096ce0e44f1535eddd7e39b2 100644 (file)
@@ -45,7 +45,7 @@ static struct ip_vs_protocol *ip_vs_proto_table[IP_VS_PROTO_TAB_SIZE];
 /*
  *     register an ipvs protocol
  */
-static int register_ip_vs_protocol(struct ip_vs_protocol *pp)
+static int __used register_ip_vs_protocol(struct ip_vs_protocol *pp)
 {
        unsigned hash = IP_VS_PROTO_HASH(pp->protocol);
 
index 1602304abbf9e9055388c680503fa0325ce4ab8a..43223586190839ffa92bc5a56e7ca7d37a58824e 100644 (file)
@@ -183,19 +183,6 @@ int register_ip_vs_scheduler(struct ip_vs_scheduler *scheduler)
        /* increase the module use count */
        ip_vs_use_count_inc();
 
-       /*
-        *  Make sure that the scheduler with this name doesn't exist
-        *  in the scheduler list.
-        */
-       sched = ip_vs_sched_getbyname(scheduler->name);
-       if (sched) {
-               ip_vs_scheduler_put(sched);
-               ip_vs_use_count_dec();
-               IP_VS_ERR("register_ip_vs_scheduler(): [%s] scheduler "
-                         "already existed in the system\n", scheduler->name);
-               return -EINVAL;
-       }
-
        write_lock_bh(&__ip_vs_sched_lock);
 
        if (scheduler->n_list.next != &scheduler->n_list) {
@@ -206,6 +193,20 @@ int register_ip_vs_scheduler(struct ip_vs_scheduler *scheduler)
                return -EINVAL;
        }
 
+       /*
+        *  Make sure that the scheduler with this name doesn't exist
+        *  in the scheduler list.
+        */
+       list_for_each_entry(sched, &ip_vs_schedulers, n_list) {
+               if (strcmp(scheduler->name, sched->name) == 0) {
+                       write_unlock_bh(&__ip_vs_sched_lock);
+                       ip_vs_use_count_dec();
+                       IP_VS_ERR("register_ip_vs_scheduler(): [%s] scheduler "
+                                       "already existed in the system\n",
+                                       scheduler->name);
+                       return -EINVAL;
+               }
+       }
        /*
         *      Add it into the d-linked scheduler list
         */
index 5de6e57ac55c20ebd3f0ca8bd16310d15b52a640..f8678651250f0b349058e9243444372ab8b1d95a 100644 (file)
@@ -66,7 +66,7 @@ ipt_local_hook(unsigned int hook,
        if (skb->len < sizeof(struct iphdr) ||
            ip_hdrlen(skb) < sizeof(struct iphdr)) {
                if (net_ratelimit())
-                       printk("iptable_raw: ignoring short SOCK_RAW"
+                       printk("iptable_raw: ignoring short SOCK_RAW "
                               "packet.\n");
                return NF_ACCEPT;
        }
index 70e7997ea2844aead26de3776008cbbdd73358c9..86b465b176baad0e0a3a504d47cb2d059894cf20 100644 (file)
@@ -607,13 +607,10 @@ static void nf_nat_move_storage(struct nf_conn *conntrack, void *old)
        struct nf_conn_nat *new_nat = nf_ct_ext_find(conntrack, NF_CT_EXT_NAT);
        struct nf_conn_nat *old_nat = (struct nf_conn_nat *)old;
        struct nf_conn *ct = old_nat->ct;
-       unsigned int srchash;
 
-       if (!(ct->status & IPS_NAT_DONE_MASK))
+       if (!ct || !(ct->status & IPS_NAT_DONE_MASK))
                return;
 
-       srchash = hash_by_src(&ct->tuplehash[IP_CT_DIR_ORIGINAL].tuple);
-
        write_lock_bh(&nf_nat_lock);
        hlist_replace_rcu(&old_nat->bysource, &new_nat->bysource);
        new_nat->ct = ct;
index 1bff9ed349ff5a9e5d14ba1f09888e304bd88950..d2bc6148a7378452bde89de27cd7a0876a18c78d 100644 (file)
@@ -1161,7 +1161,7 @@ static struct dst_entry *ipv4_negative_advice(struct dst_entry *dst)
                        unsigned hash = rt_hash(rt->fl.fl4_dst, rt->fl.fl4_src,
                                                rt->fl.oif);
 #if RT_CACHE_DEBUG >= 1
-                       printk(KERN_DEBUG "ip_rt_advice: redirect to "
+                       printk(KERN_DEBUG "ipv4_negative_advice: redirect to "
                                          "%u.%u.%u.%u/%02x dropped\n",
                                NIPQUAD(rt->rt_dst), rt->fl.fl4_tos);
 #endif
@@ -1252,6 +1252,7 @@ static int ip_error(struct sk_buff *skb)
                        break;
                case ENETUNREACH:
                        code = ICMP_NET_UNREACH;
+                       IP_INC_STATS_BH(IPSTATS_MIB_INNOROUTES);
                        break;
                case EACCES:
                        code = ICMP_PKT_FILTERED;
@@ -1881,6 +1882,8 @@ no_route:
        RT_CACHE_STAT_INC(in_no_route);
        spec_dst = inet_select_addr(dev, 0, RT_SCOPE_UNIVERSE);
        res.type = RTN_UNREACHABLE;
+       if (err == -ESRCH)
+               err = -ENETUNREACH;
        goto local_input;
 
        /*
@@ -2888,18 +2891,14 @@ static int ip_rt_acct_read(char *buffer, char **start, off_t offset,
        offset /= sizeof(u32);
 
        if (length > 0) {
-               u32 *src = ((u32 *) IP_RT_ACCT_CPU(0)) + offset;
                u32 *dst = (u32 *) buffer;
 
-               /* Copy first cpu. */
                *start = buffer;
-               memcpy(dst, src, length);
+               memset(dst, 0, length);
 
-               /* Add the other cpus in, one int at a time */
                for_each_possible_cpu(i) {
                        unsigned int j;
-
-                       src = ((u32 *) IP_RT_ACCT_CPU(i)) + offset;
+                       u32 *src = ((u32 *) IP_RT_ACCT_CPU(i)) + offset;
 
                        for (j = 0; j < length/4; j++)
                                dst[j] += src[j];
index ffddd2b453523c137dae115fde91aa1e91d5471a..bec6fe880657b9149228ac191ac1cb309f6bc05a 100644 (file)
@@ -191,7 +191,7 @@ static int sysctl_tcp_congestion_control(ctl_table *table, int __user *name,
 
        tcp_get_default_congestion_control(val);
        ret = sysctl_string(&tbl, name, nlen, oldval, oldlenp, newval, newlen);
-       if (ret == 0 && newval && newlen)
+       if (ret == 1 && newval && newlen)
                ret = tcp_set_default_congestion_control(val);
        return ret;
 }
index 64f1cbaf96e8a487bba6edc9398aeff535c2ec79..5aa5f5496d6d79e4553fcb2cdf0f5f8283f33e45 100644 (file)
@@ -298,7 +298,7 @@ static u32 tcp_illinois_ssthresh(struct sock *sk)
        struct illinois *ca = inet_csk_ca(sk);
 
        /* Multiplicative decrease */
-       return max((tp->snd_cwnd * ca->beta) >> BETA_SHIFT, 2U);
+       return max(tp->snd_cwnd - ((tp->snd_cwnd * ca->beta) >> BETA_SHIFT), 2U);
 }
 
 
index 0f0c1c9829a14b41e9654b3a108d2f1aa3b5e6f1..b9e429d2d1de5f035137a55174324169b64a9e70 100644 (file)
@@ -3003,17 +3003,13 @@ static int tcp_process_frto(struct sock *sk, int flag)
        }
 
        if (tp->frto_counter == 1) {
-               /* Sending of the next skb must be allowed or no F-RTO */
-               if (!tcp_send_head(sk) ||
-                   after(TCP_SKB_CB(tcp_send_head(sk))->end_seq,
-                                    tp->snd_una + tp->snd_wnd)) {
-                       tcp_enter_frto_loss(sk, (tp->frto_counter == 1 ? 2 : 3),
-                                           flag);
-                       return 1;
-               }
-
+               /* tcp_may_send_now needs to see updated state */
                tp->snd_cwnd = tcp_packets_in_flight(tp) + 2;
                tp->frto_counter = 2;
+
+               if (!tcp_may_send_now(sk))
+                       tcp_enter_frto_loss(sk, 2, flag);
+
                return 1;
        } else {
                switch (sysctl_tcp_frto_response) {
@@ -3069,6 +3065,7 @@ static int tcp_ack(struct sock *sk, struct sk_buff *skb, int flag)
        }
 
        prior_fackets = tp->fackets_out;
+       prior_in_flight = tcp_packets_in_flight(tp);
 
        if (!(flag&FLAG_SLOWPATH) && after(ack, prior_snd_una)) {
                /* Window is constant, pure forward advance.
@@ -3108,8 +3105,6 @@ static int tcp_ack(struct sock *sk, struct sk_buff *skb, int flag)
        if (!prior_packets)
                goto no_queue;
 
-       prior_in_flight = tcp_packets_in_flight(tp);
-
        /* See if we can take anything off of the retransmit queue. */
        flag |= tcp_clean_rtx_queue(sk, &seq_rtt, prior_fackets);
 
index e566f3c676772d6a7141bb50213d7eb0430135d3..652c32368cccb6cb590c2c4eec96b77026288d0b 100644 (file)
@@ -900,8 +900,7 @@ int tcp_v4_md5_do_add(struct sock *sk, __be32 addr,
                                       sizeof(*keys) * md5sig->entries4);
 
                        /* Free old key list, and reference new one */
-                       if (md5sig->keys4)
-                               kfree(md5sig->keys4);
+                       kfree(md5sig->keys4);
                        md5sig->keys4 = keys;
                        md5sig->alloced4++;
                }
@@ -939,10 +938,10 @@ int tcp_v4_md5_do_del(struct sock *sk, __be32 addr)
                                tp->md5sig_info->alloced4 = 0;
                        } else if (tp->md5sig_info->entries4 != i) {
                                /* Need to do some manipulation */
-                               memcpy(&tp->md5sig_info->keys4[i],
-                                      &tp->md5sig_info->keys4[i+1],
-                                      (tp->md5sig_info->entries4 - i) *
-                                       sizeof(struct tcp4_md5sig_key));
+                               memmove(&tp->md5sig_info->keys4[i],
+                                       &tp->md5sig_info->keys4[i+1],
+                                       (tp->md5sig_info->entries4 - i) *
+                                        sizeof(struct tcp4_md5sig_key));
                        }
                        tcp_free_md5sig_pool();
                        return 0;
index 324b4207254ae411728dd8a3cc1740f5ac0ce267..f4c1eef89af0b3ac1e63ed91ecf3725a761d6949 100644 (file)
@@ -1162,8 +1162,7 @@ int tcp_may_send_now(struct sock *sk)
        return (skb &&
                tcp_snd_test(sk, skb, tcp_current_mss(sk, 1),
                             (tcp_skb_is_last(sk, skb) ?
-                             TCP_NAGLE_PUSH :
-                             tp->nonagle)));
+                             tp->nonagle : TCP_NAGLE_PUSH)));
 }
 
 /* Trim TSO SKB to LEN bytes, put the remaining data into a new packet
@@ -1295,6 +1294,7 @@ static int tcp_mtu_probe(struct sock *sk)
        struct sk_buff *skb, *nskb, *next;
        int len;
        int probe_size;
+       int size_needed;
        unsigned int pif;
        int copy;
        int mss_now;
@@ -1313,27 +1313,20 @@ static int tcp_mtu_probe(struct sock *sk)
        /* Very simple search strategy: just double the MSS. */
        mss_now = tcp_current_mss(sk, 0);
        probe_size = 2*tp->mss_cache;
+       size_needed = probe_size + (tp->reordering + 1) * tp->mss_cache;
        if (probe_size > tcp_mtu_to_mss(sk, icsk->icsk_mtup.search_high)) {
                /* TODO: set timer for probe_converge_event */
                return -1;
        }
 
        /* Have enough data in the send queue to probe? */
-       len = 0;
-       if ((skb = tcp_send_head(sk)) == NULL)
-               return -1;
-       while ((len += skb->len) < probe_size && !tcp_skb_is_last(sk, skb))
-               skb = tcp_write_queue_next(sk, skb);
-       if (len < probe_size)
+       if (tp->write_seq - tp->snd_nxt < size_needed)
                return -1;
 
-       /* Receive window check. */
-       if (after(TCP_SKB_CB(skb)->seq + probe_size, tp->snd_una + tp->snd_wnd)) {
-               if (tp->snd_wnd < probe_size)
-                       return -1;
-               else
-                       return 0;
-       }
+       if (tp->snd_wnd < size_needed)
+               return -1;
+       if (after(tp->snd_nxt + size_needed, tp->snd_una + tp->snd_wnd))
+               return 0;
 
        /* Do we need to wait to drain cwnd? */
        pif = tcp_packets_in_flight(tp);
@@ -1352,7 +1345,6 @@ static int tcp_mtu_probe(struct sock *sk)
 
        skb = tcp_send_head(sk);
        tcp_insert_write_queue_before(nskb, skb, sk);
-       tcp_advance_send_head(sk, skb);
 
        TCP_SKB_CB(nskb)->seq = TCP_SKB_CB(skb)->seq;
        TCP_SKB_CB(nskb)->end_seq = TCP_SKB_CB(skb)->seq + probe_size;
index 1bd8d818f8e9ec1b28b3ae74eae6d78975d03020..e8c347579da9a21f6d347b359ed2f28ad2218e43 100644 (file)
@@ -967,7 +967,7 @@ int ipv6_dev_get_saddr(struct net_device *daddr_dev,
                        if (unlikely(score.addr_type == IPV6_ADDR_ANY ||
                                     score.addr_type & IPV6_ADDR_MULTICAST)) {
                                LIMIT_NETDEBUG(KERN_DEBUG
-                                              "ADDRCONF: unspecified / multicast address"
+                                              "ADDRCONF: unspecified / multicast address "
                                               "assigned as unicast address on %s",
                                               dev->name);
                                continue;
@@ -2293,6 +2293,9 @@ static int addrconf_notify(struct notifier_block *this, unsigned long event,
                                break;
                        }
 
+                       if (!idev && dev->mtu >= IPV6_MIN_MTU)
+                               idev = ipv6_add_dev(dev);
+
                        if (idev)
                                idev->if_flags |= IF_READY;
                } else {
@@ -2357,12 +2360,18 @@ static int addrconf_notify(struct notifier_block *this, unsigned long event,
                break;
 
        case NETDEV_CHANGEMTU:
-               if ( idev && dev->mtu >= IPV6_MIN_MTU) {
+               if (idev && dev->mtu >= IPV6_MIN_MTU) {
                        rt6_mtu_change(dev, dev->mtu);
                        idev->cnf.mtu6 = dev->mtu;
                        break;
                }
 
+               if (!idev && dev->mtu >= IPV6_MIN_MTU) {
+                       idev = ipv6_add_dev(dev);
+                       if (idev)
+                               break;
+               }
+
                /* MTU falled under IPV6_MIN_MTU. Stop IPv6 on this interface. */
 
        case NETDEV_DOWN:
index 7db66f10e00d18f80d705fd83459ac5aec43f327..44405325467626a5ca473ef647872ec8cdb14753 100644 (file)
@@ -230,6 +230,12 @@ static int esp6_input(struct xfrm_state *x, struct sk_buff *skb)
                }
                /* ... check padding bits here. Silly. :-) */
 
+               /* RFC4303: Drop dummy packets without any error */
+               if (nexthdr[1] == IPPROTO_NONE) {
+                       ret = -EINVAL;
+                       goto out;
+               }
+
                pskb_trim(skb, skb->len - alen - padlen - 2);
                ret = nexthdr[1];
        }
index 86e1835ce4e4bcd71a25a9443f656872ab10c0a8..6338a9c1aa14e2a0f832db6d40d69df678dc09be 100644 (file)
@@ -933,6 +933,8 @@ static int ip6_dst_lookup_tail(struct sock *sk,
        return 0;
 
 out_err_release:
+       if (err == -ENETUNREACH)
+               IP6_INC_STATS_BH(NULL, IPSTATS_MIB_OUTNOROUTES);
        dst_release(*dst);
        *dst = NULL;
        return err;
index 3aad861975a0a084d4ec952e2c1082d87cff7ba3..93980c3b83e694460fe42ab4ed74e91f47649d2f 100644 (file)
@@ -581,7 +581,10 @@ static int tcp_v6_md5_do_add(struct sock *sk, struct in6_addr *peer,
                        }
                        sk->sk_route_caps &= ~NETIF_F_GSO_MASK;
                }
-               tcp_alloc_md5sig_pool();
+               if (tcp_alloc_md5sig_pool() == NULL) {
+                       kfree(newkey);
+                       return -ENOMEM;
+               }
                if (tp->md5sig_info->alloced6 == tp->md5sig_info->entries6) {
                        keys = kmalloc((sizeof (tp->md5sig_info->keys6[0]) *
                                       (tp->md5sig_info->entries6 + 1)), GFP_ATOMIC);
@@ -634,10 +637,6 @@ static int tcp_v6_md5_do_del(struct sock *sk, struct in6_addr *peer)
                                kfree(tp->md5sig_info->keys6);
                                tp->md5sig_info->keys6 = NULL;
                                tp->md5sig_info->alloced6 = 0;
-
-                               tcp_free_md5sig_pool();
-
-                               return 0;
                        } else {
                                /* shrink the database */
                                if (tp->md5sig_info->entries6 != i)
@@ -646,6 +645,8 @@ static int tcp_v6_md5_do_del(struct sock *sk, struct in6_addr *peer)
                                                (tp->md5sig_info->entries6 - i)
                                                * sizeof (tp->md5sig_info->keys6[0]));
                        }
+                       tcp_free_md5sig_pool();
+                       return 0;
                }
        }
        return -ENOENT;
index 82e27b80d07d3d060112eb873d7b0a9774853cba..b8e9eb445d744e63e9430fa5ede84810236fcccc 100644 (file)
@@ -233,7 +233,7 @@ __xfrm6_bundle_create(struct xfrm_policy *policy, struct xfrm_state **xfrm, int
                dst_prev->output = dst_prev->xfrm->outer_mode->afinfo->output;
                /* Sheit... I remember I did this right. Apparently,
                 * it was magically lost, so this code needs audit */
-               x->u.rt6.rt6i_flags    = rt0->rt6i_flags&(RTCF_BROADCAST|RTCF_MULTICAST|RTCF_LOCAL);
+               x->u.rt6.rt6i_flags    = rt0->rt6i_flags&(RTF_ANYCAST|RTF_LOCAL);
                x->u.rt6.rt6i_metric   = rt0->rt6i_metric;
                x->u.rt6.rt6i_node     = rt0->rt6i_node;
                x->u.rt6.rt6i_gateway  = rt0->rt6i_gateway;
index 1120b150e21191187fee038ece62bc856caf9e97..be627e1f04d88c498a0a6c0f7d0c291688f0220a 100644 (file)
@@ -1245,6 +1245,7 @@ static void ircomm_tty_flow_indication(void *instance, void *sap,
        self->flow = cmd;
 }
 
+#ifdef CONFIG_PROC_FS
 static int ircomm_tty_line_info(struct ircomm_tty_cb *self, char *buf)
 {
        int  ret=0;
@@ -1354,7 +1355,6 @@ static int ircomm_tty_line_info(struct ircomm_tty_cb *self, char *buf)
  *
  *
  */
-#ifdef CONFIG_PROC_FS
 static int ircomm_tty_read_proc(char *buf, char **start, off_t offset, int len,
                                int *eof, void *unused)
 {
index dc5e34a01620b8225d8f4081c03e84ef4288b706..a86a5d83786b349bb92e773ad8d70c0d6340fe49 100644 (file)
@@ -928,7 +928,7 @@ void iriap_call_indication(struct iriap_cb *self, struct sk_buff *skb)
 
        opcode = fp[0];
        if (~opcode & 0x80) {
-               IRDA_WARNING("%s: IrIAS multiframe commands or results"
+               IRDA_WARNING("%s: IrIAS multiframe commands or results "
                             "is not implemented yet!\n", __FUNCTION__);
                return;
        }
index 7f9c8542e5fc0deabdb0ff86a7fd654a1fc962c0..c68220773d28ee2d62dd8af780dc72adc9a80794 100644 (file)
@@ -296,6 +296,7 @@ void irlan_eth_flow_indication(void *instance, void *sap, LOCAL_FLOW flow)
  */
 void irlan_eth_send_gratuitous_arp(struct net_device *dev)
 {
+#ifdef CONFIG_INET
        struct in_device *in_dev;
 
        /*
@@ -303,7 +304,6 @@ void irlan_eth_send_gratuitous_arp(struct net_device *dev)
         * is useful if we have changed access points on the same
         * subnet.
         */
-#ifdef CONFIG_INET
        IRDA_DEBUG(4, "IrLAN: Sending gratuitous ARP\n");
        rcu_read_lock();
        in_dev = __in_dev_get_rcu(dev);
index a2f5a6ea389520832c86c8b5e1f9c907de518796..7698f6c459d6006f2ed587ec00c54c84a1901777 100644 (file)
@@ -97,7 +97,7 @@ struct iucv_irq_list {
        struct iucv_irq_data data;
 };
 
-static struct iucv_irq_data *iucv_irq_data;
+static struct iucv_irq_data *iucv_irq_data[NR_CPUS];
 static cpumask_t iucv_buffer_cpumask = CPU_MASK_NONE;
 static cpumask_t iucv_irq_cpumask = CPU_MASK_NONE;
 
@@ -277,7 +277,7 @@ union iucv_param {
 /*
  * Anchor for per-cpu IUCV command parameter block.
  */
-static union iucv_param *iucv_param;
+static union iucv_param *iucv_param[NR_CPUS];
 
 /**
  * iucv_call_b2f0
@@ -356,7 +356,7 @@ static void iucv_allow_cpu(void *data)
         *      0x10 - Flag to allow priority message completion interrupts
         *      0x08 - Flag to allow IUCV control interrupts
         */
-       parm = percpu_ptr(iucv_param, smp_processor_id());
+       parm = iucv_param[cpu];
        memset(parm, 0, sizeof(union iucv_param));
        parm->set_mask.ipmask = 0xf8;
        iucv_call_b2f0(IUCV_SETMASK, parm);
@@ -377,7 +377,7 @@ static void iucv_block_cpu(void *data)
        union iucv_param *parm;
 
        /* Disable all iucv interrupts. */
-       parm = percpu_ptr(iucv_param, smp_processor_id());
+       parm = iucv_param[cpu];
        memset(parm, 0, sizeof(union iucv_param));
        iucv_call_b2f0(IUCV_SETMASK, parm);
 
@@ -401,9 +401,9 @@ static void iucv_declare_cpu(void *data)
                return;
 
        /* Declare interrupt buffer. */
-       parm = percpu_ptr(iucv_param, cpu);
+       parm = iucv_param[cpu];
        memset(parm, 0, sizeof(union iucv_param));
-       parm->db.ipbfadr1 = virt_to_phys(percpu_ptr(iucv_irq_data, cpu));
+       parm->db.ipbfadr1 = virt_to_phys(iucv_irq_data[cpu]);
        rc = iucv_call_b2f0(IUCV_DECLARE_BUFFER, parm);
        if (rc) {
                char *err = "Unknown";
@@ -458,7 +458,7 @@ static void iucv_retrieve_cpu(void *data)
        iucv_block_cpu(NULL);
 
        /* Retrieve interrupt buffer. */
-       parm = percpu_ptr(iucv_param, cpu);
+       parm = iucv_param[cpu];
        iucv_call_b2f0(IUCV_RETRIEVE_BUFFER, parm);
 
        /* Clear indication that an iucv buffer exists for this cpu. */
@@ -558,22 +558,23 @@ static int __cpuinit iucv_cpu_notify(struct notifier_block *self,
        switch (action) {
        case CPU_UP_PREPARE:
        case CPU_UP_PREPARE_FROZEN:
-               if (!percpu_populate(iucv_irq_data,
-                                    sizeof(struct iucv_irq_data),
-                                    GFP_KERNEL|GFP_DMA, cpu))
+               iucv_irq_data[cpu] = kmalloc_node(sizeof(struct iucv_irq_data),
+                                       GFP_KERNEL|GFP_DMA, cpu_to_node(cpu));
+               if (!iucv_irq_data[cpu])
                        return NOTIFY_BAD;
-               if (!percpu_populate(iucv_param, sizeof(union iucv_param),
-                                    GFP_KERNEL|GFP_DMA, cpu)) {
-                       percpu_depopulate(iucv_irq_data, cpu);
+               iucv_param[cpu] = kmalloc_node(sizeof(union iucv_param),
+                                    GFP_KERNEL|GFP_DMA, cpu_to_node(cpu));
+               if (!iucv_param[cpu])
                        return NOTIFY_BAD;
-               }
                break;
        case CPU_UP_CANCELED:
        case CPU_UP_CANCELED_FROZEN:
        case CPU_DEAD:
        case CPU_DEAD_FROZEN:
-               percpu_depopulate(iucv_param, cpu);
-               percpu_depopulate(iucv_irq_data, cpu);
+               kfree(iucv_param[cpu]);
+               iucv_param[cpu] = NULL;
+               kfree(iucv_irq_data[cpu]);
+               iucv_irq_data[cpu] = NULL;
                break;
        case CPU_ONLINE:
        case CPU_ONLINE_FROZEN:
@@ -612,7 +613,7 @@ static int iucv_sever_pathid(u16 pathid, u8 userdata[16])
 {
        union iucv_param *parm;
 
-       parm = percpu_ptr(iucv_param, smp_processor_id());
+       parm = iucv_param[smp_processor_id()];
        memset(parm, 0, sizeof(union iucv_param));
        if (userdata)
                memcpy(parm->ctrl.ipuser, userdata, sizeof(parm->ctrl.ipuser));
@@ -755,7 +756,7 @@ int iucv_path_accept(struct iucv_path *path, struct iucv_handler *handler,
 
        local_bh_disable();
        /* Prepare parameter block. */
-       parm = percpu_ptr(iucv_param, smp_processor_id());
+       parm = iucv_param[smp_processor_id()];
        memset(parm, 0, sizeof(union iucv_param));
        parm->ctrl.ippathid = path->pathid;
        parm->ctrl.ipmsglim = path->msglim;
@@ -799,7 +800,7 @@ int iucv_path_connect(struct iucv_path *path, struct iucv_handler *handler,
        BUG_ON(in_atomic());
        spin_lock_bh(&iucv_table_lock);
        iucv_cleanup_queue();
-       parm = percpu_ptr(iucv_param, smp_processor_id());
+       parm = iucv_param[smp_processor_id()];
        memset(parm, 0, sizeof(union iucv_param));
        parm->ctrl.ipmsglim = path->msglim;
        parm->ctrl.ipflags1 = path->flags;
@@ -854,7 +855,7 @@ int iucv_path_quiesce(struct iucv_path *path, u8 userdata[16])
        int rc;
 
        local_bh_disable();
-       parm = percpu_ptr(iucv_param, smp_processor_id());
+       parm = iucv_param[smp_processor_id()];
        memset(parm, 0, sizeof(union iucv_param));
        if (userdata)
                memcpy(parm->ctrl.ipuser, userdata, sizeof(parm->ctrl.ipuser));
@@ -881,7 +882,7 @@ int iucv_path_resume(struct iucv_path *path, u8 userdata[16])
        int rc;
 
        local_bh_disable();
-       parm = percpu_ptr(iucv_param, smp_processor_id());
+       parm = iucv_param[smp_processor_id()];
        memset(parm, 0, sizeof(union iucv_param));
        if (userdata)
                memcpy(parm->ctrl.ipuser, userdata, sizeof(parm->ctrl.ipuser));
@@ -936,7 +937,7 @@ int iucv_message_purge(struct iucv_path *path, struct iucv_message *msg,
        int rc;
 
        local_bh_disable();
-       parm = percpu_ptr(iucv_param, smp_processor_id());
+       parm = iucv_param[smp_processor_id()];
        memset(parm, 0, sizeof(union iucv_param));
        parm->purge.ippathid = path->pathid;
        parm->purge.ipmsgid = msg->id;
@@ -1003,7 +1004,7 @@ int iucv_message_receive(struct iucv_path *path, struct iucv_message *msg,
        }
 
        local_bh_disable();
-       parm = percpu_ptr(iucv_param, smp_processor_id());
+       parm = iucv_param[smp_processor_id()];
        memset(parm, 0, sizeof(union iucv_param));
        parm->db.ipbfadr1 = (u32)(addr_t) buffer;
        parm->db.ipbfln1f = (u32) size;
@@ -1040,7 +1041,7 @@ int iucv_message_reject(struct iucv_path *path, struct iucv_message *msg)
        int rc;
 
        local_bh_disable();
-       parm = percpu_ptr(iucv_param, smp_processor_id());
+       parm = iucv_param[smp_processor_id()];
        memset(parm, 0, sizeof(union iucv_param));
        parm->db.ippathid = path->pathid;
        parm->db.ipmsgid = msg->id;
@@ -1074,7 +1075,7 @@ int iucv_message_reply(struct iucv_path *path, struct iucv_message *msg,
        int rc;
 
        local_bh_disable();
-       parm = percpu_ptr(iucv_param, smp_processor_id());
+       parm = iucv_param[smp_processor_id()];
        memset(parm, 0, sizeof(union iucv_param));
        if (flags & IUCV_IPRMDATA) {
                parm->dpl.ippathid = path->pathid;
@@ -1118,7 +1119,7 @@ int iucv_message_send(struct iucv_path *path, struct iucv_message *msg,
        int rc;
 
        local_bh_disable();
-       parm = percpu_ptr(iucv_param, smp_processor_id());
+       parm = iucv_param[smp_processor_id()];
        memset(parm, 0, sizeof(union iucv_param));
        if (flags & IUCV_IPRMDATA) {
                /* Message of 8 bytes can be placed into the parameter list. */
@@ -1172,7 +1173,7 @@ int iucv_message_send2way(struct iucv_path *path, struct iucv_message *msg,
        int rc;
 
        local_bh_disable();
-       parm = percpu_ptr(iucv_param, smp_processor_id());
+       parm = iucv_param[smp_processor_id()];
        memset(parm, 0, sizeof(union iucv_param));
        if (flags & IUCV_IPRMDATA) {
                parm->dpl.ippathid = path->pathid;
@@ -1559,7 +1560,7 @@ static void iucv_external_interrupt(u16 code)
        struct iucv_irq_data *p;
        struct iucv_irq_list *work;
 
-       p = percpu_ptr(iucv_irq_data, smp_processor_id());
+       p = iucv_irq_data[smp_processor_id()];
        if (p->ippathid >= iucv_max_pathid) {
                printk(KERN_WARNING "iucv_do_int: Got interrupt with "
                       "pathid %d > max_connections (%ld)\n",
@@ -1598,6 +1599,7 @@ static void iucv_external_interrupt(u16 code)
 static int __init iucv_init(void)
 {
        int rc;
+       int cpu;
 
        if (!MACHINE_IS_VM) {
                rc = -EPROTONOSUPPORT;
@@ -1617,19 +1619,23 @@ static int __init iucv_init(void)
                rc = PTR_ERR(iucv_root);
                goto out_bus;
        }
-       /* Note: GFP_DMA used to get memory below 2G */
-       iucv_irq_data = percpu_alloc(sizeof(struct iucv_irq_data),
-                                    GFP_KERNEL|GFP_DMA);
-       if (!iucv_irq_data) {
-               rc = -ENOMEM;
-               goto out_root;
-       }
-       /* Allocate parameter blocks. */
-       iucv_param = percpu_alloc(sizeof(union iucv_param),
-                                 GFP_KERNEL|GFP_DMA);
-       if (!iucv_param) {
-               rc = -ENOMEM;
-               goto out_extint;
+
+       for_each_online_cpu(cpu) {
+               /* Note: GFP_DMA used to get memory below 2G */
+               iucv_irq_data[cpu] = kmalloc_node(sizeof(struct iucv_irq_data),
+                                    GFP_KERNEL|GFP_DMA, cpu_to_node(cpu));
+               if (!iucv_irq_data[cpu]) {
+                       rc = -ENOMEM;
+                       goto out_free;
+               }
+
+               /* Allocate parameter blocks. */
+               iucv_param[cpu] = kmalloc_node(sizeof(union iucv_param),
+                                 GFP_KERNEL|GFP_DMA, cpu_to_node(cpu));
+               if (!iucv_param[cpu]) {
+                       rc = -ENOMEM;
+                       goto out_free;
+               }
        }
        register_hotcpu_notifier(&iucv_cpu_notifier);
        ASCEBC(iucv_error_no_listener, 16);
@@ -1638,9 +1644,13 @@ static int __init iucv_init(void)
        iucv_available = 1;
        return 0;
 
-out_extint:
-       percpu_free(iucv_irq_data);
-out_root:
+out_free:
+       for_each_possible_cpu(cpu) {
+               kfree(iucv_param[cpu]);
+               iucv_param[cpu] = NULL;
+               kfree(iucv_irq_data[cpu]);
+               iucv_irq_data[cpu] = NULL;
+       }
        s390_root_dev_unregister(iucv_root);
 out_bus:
        bus_unregister(&iucv_bus);
@@ -1658,6 +1668,7 @@ out:
 static void __exit iucv_exit(void)
 {
        struct iucv_irq_list *p, *n;
+       int cpu;
 
        spin_lock_irq(&iucv_queue_lock);
        list_for_each_entry_safe(p, n, &iucv_task_queue, list)
@@ -1666,8 +1677,12 @@ static void __exit iucv_exit(void)
                kfree(p);
        spin_unlock_irq(&iucv_queue_lock);
        unregister_hotcpu_notifier(&iucv_cpu_notifier);
-       percpu_free(iucv_param);
-       percpu_free(iucv_irq_data);
+       for_each_possible_cpu(cpu) {
+               kfree(iucv_param[cpu]);
+               iucv_param[cpu] = NULL;
+               kfree(iucv_irq_data[cpu]);
+               iucv_irq_data[cpu] = NULL;
+       }
        s390_root_dev_unregister(iucv_root);
        bus_unregister(&iucv_bus);
        unregister_external_interrupt(0x4000, iucv_external_interrupt);
index 10c89d47f685e492702a595dfc0061269d27801f..878039b9557dddae70eddd32a342fed056261581 100644 (file)
@@ -1015,9 +1015,7 @@ static inline struct sk_buff *pfkey_xfrm_state2msg(struct xfrm_state *x)
 {
        struct sk_buff *skb;
 
-       spin_lock_bh(&x->lock);
        skb = __pfkey_xfrm_state2msg(x, 1, 3);
-       spin_unlock_bh(&x->lock);
 
        return skb;
 }
@@ -1552,7 +1550,7 @@ static int pfkey_get(struct sock *sk, struct sk_buff *skb, struct sadb_msg *hdr,
 
        out_hdr = (struct sadb_msg *) out_skb->data;
        out_hdr->sadb_msg_version = hdr->sadb_msg_version;
-       out_hdr->sadb_msg_type = SADB_DUMP;
+       out_hdr->sadb_msg_type = SADB_GET;
        out_hdr->sadb_msg_satype = pfkey_proto2satype(proto);
        out_hdr->sadb_msg_errno = 0;
        out_hdr->sadb_msg_reserved = 0;
index e0ee65a969bc4537d5bccc35fb94d9a636e7a2d0..505af1f067ab06620fcb2050a2725a711c321f66 100644 (file)
@@ -216,6 +216,7 @@ static int ieee80211_open(struct net_device *dev)
                        res = local->ops->start(local_to_hw(local));
                if (res)
                        return res;
+               ieee80211_hw_config(local);
        }
 
        switch (sdata->type) {
@@ -232,7 +233,6 @@ static int ieee80211_open(struct net_device *dev)
                        netif_tx_unlock_bh(local->mdev);
 
                        local->hw.conf.flags |= IEEE80211_CONF_RADIOTAP;
-                       ieee80211_hw_config(local);
                }
                break;
        case IEEE80211_IF_TYPE_STA:
@@ -267,6 +267,17 @@ static int ieee80211_open(struct net_device *dev)
                tasklet_enable(&local->tasklet);
        }
 
+       /*
+        * set_multicast_list will be invoked by the networking core
+        * which will check whether any increments here were done in
+        * error and sync them down to the hardware as filter flags.
+        */
+       if (sdata->flags & IEEE80211_SDATA_ALLMULTI)
+               atomic_inc(&local->iff_allmultis);
+
+       if (sdata->flags & IEEE80211_SDATA_PROMISC)
+               atomic_inc(&local->iff_promiscs);
+
        local->open_count++;
 
        netif_start_queue(dev);
@@ -284,6 +295,18 @@ static int ieee80211_stop(struct net_device *dev)
 
        netif_stop_queue(dev);
 
+       /*
+        * Don't count this interface for promisc/allmulti while it
+        * is down. dev_mc_unsync() will invoke set_multicast_list
+        * on the master interface which will sync these down to the
+        * hardware as filter flags.
+        */
+       if (sdata->flags & IEEE80211_SDATA_ALLMULTI)
+               atomic_dec(&local->iff_allmultis);
+
+       if (sdata->flags & IEEE80211_SDATA_PROMISC)
+               atomic_dec(&local->iff_promiscs);
+
        dev_mc_unsync(local->mdev, dev);
 
        /* down all dependent devices, that is VLANs */
@@ -311,8 +334,7 @@ static int ieee80211_stop(struct net_device *dev)
                        ieee80211_configure_filter(local);
                        netif_tx_unlock_bh(local->mdev);
 
-                       local->hw.conf.flags |= IEEE80211_CONF_RADIOTAP;
-                       ieee80211_hw_config(local);
+                       local->hw.conf.flags &= ~IEEE80211_CONF_RADIOTAP;
                }
                break;
        case IEEE80211_IF_TYPE_STA:
@@ -334,6 +356,11 @@ static int ieee80211_stop(struct net_device *dev)
                        cancel_delayed_work(&local->scan_work);
                }
                flush_workqueue(local->hw.workqueue);
+
+               sdata->u.sta.flags &= ~IEEE80211_STA_PRIVACY_INVOKED;
+               kfree(sdata->u.sta.extra_ie);
+               sdata->u.sta.extra_ie = NULL;
+               sdata->u.sta.extra_ie_len = 0;
                /* fall through */
        default:
                conf.if_id = dev->ifindex;
@@ -366,8 +393,8 @@ static void ieee80211_set_multicast_list(struct net_device *dev)
 
        allmulti = !!(dev->flags & IFF_ALLMULTI);
        promisc = !!(dev->flags & IFF_PROMISC);
-       sdata_allmulti = sdata->flags & IEEE80211_SDATA_ALLMULTI;
-       sdata_promisc = sdata->flags & IEEE80211_SDATA_PROMISC;
+       sdata_allmulti = !!(sdata->flags & IEEE80211_SDATA_ALLMULTI);
+       sdata_promisc = !!(sdata->flags & IEEE80211_SDATA_PROMISC);
 
        if (allmulti != sdata_allmulti) {
                if (dev->flags & IFF_ALLMULTI)
index 015b3f879aa921f41c0d11a52a632c39be407852..16afd24d4f6b2bb392914e9fac06434ed205b54f 100644 (file)
@@ -2647,7 +2647,7 @@ void ieee80211_scan_completed(struct ieee80211_hw *hw)
        local->sta_scanning = 0;
 
        if (ieee80211_hw_config(local))
-               printk(KERN_DEBUG "%s: failed to restore operational"
+               printk(KERN_DEBUG "%s: failed to restore operational "
                       "channel after scan\n", dev->name);
 
 
index 428a9fcf57d62c90c6537490fd193d6342b47ee7..00f908d9275e3e69a92daf1cc4d6741015d051d5 100644 (file)
@@ -997,7 +997,7 @@ ieee80211_rx_h_drop_unencrypted(struct ieee80211_txrx_data *rx)
        if (unlikely(!(rx->fc & IEEE80211_FCTL_PROTECTED) &&
                     (rx->fc & IEEE80211_FCTL_FTYPE) == IEEE80211_FTYPE_DATA &&
                     (rx->fc & IEEE80211_FCTL_STYPE) != IEEE80211_STYPE_NULLFUNC &&
-                    rx->sdata->drop_unencrypted &&
+                    (rx->key || rx->sdata->drop_unencrypted) &&
                     (rx->sdata->eapol == 0 || !ieee80211_is_eapol(rx->skb)))) {
                if (net_ratelimit())
                        printk(KERN_DEBUG "%s: RX non-WEP frame, but expected "
index 9bf0e1cc530ad5e9c8975d50cbca6cefddd673e3..b5f3413403bd27c0d2646f2b210bfc36123cc8c8 100644 (file)
@@ -265,7 +265,8 @@ int ieee80211_wep_decrypt(struct ieee80211_local *local, struct sk_buff *skb,
        if (ieee80211_wep_decrypt_data(local->wep_rx_tfm, rc4key, klen,
                                       skb->data + hdrlen + WEP_IV_LEN,
                                       len)) {
-               printk(KERN_DEBUG "WEP decrypt failed (ICV)\n");
+               if (net_ratelimit())
+                       printk(KERN_DEBUG "WEP decrypt failed (ICV)\n");
                ret = -1;
        }
 
index 856793e8db7ace795fd543efaebd4932df388228..0621ca7de3b0e24b924a108aa124e069d87379ac 100644 (file)
@@ -86,11 +86,6 @@ checkentry(const char *tablename,
 {
        const struct xt_connmark_target_info *matchinfo = targinfo;
 
-       if (nf_ct_l3proto_try_module_get(target->family) < 0) {
-               printk(KERN_WARNING "can't load conntrack support for "
-                                   "proto=%d\n", target->family);
-               return false;
-       }
        if (matchinfo->mode == XT_CONNMARK_RESTORE) {
                if (strcmp(tablename, "mangle") != 0) {
                        printk(KERN_WARNING "CONNMARK: restore can only be "
@@ -103,6 +98,11 @@ checkentry(const char *tablename,
                printk(KERN_WARNING "CONNMARK: Only supports 32bit mark\n");
                return false;
        }
+       if (nf_ct_l3proto_try_module_get(target->family) < 0) {
+               printk(KERN_WARNING "can't load conntrack support for "
+                                   "proto=%d\n", target->family);
+               return false;
+       }
        return true;
 }
 
index 021b5c8d20e29a294b6df311850ced35c0743933..d8feba9bdb489dfba98f3ab4fb742bbc204004ea 100644 (file)
@@ -90,11 +90,6 @@ static bool checkentry(const char *tablename, const void *entry,
 {
        const struct xt_connsecmark_target_info *info = targinfo;
 
-       if (nf_ct_l3proto_try_module_get(target->family) < 0) {
-               printk(KERN_WARNING "can't load conntrack support for "
-                                   "proto=%d\n", target->family);
-               return false;
-       }
        switch (info->mode) {
        case CONNSECMARK_SAVE:
        case CONNSECMARK_RESTORE:
@@ -105,6 +100,11 @@ static bool checkentry(const char *tablename, const void *entry,
                return false;
        }
 
+       if (nf_ct_l3proto_try_module_get(target->family) < 0) {
+               printk(KERN_WARNING "can't load conntrack support for "
+                                   "proto=%d\n", target->family);
+               return false;
+       }
        return true;
 }
 
index 07435a602b11fecb9be29e930d65462c46eff32b..8e76d1f52fbe3079cf574e41b9750d2b77d2f264 100644 (file)
@@ -174,10 +174,8 @@ xt_tcpmss_target6(struct sk_buff *skb,
 
        nexthdr = ipv6h->nexthdr;
        tcphoff = ipv6_skip_exthdr(skb, sizeof(*ipv6h), &nexthdr);
-       if (tcphoff < 0) {
-               WARN_ON(1);
+       if (tcphoff < 0)
                return NF_DROP;
-       }
        ret = tcpmss_mangle_packet(skb, targinfo, tcphoff,
                                   sizeof(*ipv6h) + sizeof(struct tcphdr));
        if (ret < 0)
index 73d60a307129110de0aec93b57c6fdacd76d1b88..4469a7be006c270c4be87700cdf7364aa0a5d765 100644 (file)
@@ -60,11 +60,7 @@ static void rfkill_led_trigger(struct rfkill *rfkill,
 static int rfkill_toggle_radio(struct rfkill *rfkill,
                                enum rfkill_state state)
 {
-       int retval;
-
-       retval = mutex_lock_interruptible(&rfkill->mutex);
-       if (retval)
-               return retval;
+       int retval = 0;
 
        if (state != rfkill->state) {
                retval = rfkill->toggle_radio(rfkill->data, state);
@@ -74,7 +70,6 @@ static int rfkill_toggle_radio(struct rfkill *rfkill,
                }
        }
 
-       mutex_unlock(&rfkill->mutex);
        return retval;
 }
 
@@ -158,12 +153,13 @@ static ssize_t rfkill_state_store(struct device *dev,
        if (!capable(CAP_NET_ADMIN))
                return -EPERM;
 
+       if (mutex_lock_interruptible(&rfkill->mutex))
+               return -ERESTARTSYS;
        error = rfkill_toggle_radio(rfkill,
                        state ? RFKILL_STATE_ON : RFKILL_STATE_OFF);
-       if (error)
-               return error;
+       mutex_unlock(&rfkill->mutex);
 
-       return count;
+       return error ? error : count;
 }
 
 static ssize_t rfkill_claim_show(struct device *dev,
index 1b6741f1d746c547fce948d799ec9298a9bf7b65..12cfcf09556ba25a22185b99a25060a24548312e 100644 (file)
@@ -55,13 +55,13 @@ static int rose_header(struct sk_buff *skb, struct net_device *dev,
 
 static int rose_rebuild_header(struct sk_buff *skb)
 {
+#ifdef CONFIG_INET
        struct net_device *dev = skb->dev;
        struct net_device_stats *stats = netdev_priv(dev);
        unsigned char *bp = (unsigned char *)skb->data;
        struct sk_buff *skbn;
        unsigned int len;
 
-#ifdef CONFIG_INET
        if (arp_find(bp + 7, skb)) {
                return 1;
        }
index e662f1d076641ccab1fe09814b547483ec29cdfb..0d3103c4f11c64e6e61c9642fa4b33b98fdd7c24 100644 (file)
@@ -5,6 +5,7 @@
 config AF_RXRPC
        tristate "RxRPC session sockets"
        depends on INET && EXPERIMENTAL
+       select CRYPTO
        select KEYS
        help
          Say Y or M here to include support for RxRPC session sockets (just
index e09a95aa68ff7acf6cd98cf41947419a51c9f2d4..8e69d6993833be8c1aa9ceaaab8cdacd11b1248f 100644 (file)
@@ -1021,6 +1021,7 @@ static int rxkad_verify_response(struct rxrpc_connection *conn,
 
        abort_code = RXKADINCONSISTENCY;
        if (version != RXKAD_VERSION)
+               goto protocol_error;
 
        abort_code = RXKADTICKETLEN;
        if (ticket_len < 4 || ticket_len > MAXKRB5TICKETLEN)
index 8210f549c4929914f29fe07f4d81809bbdb41a24..5390bc792159c7a4fdc190308f74a0c2fe9add62 100644 (file)
@@ -6,9 +6,9 @@ menuconfig IP_SCTP
        tristate "The SCTP Protocol (EXPERIMENTAL)"
        depends on INET && EXPERIMENTAL
        depends on IPV6 || IPV6=n
-       select CRYPTO if SCTP_HMAC_SHA1 || SCTP_HMAC_MD5
-       select CRYPTO_HMAC if SCTP_HMAC_SHA1 || SCTP_HMAC_MD5
-       select CRYPTO_SHA1 if SCTP_HMAC_SHA1
+       select CRYPTO
+       select CRYPTO_HMAC
+       select CRYPTO_SHA1
        select CRYPTO_MD5 if SCTP_HMAC_MD5
        ---help---
          Stream Control Transmission Protocol
index 6d5fa6bb371b0ce2d85a77093092ac440d93684a..97e6ebd145001e9b642fcf59d882714fa814e53e 100644 (file)
@@ -54,11 +54,13 @@ static struct sctp_hmac sctp_hmac_list[SCTP_AUTH_NUM_HMACS] = {
                /* id 2 is reserved as well */
                .hmac_id = SCTP_AUTH_HMAC_ID_RESERVED_2,
        },
+#if defined (CONFIG_CRYPTO_SHA256) || defined (CONFIG_CRYPTO_SHA256_MODULE)
        {
                .hmac_id = SCTP_AUTH_HMAC_ID_SHA256,
                .hmac_name="hmac(sha256)",
                .hmac_len = SCTP_SHA256_SIG_SIZE,
        }
+#endif
 };
 
 
@@ -631,7 +633,7 @@ static int __sctp_auth_cid(sctp_cid_t chunk, struct sctp_chunks_param *param)
        int found = 0;
        int i;
 
-       if (!param)
+       if (!param || param->param_hdr.length == 0)
                return 0;
 
        len = ntohs(param->param_hdr.length) - sizeof(sctp_paramhdr_t);
index cae95af9a8cc147f2652c7b2a3c6c80880fd0f7a..6a7d01091f0c5533345a162db38ef61e3bab228b 100644 (file)
@@ -105,6 +105,32 @@ out:
        return error;
 }
 
+/* Exactly duplicate the address lists.  This is necessary when doing
+ * peer-offs and accepts.  We don't want to put all the current system
+ * addresses into the endpoint.  That's useless.  But we do want duplicat
+ * the list of bound addresses that the older endpoint used.
+ */
+int sctp_bind_addr_dup(struct sctp_bind_addr *dest,
+                       const struct sctp_bind_addr *src,
+                       gfp_t gfp)
+{
+       struct sctp_sockaddr_entry *addr;
+       struct list_head *pos;
+       int error = 0;
+
+       /* All addresses share the same port.  */
+       dest->port = src->port;
+
+       list_for_each(pos, &src->address_list) {
+               addr = list_entry(pos, struct sctp_sockaddr_entry, list);
+               error = sctp_add_bind_addr(dest, &addr->a, 1, gfp);
+               if (error < 0)
+                       break;
+       }
+
+       return error;
+}
+
 /* Initialize the SCTP_bind_addr structure for either an endpoint or
  * an association.
  */
index 5a9783c38de160c40d66894dbefab7b6e4c76f1c..f4876291bb5e6279cdfbb324474682e673305573 100644 (file)
@@ -77,6 +77,8 @@ static int sctp_process_param(struct sctp_association *asoc,
                              union sctp_params param,
                              const union sctp_addr *peer_addr,
                              gfp_t gfp);
+static void *sctp_addto_param(struct sctp_chunk *chunk, int len,
+                             const void *data);
 
 /* What was the inbound interface for this chunk? */
 int sctp_chunk_iif(const struct sctp_chunk *chunk)
@@ -207,11 +209,7 @@ struct sctp_chunk *sctp_make_init(const struct sctp_association *asoc,
 
        chunksize = sizeof(init) + addrs_len + SCTP_SAT_LEN(num_types);
        chunksize += sizeof(ecap_param);
-       if (sctp_prsctp_enable) {
-               chunksize += sizeof(prsctp_param);
-               extensions[num_ext] = SCTP_CID_FWD_TSN;
-               num_ext += 1;
-       }
+
        /* ADDIP: Section 4.2.7:
         *  An implementation supporting this extension [ADDIP] MUST list
         *  the ASCONF,the ASCONF-ACK, and the AUTH  chunks in its INIT and
@@ -243,7 +241,7 @@ struct sctp_chunk *sctp_make_init(const struct sctp_association *asoc,
                if (auth_chunks->length)
                        chunksize += ntohs(auth_chunks->length);
                else
-                       auth_hmacs = NULL;
+                       auth_chunks = NULL;
 
                extensions[num_ext] = SCTP_CID_AUTH;
                num_ext += 1;
@@ -297,7 +295,7 @@ struct sctp_chunk *sctp_make_init(const struct sctp_association *asoc,
                            htons(sizeof(sctp_supported_ext_param_t) + num_ext);
                sctp_addto_chunk(retval, sizeof(sctp_supported_ext_param_t),
                                &ext_param);
-               sctp_addto_chunk(retval, num_ext, extensions);
+               sctp_addto_param(retval, num_ext, extensions);
        }
 
        if (sctp_prsctp_enable)
@@ -371,20 +369,12 @@ struct sctp_chunk *sctp_make_init_ack(const struct sctp_association *asoc,
        if (asoc->peer.ecn_capable)
                chunksize += sizeof(ecap_param);
 
-       /* Tell peer that we'll do PR-SCTP only if peer advertised.  */
-       if (asoc->peer.prsctp_capable) {
-               chunksize += sizeof(prsctp_param);
-               extensions[num_ext] = SCTP_CID_FWD_TSN;
-               num_ext += 1;
-       }
-
        if (sctp_addip_enable) {
                extensions[num_ext] = SCTP_CID_ASCONF;
                extensions[num_ext+1] = SCTP_CID_ASCONF_ACK;
                num_ext += 2;
        }
 
-       chunksize += sizeof(ext_param) + num_ext;
        chunksize += sizeof(aiparam);
 
        if (asoc->peer.auth_capable) {
@@ -407,6 +397,9 @@ struct sctp_chunk *sctp_make_init_ack(const struct sctp_association *asoc,
                num_ext += 1;
        }
 
+       if (num_ext)
+               chunksize += sizeof(sctp_supported_ext_param_t) + num_ext;
+
        /* Now allocate and fill out the chunk.  */
        retval = sctp_make_chunk(asoc, SCTP_CID_INIT_ACK, 0, chunksize);
        if (!retval)
@@ -428,7 +421,7 @@ struct sctp_chunk *sctp_make_init_ack(const struct sctp_association *asoc,
                            htons(sizeof(sctp_supported_ext_param_t) + num_ext);
                sctp_addto_chunk(retval, sizeof(sctp_supported_ext_param_t),
                                 &ext_param);
-               sctp_addto_chunk(retval, num_ext, extensions);
+               sctp_addto_param(retval, num_ext, extensions);
        }
        if (asoc->peer.prsctp_capable)
                sctp_addto_chunk(retval, sizeof(prsctp_param), &prsctp_param);
index 5ebbe808d801030341fbe3bd3cf7ff49b1c2d6f2..5fb84778846d9b2e353a2346e1e6c4f458eaea0e 100644 (file)
@@ -959,7 +959,7 @@ sctp_disposition_t sctp_sf_sendbeat_8_3(const struct sctp_endpoint *ep,
 {
        struct sctp_transport *transport = (struct sctp_transport *) arg;
 
-       if (asoc->overall_error_count >= asoc->max_retrans) {
+       if (asoc->overall_error_count > asoc->max_retrans) {
                sctp_add_cmd_sf(commands, SCTP_CMD_SET_SK_ERR,
                                SCTP_ERROR(ETIMEDOUT));
                /* CMD_ASSOC_FAILED calls CMD_DELETE_TCB. */
@@ -1146,7 +1146,7 @@ sctp_disposition_t sctp_sf_backbeat_8_3(const struct sctp_endpoint *ep,
        /* Check if the timestamp looks valid.  */
        if (time_after(hbinfo->sent_at, jiffies) ||
            time_after(jiffies, hbinfo->sent_at + max_interval)) {
-               SCTP_DEBUG_PRINTK("%s: HEARTBEAT ACK with invalid timestamp"
+               SCTP_DEBUG_PRINTK("%s: HEARTBEAT ACK with invalid timestamp "
                                  "received for transport: %p\n",
                                   __FUNCTION__, link);
                return SCTP_DISPOSITION_DISCARD;
index ff8bc95670edbfa6af9ece6d74d2dc656a9c3cba..ea9649ca0b2a0be135247b7fee9cfba251c7ec15 100644 (file)
@@ -6325,7 +6325,7 @@ static void sctp_sock_migrate(struct sock *oldsk, struct sock *newsk,
        struct sctp_endpoint *newep = newsp->ep;
        struct sk_buff *skb, *tmp;
        struct sctp_ulpevent *event;
-       int flags = 0;
+       struct sctp_bind_hashbucket *head;
 
        /* Migrate socket buffer sizes and all the socket level options to the
         * new socket.
@@ -6342,23 +6342,21 @@ static void sctp_sock_migrate(struct sock *oldsk, struct sock *newsk,
        newsp->hmac = NULL;
 
        /* Hook this new socket in to the bind_hash list. */
+       head = &sctp_port_hashtable[sctp_phashfn(inet_sk(oldsk)->num)];
+       sctp_local_bh_disable();
+       sctp_spin_lock(&head->lock);
        pp = sctp_sk(oldsk)->bind_hash;
        sk_add_bind_node(newsk, &pp->owner);
        sctp_sk(newsk)->bind_hash = pp;
        inet_sk(newsk)->num = inet_sk(oldsk)->num;
+       sctp_spin_unlock(&head->lock);
+       sctp_local_bh_enable();
 
        /* Copy the bind_addr list from the original endpoint to the new
         * endpoint so that we can handle restarts properly
         */
-       if (PF_INET6 == assoc->base.sk->sk_family)
-               flags = SCTP_ADDR6_ALLOWED;
-       if (assoc->peer.ipv4_address)
-               flags |= SCTP_ADDR4_PEERSUPP;
-       if (assoc->peer.ipv6_address)
-               flags |= SCTP_ADDR6_PEERSUPP;
-       sctp_bind_addr_copy(&newsp->ep->base.bind_addr,
-                            &oldsp->ep->base.bind_addr,
-                            SCTP_SCOPE_GLOBAL, GFP_KERNEL, flags);
+       sctp_bind_addr_dup(&newsp->ep->base.bind_addr,
+                               &oldsp->ep->base.bind_addr, GFP_KERNEL);
 
        /* Move any messages in the old socket's receive queue that are for the
         * peeled off association to the new socket's receive queue.
index 53995af9ca4b0f3b64708f59025528172ee80d4b..a6e57d1c2eb6210c86b174ac3b5eb2a132f23cbe 100644 (file)
@@ -540,7 +540,7 @@ gss_pipe_downcall(struct file *filp, const char __user *src, size_t mlen)
        p = gss_fill_context(p, end, ctx, gss_msg->auth->mech);
        if (IS_ERR(p)) {
                err = PTR_ERR(p);
-               gss_msg->msg.errno = (err == -EACCES) ? -EACCES : -EAGAIN;
+               gss_msg->msg.errno = (err == -EAGAIN) ? -EAGAIN : -EACCES;
                goto err_release_msg;
        }
        gss_msg->ctx = gss_get_ctx(ctx);
@@ -967,7 +967,7 @@ gss_validate(struct rpc_task *task, __be32 *p)
        if (maj_stat == GSS_S_CONTEXT_EXPIRED)
                clear_bit(RPCAUTH_CRED_UPTODATE, &cred->cr_flags);
        if (maj_stat) {
-               dprintk("RPC: %5u gss_validate: gss_verify_mic returned"
+               dprintk("RPC: %5u gss_validate: gss_verify_mic returned "
                                "error 0x%08x\n", task->tk_pid, maj_stat);
                goto out_bad;
        }
index 9843eacef11dc47bd8fdf11b6bf1a492ac70cd16..60c3dba545d7c8287cc17a00251e7fe43dad9e27 100644 (file)
@@ -147,13 +147,17 @@ gss_import_sec_context_kerberos(const void *p,
        p = simple_get_bytes(p, end, &tmp, sizeof(tmp));
        if (IS_ERR(p))
                goto out_err_free_ctx;
-       if (tmp != SGN_ALG_DES_MAC_MD5)
+       if (tmp != SGN_ALG_DES_MAC_MD5) {
+               p = ERR_PTR(-ENOSYS);
                goto out_err_free_ctx;
+       }
        p = simple_get_bytes(p, end, &tmp, sizeof(tmp));
        if (IS_ERR(p))
                goto out_err_free_ctx;
-       if (tmp != SEAL_ALG_DES)
+       if (tmp != SEAL_ALG_DES) {
+               p = ERR_PTR(-ENOSYS);
                goto out_err_free_ctx;
+       }
        p = simple_get_bytes(p, end, &ctx->endtime, sizeof(ctx->endtime));
        if (IS_ERR(p))
                goto out_err_free_ctx;
index 1c6eda5077c16683051a847fe0892dd253eb884e..dedcbd6108f4272e76c3cf2f7fac4c82d85e856f 100644 (file)
@@ -83,6 +83,7 @@ gss_get_mic_kerberos(struct gss_ctx *gss_ctx, struct xdr_buf *text,
        u32                     seq_send;
 
        dprintk("RPC:       gss_krb5_seal\n");
+       BUG_ON(ctx == NULL);
 
        now = get_seconds();
 
index 18f0a8dcc095d9506699f553c7630aaac363cd54..c59f3ca2b41b02627a017354f35e319366571633 100644 (file)
@@ -280,7 +280,7 @@ rpc_pipe_poll(struct file *filp, struct poll_table_struct *wait)
        mask = POLLOUT | POLLWRNORM;
        if (rpci->ops == NULL)
                mask |= POLLERR | POLLHUP;
-       if (!list_empty(&rpci->pipe))
+       if (filp->private_data || !list_empty(&rpci->pipe))
                mask |= POLLIN | POLLRDNORM;
        return mask;
 }
index 282a9a2ec90c6e5f6c78b1c8b0e6cfe95e04461c..cd641c8634f044c6bb580c2d725bdb908e97849d 100644 (file)
@@ -62,7 +62,7 @@ static inline void    do_xprt_reserve(struct rpc_task *);
 static void    xprt_connect_status(struct rpc_task *task);
 static int      __xprt_get_cong(struct rpc_xprt *, struct rpc_task *);
 
-static spinlock_t xprt_list_lock = SPIN_LOCK_UNLOCKED;
+static DEFINE_SPINLOCK(xprt_list_lock);
 static LIST_HEAD(xprt_list);
 
 /*
index 1afeb3eb8e4c2d2e6080f3d6e47853d1b8ff8e41..6f2112dd9f786953c24eadc707fb208a946da4f0 100644 (file)
@@ -89,7 +89,7 @@ static struct ctl_table_header *sunrpc_table_header;
 
 static ctl_table xr_tunables_table[] = {
        {
-               .ctl_name       = CTL_SLOTTABLE_RDMA,
+               .ctl_name       = CTL_UNNUMBERED,
                .procname       = "rdma_slot_table_entries",
                .data           = &xprt_rdma_slot_table_entries,
                .maxlen         = sizeof(unsigned int),
@@ -100,7 +100,7 @@ static ctl_table xr_tunables_table[] = {
                .extra2         = &max_slot_table_size
        },
        {
-               .ctl_name       = CTL_RDMA_MAXINLINEREAD,
+               .ctl_name       = CTL_UNNUMBERED,
                .procname       = "rdma_max_inline_read",
                .data           = &xprt_rdma_max_inline_read,
                .maxlen         = sizeof(unsigned int),
@@ -109,7 +109,7 @@ static ctl_table xr_tunables_table[] = {
                .strategy       = &sysctl_intvec,
        },
        {
-               .ctl_name       = CTL_RDMA_MAXINLINEWRITE,
+               .ctl_name       = CTL_UNNUMBERED,
                .procname       = "rdma_max_inline_write",
                .data           = &xprt_rdma_max_inline_write,
                .maxlen         = sizeof(unsigned int),
@@ -118,7 +118,7 @@ static ctl_table xr_tunables_table[] = {
                .strategy       = &sysctl_intvec,
        },
        {
-               .ctl_name       = CTL_RDMA_WRITEPADDING,
+               .ctl_name       = CTL_UNNUMBERED,
                .procname       = "rdma_inline_write_padding",
                .data           = &xprt_rdma_inline_write_padding,
                .maxlen         = sizeof(unsigned int),
@@ -129,7 +129,7 @@ static ctl_table xr_tunables_table[] = {
                .extra2         = &max_padding,
        },
        {
-               .ctl_name       = CTL_RDMA_MEMREG,
+               .ctl_name       = CTL_UNNUMBERED,
                .procname       = "rdma_memreg_strategy",
                .data           = &xprt_rdma_memreg_strategy,
                .maxlen         = sizeof(unsigned int),
index 02298f529dad3f4a068ed86d4cf00cbe8e352eaf..2f630a512ab753f7e2df18a42a2abb02f04893ba 100644 (file)
@@ -1828,7 +1828,7 @@ static struct rpc_xprt *xs_setup_xprt(struct xprt_create *args,
  * @args: rpc transport creation arguments
  *
  */
-struct rpc_xprt *xs_setup_udp(struct xprt_create *args)
+static struct rpc_xprt *xs_setup_udp(struct xprt_create *args)
 {
        struct sockaddr *addr = args->dstaddr;
        struct rpc_xprt *xprt;
@@ -1894,7 +1894,7 @@ struct rpc_xprt *xs_setup_udp(struct xprt_create *args)
  * @args: rpc transport creation arguments
  *
  */
-struct rpc_xprt *xs_setup_tcp(struct xprt_create *args)
+static struct rpc_xprt *xs_setup_tcp(struct xprt_create *args)
 {
        struct sockaddr *addr = args->dstaddr;
        struct rpc_xprt *xprt;
index e835da8fc09184f8e2dddcba9c471922af1b1165..060bba4567d2588d2ceafce255e75ee84aa55b27 100644 (file)
@@ -1637,8 +1637,15 @@ static int unix_dgram_recvmsg(struct kiocb *iocb, struct socket *sock,
        mutex_lock(&u->readlock);
 
        skb = skb_recv_datagram(sk, flags, noblock, &err);
-       if (!skb)
+       if (!skb) {
+               unix_state_lock(sk);
+               /* Signal EOF on disconnected non-blocking SEQPACKET socket. */
+               if (sk->sk_type == SOCK_SEQPACKET && err == -EAGAIN &&
+                   (sk->sk_shutdown & RCV_SHUTDOWN))
+                       err = 0;
+               unix_state_unlock(sk);
                goto out_unlock;
+       }
 
        wake_up_interruptible_sync(&u->peer_wait);
 
index 85e5f9dd0d8e757f03e69ac08966addff50bd163..47e80cc2077c23fd207ce01478f8761f4c0baa05 100644 (file)
@@ -1094,7 +1094,7 @@ int wext_handle_ioctl(struct net *net, struct ifreq *ifr, unsigned int cmd,
        rtnl_lock();
        ret = wireless_process_ioctl(net, ifr, cmd);
        rtnl_unlock();
-       if (IW_IS_GET(cmd) && copy_to_user(arg, ifr, sizeof(struct ifreq)))
+       if (IW_IS_GET(cmd) && copy_to_user(arg, ifr, sizeof(struct iwreq)))
                return -EFAULT;
        return ret;
 }
index b702bd8a3893b7f2471df1c23df25a7105da70da..b91b16671c1e78842f3e6b1496e0ef880c636a66 100644 (file)
@@ -1318,8 +1318,9 @@ restart:
 
        if (sk && sk->sk_policy[XFRM_POLICY_OUT]) {
                policy = xfrm_sk_policy_lookup(sk, XFRM_POLICY_OUT, fl);
+               err = PTR_ERR(policy);
                if (IS_ERR(policy))
-                       return PTR_ERR(policy);
+                       goto dropdst;
        }
 
        if (!policy) {
@@ -1330,8 +1331,9 @@ restart:
 
                policy = flow_cache_lookup(fl, dst_orig->ops->family,
                                           dir, xfrm_policy_lookup);
+               err = PTR_ERR(policy);
                if (IS_ERR(policy))
-                       return PTR_ERR(policy);
+                       goto dropdst;
        }
 
        if (!policy)
@@ -1344,6 +1346,7 @@ restart:
        xfrm_nr += pols[0]->xfrm_nr;
 
        switch (policy->action) {
+       default:
        case XFRM_POLICY_BLOCK:
                /* Prohibit the flow */
                err = -EPERM;
@@ -1500,8 +1503,9 @@ restart:
        return 0;
 
 error:
-       dst_release(dst_orig);
        xfrm_pols_put(pols, npols);
+dropdst:
+       dst_release(dst_orig);
        *dst_p = NULL;
        return err;
 }
index 224b44e31a07b934091f79e42b85888ab143925f..cf43c49eab37f3c2abfee6c707fc1c24934662f0 100644 (file)
@@ -552,7 +552,7 @@ int __xfrm_state_delete(struct xfrm_state *x)
                 * The xfrm_state_alloc call gives a reference, and that
                 * is what we are dropping here.
                 */
-               __xfrm_state_put(x);
+               xfrm_state_put(x);
                err = 0;
        }
 
index d41588d101d01db756f5db3a1cd40d6e783883a9..e75dbdcb08a49674b846f2ce14b02598b2ba6b3e 100644 (file)
@@ -507,7 +507,6 @@ static int copy_to_user_state_extra(struct xfrm_state *x,
                                    struct xfrm_usersa_info *p,
                                    struct sk_buff *skb)
 {
-       spin_lock_bh(&x->lock);
        copy_to_user_state(x, p);
 
        if (x->coaddr)
@@ -515,7 +514,6 @@ static int copy_to_user_state_extra(struct xfrm_state *x,
 
        if (x->lastused)
                NLA_PUT_U64(skb, XFRMA_LASTUSED, x->lastused);
-       spin_unlock_bh(&x->lock);
 
        if (x->aalg)
                NLA_PUT(skb, XFRMA_ALG_AUTH, alg_len(x->aalg), x->aalg);
index cbb42580a81d964a69efe153749d05b4d2ac2f27..579f50fa838c507fa120c46fb0546ba544ba90ea 100755 (executable)
@@ -9,7 +9,7 @@ use strict;
 my $P = $0;
 $P =~ s@.*/@@g;
 
-my $V = '0.11';
+my $V = '0.12';
 
 use Getopt::Long qw(:config no_auto_abbrev);
 
@@ -19,8 +19,11 @@ my $chk_signoff = 1;
 my $chk_patch = 1;
 my $tst_type = 0;
 my $emacs = 0;
+my $terse = 0;
 my $file = 0;
 my $check = 0;
+my $summary = 1;
+my $mailback = 0;
 my $root;
 GetOptions(
        'q|quiet+'      => \$quiet,
@@ -29,10 +32,13 @@ GetOptions(
        'patch!'        => \$chk_patch,
        'test-type!'    => \$tst_type,
        'emacs!'        => \$emacs,
+       'terse!'        => \$terse,
        'file!'         => \$file,
        'subjective!'   => \$check,
        'strict!'       => \$check,
        'root=s'        => \$root,
+       'summary!'      => \$summary,
+       'mailback!'     => \$mailback,
 ) or exit;
 
 my $exit = 0;
@@ -42,6 +48,7 @@ if ($#ARGV < 0) {
        print "version: $V\n";
        print "options: -q           => quiet\n";
        print "         --no-tree    => run without a kernel tree\n";
+       print "         --terse      => one line per report\n";
        print "         --emacs      => emacs compile window format\n";
        print "         --file       => check a source file\n";
        print "         --strict     => enable more subjective tests\n";
@@ -49,6 +56,11 @@ if ($#ARGV < 0) {
        exit(1);
 }
 
+if ($terse) {
+       $emacs = 1;
+       $quiet++;
+}
+
 if ($tree) {
        if (defined $root) {
                if (!top_of_kernel_tree($root)) {
@@ -90,41 +102,6 @@ our $Attribute      = qr{
                        __(?:mem|cpu|dev|)(?:initdata|init)
                  }x;
 our $Inline    = qr{inline|__always_inline|noinline};
-our $NonptrType        = qr{
-                       \b
-                       (?:const\s+)?
-                       (?:unsigned\s+)?
-                       (?:
-                               void|
-                               char|
-                               short|
-                               int|
-                               long|
-                               unsigned|
-                               float|
-                               double|
-                               bool|
-                               long\s+int|
-                               long\s+long|
-                               long\s+long\s+int|
-                               (?:__)?(?:u|s|be|le)(?:8|16|32|64)|
-                               struct\s+$Ident|
-                               union\s+$Ident|
-                               enum\s+$Ident|
-                               ${Ident}_t|
-                               ${Ident}_handler|
-                               ${Ident}_handler_fn
-                       )
-                       (?:\s+$Sparse)*
-                       \b
-                 }x;
-
-our $Type      = qr{
-                       \b$NonptrType\b
-                       (?:\s*\*+\s*const|\s*\*+|(?:\s*\[\s*\])+)?
-                       (?:\s+$Sparse|\s+$Attribute)*
-                 }x;
-our $Declare   = qr{(?:$Storage\s+)?$Type};
 our $Member    = qr{->$Ident|\.$Ident|\[[^]]*\]};
 our $Lval      = qr{$Ident(?:$Member)*};
 
@@ -136,7 +113,50 @@ our $Operators     = qr{
                        &&|\|\||,|\^|\+\+|--|&|\||\+|-|\*|\/
                  }x;
 
-our $Bare = '';
+our $NonptrType;
+our $Type;
+our $Declare;
+
+our @typeList = (
+       qr{void},
+       qr{char},
+       qr{short},
+       qr{int},
+       qr{long},
+       qr{unsigned},
+       qr{float},
+       qr{double},
+       qr{bool},
+       qr{long\s+int},
+       qr{long\s+long},
+       qr{long\s+long\s+int},
+       qr{(?:__)?(?:u|s|be|le)(?:8|16|32|64)},
+       qr{struct\s+$Ident},
+       qr{union\s+$Ident},
+       qr{enum\s+$Ident},
+       qr{${Ident}_t},
+       qr{${Ident}_handler},
+       qr{${Ident}_handler_fn},
+);
+
+sub build_types {
+       my $all = "(?:  \n" . join("|\n  ", @typeList) . "\n)";
+       $NonptrType     = qr{
+                       \b
+                       (?:const\s+)?
+                       (?:unsigned\s+)?
+                       $all
+                       (?:\s+$Sparse|\s+const)*
+                       \b
+                 }x;
+       $Type   = qr{
+                       \b$NonptrType\b
+                       (?:\s*\*+\s*const|\s*\*+|(?:\s*\[\s*\])+)?
+                       (?:\s+$Sparse|\s+$Attribute)*
+                 }x;
+       $Declare        = qr{(?:$Storage\s+)?$Type};
+}
+build_types();
 
 $chk_signoff = 0 if ($file);
 
@@ -278,6 +298,81 @@ sub sanitise_line {
        return $res;
 }
 
+sub ctx_statement_block {
+       my ($linenr, $remain, $off) = @_;
+       my $line = $linenr - 1;
+       my $blk = '';
+       my $soff = $off;
+       my $coff = $off - 1;
+
+       my $type = '';
+       my $level = 0;
+       my $c;
+       my $len = 0;
+       while (1) {
+               #warn "CSB: blk<$blk>\n";
+               # If we are about to drop off the end, pull in more
+               # context.
+               if ($off >= $len) {
+                       for (; $remain > 0; $line++) {
+                               next if ($rawlines[$line] =~ /^-/);
+                               $remain--;
+                               $blk .= sanitise_line($rawlines[$line]) . "\n";
+                               $len = length($blk);
+                               $line++;
+                               last;
+                       }
+                       # Bail if there is no further context.
+                       #warn "CSB: blk<$blk> off<$off> len<$len>\n";
+                       if ($off == $len) {
+                               last;
+                       }
+               }
+               $c = substr($blk, $off, 1);
+
+               #warn "CSB: c<$c> type<$type> level<$level>\n";
+               # Statement ends at the ';' or a close '}' at the
+               # outermost level.
+               if ($level == 0 && $c eq ';') {
+                       last;
+               }
+
+               if (($type eq '' || $type eq '(') && $c eq '(') {
+                       $level++;
+                       $type = '(';
+               }
+               if ($type eq '(' && $c eq ')') {
+                       $level--;
+                       $type = ($level != 0)? '(' : '';
+
+                       if ($level == 0 && $coff < $soff) {
+                               $coff = $off;
+                       }
+               }
+               if (($type eq '' || $type eq '{') && $c eq '{') {
+                       $level++;
+                       $type = '{';
+               }
+               if ($type eq '{' && $c eq '}') {
+                       $level--;
+                       $type = ($level != 0)? '{' : '';
+
+                       if ($level == 0) {
+                               last;
+                       }
+               }
+               $off++;
+       }
+
+       my $statement = substr($blk, $soff, $off - $soff + 1);
+       my $condition = substr($blk, $soff, $coff - $soff + 1);
+
+       #warn "STATEMENT<$statement>\n";
+       #warn "CONDITION<$condition>\n";
+
+       return ($statement, $condition);
+}
+
 sub ctx_block_get {
        my ($linenr, $remain, $outer, $open, $close, $off) = @_;
        my $line;
@@ -421,9 +516,6 @@ sub annotate_values {
        my $paren = 0;
        my @paren_type;
 
-       # Include any user defined types we may have found as we went.
-       my $type_match = "(?:$Type$Bare)";
-
        while (length($cur)) {
                print " <$type> " if ($debug);
                if ($cur =~ /^(\s+)/o) {
@@ -433,7 +525,7 @@ sub annotate_values {
                                $type = 'N';
                        }
 
-               } elsif ($cur =~ /^($type_match)/) {
+               } elsif ($cur =~ /^($Type)/) {
                        print "DECLARE($1)\n" if ($debug);
                        $type = 'T';
 
@@ -457,7 +549,7 @@ sub annotate_values {
                        }
                        $type = 'N';
 
-               } elsif ($cur =~ /^(if|while|typeof)\b/o) {
+               } elsif ($cur =~ /^(if|while|typeof|for)\b/o) {
                        print "COND($1)\n" if ($debug);
                        $paren_type[$paren] = 'N';
                        $type = 'N';
@@ -515,11 +607,30 @@ sub annotate_values {
        return $res;
 }
 
+sub possible {
+       my ($possible) = @_;
+
+       #print "CHECK<$possible>\n";
+       if ($possible !~ /^(?:$Storage|$Type|DEFINE_\S+)$/ &&
+           $possible ne 'goto' && $possible ne 'return' &&
+           $possible ne 'struct' && $possible ne 'enum' &&
+           $possible ne 'case' && $possible ne 'else' &&
+           $possible ne 'typedef') {
+               #print "POSSIBLE<$possible>\n";
+               push(@typeList, $possible);
+               build_types();
+       }
+}
+
 my $prefix = '';
 
 my @report = ();
 sub report {
-       push(@report, $prefix . $_[0]);
+       my $line = $prefix . $_[0];
+
+       $line = (split('\n', $line))[0] . "\n" if ($terse);
+
+       push(@report, $line);
 }
 sub report_dump {
        @report;
@@ -574,9 +685,6 @@ sub process {
 
        my $prev_values = 'N';
 
-       # Possible bare types.
-       my @bare = ();
-
        # Pre-scan the patch looking for any __setup documentation.
        my @setup_docs = ();
        my $setup_docs = 0;
@@ -631,21 +739,35 @@ sub process {
                        $realline++;
                        $realcnt-- if ($realcnt != 0);
 
-                       # track any sort of multi-line comment.  Obviously if
-                       # the added text or context do not include the whole
-                       # comment we will not see it. Such is life.
-                       #
+                       # Guestimate if this is a continuing comment.  Run
+                       # the context looking for a comment "edge".  If this
+                       # edge is a close comment then we must be in a comment
+                       # at context start.
+                       if ($linenr == $first_line) {
+                               my $edge;
+                               for (my $ln = $first_line; $ln < ($linenr + $realcnt); $ln++) {
+                                       ($edge) = ($lines[$ln - 1] =~ m@(/\*|\*/)@);
+                                       last if (defined $edge);
+                               }
+                               if (defined $edge && $edge eq '*/') {
+                                       $in_comment = 1;
+                               }
+                       }
+
                        # Guestimate if this is a continuing comment.  If this
                        # is the start of a diff block and this line starts
                        # ' *' then it is very likely a comment.
                        if ($linenr == $first_line and $line =~ m@^.\s*\*@) {
                                $in_comment = 1;
                        }
-                       if ($line =~ m@/\*@) {
-                               $in_comment = 1;
-                       }
-                       if ($line =~ m@\*/@) {
-                               $in_comment = 0;
+
+                       # Find the last comment edge on _this_ line.
+                       while (($line =~ m@(/\*|\*/)@g)) {
+                               if ($1 eq '/*') {
+                                       $in_comment = 1;
+                               } else {
+                                       $in_comment = 0;
+                               }
                        }
 
                        # Measure the line length and indent.
@@ -687,7 +809,7 @@ sub process {
                }
 
 # Check for wrappage within a valid hunk of the file
-               if ($realcnt != 0 && $line !~ m{^(?:\+|-| |$)}) {
+               if ($realcnt != 0 && $line !~ m{^(?:\+|-| |\\ No newline|$)}) {
                        ERROR("patch seems to be corrupt (line wrapped?)\n" .
                                $herecurr) if (!$emitted_corrupt++);
                }
@@ -727,6 +849,11 @@ sub process {
                        WARN("line over 80 characters\n" . $herecurr);
                }
 
+# check for adding lines without a newline.
+               if ($line =~ /^\+/ && defined $lines[$linenr] && $lines[$linenr] =~ /^\\ No newline at end of file/) {
+                       WARN("adding a line without newline at end of file\n" . $herecurr);
+               }
+
 # check we are in a valid source file *.[hc] if not then ignore this hunk
                next if ($realfile !~ /\.[hc]$/);
 
@@ -752,30 +879,41 @@ sub process {
 
 # Check for potential 'bare' types
                if ($realcnt &&
-                   $line !~ /^.\s*(?:$Storage\s+)?(?:$Inline\s+)?$Type\b/ &&
                    $line !~ /$Ident:\s*$/ &&
-                   $line !~ /^.\s*$Ident\s*\(/ &&
-                    # definitions in global scope can only start with types
-                   ($line =~ /^.(?:$Storage\s+)?(?:$Inline\s+)?($Ident)\b/ ||
-                    # declarations always start with types
-                    $line =~ /^.\s*(?:$Storage\s+)?($Ident)\b\s*\**\s*$Ident\s*(?:;|=)/) ||
-                    # any (foo ... *) is a pointer cast, and foo is a type
-                    $line =~ /\(($Ident)(?:\s+$Sparse)*\s*\*+\s*\)/) {
-                       my $possible = $1;
-                       if ($possible !~ /^(?:$Storage|$Type|DEFINE_\S+)$/ &&
-                           $possible ne 'goto' && $possible ne 'return' &&
-                           $possible ne 'struct' && $possible ne 'enum' &&
-                           $possible ne 'case' && $possible ne 'else' &&
-                           $possible ne 'typedef') {
-                               #print "POSSIBLE<$possible>\n";
-                               push(@bare, $possible);
-                               my $bare = join("|", @bare);
-                               $Bare   = '|' . qr{
-                                               \b(?:$bare)\b
-                                               (?:\s*\*+\s*const|\s*\*+|(?:\s*\[\s*\])+)?
-                                               (?:\s+$Sparse)*
-                                         }x;
+                   ($line =~ /^.\s*$Ident\s*\(\*+\s*$Ident\)\s*\(/ ||
+                    $line !~ /^.\s*$Ident\s*\(/)) {
+                       # definitions in global scope can only start with types
+                       if ($line =~ /^.(?:$Storage\s+)?(?:$Inline\s+)?(?:const\s+)?($Ident)\b/) {
+                               possible($1);
+
+                       # declarations always start with types
+                       } elsif ($prev_values eq 'N' && $line =~ /^.\s*(?:$Storage\s+)?($Ident)\b\s*\**\s*$Ident\s*(?:;|=)/) {
+                               possible($1);
+
+                       # any (foo ... *) is a pointer cast, and foo is a type
+                       } elsif ($line =~ /\(($Ident)(?:\s+$Sparse)*\s*\*+\s*\)/) {
+                               possible($1);
+                       }
+
+                       # Check for any sort of function declaration.
+                       # int foo(something bar, other baz);
+                       # void (*store_gdt)(x86_descr_ptr *);
+                       if ($prev_values eq 'N' && $line =~ /^(.(?:(?:$Storage|$Inline)\s*)*\s*$Type\s*(?:\b$Ident|\(\*\s*$Ident\))\s*)\(/) {
+                               my ($name_len) = length($1);
+                               my ($level, @ctx) = ctx_statement_level($linenr, $realcnt, $name_len);
+                               my $ctx = join("\n", @ctx);
+
+                               $ctx =~ s/\n.//;
+                               substr($ctx, 0, $name_len + 1) = '';
+                               $ctx =~ s/\)[^\)]*$//;
+                               for my $arg (split(/\s*,\s*/, $ctx)) {
+                                       if ($arg =~ /^(?:const\s+)?($Ident)(?:\s+$Sparse)*\s*\**\s*(:?\b$Ident)?$/ || $arg =~ /^($Ident)$/) {
+
+                                               possible($1);
+                                       }
+                               }
                        }
+
                }
 
 #
@@ -935,6 +1073,10 @@ sub process {
 #                      $clean = 0;
 #              }
 
+               if ($line =~ /\bLINUX_VERSION_CODE\b/) {
+                       WARN("LINUX_VERSION_CODE should be avoided, code should be for the version to which it is merged" . $herecurr);
+               }
+
 # printk should use KERN_* levels.  Note that follow on printk's on the
 # same line do not need a level, so we use the current block context
 # to try and find and validate the current printk.  In summary the current
@@ -965,6 +1107,12 @@ sub process {
                        ERROR("open brace '{' following function declarations go on the next line\n" . $herecurr);
                }
 
+# open braces for enum, union and struct go on the same line.
+               if ($line =~ /^.\s*{/ &&
+                   $prevline =~ /^.\s*(?:typedef\s+)?(enum|union|struct)(?:\s+$Ident)?\s*$/) {
+                       ERROR("open brace '{' following $1 go on the same line\n" . $hereprev);
+               }
+
 # check for spaces between functions and their parentheses.
                while ($line =~ /($Ident)\s+\(/g) {
                        if ($1 !~ /^(?:if|for|while|switch|return|volatile|__volatile__|__attribute__|format|__extension__|Copyright|case)$/ &&
@@ -1172,9 +1320,27 @@ sub process {
                }
 
 # Check for illegal assignment in if conditional.
-               if ($line=~/\bif\s*\(.*[^<>!=]=[^=]/) {
-                       #next if ($line=~/\".*\Q$op\E.*\"/ or $line=~/\'\Q$op\E\'/);
-                       ERROR("do not use assignment in if condition\n" . $herecurr);
+               if ($line =~ /\bif\s*\(/) {
+                       my ($s, $c) = ctx_statement_block($linenr, $realcnt, 0);
+
+                       if ($c =~ /\bif\s*\(.*[^<>!=]=[^=].*/) {
+                               ERROR("do not use assignment in if condition ($c)\n" . $herecurr);
+                       }
+
+                       # Find out what is on the end of the line after the
+                       # conditional.
+                       substr($s, 0, length($c)) = '';
+                       $s =~ s/\n.*//g;
+
+                       if (length($c) && $s !~ /^\s*({|;|\/\*.*\*\/)?\s*\\*\s*$/) {
+                               ERROR("trailing statements should be on next line\n" . $herecurr);
+                       }
+               }
+
+# if and else should not have general statements after it
+               if ($line =~ /^.\s*(?:}\s*)?else\b(.*)/ &&
+                   $1 !~ /^\s*(?:\sif|{|\\|$)/) {
+                       ERROR("trailing statements should be on next line\n" . $herecurr);
                }
 
                # Check for }<nl>else {, these must be at the same
@@ -1205,12 +1371,6 @@ sub process {
                        }
                }
 
-# if and else should not have general statements after it
-               if ($line =~ /^.\s*(?:}\s*)?else\b(.*)/ &&
-                   $1 !~ /^\s*(?:\sif|{|\\|$)/) {
-                       ERROR("trailing statements should be on next line\n" . $herecurr);
-               }
-
 # multi-statement macros should be enclosed in a do while loop, grab the
 # first statement and ensure its the whole macro if its not enclosed
 # in a known goot container
@@ -1233,6 +1393,10 @@ sub process {
                                $off = length($1);
                                $ln--;
                                $cnt++;
+                               while ($lines[$ln - 1] =~ /^-/) {
+                                       $ln--;
+                                       $cnt++;
+                               }
                        }
                        my @ctx = ctx_statement($ln, $cnt, $off);
                        my $ctx_ln = $ln + $#ctx + 1;
@@ -1268,25 +1432,23 @@ sub process {
                        if ($lines[$nr - 1] =~ /{\s*$/) {
                                my ($lvl, @block) = ctx_block_level($nr, $cnt);
 
-                               my $stmt = join(' ', @block);
-                               $stmt =~ s/(^[^{]*){//;
+                               my $stmt = join("\n", @block);
+                               # Drop the diff line leader.
+                               $stmt =~ s/\n./\n/g;
+                               # Drop the code outside the block.
+                               $stmt =~ s/(^[^{]*){\s*//;
                                my $before = $1;
-                               $stmt =~ s/}([^}]*$)//;
+                               $stmt =~ s/\s*}([^}]*$)//;
                                my $after = $1;
 
                                #print "block<" . join(' ', @block) . "><" . scalar(@block) . ">\n";
                                #print "stmt<$stmt>\n\n";
 
-                               # Count the ;'s if there is fewer than two
-                               # then there can only be one statement,
-                               # if there is a brace inside we cannot
-                               # trivially detect if its one statement.
-                               # Also nested if's often require braces to
-                               # disambiguate the else binding so shhh there.
-                               my @semi = ($stmt =~ /;/g);
-                               push(@semi, "/**/") if ($stmt =~ m@/\*@);
-                               ##print "semi<" . scalar(@semi) . ">\n";
-                               if ($lvl == 0 && scalar(@semi) < 2 &&
+                               # Count the newlines, if there is only one
+                               # then the block should not have {}'s.
+                               my @lines = ($stmt =~ /\n/g);
+                               #print "lines<" . scalar(@lines) . ">\n";
+                               if ($lvl == 0 && scalar(@lines) == 0 &&
                                    $stmt !~ /{/ && $stmt !~ /\bif\b/ &&
                                    $before !~ /}/ && $after !~ /{/) {
                                        my $herectx = "$here\n" . join("\n", @control, @block[1 .. $#block]) . "\n";
@@ -1372,6 +1534,11 @@ sub process {
                        ERROR("inline keyword should sit between storage class and type\n" . $herecurr);
                }
 
+# Check for __inline__ and __inline, prefer inline
+               if ($line =~ /\b(__inline__|__inline)\b/) {
+                       WARN("plain inline is preferred over $1\n" . $herecurr);
+               }
+
 # check for new externs in .c files.
                if ($line =~ /^.\s*extern\s/ && ($realfile =~ /\.c$/)) {
                        WARN("externs should be avoided in .c files\n" .  $herecurr);
@@ -1392,21 +1559,33 @@ sub process {
                }
        }
 
-       if ($chk_patch && !$is_patch) {
+       # In mailback mode only produce a report in the negative, for
+       # things that appear to be patches.
+       if ($mailback && ($clean == 1 || !$is_patch)) {
+               exit(0);
+       }
+
+       # This is not a patch, and we are are in 'no-patch' mode so
+       # just keep quiet.
+       if (!$chk_patch && !$is_patch) {
+               exit(0);
+       }
+
+       if (!$is_patch) {
                ERROR("Does not appear to be a unified-diff format patch\n");
        }
        if ($is_patch && $chk_signoff && $signoff == 0) {
                ERROR("Missing Signed-off-by: line(s)\n");
        }
 
-       if ($clean == 0 && ($chk_patch || $is_patch)) {
-               print report_dump();
-               if ($quiet < 2) {
-                       print "total: $cnt_error errors, $cnt_warn warnings, " .
-                               (($check)? "$cnt_chk checks, " : "") .
-                               "$cnt_lines lines checked\n";
-               }
+       print report_dump();
+       if ($summary) {
+               print "total: $cnt_error errors, $cnt_warn warnings, " .
+                       (($check)? "$cnt_chk checks, " : "") .
+                       "$cnt_lines lines checked\n";
+               print "\n" if ($quiet == 0);
        }
+
        if ($clean == 1 && $quiet == 0) {
                print "Your patch has no obvious style problems and is ready for submission.\n"
        }
index ee39facee15238f8f4148fc2b7e914f07a31b613..9ad1bd793252ff4241e99813b3c179afc99e9363 100644 (file)
 
 
 test ! -r $2/Makefile -o -O $2/Makefile || exit 0
+# Only overwrite automatically generated Makefiles
+# (so we do not overwrite kernel Makefile)
+if ! grep -q Automatically $2/Makefile
+then
+       exit 0
+fi
 echo "  GEN     $2/Makefile"
 
 cat << EOF > $2/Makefile
index 302e8d0839a9c7afaacff955e4a67874192117be..5bc1895f3f9ce0997afbf59448ad0053cb4aa56b 100644 (file)
@@ -526,6 +526,15 @@ int cap_task_kill(struct task_struct *p, struct siginfo *info,
        if (info != SEND_SIG_NOINFO && (is_si_special(info) || SI_FROMKERNEL(info)))
                return 0;
 
+       /*
+        * Running a setuid root program raises your capabilities.
+        * Killing your own setuid root processes was previously
+        * allowed.
+        * We must preserve legacy signal behavior in this case.
+        */
+       if (p->euid == 0 && p->uid == current->uid)
+               return 0;
+
        /* sigcont is permitted within same session */
        if (sig == SIGCONT && (task_session_nr(current) == task_session_nr(p)))
                return 0;
index 6d895ade73de485d9ceab48a28094068550e79b0..3ccfbbe973b6d3014ea9b8cf77015b206688bf6f 100644 (file)
@@ -426,7 +426,7 @@ static int dummy_file_mmap (struct file *file, unsigned long reqprot,
                            unsigned long addr,
                            unsigned long addr_only)
 {
-       if (addr < mmap_min_addr)
+       if ((addr < mmap_min_addr) && !capable(CAP_SYS_RAWIO))
                return -EACCES;
        return 0;
 }
index f5f3e6da5da76f1e2151caca3e969bcc9de17788..2fa483f26113c1656d950e11579bda5c7903cf8c 100644 (file)
@@ -65,6 +65,7 @@ static DEFINE_MUTEX(sel_mutex);
 /* global data for booleans */
 static struct dentry *bool_dir = NULL;
 static int bool_num = 0;
+static char **bool_pending_names;
 static int *bool_pending_values = NULL;
 
 /* global data for classes */
@@ -832,15 +833,16 @@ static ssize_t sel_read_bool(struct file *filep, char __user *buf,
        ssize_t length;
        ssize_t ret;
        int cur_enforcing;
-       struct inode *inode;
+       struct inode *inode = filep->f_path.dentry->d_inode;
+       unsigned index = inode->i_ino & SEL_INO_MASK;
+       const char *name = filep->f_path.dentry->d_name.name;
 
        mutex_lock(&sel_mutex);
 
-       ret = -EFAULT;
-
-       /* check to see if this file has been deleted */
-       if (!filep->f_op)
+       if (index >= bool_num || strcmp(name, bool_pending_names[index])) {
+               ret = -EINVAL;
                goto out;
+       }
 
        if (count > PAGE_SIZE) {
                ret = -EINVAL;
@@ -851,15 +853,13 @@ static ssize_t sel_read_bool(struct file *filep, char __user *buf,
                goto out;
        }
 
-       inode = filep->f_path.dentry->d_inode;
-       cur_enforcing = security_get_bool_value(inode->i_ino&SEL_INO_MASK);
+       cur_enforcing = security_get_bool_value(index);
        if (cur_enforcing < 0) {
                ret = cur_enforcing;
                goto out;
        }
-
        length = scnprintf(page, PAGE_SIZE, "%d %d", cur_enforcing,
-                         bool_pending_values[inode->i_ino&SEL_INO_MASK]);
+                         bool_pending_values[index]);
        ret = simple_read_from_buffer(buf, count, ppos, page, length);
 out:
        mutex_unlock(&sel_mutex);
@@ -872,9 +872,11 @@ static ssize_t sel_write_bool(struct file *filep, const char __user *buf,
                              size_t count, loff_t *ppos)
 {
        char *page = NULL;
-       ssize_t length = -EFAULT;
+       ssize_t length;
        int new_value;
-       struct inode *inode;
+       struct inode *inode = filep->f_path.dentry->d_inode;
+       unsigned index = inode->i_ino & SEL_INO_MASK;
+       const char *name = filep->f_path.dentry->d_name.name;
 
        mutex_lock(&sel_mutex);
 
@@ -882,16 +884,19 @@ static ssize_t sel_write_bool(struct file *filep, const char __user *buf,
        if (length)
                goto out;
 
-       /* check to see if this file has been deleted */
-       if (!filep->f_op)
+       if (index >= bool_num || strcmp(name, bool_pending_names[index])) {
+               length = -EINVAL;
                goto out;
+       }
 
        if (count >= PAGE_SIZE) {
                length = -ENOMEM;
                goto out;
        }
+
        if (*ppos != 0) {
                /* No partial writes. */
+               length = -EINVAL;
                goto out;
        }
        page = (char*)get_zeroed_page(GFP_KERNEL);
@@ -900,6 +905,7 @@ static ssize_t sel_write_bool(struct file *filep, const char __user *buf,
                goto out;
        }
 
+       length = -EFAULT;
        if (copy_from_user(page, buf, count))
                goto out;
 
@@ -910,8 +916,7 @@ static ssize_t sel_write_bool(struct file *filep, const char __user *buf,
        if (new_value)
                new_value = 1;
 
-       inode = filep->f_path.dentry->d_inode;
-       bool_pending_values[inode->i_ino&SEL_INO_MASK] = new_value;
+       bool_pending_values[index] = new_value;
        length = count;
 
 out:
@@ -931,7 +936,7 @@ static ssize_t sel_commit_bools_write(struct file *filep,
                                      size_t count, loff_t *ppos)
 {
        char *page = NULL;
-       ssize_t length = -EFAULT;
+       ssize_t length;
        int new_value;
 
        mutex_lock(&sel_mutex);
@@ -940,10 +945,6 @@ static ssize_t sel_commit_bools_write(struct file *filep,
        if (length)
                goto out;
 
-       /* check to see if this file has been deleted */
-       if (!filep->f_op)
-               goto out;
-
        if (count >= PAGE_SIZE) {
                length = -ENOMEM;
                goto out;
@@ -958,6 +959,7 @@ static ssize_t sel_commit_bools_write(struct file *filep,
                goto out;
        }
 
+       length = -EFAULT;
        if (copy_from_user(page, buf, count))
                goto out;
 
@@ -982,11 +984,9 @@ static const struct file_operations sel_commit_bools_ops = {
        .write          = sel_commit_bools_write,
 };
 
-/* partial revoke() from fs/proc/generic.c proc_kill_inodes */
 static void sel_remove_entries(struct dentry *de)
 {
-       struct list_head *p, *node;
-       struct super_block *sb = de->d_sb;
+       struct list_head *node;
 
        spin_lock(&dcache_lock);
        node = de->d_subdirs.next;
@@ -1006,18 +1006,6 @@ static void sel_remove_entries(struct dentry *de)
        }
 
        spin_unlock(&dcache_lock);
-
-       file_list_lock();
-       list_for_each(p, &sb->s_files) {
-               struct file * filp = list_entry(p, struct file, f_u.fu_list);
-               struct dentry * dentry = filp->f_path.dentry;
-
-               if (dentry->d_parent != de) {
-                       continue;
-               }
-               filp->f_op = NULL;
-       }
-       file_list_unlock();
 }
 
 #define BOOL_DIR_NAME "booleans"
@@ -1036,7 +1024,9 @@ static int sel_make_bools(void)
        u32 sid;
 
        /* remove any existing files */
+       kfree(bool_pending_names);
        kfree(bool_pending_values);
+       bool_pending_names = NULL;
        bool_pending_values = NULL;
 
        sel_remove_entries(dir);
@@ -1078,16 +1068,17 @@ static int sel_make_bools(void)
                d_add(dentry, inode);
        }
        bool_num = num;
+       bool_pending_names = names;
        bool_pending_values = values;
 out:
        free_page((unsigned long)page);
+       return ret;
+err:
        if (names) {
                for (i = 0; i < num; i++)
                        kfree(names[i]);
                kfree(names);
        }
-       return ret;
-err:
        kfree(values);
        sel_remove_entries(dir);
        ret = -ENOMEM;
index 3306ecd49243a00bbdcded86407d4f6a08775bd0..b57f2d5a1c9dff920e17c2ada69d009e090bbd21 100644 (file)
@@ -97,23 +97,27 @@ static void snd_mpu401_uart_clear_rx(struct snd_mpu401 *mpu)
 
 static void uart_interrupt_tx(struct snd_mpu401 *mpu)
 {
+       unsigned long flags;
+
        if (test_bit(MPU401_MODE_BIT_OUTPUT, &mpu->mode) &&
            test_bit(MPU401_MODE_BIT_OUTPUT_TRIGGER, &mpu->mode)) {
-               spin_lock(&mpu->output_lock);
+               spin_lock_irqsave(&mpu->output_lock, flags);
                snd_mpu401_uart_output_write(mpu);
-               spin_unlock(&mpu->output_lock);
+               spin_unlock_irqrestore(&mpu->output_lock, flags);
        }
 }
 
 static void _snd_mpu401_uart_interrupt(struct snd_mpu401 *mpu)
 {
+       unsigned long flags;
+
        if (mpu->info_flags & MPU401_INFO_INPUT) {
-               spin_lock(&mpu->input_lock);
+               spin_lock_irqsave(&mpu->input_lock, flags);
                if (test_bit(MPU401_MODE_BIT_INPUT, &mpu->mode))
                        snd_mpu401_uart_input_read(mpu);
                else
                        snd_mpu401_uart_clear_rx(mpu);
-               spin_unlock(&mpu->input_lock);
+               spin_unlock_irqrestore(&mpu->input_lock, flags);
        }
        if (! (mpu->info_flags & MPU401_INFO_TX_IRQ))
                /* ok. for better Tx performance try do some output
index e065b2a6444aeefeb122c659aebae4abc152b2f7..1b832870cc84aabdfc19669b7d23378ce4a22c8f 100644 (file)
@@ -668,7 +668,7 @@ static int __devinit snd_portman_probe_port(struct parport *p)
        parport_release(pardev);
        parport_unregister_device(pardev);
 
-       return res;
+       return res ? -EIO : 0;
 }
 
 static void __devinit snd_portman_attach(struct parport *p)
index be519a17dfa513eb22eb610f98c2c0fbfaaf6d87..3f9b5c5600369b5700b4b5ceb48e4fcf8b8f88e8 100644 (file)
@@ -86,7 +86,7 @@ static int snd_ca0106_shared_spdif_get(struct snd_kcontrol *kcontrol,
 {
        struct snd_ca0106 *emu = snd_kcontrol_chip(kcontrol);
 
-       ucontrol->value.enumerated.item[0] = emu->spdif_enable;
+       ucontrol->value.integer.value[0] = emu->spdif_enable;
        return 0;
 }
 
@@ -98,11 +98,11 @@ static int snd_ca0106_shared_spdif_put(struct snd_kcontrol *kcontrol,
        int change = 0;
        u32 mask;
 
-       val = ucontrol->value.enumerated.item[0] ;
+       val = !!ucontrol->value.integer.value[0];
        change = (emu->spdif_enable != val);
        if (change) {
                emu->spdif_enable = val;
-               if (val == 1) {
+               if (val) {
                        /* Digital */
                        snd_ca0106_ptr_write(emu, SPDIF_SELECT1, 0, 0xf);
                        snd_ca0106_ptr_write(emu, SPDIF_SELECT2, 0, 0x0b000000);
@@ -159,6 +159,8 @@ static int snd_ca0106_capture_source_put(struct snd_kcontrol *kcontrol,
        u32 source;
 
        val = ucontrol->value.enumerated.item[0] ;
+       if (val >= 6)
+               return -EINVAL;
        change = (emu->capture_source != val);
        if (change) {
                emu->capture_source = val;
@@ -207,6 +209,8 @@ static int snd_ca0106_i2c_capture_source_put(struct snd_kcontrol *kcontrol,
         * for the particular source.
         */
        source_id = ucontrol->value.enumerated.item[0] ;
+       if (source_id >= 4)
+               return -EINVAL;
        change = (emu->i2c_capture_source != source_id);
        if (change) {
                snd_ca0106_i2c_write(emu, ADC_MUX, 0); /* Mute input */
@@ -271,6 +275,8 @@ static int snd_ca0106_capture_mic_line_in_put(struct snd_kcontrol *kcontrol,
        u32 tmp;
 
        val = ucontrol->value.enumerated.item[0] ;
+       if (val > 1)
+               return -EINVAL;
        change = (emu->capture_mic_line_in != val);
        if (change) {
                emu->capture_mic_line_in = val;
@@ -443,7 +449,7 @@ static int snd_ca0106_i2c_volume_put(struct snd_kcontrol *kcontrol,
        ogain = emu->i2c_capture_volume[source_id][0]; /* Left */
        ngain = ucontrol->value.integer.value[0];
        if (ngain > 0xff)
-               return 0;
+               return -EINVAL;
        if (ogain != ngain) {
                if (emu->i2c_capture_source == source_id)
                        snd_ca0106_i2c_write(emu, ADC_ATTEN_ADCL, ((ngain) & 0xff) );
@@ -453,7 +459,7 @@ static int snd_ca0106_i2c_volume_put(struct snd_kcontrol *kcontrol,
        ogain = emu->i2c_capture_volume[source_id][1]; /* Right */
        ngain = ucontrol->value.integer.value[1];
        if (ngain > 0xff)
-               return 0;
+               return -EINVAL;
        if (ogain != ngain) {
                if (emu->i2c_capture_source == source_id)
                        snd_ca0106_i2c_write(emu, ADC_ATTEN_ADCR, ((ngain) & 0xff));
@@ -497,7 +503,7 @@ static int spi_mute_put(struct snd_kcontrol *kcontrol,
        }
 
        ret = snd_ca0106_spi_write(emu, emu->spi_dac_reg[reg]);
-       return ret ? -1 : 1;
+       return ret ? -EINVAL : 1;
 }
 
 #define CA_VOLUME(xname,chid,reg) \
index ae80f51d8c4f357ce267be3ce9131412c76f480f..61f2718ae3598a9c4b109198df404bbb19fabe6f 100644 (file)
@@ -445,13 +445,11 @@ int __devinit snd_ca0106_proc_init(struct snd_ca0106 * emu)
                snd_info_set_text_ops(entry, emu, snd_ca0106_proc_reg_read1);
                entry->c.text.write = snd_ca0106_proc_reg_write;
                entry->mode |= S_IWUSR;
-//             entry->private_data = emu;
        }
        if(! snd_card_proc_new(emu->card, "ca0106_i2c", &entry)) {
-               snd_info_set_text_ops(entry, emu, snd_ca0106_proc_i2c_write);
                entry->c.text.write = snd_ca0106_proc_i2c_write;
+               entry->private_data = emu;
                entry->mode |= S_IWUSR;
-//             entry->private_data = emu;
        }
        if(! snd_card_proc_new(emu->card, "ca0106_regs2", &entry)) 
                snd_info_set_text_ops(entry, emu, snd_ca0106_proc_reg_read2);
index 6832649879cedf4bf1f4c2d4144f448c8d49d6dc..1fa5f004e858fd8d0e0994aa20642e5eb974bede 100644 (file)
@@ -246,10 +246,9 @@ MODULE_PARM_DESC(joystick_port, "Joystick port address.");
 #define CM_MMODE_MASK          0x00000E00      /* model DAA interface mode */
 #define CM_SPDIF_SELECT2       0x00000100      /* for model > 039 ? */
 #define CM_ENCENTER            0x00000080
-#define CM_FLINKON             0x00000080      /* force modem link detection on, model 037 */
+#define CM_FLINKON             0x00000040      /* force modem link detection on, model 037 */
 #define CM_MUTECH1             0x00000040      /* mute PCI ch1 to DAC */
-#define CM_FLINKOFF            0x00000040      /* force modem link detection off, model 037 */
-#define CM_UNKNOWN_18_5                0x00000020      /* ? */
+#define CM_FLINKOFF            0x00000020      /* force modem link detection off, model 037 */
 #define CM_MIDSMP              0x00000010      /* 1/2 interpolation at front end DAC */
 #define CM_UPDDMA_MASK         0x0000000C      /* TDMA position update notification */
 #define CM_UPDDMA_2048         0x00000000
index 54a2034d8edd43e3e3c0fde46cefde33575d0b12..ccacd7b890e82cb5f3293e622496b3deaf5b813d 100644 (file)
@@ -58,6 +58,9 @@ static int snd_emu10k1_spdif_get(struct snd_kcontrol *kcontrol,
        unsigned int idx = snd_ctl_get_ioffidx(kcontrol, &ucontrol->id);
        unsigned long flags;
 
+       /* Limit: emu->spdif_bits */
+       if (idx >= 3)
+               return -EINVAL;
        spin_lock_irqsave(&emu->reg_lock, flags);
        ucontrol->value.iec958.status[0] = (emu->spdif_bits[idx] >> 0) & 0xff;
        ucontrol->value.iec958.status[1] = (emu->spdif_bits[idx] >> 8) & 0xff;
@@ -272,9 +275,12 @@ static int snd_emu1010_output_source_get(struct snd_kcontrol *kcontrol,
                                  struct snd_ctl_elem_value *ucontrol)
 {
        struct snd_emu10k1 *emu = snd_kcontrol_chip(kcontrol);
-       int channel;
+       unsigned int channel;
 
        channel = (kcontrol->private_value) & 0xff;
+       /* Limit: emu1010_output_dst, emu->emu1010.output_source */
+       if (channel >= 24)
+               return -EINVAL;
        ucontrol->value.enumerated.item[0] = emu->emu1010.output_source[channel];
        return 0;
 }
@@ -285,11 +291,17 @@ static int snd_emu1010_output_source_put(struct snd_kcontrol *kcontrol,
        struct snd_emu10k1 *emu = snd_kcontrol_chip(kcontrol);
        int change = 0;
        unsigned int val;
-       int channel;
+       unsigned int channel;
 
+       val = ucontrol->value.enumerated.item[0];
+       if (val >= 53)
+               return -EINVAL;
        channel = (kcontrol->private_value) & 0xff;
-       if (emu->emu1010.output_source[channel] != ucontrol->value.enumerated.item[0]) {
-               val = emu->emu1010.output_source[channel] = ucontrol->value.enumerated.item[0];
+       /* Limit: emu1010_output_dst, emu->emu1010.output_source */
+       if (channel >= 24)
+               return -EINVAL;
+       if (emu->emu1010.output_source[channel] != val) {
+               emu->emu1010.output_source[channel] = val;
                change = 1;
                snd_emu1010_fpga_link_dst_src_write(emu,
                        emu1010_output_dst[channel], emu1010_src_regs[val]);
@@ -301,9 +313,12 @@ static int snd_emu1010_input_source_get(struct snd_kcontrol *kcontrol,
                                  struct snd_ctl_elem_value *ucontrol)
 {
        struct snd_emu10k1 *emu = snd_kcontrol_chip(kcontrol);
-       int channel;
+       unsigned int channel;
 
        channel = (kcontrol->private_value) & 0xff;
+       /* Limit: emu1010_input_dst, emu->emu1010.input_source */
+       if (channel >= 22)
+               return -EINVAL;
        ucontrol->value.enumerated.item[0] = emu->emu1010.input_source[channel];
        return 0;
 }
@@ -314,11 +329,17 @@ static int snd_emu1010_input_source_put(struct snd_kcontrol *kcontrol,
        struct snd_emu10k1 *emu = snd_kcontrol_chip(kcontrol);
        int change = 0;
        unsigned int val;
-       int channel;
+       unsigned int channel;
 
+       val = ucontrol->value.enumerated.item[0];
+       if (val >= 53)
+               return -EINVAL;
        channel = (kcontrol->private_value) & 0xff;
-       if (emu->emu1010.input_source[channel] != ucontrol->value.enumerated.item[0]) {
-               val = emu->emu1010.input_source[channel] = ucontrol->value.enumerated.item[0];
+       /* Limit: emu1010_input_dst, emu->emu1010.input_source */
+       if (channel >= 22)
+               return -EINVAL;
+       if (emu->emu1010.input_source[channel] != val) {
+               emu->emu1010.input_source[channel] = val;
                change = 1;
                snd_emu1010_fpga_link_dst_src_write(emu,
                        emu1010_input_dst[channel], emu1010_src_regs[val]);
@@ -533,6 +554,9 @@ static int snd_emu1010_internal_clock_put(struct snd_kcontrol *kcontrol,
        int change = 0;
 
        val = ucontrol->value.enumerated.item[0] ;
+       /* Limit: uinfo->value.enumerated.items = 4; */
+       if (val >= 4)
+               return -EINVAL;
        change = (emu->emu1010.internal_clock != val);
        if (change) {
                emu->emu1010.internal_clock = val;
@@ -669,7 +693,11 @@ static int snd_audigy_i2c_capture_source_put(struct snd_kcontrol *kcontrol,
         * update the capture volume from the cached value
         * for the particular source.
         */
-       source_id = ucontrol->value.enumerated.item[0]; /* Use 2 and 3 */
+       source_id = ucontrol->value.enumerated.item[0];
+       /* Limit: uinfo->value.enumerated.items = 2; */
+       /*        emu->i2c_capture_volume */
+       if (source_id >= 2)
+               return -EINVAL;
        change = (emu->i2c_capture_source != source_id);
        if (change) {
                snd_emu10k1_i2c_write(emu, ADC_MUX, 0); /* Mute input */
@@ -720,9 +748,13 @@ static int snd_audigy_i2c_volume_get(struct snd_kcontrol *kcontrol,
                                 struct snd_ctl_elem_value *ucontrol)
 {
        struct snd_emu10k1 *emu = snd_kcontrol_chip(kcontrol);
-       int source_id;
+       unsigned int source_id;
 
        source_id = kcontrol->private_value;
+       /* Limit: emu->i2c_capture_volume */
+        /*        capture_source: uinfo->value.enumerated.items = 2 */
+       if (source_id >= 2)
+               return -EINVAL;
 
        ucontrol->value.integer.value[0] = emu->i2c_capture_volume[source_id][0];
        ucontrol->value.integer.value[1] = emu->i2c_capture_volume[source_id][1];
@@ -735,10 +767,14 @@ static int snd_audigy_i2c_volume_put(struct snd_kcontrol *kcontrol,
        struct snd_emu10k1 *emu = snd_kcontrol_chip(kcontrol);
        unsigned int ogain;
        unsigned int ngain;
-       int source_id;
+       unsigned int source_id;
        int change = 0;
 
        source_id = kcontrol->private_value;
+       /* Limit: emu->i2c_capture_volume */
+        /*        capture_source: uinfo->value.enumerated.items = 2 */
+       if (source_id >= 2)
+               return -EINVAL;
        ogain = emu->i2c_capture_volume[source_id][0]; /* Left */
        ngain = ucontrol->value.integer.value[0];
        if (ngain > 0xff)
@@ -746,7 +782,7 @@ static int snd_audigy_i2c_volume_put(struct snd_kcontrol *kcontrol,
        if (ogain != ngain) {
                if (emu->i2c_capture_source == source_id)
                        snd_emu10k1_i2c_write(emu, ADC_ATTEN_ADCL, ((ngain) & 0xff) );
-               emu->i2c_capture_volume[source_id][0] = ucontrol->value.integer.value[0];
+               emu->i2c_capture_volume[source_id][0] = ngain;
                change = 1;
        }
        ogain = emu->i2c_capture_volume[source_id][1]; /* Right */
@@ -756,7 +792,7 @@ static int snd_audigy_i2c_volume_put(struct snd_kcontrol *kcontrol,
        if (ogain != ngain) {
                if (emu->i2c_capture_source == source_id)
                        snd_emu10k1_i2c_write(emu, ADC_ATTEN_ADCR, ((ngain) & 0xff));
-               emu->i2c_capture_volume[source_id][1] = ucontrol->value.integer.value[1];
+               emu->i2c_capture_volume[source_id][1] = ngain;
                change = 1;
        }
 
@@ -877,6 +913,9 @@ static int snd_emu10k1_spdif_put(struct snd_kcontrol *kcontrol,
        unsigned int val;
        unsigned long flags;
 
+       /* Limit: emu->spdif_bits */
+       if (idx >= 3)
+               return -EINVAL;
        val = (ucontrol->value.iec958.status[0] << 0) |
              (ucontrol->value.iec958.status[1] << 8) |
              (ucontrol->value.iec958.status[2] << 16) |
index d619a3842cddb20c2492a6e79d17f4dcf7624947..9fd3135f3118daf4631dfeb546aa1b873ce3dab6 100644 (file)
@@ -742,6 +742,8 @@ static int snd_p16v_capture_source_put(struct snd_kcontrol *kcontrol,
        u32 source;
 
        val = ucontrol->value.enumerated.item[0] ;
+       if (val > 7)
+               return -EINVAL;
        change = (emu->p16v_capture_source != val);
        if (change) {
                emu->p16v_capture_source = val;
@@ -784,6 +786,8 @@ static int snd_p16v_capture_channel_put(struct snd_kcontrol *kcontrol,
        u32 tmp;
 
        val = ucontrol->value.enumerated.item[0] ;
+       if (val > 3)
+               return -EINVAL;
        change = (emu->p16v_capture_channel != val);
        if (change) {
                emu->p16v_capture_channel = val;
index ad4cb38109fcc2de06f0891ea737adc91769f2eb..8cbe3bf1e3170afb798fad92beb5579378877459 100644 (file)
@@ -1625,19 +1625,26 @@ static void hda_set_power_state(struct hda_codec *codec, hda_nid_t fg,
 
        nid = codec->start_nid;
        for (i = 0; i < codec->num_nodes; i++, nid++) {
-               if (get_wcaps(codec, nid) & AC_WCAP_POWER) {
-                       unsigned int pincap;
-                       /*
-                        * don't power down the widget if it controls eapd
-                        * and EAPD_BTLENABLE is set.
-                        */
-                       pincap = snd_hda_param_read(codec, nid, AC_PAR_PIN_CAP);
-                       if (pincap & AC_PINCAP_EAPD) {
-                               int eapd = snd_hda_codec_read(codec, nid,
-                                       0, AC_VERB_GET_EAPD_BTLENABLE, 0);
-                               eapd &= 0x02;
-                               if (power_state == AC_PWRST_D3 && eapd)
-                                       continue;
+               unsigned int wcaps = get_wcaps(codec, nid);
+               if (wcaps & AC_WCAP_POWER) {
+                       unsigned int wid_type = (wcaps & AC_WCAP_TYPE) >>
+                               AC_WCAP_TYPE_SHIFT;
+                       if (wid_type == AC_WID_PIN) {
+                               unsigned int pincap;
+                               /*
+                                * don't power down the widget if it controls
+                                * eapd and EAPD_BTLENABLE is set.
+                                */
+                               pincap = snd_hda_param_read(codec, nid,
+                                                           AC_PAR_PIN_CAP);
+                               if (pincap & AC_PINCAP_EAPD) {
+                                       int eapd = snd_hda_codec_read(codec,
+                                               nid, 0,
+                                               AC_VERB_GET_EAPD_BTLENABLE, 0);
+                                       eapd &= 0x02;
+                                       if (power_state == AC_PWRST_D3 && eapd)
+                                               continue;
+                               }
                        }
                        snd_hda_codec_write(codec, nid, 0,
                                            AC_VERB_SET_POWER_STATE,
@@ -2485,13 +2492,14 @@ int snd_hda_multi_out_analog_prepare(struct hda_codec *codec,
        /* front */
        snd_hda_codec_setup_stream(codec, nids[HDA_FRONT], stream_tag,
                                   0, format);
-       if (mout->hp_nid && mout->hp_nid != nids[HDA_FRONT])
+       if (!mout->no_share_stream &&
+           mout->hp_nid && mout->hp_nid != nids[HDA_FRONT])
                /* headphone out will just decode front left/right (stereo) */
                snd_hda_codec_setup_stream(codec, mout->hp_nid, stream_tag,
                                           0, format);
        /* extra outputs copied from front */
        for (i = 0; i < ARRAY_SIZE(mout->extra_out_nid); i++)
-               if (mout->extra_out_nid[i])
+               if (!mout->no_share_stream && mout->extra_out_nid[i])
                        snd_hda_codec_setup_stream(codec,
                                                   mout->extra_out_nid[i],
                                                   stream_tag, 0, format);
@@ -2501,7 +2509,7 @@ int snd_hda_multi_out_analog_prepare(struct hda_codec *codec,
                if (chs >= (i + 1) * 2) /* independent out */
                        snd_hda_codec_setup_stream(codec, nids[i], stream_tag,
                                                   i * 2, format);
-               else /* copy front */
+               else if (!mout->no_share_stream) /* copy front */
                        snd_hda_codec_setup_stream(codec, nids[i], stream_tag,
                                                   0, format);
        }
index 20c5e6250374b5d1a61d96e01d0789035b140bf5..8c56c9cb0d09523b7cb9eca6adbd24a0025c2bb9 100644 (file)
@@ -220,6 +220,7 @@ struct hda_multi_out {
        hda_nid_t dig_out_nid;  /* digital out audio widget */
        int max_channels;       /* currently supported analog channels */
        int dig_out_used;       /* current usage of digital out (HDA_DIG_XXX) */
+       int no_share_stream;    /* don't share a stream with multiple pins */
 };
 
 int snd_hda_multi_out_dig_open(struct hda_codec *codec,
index 0ee8ae4d4410b89c7405ac3c5c25ba111fc8703d..196ad3c9405d9b35e65f418ff97a6fd2a87faf28 100644 (file)
@@ -957,6 +957,14 @@ static int patch_ad1986a(struct hda_codec *codec)
                break;
        }
 
+       /* AD1986A has a hardware problem that it can't share a stream
+        * with multiple output pins.  The copy of front to surrounds
+        * causes noisy or silent outputs at a certain timing, e.g.
+        * changing the volume.
+        * So, let's disable the shared stream.
+        */
+       spec->multiout.no_share_stream = 1;
+
        return 0;
 }
 
index f9b2c435a1303ec767193b6d7dcb7197dd60497d..04012237096c18fbba12da7be7ee251691dca160 100644 (file)
@@ -111,7 +111,6 @@ struct sigmatel_spec {
        unsigned int alt_switch: 1;
        unsigned int hp_detect: 1;
        unsigned int gpio_mute: 1;
-       unsigned int no_vol_knob :1;
 
        unsigned int gpio_mask, gpio_data;
 
@@ -342,42 +341,6 @@ static int stac92xx_aloopback_put(struct snd_kcontrol *kcontrol,
        return 1;
 }
 
-static int stac92xx_volknob_info(struct snd_kcontrol *kcontrol,
-       struct snd_ctl_elem_info *uinfo)
-{
-       uinfo->type = SNDRV_CTL_ELEM_TYPE_INTEGER;
-       uinfo->count = 1;
-       uinfo->value.integer.min = 0;
-       uinfo->value.integer.max = 127;
-       return 0;
-}
-
-static int stac92xx_volknob_get(struct snd_kcontrol *kcontrol,
-       struct snd_ctl_elem_value *ucontrol)
-{
-       ucontrol->value.integer.value[0] = kcontrol->private_value & 0xff;
-       return 0;
-}
-
-static int stac92xx_volknob_put(struct snd_kcontrol *kcontrol,
-               struct snd_ctl_elem_value *ucontrol)
-{
-       struct hda_codec *codec = snd_kcontrol_chip(kcontrol);
-       unsigned int val = kcontrol->private_value & 0xff;
-
-       if (val == ucontrol->value.integer.value[0])
-               return 0;
-
-       val = ucontrol->value.integer.value[0];
-       kcontrol->private_value &= ~0xff;
-       kcontrol->private_value |= val;
-
-       snd_hda_codec_write_cache(codec, kcontrol->private_value >> 16, 0,
-               AC_VERB_SET_VOLUME_KNOB_CONTROL, val | 0x80);
-       return 1;
-}
-
-
 static struct hda_verb stac9200_core_init[] = {
        /* set dac0mux for dac converter */
        { 0x07, AC_VERB_SET_CONNECT_SEL, 0x00},
@@ -446,18 +409,6 @@ static struct hda_verb stac9205_core_init[] = {
                .private_value = verb_read | (verb_write << 16), \
        }
 
-#define STAC_VOLKNOB(knob_nid) \
-       { \
-               .iface = SNDRV_CTL_ELEM_IFACE_MIXER, \
-               .name  = "Master Playback Volume", \
-               .count = 1, \
-               .info  = stac92xx_volknob_info, \
-               .get   = stac92xx_volknob_get, \
-               .put   = stac92xx_volknob_put, \
-                       .private_value = 127 | (knob_nid << 16), \
-       }
-
-
 static struct snd_kcontrol_new stac9200_mixer[] = {
        HDA_CODEC_VOLUME("Master Playback Volume", 0xb, 0, HDA_OUTPUT),
        HDA_CODEC_MUTE("Master Playback Switch", 0xb, 0, HDA_OUTPUT),
@@ -487,7 +438,6 @@ static struct snd_kcontrol_new stac9205_mixer[] = {
        },
        STAC_INPUT_SOURCE(2),
        STAC_ANALOG_LOOPBACK(0xFE0, 0x7E0),
-       STAC_VOLKNOB(0x24),
 
        HDA_CODEC_VOLUME_IDX("Capture Volume", 0x0, 0x1b, 0x0, HDA_INPUT),
        HDA_CODEC_MUTE_IDX("Capture Switch", 0x0, 0x1d, 0x0, HDA_OUTPUT),
@@ -503,7 +453,6 @@ static struct snd_kcontrol_new stac9205_mixer[] = {
 /* This needs to be generated dynamically based on sequence */
 static struct snd_kcontrol_new stac922x_mixer[] = {
        STAC_INPUT_SOURCE(2),
-       STAC_VOLKNOB(0x16),
        HDA_CODEC_VOLUME_IDX("Capture Volume", 0x0, 0x17, 0x0, HDA_INPUT),
        HDA_CODEC_MUTE_IDX("Capture Switch", 0x0, 0x17, 0x0, HDA_INPUT),
        HDA_CODEC_VOLUME_IDX("Mux Capture Volume", 0x0, 0x12, 0x0, HDA_OUTPUT),
@@ -517,7 +466,6 @@ static struct snd_kcontrol_new stac922x_mixer[] = {
 
 static struct snd_kcontrol_new stac927x_mixer[] = {
        STAC_INPUT_SOURCE(3),
-       STAC_VOLKNOB(0x24),
        STAC_ANALOG_LOOPBACK(0xFEB, 0x7EB),
 
        HDA_CODEC_VOLUME_IDX("Capture Volume", 0x0, 0x18, 0x0, HDA_INPUT),
@@ -1931,8 +1879,7 @@ static int stac92xx_auto_create_hp_ctls(struct hda_codec *codec,
        }
        if (spec->multiout.hp_nid) {
                const char *pfx;
-               if (old_num_dacs == spec->multiout.num_dacs &&
-                   spec->no_vol_knob)
+               if (old_num_dacs == spec->multiout.num_dacs)
                        pfx = "Master";
                else
                        pfx = "Headphone";
@@ -2489,7 +2436,6 @@ static int patch_stac9200(struct hda_codec *codec)
        codec->spec = spec;
        spec->num_pins = ARRAY_SIZE(stac9200_pin_nids);
        spec->pin_nids = stac9200_pin_nids;
-       spec->no_vol_knob = 1;
        spec->board_config = snd_hda_check_board_config(codec, STAC_9200_MODELS,
                                                        stac9200_models,
                                                        stac9200_cfg_tbl);
@@ -2544,7 +2490,6 @@ static int patch_stac925x(struct hda_codec *codec)
        codec->spec = spec;
        spec->num_pins = ARRAY_SIZE(stac925x_pin_nids);
        spec->pin_nids = stac925x_pin_nids;
-       spec->no_vol_knob = 1;
        spec->board_config = snd_hda_check_board_config(codec, STAC_925x_MODELS,
                                                        stac925x_models,
                                                        stac925x_cfg_tbl);
index 5d601ad6da705d51700d3e4a67e9ebb9df4c990f..abac62866da80e2db722d6ddb7937119a7124caa 100644 (file)
@@ -725,7 +725,8 @@ static int cs4270_probe(struct platform_device *pdev)
        codec->owner = THIS_MODULE;
        codec->dai = &cs4270_dai;
        codec->num_dai = 1;
-       codec->private_data = codec + ALIGN(sizeof(struct snd_soc_codec), 4);
+       codec->private_data = (void *) codec +
+               ALIGN(sizeof(struct snd_soc_codec), 4);
 
        socdev->codec = codec;
 
index 75acf7ef552809a12ae71e566b5b5525d276602e..758a2637e7ac408d7eb46ba4bf16f051e9ea9e00 100644 (file)
@@ -32,7 +32,7 @@
 
 #include <asm/hardware.h>
 #include <asm/io.h>
-#include <asm/arch/regs-ac97.h>
+#include <asm/plat-s3c/regs-ac97.h>
 #include <asm/arch/regs-gpio.h>
 #include <asm/arch/regs-clock.h>
 #include <asm/arch/audio.h>