aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--Documentation/atomic_ops.txt3
-rw-r--r--Documentation/cgroups.txt66
-rw-r--r--Documentation/controllers/memory.txt24
-rw-r--r--Documentation/cpusets.txt2
-rw-r--r--Documentation/hwmon/adt747379
-rw-r--r--Documentation/hwmon/coretemp6
-rw-r--r--Documentation/i2c/busses/i2c-i8013
-rw-r--r--Documentation/i386/IO-APIC.txt32
-rw-r--r--Documentation/ja_JP/stable_kernel_rules.txt106
-rw-r--r--Documentation/kernel-parameters.txt37
-rw-r--r--Documentation/laptops/thinkpad-acpi.txt63
-rw-r--r--Documentation/memory-barriers.txt2
-rw-r--r--Documentation/networking/tcp.txt8
-rw-r--r--Documentation/power/devices.txt13
-rw-r--r--Documentation/stable_kernel_rules.txt7
-rw-r--r--Documentation/video4linux/CARDLIST.em28xx2
-rw-r--r--Documentation/video4linux/CARDLIST.saa71346
-rw-r--r--Documentation/video4linux/zr364xx.txt4
-rw-r--r--Documentation/vm/slabinfo.c2
-rw-r--r--MAINTAINERS45
-rw-r--r--Makefile13
-rw-r--r--arch/arm/mach-omap1/board-sx1.c2
-rw-r--r--arch/arm/mach-orion/ts209-setup.c15
-rw-r--r--arch/arm/mach-pxa/clock.c23
-rw-r--r--arch/arm/mach-pxa/cpu-pxa.c8
-rw-r--r--arch/frv/kernel/entry.S4
-rw-r--r--arch/frv/kernel/vmlinux.lds.S3
-rw-r--r--arch/h8300/defconfig263
-rw-r--r--arch/h8300/kernel/irq.c4
-rw-r--r--arch/h8300/kernel/signal.c4
-rw-r--r--arch/h8300/platform/h8300h/Makefile2
-rw-r--r--arch/h8300/platform/h8300h/irq.c82
-rw-r--r--arch/h8300/platform/h8s/ints.c304
-rw-r--r--arch/h8300/platform/h8s/irq.c (renamed from arch/h8300/platform/h8s/ints_h8s.c)8
-rw-r--r--arch/mips/bcm47xx/setup.c12
-rw-r--r--arch/mips/bcm47xx/wgt634u.c71
-rw-r--r--arch/mips/configs/bcm47xx_defconfig1939
-rw-r--r--arch/mips/configs/ip28_defconfig891
-rw-r--r--arch/mips/configs/qemu_defconfig800
-rw-r--r--arch/mips/kernel/irq-rm7000.c1
-rw-r--r--arch/mips/kernel/irq-rm9000.c1
-rw-r--r--arch/mips/kernel/mips-mt-fpaff.c2
-rw-r--r--arch/mips/kernel/scall32-o32.S3
-rw-r--r--arch/mips/kernel/scall64-64.S3
-rw-r--r--arch/mips/kernel/scall64-n32.S3
-rw-r--r--arch/mips/kernel/scall64-o32.S3
-rw-r--r--arch/mips/kernel/sysirix.c2
-rw-r--r--arch/mips/mm/c-r4k.c9
-rw-r--r--arch/mips/mm/cache.c15
-rw-r--r--arch/mips/mm/init.c9
-rw-r--r--arch/mips/mm/pg-sb1.c14
-rw-r--r--arch/mips/pci/pci.c14
-rw-r--r--arch/mips/sibyte/bcm1480/smp.c1
-rw-r--r--arch/mn10300/Kconfig4
-rw-r--r--arch/mn10300/configs/asb2303_defconfig33
-rw-r--r--arch/mn10300/kernel/gdb-io-ttysm.c2
-rw-r--r--arch/mn10300/kernel/time.c4
-rw-r--r--arch/mn10300/kernel/traps.c2
-rw-r--r--arch/powerpc/Makefile2
-rw-r--r--arch/powerpc/boot/Makefile8
-rw-r--r--arch/powerpc/boot/dts/bamboo.dts3
-rw-r--r--arch/powerpc/boot/dts/ebony.dts2
-rw-r--r--arch/powerpc/boot/dts/katmai.dts2
-rw-r--r--arch/powerpc/boot/dts/kilauea.dts3
-rw-r--r--arch/powerpc/boot/dts/makalu.dts3
-rw-r--r--arch/powerpc/boot/dts/rainier.dts4
-rw-r--r--arch/powerpc/boot/dts/sequoia.dts4
-rw-r--r--arch/powerpc/boot/dts/taishan.dts4
-rw-r--r--arch/powerpc/configs/bamboo_defconfig81
-rw-r--r--arch/powerpc/configs/ebony_defconfig79
-rw-r--r--arch/powerpc/configs/ep405_defconfig92
-rw-r--r--arch/powerpc/configs/kilauea_defconfig69
-rw-r--r--arch/powerpc/configs/makalu_defconfig69
-rw-r--r--arch/powerpc/configs/ppc44x_defconfig904
-rw-r--r--arch/powerpc/configs/rainier_defconfig82
-rw-r--r--arch/powerpc/configs/sequoia_defconfig77
-rw-r--r--arch/powerpc/configs/taishan_defconfig81
-rw-r--r--arch/powerpc/configs/walnut_defconfig81
-rw-r--r--arch/powerpc/configs/warp_defconfig139
-rw-r--r--arch/powerpc/kernel/kprobes.c9
-rw-r--r--arch/powerpc/kernel/prom.c13
-rw-r--r--arch/powerpc/platforms/44x/Kconfig10
-rw-r--r--arch/powerpc/platforms/cell/spu_base.c12
-rw-r--r--arch/powerpc/platforms/cell/spufs/run.c1
-rw-r--r--arch/powerpc/platforms/cell/spufs/sched.c8
-rw-r--r--arch/powerpc/platforms/cell/spufs/switch.c6
-rw-r--r--arch/powerpc/platforms/pasemi/Makefile2
-rw-r--r--arch/powerpc/platforms/pasemi/misc.c97
-rw-r--r--arch/powerpc/platforms/pseries/power.c2
-rw-r--r--arch/powerpc/sysdev/mpic_pasemi_msi.c5
-rw-r--r--arch/ppc/platforms/4xx/ibm440ep.c6
-rw-r--r--arch/s390/Kconfig3
-rw-r--r--arch/s390/kernel/process.c15
-rw-r--r--arch/s390/kernel/smp.c53
-rw-r--r--arch/s390/kernel/time.c2
-rw-r--r--arch/s390/lib/uaccess_std.c8
-rw-r--r--arch/sparc/kernel/process.c6
-rw-r--r--arch/sparc/kernel/setup.c4
-rw-r--r--arch/sparc/mm/sun4c.c4
-rw-r--r--arch/sparc/prom/misc.c7
-rw-r--r--arch/sparc64/Kconfig.debug4
-rw-r--r--arch/sparc64/Makefile36
-rw-r--r--arch/sparc64/defconfig33
-rw-r--r--arch/sparc64/kernel/hvtramp.S4
-rw-r--r--arch/sparc64/kernel/iommu.c6
-rw-r--r--arch/sparc64/kernel/kprobes.c2
-rw-r--r--arch/sparc64/kernel/pci.c21
-rw-r--r--arch/sparc64/kernel/power.c3
-rw-r--r--arch/sparc64/kernel/process.c92
-rw-r--r--arch/sparc64/kernel/prom.c1
-rw-r--r--arch/sparc64/kernel/setup.c29
-rw-r--r--arch/sparc64/kernel/smp.c2
-rw-r--r--arch/sparc64/kernel/sparc64_ksyms.c3
-rw-r--r--arch/sparc64/kernel/trampoline.S4
-rw-r--r--arch/sparc64/kernel/traps.c2
-rw-r--r--arch/sparc64/kernel/unaligned.c3
-rw-r--r--arch/sparc64/mm/init.c49
-rw-r--r--arch/sparc64/prom/misc.c9
-rw-r--r--arch/um/defconfig280
-rw-r--r--arch/um/drivers/harddog_user.c4
-rw-r--r--arch/um/include/registers.h2
-rw-r--r--arch/um/include/sysdep-i386/ptrace_user.h3
-rw-r--r--arch/um/include/sysdep-x86_64/ptrace_user.h3
-rw-r--r--arch/um/kernel/initrd.c2
-rw-r--r--arch/um/kernel/mem.c6
-rw-r--r--arch/um/os-Linux/skas/process.c15
-rw-r--r--arch/um/os-Linux/sys-i386/registers.c16
-rw-r--r--arch/um/os-Linux/sys-x86_64/registers.c10
-rw-r--r--arch/um/sys-i386/user-offsets.c27
-rw-r--r--arch/um/sys-x86_64/user-offsets.c28
-rw-r--r--arch/x86/Kconfig2
-rw-r--r--arch/x86/Kconfig.debug2
-rw-r--r--arch/x86/Makefile2
-rw-r--r--arch/x86/kernel/Makefile10
-rw-r--r--arch/x86/kernel/acpi/boot.c3
-rw-r--r--arch/x86/kernel/asm-offsets_32.c6
-rw-r--r--arch/x86/kernel/cpu/bugs.c8
-rw-r--r--arch/x86/kernel/efi.c2
-rw-r--r--arch/x86/kernel/efi_32.c1
-rw-r--r--arch/x86/kernel/entry_32.S2
-rw-r--r--arch/x86/kernel/entry_64.S2
-rw-r--r--arch/x86/kernel/head64.c3
-rw-r--r--arch/x86/kernel/head_32.S2
-rw-r--r--arch/x86/kernel/head_64.S9
-rw-r--r--arch/x86/kernel/i387.c2
-rw-r--r--arch/x86/kernel/i8259_32.c25
-rw-r--r--arch/x86/kernel/io_delay.c1
-rw-r--r--arch/x86/kernel/kprobes.c4
-rw-r--r--arch/x86/kernel/nmi_32.c21
-rw-r--r--arch/x86/kernel/nmi_64.c21
-rw-r--r--arch/x86/kernel/ptrace.c4
-rw-r--r--arch/x86/kernel/setup_32.c1
-rw-r--r--arch/x86/kernel/setup_64.c6
-rw-r--r--arch/x86/kernel/topology.c2
-rw-r--r--arch/x86/kernel/vmlinux_32.lds.S26
-rw-r--r--arch/x86/kernel/vmlinux_64.lds.S30
-rw-r--r--arch/x86/lib/csum-wrappers_64.c147
-rw-r--r--arch/x86/lib/io_64.c18
-rw-r--r--arch/x86/mm/init_64.c27
-rw-r--r--arch/x86/mm/ioremap.c26
-rw-r--r--arch/x86/mm/numa_64.c5
-rw-r--r--arch/x86/mm/pageattr.c232
-rw-r--r--arch/x86/mm/srat_64.c3
-rw-r--r--arch/x86/pci/common.c2
-rw-r--r--arch/x86/pci/irq.c4
-rw-r--r--arch/x86/power/hibernate_asm_64.S5
-rw-r--r--arch/xtensa/Makefile2
-rw-r--r--arch/xtensa/boot/boot-elf/Makefile9
-rw-r--r--arch/xtensa/boot/boot-elf/boot.lds.S (renamed from arch/xtensa/boot/boot-elf/boot.ld)4
-rw-r--r--arch/xtensa/boot/boot-redboot/Makefile2
-rw-r--r--arch/xtensa/boot/boot-redboot/boot.ld2
-rw-r--r--arch/xtensa/kernel/asm-offsets.c17
-rw-r--r--arch/xtensa/kernel/coprocessor.S443
-rw-r--r--arch/xtensa/kernel/entry.S355
-rw-r--r--arch/xtensa/kernel/module.c2
-rw-r--r--arch/xtensa/kernel/process.c306
-rw-r--r--arch/xtensa/kernel/ptrace.c351
-rw-r--r--arch/xtensa/kernel/setup.c5
-rw-r--r--arch/xtensa/kernel/signal.c89
-rw-r--r--arch/xtensa/kernel/traps.c20
-rw-r--r--arch/xtensa/kernel/vmlinux.lds.S6
-rw-r--r--arch/xtensa/mm/cache.c7
-rw-r--r--arch/xtensa/mm/init.c2
-rw-r--r--arch/xtensa/mm/misc.S2
-rw-r--r--arch/xtensa/platforms/iss/Makefile (renamed from arch/xtensa/platform-iss/Makefile)0
-rw-r--r--arch/xtensa/platforms/iss/console.c (renamed from arch/xtensa/platform-iss/console.c)1
-rw-r--r--arch/xtensa/platforms/iss/io.c (renamed from arch/xtensa/platform-iss/io.c)0
-rw-r--r--arch/xtensa/platforms/iss/network.c (renamed from arch/xtensa/platform-iss/network.c)2
-rw-r--r--arch/xtensa/platforms/iss/setup.c (renamed from arch/xtensa/platform-iss/setup.c)0
-rw-r--r--block/blk-core.c4
-rw-r--r--block/blk-ioc.c37
-rw-r--r--block/blk-map.c20
-rw-r--r--block/blk-merge.c6
-rw-r--r--block/blk-settings.c9
-rw-r--r--block/bsg.c8
-rw-r--r--block/cfq-iosched.c38
-rw-r--r--block/elevator.c15
-rw-r--r--block/scsi_ioctl.c3
-rw-r--r--crypto/Kconfig2
-rw-r--r--drivers/acpi/ec.c6
-rw-r--r--drivers/acpi/executer/exregion.c5
-rw-r--r--drivers/acpi/fan.c30
-rw-r--r--drivers/acpi/processor_core.c39
-rw-r--r--drivers/acpi/processor_idle.c10
-rw-r--r--drivers/acpi/utils.c18
-rw-r--r--drivers/acpi/video.c3
-rw-r--r--drivers/ata/ahci.c30
-rw-r--r--drivers/ata/ata_piix.c2
-rw-r--r--drivers/ata/libata-core.c646
-rw-r--r--drivers/ata/libata-eh.c8
-rw-r--r--drivers/ata/libata-pmp.c4
-rw-r--r--drivers/ata/libata-scsi.c75
-rw-r--r--drivers/ata/libata.h1
-rw-r--r--drivers/ata/pata_atiixp.c4
-rw-r--r--drivers/ata/pata_icside.c8
-rw-r--r--drivers/ata/pata_legacy.c44
-rw-r--r--drivers/ata/sata_fsl.c21
-rw-r--r--drivers/ata/sata_mv.c15
-rw-r--r--drivers/ata/sata_sil24.c5
-rw-r--r--drivers/base/bus.c9
-rw-r--r--drivers/base/driver.c3
-rw-r--r--drivers/base/power/main.c4
-rw-r--r--drivers/block/nbd.c6
-rw-r--r--drivers/block/xen-blkfront.c18
-rw-r--r--drivers/char/agp/amd-k7-agp.c9
-rw-r--r--drivers/char/agp/ati-agp.c16
-rw-r--r--drivers/char/agp/generic.c9
-rw-r--r--drivers/char/agp/sis-agp.c47
-rw-r--r--drivers/char/agp/sworks-agp.c18
-rw-r--r--drivers/char/drm/drmP.h2
-rw-r--r--drivers/char/drm/drm_pciids.h3
-rw-r--r--drivers/char/drm/drm_sysfs.c2
-rw-r--r--drivers/char/drm/drm_vm.c125
-rw-r--r--drivers/char/drm/i915_dma.c5
-rw-r--r--drivers/char/drm/i915_drv.c52
-rw-r--r--drivers/char/drm/i915_drv.h17
-rw-r--r--drivers/char/drm/radeon_cp.c81
-rw-r--r--drivers/char/drm/radeon_drv.h38
-rw-r--r--drivers/cpufreq/cpufreq.c8
-rw-r--r--drivers/crypto/hifn_795x.c6
-rw-r--r--drivers/firmware/dmi_scan.c82
-rw-r--r--drivers/hwmon/Kconfig10
-rw-r--r--drivers/hwmon/Makefile1
-rw-r--r--drivers/hwmon/ad7418.c2
-rw-r--r--drivers/hwmon/adm1021.c6
-rw-r--r--drivers/hwmon/adm1025.c2
-rw-r--r--drivers/hwmon/adm1026.c4
-rw-r--r--drivers/hwmon/adm1029.c6
-rw-r--r--drivers/hwmon/adm1031.c2
-rw-r--r--drivers/hwmon/adm9240.c2
-rw-r--r--drivers/hwmon/ads7828.c2
-rw-r--r--drivers/hwmon/adt7470.c2
-rw-r--r--drivers/hwmon/adt7473.c1157
-rw-r--r--drivers/hwmon/applesmc.c29
-rw-r--r--drivers/hwmon/asb100.c2
-rw-r--r--drivers/hwmon/atxp1.c2
-rw-r--r--drivers/hwmon/coretemp.c119
-rw-r--r--drivers/hwmon/dme1737.c2
-rw-r--r--drivers/hwmon/ds1621.c2
-rw-r--r--drivers/hwmon/f75375s.c2
-rw-r--r--drivers/hwmon/fscher.c2
-rw-r--r--drivers/hwmon/fschmd.c2
-rw-r--r--drivers/hwmon/fscpos.c2
-rw-r--r--drivers/hwmon/gl518sm.c2
-rw-r--r--drivers/hwmon/gl520sm.c2
-rw-r--r--drivers/hwmon/lm63.c2
-rw-r--r--drivers/hwmon/lm75.c2
-rw-r--r--drivers/hwmon/lm77.c3
-rw-r--r--drivers/hwmon/lm78.c4
-rw-r--r--drivers/hwmon/lm80.c4
-rw-r--r--drivers/hwmon/lm83.c6
-rw-r--r--drivers/hwmon/lm85.c2
-rw-r--r--drivers/hwmon/lm87.c2
-rw-r--r--drivers/hwmon/lm90.c6
-rw-r--r--drivers/hwmon/lm92.c20
-rw-r--r--drivers/hwmon/lm93.c2
-rw-r--r--drivers/hwmon/max1619.c23
-rw-r--r--drivers/hwmon/max6650.c3
-rw-r--r--drivers/hwmon/smsc47m1.c25
-rw-r--r--drivers/hwmon/smsc47m192.c2
-rw-r--r--drivers/hwmon/thmc50.c8
-rw-r--r--drivers/hwmon/via686a.c28
-rw-r--r--drivers/hwmon/vt8231.c44
-rw-r--r--drivers/hwmon/w83781d.c4
-rw-r--r--drivers/hwmon/w83791d.c3
-rw-r--r--drivers/hwmon/w83792d.c3
-rw-r--r--drivers/hwmon/w83793.c3
-rw-r--r--drivers/hwmon/w83l785ts.c2
-rw-r--r--drivers/hwmon/w83l786ng.c2
-rw-r--r--drivers/i2c/busses/Kconfig2
-rw-r--r--drivers/i2c/busses/i2c-i801.c10
-rw-r--r--drivers/i2c/busses/i2c-pca-isa.c7
-rw-r--r--drivers/i2c/busses/i2c-pmcmsp.c4
-rw-r--r--drivers/i2c/busses/i2c-pxa.c29
-rw-r--r--drivers/ide/ide-cd.c6
-rw-r--r--drivers/ide/ide-disk.c1
-rw-r--r--drivers/ide/ide-generic.c6
-rw-r--r--drivers/ide/ide.c2
-rw-r--r--drivers/ide/legacy/falconide.c4
-rw-r--r--drivers/ide/legacy/ht6560b.c25
-rw-r--r--drivers/ide/legacy/macide.c2
-rw-r--r--drivers/ide/pci/via82cxxx.c1
-rw-r--r--drivers/ide/ppc/pmac.c4
-rw-r--r--drivers/infiniband/core/sysfs.c4
-rw-r--r--drivers/infiniband/hw/mthca/mthca_mr.c2
-rw-r--r--drivers/infiniband/hw/nes/nes_nic.c62
-rw-r--r--drivers/infiniband/hw/nes/nes_verbs.c2
-rw-r--r--drivers/infiniband/ulp/ipoib/ipoib_cm.c10
-rw-r--r--drivers/macintosh/mediabay.c3
-rw-r--r--drivers/md/dm-raid1.c7
-rw-r--r--drivers/media/Kconfig18
-rw-r--r--drivers/media/common/Kconfig2
-rw-r--r--drivers/media/common/ir-keymaps.c46
-rw-r--r--drivers/media/common/saa7146_vbi.c1
-rw-r--r--drivers/media/common/saa7146_video.c2
-rw-r--r--drivers/media/dvb/bt8xx/bt878.c23
-rw-r--r--drivers/media/dvb/dvb-usb/ttusb2.c1
-rw-r--r--drivers/media/dvb/frontends/tda10086.c28
-rw-r--r--drivers/media/dvb/frontends/tda10086.h3
-rw-r--r--drivers/media/dvb/frontends/tda18271-common.c2
-rw-r--r--drivers/media/dvb/frontends/xc5000.h3
-rw-r--r--drivers/media/dvb/ttpci/av7110_av.c15
-rw-r--r--drivers/media/dvb/ttpci/budget-av.c8
-rw-r--r--drivers/media/dvb/ttpci/budget.c1
-rw-r--r--drivers/media/radio/Kconfig4
-rw-r--r--drivers/media/radio/radio-sf16fmi.c1
-rw-r--r--drivers/media/radio/radio-sf16fmr2.c5
-rw-r--r--drivers/media/radio/radio-si470x.c597
-rw-r--r--drivers/media/video/Kconfig4
-rw-r--r--drivers/media/video/Makefile5
-rw-r--r--drivers/media/video/bt8xx/bttv-driver.c51
-rw-r--r--drivers/media/video/bt8xx/bttv-vbi.c4
-rw-r--r--drivers/media/video/cx88/cx88-mpeg.c16
-rw-r--r--drivers/media/video/cx88/cx88.h1
-rw-r--r--drivers/media/video/em28xx/em28xx-audio.c6
-rw-r--r--drivers/media/video/em28xx/em28xx-cards.c8
-rw-r--r--drivers/media/video/em28xx/em28xx-core.c111
-rw-r--r--drivers/media/video/em28xx/em28xx-video.c79
-rw-r--r--drivers/media/video/em28xx/em28xx.h5
-rw-r--r--drivers/media/video/saa7134/saa7134-cards.c123
-rw-r--r--drivers/media/video/saa7134/saa7134-dvb.c28
-rw-r--r--drivers/media/video/saa7134/saa7134-empress.c6
-rw-r--r--drivers/media/video/saa7134/saa7134-input.c6
-rw-r--r--drivers/media/video/saa7134/saa7134-video.c20
-rw-r--r--drivers/media/video/saa7134/saa7134.h2
-rw-r--r--drivers/media/video/stk-sensor.c23
-rw-r--r--drivers/media/video/stk-webcam.c104
-rw-r--r--drivers/media/video/stk-webcam.h3
-rw-r--r--drivers/media/video/tcm825x.c2
-rw-r--r--drivers/media/video/tuner-core.c2
-rw-r--r--drivers/media/video/tuner-xc2028.c3
-rw-r--r--drivers/media/video/tvaudio.c10
-rw-r--r--drivers/media/video/tveeprom.c2
-rw-r--r--drivers/media/video/v4l2-common.c393
-rw-r--r--drivers/media/video/videobuf-core.c78
-rw-r--r--drivers/media/video/videobuf-dma-sg.c4
-rw-r--r--drivers/media/video/videobuf-vmalloc.c20
-rw-r--r--drivers/media/video/videodev.c444
-rw-r--r--drivers/media/video/zoran.h22
-rw-r--r--drivers/media/video/zoran_device.c12
-rw-r--r--drivers/media/video/zr364xx.c2
-rw-r--r--drivers/message/fusion/mptbase.c4
-rw-r--r--drivers/message/fusion/mptbase.h2
-rw-r--r--drivers/misc/Kconfig17
-rw-r--r--drivers/misc/acer-wmi.c9
-rw-r--r--drivers/misc/intel_menlow.c11
-rw-r--r--drivers/misc/thinkpad_acpi.c123
-rw-r--r--drivers/net/bnx2.c50
-rw-r--r--drivers/net/bnx2.h1
-rw-r--r--drivers/net/e1000/e1000_ethtool.c2
-rw-r--r--drivers/net/e1000/e1000_main.c8
-rw-r--r--drivers/net/e1000e/netdev.c34
-rw-r--r--drivers/net/gianfar.c4
-rw-r--r--drivers/net/gianfar_mii.c4
-rw-r--r--drivers/net/hamradio/mkiss.c5
-rw-r--r--drivers/net/ibm_newemac/rgmii.c1
-rw-r--r--drivers/net/igb/igb_ethtool.c2
-rw-r--r--drivers/net/igb/igb_main.c28
-rw-r--r--drivers/net/ixgb/ixgb_ethtool.c2
-rw-r--r--drivers/net/ixgbe/ixgbe_main.c41
-rw-r--r--drivers/net/niu.c20
-rw-r--r--drivers/net/niu.h2
-rw-r--r--drivers/net/pcmcia/smc91c92_cs.c12
-rw-r--r--drivers/net/tg3.c2
-rw-r--r--drivers/net/tsi108_eth.c72
-rw-r--r--drivers/net/veth.c53
-rw-r--r--drivers/net/wireless/ath5k/ath5k.h2
-rw-r--r--drivers/net/wireless/ath5k/base.c24
-rw-r--r--drivers/net/wireless/ath5k/hw.c42
-rw-r--r--drivers/net/wireless/b43/b43.h6
-rw-r--r--drivers/net/wireless/b43/main.c40
-rw-r--r--drivers/net/wireless/b43legacy/b43legacy.h4
-rw-r--r--drivers/net/wireless/b43legacy/dma.c167
-rw-r--r--drivers/net/wireless/b43legacy/dma.h33
-rw-r--r--drivers/net/wireless/b43legacy/main.c41
-rw-r--r--drivers/net/wireless/ipw2200.c45
-rw-r--r--drivers/net/wireless/iwlwifi/iwl3945-base.c19
-rw-r--r--drivers/net/wireless/iwlwifi/iwl4965-base.c17
-rw-r--r--drivers/net/wireless/p54usb.c2
-rw-r--r--drivers/net/wireless/rndis_wlan.c14
-rw-r--r--drivers/net/wireless/rt2x00/rt2500usb.c2
-rw-r--r--drivers/net/wireless/rtl8180_dev.c4
-rw-r--r--drivers/net/wireless/rtl8187_dev.c4
-rw-r--r--drivers/net/wireless/wavelan.h6
-rw-r--r--drivers/net/wireless/zd1211rw/zd_mac.c12
-rw-r--r--drivers/pci/dmar.c9
-rw-r--r--drivers/pci/hotplug/acpiphp_core.c6
-rw-r--r--drivers/pci/hotplug/acpiphp_ibm.c33
-rw-r--r--drivers/pci/intel-iommu.c7
-rw-r--r--drivers/pci/intel-iommu.h5
-rw-r--r--drivers/pci/iova.c3
-rw-r--r--drivers/pci/iova.h3
-rw-r--r--drivers/pci/pci-acpi.c3
-rw-r--r--drivers/pci/pci.c1
-rw-r--r--drivers/pci/proc.c2
-rw-r--r--drivers/pci/quirks.c79
-rw-r--r--drivers/pci/setup-bus.c6
-rw-r--r--drivers/pcmcia/i82092.c7
-rw-r--r--drivers/rtc/rtc-cmos.c2
-rw-r--r--drivers/s390/block/dasd.c12
-rw-r--r--drivers/s390/block/dcssblk.c2
-rw-r--r--drivers/s390/char/sclp.c12
-rw-r--r--drivers/s390/char/sclp.h6
-rw-r--r--drivers/s390/char/sclp_config.c2
-rw-r--r--drivers/s390/char/sclp_cpi_sys.c2
-rw-r--r--drivers/s390/char/sclp_rw.c4
-rw-r--r--drivers/s390/char/sclp_vt220.c2
-rw-r--r--drivers/s390/cio/device.c15
-rw-r--r--drivers/s390/cio/qdio.c13
-rw-r--r--drivers/s390/cio/qdio.h2
-rw-r--r--drivers/scsi/Kconfig10
-rw-r--r--drivers/scsi/Makefile1
-rw-r--r--drivers/scsi/aic7xxx/aic79xx_osm_pci.c2
-rw-r--r--drivers/scsi/aic7xxx/aic7xxx_core.c11
-rw-r--r--drivers/scsi/aic7xxx/aic7xxx_osm_pci.c2
-rw-r--r--drivers/scsi/aic94xx/aic94xx_scb.c14
-rw-r--r--drivers/scsi/aic94xx/aic94xx_tmf.c4
-rw-r--r--drivers/scsi/arcmsr/arcmsr_hba.c26
-rw-r--r--drivers/scsi/arm/fas216.h2
-rw-r--r--drivers/scsi/gdth_proc.c6
-rw-r--r--drivers/scsi/ipr.c4
-rw-r--r--drivers/scsi/ips.c2
-rw-r--r--drivers/scsi/libsas/sas_ata.c4
-rw-r--r--drivers/scsi/libsas/sas_scsi_host.c68
-rw-r--r--drivers/scsi/lpfc/lpfc_crtn.h1
-rw-r--r--drivers/scsi/lpfc/lpfc_hbadisc.c2
-rw-r--r--drivers/scsi/lpfc/lpfc_sli.c18
-rw-r--r--drivers/scsi/megaraid.c10
-rw-r--r--drivers/scsi/mesh.c1
-rw-r--r--drivers/scsi/mvsas.c2970
-rw-r--r--drivers/scsi/qla2xxx/qla_dfs.c2
-rw-r--r--drivers/scsi/qla4xxx/ql4_isr.c3
-rw-r--r--drivers/scsi/qlogicpti.c12
-rw-r--r--drivers/scsi/scsi_debug.c2
-rw-r--r--drivers/scsi/scsi_lib.c8
-rw-r--r--drivers/scsi/scsi_transport_iscsi.c4
-rw-r--r--drivers/scsi/sd.c3
-rw-r--r--drivers/scsi/ses.c126
-rw-r--r--drivers/scsi/st.c11
-rw-r--r--drivers/scsi/st.h1
-rw-r--r--drivers/scsi/stex.c44
-rw-r--r--drivers/serial/atmel_serial.c2
-rw-r--r--drivers/spi/atmel_spi.c10
-rw-r--r--drivers/spi/pxa2xx_spi.c41
-rw-r--r--drivers/ssb/Kconfig6
-rw-r--r--drivers/ssb/Makefile1
-rw-r--r--drivers/ssb/driver_chipcommon.c65
-rw-r--r--drivers/ssb/driver_extif.c25
-rw-r--r--drivers/ssb/driver_pcicore.c45
-rw-r--r--drivers/ssb/embedded.c132
-rw-r--r--drivers/ssb/main.c4
-rw-r--r--drivers/thermal/thermal.c39
-rw-r--r--drivers/uio/uio.c54
-rw-r--r--drivers/usb/class/cdc-acm.c10
-rw-r--r--drivers/usb/class/usblp.c1
-rw-r--r--drivers/usb/core/quirks.c12
-rw-r--r--drivers/usb/gadget/ether.c1
-rw-r--r--drivers/usb/gadget/printer.c2
-rw-r--r--drivers/usb/host/Kconfig5
-rw-r--r--drivers/usb/host/ehci-hcd.c26
-rw-r--r--drivers/usb/host/sl811-hcd.c1
-rw-r--r--drivers/usb/host/u132-hcd.c15
-rw-r--r--drivers/usb/misc/ldusb.c2
-rw-r--r--drivers/usb/misc/trancevibrator.c4
-rw-r--r--drivers/usb/serial/ftdi_sio.c4
-rw-r--r--drivers/usb/serial/option.c43
-rw-r--r--drivers/usb/serial/sierra.c1
-rw-r--r--drivers/usb/storage/protocol.c27
-rw-r--r--drivers/usb/storage/transport.c11
-rw-r--r--drivers/usb/storage/unusual_devs.h34
-rw-r--r--drivers/video/aty/atyfb_base.c64
-rw-r--r--drivers/video/cg14.c1
-rw-r--r--drivers/video/chipsfb.c2
-rw-r--r--drivers/video/nvidia/nvidia.c2
-rw-r--r--drivers/video/pxafb.c8
-rw-r--r--drivers/video/sbuslib.c1
-rw-r--r--drivers/video/uvesafb.c2
-rw-r--r--drivers/watchdog/Kconfig25
-rw-r--r--drivers/watchdog/Makefile2
-rw-r--r--drivers/watchdog/bfin_wdt.c7
-rw-r--r--drivers/watchdog/hpwdt.c926
-rw-r--r--drivers/watchdog/mtx-1_wdt.c35
-rw-r--r--drivers/watchdog/sb_wdog.c353
-rw-r--r--fs/bio.c2
-rw-r--r--fs/block_dev.c201
-rw-r--r--fs/dlm/rcom.c2
-rw-r--r--fs/efs/dir.c2
-rw-r--r--fs/efs/efs.h140
-rw-r--r--fs/efs/file.c2
-rw-r--r--fs/efs/inode.c4
-rw-r--r--fs/efs/namei.c2
-rw-r--r--fs/efs/super.c7
-rw-r--r--fs/efs/symlink.c2
-rw-r--r--fs/fuse/dir.c2
-rw-r--r--fs/lockd/svc.c2
-rw-r--r--fs/nfs/callback.c3
-rw-r--r--fs/nfs/callback_xdr.c6
-rw-r--r--fs/nfs/delegation.c2
-rw-r--r--fs/nfs/idmap.c2
-rw-r--r--fs/nfs/nfs4state.c2
-rw-r--r--fs/nfsd/nfsfh.c2
-rw-r--r--fs/proc/base.c1
-rw-r--r--fs/proc/task_mmu.c2
-rw-r--r--fs/ufs/util.h2
-rw-r--r--include/asm-arm/arch-pxa/regs-ssp.h1
-rw-r--r--include/asm-arm/mach/arch.h2
-rw-r--r--include/asm-frv/unistd.h4
-rw-r--r--include/asm-generic/percpu.h2
-rw-r--r--include/asm-generic/vmlinux.lds.h3
-rw-r--r--include/asm-h8300/hardirq.h2
-rw-r--r--include/asm-h8300/irq.h19
-rw-r--r--include/asm-h8300/uaccess.h4
-rw-r--r--include/asm-mips/mach-db1x00/db1200.h1
-rw-r--r--include/asm-mips/mach-db1x00/db1x00.h1
-rw-r--r--include/asm-mips/mach-ip27/dma-coherence.h2
-rw-r--r--include/asm-mips/mach-pb1x00/pb1200.h1
-rw-r--r--include/asm-mips/mach-pb1x00/pb1550.h1
-rw-r--r--include/asm-mips/qemu.h30
-rw-r--r--include/asm-mips/sni.h7
-rw-r--r--include/asm-mips/unistd.h21
-rw-r--r--include/asm-mn10300/param.h2
-rw-r--r--include/asm-mn10300/socket.h2
-rw-r--r--include/asm-powerpc/percpu.h2
-rw-r--r--include/asm-powerpc/spu.h3
-rw-r--r--include/asm-s390/bitops.h20
-rw-r--r--include/asm-sparc64/ptrace.h2
-rw-r--r--include/asm-sparc64/reboot.h6
-rw-r--r--include/asm-sparc64/syscalls.h13
-rw-r--r--include/asm-sparc64/system.h1
-rw-r--r--include/asm-x86/desc_64.h1
-rw-r--r--include/asm-x86/i387.h1
-rw-r--r--include/asm-x86/pgtable_64.h2
-rw-r--r--include/asm-x86/processor.h5
-rw-r--r--include/asm-xtensa/cacheflush.h2
-rw-r--r--include/asm-xtensa/coprocessor.h214
-rw-r--r--include/asm-xtensa/elf.h110
-rw-r--r--include/asm-xtensa/module.h4
-rw-r--r--include/asm-xtensa/pgalloc.h2
-rw-r--r--include/asm-xtensa/pgtable.h8
-rw-r--r--include/asm-xtensa/processor.h13
-rw-r--r--include/asm-xtensa/ptrace.h44
-rw-r--r--include/asm-xtensa/regs.h9
-rw-r--r--include/asm-xtensa/sigcontext.h4
-rw-r--r--include/asm-xtensa/stat.h36
-rw-r--r--include/asm-xtensa/system.h39
-rw-r--r--include/asm-xtensa/thread_info.h21
-rw-r--r--include/asm-xtensa/timex.h8
-rw-r--r--include/asm-xtensa/uaccess.h99
-rw-r--r--include/asm-xtensa/variant-fsf/tie-asm.h70
-rw-r--r--include/asm-xtensa/variant-fsf/tie.h75
-rw-r--r--include/linux/Kbuild2
-rw-r--r--include/linux/aio.h1
-rw-r--r--include/linux/ata.h5
-rw-r--r--include/linux/bio.h1
-rw-r--r--include/linux/blkdev.h8
-rw-r--r--include/linux/cgroup.h50
-rw-r--r--include/linux/efs_dir.h42
-rw-r--r--include/linux/efs_fs.h56
-rw-r--r--include/linux/efs_fs_i.h68
-rw-r--r--include/linux/fs.h1
-rw-r--r--include/linux/futex.h1
-rw-r--r--include/linux/hdsmart.h4
-rw-r--r--include/linux/i2c.h11
-rw-r--r--include/linux/init.h2
-rw-r--r--include/linux/iocontext.h2
-rw-r--r--include/linux/libata.h31
-rw-r--r--include/linux/memcontrol.h3
-rw-r--r--include/linux/mm.h8
-rw-r--r--include/linux/netfilter.h2
-rw-r--r--include/linux/netfilter/Kbuild2
-rw-r--r--include/linux/netfilter/xt_hashlimit.h1
-rw-r--r--include/linux/page-flags.h4
-rw-r--r--include/linux/pci_ids.h7
-rw-r--r--include/linux/pm.h9
-rw-r--r--include/linux/skbuff.h2
-rw-r--r--include/linux/ssb/ssb.h12
-rw-r--r--include/linux/ssb/ssb_driver_chipcommon.h18
-rw-r--r--include/linux/ssb/ssb_driver_extif.h18
-rw-r--r--include/linux/ssb/ssb_driver_pci.h5
-rw-r--r--include/linux/ssb/ssb_embedded.h18
-rw-r--r--include/linux/videodev.h1
-rw-r--r--include/linux/videodev2.h1
-rw-r--r--include/media/ir-common.h1
-rw-r--r--include/media/v4l2-common.h2
-rw-r--r--include/media/v4l2-dev.h2
-rw-r--r--include/media/videobuf-core.h2
-rw-r--r--include/media/videobuf-vmalloc.h2
-rw-r--r--include/net/ip6_tunnel.h2
-rw-r--r--include/net/sock.h1
-rw-r--r--include/sound/opl3.h9
-rw-r--r--init/Kconfig8
-rw-r--r--kernel/auditsc.c5
-rw-r--r--kernel/cgroup.c153
-rw-r--r--kernel/futex.c50
-rw-r--r--kernel/futex_compat.c9
-rw-r--r--kernel/irq/chip.c20
-rw-r--r--kernel/irq/spurious.c3
-rw-r--r--kernel/marker.c4
-rw-r--r--kernel/module.c7
-rw-r--r--kernel/power/disk.c4
-rw-r--r--kernel/power/snapshot.c42
-rw-r--r--kernel/sched.c5
-rw-r--r--kernel/time/timer_list.c4
-rw-r--r--lib/Kconfig.debug4
-rw-r--r--lib/vsprintf.c2
-rw-r--r--mm/hugetlb.c2
-rw-r--r--mm/internal.h13
-rw-r--r--mm/memcontrol.c5
-rw-r--r--mm/page_alloc.c4
-rw-r--r--mm/slub.c87
-rw-r--r--net/9p/trans_virtio.c5
-rw-r--r--net/ax25/ax25_out.c13
-rw-r--r--net/bluetooth/hci_conn.c1
-rw-r--r--net/bluetooth/hci_core.c5
-rw-r--r--net/bluetooth/hci_sysfs.c24
-rw-r--r--net/bridge/netfilter/ebt_dnat.c4
-rw-r--r--net/bridge/netfilter/ebt_redirect.c4
-rw-r--r--net/bridge/netfilter/ebt_snat.c4
-rw-r--r--net/core/dev.c2
-rw-r--r--net/core/neighbour.c19
-rw-r--r--net/core/rtnetlink.c63
-rw-r--r--net/ipv4/arp.c3
-rw-r--r--net/ipv4/fib_hash.c10
-rw-r--r--net/ipv4/ip_gre.c12
-rw-r--r--net/ipv4/ipconfig.c2
-rw-r--r--net/ipv4/ipip.c12
-rw-r--r--net/ipv4/netfilter/arpt_mangle.c2
-rw-r--r--net/ipv4/netfilter/ip_queue.c12
-rw-r--r--net/ipv4/tcp_ipv4.c2
-rw-r--r--net/ipv6/af_inet6.c8
-rw-r--r--net/ipv6/ip6_fib.c2
-rw-r--r--net/ipv6/ip6_tunnel.c16
-rw-r--r--net/ipv6/netfilter/ip6_queue.c10
-rw-r--r--net/ipv6/sit.c12
-rw-r--r--net/mac80211/ieee80211.c5
-rw-r--r--net/netfilter/nfnetlink_queue.c10
-rw-r--r--net/netfilter/xt_hashlimit.c3
-rw-r--r--net/netfilter/xt_iprange.c2
-rw-r--r--net/netfilter/xt_u32.c11
-rw-r--r--net/netlabel/netlabel_cipso_v4.c45
-rw-r--r--net/netlabel/netlabel_domainhash.c2
-rw-r--r--net/netlabel/netlabel_mgmt.c81
-rw-r--r--net/netlabel/netlabel_unlabeled.c92
-rw-r--r--net/netlabel/netlabel_user.c2
-rw-r--r--net/rfkill/rfkill.c2
-rw-r--r--net/rxrpc/ar-accept.c3
-rw-r--r--net/rxrpc/ar-ack.c3
-rw-r--r--net/sctp/socket.c2
-rw-r--r--net/sunrpc/svcsock.c6
-rw-r--r--net/xfrm/xfrm_policy.c20
-rw-r--r--scripts/kconfig/symbol.c34
-rwxr-xr-xscripts/kernel-doc6
-rw-r--r--scripts/mod/modpost.c2
-rw-r--r--security/commoncap.c2
-rw-r--r--security/smack/smack_lsm.c123
-rw-r--r--security/smack/smackfs.c61
-rw-r--r--sound/drivers/opl3/opl3_synth.c8
-rw-r--r--sound/pci/bt87x.c9
-rw-r--r--sound/pci/hda/hda_codec.c14
-rw-r--r--sound/pci/hda/hda_intel.c23
-rw-r--r--sound/pci/hda/hda_proc.c3
-rw-r--r--sound/pci/hda/patch_conexant.c7
-rw-r--r--sound/pci/hda/patch_realtek.c8
-rw-r--r--sound/pci/oxygen/oxygen.c35
-rw-r--r--sound/pci/oxygen/oxygen_lib.c10
-rw-r--r--sound/pci/oxygen/oxygen_pcm.c2
-rw-r--r--sound/pci/rme9652/hdsp.c7
-rw-r--r--sound/soc/fsl/mpc8610_hpcd.c2
-rw-r--r--sound/usb/caiaq/caiaq-device.c6
-rw-r--r--sound/usb/usbmidi.c19
690 files changed, 18261 insertions, 7401 deletions
diff --git a/Documentation/atomic_ops.txt b/Documentation/atomic_ops.txt
index f20c10c2858f..4ef245010457 100644
--- a/Documentation/atomic_ops.txt
+++ b/Documentation/atomic_ops.txt
@@ -186,7 +186,8 @@ If the atomic value v is not equal to u, this function adds a to v, and
186returns non zero. If v is equal to u then it returns zero. This is done as 186returns non zero. If v is equal to u then it returns zero. This is done as
187an atomic operation. 187an atomic operation.
188 188
189atomic_add_unless requires explicit memory barriers around the operation. 189atomic_add_unless requires explicit memory barriers around the operation
190unless it fails (returns 0).
190 191
191atomic_inc_not_zero, equivalent to atomic_add_unless(v, 1, 0) 192atomic_inc_not_zero, equivalent to atomic_add_unless(v, 1, 0)
192 193
diff --git a/Documentation/cgroups.txt b/Documentation/cgroups.txt
index 42d7c4cb39cd..31d12e21ff8a 100644
--- a/Documentation/cgroups.txt
+++ b/Documentation/cgroups.txt
@@ -28,7 +28,7 @@ CONTENTS:
284. Questions 284. Questions
29 29
301. Control Groups 301. Control Groups
31========== 31=================
32 32
331.1 What are cgroups ? 331.1 What are cgroups ?
34---------------------- 34----------------------
@@ -143,10 +143,10 @@ proliferation of such cgroups.
143 143
144Also lets say that the administrator would like to give enhanced network 144Also lets say that the administrator would like to give enhanced network
145access temporarily to a student's browser (since it is night and the user 145access temporarily to a student's browser (since it is night and the user
146wants to do online gaming :) OR give one of the students simulation 146wants to do online gaming :)) OR give one of the students simulation
147apps enhanced CPU power, 147apps enhanced CPU power,
148 148
149With ability to write pids directly to resource classes, its just a 149With ability to write pids directly to resource classes, it's just a
150matter of : 150matter of :
151 151
152 # echo pid > /mnt/network/<new_class>/tasks 152 # echo pid > /mnt/network/<new_class>/tasks
@@ -227,10 +227,13 @@ Each cgroup is represented by a directory in the cgroup file system
227containing the following files describing that cgroup: 227containing the following files describing that cgroup:
228 228
229 - tasks: list of tasks (by pid) attached to that cgroup 229 - tasks: list of tasks (by pid) attached to that cgroup
230 - notify_on_release flag: run /sbin/cgroup_release_agent on exit? 230 - releasable flag: cgroup currently removeable?
231 - notify_on_release flag: run the release agent on exit?
232 - release_agent: the path to use for release notifications (this file
233 exists in the top cgroup only)
231 234
232Other subsystems such as cpusets may add additional files in each 235Other subsystems such as cpusets may add additional files in each
233cgroup dir 236cgroup dir.
234 237
235New cgroups are created using the mkdir system call or shell 238New cgroups are created using the mkdir system call or shell
236command. The properties of a cgroup, such as its flags, are 239command. The properties of a cgroup, such as its flags, are
@@ -257,7 +260,7 @@ performance.
257To allow access from a cgroup to the css_sets (and hence tasks) 260To allow access from a cgroup to the css_sets (and hence tasks)
258that comprise it, a set of cg_cgroup_link objects form a lattice; 261that comprise it, a set of cg_cgroup_link objects form a lattice;
259each cg_cgroup_link is linked into a list of cg_cgroup_links for 262each cg_cgroup_link is linked into a list of cg_cgroup_links for
260a single cgroup on its cont_link_list field, and a list of 263a single cgroup on its cgrp_link_list field, and a list of
261cg_cgroup_links for a single css_set on its cg_link_list. 264cg_cgroup_links for a single css_set on its cg_link_list.
262 265
263Thus the set of tasks in a cgroup can be listed by iterating over 266Thus the set of tasks in a cgroup can be listed by iterating over
@@ -271,9 +274,6 @@ for cgroups, with a minimum of additional kernel code.
2711.4 What does notify_on_release do ? 2741.4 What does notify_on_release do ?
272------------------------------------ 275------------------------------------
273 276
274*** notify_on_release is disabled in the current patch set. It will be
275*** reactivated in a future patch in a less-intrusive manner
276
277If the notify_on_release flag is enabled (1) in a cgroup, then 277If the notify_on_release flag is enabled (1) in a cgroup, then
278whenever the last task in the cgroup leaves (exits or attaches to 278whenever the last task in the cgroup leaves (exits or attaches to
279some other cgroup) and the last child cgroup of that cgroup 279some other cgroup) and the last child cgroup of that cgroup
@@ -360,8 +360,8 @@ Now you want to do something with this cgroup.
360 360
361In this directory you can find several files: 361In this directory you can find several files:
362# ls 362# ls
363notify_on_release release_agent tasks 363notify_on_release releasable tasks
364(plus whatever files are added by the attached subsystems) 364(plus whatever files added by the attached subsystems)
365 365
366Now attach your shell to this cgroup: 366Now attach your shell to this cgroup:
367# /bin/echo $$ > tasks 367# /bin/echo $$ > tasks
@@ -404,19 +404,13 @@ with a subsystem id which will be assigned by the cgroup system.
404Other fields in the cgroup_subsys object include: 404Other fields in the cgroup_subsys object include:
405 405
406- subsys_id: a unique array index for the subsystem, indicating which 406- subsys_id: a unique array index for the subsystem, indicating which
407 entry in cgroup->subsys[] this subsystem should be 407 entry in cgroup->subsys[] this subsystem should be managing.
408 managing. Initialized by cgroup_register_subsys(); prior to this
409 it should be initialized to -1
410 408
411- hierarchy: an index indicating which hierarchy, if any, this 409- name: should be initialized to a unique subsystem name. Should be
412 subsystem is currently attached to. If this is -1, then the 410 no longer than MAX_CGROUP_TYPE_NAMELEN.
413 subsystem is not attached to any hierarchy, and all tasks should be
414 considered to be members of the subsystem's top_cgroup. It should
415 be initialized to -1.
416 411
417- name: should be initialized to a unique subsystem name prior to 412- early_init: indicate if the subsystem needs early initialization
418 calling cgroup_register_subsystem. Should be no longer than 413 at system boot.
419 MAX_CGROUP_TYPE_NAMELEN
420 414
421Each cgroup object created by the system has an array of pointers, 415Each cgroup object created by the system has an array of pointers,
422indexed by subsystem id; this pointer is entirely managed by the 416indexed by subsystem id; this pointer is entirely managed by the
@@ -434,8 +428,6 @@ situation.
434See kernel/cgroup.c for more details. 428See kernel/cgroup.c for more details.
435 429
436Subsystems can take/release the cgroup_mutex via the functions 430Subsystems can take/release the cgroup_mutex via the functions
437cgroup_lock()/cgroup_unlock(), and can
438take/release the callback_mutex via the functions
439cgroup_lock()/cgroup_unlock(). 431cgroup_lock()/cgroup_unlock().
440 432
441Accessing a task's cgroup pointer may be done in the following ways: 433Accessing a task's cgroup pointer may be done in the following ways:
@@ -444,7 +436,7 @@ Accessing a task's cgroup pointer may be done in the following ways:
444- inside an rcu_read_lock() section via rcu_dereference() 436- inside an rcu_read_lock() section via rcu_dereference()
445 437
4463.3 Subsystem API 4383.3 Subsystem API
447-------------------------- 439-----------------
448 440
449Each subsystem should: 441Each subsystem should:
450 442
@@ -455,7 +447,8 @@ Each subsystem may export the following methods. The only mandatory
455methods are create/destroy. Any others that are null are presumed to 447methods are create/destroy. Any others that are null are presumed to
456be successful no-ops. 448be successful no-ops.
457 449
458struct cgroup_subsys_state *create(struct cgroup *cont) 450struct cgroup_subsys_state *create(struct cgroup_subsys *ss,
451 struct cgroup *cgrp)
459(cgroup_mutex held by caller) 452(cgroup_mutex held by caller)
460 453
461Called to create a subsystem state object for a cgroup. The 454Called to create a subsystem state object for a cgroup. The
@@ -470,7 +463,7 @@ identified by the passed cgroup object having a NULL parent (since
470it's the root of the hierarchy) and may be an appropriate place for 463it's the root of the hierarchy) and may be an appropriate place for
471initialization code. 464initialization code.
472 465
473void destroy(struct cgroup *cont) 466void destroy(struct cgroup_subsys *ss, struct cgroup *cgrp)
474(cgroup_mutex held by caller) 467(cgroup_mutex held by caller)
475 468
476The cgroup system is about to destroy the passed cgroup; the subsystem 469The cgroup system is about to destroy the passed cgroup; the subsystem
@@ -481,7 +474,14 @@ cgroup->parent is still valid. (Note - can also be called for a
481newly-created cgroup if an error occurs after this subsystem's 474newly-created cgroup if an error occurs after this subsystem's
482create() method has been called for the new cgroup). 475create() method has been called for the new cgroup).
483 476
484int can_attach(struct cgroup_subsys *ss, struct cgroup *cont, 477void pre_destroy(struct cgroup_subsys *ss, struct cgroup *cgrp);
478(cgroup_mutex held by caller)
479
480Called before checking the reference count on each subsystem. This may
481be useful for subsystems which have some extra references even if
482there are not tasks in the cgroup.
483
484int can_attach(struct cgroup_subsys *ss, struct cgroup *cgrp,
485 struct task_struct *task) 485 struct task_struct *task)
486(cgroup_mutex held by caller) 486(cgroup_mutex held by caller)
487 487
@@ -492,8 +492,8 @@ unspecified task can be moved into the cgroup. Note that this isn't
492called on a fork. If this method returns 0 (success) then this should 492called on a fork. If this method returns 0 (success) then this should
493remain valid while the caller holds cgroup_mutex. 493remain valid while the caller holds cgroup_mutex.
494 494
495void attach(struct cgroup_subsys *ss, struct cgroup *cont, 495void attach(struct cgroup_subsys *ss, struct cgroup *cgrp,
496 struct cgroup *old_cont, struct task_struct *task) 496 struct cgroup *old_cgrp, struct task_struct *task)
497 497
498Called after the task has been attached to the cgroup, to allow any 498Called after the task has been attached to the cgroup, to allow any
499post-attachment activity that requires memory allocations or blocking. 499post-attachment activity that requires memory allocations or blocking.
@@ -505,9 +505,9 @@ registration for all existing tasks.
505 505
506void exit(struct cgroup_subsys *ss, struct task_struct *task) 506void exit(struct cgroup_subsys *ss, struct task_struct *task)
507 507
508Called during task exit 508Called during task exit.
509 509
510int populate(struct cgroup_subsys *ss, struct cgroup *cont) 510int populate(struct cgroup_subsys *ss, struct cgroup *cgrp)
511 511
512Called after creation of a cgroup to allow a subsystem to populate 512Called after creation of a cgroup to allow a subsystem to populate
513the cgroup directory with file entries. The subsystem should make 513the cgroup directory with file entries. The subsystem should make
@@ -516,7 +516,7 @@ include/linux/cgroup.h for details). Note that although this
516method can return an error code, the error code is currently not 516method can return an error code, the error code is currently not
517always handled well. 517always handled well.
518 518
519void post_clone(struct cgroup_subsys *ss, struct cgroup *cont) 519void post_clone(struct cgroup_subsys *ss, struct cgroup *cgrp)
520 520
521Called at the end of cgroup_clone() to do any paramater 521Called at the end of cgroup_clone() to do any paramater
522initialization which might be required before a task could attach. For 522initialization which might be required before a task could attach. For
diff --git a/Documentation/controllers/memory.txt b/Documentation/controllers/memory.txt
index b5bbea92a61a..6015347b41e2 100644
--- a/Documentation/controllers/memory.txt
+++ b/Documentation/controllers/memory.txt
@@ -170,14 +170,14 @@ NOTE: We can use a suffix (k, K, m, M, g or G) to indicate values in kilo,
170mega or gigabytes. 170mega or gigabytes.
171 171
172# cat /cgroups/0/memory.limit_in_bytes 172# cat /cgroups/0/memory.limit_in_bytes
1734194304 Bytes 1734194304
174 174
175NOTE: The interface has now changed to display the usage in bytes 175NOTE: The interface has now changed to display the usage in bytes
176instead of pages 176instead of pages
177 177
178We can check the usage: 178We can check the usage:
179# cat /cgroups/0/memory.usage_in_bytes 179# cat /cgroups/0/memory.usage_in_bytes
1801216512 Bytes 1801216512
181 181
182A successful write to this file does not guarantee a successful set of 182A successful write to this file does not guarantee a successful set of
183this limit to the value written into the file. This can be due to a 183this limit to the value written into the file. This can be due to a
@@ -187,7 +187,7 @@ this file after a write to guarantee the value committed by the kernel.
187 187
188# echo -n 1 > memory.limit_in_bytes 188# echo -n 1 > memory.limit_in_bytes
189# cat memory.limit_in_bytes 189# cat memory.limit_in_bytes
1904096 Bytes 1904096
191 191
192The memory.failcnt field gives the number of times that the cgroup limit was 192The memory.failcnt field gives the number of times that the cgroup limit was
193exceeded. 193exceeded.
@@ -233,13 +233,6 @@ cgroup might have some charge associated with it, even though all
233tasks have migrated away from it. Such charges are automatically dropped at 233tasks have migrated away from it. Such charges are automatically dropped at
234rmdir() if there are no tasks. 234rmdir() if there are no tasks.
235 235
2364.4 Choosing what to account -- Page Cache (unmapped) vs RSS (mapped)?
237
238The type of memory accounted by the cgroup can be limited to just
239mapped pages by writing "1" to memory.control_type field
240
241echo -n 1 > memory.control_type
242
2435. TODO 2365. TODO
244 237
2451. Add support for accounting huge pages (as a separate controller) 2381. Add support for accounting huge pages (as a separate controller)
@@ -262,18 +255,19 @@ References
2623. Emelianov, Pavel. Resource controllers based on process cgroups 2553. Emelianov, Pavel. Resource controllers based on process cgroups
263 http://lkml.org/lkml/2007/3/6/198 256 http://lkml.org/lkml/2007/3/6/198
2644. Emelianov, Pavel. RSS controller based on process cgroups (v2) 2574. Emelianov, Pavel. RSS controller based on process cgroups (v2)
265 http://lkml.org/lkml/2007/4/9/74 258 http://lkml.org/lkml/2007/4/9/78
2665. Emelianov, Pavel. RSS controller based on process cgroups (v3) 2595. Emelianov, Pavel. RSS controller based on process cgroups (v3)
267 http://lkml.org/lkml/2007/5/30/244 260 http://lkml.org/lkml/2007/5/30/244
2686. Menage, Paul. Control Groups v10, http://lwn.net/Articles/236032/ 2616. Menage, Paul. Control Groups v10, http://lwn.net/Articles/236032/
2697. Vaidyanathan, Srinivasan, Control Groups: Pagecache accounting and control 2627. Vaidyanathan, Srinivasan, Control Groups: Pagecache accounting and control
270 subsystem (v3), http://lwn.net/Articles/235534/ 263 subsystem (v3), http://lwn.net/Articles/235534/
2718. Singh, Balbir. RSS controller V2 test results (lmbench), 2648. Singh, Balbir. RSS controller v2 test results (lmbench),
272 http://lkml.org/lkml/2007/5/17/232 265 http://lkml.org/lkml/2007/5/17/232
2739. Singh, Balbir. RSS controller V2 AIM9 results 2669. Singh, Balbir. RSS controller v2 AIM9 results
274 http://lkml.org/lkml/2007/5/18/1 267 http://lkml.org/lkml/2007/5/18/1
27510. Singh, Balbir. Memory controller v6 results, 26810. Singh, Balbir. Memory controller v6 test results,
276 http://lkml.org/lkml/2007/8/19/36 269 http://lkml.org/lkml/2007/8/19/36
27711. Singh, Balbir. Memory controller v6, http://lkml.org/lkml/2007/8/17/69 27011. Singh, Balbir. Memory controller introduction (v6),
271 http://lkml.org/lkml/2007/8/17/69
27812. Corbet, Jonathan, Controlling memory use in cgroups, 27212. Corbet, Jonathan, Controlling memory use in cgroups,
279 http://lwn.net/Articles/243795/ 273 http://lwn.net/Articles/243795/
diff --git a/Documentation/cpusets.txt b/Documentation/cpusets.txt
index 43db6fe12814..ad2bb3b3acc1 100644
--- a/Documentation/cpusets.txt
+++ b/Documentation/cpusets.txt
@@ -209,7 +209,7 @@ and name space for cpusets, with a minimum of additional kernel code.
209The cpus and mems files in the root (top_cpuset) cpuset are 209The cpus and mems files in the root (top_cpuset) cpuset are
210read-only. The cpus file automatically tracks the value of 210read-only. The cpus file automatically tracks the value of
211cpu_online_map using a CPU hotplug notifier, and the mems file 211cpu_online_map using a CPU hotplug notifier, and the mems file
212automatically tracks the value of node_states[N_MEMORY]--i.e., 212automatically tracks the value of node_states[N_HIGH_MEMORY]--i.e.,
213nodes with memory--using the cpuset_track_online_nodes() hook. 213nodes with memory--using the cpuset_track_online_nodes() hook.
214 214
215 215
diff --git a/Documentation/hwmon/adt7473 b/Documentation/hwmon/adt7473
new file mode 100644
index 000000000000..22d8b19046ab
--- /dev/null
+++ b/Documentation/hwmon/adt7473
@@ -0,0 +1,79 @@
1Kernel driver adt7473
2======================
3
4Supported chips:
5 * Analog Devices ADT7473
6 Prefix: 'adt7473'
7 Addresses scanned: I2C 0x2C, 0x2D, 0x2E
8 Datasheet: Publicly available at the Analog Devices website
9
10Author: Darrick J. Wong
11
12Description
13-----------
14
15This driver implements support for the Analog Devices ADT7473 chip family.
16
17The LM85 uses the 2-wire interface compatible with the SMBUS 2.0
18specification. Using an analog to digital converter it measures three (3)
19temperatures and two (2) voltages. It has three (3) 16-bit counters for
20measuring fan speed. There are three (3) PWM outputs that can be used
21to control fan speed.
22
23A sophisticated control system for the PWM outputs is designed into the
24LM85 that allows fan speed to be adjusted automatically based on any of the
25three temperature sensors. Each PWM output is individually adjustable and
26programmable. Once configured, the ADT7473 will adjust the PWM outputs in
27response to the measured temperatures without further host intervention.
28This feature can also be disabled for manual control of the PWM's.
29
30Each of the measured inputs (voltage, temperature, fan speed) has
31corresponding high/low limit values. The ADT7473 will signal an ALARM if
32any measured value exceeds either limit.
33
34The ADT7473 samples all inputs continuously. The driver will not read
35the registers more often than once every other second. Further,
36configuration data is only read once per minute.
37
38Special Features
39----------------
40
41The ADT7473 have a 10-bit ADC and can therefore measure temperatures
42with 0.25 degC resolution. Temperature readings can be configured either
43for twos complement format or "Offset 64" format, wherein 63 is subtracted
44from the raw value to get the temperature value.
45
46The Analog Devices datasheet is very detailed and describes a procedure for
47determining an optimal configuration for the automatic PWM control.
48
49Hardware Configurations
50-----------------------
51
52The ADT7473 chips have an optional SMBALERT output that can be used to
53signal the chipset in case a limit is exceeded or the temperature sensors
54fail. Individual sensor interrupts can be masked so they won't trigger
55SMBALERT. The SMBALERT output if configured replaces the PWM2 function.
56
57Configuration Notes
58-------------------
59
60Besides standard interfaces driver adds the following:
61
62* PWM Control
63
64* pwm#_auto_point1_pwm and pwm#_auto_point1_temp and
65* pwm#_auto_point2_pwm and pwm#_auto_point2_temp -
66
67point1: Set the pwm speed at a lower temperature bound.
68point2: Set the pwm speed at a higher temperature bound.
69
70The ADT7473 will scale the pwm between the lower and higher pwm speed when
71the temperature is between the two temperature boundaries. PWM values range
72from 0 (off) to 255 (full speed).
73
74Notes
75-----
76
77The NVIDIA binary driver presents an ADT7473 chip via an on-card i2c bus.
78Unfortunately, they fail to set the i2c adapter class, so this driver may
79fail to find the chip until the nvidia driver is patched.
diff --git a/Documentation/hwmon/coretemp b/Documentation/hwmon/coretemp
index 170bf862437b..dbbe6c7025b0 100644
--- a/Documentation/hwmon/coretemp
+++ b/Documentation/hwmon/coretemp
@@ -4,9 +4,10 @@ Kernel driver coretemp
4Supported chips: 4Supported chips:
5 * All Intel Core family 5 * All Intel Core family
6 Prefix: 'coretemp' 6 Prefix: 'coretemp'
7 CPUID: family 0x6, models 0xe, 0xf, 0x16 7 CPUID: family 0x6, models 0xe, 0xf, 0x16, 0x17
8 Datasheet: Intel 64 and IA-32 Architectures Software Developer's Manual 8 Datasheet: Intel 64 and IA-32 Architectures Software Developer's Manual
9 Volume 3A: System Programming Guide 9 Volume 3A: System Programming Guide
10 http://softwarecommunity.intel.com/Wiki/Mobility/720.htm
10 11
11Author: Rudolf Marek 12Author: Rudolf Marek
12 13
@@ -25,7 +26,8 @@ may be raised, if the temperature grows enough (more than TjMax) to trigger
25the Out-Of-Spec bit. Following table summarizes the exported sysfs files: 26the Out-Of-Spec bit. Following table summarizes the exported sysfs files:
26 27
27temp1_input - Core temperature (in millidegrees Celsius). 28temp1_input - Core temperature (in millidegrees Celsius).
28temp1_crit - Maximum junction temperature (in millidegrees Celsius). 29temp1_max - All cooling devices should be turned on (on Core2).
30temp1_crit - Maximum junction temperature (in millidegrees Celsius).
29temp1_crit_alarm - Set when Out-of-spec bit is set, never clears. 31temp1_crit_alarm - Set when Out-of-spec bit is set, never clears.
30 Correct CPU operation is no longer guaranteed. 32 Correct CPU operation is no longer guaranteed.
31temp1_label - Contains string "Core X", where X is processor 33temp1_label - Contains string "Core X", where X is processor
diff --git a/Documentation/i2c/busses/i2c-i801 b/Documentation/i2c/busses/i2c-i801
index 3bd958360159..c31e0291e167 100644
--- a/Documentation/i2c/busses/i2c-i801
+++ b/Documentation/i2c/busses/i2c-i801
@@ -12,8 +12,9 @@ Supported adapters:
12 * Intel 82801G (ICH7) 12 * Intel 82801G (ICH7)
13 * Intel 631xESB/632xESB (ESB2) 13 * Intel 631xESB/632xESB (ESB2)
14 * Intel 82801H (ICH8) 14 * Intel 82801H (ICH8)
15 * Intel ICH9 15 * Intel 82801I (ICH9)
16 * Intel Tolapai 16 * Intel Tolapai
17 * Intel ICH10
17 Datasheets: Publicly available at the Intel website 18 Datasheets: Publicly available at the Intel website
18 19
19Authors: 20Authors:
diff --git a/Documentation/i386/IO-APIC.txt b/Documentation/i386/IO-APIC.txt
index 435e69e6e9aa..f95166645d29 100644
--- a/Documentation/i386/IO-APIC.txt
+++ b/Documentation/i386/IO-APIC.txt
@@ -1,12 +1,14 @@
1Most (all) Intel-MP compliant SMP boards have the so-called 'IO-APIC', 1Most (all) Intel-MP compliant SMP boards have the so-called 'IO-APIC',
2which is an enhanced interrupt controller, it enables us to route 2which is an enhanced interrupt controller. It enables us to route
3hardware interrupts to multiple CPUs, or to CPU groups. 3hardware interrupts to multiple CPUs, or to CPU groups. Without an
4IO-APIC, interrupts from hardware will be delivered only to the
5CPU which boots the operating system (usually CPU#0).
4 6
5Linux supports all variants of compliant SMP boards, including ones with 7Linux supports all variants of compliant SMP boards, including ones with
6multiple IO-APICs. (multiple IO-APICs are used in high-end servers to 8multiple IO-APICs. Multiple IO-APICs are used in high-end servers to
7distribute IRQ load further). 9distribute IRQ load further.
8 10
9There are (a few) known breakages in certain older boards, which bugs are 11There are (a few) known breakages in certain older boards, such bugs are
10usually worked around by the kernel. If your MP-compliant SMP board does 12usually worked around by the kernel. If your MP-compliant SMP board does
11not boot Linux, then consult the linux-smp mailing list archives first. 13not boot Linux, then consult the linux-smp mailing list archives first.
12 14
@@ -28,18 +30,18 @@ If your box boots fine with enabled IO-APIC IRQs, then your
28 hell:~> 30 hell:~>
29 <---------------------------- 31 <----------------------------
30 32
31some interrupts are still listed as 'XT PIC', but this is not a problem, 33Some interrupts are still listed as 'XT PIC', but this is not a problem;
32none of those IRQ sources is performance-critical. 34none of those IRQ sources is performance-critical.
33 35
34 36
35in the unlikely case that your board does not create a working mp-table, 37In the unlikely case that your board does not create a working mp-table,
36you can use the pirq= boot parameter to 'hand-construct' IRQ entries. This 38you can use the pirq= boot parameter to 'hand-construct' IRQ entries. This
37is nontrivial though and cannot be automated. One sample /etc/lilo.conf 39is non-trivial though and cannot be automated. One sample /etc/lilo.conf
38entry: 40entry:
39 41
40 append="pirq=15,11,10" 42 append="pirq=15,11,10"
41 43
42the actual numbers depend on your system, on your PCI cards and on their 44The actual numbers depend on your system, on your PCI cards and on their
43PCI slot position. Usually PCI slots are 'daisy chained' before they are 45PCI slot position. Usually PCI slots are 'daisy chained' before they are
44connected to the PCI chipset IRQ routing facility (the incoming PIRQ1-4 46connected to the PCI chipset IRQ routing facility (the incoming PIRQ1-4
45lines): 47lines):
@@ -54,7 +56,7 @@ lines):
54 PIRQ1 ----| |- `----| |- `----| |- `----| |--------| | 56 PIRQ1 ----| |- `----| |- `----| |- `----| |--------| |
55 `-' `-' `-' `-' `-' 57 `-' `-' `-' `-' `-'
56 58
57every PCI card emits a PCI IRQ, which can be INTA,INTB,INTC,INTD: 59Every PCI card emits a PCI IRQ, which can be INTA, INTB, INTC or INTD:
58 60
59 ,-. 61 ,-.
60 INTD--| | 62 INTD--| |
@@ -95,21 +97,21 @@ card (IRQ11) in Slot3, and have Slot1 empty:
95[value '0' is a generic 'placeholder', reserved for empty (or non-IRQ emitting) 97[value '0' is a generic 'placeholder', reserved for empty (or non-IRQ emitting)
96slots.] 98slots.]
97 99
98generally, it's always possible to find out the correct pirq= settings, just 100Generally, it's always possible to find out the correct pirq= settings, just
99permute all IRQ numbers properly ... it will take some time though. An 101permute all IRQ numbers properly ... it will take some time though. An
100'incorrect' pirq line will cause the booting process to hang, or a device 102'incorrect' pirq line will cause the booting process to hang, or a device
101won't function properly (if it's inserted as eg. a module). 103won't function properly (e.g. if it's inserted as a module).
102 104
103If you have 2 PCI buses, then you can use up to 8 pirq values. Although such 105If you have 2 PCI buses, then you can use up to 8 pirq values, although such
104boards tend to have a good configuration. 106boards tend to have a good configuration.
105 107
106Be prepared that it might happen that you need some strange pirq line: 108Be prepared that it might happen that you need some strange pirq line:
107 109
108 append="pirq=0,0,0,0,0,0,9,11" 110 append="pirq=0,0,0,0,0,0,9,11"
109 111
110use smart try-and-err techniques to find out the correct pirq line ... 112Use smart trial-and-error techniques to find out the correct pirq line ...
111 113
112good luck and mail to linux-smp@vger.kernel.org or 114Good luck and mail to linux-smp@vger.kernel.org or
113linux-kernel@vger.kernel.org if you have any problems that are not covered 115linux-kernel@vger.kernel.org if you have any problems that are not covered
114by this document. 116by this document.
115 117
diff --git a/Documentation/ja_JP/stable_kernel_rules.txt b/Documentation/ja_JP/stable_kernel_rules.txt
index 17d87519e468..b3ffe870de33 100644
--- a/Documentation/ja_JP/stable_kernel_rules.txt
+++ b/Documentation/ja_JP/stable_kernel_rules.txt
@@ -11,69 +11,69 @@ comment or update of this file, please try to update Original(English)
11file at first. 11file at first.
12 12
13================================== 13==================================
14ãÂÂãÂ΋¯ã 14ãれã¯ã
15linux-2.6.24/Documentation/stable_kernel_rules.txt 15linux-2.6.24/Documentation/stable_kernel_rules.txt
16ã®åŒ訳ã§ãÂÂã 16ã®å’Œè¨³ã§ã。
17 17
18翻訳å£ä½Â: JF ãƒÂロã¸ã§ã¯ト < http://www.linux.or.jp/JF/ > 18翻訳団体: JF プロジェクト < http://www.linux.or.jp/JF/ >
19翻訳æÂ¥ï¼š 2007/12/30 19翻訳日: 2007/12/30
20翻訳èÂÂ: Tsugikazu Shibata <tshibata at ab dot jp dot nec dot com> 20翻訳者: Tsugikazu Shibata <tshibata at ab dot jp dot nec dot com>
21æ ¡æ­£èÂÂ: æ­¦äºÂ伸åÂÂãÂÂãÂÂãÂÂ<takei at webmasters dot gr dot jp> 21校正者: 武井伸光ãã‚“ã€<takei at webmasters dot gr dot jp>
22 ãÂÂã­ãÂÂãÂÂã“ (Seiji Kaneko) <skaneko at a2 dot mbn dot or dot jp> 22 ãã­ããã‚“ (Seiji Kaneko) <skaneko at a2 dot mbn dot or dot jp>
23 å°ÂæžÂéÂÂå¸ãÂÂã“ (Masanori Kobayasi) <zap03216 at nifty dot ne dot jp> 23 å°æž— é›…å…¸ãã‚“ (Masanori Kobayasi) <zap03216 at nifty dot ne dot jp>
24 éÂŽå£ãÂÂã“ (Kenji Noguchi) <tokyo246 at gmail dot com> 24 野å£ãã‚“ (Kenji Noguchi) <tokyo246 at gmail dot com>
25 神宮信太郎ãÂÂã“ <jin at libjingu dot jp> 25 神宮信太郎ãã‚“ <jin at libjingu dot jp>
26================================== 26==================================
27 27
28ãšã£ã¨知ãŠãŸãÂÂã£ãŸ Linux 2.6 -stable リリーã¹ã®å¨ã¦ 28ãšã£ã¨çŸ¥ã‚ŠãŸãã£ãŸ Linux 2.6 -stable リリースã®å…¨ã¦
29 29
30"-stable" ツリーã«ã©ã®よã†ãª種類ã®パッãƒÂãÂΌÂ—ã‘入れられるã‹ã€Âã©ã®よã†ãª 30"-stable" ツリーã«ã©ã®ã‚ˆã†ãªç¨®é¡žã®ãƒ‘ッãƒãŒå—ã‘入れられるã‹ã€ã©ã®ã‚ˆã†ãª
31ãÂÂã®ãÂΌÂÂãÂÂå¥ãÂ΋ÂÂãÂ΋ªãÂÂãÂÂãÂÂã«ã¤ãÂÂã¦ã®è¦Âå‡- 31ã‚‚ã®ãŒåã入れられãªãããã«ã¤ãã¦ã®è¦å‰‡-
32 32
33 - 明らã‹ã«正ã—ãÂÂã€Âテストã•れã¦ã„るもã®ã§ãªã‘れã°ãªらãªã„。 33 - 明らã‹ã«æ­£ã—ãã€ãƒ†ã‚¹ãƒˆã•れã¦ã„ã‚‹ã‚‚ã®ã§ãªã‘れã°ãªã‚‰ãªã„。
34 - 文脈(変更行ã®å‰Â後)をå«ã‚Â㦠100 行より大ãÂÂãÂÂã¦ã¯ã„ã‘ãªã„。 34 - 文脈(変更行ã®å‰å¾Œ)ã‚’å«ã‚㦠100 行より大ããã¦ã¯ã„ã‘ãªã„。
35 - ãŸã ä¸ÂÃ¥ÂÂã®ãÂÂã¨ã ãÂÂãÂÂ修正ãÂÂã¦ãÂÂãÂÂã¹ãÂÂã 35 - ãŸã ä¸€å€‹ã®ãã¨ã ãを修正ãã¦ãã‚‹ã¹ã。
36 - 皆を悩ã¾ãÂ݋¦ã„る本物ã®ãƒÂグを修正ã—ãªã‘れã°ãªらãªã„。("ã“れã¯ãƒÂグã§ 36 - 皆を悩ã¾ã›ã¦ã„る本物ã®ãƒã‚°ã‚’修正ã—ãªã‘れã°ãªã‚‰ãªã„。("ã“れã¯ãƒã‚°ã§
37 ãÂÂãÂÂãÂÂãÂÂãÂÂãÂ΋ªãÂÂãÂÂŒ..." ã®ãˆãÂÂãªãÂÂã®ã§ã¯ãªã„) 37 ãã‚‹ãã‚‚ãれãªããŒ..." ã®ã‚ˆããªã‚‚ã®ã§ã¯ãªã„)
38 - ビルドエラー(CONFIG_BROKENã«ãªã£ã¦ã„るもã®を除ãÂÂ), oops, ãƒÂングã€Âデー 38 - ビルドエラー(CONFIG_BROKENã«ãªã£ã¦ã„ã‚‹ã‚‚ã®ã‚’除ã), oops, ãƒãƒ³ã‚°ã€ãƒ‡ãƒ¼
39 タ破壊ã€Âç¾実ã®セキュリティå•Â題ã€ÂãÂÂã®他 "ã‚ã‚ã€Âã“れã¯ダメã ã­"ã¨ã„ㆠ39 タ破壊ã€ç¾å®Ÿã®ã‚»ã‚­ãƒ¥ãƒªãƒ†ã‚£å•題ã€ãã®ä»– "ã‚ã‚ã€ã“れã¯ãƒ€ãƒ¡ã ã­"ã¨ã„ã†
40 よã†ãªもã®を修正ã—ãªã‘れã°ãªらãªã„。短ãÂÂ言ãˆã°ã€Âé‡Â大ãªå•Â題。 40 よã†ãªã‚‚ã®ã‚’修正ã—ãªã‘れã°ãªã‚‰ãªã„。短ã言ãˆã°ã€é‡å¤§ãªå•題。
41 - ã©ã®よã†ã«競åˆ状態ãŒ発生ã™るã‹ã®説明も一緒ã«書ã‹れã¦ã„ãªã„é™Âり〠41 - ã©ã®ã‚ˆã†ã«ç«¶åˆçŠ¶æ…‹ãŒç™ºç”Ÿã™ã‚‹ã‹ã®èª¬æ˜Žã‚‚ä¸€ç·’ã«æ›¸ã‹ã‚Œã¦ã„ãªã„é™ã‚Šã€
42 "ç†論的ã«ã¯競åˆ状態ã«ãªる"よã†ãªもã®ã¯ä¸Âå¯。 42 "ç†è«–çš„ã«ã¯ç«¶åˆçŠ¶æ…‹ã«ãªã‚‹"よã†ãªã‚‚ã®ã¯ä¸å¯ã€‚
43 - ã„ã‹ãªる些細ãª修正もå«ã‚Âるã“ã¨ã¯ã§ãÂÂãªã„。(スペルã®修正ã€Â空白ã®クリー 43 - ã„ã‹ãªã‚‹äº›ç´°ãªä¿®æ­£ã‚‚å«ã‚ã‚‹ã“ã¨ã¯ã§ããªã„。(スペルã®ä¿®æ­£ã€ç©ºç™½ã®ã‚¯ãƒªãƒ¼
44 ンã¢ッãƒÂãªã©) 44 ンアップãªã©)
45 - 対応ã™るサブシステムメンテナãÂΌÂ—ã‘入れãŸもã®ã§ãªã‘れã°ãªらãªã„。 45 - 対応ã™ã‚‹ã‚µãƒ–システムメンテナãŒå—ã‘入れãŸã‚‚ã®ã§ãªã‘れã°ãªã‚‰ãªã„。
46 - Documentation/SubmittingPatches ã®è¦Â則ã«従ã£ãŸもã®ã§ãªã‘れã°ãªらãªã„。 46 - Documentation/SubmittingPatches ã®è¦å‰‡ã«å¾“ã£ãŸã‚‚ã®ã§ãªã‘れã°ãªã‚‰ãªã„。
47 47
48-stable ãƒÂリーã«ãƒÂッãƒÂãÂÂéÂÂ付ãÂÂãÂÂæÂÂçšãÂÂ- 48-stable ツリーã«ãƒ‘ッãƒã‚’é付ãる手続ã-
49 49
50 - 上記ã®è¦Â則ã«従ã£ã¦ã„るã‹を確èªÂã—ãŸ後ã«ã€Âstable@kernel.org ã«パッム50 - 上記ã®è¦å‰‡ã«å¾“ã£ã¦ã„ã‚‹ã‹ã‚’確èªã—ãŸå¾Œã«ã€stable@kernel.org ã«ãƒ‘ッãƒ
51 ãÂÂéÂÂãÂÂã 51 ã‚’éる。
52 - é€Â信者ã¯パッãƒÂãŒキューã«å—ã‘付ã‘られãŸ際ã«ã¯ ACK をã€Âå´下ã•れãŸ場åˆ 52 - é€ä¿¡è€…ã¯ãƒ‘ッãƒãŒã‚­ãƒ¥ãƒ¼ã«å—ã‘付ã‘られãŸéš›ã«ã¯ ACK ã‚’ã€å´ä¸‹ã•れãŸå ´åˆ
53 ã«ã¯ NAK をå—ã‘å–る。ã“ã®åÂÂ応ã¯開発者ãŸã¡ã®スケジュールã«よã£ã¦ã€Â数 53 ã«ã¯ NAK ã‚’å—ã‘å–る。ã“ã®å応ã¯é–‹ç™ºè€…ãŸã¡ã®ã‚¹ã‚±ã‚¸ãƒ¥ãƒ¼ãƒ«ã«ã‚ˆã£ã¦ã€æ•°
54 æÂ¥ãÂÂãÂÂãÂÂå ´åˆãÂ΋ÂÂãÂÂã 54 æ—¥ããã‚‹å ´åˆãŒãる。
55 - もã—å—ã‘å–られãŸらã€ÂパッãƒÂã¯他ã®開発者ãŸã¡ã®レビューã®ãŸã‚Âã« 55 - ã‚‚ã—å—ã‘å–られãŸã‚‰ã€ãƒ‘ッãƒã¯ä»–ã®é–‹ç™ºè€…ãŸã¡ã®ãƒ¬ãƒ“ューã®ãŸã‚ã«
56 -stable ã­ューã«追加ãÂÂãÂ΋ÂÂã 56 -stable キューã«è¿½åŠ ãれる。
57 - セキュリティパッãƒÂã¯ã“ã®エイリアス (stable@kernel.org) ã«é€Âられるã¹ 57 - セキュリティパッãƒã¯ã“ã®ã‚¨ã‚¤ãƒªã‚¢ã‚¹ (stable@kernel.org) ã«é€ã‚‰ã‚Œã‚‹ã¹
58 ãÂÂã§ã¯ãªãÂÂã€Â代ã‚Âりã« security@kernel.org ã®アドレスã«é€Âられる。 58 ãã§ã¯ãªãã€ä»£ã‚り㫠security@kernel.org ã®ã‚¢ãƒ‰ãƒ¬ã‚¹ã«é€ã‚‰ã‚Œã‚‹ã€‚
59 59
60レãƒÂューãµã¤ã¯ル- 60レビューサイクル-
61 61
62 - -stable メンテナãŒレビューサイクルを決ã‚Âるã¨ãÂÂã€ÂパッãƒÂã¯レビュー委 62 - -stable メンテナãŒãƒ¬ãƒ“ューサイクルを決ã‚ã‚‹ã¨ãã€ãƒ‘ッãƒã¯ãƒ¬ãƒ“ュー委
63 員会ã¨パッãƒÂãŒ影響ã™る領域ã®メンテナ(æÂÂ供者ãÂ΋ÂÂã®領域ã®メンテナã§無 63 員会ã¨ãƒ‘ッãƒãŒå½±éŸ¿ã™ã‚‹é ˜åŸŸã®ãƒ¡ãƒ³ãƒ†ãƒŠ(æä¾›è€…ãŒãã®é ˜åŸŸã®ãƒ¡ãƒ³ãƒ†ãƒŠã§ç„¡
64 ã„é™Âり)ã«é€Âられã€Âlinux-kernel メーリングリストã«CCã•れる。 64 ã„é™ã‚Š)ã«é€ã‚‰ã‚Œã€linux-kernel メーリングリストã«CCã•れる。
65 - レãƒÂューå§Âå¡会㯠48æÂÂéÂÂã®éÂÂã« ACK ã‹ NAK ãÂÂåºãÂÂã 65 - レビュー委員会㯠48時間ã®é–“ã« ACK ã‹ NAK を出ã。
66 - もã—パッãƒÂãŒ委員会ã®メンãƒÂã‹らå´下れるã‹ã€Âメンテナé”やメンãƒÂãŒ気付 66 - ã‚‚ã—パッãƒãŒå§”員会ã®ãƒ¡ãƒ³ãƒã‹ã‚‰å´ä¸‹ã•れるã‹ã€ãƒ¡ãƒ³ãƒ†ãƒŠé”やメンãƒãŒæ°—付
67 ã‹ãªã‹ã£ãŸå•Â題ãÂŒæŒÂã¡ã‚ãŒりã€Âlinux-kernel メンãƒÂãŒパッãƒÂã«異議を唱㈠67 ã‹ãªã‹ã£ãŸå•é¡ŒãŒæŒã¡ã‚ãŒã‚Šã€linux-kernel メンãƒãŒãƒ‘ッãƒã«ç•°è­°ã‚’å”±ãˆ
68 ãŸ場åˆã«ã¯ã€ÂパッãƒÂã¯キューã‹ら削除ã•れる。 68 ãŸå ´åˆã«ã¯ã€ãƒ‘ッãƒã¯ã‚­ãƒ¥ãƒ¼ã‹ã‚‰å‰Šé™¤ã•れる。
69 - レビューサイクルã®最後ã«ã€ÂACK をå—ã‘ãŸパッãƒÂã¯最新ã® -stable リリー 69 - ãƒ¬ãƒ“ãƒ¥ãƒ¼ã‚µã‚¤ã‚¯ãƒ«ã®æœ€å¾Œã«ã€ACK ã‚’å—ã‘ãŸãƒ‘ッãƒã¯æœ€æ–°ã® -stable リリー
70 スã«追加ã•れã€ÂãÂÂã®後ã«新ã—ã„ -stable リリースãŒ行ã‚Âれる。 70 スã«è¿½åŠ ã•れã€ãã®å¾Œã«æ–°ã—ã„ -stable リリースãŒè¡Œã‚れる。
71 - セキュリティパッãƒÂã¯ã€Â通常ã®レビューサイクルを通らãšã€Âセキュリティ 71 - セキュリティパッãƒã¯ã€é€šå¸¸ã®ãƒ¬ãƒ“ューサイクルを通らãšã€ã‚»ã‚­ãƒ¥ãƒªãƒ†ã‚£
72 カーãƒÂルãƒÂームã‹ら直接 -stable ツリーã«å—ã‘付ã‘られる。 72 カーãƒãƒ«ãƒãƒ¼ãƒ ã‹ã‚‰ç›´æŽ¥ -stable ツリーã«å—ã‘付ã‘られる。
73 ã“ã®手続ãÂÂã®詳細ã«ã¤ã„ã¦ã¯ kernel security ãƒÂームã«å•Âã„åˆã‚Âã›るã“ã¨。 73 ã“ã®æ‰‹ç¶šãã®è©³ç´°ã«ã¤ã„ã¦ã¯ kernel security ãƒãƒ¼ãƒ ã«å•ã„åˆã‚ã›ã‚‹ã“ã¨ã€‚
74 74
75レãƒÂューå§Âå¡会- 75レビュー委員会-
76 76
77 - ã“ã®委員会ã¯ã€Âã“ã®タスクã«ã¤ã„ã¦活動ã™る多ãÂÂã®ボランティアã¨ã€Â少数ã® 77 - ã“ã®å§”員会ã¯ã€ã“ã®ã‚¿ã‚¹ã‚¯ã«ã¤ã„ã¦æ´»å‹•ã™ã‚‹å¤šãã®ãƒœãƒ©ãƒ³ãƒ†ã‚£ã‚¢ã¨ã€å°‘æ•°ã®
78 éžボランティアã®カーãƒÂル開発者éÂӋ§構æˆÂã•れã¦ã„る。 78 éžãƒœãƒ©ãƒ³ãƒ†ã‚£ã‚¢ã®ã‚«ãƒ¼ãƒãƒ«é–‹ç™ºè€…é”ã§æ§‹æˆã•れã¦ã„る。
79 79
diff --git a/Documentation/kernel-parameters.txt b/Documentation/kernel-parameters.txt
index a4fc7fc21439..9a5b6658c65e 100644
--- a/Documentation/kernel-parameters.txt
+++ b/Documentation/kernel-parameters.txt
@@ -950,6 +950,41 @@ and is between 256 and 4096 characters. It is defined in the file
950 when set. 950 when set.
951 Format: <int> 951 Format: <int>
952 952
953 libata.force= [LIBATA] Force configurations. The format is comma
954 separated list of "[ID:]VAL" where ID is
955 PORT[:DEVICE]. PORT and DEVICE are decimal numbers
956 matching port, link or device. Basically, it matches
957 the ATA ID string printed on console by libata. If
958 the whole ID part is omitted, the last PORT and DEVICE
959 values are used. If ID hasn't been specified yet, the
960 configuration applies to all ports, links and devices.
961
962 If only DEVICE is omitted, the parameter applies to
963 the port and all links and devices behind it. DEVICE
964 number of 0 either selects the first device or the
965 first fan-out link behind PMP device. It does not
966 select the host link. DEVICE number of 15 selects the
967 host link and device attached to it.
968
969 The VAL specifies the configuration to force. As long
970 as there's no ambiguity shortcut notation is allowed.
971 For example, both 1.5 and 1.5G would work for 1.5Gbps.
972 The following configurations can be forced.
973
974 * Cable type: 40c, 80c, short40c, unk, ign or sata.
975 Any ID with matching PORT is used.
976
977 * SATA link speed limit: 1.5Gbps or 3.0Gbps.
978
979 * Transfer mode: pio[0-7], mwdma[0-4] and udma[0-7].
980 udma[/][16,25,33,44,66,100,133] notation is also
981 allowed.
982
983 * [no]ncq: Turn on or off NCQ.
984
985 If there are multiple matching configurations changing
986 the same attribute, the last one is used.
987
953 load_ramdisk= [RAM] List of ramdisks to load from floppy 988 load_ramdisk= [RAM] List of ramdisks to load from floppy
954 See Documentation/ramdisk.txt. 989 See Documentation/ramdisk.txt.
955 990
@@ -1056,8 +1091,6 @@ and is between 256 and 4096 characters. It is defined in the file
1056 [SCSI] Maximum number of LUNs received. 1091 [SCSI] Maximum number of LUNs received.
1057 Should be between 1 and 16384. 1092 Should be between 1 and 16384.
1058 1093
1059 mca-pentium [BUGS=X86-32]
1060
1061 mcatest= [IA-64] 1094 mcatest= [IA-64]
1062 1095
1063 mce [X86-32] Machine Check Exception 1096 mce [X86-32] Machine Check Exception
diff --git a/Documentation/laptops/thinkpad-acpi.txt b/Documentation/laptops/thinkpad-acpi.txt
index 6c2477754a2a..76cb428435da 100644
--- a/Documentation/laptops/thinkpad-acpi.txt
+++ b/Documentation/laptops/thinkpad-acpi.txt
@@ -160,7 +160,7 @@ Hot keys
160procfs: /proc/acpi/ibm/hotkey 160procfs: /proc/acpi/ibm/hotkey
161sysfs device attribute: hotkey_* 161sysfs device attribute: hotkey_*
162 162
163In a ThinkPad, the ACPI HKEY handler is responsible for comunicating 163In a ThinkPad, the ACPI HKEY handler is responsible for communicating
164some important events and also keyboard hot key presses to the operating 164some important events and also keyboard hot key presses to the operating
165system. Enabling the hotkey functionality of thinkpad-acpi signals the 165system. Enabling the hotkey functionality of thinkpad-acpi signals the
166firmware that such a driver is present, and modifies how the ThinkPad 166firmware that such a driver is present, and modifies how the ThinkPad
@@ -193,7 +193,7 @@ Not all bits in the mask can be modified. Not all bits that can be
193modified do anything. Not all hot keys can be individually controlled 193modified do anything. Not all hot keys can be individually controlled
194by the mask. Some models do not support the mask at all, and in those 194by the mask. Some models do not support the mask at all, and in those
195models, hot keys cannot be controlled individually. The behaviour of 195models, hot keys cannot be controlled individually. The behaviour of
196the mask is, therefore, higly dependent on the ThinkPad model. 196the mask is, therefore, highly dependent on the ThinkPad model.
197 197
198Note that unmasking some keys prevents their default behavior. For 198Note that unmasking some keys prevents their default behavior. For
199example, if Fn+F5 is unmasked, that key will no longer enable/disable 199example, if Fn+F5 is unmasked, that key will no longer enable/disable
@@ -288,7 +288,7 @@ sysfs notes:
288 in ACPI event mode, volume up/down/mute are reported as 288 in ACPI event mode, volume up/down/mute are reported as
289 separate events, but this behaviour may be corrected in 289 separate events, but this behaviour may be corrected in
290 future releases of this driver, in which case the 290 future releases of this driver, in which case the
291 ThinkPad volume mixer user interface semanthics will be 291 ThinkPad volume mixer user interface semantics will be
292 enforced. 292 enforced.
293 293
294 hotkey_poll_freq: 294 hotkey_poll_freq:
@@ -306,13 +306,20 @@ sysfs notes:
306 The recommended polling frequency is 10Hz. 306 The recommended polling frequency is 10Hz.
307 307
308 hotkey_radio_sw: 308 hotkey_radio_sw:
309 if the ThinkPad has a hardware radio switch, this 309 If the ThinkPad has a hardware radio switch, this
310 attribute will read 0 if the switch is in the "radios 310 attribute will read 0 if the switch is in the "radios
311 disabled" postition, and 1 if the switch is in the 311 disabled" position, and 1 if the switch is in the
312 "radios enabled" position. 312 "radios enabled" position.
313 313
314 This attribute has poll()/select() support. 314 This attribute has poll()/select() support.
315 315
316 hotkey_tablet_mode:
317 If the ThinkPad has tablet capabilities, this attribute
318 will read 0 if the ThinkPad is in normal mode, and
319 1 if the ThinkPad is in tablet mode.
320
321 This attribute has poll()/select() support.
322
316 hotkey_report_mode: 323 hotkey_report_mode:
317 Returns the state of the procfs ACPI event report mode 324 Returns the state of the procfs ACPI event report mode
318 filter for hot keys. If it is set to 1 (the default), 325 filter for hot keys. If it is set to 1 (the default),
@@ -339,7 +346,7 @@ sysfs notes:
339 wakeup_hotunplug_complete: 346 wakeup_hotunplug_complete:
340 Set to 1 if the system was waken up because of an 347 Set to 1 if the system was waken up because of an
341 undock or bay ejection request, and that request 348 undock or bay ejection request, and that request
342 was sucessfully completed. At this point, it might 349 was successfully completed. At this point, it might
343 be useful to send the system back to sleep, at the 350 be useful to send the system back to sleep, at the
344 user's choice. Refer to HKEY events 0x4003 and 351 user's choice. Refer to HKEY events 0x4003 and
345 0x3003, below. 352 0x3003, below.
@@ -392,7 +399,7 @@ event code Key Notes
392 Lenovo: battery 399 Lenovo: battery
393 400
3940x1004 0x03 FN+F4 Sleep button (ACPI sleep button 4010x1004 0x03 FN+F4 Sleep button (ACPI sleep button
395 semanthics, i.e. sleep-to-RAM). 402 semantics, i.e. sleep-to-RAM).
396 It is always generate some kind 403 It is always generate some kind
397 of event, either the hot key 404 of event, either the hot key
398 event or a ACPI sleep button 405 event or a ACPI sleep button
@@ -403,12 +410,12 @@ event code Key Notes
403 time passes. 410 time passes.
404 411
4050x1005 0x04 FN+F5 Radio. Enables/disables 4120x1005 0x04 FN+F5 Radio. Enables/disables
406 the internal BlueTooth hardware 413 the internal Bluetooth hardware
407 and W-WAN card if left in control 414 and W-WAN card if left in control
408 of the firmware. Does not affect 415 of the firmware. Does not affect
409 the WLAN card. 416 the WLAN card.
410 Should be used to turn on/off all 417 Should be used to turn on/off all
411 radios (bluetooth+W-WAN+WLAN), 418 radios (Bluetooth+W-WAN+WLAN),
412 really. 419 really.
413 420
4140x1006 0x05 FN+F6 - 4210x1006 0x05 FN+F6 -
@@ -417,7 +424,7 @@ event code Key Notes
417 Do you feel lucky today? 424 Do you feel lucky today?
418 425
4190x1008 0x07 FN+F8 IBM: toggle screen expand 4260x1008 0x07 FN+F8 IBM: toggle screen expand
420 Lenovo: configure ultranav 427 Lenovo: configure UltraNav
421 428
4220x1009 0x08 FN+F9 - 4290x1009 0x08 FN+F9 -
423 .. .. .. 430 .. .. ..
@@ -447,7 +454,7 @@ event code Key Notes
4470x1011 0x10 FN+END Brightness down. See brightness 4540x1011 0x10 FN+END Brightness down. See brightness
448 up for details. 455 up for details.
449 456
4500x1012 0x11 FN+PGUP Thinklight toggle. This key is 4570x1012 0x11 FN+PGUP ThinkLight toggle. This key is
451 always handled by the firmware, 458 always handled by the firmware,
452 even when unmasked. 459 even when unmasked.
453 460
@@ -469,7 +476,7 @@ event code Key Notes
469 key is always handled by the 476 key is always handled by the
470 firmware, even when unmasked. 477 firmware, even when unmasked.
471 478
4720x1018 0x17 THINKPAD Thinkpad/Access IBM/Lenovo key 4790x1018 0x17 THINKPAD ThinkPad/Access IBM/Lenovo key
473 480
4740x1019 0x18 unknown 4810x1019 0x18 unknown
475.. .. .. 482.. .. ..
@@ -488,9 +495,17 @@ If a key is mapped to KEY_UNKNOWN, it generates an input event that
488includes an scan code. If a key is mapped to anything else, it will 495includes an scan code. If a key is mapped to anything else, it will
489generate input device EV_KEY events. 496generate input device EV_KEY events.
490 497
498In addition to the EV_KEY events, thinkpad-acpi may also issue EV_SW
499events for switches:
500
501SW_RADIO T60 and later hardare rfkill rocker switch
502SW_TABLET_MODE Tablet ThinkPads HKEY events 0x5009 and 0x500A
503
491Non hot-key ACPI HKEY event map: 504Non hot-key ACPI HKEY event map:
4920x5001 Lid closed 5050x5001 Lid closed
4930x5002 Lid opened 5060x5002 Lid opened
5070x5009 Tablet swivel: switched to tablet mode
5080x500A Tablet swivel: switched to normal mode
4940x7000 Radio Switch may have changed state 5090x7000 Radio Switch may have changed state
495 510
496The above events are not propagated by the driver, except for legacy 511The above events are not propagated by the driver, except for legacy
@@ -505,9 +520,7 @@ The above events are never propagated by the driver.
505 520
5060x3003 Bay ejection (see 0x2x05) complete, can sleep again 5210x3003 Bay ejection (see 0x2x05) complete, can sleep again
5070x4003 Undocked (see 0x2x04), can sleep again 5220x4003 Undocked (see 0x2x04), can sleep again
5080x5009 Tablet swivel: switched to tablet mode 5230x500B Tablet pen inserted into its storage bay
5090x500A Tablet swivel: switched to normal mode
5100x500B Tablet pen insterted into its storage bay
5110x500C Tablet pen removed from its storage bay 5240x500C Tablet pen removed from its storage bay
5120x5010 Brightness level changed (newer Lenovo BIOSes) 5250x5010 Brightness level changed (newer Lenovo BIOSes)
513 526
@@ -539,7 +552,7 @@ sysfs (it is read-only).
539If the hotkey_report_mode module parameter is set to 1 or 2, it cannot 552If the hotkey_report_mode module parameter is set to 1 or 2, it cannot
540be changed later through sysfs (any writes will return -EPERM to signal 553be changed later through sysfs (any writes will return -EPERM to signal
541that hotkey_report_mode was locked. On 2.6.23 and later, where 554that hotkey_report_mode was locked. On 2.6.23 and later, where
542hotkey_report_mode cannot be changed at all, writes will return -EACES). 555hotkey_report_mode cannot be changed at all, writes will return -EACCES).
543 556
544hotkey_report_mode set to 1 makes the driver export through the procfs 557hotkey_report_mode set to 1 makes the driver export through the procfs
545ACPI event interface all hot key presses (which are *also* sent to the 558ACPI event interface all hot key presses (which are *also* sent to the
@@ -584,7 +597,7 @@ Sysfs notes:
584 0: disables Bluetooth / Bluetooth is disabled 597 0: disables Bluetooth / Bluetooth is disabled
585 1: enables Bluetooth / Bluetooth is enabled. 598 1: enables Bluetooth / Bluetooth is enabled.
586 599
587 Note: this interface will be probably be superseeded by the 600 Note: this interface will be probably be superseded by the
588 generic rfkill class, so it is NOT to be considered stable yet. 601 generic rfkill class, so it is NOT to be considered stable yet.
589 602
590Video output control -- /proc/acpi/ibm/video 603Video output control -- /proc/acpi/ibm/video
@@ -791,12 +804,12 @@ on the X40 (tpb is the ThinkPad Buttons utility):
791 1 - Related to "Volume up" key press 804 1 - Related to "Volume up" key press
792 2 - Related to "Mute on" key press 805 2 - Related to "Mute on" key press
793 3 - Related to "Access IBM" key press 806 3 - Related to "Access IBM" key press
794 4 - Related to "LCD brightness up" key pess 807 4 - Related to "LCD brightness up" key press
795 5 - Related to "LCD brightness down" key press 808 5 - Related to "LCD brightness down" key press
796 11 - Related to "toggle screen expansion" key press/function 809 11 - Related to "toggle screen expansion" key press/function
797 12 - Related to "ThinkLight on" 810 12 - Related to "ThinkLight on"
798 13 - Related to "ThinkLight off" 811 13 - Related to "ThinkLight off"
799 14 - Related to "ThinkLight" key press (toggle thinklight) 812 14 - Related to "ThinkLight" key press (toggle ThinkLight)
800 813
801The cmos command interface is prone to firmware split-brain problems, as 814The cmos command interface is prone to firmware split-brain problems, as
802in newer ThinkPads it is just a compatibility layer. Do not use it, it is 815in newer ThinkPads it is just a compatibility layer. Do not use it, it is
@@ -1024,7 +1037,7 @@ There are two interfaces to the firmware for direct brightness control,
1024EC and CMOS. To select which one should be used, use the 1037EC and CMOS. To select which one should be used, use the
1025brightness_mode module parameter: brightness_mode=1 selects EC mode, 1038brightness_mode module parameter: brightness_mode=1 selects EC mode,
1026brightness_mode=2 selects CMOS mode, brightness_mode=3 selects both EC 1039brightness_mode=2 selects CMOS mode, brightness_mode=3 selects both EC
1027and CMOS. The driver tries to autodetect which interface to use. 1040and CMOS. The driver tries to auto-detect which interface to use.
1028 1041
1029When display backlight brightness controls are available through the 1042When display backlight brightness controls are available through the
1030standard ACPI interface, it is best to use it instead of this direct 1043standard ACPI interface, it is best to use it instead of this direct
@@ -1266,8 +1279,8 @@ experimental=1 parameter when loading the module.
1266This feature shows the presence and current state of a W-WAN (Sierra 1279This feature shows the presence and current state of a W-WAN (Sierra
1267Wireless EV-DO) device. 1280Wireless EV-DO) device.
1268 1281
1269It was tested on a Lenovo Thinkpad X60. It should probably work on other 1282It was tested on a Lenovo ThinkPad X60. It should probably work on other
1270Thinkpad models which come with this module installed. 1283ThinkPad models which come with this module installed.
1271 1284
1272Procfs notes: 1285Procfs notes:
1273 1286
@@ -1286,7 +1299,7 @@ Sysfs notes:
1286 0: disables WWAN card / WWAN card is disabled 1299 0: disables WWAN card / WWAN card is disabled
1287 1: enables WWAN card / WWAN card is enabled. 1300 1: enables WWAN card / WWAN card is enabled.
1288 1301
1289 Note: this interface will be probably be superseeded by the 1302 Note: this interface will be probably be superseded by the
1290 generic rfkill class, so it is NOT to be considered stable yet. 1303 generic rfkill class, so it is NOT to be considered stable yet.
1291 1304
1292Multiple Commands, Module Parameters 1305Multiple Commands, Module Parameters
@@ -1309,7 +1322,7 @@ Enabling debugging output
1309The module takes a debug parameter which can be used to selectively 1322The module takes a debug parameter which can be used to selectively
1310enable various classes of debugging output, for example: 1323enable various classes of debugging output, for example:
1311 1324
1312 modprobe ibm_acpi debug=0xffff 1325 modprobe thinkpad_acpi debug=0xffff
1313 1326
1314will enable all debugging output classes. It takes a bitmask, so 1327will enable all debugging output classes. It takes a bitmask, so
1315to enable more than one output class, just add their values. 1328to enable more than one output class, just add their values.
@@ -1356,7 +1369,7 @@ Sysfs interface changelog:
1356 NVRAM is compiled out by the user because it is 1369 NVRAM is compiled out by the user because it is
1357 unneeded/undesired in the first place). 1370 unneeded/undesired in the first place).
13580x020101: Marker for thinkpad-acpi with hot key NVRAM polling 13710x020101: Marker for thinkpad-acpi with hot key NVRAM polling
1359 and proper hotkey_mask semanthics (version 8 of the 1372 and proper hotkey_mask semantics (version 8 of the
1360 NVRAM polling patch). Some development snapshots of 1373 NVRAM polling patch). Some development snapshots of
1361 0.18 had an earlier version that did strange things 1374 0.18 had an earlier version that did strange things
1362 to hotkey_mask. 1375 to hotkey_mask.
diff --git a/Documentation/memory-barriers.txt b/Documentation/memory-barriers.txt
index 4e17beba2379..1f506f7830ec 100644
--- a/Documentation/memory-barriers.txt
+++ b/Documentation/memory-barriers.txt
@@ -1493,7 +1493,7 @@ explicit lock operations, described later). These include:
1493 atomic_dec_and_test(); 1493 atomic_dec_and_test();
1494 atomic_sub_and_test(); 1494 atomic_sub_and_test();
1495 atomic_add_negative(); 1495 atomic_add_negative();
1496 atomic_add_unless(); 1496 atomic_add_unless(); /* when succeeds (returns 1) */
1497 test_and_set_bit(); 1497 test_and_set_bit();
1498 test_and_clear_bit(); 1498 test_and_clear_bit();
1499 test_and_change_bit(); 1499 test_and_change_bit();
diff --git a/Documentation/networking/tcp.txt b/Documentation/networking/tcp.txt
index 0121edc3ba06..7d11bb5dc30a 100644
--- a/Documentation/networking/tcp.txt
+++ b/Documentation/networking/tcp.txt
@@ -1,7 +1,7 @@
1TCP protocol 1TCP protocol
2============ 2============
3 3
4Last updated: 21 June 2005 4Last updated: 9 February 2008
5 5
6Contents 6Contents
7======== 7========
@@ -52,9 +52,9 @@ research and RFC's before developing new modules.
52The method that is used to determine which congestion control mechanism is 52The method that is used to determine which congestion control mechanism is
53determined by the setting of the sysctl net.ipv4.tcp_congestion_control. 53determined by the setting of the sysctl net.ipv4.tcp_congestion_control.
54The default congestion control will be the last one registered (LIFO); 54The default congestion control will be the last one registered (LIFO);
55so if you built everything as modules. the default will be reno. If you 55so if you built everything as modules, the default will be reno. If you
56build with the default's from Kconfig, then BIC will be builtin (not a module) 56build with the defaults from Kconfig, then CUBIC will be builtin (not a
57and it will end up the default. 57module) and it will end up the default.
58 58
59If you really want a particular default value then you will need 59If you really want a particular default value then you will need
60to set it with the sysctl. If you use a sysctl, the module will be autoloaded 60to set it with the sysctl. If you use a sysctl, the module will be autoloaded
diff --git a/Documentation/power/devices.txt b/Documentation/power/devices.txt
index c53d26361919..461e4f1dbec4 100644
--- a/Documentation/power/devices.txt
+++ b/Documentation/power/devices.txt
@@ -310,9 +310,12 @@ used with suspend-to-disk:
310 PM_EVENT_SUSPEND -- quiesce the driver and put hardware into a low-power 310 PM_EVENT_SUSPEND -- quiesce the driver and put hardware into a low-power
311 state. When used with system sleep states like "suspend-to-RAM" or 311 state. When used with system sleep states like "suspend-to-RAM" or
312 "standby", the upcoming resume() call will often be able to rely on 312 "standby", the upcoming resume() call will often be able to rely on
313 state kept in hardware, or issue system wakeup events. When used 313 state kept in hardware, or issue system wakeup events.
314 instead with suspend-to-disk, few devices support this capability; 314
315 most are completely powered off. 315 PM_EVENT_HIBERNATE -- Put hardware into a low-power state and enable wakeup
316 events as appropriate. It is only used with hibernation
317 (suspend-to-disk) and few devices are able to wake up the system from
318 this state; most are completely powered off.
316 319
317 PM_EVENT_FREEZE -- quiesce the driver, but don't necessarily change into 320 PM_EVENT_FREEZE -- quiesce the driver, but don't necessarily change into
318 any low power mode. A system snapshot is about to be taken, often 321 any low power mode. A system snapshot is about to be taken, often
@@ -329,8 +332,8 @@ used with suspend-to-disk:
329 wakeup events nor DMA are allowed. 332 wakeup events nor DMA are allowed.
330 333
331To enter "standby" (ACPI S1) or "Suspend to RAM" (STR, ACPI S3) states, or 334To enter "standby" (ACPI S1) or "Suspend to RAM" (STR, ACPI S3) states, or
332the similarly named APM states, only PM_EVENT_SUSPEND is used; for "Suspend 335the similarly named APM states, only PM_EVENT_SUSPEND is used; the other event
333to Disk" (STD, hibernate, ACPI S4), all of those event codes are used. 336codes are used for hibernation ("Suspend to Disk", STD, ACPI S4).
334 337
335There's also PM_EVENT_ON, a value which never appears as a suspend event 338There's also PM_EVENT_ON, a value which never appears as a suspend event
336but is sometimes used to record the "not suspended" device state. 339but is sometimes used to record the "not suspended" device state.
diff --git a/Documentation/stable_kernel_rules.txt b/Documentation/stable_kernel_rules.txt
index c815c5206e84..4cfc78835bc1 100644
--- a/Documentation/stable_kernel_rules.txt
+++ b/Documentation/stable_kernel_rules.txt
@@ -16,8 +16,9 @@ Rules on what kind of patches are accepted, and which ones are not, into the
16 race can be exploited is also provided. 16 race can be exploited is also provided.
17 - It cannot contain any "trivial" fixes in it (spelling changes, 17 - It cannot contain any "trivial" fixes in it (spelling changes,
18 whitespace cleanups, etc). 18 whitespace cleanups, etc).
19 - It must be accepted by the relevant subsystem maintainer.
20 - It must follow the Documentation/SubmittingPatches rules. 19 - It must follow the Documentation/SubmittingPatches rules.
20 - It or an equivalent fix must already exist in Linus' tree. Quote the
21 respective commit ID in Linus' tree in your patch submission to -stable.
21 22
22 23
23Procedure for submitting patches to the -stable tree: 24Procedure for submitting patches to the -stable tree:
@@ -28,7 +29,9 @@ Procedure for submitting patches to the -stable tree:
28 queue, or a NAK if the patch is rejected. This response might take a few 29 queue, or a NAK if the patch is rejected. This response might take a few
29 days, according to the developer's schedules. 30 days, according to the developer's schedules.
30 - If accepted, the patch will be added to the -stable queue, for review by 31 - If accepted, the patch will be added to the -stable queue, for review by
31 other developers. 32 other developers and by the relevant subsystem maintainer.
33 - If the stable@kernel.org address is added to a patch, when it goes into
34 Linus's tree it will automatically be emailed to the stable team.
32 - Security patches should not be sent to this alias, but instead to the 35 - Security patches should not be sent to this alias, but instead to the
33 documented security@kernel.org address. 36 documented security@kernel.org address.
34 37
diff --git a/Documentation/video4linux/CARDLIST.em28xx b/Documentation/video4linux/CARDLIST.em28xx
index 6a8469f2bcae..f40e09296f30 100644
--- a/Documentation/video4linux/CARDLIST.em28xx
+++ b/Documentation/video4linux/CARDLIST.em28xx
@@ -8,7 +8,7 @@
8 7 -> Leadtek Winfast USB II (em2800) 8 7 -> Leadtek Winfast USB II (em2800)
9 8 -> Kworld USB2800 (em2800) 9 8 -> Kworld USB2800 (em2800)
10 9 -> Pinnacle Dazzle DVC 90/DVC 100 (em2820/em2840) [2304:0207,2304:021a] 10 9 -> Pinnacle Dazzle DVC 90/DVC 100 (em2820/em2840) [2304:0207,2304:021a]
11 10 -> Hauppauge WinTV HVR 900 (em2880) [2040:6500] 11 10 -> Hauppauge WinTV HVR 900 (em2880) [2040:6500,2040:6502]
12 11 -> Terratec Hybrid XS (em2880) [0ccd:0042] 12 11 -> Terratec Hybrid XS (em2880) [0ccd:0042]
13 12 -> Kworld PVR TV 2800 RF (em2820/em2840) 13 12 -> Kworld PVR TV 2800 RF (em2820/em2840)
14 13 -> Terratec Prodigy XS (em2880) [0ccd:0047] 14 13 -> Terratec Prodigy XS (em2880) [0ccd:0047]
diff --git a/Documentation/video4linux/CARDLIST.saa7134 b/Documentation/video4linux/CARDLIST.saa7134
index 5d3b6b4d2515..0424901ebc78 100644
--- a/Documentation/video4linux/CARDLIST.saa7134
+++ b/Documentation/video4linux/CARDLIST.saa7134
@@ -92,9 +92,9 @@
92 91 -> AVerMedia A169 B [1461:7360] 92 91 -> AVerMedia A169 B [1461:7360]
93 92 -> AVerMedia A169 B1 [1461:6360] 93 92 -> AVerMedia A169 B1 [1461:6360]
94 93 -> Medion 7134 Bridge #2 [16be:0005] 94 93 -> Medion 7134 Bridge #2 [16be:0005]
95 94 -> LifeView FlyDVB-T Hybrid Cardbus/MSI TV @nywhere A/D NB [5168:3306,5168:3502,4e42:3502] 95 94 -> LifeView FlyDVB-T Hybrid Cardbus/MSI TV @nywhere A/D NB [5168:3306,5168:3502,5168:3307,4e42:3502]
96 95 -> LifeView FlyVIDEO3000 (NTSC) [5169:0138] 96 95 -> LifeView FlyVIDEO3000 (NTSC) [5169:0138]
97 96 -> Medion Md8800 Quadro [16be:0007,16be:0008] 97 96 -> Medion Md8800 Quadro [16be:0007,16be:0008,16be:000d]
98 97 -> LifeView FlyDVB-S /Acorp TV134DS [5168:0300,4e42:0300] 98 97 -> LifeView FlyDVB-S /Acorp TV134DS [5168:0300,4e42:0300]
99 98 -> Proteus Pro 2309 [0919:2003] 99 98 -> Proteus Pro 2309 [0919:2003]
100 99 -> AVerMedia TV Hybrid A16AR [1461:2c00] 100 99 -> AVerMedia TV Hybrid A16AR [1461:2c00]
@@ -129,3 +129,5 @@
129128 -> Beholder BeholdTV Columbus TVFM [0000:5201] 129128 -> Beholder BeholdTV Columbus TVFM [0000:5201]
130129 -> Beholder BeholdTV 607 / BeholdTV 609 [5ace:6070,5ace:6071,5ace:6072,5ace:6073,5ace:6090,5ace:6091,5ace:6092,5ace:6093] 130129 -> Beholder BeholdTV 607 / BeholdTV 609 [5ace:6070,5ace:6071,5ace:6072,5ace:6073,5ace:6090,5ace:6091,5ace:6092,5ace:6093]
131130 -> Beholder BeholdTV M6 / BeholdTV M6 Extra [5ace:6190,5ace:6193] 131130 -> Beholder BeholdTV M6 / BeholdTV M6 Extra [5ace:6190,5ace:6193]
132131 -> Twinhan Hybrid DTV-DVB 3056 PCI [1822:0022]
133132 -> Genius TVGO AM11MCE
diff --git a/Documentation/video4linux/zr364xx.txt b/Documentation/video4linux/zr364xx.txt
index 4d9a0c33f2fd..5c81e3ae6458 100644
--- a/Documentation/video4linux/zr364xx.txt
+++ b/Documentation/video4linux/zr364xx.txt
@@ -25,7 +25,7 @@ modprobe zr364xx debug=X mode=Y
25 - debug : set to 1 to enable verbose debug messages 25 - debug : set to 1 to enable verbose debug messages
26 - mode : 0 = 320x240, 1 = 160x120, 2 = 640x480 26 - mode : 0 = 320x240, 1 = 160x120, 2 = 640x480
27You can then use the camera with V4L2 compatible applications, for example Ekiga. 27You can then use the camera with V4L2 compatible applications, for example Ekiga.
28To capture a single image, try this: dd if=/dev/video0 of=test.jpg bs=1 count=1 28To capture a single image, try this: dd if=/dev/video0 of=test.jpg bs=1M count=1
29 29
30links : 30links :
31http://mxhaard.free.fr/ (support for many others cams including some Aiptek PocketDV) 31http://mxhaard.free.fr/ (support for many others cams including some Aiptek PocketDV)
@@ -63,3 +63,5 @@ Vendor Product Distributor Model
630x06d6 0x0034 Trust Powerc@m 750 630x06d6 0x0034 Trust Powerc@m 750
640x0a17 0x0062 Pentax Optio 50L 640x0a17 0x0062 Pentax Optio 50L
650x06d6 0x003b Trust Powerc@m 970Z 650x06d6 0x003b Trust Powerc@m 970Z
660x0a17 0x004e Pentax Optio 50
670x041e 0x405d Creative DiVi CAM 516
diff --git a/Documentation/vm/slabinfo.c b/Documentation/vm/slabinfo.c
index 7123fee708ca..22d7e3e4d60c 100644
--- a/Documentation/vm/slabinfo.c
+++ b/Documentation/vm/slabinfo.c
@@ -1123,7 +1123,7 @@ void read_slab_dir(void)
1123 char *t; 1123 char *t;
1124 int count; 1124 int count;
1125 1125
1126 if (chdir("/sys/kernel/slab")) 1126 if (chdir("/sys/kernel/slab") && chdir("/sys/slab"))
1127 fatal("SYSFS support for SLUB not active\n"); 1127 fatal("SYSFS support for SLUB not active\n");
1128 1128
1129 dir = opendir("."); 1129 dir = opendir(".");
diff --git a/MAINTAINERS b/MAINTAINERS
index 1d2edb491b34..36c7bc641dba 100644
--- a/MAINTAINERS
+++ b/MAINTAINERS
@@ -640,8 +640,8 @@ S: Maintained
640ASYNCHRONOUS TRANSFERS/TRANSFORMS API 640ASYNCHRONOUS TRANSFERS/TRANSFORMS API
641P: Dan Williams 641P: Dan Williams
642M: dan.j.williams@intel.com 642M: dan.j.williams@intel.com
643P: Shannon Nelson 643P: Maciej Sosnowski
644M: shannon.nelson@intel.com 644M: maciej.sosnowski@intel.com
645L: linux-kernel@vger.kernel.org 645L: linux-kernel@vger.kernel.org
646W: http://sourceforge.net/projects/xscaleiop 646W: http://sourceforge.net/projects/xscaleiop
647S: Supported 647S: Supported
@@ -697,7 +697,7 @@ S: Supported
697ATMEL LCDFB DRIVER 697ATMEL LCDFB DRIVER
698P: Nicolas Ferre 698P: Nicolas Ferre
699M: nicolas.ferre@atmel.com 699M: nicolas.ferre@atmel.com
700L: linux-fbdev-devel@lists.sourceforge.net (subscribers-only) 700L: linux-fbdev-devel@lists.sourceforge.net (moderated for non-subscribers)
701S: Maintained 701S: Maintained
702 702
703ATMEL MACB ETHERNET DRIVER 703ATMEL MACB ETHERNET DRIVER
@@ -1202,7 +1202,7 @@ S: Maintained
1202CYBLAFB FRAMEBUFFER DRIVER 1202CYBLAFB FRAMEBUFFER DRIVER
1203P: Knut Petersen 1203P: Knut Petersen
1204M: Knut_Petersen@t-online.de 1204M: Knut_Petersen@t-online.de
1205L: linux-fbdev-devel@lists.sourceforge.net (subscribers-only) 1205L: linux-fbdev-devel@lists.sourceforge.net (moderated for non-subscribers)
1206S: Maintained 1206S: Maintained
1207 1207
1208CYCLADES 2X SYNC CARD DRIVER 1208CYCLADES 2X SYNC CARD DRIVER
@@ -1324,8 +1324,7 @@ P: David Teigland
1324M: teigland@redhat.com 1324M: teigland@redhat.com
1325L: cluster-devel@redhat.com 1325L: cluster-devel@redhat.com
1326W: http://sources.redhat.com/cluster/ 1326W: http://sources.redhat.com/cluster/
1327T: git kernel.org:/pub/scm/linux/kernel/git/steve/gfs2-2.6-fixes.git 1327T: git kernel.org:/pub/scm/linux/kernel/git/teigland/dlm.git
1328T: git kernel.org:/pub/scm/linux/kernel/git/steve/gfs2-2.6-nmw.git
1329S: Supported 1328S: Supported
1330 1329
1331DAVICOM FAST ETHERNET (DMFE) NETWORK DRIVER 1330DAVICOM FAST ETHERNET (DMFE) NETWORK DRIVER
@@ -1335,8 +1334,8 @@ L: netdev@vger.kernel.org
1335S: Maintained 1334S: Maintained
1336 1335
1337DMA GENERIC OFFLOAD ENGINE SUBSYSTEM 1336DMA GENERIC OFFLOAD ENGINE SUBSYSTEM
1338P: Shannon Nelson 1337P: Maciej Sosnowski
1339M: shannon.nelson@intel.com 1338M: maciej.sosnowski@intel.com
1340P: Dan Williams 1339P: Dan Williams
1341M: dan.j.williams@intel.com 1340M: dan.j.williams@intel.com
1342L: linux-kernel@vger.kernel.org 1341L: linux-kernel@vger.kernel.org
@@ -1580,7 +1579,7 @@ S: Supported
1580FRAMEBUFFER LAYER 1579FRAMEBUFFER LAYER
1581P: Antonino Daplas 1580P: Antonino Daplas
1582M: adaplas@gmail.com 1581M: adaplas@gmail.com
1583L: linux-fbdev-devel@lists.sourceforge.net (subscribers-only) 1582L: linux-fbdev-devel@lists.sourceforge.net (moderated for non-subscribers)
1584W: http://linux-fbdev.sourceforge.net/ 1583W: http://linux-fbdev.sourceforge.net/
1585S: Maintained 1584S: Maintained
1586 1585
@@ -1713,9 +1712,7 @@ T: git lm-sensors.org:/kernel/mhoffman/hwmon-2.6.git release
1713S: Maintained 1712S: Maintained
1714 1713
1715HARDWARE RANDOM NUMBER GENERATOR CORE 1714HARDWARE RANDOM NUMBER GENERATOR CORE
1716P: Michael Buesch 1715S: Orphaned
1717M: mb@bu3sch.de
1718S: Maintained
1719 1716
1720HARD DRIVE ACTIVE PROTECTION SYSTEM (HDAPS) DRIVER 1717HARD DRIVE ACTIVE PROTECTION SYSTEM (HDAPS) DRIVER
1721P: Robert Love 1718P: Robert Love
@@ -1924,7 +1921,7 @@ S: Maintained
1924 1921
1925IDE/ATAPI CDROM DRIVER 1922IDE/ATAPI CDROM DRIVER
1926P: Borislav Petkov 1923P: Borislav Petkov
1927M: bbpetkov@yahoo.de 1924M: petkovbb@gmail.com
1928L: linux-ide@vger.kernel.org 1925L: linux-ide@vger.kernel.org
1929S: Maintained 1926S: Maintained
1930 1927
@@ -1965,7 +1962,7 @@ L: linux1394-devel@lists.sourceforge.net
1965S: Maintained 1962S: Maintained
1966 1963
1967IMS TWINTURBO FRAMEBUFFER DRIVER 1964IMS TWINTURBO FRAMEBUFFER DRIVER
1968L: linux-fbdev-devel@lists.sourceforge.net (subscribers-only) 1965L: linux-fbdev-devel@lists.sourceforge.net (moderated for non-subscribers)
1969S: Orphan 1966S: Orphan
1970 1967
1971INFINIBAND SUBSYSTEM 1968INFINIBAND SUBSYSTEM
@@ -1999,13 +1996,13 @@ S: Maintained
1999INTEL FRAMEBUFFER DRIVER (excluding 810 and 815) 1996INTEL FRAMEBUFFER DRIVER (excluding 810 and 815)
2000P: Sylvain Meyer 1997P: Sylvain Meyer
2001M: sylvain.meyer@worldonline.fr 1998M: sylvain.meyer@worldonline.fr
2002L: linux-fbdev-devel@lists.sourceforge.net (subscribers-only) 1999L: linux-fbdev-devel@lists.sourceforge.net (moderated for non-subscribers)
2003S: Maintained 2000S: Maintained
2004 2001
2005INTEL 810/815 FRAMEBUFFER DRIVER 2002INTEL 810/815 FRAMEBUFFER DRIVER
2006P: Antonino Daplas 2003P: Antonino Daplas
2007M: adaplas@gmail.com 2004M: adaplas@gmail.com
2008L: linux-fbdev-devel@lists.sourceforge.net (subscribers-only) 2005L: linux-fbdev-devel@lists.sourceforge.net (moderated for non-subscribers)
2009S: Maintained 2006S: Maintained
2010 2007
2011INTEL IA32 MICROCODE UPDATE SUPPORT 2008INTEL IA32 MICROCODE UPDATE SUPPORT
@@ -2014,8 +2011,8 @@ M: tigran@aivazian.fsnet.co.uk
2014S: Maintained 2011S: Maintained
2015 2012
2016INTEL I/OAT DMA DRIVER 2013INTEL I/OAT DMA DRIVER
2017P: Shannon Nelson 2014P: Maciej Sosnowski
2018M: shannon.nelson@intel.com 2015M: maciej.sosnowski@intel.com
2019L: linux-kernel@vger.kernel.org 2016L: linux-kernel@vger.kernel.org
2020S: Supported 2017S: Supported
2021 2018
@@ -2601,7 +2598,7 @@ S: Odd Fixes for 2.4; Maintained for 2.6.
2601MATROX FRAMEBUFFER DRIVER 2598MATROX FRAMEBUFFER DRIVER
2602P: Petr Vandrovec 2599P: Petr Vandrovec
2603M: vandrove@vc.cvut.cz 2600M: vandrove@vc.cvut.cz
2604L: linux-fbdev-devel@lists.sourceforge.net (subscribers-only) 2601L: linux-fbdev-devel@lists.sourceforge.net (moderated for non-subscribers)
2605S: Maintained 2602S: Maintained
2606 2603
2607MAX6650 HARDWARE MONITOR AND FAN CONTROLLER DRIVER 2604MAX6650 HARDWARE MONITOR AND FAN CONTROLLER DRIVER
@@ -2910,7 +2907,7 @@ S: Maintained
2910NVIDIA (rivafb and nvidiafb) FRAMEBUFFER DRIVER 2907NVIDIA (rivafb and nvidiafb) FRAMEBUFFER DRIVER
2911P: Antonino Daplas 2908P: Antonino Daplas
2912M: adaplas@gmail.com 2909M: adaplas@gmail.com
2913L: linux-fbdev-devel@lists.sourceforge.net (subscribers-only) 2910L: linux-fbdev-devel@lists.sourceforge.net (moderated for non-subscribers)
2914S: Maintained 2911S: Maintained
2915 2912
2916OPENCORES I2C BUS DRIVER 2913OPENCORES I2C BUS DRIVER
@@ -3239,13 +3236,13 @@ S: Maintained
3239RADEON FRAMEBUFFER DISPLAY DRIVER 3236RADEON FRAMEBUFFER DISPLAY DRIVER
3240P: Benjamin Herrenschmidt 3237P: Benjamin Herrenschmidt
3241M: benh@kernel.crashing.org 3238M: benh@kernel.crashing.org
3242L: linux-fbdev-devel@lists.sourceforge.net (subscribers-only) 3239L: linux-fbdev-devel@lists.sourceforge.net (moderated for non-subscribers)
3243S: Maintained 3240S: Maintained
3244 3241
3245RAGE128 FRAMEBUFFER DISPLAY DRIVER 3242RAGE128 FRAMEBUFFER DISPLAY DRIVER
3246P: Paul Mackerras 3243P: Paul Mackerras
3247M: paulus@samba.org 3244M: paulus@samba.org
3248L: linux-fbdev-devel@lists.sourceforge.net (subscribers-only) 3245L: linux-fbdev-devel@lists.sourceforge.net (moderated for non-subscribers)
3249S: Maintained 3246S: Maintained
3250 3247
3251RAYLINK/WEBGEAR 802.11 WIRELESS LAN DRIVER 3248RAYLINK/WEBGEAR 802.11 WIRELESS LAN DRIVER
@@ -3350,7 +3347,7 @@ S: Maintained
3350S3 SAVAGE FRAMEBUFFER DRIVER 3347S3 SAVAGE FRAMEBUFFER DRIVER
3351P: Antonino Daplas 3348P: Antonino Daplas
3352M: adaplas@gmail.com 3349M: adaplas@gmail.com
3353L: linux-fbdev-devel@lists.sourceforge.net (subscribers-only) 3350L: linux-fbdev-devel@lists.sourceforge.net (moderated for non-subscribers)
3354S: Maintained 3351S: Maintained
3355 3352
3356S390 3353S390
@@ -4262,7 +4259,7 @@ S: Maintained
4262 4259
4263VT8231 HARDWARE MONITOR DRIVER 4260VT8231 HARDWARE MONITOR DRIVER
4264P: Roger Lucas 4261P: Roger Lucas
4265M: roger@planbit.co.uk 4262M: vt8231@hiddenengine.co.uk
4266L: lm-sensors@lm-sensors.org 4263L: lm-sensors@lm-sensors.org
4267S: Maintained 4264S: Maintained
4268 4265
diff --git a/Makefile b/Makefile
index 67cc45786177..a22978413b65 100644
--- a/Makefile
+++ b/Makefile
@@ -1,7 +1,7 @@
1VERSION = 2 1VERSION = 2
2PATCHLEVEL = 6 2PATCHLEVEL = 6
3SUBLEVEL = 25 3SUBLEVEL = 25
4EXTRAVERSION = -rc2 4EXTRAVERSION = -rc3
5NAME = Funky Weasel is Jiggy wit it 5NAME = Funky Weasel is Jiggy wit it
6 6
7# *DOCUMENTATION* 7# *DOCUMENTATION*
@@ -507,6 +507,10 @@ else
507KBUILD_CFLAGS += -O2 507KBUILD_CFLAGS += -O2
508endif 508endif
509 509
510# Force gcc to behave correct even for buggy distributions
511# Arch Makefiles may override this setting
512KBUILD_CFLAGS += $(call cc-option, -fno-stack-protector)
513
510include $(srctree)/arch/$(SRCARCH)/Makefile 514include $(srctree)/arch/$(SRCARCH)/Makefile
511 515
512ifdef CONFIG_FRAME_POINTER 516ifdef CONFIG_FRAME_POINTER
@@ -525,9 +529,6 @@ ifdef CONFIG_DEBUG_SECTION_MISMATCH
525KBUILD_CFLAGS += $(call cc-option, -fno-inline-functions-called-once) 529KBUILD_CFLAGS += $(call cc-option, -fno-inline-functions-called-once)
526endif 530endif
527 531
528# Force gcc to behave correct even for buggy distributions
529KBUILD_CFLAGS += $(call cc-option, -fno-stack-protector)
530
531# arch Makefile may override CC so keep this after arch Makefile is included 532# arch Makefile may override CC so keep this after arch Makefile is included
532NOSTDINC_FLAGS += -nostdinc -isystem $(shell $(CC) -print-file-name=include) 533NOSTDINC_FLAGS += -nostdinc -isystem $(shell $(CC) -print-file-name=include)
533CHECKFLAGS += $(NOSTDINC_FLAGS) 534CHECKFLAGS += $(NOSTDINC_FLAGS)
@@ -810,7 +811,9 @@ endif
810 $(Q)rm -f .old_version 811 $(Q)rm -f .old_version
811 812
812# build vmlinux.o first to catch section mismatch errors early 813# build vmlinux.o first to catch section mismatch errors early
813$(kallsyms.o): vmlinux.o 814ifdef CONFIG_KALLSYMS
815.tmp_vmlinux1: vmlinux.o
816endif
814vmlinux.o: $(vmlinux-lds) $(vmlinux-init) $(vmlinux-main) FORCE 817vmlinux.o: $(vmlinux-lds) $(vmlinux-init) $(vmlinux-main) FORCE
815 $(call if_changed_rule,vmlinux-modpost) 818 $(call if_changed_rule,vmlinux-modpost)
816 819
diff --git a/arch/arm/mach-omap1/board-sx1.c b/arch/arm/mach-omap1/board-sx1.c
index 1c7f09aedf07..e473fa6d4a5f 100644
--- a/arch/arm/mach-omap1/board-sx1.c
+++ b/arch/arm/mach-omap1/board-sx1.c
@@ -61,6 +61,7 @@ int sx1_i2c_write_byte(u8 devaddr, u8 regoffset, u8 value)
61 data[0] = regoffset; /* register num */ 61 data[0] = regoffset; /* register num */
62 data[1] = value; /* register data */ 62 data[1] = value; /* register data */
63 err = i2c_transfer(adap, msg, 1); 63 err = i2c_transfer(adap, msg, 1);
64 i2c_put_adapter(adap);
64 if (err >= 0) 65 if (err >= 0)
65 return 0; 66 return 0;
66 return err; 67 return err;
@@ -91,6 +92,7 @@ int sx1_i2c_read_byte(u8 devaddr, u8 regoffset, u8 *value)
91 msg->buf = data; 92 msg->buf = data;
92 err = i2c_transfer(adap, msg, 1); 93 err = i2c_transfer(adap, msg, 1);
93 *value = data[0]; 94 *value = data[0];
95 i2c_put_adapter(adap);
94 96
95 if (err >= 0) 97 if (err >= 0)
96 return 0; 98 return 0;
diff --git a/arch/arm/mach-orion/ts209-setup.c b/arch/arm/mach-orion/ts209-setup.c
index 306dbcd1e37b..b8cfe6813e9d 100644
--- a/arch/arm/mach-orion/ts209-setup.c
+++ b/arch/arm/mach-orion/ts209-setup.c
@@ -192,9 +192,13 @@ static struct mv643xx_eth_platform_data qnap_ts209_eth_data = {
192/***************************************************************************** 192/*****************************************************************************
193 * RTC S35390A on I2C bus 193 * RTC S35390A on I2C bus
194 ****************************************************************************/ 194 ****************************************************************************/
195
196#define TS209_RTC_GPIO 3
197
195static struct i2c_board_info __initdata qnap_ts209_i2c_rtc = { 198static struct i2c_board_info __initdata qnap_ts209_i2c_rtc = {
196 .driver_name = "rtc-s35390a", 199 .driver_name = "rtc-s35390a",
197 .addr = 0x30, 200 .addr = 0x30,
201 .irq = 0,
198}; 202};
199 203
200/**************************************************************************** 204/****************************************************************************
@@ -328,7 +332,18 @@ static void __init qnap_ts209_init(void)
328 332
329 platform_add_devices(qnap_ts209_devices, 333 platform_add_devices(qnap_ts209_devices,
330 ARRAY_SIZE(qnap_ts209_devices)); 334 ARRAY_SIZE(qnap_ts209_devices));
335
336 /* Get RTC IRQ and register the chip */
337 if (gpio_request(TS209_RTC_GPIO, "rtc") == 0) {
338 if (gpio_direction_input(TS209_RTC_GPIO) == 0)
339 qnap_ts209_i2c_rtc.irq = gpio_to_irq(TS209_RTC_GPIO);
340 else
341 gpio_free(TS209_RTC_GPIO);
342 }
343 if (qnap_ts209_i2c_rtc.irq == 0)
344 pr_warning("qnap_ts209_init: failed to get RTC IRQ\n");
331 i2c_register_board_info(0, &qnap_ts209_i2c_rtc, 1); 345 i2c_register_board_info(0, &qnap_ts209_i2c_rtc, 1);
346
332 orion_eth_init(&qnap_ts209_eth_data); 347 orion_eth_init(&qnap_ts209_eth_data);
333 orion_sata_init(&qnap_ts209_sata_data); 348 orion_sata_init(&qnap_ts209_sata_data);
334} 349}
diff --git a/arch/arm/mach-pxa/clock.c b/arch/arm/mach-pxa/clock.c
index 83ef5ecaf432..df5ae2710ab1 100644
--- a/arch/arm/mach-pxa/clock.c
+++ b/arch/arm/mach-pxa/clock.c
@@ -23,18 +23,27 @@ static LIST_HEAD(clocks);
23static DEFINE_MUTEX(clocks_mutex); 23static DEFINE_MUTEX(clocks_mutex);
24static DEFINE_SPINLOCK(clocks_lock); 24static DEFINE_SPINLOCK(clocks_lock);
25 25
26static struct clk *clk_lookup(struct device *dev, const char *id)
27{
28 struct clk *p;
29
30 list_for_each_entry(p, &clocks, node)
31 if (strcmp(id, p->name) == 0 && p->dev == dev)
32 return p;
33
34 return NULL;
35}
36
26struct clk *clk_get(struct device *dev, const char *id) 37struct clk *clk_get(struct device *dev, const char *id)
27{ 38{
28 struct clk *p, *clk = ERR_PTR(-ENOENT); 39 struct clk *p, *clk = ERR_PTR(-ENOENT);
29 40
30 mutex_lock(&clocks_mutex); 41 mutex_lock(&clocks_mutex);
31 list_for_each_entry(p, &clocks, node) { 42 p = clk_lookup(dev, id);
32 if (strcmp(id, p->name) == 0 && 43 if (!p)
33 (p->dev == NULL || p->dev == dev)) { 44 p = clk_lookup(NULL, id);
34 clk = p; 45 if (p)
35 break; 46 clk = p;
36 }
37 }
38 mutex_unlock(&clocks_mutex); 47 mutex_unlock(&clocks_mutex);
39 48
40 return clk; 49 return clk;
diff --git a/arch/arm/mach-pxa/cpu-pxa.c b/arch/arm/mach-pxa/cpu-pxa.c
index cbc583beedc8..939a3867f77c 100644
--- a/arch/arm/mach-pxa/cpu-pxa.c
+++ b/arch/arm/mach-pxa/cpu-pxa.c
@@ -134,7 +134,7 @@ static int pxa_set_target(struct cpufreq_policy *policy,
134 struct cpufreq_frequency_table *pxa_freqs_table; 134 struct cpufreq_frequency_table *pxa_freqs_table;
135 pxa_freqs_t *pxa_freq_settings; 135 pxa_freqs_t *pxa_freq_settings;
136 struct cpufreq_freqs freqs; 136 struct cpufreq_freqs freqs;
137 int idx; 137 unsigned int idx;
138 unsigned long flags; 138 unsigned long flags;
139 unsigned int unused, preset_mdrefr, postset_mdrefr; 139 unsigned int unused, preset_mdrefr, postset_mdrefr;
140 void *ramstart = phys_to_virt(0xa0000000); 140 void *ramstart = phys_to_virt(0xa0000000);
@@ -233,6 +233,11 @@ static int pxa_set_target(struct cpufreq_policy *policy,
233 return 0; 233 return 0;
234} 234}
235 235
236static unsigned int pxa_cpufreq_get(unsigned int cpu)
237{
238 return get_clk_frequency_khz(0);
239}
240
236static int pxa_cpufreq_init(struct cpufreq_policy *policy) 241static int pxa_cpufreq_init(struct cpufreq_policy *policy)
237{ 242{
238 int i; 243 int i;
@@ -269,6 +274,7 @@ static struct cpufreq_driver pxa_cpufreq_driver = {
269 .verify = pxa_verify_policy, 274 .verify = pxa_verify_policy,
270 .target = pxa_set_target, 275 .target = pxa_set_target,
271 .init = pxa_cpufreq_init, 276 .init = pxa_cpufreq_init,
277 .get = pxa_cpufreq_get,
272 .name = "PXA25x", 278 .name = "PXA25x",
273}; 279};
274 280
diff --git a/arch/frv/kernel/entry.S b/arch/frv/kernel/entry.S
index ca6a345b87e4..f36d7f4a7c25 100644
--- a/arch/frv/kernel/entry.S
+++ b/arch/frv/kernel/entry.S
@@ -1494,9 +1494,11 @@ sys_call_table:
1494 .long sys_epoll_pwait 1494 .long sys_epoll_pwait
1495 .long sys_utimensat /* 320 */ 1495 .long sys_utimensat /* 320 */
1496 .long sys_signalfd 1496 .long sys_signalfd
1497 .long sys_ni_syscall 1497 .long sys_timerfd_create
1498 .long sys_eventfd 1498 .long sys_eventfd
1499 .long sys_fallocate 1499 .long sys_fallocate
1500 .long sys_timerfd_settime /* 325 */
1501 .long sys_timerfd_gettime
1500 1502
1501 1503
1502syscall_table_size = (. - sys_call_table) 1504syscall_table_size = (. - sys_call_table)
diff --git a/arch/frv/kernel/vmlinux.lds.S b/arch/frv/kernel/vmlinux.lds.S
index 17725a55aed8..b95c4eace62f 100644
--- a/arch/frv/kernel/vmlinux.lds.S
+++ b/arch/frv/kernel/vmlinux.lds.S
@@ -76,9 +76,6 @@ SECTIONS
76 *(.data.init_task) 76 *(.data.init_task)
77 } 77 }
78 78
79 . = ALIGN(4096);
80 .data.page_aligned : { *(.data.idt) }
81
82 . = ALIGN(L1_CACHE_BYTES); 79 . = ALIGN(L1_CACHE_BYTES);
83 .data.cacheline_aligned : { *(.data.cacheline_aligned) } 80 .data.cacheline_aligned : { *(.data.cacheline_aligned) }
84 81
diff --git a/arch/h8300/defconfig b/arch/h8300/defconfig
index 8f1ec3297150..8901cdb5e75b 100644
--- a/arch/h8300/defconfig
+++ b/arch/h8300/defconfig
@@ -1,51 +1,98 @@
1# 1#
2# Automatically generated make config: don't edit 2# Automatically generated make config: don't edit
3# Linux kernel version: 2.6.11-rc1 3# Linux kernel version: 2.6.25-rc1
4# Sun Jan 16 17:24:38 2005 4# Fri Feb 15 17:13:14 2008
5# 5#
6CONFIG_H8300=y 6CONFIG_H8300=y
7# CONFIG_MMU is not set 7# CONFIG_MMU is not set
8# CONFIG_SWAP is not set 8# CONFIG_SWAP is not set
9CONFIG_ZONE_DMA=y
9# CONFIG_FPU is not set 10# CONFIG_FPU is not set
10CONFIG_UID16=y
11CONFIG_RWSEM_GENERIC_SPINLOCK=y 11CONFIG_RWSEM_GENERIC_SPINLOCK=y
12# CONFIG_RWSEM_XCHGADD_ALGORITHM is not set 12# CONFIG_RWSEM_XCHGADD_ALGORITHM is not set
13# CONFIG_ARCH_HAS_ILOG2_U32 is not set
14# CONFIG_ARCH_HAS_ILOG2_U64 is not set
15CONFIG_GENERIC_FIND_NEXT_BIT=y
16CONFIG_GENERIC_HWEIGHT=y
17CONFIG_GENERIC_HARDIRQS=y
13CONFIG_GENERIC_CALIBRATE_DELAY=y 18CONFIG_GENERIC_CALIBRATE_DELAY=y
19CONFIG_GENERIC_TIME=y
20CONFIG_TIME_LOW_RES=y
21CONFIG_ARCH_SUPPORTS_AOUT=y
22CONFIG_NO_IOPORT=y
23CONFIG_NO_DMA=y
14CONFIG_ISA=y 24CONFIG_ISA=y
15# CONFIG_PCI is not set 25# CONFIG_PCI is not set
26CONFIG_HZ=100
27CONFIG_C_SYMBOL_PREFIX=y
28CONFIG_DEFCONFIG_LIST="/lib/modules/$UNAME_RELEASE/.config"
16 29
17# 30#
18# Code maturity level options 31# General setup
19# 32#
20CONFIG_EXPERIMENTAL=y 33CONFIG_EXPERIMENTAL=y
21CONFIG_CLEAN_COMPILE=y
22CONFIG_BROKEN_ON_SMP=y 34CONFIG_BROKEN_ON_SMP=y
23 35CONFIG_INIT_ENV_ARG_LIMIT=32
24#
25# General setup
26#
27CONFIG_LOCALVERSION="" 36CONFIG_LOCALVERSION=""
37# CONFIG_LOCALVERSION_AUTO is not set
38# CONFIG_SYSVIPC is not set
28# CONFIG_BSD_PROCESS_ACCT is not set 39# CONFIG_BSD_PROCESS_ACCT is not set
29# CONFIG_SYSCTL is not set
30# CONFIG_AUDIT is not set
31CONFIG_LOG_BUF_SHIFT=14
32# CONFIG_HOTPLUG is not set
33# CONFIG_IKCONFIG is not set 40# CONFIG_IKCONFIG is not set
41CONFIG_LOG_BUF_SHIFT=14
42# CONFIG_CGROUPS is not set
43# CONFIG_FAIR_GROUP_SCHED is not set
44# CONFIG_SYSFS_DEPRECATED is not set
45# CONFIG_RELAY is not set
46# CONFIG_NAMESPACES is not set
47# CONFIG_BLK_DEV_INITRD is not set
48CONFIG_CC_OPTIMIZE_FOR_SIZE=y
49CONFIG_SYSCTL=y
34CONFIG_EMBEDDED=y 50CONFIG_EMBEDDED=y
51# CONFIG_UID16 is not set
52# CONFIG_SYSCTL_SYSCALL is not set
35# CONFIG_KALLSYMS is not set 53# CONFIG_KALLSYMS is not set
54# CONFIG_HOTPLUG is not set
55CONFIG_PRINTK=y
56CONFIG_BUG=y
57CONFIG_ELF_CORE=y
58# CONFIG_COMPAT_BRK is not set
59# CONFIG_BASE_FULL is not set
36# CONFIG_FUTEX is not set 60# CONFIG_FUTEX is not set
37# CONFIG_EPOLL is not set 61# CONFIG_EPOLL is not set
38CONFIG_CC_OPTIMIZE_FOR_SIZE=y 62# CONFIG_SIGNALFD is not set
39CONFIG_CC_ALIGN_FUNCTIONS=0 63# CONFIG_TIMERFD is not set
40CONFIG_CC_ALIGN_LABELS=0 64# CONFIG_EVENTFD is not set
41CONFIG_CC_ALIGN_LOOPS=0 65# CONFIG_VM_EVENT_COUNTERS is not set
42CONFIG_CC_ALIGN_JUMPS=0 66# CONFIG_SLAB is not set
67# CONFIG_SLUB is not set
68CONFIG_SLOB=y
69# CONFIG_PROFILING is not set
70# CONFIG_MARKERS is not set
71# CONFIG_HAVE_OPROFILE is not set
72# CONFIG_HAVE_KPROBES is not set
43CONFIG_TINY_SHMEM=y 73CONFIG_TINY_SHMEM=y
74CONFIG_BASE_SMALL=1
75# CONFIG_MODULES is not set
76CONFIG_BLOCK=y
77# CONFIG_LBD is not set
78# CONFIG_BLK_DEV_IO_TRACE is not set
79# CONFIG_LSF is not set
80# CONFIG_BLK_DEV_BSG is not set
44 81
45# 82#
46# Loadable module support 83# IO Schedulers
47# 84#
48# CONFIG_MODULES is not set 85CONFIG_IOSCHED_NOOP=y
86# CONFIG_IOSCHED_AS is not set
87# CONFIG_IOSCHED_DEADLINE is not set
88# CONFIG_IOSCHED_CFQ is not set
89# CONFIG_DEFAULT_AS is not set
90# CONFIG_DEFAULT_DEADLINE is not set
91# CONFIG_DEFAULT_CFQ is not set
92CONFIG_DEFAULT_NOOP=y
93CONFIG_DEFAULT_IOSCHED="noop"
94CONFIG_CLASSIC_RCU=y
95# CONFIG_PREEMPT_RCU is not set
49 96
50# 97#
51# Processor type and features 98# Processor type and features
@@ -62,14 +109,26 @@ CONFIG_H8300H_GENERIC=y
62# Detail Selection 109# Detail Selection
63# 110#
64# CONFIG_H83002 is not set 111# CONFIG_H83002 is not set
65# CONFIG_H83007 is not set 112CONFIG_H83007=y
66# CONFIG_H83048 is not set 113# CONFIG_H83048 is not set
67CONFIG_H83068=y 114# CONFIG_H83068 is not set
68CONFIG_CPU_CLOCK=20000 115CONFIG_CPU_CLOCK=20000
69# CONFIG_RAMKERNEL is not set 116CONFIG_RAMKERNEL=y
70CONFIG_ROMKERNEL=y 117# CONFIG_ROMKERNEL is not set
71CONFIG_CPU_H8300H=y 118CONFIG_CPU_H8300H=y
72# CONFIG_PREEMPT is not set 119# CONFIG_PREEMPT is not set
120CONFIG_SELECT_MEMORY_MODEL=y
121CONFIG_FLATMEM_MANUAL=y
122# CONFIG_DISCONTIGMEM_MANUAL is not set
123# CONFIG_SPARSEMEM_MANUAL is not set
124CONFIG_FLATMEM=y
125CONFIG_FLAT_NODE_MEM_MAP=y
126# CONFIG_SPARSEMEM_STATIC is not set
127# CONFIG_SPARSEMEM_VMEMMAP_ENABLE is not set
128CONFIG_SPLIT_PTLOCK_CPUS=4
129# CONFIG_RESOURCES_64BIT is not set
130CONFIG_ZONE_DMA_FLAG=1
131CONFIG_VIRT_TO_BUS=y
73 132
74# 133#
75# Executable file formats 134# Executable file formats
@@ -77,34 +136,42 @@ CONFIG_CPU_H8300H=y
77CONFIG_BINFMT_FLAT=y 136CONFIG_BINFMT_FLAT=y
78CONFIG_BINFMT_ZFLAT=y 137CONFIG_BINFMT_ZFLAT=y
79# CONFIG_BINFMT_SHARED_FLAT is not set 138# CONFIG_BINFMT_SHARED_FLAT is not set
80# CONFIG_BINFMT_MISC is not set 139CONFIG_BINFMT_MISC=y
81 140
82# 141#
83# Generic Driver Options 142# Networking
84# 143#
85# CONFIG_STANDALONE is not set 144# CONFIG_NET is not set
86# CONFIG_PREVENT_FIRMWARE_BUILD is not set
87# CONFIG_FW_LOADER is not set
88# CONFIG_DEBUG_DRIVER is not set
89 145
90# 146#
91# Memory Technology Devices (MTD) 147# Generic Driver Options
92# 148#
149CONFIG_STANDALONE=y
150# CONFIG_PREVENT_FIRMWARE_BUILD is not set
151# CONFIG_SYS_HYPERVISOR is not set
93CONFIG_MTD=y 152CONFIG_MTD=y
94# CONFIG_MTD_DEBUG is not set 153# CONFIG_MTD_DEBUG is not set
154# CONFIG_MTD_CONCAT is not set
95CONFIG_MTD_PARTITIONS=y 155CONFIG_MTD_PARTITIONS=y
96CONFIG_MTD_CONCAT=y 156CONFIG_MTD_REDBOOT_PARTS=y
97# CONFIG_MTD_REDBOOT_PARTS is not set 157CONFIG_MTD_REDBOOT_DIRECTORY_BLOCK=-1
158# CONFIG_MTD_REDBOOT_PARTS_UNALLOCATED is not set
159# CONFIG_MTD_REDBOOT_PARTS_READONLY is not set
98# CONFIG_MTD_CMDLINE_PARTS is not set 160# CONFIG_MTD_CMDLINE_PARTS is not set
99 161
100# 162#
101# User Modules And Translation Layers 163# User Modules And Translation Layers
102# 164#
103CONFIG_MTD_CHAR=y 165CONFIG_MTD_CHAR=y
104CONFIG_MTD_BLOCK=y 166# CONFIG_MTD_BLKDEVS is not set
167# CONFIG_MTD_BLOCK is not set
168# CONFIG_MTD_BLOCK_RO is not set
105# CONFIG_FTL is not set 169# CONFIG_FTL is not set
106# CONFIG_NFTL is not set 170# CONFIG_NFTL is not set
107# CONFIG_INFTL is not set 171# CONFIG_INFTL is not set
172# CONFIG_RFD_FTL is not set
173# CONFIG_SSFDC is not set
174# CONFIG_MTD_OOPS is not set
108 175
109# 176#
110# RAM/ROM/Flash chip drivers 177# RAM/ROM/Flash chip drivers
@@ -129,7 +196,9 @@ CONFIG_MTD_ROM=y
129# Mapping drivers for chip access 196# Mapping drivers for chip access
130# 197#
131# CONFIG_MTD_COMPLEX_MAPPINGS is not set 198# CONFIG_MTD_COMPLEX_MAPPINGS is not set
199# CONFIG_MTD_PHYSMAP is not set
132CONFIG_MTD_UCLINUX=y 200CONFIG_MTD_UCLINUX=y
201# CONFIG_MTD_PLATRAM is not set
133 202
134# 203#
135# Self-contained MTD device drivers 204# Self-contained MTD device drivers
@@ -137,7 +206,6 @@ CONFIG_MTD_UCLINUX=y
137# CONFIG_MTD_SLRAM is not set 206# CONFIG_MTD_SLRAM is not set
138# CONFIG_MTD_PHRAM is not set 207# CONFIG_MTD_PHRAM is not set
139# CONFIG_MTD_MTDRAM is not set 208# CONFIG_MTD_MTDRAM is not set
140# CONFIG_MTD_BLKMTD is not set
141# CONFIG_MTD_BLOCK2MTD is not set 209# CONFIG_MTD_BLOCK2MTD is not set
142 210
143# 211#
@@ -146,63 +214,27 @@ CONFIG_MTD_UCLINUX=y
146# CONFIG_MTD_DOC2000 is not set 214# CONFIG_MTD_DOC2000 is not set
147# CONFIG_MTD_DOC2001 is not set 215# CONFIG_MTD_DOC2001 is not set
148# CONFIG_MTD_DOC2001PLUS is not set 216# CONFIG_MTD_DOC2001PLUS is not set
149
150#
151# NAND Flash Device Drivers
152#
153# CONFIG_MTD_NAND is not set 217# CONFIG_MTD_NAND is not set
218# CONFIG_MTD_ONENAND is not set
154 219
155# 220#
156# Block devices 221# UBI - Unsorted block images
157#
158# CONFIG_BLK_DEV_FD is not set
159# CONFIG_BLK_DEV_XD is not set
160# CONFIG_BLK_DEV_LOOP is not set
161# CONFIG_BLK_DEV_RAM is not set
162CONFIG_BLK_DEV_RAM_COUNT=16
163CONFIG_INITRAMFS_SOURCE=""
164# CONFIG_CDROM_PKTCDVD is not set
165
166#
167# IO Schedulers
168#
169CONFIG_IOSCHED_NOOP=y
170# CONFIG_IOSCHED_AS is not set
171# CONFIG_IOSCHED_DEADLINE is not set
172# CONFIG_IOSCHED_CFQ is not set
173
174#
175# ATA/ATAPI/MFM/RLL support
176# 222#
223# CONFIG_MTD_UBI is not set
224# CONFIG_BLK_DEV is not set
225CONFIG_HAVE_IDE=y
177# CONFIG_IDE is not set 226# CONFIG_IDE is not set
178 227
179# 228#
180# Networking support
181#
182# CONFIG_NET is not set
183# CONFIG_NETPOLL is not set
184# CONFIG_NET_POLL_CONTROLLER is not set
185
186#
187# Input device support 229# Input device support
188# 230#
189# CONFIG_INPUT is not set 231# CONFIG_INPUT is not set
190 232
191# 233#
192# Userland interfaces 234# Hardware I/O ports
193#
194
195#
196# Input I/O drivers
197# 235#
198# CONFIG_GAMEPORT is not set
199CONFIG_SOUND_GAMEPORT=y
200# CONFIG_SERIO is not set 236# CONFIG_SERIO is not set
201# CONFIG_SERIO_I8042 is not set 237# CONFIG_GAMEPORT is not set
202
203#
204# Input Device Drivers
205#
206 238
207# 239#
208# Character devices 240# Character devices
@@ -223,45 +255,31 @@ CONFIG_SOUND_GAMEPORT=y
223# Non-8250 serial port support 255# Non-8250 serial port support
224# 256#
225CONFIG_SERIAL_SH_SCI=y 257CONFIG_SERIAL_SH_SCI=y
258CONFIG_SERIAL_SH_SCI_NR_UARTS=2
226CONFIG_SERIAL_SH_SCI_CONSOLE=y 259CONFIG_SERIAL_SH_SCI_CONSOLE=y
227CONFIG_SERIAL_CORE=y 260CONFIG_SERIAL_CORE=y
228CONFIG_SERIAL_CORE_CONSOLE=y 261CONFIG_SERIAL_CORE_CONSOLE=y
229
230#
231# I2C support
232#
233# CONFIG_I2C is not set 262# CONFIG_I2C is not set
234 263# CONFIG_HWMON is not set
235# 264# CONFIG_USB_SUPPORT is not set
236# USB support
237#
238# CONFIG_USB_ARCH_HAS_HCD is not set
239# CONFIG_USB_ARCH_HAS_OHCI is not set
240
241#
242# NOTE: USB_STORAGE enables SCSI, and 'SCSI disk support' may also be needed; see USB_STORAGE Help for more information
243#
244
245#
246# USB Gadget Support
247#
248# CONFIG_USB_GADGET is not set
249 265
250# 266#
251# File systems 267# File systems
252# 268#
253# CONFIG_EXT2_FS is not set 269# CONFIG_EXT2_FS is not set
254# CONFIG_EXT3_FS is not set 270# CONFIG_EXT3_FS is not set
255# CONFIG_JBD is not set 271# CONFIG_EXT4DEV_FS is not set
256# CONFIG_REISERFS_FS is not set 272# CONFIG_REISERFS_FS is not set
257# CONFIG_JFS_FS is not set 273# CONFIG_JFS_FS is not set
274# CONFIG_FS_POSIX_ACL is not set
258# CONFIG_XFS_FS is not set 275# CONFIG_XFS_FS is not set
259# CONFIG_MINIX_FS is not set 276# CONFIG_GFS2_FS is not set
260CONFIG_ROMFS_FS=y
261# CONFIG_QUOTA is not set
262# CONFIG_DNOTIFY is not set 277# CONFIG_DNOTIFY is not set
278# CONFIG_INOTIFY is not set
279# CONFIG_QUOTA is not set
263# CONFIG_AUTOFS_FS is not set 280# CONFIG_AUTOFS_FS is not set
264# CONFIG_AUTOFS4_FS is not set 281# CONFIG_AUTOFS4_FS is not set
282# CONFIG_FUSE_FS is not set
265 283
266# 284#
267# CD-ROM/DVD Filesystems 285# CD-ROM/DVD Filesystems
@@ -280,11 +298,11 @@ CONFIG_ROMFS_FS=y
280# Pseudo filesystems 298# Pseudo filesystems
281# 299#
282CONFIG_PROC_FS=y 300CONFIG_PROC_FS=y
283# CONFIG_SYSFS is not set 301CONFIG_PROC_SYSCTL=y
284# CONFIG_DEVFS_FS is not set 302CONFIG_SYSFS=y
285# CONFIG_TMPFS is not set 303# CONFIG_TMPFS is not set
286# CONFIG_HUGETLB_PAGE is not set 304# CONFIG_HUGETLB_PAGE is not set
287CONFIG_RAMFS=y 305# CONFIG_CONFIGFS_FS is not set
288 306
289# 307#
290# Miscellaneous filesystems 308# Miscellaneous filesystems
@@ -296,12 +314,13 @@ CONFIG_RAMFS=y
296# CONFIG_BEFS_FS is not set 314# CONFIG_BEFS_FS is not set
297# CONFIG_BFS_FS is not set 315# CONFIG_BFS_FS is not set
298# CONFIG_EFS_FS is not set 316# CONFIG_EFS_FS is not set
299# CONFIG_JFFS_FS is not set
300# CONFIG_JFFS2_FS is not set 317# CONFIG_JFFS2_FS is not set
301# CONFIG_CRAMFS is not set 318# CONFIG_CRAMFS is not set
302# CONFIG_VXFS_FS is not set 319# CONFIG_VXFS_FS is not set
320# CONFIG_MINIX_FS is not set
303# CONFIG_HPFS_FS is not set 321# CONFIG_HPFS_FS is not set
304# CONFIG_QNX4FS_FS is not set 322# CONFIG_QNX4FS_FS is not set
323CONFIG_ROMFS_FS=y
305# CONFIG_SYSV_FS is not set 324# CONFIG_SYSV_FS is not set
306# CONFIG_UFS_FS is not set 325# CONFIG_UFS_FS is not set
307 326
@@ -310,22 +329,23 @@ CONFIG_RAMFS=y
310# 329#
311# CONFIG_PARTITION_ADVANCED is not set 330# CONFIG_PARTITION_ADVANCED is not set
312CONFIG_MSDOS_PARTITION=y 331CONFIG_MSDOS_PARTITION=y
313
314#
315# Native Language Support
316#
317# CONFIG_NLS is not set 332# CONFIG_NLS is not set
318 333
319# 334#
320# Kernel hacking 335# Kernel hacking
321# 336#
322CONFIG_DEBUG_KERNEL=y 337# CONFIG_PRINTK_TIME is not set
323# CONFIG_SCHEDSTATS is not set 338# CONFIG_ENABLE_WARN_DEPRECATED is not set
324# CONFIG_DEBUG_KOBJECT is not set 339# CONFIG_ENABLE_MUST_CHECK is not set
340# CONFIG_MAGIC_SYSRQ is not set
341# CONFIG_UNUSED_SYMBOLS is not set
325# CONFIG_DEBUG_FS is not set 342# CONFIG_DEBUG_FS is not set
326CONFIG_FULLDEBUG=y 343# CONFIG_HEADERS_CHECK is not set
344# CONFIG_DEBUG_KERNEL is not set
345# CONFIG_SAMPLES is not set
346# CONFIG_FULLDEBUG is not set
327# CONFIG_HIGHPROFILE is not set 347# CONFIG_HIGHPROFILE is not set
328CONFIG_NO_KERNEL_MSG=y 348# CONFIG_NO_KERNEL_MSG is not set
329# CONFIG_SYSCALL_PRINT is not set 349# CONFIG_SYSCALL_PRINT is not set
330# CONFIG_GDB_DEBUG is not set 350# CONFIG_GDB_DEBUG is not set
331# CONFIG_SH_STANDARD_BIOS is not set 351# CONFIG_SH_STANDARD_BIOS is not set
@@ -337,20 +357,17 @@ CONFIG_NO_KERNEL_MSG=y
337# 357#
338# CONFIG_KEYS is not set 358# CONFIG_KEYS is not set
339# CONFIG_SECURITY is not set 359# CONFIG_SECURITY is not set
340 360# CONFIG_SECURITY_FILE_CAPABILITIES is not set
341#
342# Cryptographic options
343#
344# CONFIG_CRYPTO is not set 361# CONFIG_CRYPTO is not set
345 362
346# 363#
347# Hardware crypto devices
348#
349
350#
351# Library routines 364# Library routines
352# 365#
353# CONFIG_CRC_CCITT is not set 366# CONFIG_CRC_CCITT is not set
354CONFIG_CRC32=y 367# CONFIG_CRC16 is not set
368# CONFIG_CRC_ITU_T is not set
369# CONFIG_CRC32 is not set
370# CONFIG_CRC7 is not set
355# CONFIG_LIBCRC32C is not set 371# CONFIG_LIBCRC32C is not set
356CONFIG_ZLIB_INFLATE=y 372CONFIG_ZLIB_INFLATE=y
373CONFIG_HAS_IOMEM=y
diff --git a/arch/h8300/kernel/irq.c b/arch/h8300/kernel/irq.c
index 5a1b4cfea05b..ef4f0047067d 100644
--- a/arch/h8300/kernel/irq.c
+++ b/arch/h8300/kernel/irq.c
@@ -26,7 +26,7 @@
26 26
27extern unsigned long *interrupt_redirect_table; 27extern unsigned long *interrupt_redirect_table;
28extern const int h8300_saved_vectors[]; 28extern const int h8300_saved_vectors[];
29extern const unsigned long h8300_trap_table[]; 29extern const h8300_vector h8300_trap_table[];
30int h8300_enable_irq_pin(unsigned int irq); 30int h8300_enable_irq_pin(unsigned int irq);
31void h8300_disable_irq_pin(unsigned int irq); 31void h8300_disable_irq_pin(unsigned int irq);
32 32
@@ -116,7 +116,7 @@ static void __init setup_vector(void)
116{ 116{
117 int i; 117 int i;
118 unsigned long *ramvec,*ramvec_p; 118 unsigned long *ramvec,*ramvec_p;
119 const unsigned long *trap_entry; 119 const h8300_vector *trap_entry;
120 const int *saved_vector; 120 const int *saved_vector;
121 121
122 ramvec = get_vector_address(); 122 ramvec = get_vector_address();
diff --git a/arch/h8300/kernel/signal.c b/arch/h8300/kernel/signal.c
index 62ea12d339b9..cf3472f7389b 100644
--- a/arch/h8300/kernel/signal.c
+++ b/arch/h8300/kernel/signal.c
@@ -352,7 +352,7 @@ static void setup_frame (int sig, struct k_sigaction *ka,
352 ret = (unsigned char *)(ka->sa.sa_restorer); 352 ret = (unsigned char *)(ka->sa.sa_restorer);
353 else { 353 else {
354 /* sub.l er0,er0; mov.b #__NR_sigreturn,r0l; trapa #0 */ 354 /* sub.l er0,er0; mov.b #__NR_sigreturn,r0l; trapa #0 */
355 err != __put_user(0x1a80f800 + (__NR_sigreturn & 0xff), 355 err |= __put_user(0x1a80f800 + (__NR_sigreturn & 0xff),
356 (unsigned long *)(frame->retcode + 0)); 356 (unsigned long *)(frame->retcode + 0));
357 err |= __put_user(0x5700, (unsigned short *)(frame->retcode + 4)); 357 err |= __put_user(0x5700, (unsigned short *)(frame->retcode + 4));
358 } 358 }
@@ -428,7 +428,7 @@ static void setup_rt_frame (int sig, struct k_sigaction *ka, siginfo_t *info,
428 ret = (unsigned char *)(ka->sa.sa_restorer); 428 ret = (unsigned char *)(ka->sa.sa_restorer);
429 else { 429 else {
430 /* sub.l er0,er0; mov.b #__NR_sigreturn,r0l; trapa #0 */ 430 /* sub.l er0,er0; mov.b #__NR_sigreturn,r0l; trapa #0 */
431 err != __put_user(0x1a80f800 + (__NR_sigreturn & 0xff), 431 err |= __put_user(0x1a80f800 + (__NR_sigreturn & 0xff),
432 (unsigned long *)(frame->retcode + 0)); 432 (unsigned long *)(frame->retcode + 0));
433 err |= __put_user(0x5700, (unsigned short *)(frame->retcode + 4)); 433 err |= __put_user(0x5700, (unsigned short *)(frame->retcode + 4));
434 } 434 }
diff --git a/arch/h8300/platform/h8300h/Makefile b/arch/h8300/platform/h8300h/Makefile
index c5096369ea50..420f73b0d962 100644
--- a/arch/h8300/platform/h8300h/Makefile
+++ b/arch/h8300/platform/h8300h/Makefile
@@ -4,4 +4,4 @@
4# Reuse any files we can from the H8/300H 4# Reuse any files we can from the H8/300H
5# 5#
6 6
7obj-y := irq_pin.o ptrace_h8300h.o 7obj-y := irq.o ptrace_h8300h.o
diff --git a/arch/h8300/platform/h8300h/irq.c b/arch/h8300/platform/h8300h/irq.c
new file mode 100644
index 000000000000..e977345105d7
--- /dev/null
+++ b/arch/h8300/platform/h8300h/irq.c
@@ -0,0 +1,82 @@
1/*
2 * Interrupt handling H8/300H depend.
3 * Yoshinori Sato <ysato@users.sourceforge.jp>
4 *
5 */
6
7#include <linux/init.h>
8#include <linux/errno.h>
9
10#include <asm/ptrace.h>
11#include <asm/traps.h>
12#include <asm/irq.h>
13#include <asm/io.h>
14#include <asm/gpio.h>
15#include <asm/regs306x.h>
16
17const int __initdata h8300_saved_vectors[] = {
18#if defined(CONFIG_GDB_DEBUG)
19 TRAP3_VEC, /* TRAPA #3 is GDB breakpoint */
20#endif
21 -1,
22};
23
24const h8300_vector __initdata h8300_trap_table[] = {
25 0, 0, 0, 0, 0, 0, 0, 0,
26 system_call,
27 0,
28 0,
29 trace_break,
30};
31
32int h8300_enable_irq_pin(unsigned int irq)
33{
34 int bitmask;
35 if (irq < EXT_IRQ0 || irq > EXT_IRQ5)
36 return 0;
37
38 /* initialize IRQ pin */
39 bitmask = 1 << (irq - EXT_IRQ0);
40 switch(irq) {
41 case EXT_IRQ0:
42 case EXT_IRQ1:
43 case EXT_IRQ2:
44 case EXT_IRQ3:
45 if (H8300_GPIO_RESERVE(H8300_GPIO_P8, bitmask) == 0)
46 return -EBUSY;
47 H8300_GPIO_DDR(H8300_GPIO_P8, bitmask, H8300_GPIO_INPUT);
48 break;
49 case EXT_IRQ4:
50 case EXT_IRQ5:
51 if (H8300_GPIO_RESERVE(H8300_GPIO_P9, bitmask) == 0)
52 return -EBUSY;
53 H8300_GPIO_DDR(H8300_GPIO_P9, bitmask, H8300_GPIO_INPUT);
54 break;
55 }
56
57 return 0;
58}
59
60void h8300_disable_irq_pin(unsigned int irq)
61{
62 int bitmask;
63 if (irq < EXT_IRQ0 || irq > EXT_IRQ5)
64 return;
65
66 /* disable interrupt & release IRQ pin */
67 bitmask = 1 << (irq - EXT_IRQ0);
68 switch(irq) {
69 case EXT_IRQ0:
70 case EXT_IRQ1:
71 case EXT_IRQ2:
72 case EXT_IRQ3:
73 *(volatile unsigned char *)IER &= ~bitmask;
74 H8300_GPIO_FREE(H8300_GPIO_P8, bitmask);
75 break ;
76 case EXT_IRQ4:
77 case EXT_IRQ5:
78 *(volatile unsigned char *)IER &= ~bitmask;
79 H8300_GPIO_FREE(H8300_GPIO_P9, bitmask);
80 break;
81 }
82}
diff --git a/arch/h8300/platform/h8s/ints.c b/arch/h8300/platform/h8s/ints.c
deleted file mode 100644
index ac10b9783850..000000000000
--- a/arch/h8300/platform/h8s/ints.c
+++ /dev/null
@@ -1,304 +0,0 @@
1/*
2 * linux/arch/h8300/platform/h8s/ints.c
3 *
4 * Yoshinori Sato <ysato@users.sourceforge.jp>
5 *
6 * Based on linux/arch/$(ARCH)/platform/$(PLATFORM)/ints.c
7 *
8 * This file is subject to the terms and conditions of the GNU General Public
9 * License. See the file COPYING in the main directory of this archive
10 * for more details.
11 *
12 * Copyright 1996 Roman Zippel
13 * Copyright 1999 D. Jeff Dionne <jeff@rt-control.com>
14 */
15
16#include <linux/module.h>
17#include <linux/types.h>
18#include <linux/kernel.h>
19#include <linux/sched.h>
20#include <linux/kernel_stat.h>
21#include <linux/seq_file.h>
22#include <linux/init.h>
23#include <linux/interrupt.h>
24#include <linux/bootmem.h>
25#include <linux/random.h>
26#include <linux/hardirq.h>
27
28#include <asm/system.h>
29#include <asm/irq.h>
30#include <asm/traps.h>
31#include <asm/io.h>
32#include <asm/setup.h>
33#include <asm/gpio.h>
34#include <asm/regs267x.h>
35#include <asm/errno.h>
36
37/*
38 * This structure has only 4 elements for speed reasons
39 */
40typedef struct irq_handler {
41 irqreturn_t (*handler)(int, void *, struct pt_regs *);
42 int flags;
43 int count;
44 void *dev_id;
45 const char *devname;
46} irq_handler_t;
47
48static irq_handler_t *irq_list[NR_IRQS];
49
50/* IRQ pin assignment */
51struct irq_pins {
52 unsigned char port_no;
53 unsigned char bit_no;
54};
55/* ISTR = 0 */
56static const struct irq_pins irq_assign_table0[16]={
57 {H8300_GPIO_P5,H8300_GPIO_B0},{H8300_GPIO_P5,H8300_GPIO_B1},
58 {H8300_GPIO_P5,H8300_GPIO_B2},{H8300_GPIO_P5,H8300_GPIO_B3},
59 {H8300_GPIO_P5,H8300_GPIO_B4},{H8300_GPIO_P5,H8300_GPIO_B5},
60 {H8300_GPIO_P5,H8300_GPIO_B6},{H8300_GPIO_P5,H8300_GPIO_B7},
61 {H8300_GPIO_P6,H8300_GPIO_B0},{H8300_GPIO_P6,H8300_GPIO_B1},
62 {H8300_GPIO_P6,H8300_GPIO_B2},{H8300_GPIO_P6,H8300_GPIO_B3},
63 {H8300_GPIO_P6,H8300_GPIO_B4},{H8300_GPIO_P6,H8300_GPIO_B5},
64 {H8300_GPIO_PF,H8300_GPIO_B1},{H8300_GPIO_PF,H8300_GPIO_B2},
65};
66/* ISTR = 1 */
67static const struct irq_pins irq_assign_table1[16]={
68 {H8300_GPIO_P8,H8300_GPIO_B0},{H8300_GPIO_P8,H8300_GPIO_B1},
69 {H8300_GPIO_P8,H8300_GPIO_B2},{H8300_GPIO_P8,H8300_GPIO_B3},
70 {H8300_GPIO_P8,H8300_GPIO_B4},{H8300_GPIO_P8,H8300_GPIO_B5},
71 {H8300_GPIO_PH,H8300_GPIO_B2},{H8300_GPIO_PH,H8300_GPIO_B3},
72 {H8300_GPIO_P2,H8300_GPIO_B0},{H8300_GPIO_P2,H8300_GPIO_B1},
73 {H8300_GPIO_P2,H8300_GPIO_B2},{H8300_GPIO_P2,H8300_GPIO_B3},
74 {H8300_GPIO_P2,H8300_GPIO_B4},{H8300_GPIO_P2,H8300_GPIO_B5},
75 {H8300_GPIO_P2,H8300_GPIO_B6},{H8300_GPIO_P2,H8300_GPIO_B7},
76};
77
78static short use_kmalloc = 0;
79
80extern unsigned long *interrupt_redirect_table;
81
82#define CPU_VECTOR ((unsigned long *)0x000000)
83#define ADDR_MASK (0xffffff)
84
85static inline unsigned long *get_vector_address(void)
86{
87 volatile unsigned long *rom_vector = CPU_VECTOR;
88 unsigned long base,tmp;
89 int vec_no;
90
91 base = rom_vector[EXT_IRQ0] & ADDR_MASK;
92
93 /* check romvector format */
94 for (vec_no = EXT_IRQ1; vec_no <= EXT_IRQ15; vec_no++) {
95 if ((base+(vec_no - EXT_IRQ0)*4) != (rom_vector[vec_no] & ADDR_MASK))
96 return NULL;
97 }
98
99 /* ramvector base address */
100 base -= EXT_IRQ0*4;
101
102 /* writerble check */
103 tmp = ~(*(unsigned long *)base);
104 (*(unsigned long *)base) = tmp;
105 if ((*(unsigned long *)base) != tmp)
106 return NULL;
107 return (unsigned long *)base;
108}
109
110void __init init_IRQ(void)
111{
112#if defined(CONFIG_RAMKERNEL)
113 int i;
114 unsigned long *ramvec,*ramvec_p;
115 unsigned long break_vec;
116
117 ramvec = get_vector_address();
118 if (ramvec == NULL)
119 panic("interrupt vector serup failed.");
120 else
121 printk("virtual vector at 0x%08lx\n",(unsigned long)ramvec);
122
123#if defined(CONFIG_GDB_DEBUG)
124 /* save original break vector */
125 break_vec = ramvec[TRAP3_VEC];
126#else
127 break_vec = VECTOR(trace_break);
128#endif
129
130 /* create redirect table */
131 for (ramvec_p = ramvec, i = 0; i < NR_IRQS; i++)
132 *ramvec_p++ = REDIRECT(interrupt_entry);
133
134 /* set special vector */
135 ramvec[TRAP0_VEC] = VECTOR(system_call);
136 ramvec[TRAP3_VEC] = break_vec;
137 interrupt_redirect_table = ramvec;
138#ifdef DUMP_VECTOR
139 ramvec_p = ramvec;
140 for (i = 0; i < NR_IRQS; i++) {
141 if ((i % 8) == 0)
142 printk("\n%p: ",ramvec_p);
143 printk("%p ",*ramvec_p);
144 ramvec_p++;
145 }
146 printk("\n");
147#endif
148#endif
149}
150
151int request_irq(unsigned int irq,
152 irqreturn_t (*handler)(int, void *, struct pt_regs *),
153 unsigned long flags, const char *devname, void *dev_id)
154{
155 unsigned short ptn = 1 << (irq - EXT_IRQ0);
156 irq_handler_t *irq_handle;
157 if (irq < 0 || irq >= NR_IRQS) {
158 printk("Incorrect IRQ %d from %s\n", irq, devname);
159 return -EINVAL;
160 }
161 if (irq_list[irq])
162 return -EBUSY; /* already used */
163 if (irq >= EXT_IRQ0 && irq <= EXT_IRQ15) {
164 /* initialize IRQ pin */
165 unsigned int port_no,bit_no;
166 if (*(volatile unsigned short *)ITSR & ptn) {
167 port_no = irq_assign_table1[irq - EXT_IRQ0].port_no;
168 bit_no = irq_assign_table1[irq - EXT_IRQ0].bit_no;
169 } else {
170 port_no = irq_assign_table0[irq - EXT_IRQ0].port_no;
171 bit_no = irq_assign_table0[irq - EXT_IRQ0].bit_no;
172 }
173 if (H8300_GPIO_RESERVE(port_no, bit_no) == 0)
174 return -EBUSY; /* pin already use */
175 H8300_GPIO_DDR(port_no, bit_no, H8300_GPIO_INPUT);
176 *(volatile unsigned short *)ISR &= ~ptn; /* ISR clear */
177 }
178
179 if (use_kmalloc)
180 irq_handle = kmalloc(sizeof(irq_handler_t), GFP_ATOMIC);
181 else {
182 /* use bootmem allocator */
183 irq_handle = (irq_handler_t *)alloc_bootmem(sizeof(irq_handler_t));
184 irq_handle = (irq_handler_t *)((unsigned long)irq_handle | 0x80000000);
185 }
186
187 if (irq_handle == NULL)
188 return -ENOMEM;
189
190 irq_handle->handler = handler;
191 irq_handle->flags = flags;
192 irq_handle->count = 0;
193 irq_handle->dev_id = dev_id;
194 irq_handle->devname = devname;
195 irq_list[irq] = irq_handle;
196 if (irq_handle->flags & IRQF_SAMPLE_RANDOM)
197 rand_initialize_irq(irq);
198
199 /* enable interrupt */
200 /* compatible i386 */
201 if (irq >= EXT_IRQ0 && irq <= EXT_IRQ15)
202 *(volatile unsigned short *)IER |= ptn;
203 return 0;
204}
205
206EXPORT_SYMBOL(request_irq);
207
208void free_irq(unsigned int irq, void *dev_id)
209{
210 if (irq >= NR_IRQS)
211 return;
212 if (irq_list[irq]->dev_id != dev_id)
213 printk("%s: Removing probably wrong IRQ %d from %s\n",
214 __FUNCTION__, irq, irq_list[irq]->devname);
215 if (irq >= EXT_IRQ0 && irq <= EXT_IRQ15) {
216 /* disable interrupt & release IRQ pin */
217 unsigned short port_no,bit_no;
218 *(volatile unsigned short *)ISR &= ~(1 << (irq - EXT_IRQ0));
219 *(volatile unsigned short *)IER |= 1 << (irq - EXT_IRQ0);
220 if (*(volatile unsigned short *)ITSR & (1 << (irq - EXT_IRQ0))) {
221 port_no = irq_assign_table1[irq - EXT_IRQ0].port_no;
222 bit_no = irq_assign_table1[irq - EXT_IRQ0].bit_no;
223 } else {
224 port_no = irq_assign_table0[irq - EXT_IRQ0].port_no;
225 bit_no = irq_assign_table0[irq - EXT_IRQ0].bit_no;
226 }
227 H8300_GPIO_FREE(port_no, bit_no);
228 }
229 if (((unsigned long)irq_list[irq] & 0x80000000) == 0) {
230 kfree(irq_list[irq]);
231 irq_list[irq] = NULL;
232 }
233}
234
235EXPORT_SYMBOL(free_irq);
236
237unsigned long probe_irq_on (void)
238{
239 return 0;
240}
241
242EXPORT_SYMBOL(probe_irq_on);
243
244int probe_irq_off (unsigned long irqs)
245{
246 return 0;
247}
248
249EXPORT_SYMBOL(probe_irq_off);
250
251void enable_irq(unsigned int irq)
252{
253 if (irq >= EXT_IRQ0 && irq <= EXT_IRQ15)
254 *(volatile unsigned short *)IER |= 1 << (irq - EXT_IRQ0);
255}
256
257void disable_irq(unsigned int irq)
258{
259 if (irq >= EXT_IRQ0 && irq <= EXT_IRQ15)
260 *(volatile unsigned short *)IER &= ~(1 << (irq - EXT_IRQ0));
261}
262
263asmlinkage void process_int(unsigned long vec, struct pt_regs *fp)
264{
265 irq_enter();
266 /* ISR clear */
267 /* compatible i386 */
268 if (vec >= EXT_IRQ0 && vec <= EXT_IRQ15)
269 *(volatile unsigned short *)ISR &= ~(1 << (vec - EXT_IRQ0));
270 if (vec < NR_IRQS) {
271 if (irq_list[vec]) {
272 irq_list[vec]->handler(vec, irq_list[vec]->dev_id, fp);
273 irq_list[vec]->count++;
274 if (irq_list[vec]->flags & IRQF_SAMPLE_RANDOM)
275 add_interrupt_randomness(vec);
276 }
277 } else {
278 BUG();
279 }
280 irq_exit();
281}
282
283int show_interrupts(struct seq_file *p, void *v)
284{
285 int i = *(loff_t *) v;
286
287 if ((i < NR_IRQS) && (irq_list[i] !=NULL)) {
288 seq_printf(p, "%3d: %10u ",i,irq_list[i]->count);
289 seq_printf(p, "%s\n", irq_list[i]->devname);
290 }
291
292 return 0;
293}
294
295void init_irq_proc(void)
296{
297}
298
299static int __init enable_kmalloc(void)
300{
301 use_kmalloc = 1;
302 return 0;
303}
304core_initcall(enable_kmalloc);
diff --git a/arch/h8300/platform/h8s/ints_h8s.c b/arch/h8300/platform/h8s/irq.c
index faa8a459d952..8182f041f829 100644
--- a/arch/h8300/platform/h8s/ints_h8s.c
+++ b/arch/h8300/platform/h8s/irq.c
@@ -27,11 +27,11 @@ const int __initdata h8300_saved_vectors[]={
27}; 27};
28 28
29/* trap entry table */ 29/* trap entry table */
30const unsigned long __initdata h8300_trap_table[NR_TRAPS]={ 30const H8300_VECTOR __initdata h8300_trap_table[] = {
31 0,0,0,0,0, 31 0,0,0,0,0,
32 (unsigned long)trace_break, /* TRACE */ 32 trace_break, /* TRACE */
33 0,0, 33 0,0,
34 (unsigned long)system_call, /* TRAPA #0 */ 34 system_call, /* TRAPA #0 */
35 0,0,0,0,0,0,0 35 0,0,0,0,0,0,0
36}; 36};
37 37
@@ -50,7 +50,7 @@ static const struct irq_pins irq_assign_table0[16]={
50 {H8300_GPIO_P6,H8300_GPIO_B2},{H8300_GPIO_P6,H8300_GPIO_B3}, 50 {H8300_GPIO_P6,H8300_GPIO_B2},{H8300_GPIO_P6,H8300_GPIO_B3},
51 {H8300_GPIO_P6,H8300_GPIO_B4},{H8300_GPIO_P6,H8300_GPIO_B5}, 51 {H8300_GPIO_P6,H8300_GPIO_B4},{H8300_GPIO_P6,H8300_GPIO_B5},
52 {H8300_GPIO_PF,H8300_GPIO_B1},{H8300_GPIO_PF,H8300_GPIO_B2}, 52 {H8300_GPIO_PF,H8300_GPIO_B1},{H8300_GPIO_PF,H8300_GPIO_B2},
53}; 53};
54/* ISTR = 1 */ 54/* ISTR = 1 */
55static const struct irq_pins irq_assign_table1[16]={ 55static const struct irq_pins irq_assign_table1[16]={
56 {H8300_GPIO_P8,H8300_GPIO_B0},{H8300_GPIO_P8,H8300_GPIO_B1}, 56 {H8300_GPIO_P8,H8300_GPIO_B0},{H8300_GPIO_P8,H8300_GPIO_B1},
diff --git a/arch/mips/bcm47xx/setup.c b/arch/mips/bcm47xx/setup.c
index 1b6b0fa5028f..8d36f186890e 100644
--- a/arch/mips/bcm47xx/setup.c
+++ b/arch/mips/bcm47xx/setup.c
@@ -92,17 +92,17 @@ static int bcm47xx_get_invariants(struct ssb_bus *bus,
92 iv->sprom.revision = 3; 92 iv->sprom.revision = 3;
93 93
94 if (cfe_getenv("et0macaddr", buf, sizeof(buf)) >= 0) 94 if (cfe_getenv("et0macaddr", buf, sizeof(buf)) >= 0)
95 str2eaddr(buf, iv->sprom.r1.et0mac); 95 str2eaddr(buf, iv->sprom.et0mac);
96 if (cfe_getenv("et1macaddr", buf, sizeof(buf)) >= 0) 96 if (cfe_getenv("et1macaddr", buf, sizeof(buf)) >= 0)
97 str2eaddr(buf, iv->sprom.r1.et1mac); 97 str2eaddr(buf, iv->sprom.et1mac);
98 if (cfe_getenv("et0phyaddr", buf, sizeof(buf)) >= 0) 98 if (cfe_getenv("et0phyaddr", buf, sizeof(buf)) >= 0)
99 iv->sprom.r1.et0phyaddr = simple_strtoul(buf, NULL, 10); 99 iv->sprom.et0phyaddr = simple_strtoul(buf, NULL, 10);
100 if (cfe_getenv("et1phyaddr", buf, sizeof(buf)) >= 0) 100 if (cfe_getenv("et1phyaddr", buf, sizeof(buf)) >= 0)
101 iv->sprom.r1.et1phyaddr = simple_strtoul(buf, NULL, 10); 101 iv->sprom.et1phyaddr = simple_strtoul(buf, NULL, 10);
102 if (cfe_getenv("et0mdcport", buf, sizeof(buf)) >= 0) 102 if (cfe_getenv("et0mdcport", buf, sizeof(buf)) >= 0)
103 iv->sprom.r1.et0mdcport = simple_strtoul(buf, NULL, 10); 103 iv->sprom.et0mdcport = simple_strtoul(buf, NULL, 10);
104 if (cfe_getenv("et1mdcport", buf, sizeof(buf)) >= 0) 104 if (cfe_getenv("et1mdcport", buf, sizeof(buf)) >= 0)
105 iv->sprom.r1.et1mdcport = simple_strtoul(buf, NULL, 10); 105 iv->sprom.et1mdcport = simple_strtoul(buf, NULL, 10);
106 106
107 return 0; 107 return 0;
108} 108}
diff --git a/arch/mips/bcm47xx/wgt634u.c b/arch/mips/bcm47xx/wgt634u.c
index 5a017eaee712..d1d90c9ef2fa 100644
--- a/arch/mips/bcm47xx/wgt634u.c
+++ b/arch/mips/bcm47xx/wgt634u.c
@@ -9,6 +9,7 @@
9#include <linux/platform_device.h> 9#include <linux/platform_device.h>
10#include <linux/module.h> 10#include <linux/module.h>
11#include <linux/leds.h> 11#include <linux/leds.h>
12#include <linux/mtd/physmap.h>
12#include <linux/ssb/ssb.h> 13#include <linux/ssb/ssb.h>
13#include <asm/mach-bcm47xx/bcm47xx.h> 14#include <asm/mach-bcm47xx/bcm47xx.h>
14 15
@@ -43,6 +44,61 @@ static struct platform_device wgt634u_gpio_leds = {
43 } 44 }
44}; 45};
45 46
47
48/* 8MiB flash. The struct mtd_partition matches original Netgear WGT634U
49 firmware. */
50static struct mtd_partition wgt634u_partitions[] = {
51 {
52 .name = "cfe",
53 .offset = 0,
54 .size = 0x60000, /* 384k */
55 .mask_flags = MTD_WRITEABLE /* force read-only */
56 },
57 {
58 .name = "config",
59 .offset = 0x60000,
60 .size = 0x20000 /* 128k */
61 },
62 {
63 .name = "linux",
64 .offset = 0x80000,
65 .size = 0x140000 /* 1280k */
66 },
67 {
68 .name = "jffs",
69 .offset = 0x1c0000,
70 .size = 0x620000 /* 6272k */
71 },
72 {
73 .name = "nvram",
74 .offset = 0x7e0000,
75 .size = 0x20000 /* 128k */
76 },
77};
78
79static struct physmap_flash_data wgt634u_flash_data = {
80 .parts = wgt634u_partitions,
81 .nr_parts = ARRAY_SIZE(wgt634u_partitions)
82};
83
84static struct resource wgt634u_flash_resource = {
85 .flags = IORESOURCE_MEM,
86};
87
88static struct platform_device wgt634u_flash = {
89 .name = "physmap-flash",
90 .id = 0,
91 .dev = { .platform_data = &wgt634u_flash_data, },
92 .resource = &wgt634u_flash_resource,
93 .num_resources = 1,
94};
95
96/* Platform devices */
97static struct platform_device *wgt634u_devices[] __initdata = {
98 &wgt634u_flash,
99 &wgt634u_gpio_leds,
100};
101
46static int __init wgt634u_init(void) 102static int __init wgt634u_init(void)
47{ 103{
48 /* There is no easy way to detect that we are running on a WGT634U 104 /* There is no easy way to detect that we are running on a WGT634U
@@ -50,13 +106,20 @@ static int __init wgt634u_init(void)
50 * been allocated ranges 00:09:5b:xx:xx:xx and 00:0f:b5:xx:xx:xx. 106 * been allocated ranges 00:09:5b:xx:xx:xx and 00:0f:b5:xx:xx:xx.
51 */ 107 */
52 108
53 u8 *et0mac = ssb_bcm47xx.sprom.r1.et0mac; 109 u8 *et0mac = ssb_bcm47xx.sprom.et0mac;
54 110
55 if (et0mac[0] == 0x00 && 111 if (et0mac[0] == 0x00 &&
56 ((et0mac[1] == 0x09 && et0mac[2] == 0x5b) || 112 ((et0mac[1] == 0x09 && et0mac[2] == 0x5b) ||
57 (et0mac[1] == 0x0f && et0mac[2] == 0xb5))) 113 (et0mac[1] == 0x0f && et0mac[2] == 0xb5))) {
58 return platform_device_register(&wgt634u_gpio_leds); 114 struct ssb_mipscore *mcore = &ssb_bcm47xx.mipscore;
59 else 115 wgt634u_flash_data.width = mcore->flash_buswidth;
116 wgt634u_flash_resource.start = mcore->flash_window;
117 wgt634u_flash_resource.end = mcore->flash_window
118 + mcore->flash_window_size
119 - 1;
120 return platform_add_devices(wgt634u_devices,
121 ARRAY_SIZE(wgt634u_devices));
122 } else
60 return -ENODEV; 123 return -ENODEV;
61} 124}
62 125
diff --git a/arch/mips/configs/bcm47xx_defconfig b/arch/mips/configs/bcm47xx_defconfig
new file mode 100644
index 000000000000..c0e42e74dfbd
--- /dev/null
+++ b/arch/mips/configs/bcm47xx_defconfig
@@ -0,0 +1,1939 @@
1#
2# Automatically generated make config: don't edit
3# Linux kernel version: 2.6.25-rc2
4# Mon Feb 18 11:55:24 2008
5#
6CONFIG_MIPS=y
7
8#
9# Machine selection
10#
11# CONFIG_MACH_ALCHEMY is not set
12# CONFIG_BASLER_EXCITE is not set
13CONFIG_BCM47XX=y
14# CONFIG_MIPS_COBALT is not set
15# CONFIG_MACH_DECSTATION is not set
16# CONFIG_MACH_JAZZ is not set
17# CONFIG_LASAT is not set
18# CONFIG_LEMOTE_FULONG is not set
19# CONFIG_MIPS_ATLAS is not set
20# CONFIG_MIPS_MALTA is not set
21# CONFIG_MIPS_SEAD is not set
22# CONFIG_MIPS_SIM is not set
23# CONFIG_MARKEINS is not set
24# CONFIG_MACH_VR41XX is not set
25# CONFIG_PNX8550_JBS is not set
26# CONFIG_PNX8550_STB810 is not set
27# CONFIG_PMC_MSP is not set
28# CONFIG_PMC_YOSEMITE is not set
29# CONFIG_SGI_IP22 is not set
30# CONFIG_SGI_IP27 is not set
31# CONFIG_SGI_IP28 is not set
32# CONFIG_SGI_IP32 is not set
33# CONFIG_SIBYTE_CRHINE is not set
34# CONFIG_SIBYTE_CARMEL is not set
35# CONFIG_SIBYTE_CRHONE is not set
36# CONFIG_SIBYTE_RHONE is not set
37# CONFIG_SIBYTE_SWARM is not set
38# CONFIG_SIBYTE_LITTLESUR is not set
39# CONFIG_SIBYTE_SENTOSA is not set
40# CONFIG_SIBYTE_BIGSUR is not set
41# CONFIG_SNI_RM is not set
42# CONFIG_TOSHIBA_JMR3927 is not set
43# CONFIG_TOSHIBA_RBTX4927 is not set
44# CONFIG_TOSHIBA_RBTX4938 is not set
45# CONFIG_WR_PPMC is not set
46CONFIG_RWSEM_GENERIC_SPINLOCK=y
47# CONFIG_ARCH_HAS_ILOG2_U32 is not set
48# CONFIG_ARCH_HAS_ILOG2_U64 is not set
49CONFIG_ARCH_SUPPORTS_OPROFILE=y
50CONFIG_GENERIC_FIND_NEXT_BIT=y
51CONFIG_GENERIC_HWEIGHT=y
52CONFIG_GENERIC_CALIBRATE_DELAY=y
53CONFIG_GENERIC_CLOCKEVENTS=y
54CONFIG_GENERIC_TIME=y
55CONFIG_GENERIC_CMOS_UPDATE=y
56CONFIG_SCHED_NO_NO_OMIT_FRAME_POINTER=y
57# CONFIG_GENERIC_HARDIRQS_NO__DO_IRQ is not set
58CONFIG_CEVT_R4K=y
59CONFIG_CSRC_R4K=y
60CONFIG_CFE=y
61CONFIG_DMA_NONCOHERENT=y
62CONFIG_DMA_NEED_PCI_MAP_STATE=y
63CONFIG_EARLY_PRINTK=y
64CONFIG_SYS_HAS_EARLY_PRINTK=y
65# CONFIG_HOTPLUG_CPU is not set
66# CONFIG_NO_IOPORT is not set
67CONFIG_GENERIC_GPIO=y
68# CONFIG_CPU_BIG_ENDIAN is not set
69CONFIG_CPU_LITTLE_ENDIAN=y
70CONFIG_SYS_SUPPORTS_LITTLE_ENDIAN=y
71CONFIG_IRQ_CPU=y
72CONFIG_MIPS_L1_CACHE_SHIFT=5
73
74#
75# CPU selection
76#
77# CONFIG_CPU_LOONGSON2 is not set
78CONFIG_CPU_MIPS32_R1=y
79# CONFIG_CPU_MIPS32_R2 is not set
80# CONFIG_CPU_MIPS64_R1 is not set
81# CONFIG_CPU_MIPS64_R2 is not set
82# CONFIG_CPU_R3000 is not set
83# CONFIG_CPU_TX39XX is not set
84# CONFIG_CPU_VR41XX is not set
85# CONFIG_CPU_R4300 is not set
86# CONFIG_CPU_R4X00 is not set
87# CONFIG_CPU_TX49XX is not set
88# CONFIG_CPU_R5000 is not set
89# CONFIG_CPU_R5432 is not set
90# CONFIG_CPU_R6000 is not set
91# CONFIG_CPU_NEVADA is not set
92# CONFIG_CPU_R8000 is not set
93# CONFIG_CPU_R10000 is not set
94# CONFIG_CPU_RM7000 is not set
95# CONFIG_CPU_RM9000 is not set
96# CONFIG_CPU_SB1 is not set
97CONFIG_SYS_HAS_CPU_MIPS32_R1=y
98CONFIG_CPU_MIPS32=y
99CONFIG_CPU_MIPSR1=y
100CONFIG_SYS_SUPPORTS_32BIT_KERNEL=y
101CONFIG_CPU_SUPPORTS_32BIT_KERNEL=y
102
103#
104# Kernel type
105#
106CONFIG_32BIT=y
107# CONFIG_64BIT is not set
108CONFIG_PAGE_SIZE_4KB=y
109# CONFIG_PAGE_SIZE_8KB is not set
110# CONFIG_PAGE_SIZE_16KB is not set
111# CONFIG_PAGE_SIZE_64KB is not set
112CONFIG_CPU_HAS_PREFETCH=y
113CONFIG_MIPS_MT_DISABLED=y
114# CONFIG_MIPS_MT_SMP is not set
115# CONFIG_MIPS_MT_SMTC is not set
116CONFIG_CPU_HAS_LLSC=y
117CONFIG_CPU_HAS_SYNC=y
118CONFIG_GENERIC_HARDIRQS=y
119CONFIG_GENERIC_IRQ_PROBE=y
120CONFIG_CPU_SUPPORTS_HIGHMEM=y
121CONFIG_ARCH_FLATMEM_ENABLE=y
122CONFIG_ARCH_POPULATES_NODE_MAP=y
123CONFIG_SELECT_MEMORY_MODEL=y
124CONFIG_FLATMEM_MANUAL=y
125# CONFIG_DISCONTIGMEM_MANUAL is not set
126# CONFIG_SPARSEMEM_MANUAL is not set
127CONFIG_FLATMEM=y
128CONFIG_FLAT_NODE_MEM_MAP=y
129# CONFIG_SPARSEMEM_STATIC is not set
130# CONFIG_SPARSEMEM_VMEMMAP_ENABLE is not set
131CONFIG_SPLIT_PTLOCK_CPUS=4
132# CONFIG_RESOURCES_64BIT is not set
133CONFIG_ZONE_DMA_FLAG=0
134CONFIG_VIRT_TO_BUS=y
135CONFIG_TICK_ONESHOT=y
136CONFIG_NO_HZ=y
137CONFIG_HIGH_RES_TIMERS=y
138CONFIG_GENERIC_CLOCKEVENTS_BUILD=y
139# CONFIG_HZ_48 is not set
140# CONFIG_HZ_100 is not set
141# CONFIG_HZ_128 is not set
142CONFIG_HZ_250=y
143# CONFIG_HZ_256 is not set
144# CONFIG_HZ_1000 is not set
145# CONFIG_HZ_1024 is not set
146CONFIG_SYS_SUPPORTS_ARBIT_HZ=y
147CONFIG_HZ=250
148CONFIG_PREEMPT_NONE=y
149# CONFIG_PREEMPT_VOLUNTARY is not set
150# CONFIG_PREEMPT is not set
151CONFIG_RCU_TRACE=y
152CONFIG_KEXEC=y
153# CONFIG_SECCOMP is not set
154CONFIG_LOCKDEP_SUPPORT=y
155CONFIG_STACKTRACE_SUPPORT=y
156CONFIG_DEFCONFIG_LIST="/lib/modules/$UNAME_RELEASE/.config"
157
158#
159# General setup
160#
161CONFIG_EXPERIMENTAL=y
162CONFIG_BROKEN_ON_SMP=y
163CONFIG_INIT_ENV_ARG_LIMIT=32
164CONFIG_LOCALVERSION=""
165# CONFIG_LOCALVERSION_AUTO is not set
166CONFIG_SWAP=y
167CONFIG_SYSVIPC=y
168CONFIG_SYSVIPC_SYSCTL=y
169CONFIG_POSIX_MQUEUE=y
170CONFIG_BSD_PROCESS_ACCT=y
171CONFIG_BSD_PROCESS_ACCT_V3=y
172CONFIG_TASKSTATS=y
173CONFIG_TASK_DELAY_ACCT=y
174CONFIG_TASK_XACCT=y
175CONFIG_TASK_IO_ACCOUNTING=y
176CONFIG_AUDIT=y
177# CONFIG_IKCONFIG is not set
178CONFIG_LOG_BUF_SHIFT=17
179CONFIG_CGROUPS=y
180# CONFIG_CGROUP_DEBUG is not set
181CONFIG_CGROUP_NS=y
182CONFIG_GROUP_SCHED=y
183CONFIG_FAIR_GROUP_SCHED=y
184# CONFIG_RT_GROUP_SCHED is not set
185CONFIG_USER_SCHED=y
186# CONFIG_CGROUP_SCHED is not set
187CONFIG_CGROUP_CPUACCT=y
188# CONFIG_RESOURCE_COUNTERS is not set
189CONFIG_SYSFS_DEPRECATED=y
190CONFIG_RELAY=y
191# CONFIG_NAMESPACES is not set
192CONFIG_BLK_DEV_INITRD=y
193CONFIG_INITRAMFS_SOURCE=""
194CONFIG_CC_OPTIMIZE_FOR_SIZE=y
195CONFIG_SYSCTL=y
196CONFIG_EMBEDDED=y
197CONFIG_SYSCTL_SYSCALL=y
198CONFIG_KALLSYMS=y
199# CONFIG_KALLSYMS_EXTRA_PASS is not set
200CONFIG_HOTPLUG=y
201CONFIG_PRINTK=y
202CONFIG_BUG=y
203CONFIG_ELF_CORE=y
204CONFIG_COMPAT_BRK=y
205CONFIG_BASE_FULL=y
206CONFIG_FUTEX=y
207CONFIG_ANON_INODES=y
208CONFIG_EPOLL=y
209CONFIG_SIGNALFD=y
210CONFIG_TIMERFD=y
211CONFIG_EVENTFD=y
212CONFIG_SHMEM=y
213CONFIG_VM_EVENT_COUNTERS=y
214CONFIG_SLAB=y
215# CONFIG_SLUB is not set
216# CONFIG_SLOB is not set
217# CONFIG_PROFILING is not set
218# CONFIG_MARKERS is not set
219CONFIG_HAVE_OPROFILE=y
220# CONFIG_HAVE_KPROBES is not set
221CONFIG_PROC_PAGE_MONITOR=y
222CONFIG_SLABINFO=y
223CONFIG_RT_MUTEXES=y
224# CONFIG_TINY_SHMEM is not set
225CONFIG_BASE_SMALL=0
226CONFIG_MODULES=y
227CONFIG_MODULE_UNLOAD=y
228CONFIG_MODULE_FORCE_UNLOAD=y
229CONFIG_MODVERSIONS=y
230# CONFIG_MODULE_SRCVERSION_ALL is not set
231CONFIG_KMOD=y
232CONFIG_BLOCK=y
233CONFIG_LBD=y
234CONFIG_BLK_DEV_IO_TRACE=y
235CONFIG_LSF=y
236# CONFIG_BLK_DEV_BSG is not set
237
238#
239# IO Schedulers
240#
241CONFIG_IOSCHED_NOOP=y
242CONFIG_IOSCHED_AS=y
243CONFIG_IOSCHED_DEADLINE=y
244CONFIG_IOSCHED_CFQ=y
245# CONFIG_DEFAULT_AS is not set
246# CONFIG_DEFAULT_DEADLINE is not set
247CONFIG_DEFAULT_CFQ=y
248# CONFIG_DEFAULT_NOOP is not set
249CONFIG_DEFAULT_IOSCHED="cfq"
250CONFIG_CLASSIC_RCU=y
251# CONFIG_PREEMPT_RCU is not set
252
253#
254# Bus options (PCI, PCMCIA, EISA, ISA, TC)
255#
256CONFIG_HW_HAS_PCI=y
257CONFIG_PCI=y
258CONFIG_PCI_DOMAINS=y
259# CONFIG_ARCH_SUPPORTS_MSI is not set
260CONFIG_PCI_LEGACY=y
261CONFIG_MMU=y
262# CONFIG_PCCARD is not set
263# CONFIG_HOTPLUG_PCI is not set
264
265#
266# Executable file formats
267#
268CONFIG_BINFMT_ELF=y
269CONFIG_BINFMT_MISC=m
270CONFIG_TRAD_SIGNALS=y
271
272#
273# Power management options
274#
275CONFIG_ARCH_SUSPEND_POSSIBLE=y
276# CONFIG_PM is not set
277
278#
279# Networking
280#
281CONFIG_NET=y
282
283#
284# Networking options
285#
286CONFIG_PACKET=y
287CONFIG_PACKET_MMAP=y
288CONFIG_UNIX=y
289CONFIG_XFRM=y
290CONFIG_XFRM_USER=m
291# CONFIG_XFRM_SUB_POLICY is not set
292# CONFIG_XFRM_MIGRATE is not set
293# CONFIG_XFRM_STATISTICS is not set
294CONFIG_NET_KEY=m
295# CONFIG_NET_KEY_MIGRATE is not set
296CONFIG_INET=y
297CONFIG_IP_MULTICAST=y
298CONFIG_IP_ADVANCED_ROUTER=y
299CONFIG_ASK_IP_FIB_HASH=y
300# CONFIG_IP_FIB_TRIE is not set
301CONFIG_IP_FIB_HASH=y
302CONFIG_IP_MULTIPLE_TABLES=y
303CONFIG_IP_ROUTE_MULTIPATH=y
304CONFIG_IP_ROUTE_VERBOSE=y
305# CONFIG_IP_PNP is not set
306CONFIG_NET_IPIP=m
307CONFIG_NET_IPGRE=m
308CONFIG_NET_IPGRE_BROADCAST=y
309CONFIG_IP_MROUTE=y
310CONFIG_IP_PIMSM_V1=y
311CONFIG_IP_PIMSM_V2=y
312# CONFIG_ARPD is not set
313CONFIG_SYN_COOKIES=y
314CONFIG_INET_AH=m
315CONFIG_INET_ESP=m
316CONFIG_INET_IPCOMP=m
317CONFIG_INET_XFRM_TUNNEL=m
318CONFIG_INET_TUNNEL=m
319CONFIG_INET_XFRM_MODE_TRANSPORT=m
320CONFIG_INET_XFRM_MODE_TUNNEL=m
321CONFIG_INET_XFRM_MODE_BEET=m
322CONFIG_INET_LRO=m
323CONFIG_INET_DIAG=m
324CONFIG_INET_TCP_DIAG=m
325CONFIG_TCP_CONG_ADVANCED=y
326CONFIG_TCP_CONG_BIC=y
327CONFIG_TCP_CONG_CUBIC=m
328CONFIG_TCP_CONG_WESTWOOD=m
329CONFIG_TCP_CONG_HTCP=m
330CONFIG_TCP_CONG_HSTCP=m
331CONFIG_TCP_CONG_HYBLA=m
332CONFIG_TCP_CONG_VEGAS=m
333CONFIG_TCP_CONG_SCALABLE=m
334CONFIG_TCP_CONG_LP=m
335CONFIG_TCP_CONG_VENO=m
336CONFIG_TCP_CONG_YEAH=m
337CONFIG_TCP_CONG_ILLINOIS=m
338CONFIG_DEFAULT_BIC=y
339# CONFIG_DEFAULT_CUBIC is not set
340# CONFIG_DEFAULT_HTCP is not set
341# CONFIG_DEFAULT_VEGAS is not set
342# CONFIG_DEFAULT_WESTWOOD is not set
343# CONFIG_DEFAULT_RENO is not set
344CONFIG_DEFAULT_TCP_CONG="bic"
345# CONFIG_TCP_MD5SIG is not set
346CONFIG_IP_VS=m
347# CONFIG_IP_VS_DEBUG is not set
348CONFIG_IP_VS_TAB_BITS=12
349
350#
351# IPVS transport protocol load balancing support
352#
353CONFIG_IP_VS_PROTO_TCP=y
354CONFIG_IP_VS_PROTO_UDP=y
355CONFIG_IP_VS_PROTO_ESP=y
356CONFIG_IP_VS_PROTO_AH=y
357
358#
359# IPVS scheduler
360#
361CONFIG_IP_VS_RR=m
362CONFIG_IP_VS_WRR=m
363CONFIG_IP_VS_LC=m
364CONFIG_IP_VS_WLC=m
365CONFIG_IP_VS_LBLC=m
366CONFIG_IP_VS_LBLCR=m
367CONFIG_IP_VS_DH=m
368CONFIG_IP_VS_SH=m
369CONFIG_IP_VS_SED=m
370CONFIG_IP_VS_NQ=m
371
372#
373# IPVS application helper
374#
375CONFIG_IP_VS_FTP=m
376CONFIG_IPV6=m
377CONFIG_IPV6_PRIVACY=y
378# CONFIG_IPV6_ROUTER_PREF is not set
379# CONFIG_IPV6_OPTIMISTIC_DAD is not set
380CONFIG_INET6_AH=m
381CONFIG_INET6_ESP=m
382CONFIG_INET6_IPCOMP=m
383# CONFIG_IPV6_MIP6 is not set
384CONFIG_INET6_XFRM_TUNNEL=m
385CONFIG_INET6_TUNNEL=m
386CONFIG_INET6_XFRM_MODE_TRANSPORT=m
387CONFIG_INET6_XFRM_MODE_TUNNEL=m
388CONFIG_INET6_XFRM_MODE_BEET=m
389CONFIG_INET6_XFRM_MODE_ROUTEOPTIMIZATION=m
390CONFIG_IPV6_SIT=m
391CONFIG_IPV6_TUNNEL=m
392CONFIG_IPV6_MULTIPLE_TABLES=y
393CONFIG_IPV6_SUBTREES=y
394CONFIG_NETWORK_SECMARK=y
395CONFIG_NETFILTER=y
396# CONFIG_NETFILTER_DEBUG is not set
397CONFIG_NETFILTER_ADVANCED=y
398CONFIG_BRIDGE_NETFILTER=y
399
400#
401# Core Netfilter Configuration
402#
403CONFIG_NETFILTER_NETLINK=m
404CONFIG_NETFILTER_NETLINK_QUEUE=m
405CONFIG_NETFILTER_NETLINK_LOG=m
406CONFIG_NF_CONNTRACK=m
407CONFIG_NF_CT_ACCT=y
408CONFIG_NF_CONNTRACK_MARK=y
409CONFIG_NF_CONNTRACK_SECMARK=y
410CONFIG_NF_CONNTRACK_EVENTS=y
411CONFIG_NF_CT_PROTO_GRE=m
412CONFIG_NF_CT_PROTO_SCTP=m
413CONFIG_NF_CT_PROTO_UDPLITE=m
414CONFIG_NF_CONNTRACK_AMANDA=m
415CONFIG_NF_CONNTRACK_FTP=m
416CONFIG_NF_CONNTRACK_H323=m
417CONFIG_NF_CONNTRACK_IRC=m
418CONFIG_NF_CONNTRACK_NETBIOS_NS=m
419CONFIG_NF_CONNTRACK_PPTP=m
420CONFIG_NF_CONNTRACK_SANE=m
421CONFIG_NF_CONNTRACK_SIP=m
422CONFIG_NF_CONNTRACK_TFTP=m
423CONFIG_NF_CT_NETLINK=m
424CONFIG_NETFILTER_XTABLES=m
425CONFIG_NETFILTER_XT_TARGET_CLASSIFY=m
426CONFIG_NETFILTER_XT_TARGET_CONNMARK=m
427CONFIG_NETFILTER_XT_TARGET_DSCP=m
428CONFIG_NETFILTER_XT_TARGET_MARK=m
429CONFIG_NETFILTER_XT_TARGET_NFQUEUE=m
430CONFIG_NETFILTER_XT_TARGET_NFLOG=m
431CONFIG_NETFILTER_XT_TARGET_NOTRACK=m
432# CONFIG_NETFILTER_XT_TARGET_RATEEST is not set
433CONFIG_NETFILTER_XT_TARGET_TRACE=m
434CONFIG_NETFILTER_XT_TARGET_SECMARK=m
435CONFIG_NETFILTER_XT_TARGET_CONNSECMARK=m
436CONFIG_NETFILTER_XT_TARGET_TCPMSS=m
437# CONFIG_NETFILTER_XT_TARGET_TCPOPTSTRIP is not set
438CONFIG_NETFILTER_XT_MATCH_COMMENT=m
439CONFIG_NETFILTER_XT_MATCH_CONNBYTES=m
440CONFIG_NETFILTER_XT_MATCH_CONNLIMIT=m
441CONFIG_NETFILTER_XT_MATCH_CONNMARK=m
442CONFIG_NETFILTER_XT_MATCH_CONNTRACK=m
443CONFIG_NETFILTER_XT_MATCH_DCCP=m
444CONFIG_NETFILTER_XT_MATCH_DSCP=m
445CONFIG_NETFILTER_XT_MATCH_ESP=m
446CONFIG_NETFILTER_XT_MATCH_HELPER=m
447# CONFIG_NETFILTER_XT_MATCH_IPRANGE is not set
448CONFIG_NETFILTER_XT_MATCH_LENGTH=m
449CONFIG_NETFILTER_XT_MATCH_LIMIT=m
450CONFIG_NETFILTER_XT_MATCH_MAC=m
451CONFIG_NETFILTER_XT_MATCH_MARK=m
452# CONFIG_NETFILTER_XT_MATCH_OWNER is not set
453CONFIG_NETFILTER_XT_MATCH_POLICY=m
454CONFIG_NETFILTER_XT_MATCH_MULTIPORT=m
455CONFIG_NETFILTER_XT_MATCH_PHYSDEV=m
456CONFIG_NETFILTER_XT_MATCH_PKTTYPE=m
457CONFIG_NETFILTER_XT_MATCH_QUOTA=m
458# CONFIG_NETFILTER_XT_MATCH_RATEEST is not set
459CONFIG_NETFILTER_XT_MATCH_REALM=m
460CONFIG_NETFILTER_XT_MATCH_SCTP=m
461CONFIG_NETFILTER_XT_MATCH_STATE=m
462CONFIG_NETFILTER_XT_MATCH_STATISTIC=m
463CONFIG_NETFILTER_XT_MATCH_STRING=m
464CONFIG_NETFILTER_XT_MATCH_TCPMSS=m
465CONFIG_NETFILTER_XT_MATCH_TIME=m
466CONFIG_NETFILTER_XT_MATCH_U32=m
467CONFIG_NETFILTER_XT_MATCH_HASHLIMIT=m
468
469#
470# IP: Netfilter Configuration
471#
472CONFIG_NF_CONNTRACK_IPV4=m
473CONFIG_NF_CONNTRACK_PROC_COMPAT=y
474CONFIG_IP_NF_QUEUE=m
475CONFIG_IP_NF_IPTABLES=m
476CONFIG_IP_NF_MATCH_RECENT=m
477CONFIG_IP_NF_MATCH_ECN=m
478CONFIG_IP_NF_MATCH_AH=m
479CONFIG_IP_NF_MATCH_TTL=m
480CONFIG_IP_NF_MATCH_ADDRTYPE=m
481CONFIG_IP_NF_FILTER=m
482CONFIG_IP_NF_TARGET_REJECT=m
483CONFIG_IP_NF_TARGET_LOG=m
484CONFIG_IP_NF_TARGET_ULOG=m
485CONFIG_NF_NAT=m
486CONFIG_NF_NAT_NEEDED=y
487CONFIG_IP_NF_TARGET_MASQUERADE=m
488CONFIG_IP_NF_TARGET_REDIRECT=m
489CONFIG_IP_NF_TARGET_NETMAP=m
490CONFIG_NF_NAT_SNMP_BASIC=m
491CONFIG_NF_NAT_PROTO_GRE=m
492CONFIG_NF_NAT_FTP=m
493CONFIG_NF_NAT_IRC=m
494CONFIG_NF_NAT_TFTP=m
495CONFIG_NF_NAT_AMANDA=m
496CONFIG_NF_NAT_PPTP=m
497CONFIG_NF_NAT_H323=m
498CONFIG_NF_NAT_SIP=m
499CONFIG_IP_NF_MANGLE=m
500CONFIG_IP_NF_TARGET_ECN=m
501CONFIG_IP_NF_TARGET_TTL=m
502CONFIG_IP_NF_TARGET_CLUSTERIP=m
503CONFIG_IP_NF_RAW=m
504CONFIG_IP_NF_ARPTABLES=m
505CONFIG_IP_NF_ARPFILTER=m
506CONFIG_IP_NF_ARP_MANGLE=m
507
508#
509# IPv6: Netfilter Configuration
510#
511CONFIG_NF_CONNTRACK_IPV6=m
512CONFIG_IP6_NF_QUEUE=m
513CONFIG_IP6_NF_IPTABLES=m
514CONFIG_IP6_NF_MATCH_RT=m
515CONFIG_IP6_NF_MATCH_OPTS=m
516CONFIG_IP6_NF_MATCH_FRAG=m
517CONFIG_IP6_NF_MATCH_HL=m
518CONFIG_IP6_NF_MATCH_IPV6HEADER=m
519CONFIG_IP6_NF_MATCH_AH=m
520CONFIG_IP6_NF_MATCH_MH=m
521CONFIG_IP6_NF_MATCH_EUI64=m
522CONFIG_IP6_NF_FILTER=m
523CONFIG_IP6_NF_TARGET_LOG=m
524CONFIG_IP6_NF_TARGET_REJECT=m
525CONFIG_IP6_NF_MANGLE=m
526CONFIG_IP6_NF_TARGET_HL=m
527CONFIG_IP6_NF_RAW=m
528
529#
530# Bridge: Netfilter Configuration
531#
532CONFIG_BRIDGE_NF_EBTABLES=m
533CONFIG_BRIDGE_EBT_BROUTE=m
534CONFIG_BRIDGE_EBT_T_FILTER=m
535CONFIG_BRIDGE_EBT_T_NAT=m
536CONFIG_BRIDGE_EBT_802_3=m
537CONFIG_BRIDGE_EBT_AMONG=m
538CONFIG_BRIDGE_EBT_ARP=m
539CONFIG_BRIDGE_EBT_IP=m
540CONFIG_BRIDGE_EBT_LIMIT=m
541CONFIG_BRIDGE_EBT_MARK=m
542CONFIG_BRIDGE_EBT_PKTTYPE=m
543CONFIG_BRIDGE_EBT_STP=m
544CONFIG_BRIDGE_EBT_VLAN=m
545CONFIG_BRIDGE_EBT_ARPREPLY=m
546CONFIG_BRIDGE_EBT_DNAT=m
547CONFIG_BRIDGE_EBT_MARK_T=m
548CONFIG_BRIDGE_EBT_REDIRECT=m
549CONFIG_BRIDGE_EBT_SNAT=m
550CONFIG_BRIDGE_EBT_LOG=m
551CONFIG_BRIDGE_EBT_ULOG=m
552CONFIG_IP_DCCP=m
553CONFIG_INET_DCCP_DIAG=m
554CONFIG_IP_DCCP_ACKVEC=y
555
556#
557# DCCP CCIDs Configuration (EXPERIMENTAL)
558#
559CONFIG_IP_DCCP_CCID2=m
560# CONFIG_IP_DCCP_CCID2_DEBUG is not set
561CONFIG_IP_DCCP_CCID3=m
562# CONFIG_IP_DCCP_CCID3_DEBUG is not set
563CONFIG_IP_DCCP_CCID3_RTO=100
564CONFIG_IP_DCCP_TFRC_LIB=m
565CONFIG_IP_SCTP=m
566# CONFIG_SCTP_DBG_MSG is not set
567# CONFIG_SCTP_DBG_OBJCNT is not set
568# CONFIG_SCTP_HMAC_NONE is not set
569# CONFIG_SCTP_HMAC_SHA1 is not set
570CONFIG_SCTP_HMAC_MD5=y
571CONFIG_TIPC=m
572CONFIG_TIPC_ADVANCED=y
573CONFIG_TIPC_ZONES=3
574CONFIG_TIPC_CLUSTERS=1
575CONFIG_TIPC_NODES=255
576CONFIG_TIPC_SLAVE_NODES=0
577CONFIG_TIPC_PORTS=8191
578CONFIG_TIPC_LOG=0
579# CONFIG_TIPC_DEBUG is not set
580CONFIG_ATM=m
581CONFIG_ATM_CLIP=m
582# CONFIG_ATM_CLIP_NO_ICMP is not set
583CONFIG_ATM_LANE=m
584CONFIG_ATM_MPOA=m
585CONFIG_ATM_BR2684=m
586# CONFIG_ATM_BR2684_IPFILTER is not set
587CONFIG_BRIDGE=m
588CONFIG_VLAN_8021Q=m
589# CONFIG_DECNET is not set
590CONFIG_LLC=m
591# CONFIG_LLC2 is not set
592# CONFIG_IPX is not set
593# CONFIG_ATALK is not set
594# CONFIG_X25 is not set
595# CONFIG_LAPB is not set
596# CONFIG_ECONET is not set
597# CONFIG_WAN_ROUTER is not set
598CONFIG_NET_SCHED=y
599
600#
601# Queueing/Scheduling
602#
603CONFIG_NET_SCH_CBQ=m
604CONFIG_NET_SCH_HTB=m
605CONFIG_NET_SCH_HFSC=m
606CONFIG_NET_SCH_ATM=m
607CONFIG_NET_SCH_PRIO=m
608CONFIG_NET_SCH_RR=m
609CONFIG_NET_SCH_RED=m
610CONFIG_NET_SCH_SFQ=m
611CONFIG_NET_SCH_TEQL=m
612CONFIG_NET_SCH_TBF=m
613CONFIG_NET_SCH_GRED=m
614CONFIG_NET_SCH_DSMARK=m
615CONFIG_NET_SCH_NETEM=m
616CONFIG_NET_SCH_INGRESS=m
617
618#
619# Classification
620#
621CONFIG_NET_CLS=y
622CONFIG_NET_CLS_BASIC=m
623CONFIG_NET_CLS_TCINDEX=m
624CONFIG_NET_CLS_ROUTE4=m
625CONFIG_NET_CLS_ROUTE=y
626CONFIG_NET_CLS_FW=m
627CONFIG_NET_CLS_U32=m
628CONFIG_CLS_U32_PERF=y
629CONFIG_CLS_U32_MARK=y
630CONFIG_NET_CLS_RSVP=m
631CONFIG_NET_CLS_RSVP6=m
632# CONFIG_NET_CLS_FLOW is not set
633CONFIG_NET_EMATCH=y
634CONFIG_NET_EMATCH_STACK=32
635CONFIG_NET_EMATCH_CMP=m
636CONFIG_NET_EMATCH_NBYTE=m
637CONFIG_NET_EMATCH_U32=m
638CONFIG_NET_EMATCH_META=m
639CONFIG_NET_EMATCH_TEXT=m
640CONFIG_NET_CLS_ACT=y
641CONFIG_NET_ACT_POLICE=m
642CONFIG_NET_ACT_GACT=m
643CONFIG_GACT_PROB=y
644CONFIG_NET_ACT_MIRRED=m
645CONFIG_NET_ACT_IPT=m
646CONFIG_NET_ACT_NAT=m
647CONFIG_NET_ACT_PEDIT=m
648CONFIG_NET_ACT_SIMP=m
649CONFIG_NET_CLS_IND=y
650CONFIG_NET_SCH_FIFO=y
651
652#
653# Network testing
654#
655CONFIG_NET_PKTGEN=m
656# CONFIG_HAMRADIO is not set
657# CONFIG_CAN is not set
658CONFIG_IRDA=m
659
660#
661# IrDA protocols
662#
663CONFIG_IRLAN=m
664CONFIG_IRNET=m
665CONFIG_IRCOMM=m
666# CONFIG_IRDA_ULTRA is not set
667
668#
669# IrDA options
670#
671CONFIG_IRDA_CACHE_LAST_LSAP=y
672CONFIG_IRDA_FAST_RR=y
673# CONFIG_IRDA_DEBUG is not set
674
675#
676# Infrared-port device drivers
677#
678
679#
680# SIR device drivers
681#
682CONFIG_IRTTY_SIR=m
683
684#
685# Dongle support
686#
687CONFIG_DONGLE=y
688CONFIG_ESI_DONGLE=m
689CONFIG_ACTISYS_DONGLE=m
690CONFIG_TEKRAM_DONGLE=m
691CONFIG_TOIM3232_DONGLE=m
692CONFIG_LITELINK_DONGLE=m
693CONFIG_MA600_DONGLE=m
694CONFIG_GIRBIL_DONGLE=m
695CONFIG_MCP2120_DONGLE=m
696CONFIG_OLD_BELKIN_DONGLE=m
697CONFIG_ACT200L_DONGLE=m
698CONFIG_KINGSUN_DONGLE=m
699CONFIG_KSDAZZLE_DONGLE=m
700CONFIG_KS959_DONGLE=m
701
702#
703# FIR device drivers
704#
705CONFIG_USB_IRDA=m
706CONFIG_SIGMATEL_FIR=m
707CONFIG_TOSHIBA_FIR=m
708CONFIG_VLSI_FIR=m
709CONFIG_MCS_FIR=m
710CONFIG_BT=m
711# CONFIG_BT_L2CAP is not set
712# CONFIG_BT_SCO is not set
713
714#
715# Bluetooth device drivers
716#
717CONFIG_BT_HCIUSB=m
718CONFIG_BT_HCIUSB_SCO=y
719CONFIG_BT_HCIUART=m
720CONFIG_BT_HCIUART_H4=y
721CONFIG_BT_HCIUART_BCSP=y
722CONFIG_BT_HCIUART_LL=y
723CONFIG_BT_HCIBCM203X=m
724CONFIG_BT_HCIBPA10X=m
725CONFIG_BT_HCIBFUSB=m
726CONFIG_BT_HCIVHCI=m
727# CONFIG_AF_RXRPC is not set
728CONFIG_FIB_RULES=y
729
730#
731# Wireless
732#
733CONFIG_CFG80211=m
734CONFIG_NL80211=y
735CONFIG_WIRELESS_EXT=y
736CONFIG_MAC80211=m
737
738#
739# Rate control algorithm selection
740#
741CONFIG_MAC80211_RC_DEFAULT_PID=y
742# CONFIG_MAC80211_RC_DEFAULT_SIMPLE is not set
743# CONFIG_MAC80211_RC_DEFAULT_NONE is not set
744
745#
746# Selecting 'y' for an algorithm will
747#
748
749#
750# build the algorithm into mac80211.
751#
752CONFIG_MAC80211_RC_DEFAULT="pid"
753CONFIG_MAC80211_RC_PID=y
754# CONFIG_MAC80211_RC_SIMPLE is not set
755CONFIG_MAC80211_LEDS=y
756# CONFIG_MAC80211_DEBUGFS is not set
757# CONFIG_MAC80211_DEBUG_PACKET_ALIGNMENT is not set
758# CONFIG_MAC80211_DEBUG is not set
759CONFIG_IEEE80211=m
760# CONFIG_IEEE80211_DEBUG is not set
761CONFIG_IEEE80211_CRYPT_WEP=m
762CONFIG_IEEE80211_CRYPT_CCMP=m
763CONFIG_IEEE80211_CRYPT_TKIP=m
764CONFIG_IEEE80211_SOFTMAC=m
765# CONFIG_IEEE80211_SOFTMAC_DEBUG is not set
766CONFIG_RFKILL=m
767CONFIG_RFKILL_INPUT=m
768CONFIG_RFKILL_LEDS=y
769CONFIG_NET_9P=m
770CONFIG_NET_9P_FD=m
771# CONFIG_NET_9P_DEBUG is not set
772
773#
774# Device Drivers
775#
776
777#
778# Generic Driver Options
779#
780CONFIG_UEVENT_HELPER_PATH="/sbin/hotplug"
781CONFIG_STANDALONE=y
782CONFIG_PREVENT_FIRMWARE_BUILD=y
783CONFIG_FW_LOADER=m
784# CONFIG_SYS_HYPERVISOR is not set
785CONFIG_CONNECTOR=m
786CONFIG_MTD=y
787# CONFIG_MTD_DEBUG is not set
788CONFIG_MTD_CONCAT=y
789CONFIG_MTD_PARTITIONS=y
790# CONFIG_MTD_REDBOOT_PARTS is not set
791# CONFIG_MTD_CMDLINE_PARTS is not set
792
793#
794# User Modules And Translation Layers
795#
796CONFIG_MTD_CHAR=y
797CONFIG_MTD_BLKDEVS=y
798CONFIG_MTD_BLOCK=y
799# CONFIG_FTL is not set
800# CONFIG_NFTL is not set
801# CONFIG_INFTL is not set
802# CONFIG_RFD_FTL is not set
803# CONFIG_SSFDC is not set
804# CONFIG_MTD_OOPS is not set
805
806#
807# RAM/ROM/Flash chip drivers
808#
809CONFIG_MTD_CFI=y
810# CONFIG_MTD_JEDECPROBE is not set
811CONFIG_MTD_GEN_PROBE=y
812# CONFIG_MTD_CFI_ADV_OPTIONS is not set
813CONFIG_MTD_MAP_BANK_WIDTH_1=y
814CONFIG_MTD_MAP_BANK_WIDTH_2=y
815CONFIG_MTD_MAP_BANK_WIDTH_4=y
816# CONFIG_MTD_MAP_BANK_WIDTH_8 is not set
817# CONFIG_MTD_MAP_BANK_WIDTH_16 is not set
818# CONFIG_MTD_MAP_BANK_WIDTH_32 is not set
819CONFIG_MTD_CFI_I1=y
820CONFIG_MTD_CFI_I2=y
821# CONFIG_MTD_CFI_I4 is not set
822# CONFIG_MTD_CFI_I8 is not set
823CONFIG_MTD_CFI_INTELEXT=y
824CONFIG_MTD_CFI_AMDSTD=y
825CONFIG_MTD_CFI_STAA=y
826CONFIG_MTD_CFI_UTIL=y
827CONFIG_MTD_RAM=y
828CONFIG_MTD_ROM=y
829CONFIG_MTD_ABSENT=y
830
831#
832# Mapping drivers for chip access
833#
834# CONFIG_MTD_COMPLEX_MAPPINGS is not set
835CONFIG_MTD_PHYSMAP=y
836CONFIG_MTD_PHYSMAP_START=0x8000000
837CONFIG_MTD_PHYSMAP_LEN=0x0
838CONFIG_MTD_PHYSMAP_BANKWIDTH=2
839# CONFIG_MTD_INTEL_VR_NOR is not set
840# CONFIG_MTD_PLATRAM is not set
841
842#
843# Self-contained MTD device drivers
844#
845# CONFIG_MTD_PMC551 is not set
846# CONFIG_MTD_SLRAM is not set
847# CONFIG_MTD_PHRAM is not set
848# CONFIG_MTD_MTDRAM is not set
849# CONFIG_MTD_BLOCK2MTD is not set
850
851#
852# Disk-On-Chip Device Drivers
853#
854# CONFIG_MTD_DOC2000 is not set
855# CONFIG_MTD_DOC2001 is not set
856# CONFIG_MTD_DOC2001PLUS is not set
857# CONFIG_MTD_NAND is not set
858# CONFIG_MTD_ONENAND is not set
859
860#
861# UBI - Unsorted block images
862#
863# CONFIG_MTD_UBI is not set
864# CONFIG_PARPORT is not set
865CONFIG_BLK_DEV=y
866# CONFIG_BLK_CPQ_DA is not set
867# CONFIG_BLK_CPQ_CISS_DA is not set
868# CONFIG_BLK_DEV_DAC960 is not set
869# CONFIG_BLK_DEV_UMEM is not set
870# CONFIG_BLK_DEV_COW_COMMON is not set
871CONFIG_BLK_DEV_LOOP=m
872CONFIG_BLK_DEV_CRYPTOLOOP=m
873CONFIG_BLK_DEV_NBD=m
874# CONFIG_BLK_DEV_SX8 is not set
875# CONFIG_BLK_DEV_UB is not set
876CONFIG_BLK_DEV_RAM=y
877CONFIG_BLK_DEV_RAM_COUNT=16
878CONFIG_BLK_DEV_RAM_SIZE=16384
879# CONFIG_BLK_DEV_XIP is not set
880# CONFIG_CDROM_PKTCDVD is not set
881CONFIG_ATA_OVER_ETH=m
882CONFIG_MISC_DEVICES=y
883# CONFIG_PHANTOM is not set
884# CONFIG_EEPROM_93CX6 is not set
885# CONFIG_SGI_IOC4 is not set
886# CONFIG_TIFM_CORE is not set
887# CONFIG_ENCLOSURE_SERVICES is not set
888CONFIG_HAVE_IDE=y
889# CONFIG_IDE is not set
890
891#
892# SCSI device support
893#
894CONFIG_RAID_ATTRS=m
895CONFIG_SCSI=y
896CONFIG_SCSI_DMA=y
897CONFIG_SCSI_TGT=m
898# CONFIG_SCSI_NETLINK is not set
899CONFIG_SCSI_PROC_FS=y
900
901#
902# SCSI support type (disk, tape, CD-ROM)
903#
904CONFIG_BLK_DEV_SD=y
905CONFIG_CHR_DEV_ST=m
906CONFIG_CHR_DEV_OSST=m
907CONFIG_BLK_DEV_SR=m
908CONFIG_BLK_DEV_SR_VENDOR=y
909CONFIG_CHR_DEV_SG=m
910CONFIG_CHR_DEV_SCH=m
911
912#
913# Some SCSI devices (e.g. CD jukebox) support multiple LUNs
914#
915CONFIG_SCSI_MULTI_LUN=y
916CONFIG_SCSI_CONSTANTS=y
917CONFIG_SCSI_LOGGING=y
918CONFIG_SCSI_SCAN_ASYNC=y
919CONFIG_SCSI_WAIT_SCAN=m
920
921#
922# SCSI Transports
923#
924# CONFIG_SCSI_SPI_ATTRS is not set
925# CONFIG_SCSI_FC_ATTRS is not set
926CONFIG_SCSI_ISCSI_ATTRS=m
927# CONFIG_SCSI_SAS_LIBSAS is not set
928# CONFIG_SCSI_SRP_ATTRS is not set
929CONFIG_SCSI_LOWLEVEL=y
930CONFIG_ISCSI_TCP=m
931# CONFIG_BLK_DEV_3W_XXXX_RAID is not set
932# CONFIG_SCSI_3W_9XXX is not set
933# CONFIG_SCSI_ACARD is not set
934# CONFIG_SCSI_AACRAID is not set
935# CONFIG_SCSI_AIC7XXX is not set
936# CONFIG_SCSI_AIC7XXX_OLD is not set
937# CONFIG_SCSI_AIC79XX is not set
938# CONFIG_SCSI_AIC94XX is not set
939# CONFIG_SCSI_DPT_I2O is not set
940# CONFIG_SCSI_ADVANSYS is not set
941# CONFIG_SCSI_ARCMSR is not set
942# CONFIG_MEGARAID_NEWGEN is not set
943# CONFIG_MEGARAID_LEGACY is not set
944# CONFIG_MEGARAID_SAS is not set
945# CONFIG_SCSI_HPTIOP is not set
946# CONFIG_SCSI_DMX3191D is not set
947# CONFIG_SCSI_FUTURE_DOMAIN is not set
948# CONFIG_SCSI_IPS is not set
949# CONFIG_SCSI_INITIO is not set
950# CONFIG_SCSI_INIA100 is not set
951# CONFIG_SCSI_STEX is not set
952# CONFIG_SCSI_SYM53C8XX_2 is not set
953# CONFIG_SCSI_QLOGIC_1280 is not set
954# CONFIG_SCSI_QLA_FC is not set
955# CONFIG_SCSI_QLA_ISCSI is not set
956# CONFIG_SCSI_LPFC is not set
957# CONFIG_SCSI_DC395x is not set
958# CONFIG_SCSI_DC390T is not set
959# CONFIG_SCSI_NSP32 is not set
960# CONFIG_SCSI_DEBUG is not set
961# CONFIG_SCSI_SRP is not set
962# CONFIG_ATA is not set
963# CONFIG_MD is not set
964# CONFIG_FUSION is not set
965
966#
967# IEEE 1394 (FireWire) support
968#
969# CONFIG_FIREWIRE is not set
970# CONFIG_IEEE1394 is not set
971# CONFIG_I2O is not set
972CONFIG_NETDEVICES=y
973# CONFIG_NETDEVICES_MULTIQUEUE is not set
974# CONFIG_IFB is not set
975CONFIG_DUMMY=m
976# CONFIG_BONDING is not set
977# CONFIG_MACVLAN is not set
978CONFIG_EQUALIZER=m
979CONFIG_TUN=m
980CONFIG_VETH=m
981# CONFIG_ARCNET is not set
982CONFIG_PHYLIB=m
983
984#
985# MII PHY device drivers
986#
987CONFIG_MARVELL_PHY=m
988CONFIG_DAVICOM_PHY=m
989CONFIG_QSEMI_PHY=m
990CONFIG_LXT_PHY=m
991CONFIG_CICADA_PHY=m
992CONFIG_VITESSE_PHY=m
993CONFIG_SMSC_PHY=m
994CONFIG_BROADCOM_PHY=m
995CONFIG_ICPLUS_PHY=m
996# CONFIG_REALTEK_PHY is not set
997# CONFIG_FIXED_PHY is not set
998CONFIG_MDIO_BITBANG=m
999CONFIG_NET_ETHERNET=y
1000CONFIG_MII=y
1001# CONFIG_AX88796 is not set
1002# CONFIG_HAPPYMEAL is not set
1003# CONFIG_SUNGEM is not set
1004# CONFIG_CASSINI is not set
1005# CONFIG_NET_VENDOR_3COM is not set
1006# CONFIG_DM9000 is not set
1007# CONFIG_NET_TULIP is not set
1008# CONFIG_HP100 is not set
1009# CONFIG_IBM_NEW_EMAC_ZMII is not set
1010# CONFIG_IBM_NEW_EMAC_RGMII is not set
1011# CONFIG_IBM_NEW_EMAC_TAH is not set
1012# CONFIG_IBM_NEW_EMAC_EMAC4 is not set
1013CONFIG_NET_PCI=y
1014# CONFIG_PCNET32 is not set
1015# CONFIG_AMD8111_ETH is not set
1016# CONFIG_ADAPTEC_STARFIRE is not set
1017CONFIG_B44=y
1018CONFIG_B44_PCI_AUTOSELECT=y
1019CONFIG_B44_PCICORE_AUTOSELECT=y
1020CONFIG_B44_PCI=y
1021# CONFIG_FORCEDETH is not set
1022# CONFIG_TC35815 is not set
1023# CONFIG_EEPRO100 is not set
1024# CONFIG_E100 is not set
1025# CONFIG_FEALNX is not set
1026# CONFIG_NATSEMI is not set
1027# CONFIG_NE2K_PCI is not set
1028# CONFIG_8139CP is not set
1029# CONFIG_8139TOO is not set
1030# CONFIG_R6040 is not set
1031# CONFIG_SIS900 is not set
1032# CONFIG_EPIC100 is not set
1033# CONFIG_SUNDANCE is not set
1034# CONFIG_TLAN is not set
1035# CONFIG_VIA_RHINE is not set
1036# CONFIG_SC92031 is not set
1037# CONFIG_NETDEV_1000 is not set
1038# CONFIG_NETDEV_10000 is not set
1039# CONFIG_TR is not set
1040
1041#
1042# Wireless LAN
1043#
1044# CONFIG_WLAN_PRE80211 is not set
1045CONFIG_WLAN_80211=y
1046# CONFIG_IPW2100 is not set
1047# CONFIG_IPW2200 is not set
1048# CONFIG_LIBERTAS is not set
1049# CONFIG_HERMES is not set
1050# CONFIG_ATMEL is not set
1051# CONFIG_PRISM54 is not set
1052# CONFIG_USB_ZD1201 is not set
1053# CONFIG_USB_NET_RNDIS_WLAN is not set
1054# CONFIG_RTL8180 is not set
1055# CONFIG_RTL8187 is not set
1056# CONFIG_ADM8211 is not set
1057# CONFIG_P54_COMMON is not set
1058CONFIG_ATH5K=m
1059# CONFIG_IWL4965 is not set
1060# CONFIG_IWL3945 is not set
1061# CONFIG_HOSTAP is not set
1062# CONFIG_BCM43XX is not set
1063# CONFIG_B43 is not set
1064# CONFIG_B43LEGACY is not set
1065CONFIG_ZD1211RW=m
1066# CONFIG_ZD1211RW_DEBUG is not set
1067# CONFIG_RT2X00 is not set
1068
1069#
1070# USB Network Adapters
1071#
1072CONFIG_USB_CATC=m
1073CONFIG_USB_KAWETH=m
1074CONFIG_USB_PEGASUS=m
1075CONFIG_USB_RTL8150=m
1076CONFIG_USB_USBNET=m
1077CONFIG_USB_NET_AX8817X=m
1078CONFIG_USB_NET_CDCETHER=m
1079CONFIG_USB_NET_DM9601=m
1080CONFIG_USB_NET_GL620A=m
1081CONFIG_USB_NET_NET1080=m
1082CONFIG_USB_NET_PLUSB=m
1083CONFIG_USB_NET_MCS7830=m
1084CONFIG_USB_NET_RNDIS_HOST=m
1085CONFIG_USB_NET_CDC_SUBSET=m
1086CONFIG_USB_ALI_M5632=y
1087CONFIG_USB_AN2720=y
1088CONFIG_USB_BELKIN=y
1089CONFIG_USB_ARMLINUX=y
1090CONFIG_USB_EPSON2888=y
1091CONFIG_USB_KC2190=y
1092CONFIG_USB_NET_ZAURUS=m
1093# CONFIG_WAN is not set
1094CONFIG_ATM_DRIVERS=y
1095CONFIG_ATM_DUMMY=m
1096CONFIG_ATM_TCP=m
1097# CONFIG_ATM_LANAI is not set
1098# CONFIG_ATM_ENI is not set
1099# CONFIG_ATM_FIRESTREAM is not set
1100# CONFIG_ATM_ZATM is not set
1101# CONFIG_ATM_NICSTAR is not set
1102# CONFIG_ATM_IDT77252 is not set
1103# CONFIG_ATM_AMBASSADOR is not set
1104# CONFIG_ATM_HORIZON is not set
1105# CONFIG_ATM_IA is not set
1106# CONFIG_ATM_FORE200E_MAYBE is not set
1107# CONFIG_ATM_HE is not set
1108# CONFIG_FDDI is not set
1109# CONFIG_HIPPI is not set
1110CONFIG_PPP=m
1111# CONFIG_PPP_MULTILINK is not set
1112# CONFIG_PPP_FILTER is not set
1113CONFIG_PPP_ASYNC=m
1114# CONFIG_PPP_SYNC_TTY is not set
1115CONFIG_PPP_DEFLATE=m
1116CONFIG_PPP_BSDCOMP=m
1117CONFIG_PPP_MPPE=m
1118CONFIG_PPPOE=m
1119CONFIG_PPPOATM=m
1120# CONFIG_PPPOL2TP is not set
1121CONFIG_SLIP=m
1122# CONFIG_SLIP_COMPRESSED is not set
1123CONFIG_SLHC=m
1124# CONFIG_SLIP_SMART is not set
1125# CONFIG_SLIP_MODE_SLIP6 is not set
1126# CONFIG_NET_FC is not set
1127CONFIG_NETCONSOLE=y
1128# CONFIG_NETCONSOLE_DYNAMIC is not set
1129CONFIG_NETPOLL=y
1130# CONFIG_NETPOLL_TRAP is not set
1131CONFIG_NET_POLL_CONTROLLER=y
1132# CONFIG_ISDN is not set
1133# CONFIG_PHONE is not set
1134
1135#
1136# Input device support
1137#
1138CONFIG_INPUT=y
1139# CONFIG_INPUT_FF_MEMLESS is not set
1140# CONFIG_INPUT_POLLDEV is not set
1141
1142#
1143# Userland interfaces
1144#
1145CONFIG_INPUT_MOUSEDEV=y
1146CONFIG_INPUT_MOUSEDEV_PSAUX=y
1147CONFIG_INPUT_MOUSEDEV_SCREEN_X=1024
1148CONFIG_INPUT_MOUSEDEV_SCREEN_Y=768
1149# CONFIG_INPUT_JOYDEV is not set
1150CONFIG_INPUT_EVDEV=m
1151# CONFIG_INPUT_EVBUG is not set
1152
1153#
1154# Input Device Drivers
1155#
1156# CONFIG_INPUT_KEYBOARD is not set
1157# CONFIG_INPUT_MOUSE is not set
1158# CONFIG_INPUT_JOYSTICK is not set
1159# CONFIG_INPUT_TABLET is not set
1160# CONFIG_INPUT_TOUCHSCREEN is not set
1161# CONFIG_INPUT_MISC is not set
1162
1163#
1164# Hardware I/O ports
1165#
1166# CONFIG_SERIO is not set
1167# CONFIG_GAMEPORT is not set
1168
1169#
1170# Character devices
1171#
1172# CONFIG_VT is not set
1173# CONFIG_SERIAL_NONSTANDARD is not set
1174# CONFIG_NOZOMI is not set
1175
1176#
1177# Serial drivers
1178#
1179CONFIG_SERIAL_8250=y
1180CONFIG_SERIAL_8250_CONSOLE=y
1181# CONFIG_SERIAL_8250_PCI is not set
1182CONFIG_SERIAL_8250_NR_UARTS=2
1183CONFIG_SERIAL_8250_RUNTIME_UARTS=2
1184# CONFIG_SERIAL_8250_EXTENDED is not set
1185
1186#
1187# Non-8250 serial port support
1188#
1189CONFIG_SERIAL_CORE=y
1190CONFIG_SERIAL_CORE_CONSOLE=y
1191# CONFIG_SERIAL_JSM is not set
1192CONFIG_UNIX98_PTYS=y
1193# CONFIG_LEGACY_PTYS is not set
1194# CONFIG_IPMI_HANDLER is not set
1195# CONFIG_HW_RANDOM is not set
1196# CONFIG_RTC is not set
1197# CONFIG_R3964 is not set
1198# CONFIG_APPLICOM is not set
1199# CONFIG_RAW_DRIVER is not set
1200# CONFIG_TCG_TPM is not set
1201CONFIG_DEVPORT=y
1202# CONFIG_I2C is not set
1203
1204#
1205# SPI support
1206#
1207# CONFIG_SPI is not set
1208# CONFIG_SPI_MASTER is not set
1209CONFIG_W1=m
1210CONFIG_W1_CON=y
1211
1212#
1213# 1-wire Bus Masters
1214#
1215CONFIG_W1_MASTER_MATROX=m
1216CONFIG_W1_MASTER_DS2490=m
1217# CONFIG_W1_MASTER_GPIO is not set
1218
1219#
1220# 1-wire Slaves
1221#
1222CONFIG_W1_SLAVE_THERM=m
1223CONFIG_W1_SLAVE_SMEM=m
1224CONFIG_W1_SLAVE_DS2433=m
1225# CONFIG_W1_SLAVE_DS2433_CRC is not set
1226CONFIG_W1_SLAVE_DS2760=m
1227# CONFIG_POWER_SUPPLY is not set
1228# CONFIG_HWMON is not set
1229CONFIG_THERMAL=y
1230# CONFIG_WATCHDOG is not set
1231
1232#
1233# Sonics Silicon Backplane
1234#
1235CONFIG_SSB_POSSIBLE=y
1236CONFIG_SSB=y
1237CONFIG_SSB_PCIHOST_POSSIBLE=y
1238CONFIG_SSB_PCIHOST=y
1239# CONFIG_SSB_SILENT is not set
1240# CONFIG_SSB_DEBUG is not set
1241CONFIG_SSB_SERIAL=y
1242CONFIG_SSB_DRIVER_PCICORE_POSSIBLE=y
1243CONFIG_SSB_DRIVER_PCICORE=y
1244CONFIG_SSB_PCICORE_HOSTMODE=y
1245CONFIG_SSB_DRIVER_MIPS=y
1246CONFIG_SSB_DRIVER_EXTIF=y
1247
1248#
1249# Multifunction device drivers
1250#
1251# CONFIG_MFD_SM501 is not set
1252
1253#
1254# Multimedia devices
1255#
1256# CONFIG_VIDEO_DEV is not set
1257# CONFIG_DVB_CORE is not set
1258CONFIG_DAB=y
1259CONFIG_USB_DABUSB=m
1260
1261#
1262# Graphics support
1263#
1264# CONFIG_DRM is not set
1265# CONFIG_VGASTATE is not set
1266# CONFIG_VIDEO_OUTPUT_CONTROL is not set
1267# CONFIG_FB is not set
1268# CONFIG_BACKLIGHT_LCD_SUPPORT is not set
1269
1270#
1271# Display device support
1272#
1273CONFIG_DISPLAY_SUPPORT=m
1274
1275#
1276# Display hardware drivers
1277#
1278
1279#
1280# Sound
1281#
1282CONFIG_SOUND=m
1283
1284#
1285# Advanced Linux Sound Architecture
1286#
1287CONFIG_SND=m
1288CONFIG_SND_TIMER=m
1289CONFIG_SND_PCM=m
1290CONFIG_SND_HWDEP=m
1291CONFIG_SND_RAWMIDI=m
1292CONFIG_SND_SEQUENCER=m
1293CONFIG_SND_SEQ_DUMMY=m
1294CONFIG_SND_OSSEMUL=y
1295CONFIG_SND_MIXER_OSS=m
1296CONFIG_SND_PCM_OSS=m
1297CONFIG_SND_PCM_OSS_PLUGINS=y
1298CONFIG_SND_SEQUENCER_OSS=y
1299# CONFIG_SND_DYNAMIC_MINORS is not set
1300CONFIG_SND_SUPPORT_OLD_API=y
1301CONFIG_SND_VERBOSE_PROCFS=y
1302# CONFIG_SND_VERBOSE_PRINTK is not set
1303# CONFIG_SND_DEBUG is not set
1304
1305#
1306# Generic devices
1307#
1308CONFIG_SND_DUMMY=m
1309CONFIG_SND_VIRMIDI=m
1310# CONFIG_SND_MTPAV is not set
1311# CONFIG_SND_SERIAL_U16550 is not set
1312# CONFIG_SND_MPU401 is not set
1313
1314#
1315# PCI devices
1316#
1317# CONFIG_SND_AD1889 is not set
1318# CONFIG_SND_ALS300 is not set
1319# CONFIG_SND_ALI5451 is not set
1320# CONFIG_SND_ATIIXP is not set
1321# CONFIG_SND_ATIIXP_MODEM is not set
1322# CONFIG_SND_AU8810 is not set
1323# CONFIG_SND_AU8820 is not set
1324# CONFIG_SND_AU8830 is not set
1325# CONFIG_SND_AZT3328 is not set
1326# CONFIG_SND_BT87X is not set
1327# CONFIG_SND_CA0106 is not set
1328# CONFIG_SND_CMIPCI is not set
1329# CONFIG_SND_OXYGEN is not set
1330# CONFIG_SND_CS4281 is not set
1331# CONFIG_SND_CS46XX is not set
1332# CONFIG_SND_DARLA20 is not set
1333# CONFIG_SND_GINA20 is not set
1334# CONFIG_SND_LAYLA20 is not set
1335# CONFIG_SND_DARLA24 is not set
1336# CONFIG_SND_GINA24 is not set
1337# CONFIG_SND_LAYLA24 is not set
1338# CONFIG_SND_MONA is not set
1339# CONFIG_SND_MIA is not set
1340# CONFIG_SND_ECHO3G is not set
1341# CONFIG_SND_INDIGO is not set
1342# CONFIG_SND_INDIGOIO is not set
1343# CONFIG_SND_INDIGODJ is not set
1344# CONFIG_SND_EMU10K1 is not set
1345# CONFIG_SND_EMU10K1X is not set
1346# CONFIG_SND_ENS1370 is not set
1347# CONFIG_SND_ENS1371 is not set
1348# CONFIG_SND_ES1938 is not set
1349# CONFIG_SND_ES1968 is not set
1350# CONFIG_SND_FM801 is not set
1351# CONFIG_SND_HDA_INTEL is not set
1352# CONFIG_SND_HDSP is not set
1353# CONFIG_SND_HDSPM is not set
1354# CONFIG_SND_HIFIER is not set
1355# CONFIG_SND_ICE1712 is not set
1356# CONFIG_SND_ICE1724 is not set
1357# CONFIG_SND_INTEL8X0 is not set
1358# CONFIG_SND_INTEL8X0M is not set
1359# CONFIG_SND_KORG1212 is not set
1360# CONFIG_SND_MAESTRO3 is not set
1361# CONFIG_SND_MIXART is not set
1362# CONFIG_SND_NM256 is not set
1363# CONFIG_SND_PCXHR is not set
1364# CONFIG_SND_RIPTIDE is not set
1365# CONFIG_SND_RME32 is not set
1366# CONFIG_SND_RME96 is not set
1367# CONFIG_SND_RME9652 is not set
1368# CONFIG_SND_SONICVIBES is not set
1369# CONFIG_SND_TRIDENT is not set
1370# CONFIG_SND_VIA82XX is not set
1371# CONFIG_SND_VIA82XX_MODEM is not set
1372# CONFIG_SND_VIRTUOSO is not set
1373# CONFIG_SND_VX222 is not set
1374# CONFIG_SND_YMFPCI is not set
1375
1376#
1377# ALSA MIPS devices
1378#
1379
1380#
1381# USB devices
1382#
1383CONFIG_SND_USB_AUDIO=m
1384# CONFIG_SND_USB_CAIAQ is not set
1385
1386#
1387# System on Chip audio support
1388#
1389# CONFIG_SND_SOC is not set
1390
1391#
1392# SoC Audio support for SuperH
1393#
1394
1395#
1396# ALSA SoC audio for Freescale SOCs
1397#
1398
1399#
1400# Open Sound System
1401#
1402# CONFIG_SOUND_PRIME is not set
1403CONFIG_HID_SUPPORT=y
1404CONFIG_HID=m
1405# CONFIG_HID_DEBUG is not set
1406# CONFIG_HIDRAW is not set
1407
1408#
1409# USB Input Devices
1410#
1411CONFIG_USB_HID=m
1412# CONFIG_USB_HIDINPUT_POWERBOOK is not set
1413# CONFIG_HID_FF is not set
1414CONFIG_USB_HIDDEV=y
1415
1416#
1417# USB HID Boot Protocol drivers
1418#
1419# CONFIG_USB_KBD is not set
1420# CONFIG_USB_MOUSE is not set
1421CONFIG_USB_SUPPORT=y
1422CONFIG_USB_ARCH_HAS_HCD=y
1423CONFIG_USB_ARCH_HAS_OHCI=y
1424CONFIG_USB_ARCH_HAS_EHCI=y
1425CONFIG_USB=y
1426# CONFIG_USB_DEBUG is not set
1427# CONFIG_USB_ANNOUNCE_NEW_DEVICES is not set
1428
1429#
1430# Miscellaneous USB options
1431#
1432CONFIG_USB_DEVICEFS=y
1433# CONFIG_USB_DEVICE_CLASS is not set
1434# CONFIG_USB_DYNAMIC_MINORS is not set
1435# CONFIG_USB_OTG is not set
1436
1437#
1438# USB Host Controller Drivers
1439#
1440CONFIG_USB_EHCI_HCD=y
1441CONFIG_USB_EHCI_ROOT_HUB_TT=y
1442CONFIG_USB_EHCI_TT_NEWSCHED=y
1443# CONFIG_USB_ISP116X_HCD is not set
1444CONFIG_USB_OHCI_HCD=y
1445# CONFIG_USB_OHCI_HCD_SSB is not set
1446# CONFIG_USB_OHCI_BIG_ENDIAN_DESC is not set
1447# CONFIG_USB_OHCI_BIG_ENDIAN_MMIO is not set
1448CONFIG_USB_OHCI_LITTLE_ENDIAN=y
1449# CONFIG_USB_UHCI_HCD is not set
1450CONFIG_USB_U132_HCD=m
1451# CONFIG_USB_SL811_HCD is not set
1452CONFIG_USB_R8A66597_HCD=m
1453
1454#
1455# USB Device Class drivers
1456#
1457CONFIG_USB_ACM=m
1458CONFIG_USB_PRINTER=m
1459
1460#
1461# NOTE: USB_STORAGE enables SCSI, and 'SCSI disk support'
1462#
1463
1464#
1465# may also be needed; see USB_STORAGE Help for more information
1466#
1467CONFIG_USB_STORAGE=y
1468# CONFIG_USB_STORAGE_DEBUG is not set
1469CONFIG_USB_STORAGE_DATAFAB=y
1470CONFIG_USB_STORAGE_FREECOM=y
1471# CONFIG_USB_STORAGE_ISD200 is not set
1472CONFIG_USB_STORAGE_DPCM=y
1473CONFIG_USB_STORAGE_USBAT=y
1474CONFIG_USB_STORAGE_SDDR09=y
1475CONFIG_USB_STORAGE_SDDR55=y
1476CONFIG_USB_STORAGE_JUMPSHOT=y
1477CONFIG_USB_STORAGE_ALAUDA=y
1478CONFIG_USB_STORAGE_ONETOUCH=y
1479CONFIG_USB_STORAGE_KARMA=y
1480# CONFIG_USB_LIBUSUAL is not set
1481
1482#
1483# USB Imaging devices
1484#
1485CONFIG_USB_MDC800=m
1486CONFIG_USB_MICROTEK=m
1487# CONFIG_USB_MON is not set
1488
1489#
1490# USB port drivers
1491#
1492CONFIG_USB_SERIAL=m
1493CONFIG_USB_EZUSB=y
1494CONFIG_USB_SERIAL_GENERIC=y
1495CONFIG_USB_SERIAL_AIRCABLE=m
1496CONFIG_USB_SERIAL_AIRPRIME=m
1497CONFIG_USB_SERIAL_ARK3116=m
1498CONFIG_USB_SERIAL_BELKIN=m
1499CONFIG_USB_SERIAL_CH341=m
1500# CONFIG_USB_SERIAL_WHITEHEAT is not set
1501CONFIG_USB_SERIAL_DIGI_ACCELEPORT=m
1502CONFIG_USB_SERIAL_CP2101=m
1503CONFIG_USB_SERIAL_CYPRESS_M8=m
1504CONFIG_USB_SERIAL_EMPEG=m
1505CONFIG_USB_SERIAL_FTDI_SIO=m
1506CONFIG_USB_SERIAL_FUNSOFT=m
1507CONFIG_USB_SERIAL_VISOR=m
1508CONFIG_USB_SERIAL_IPAQ=m
1509CONFIG_USB_SERIAL_IR=m
1510# CONFIG_USB_SERIAL_EDGEPORT is not set
1511# CONFIG_USB_SERIAL_EDGEPORT_TI is not set
1512CONFIG_USB_SERIAL_GARMIN=m
1513CONFIG_USB_SERIAL_IPW=m
1514# CONFIG_USB_SERIAL_IUU is not set
1515CONFIG_USB_SERIAL_KEYSPAN_PDA=m
1516# CONFIG_USB_SERIAL_KEYSPAN is not set
1517CONFIG_USB_SERIAL_KLSI=m
1518CONFIG_USB_SERIAL_KOBIL_SCT=m
1519CONFIG_USB_SERIAL_MCT_U232=m
1520CONFIG_USB_SERIAL_MOS7720=m
1521CONFIG_USB_SERIAL_MOS7840=m
1522CONFIG_USB_SERIAL_NAVMAN=m
1523CONFIG_USB_SERIAL_PL2303=m
1524CONFIG_USB_SERIAL_OTI6858=m
1525CONFIG_USB_SERIAL_HP4X=m
1526CONFIG_USB_SERIAL_SAFE=m
1527# CONFIG_USB_SERIAL_SAFE_PADDED is not set
1528CONFIG_USB_SERIAL_SIERRAWIRELESS=m
1529# CONFIG_USB_SERIAL_TI is not set
1530CONFIG_USB_SERIAL_CYBERJACK=m
1531CONFIG_USB_SERIAL_XIRCOM=m
1532CONFIG_USB_SERIAL_OPTION=m
1533CONFIG_USB_SERIAL_OMNINET=m
1534CONFIG_USB_SERIAL_DEBUG=m
1535
1536#
1537# USB Miscellaneous drivers
1538#
1539# CONFIG_USB_EMI62 is not set
1540# CONFIG_USB_EMI26 is not set
1541CONFIG_USB_ADUTUX=m
1542CONFIG_USB_AUERSWALD=m
1543CONFIG_USB_RIO500=m
1544CONFIG_USB_LEGOTOWER=m
1545CONFIG_USB_LCD=m
1546CONFIG_USB_BERRY_CHARGE=m
1547CONFIG_USB_LED=m
1548CONFIG_USB_CYPRESS_CY7C63=m
1549CONFIG_USB_CYTHERM=m
1550CONFIG_USB_PHIDGET=m
1551CONFIG_USB_PHIDGETKIT=m
1552CONFIG_USB_PHIDGETMOTORCONTROL=m
1553CONFIG_USB_PHIDGETSERVO=m
1554CONFIG_USB_IDMOUSE=m
1555CONFIG_USB_FTDI_ELAN=m
1556# CONFIG_USB_APPLEDISPLAY is not set
1557CONFIG_USB_SISUSBVGA=m
1558CONFIG_USB_LD=m
1559CONFIG_USB_TRANCEVIBRATOR=m
1560CONFIG_USB_IOWARRIOR=m
1561CONFIG_USB_TEST=m
1562CONFIG_USB_ATM=m
1563CONFIG_USB_SPEEDTOUCH=m
1564CONFIG_USB_CXACRU=m
1565CONFIG_USB_UEAGLEATM=m
1566CONFIG_USB_XUSBATM=m
1567CONFIG_USB_GADGET=m
1568# CONFIG_USB_GADGET_DEBUG_FILES is not set
1569# CONFIG_USB_GADGET_DEBUG_FS is not set
1570CONFIG_USB_GADGET_SELECTED=y
1571# CONFIG_USB_GADGET_AMD5536UDC is not set
1572# CONFIG_USB_GADGET_ATMEL_USBA is not set
1573# CONFIG_USB_GADGET_FSL_USB2 is not set
1574CONFIG_USB_GADGET_NET2280=y
1575CONFIG_USB_NET2280=m
1576# CONFIG_USB_GADGET_PXA2XX is not set
1577# CONFIG_USB_GADGET_M66592 is not set
1578# CONFIG_USB_GADGET_GOKU is not set
1579# CONFIG_USB_GADGET_LH7A40X is not set
1580# CONFIG_USB_GADGET_OMAP is not set
1581# CONFIG_USB_GADGET_S3C2410 is not set
1582# CONFIG_USB_GADGET_AT91 is not set
1583# CONFIG_USB_GADGET_DUMMY_HCD is not set
1584CONFIG_USB_GADGET_DUALSPEED=y
1585CONFIG_USB_ZERO=m
1586CONFIG_USB_ETH=m
1587CONFIG_USB_ETH_RNDIS=y
1588CONFIG_USB_GADGETFS=m
1589CONFIG_USB_FILE_STORAGE=m
1590# CONFIG_USB_FILE_STORAGE_TEST is not set
1591CONFIG_USB_G_SERIAL=m
1592CONFIG_USB_MIDI_GADGET=m
1593# CONFIG_USB_G_PRINTER is not set
1594# CONFIG_MMC is not set
1595# CONFIG_MEMSTICK is not set
1596CONFIG_NEW_LEDS=y
1597CONFIG_LEDS_CLASS=y
1598
1599#
1600# LED drivers
1601#
1602CONFIG_LEDS_GPIO=y
1603
1604#
1605# LED Triggers
1606#
1607CONFIG_LEDS_TRIGGERS=y
1608CONFIG_LEDS_TRIGGER_TIMER=y
1609CONFIG_LEDS_TRIGGER_HEARTBEAT=y
1610# CONFIG_INFINIBAND is not set
1611CONFIG_RTC_LIB=y
1612# CONFIG_RTC_CLASS is not set
1613
1614#
1615# Userspace I/O
1616#
1617# CONFIG_UIO is not set
1618
1619#
1620# File systems
1621#
1622CONFIG_EXT2_FS=y
1623CONFIG_EXT2_FS_XATTR=y
1624CONFIG_EXT2_FS_POSIX_ACL=y
1625CONFIG_EXT2_FS_SECURITY=y
1626# CONFIG_EXT2_FS_XIP is not set
1627CONFIG_EXT3_FS=y
1628CONFIG_EXT3_FS_XATTR=y
1629CONFIG_EXT3_FS_POSIX_ACL=y
1630CONFIG_EXT3_FS_SECURITY=y
1631# CONFIG_EXT4DEV_FS is not set
1632CONFIG_JBD=y
1633# CONFIG_JBD_DEBUG is not set
1634CONFIG_FS_MBCACHE=y
1635CONFIG_REISERFS_FS=m
1636# CONFIG_REISERFS_CHECK is not set
1637# CONFIG_REISERFS_PROC_INFO is not set
1638CONFIG_REISERFS_FS_XATTR=y
1639CONFIG_REISERFS_FS_POSIX_ACL=y
1640CONFIG_REISERFS_FS_SECURITY=y
1641CONFIG_JFS_FS=m
1642CONFIG_JFS_POSIX_ACL=y
1643CONFIG_JFS_SECURITY=y
1644# CONFIG_JFS_DEBUG is not set
1645# CONFIG_JFS_STATISTICS is not set
1646CONFIG_FS_POSIX_ACL=y
1647CONFIG_XFS_FS=m
1648CONFIG_XFS_QUOTA=y
1649CONFIG_XFS_SECURITY=y
1650CONFIG_XFS_POSIX_ACL=y
1651CONFIG_XFS_RT=y
1652CONFIG_GFS2_FS=m
1653CONFIG_GFS2_FS_LOCKING_NOLOCK=m
1654CONFIG_GFS2_FS_LOCKING_DLM=m
1655# CONFIG_OCFS2_FS is not set
1656CONFIG_DNOTIFY=y
1657CONFIG_INOTIFY=y
1658CONFIG_INOTIFY_USER=y
1659CONFIG_QUOTA=y
1660CONFIG_QUOTA_NETLINK_INTERFACE=y
1661CONFIG_PRINT_QUOTA_WARNING=y
1662CONFIG_QFMT_V1=m
1663CONFIG_QFMT_V2=m
1664CONFIG_QUOTACTL=y
1665CONFIG_AUTOFS_FS=m
1666CONFIG_AUTOFS4_FS=m
1667CONFIG_FUSE_FS=m
1668CONFIG_GENERIC_ACL=y
1669
1670#
1671# CD-ROM/DVD Filesystems
1672#
1673CONFIG_ISO9660_FS=m
1674CONFIG_JOLIET=y
1675CONFIG_ZISOFS=y
1676CONFIG_UDF_FS=m
1677CONFIG_UDF_NLS=y
1678
1679#
1680# DOS/FAT/NT Filesystems
1681#
1682CONFIG_FAT_FS=m
1683CONFIG_MSDOS_FS=m
1684CONFIG_VFAT_FS=m
1685CONFIG_FAT_DEFAULT_CODEPAGE=437
1686CONFIG_FAT_DEFAULT_IOCHARSET="iso8859-1"
1687CONFIG_NTFS_FS=m
1688# CONFIG_NTFS_DEBUG is not set
1689CONFIG_NTFS_RW=y
1690
1691#
1692# Pseudo filesystems
1693#
1694CONFIG_PROC_FS=y
1695CONFIG_PROC_KCORE=y
1696CONFIG_PROC_SYSCTL=y
1697CONFIG_SYSFS=y
1698CONFIG_TMPFS=y
1699CONFIG_TMPFS_POSIX_ACL=y
1700# CONFIG_HUGETLB_PAGE is not set
1701CONFIG_CONFIGFS_FS=m
1702
1703#
1704# Miscellaneous filesystems
1705#
1706CONFIG_ADFS_FS=m
1707# CONFIG_ADFS_FS_RW is not set
1708CONFIG_AFFS_FS=m
1709CONFIG_HFS_FS=m
1710CONFIG_HFSPLUS_FS=m
1711CONFIG_BEFS_FS=m
1712# CONFIG_BEFS_DEBUG is not set
1713CONFIG_BFS_FS=m
1714CONFIG_EFS_FS=m
1715CONFIG_JFFS2_FS=m
1716CONFIG_JFFS2_FS_DEBUG=0
1717CONFIG_JFFS2_FS_WRITEBUFFER=y
1718# CONFIG_JFFS2_FS_WBUF_VERIFY is not set
1719# CONFIG_JFFS2_SUMMARY is not set
1720CONFIG_JFFS2_FS_XATTR=y
1721CONFIG_JFFS2_FS_POSIX_ACL=y
1722CONFIG_JFFS2_FS_SECURITY=y
1723# CONFIG_JFFS2_COMPRESSION_OPTIONS is not set
1724CONFIG_JFFS2_ZLIB=y
1725# CONFIG_JFFS2_LZO is not set
1726CONFIG_JFFS2_RTIME=y
1727# CONFIG_JFFS2_RUBIN is not set
1728CONFIG_CRAMFS=m
1729CONFIG_VXFS_FS=m
1730CONFIG_MINIX_FS=m
1731CONFIG_HPFS_FS=m
1732CONFIG_QNX4FS_FS=m
1733CONFIG_ROMFS_FS=m
1734CONFIG_SYSV_FS=m
1735CONFIG_UFS_FS=m
1736# CONFIG_UFS_FS_WRITE is not set
1737# CONFIG_UFS_DEBUG is not set
1738CONFIG_NETWORK_FILESYSTEMS=y
1739CONFIG_NFS_FS=m
1740CONFIG_NFS_V3=y
1741CONFIG_NFS_V3_ACL=y
1742CONFIG_NFS_V4=y
1743# CONFIG_NFS_DIRECTIO is not set
1744CONFIG_NFSD=m
1745CONFIG_NFSD_V2_ACL=y
1746CONFIG_NFSD_V3=y
1747CONFIG_NFSD_V3_ACL=y
1748CONFIG_NFSD_V4=y
1749CONFIG_NFSD_TCP=y
1750CONFIG_LOCKD=m
1751CONFIG_LOCKD_V4=y
1752CONFIG_EXPORTFS=m
1753CONFIG_NFS_ACL_SUPPORT=m
1754CONFIG_NFS_COMMON=y
1755CONFIG_SUNRPC=m
1756CONFIG_SUNRPC_GSS=m
1757CONFIG_SUNRPC_BIND34=y
1758CONFIG_RPCSEC_GSS_KRB5=m
1759CONFIG_RPCSEC_GSS_SPKM3=m
1760# CONFIG_SMB_FS is not set
1761CONFIG_CIFS=m
1762# CONFIG_CIFS_STATS is not set
1763# CONFIG_CIFS_WEAK_PW_HASH is not set
1764CONFIG_CIFS_XATTR=y
1765CONFIG_CIFS_POSIX=y
1766# CONFIG_CIFS_DEBUG2 is not set
1767# CONFIG_CIFS_EXPERIMENTAL is not set
1768CONFIG_NCP_FS=m
1769# CONFIG_NCPFS_PACKET_SIGNING is not set
1770# CONFIG_NCPFS_IOCTL_LOCKING is not set
1771# CONFIG_NCPFS_STRONG is not set
1772CONFIG_NCPFS_NFS_NS=y
1773CONFIG_NCPFS_OS2_NS=y
1774# CONFIG_NCPFS_SMALLDOS is not set
1775CONFIG_NCPFS_NLS=y
1776CONFIG_NCPFS_EXTRAS=y
1777CONFIG_CODA_FS=m
1778# CONFIG_CODA_FS_OLD_API is not set
1779# CONFIG_AFS_FS is not set
1780CONFIG_9P_FS=m
1781
1782#
1783# Partition Types
1784#
1785CONFIG_PARTITION_ADVANCED=y
1786# CONFIG_ACORN_PARTITION is not set
1787# CONFIG_OSF_PARTITION is not set
1788# CONFIG_AMIGA_PARTITION is not set
1789# CONFIG_ATARI_PARTITION is not set
1790# CONFIG_MAC_PARTITION is not set
1791CONFIG_MSDOS_PARTITION=y
1792# CONFIG_BSD_DISKLABEL is not set
1793# CONFIG_MINIX_SUBPARTITION is not set
1794# CONFIG_SOLARIS_X86_PARTITION is not set
1795# CONFIG_UNIXWARE_DISKLABEL is not set
1796# CONFIG_LDM_PARTITION is not set
1797# CONFIG_SGI_PARTITION is not set
1798# CONFIG_ULTRIX_PARTITION is not set
1799# CONFIG_SUN_PARTITION is not set
1800CONFIG_KARMA_PARTITION=y
1801# CONFIG_EFI_PARTITION is not set
1802# CONFIG_SYSV68_PARTITION is not set
1803CONFIG_NLS=y
1804CONFIG_NLS_DEFAULT="iso8859-1"
1805CONFIG_NLS_CODEPAGE_437=m
1806CONFIG_NLS_CODEPAGE_737=m
1807CONFIG_NLS_CODEPAGE_775=m
1808CONFIG_NLS_CODEPAGE_850=m
1809CONFIG_NLS_CODEPAGE_852=m
1810CONFIG_NLS_CODEPAGE_855=m
1811CONFIG_NLS_CODEPAGE_857=m
1812CONFIG_NLS_CODEPAGE_860=m
1813CONFIG_NLS_CODEPAGE_861=m
1814CONFIG_NLS_CODEPAGE_862=m
1815CONFIG_NLS_CODEPAGE_863=m
1816CONFIG_NLS_CODEPAGE_864=m
1817CONFIG_NLS_CODEPAGE_865=m
1818CONFIG_NLS_CODEPAGE_866=m
1819CONFIG_NLS_CODEPAGE_869=m
1820CONFIG_NLS_CODEPAGE_936=m
1821CONFIG_NLS_CODEPAGE_950=m
1822CONFIG_NLS_CODEPAGE_932=m
1823CONFIG_NLS_CODEPAGE_949=m
1824CONFIG_NLS_CODEPAGE_874=m
1825CONFIG_NLS_ISO8859_8=m
1826CONFIG_NLS_CODEPAGE_1250=m
1827CONFIG_NLS_CODEPAGE_1251=m
1828CONFIG_NLS_ASCII=m
1829CONFIG_NLS_ISO8859_1=m
1830CONFIG_NLS_ISO8859_2=m
1831CONFIG_NLS_ISO8859_3=m
1832CONFIG_NLS_ISO8859_4=m
1833CONFIG_NLS_ISO8859_5=m
1834CONFIG_NLS_ISO8859_6=m
1835CONFIG_NLS_ISO8859_7=m
1836CONFIG_NLS_ISO8859_9=m
1837CONFIG_NLS_ISO8859_13=m
1838CONFIG_NLS_ISO8859_14=m
1839CONFIG_NLS_ISO8859_15=m
1840CONFIG_NLS_KOI8_R=m
1841CONFIG_NLS_KOI8_U=m
1842CONFIG_NLS_UTF8=m
1843CONFIG_DLM=m
1844CONFIG_DLM_DEBUG=y
1845
1846#
1847# Kernel hacking
1848#
1849CONFIG_TRACE_IRQFLAGS_SUPPORT=y
1850# CONFIG_PRINTK_TIME is not set
1851CONFIG_ENABLE_WARN_DEPRECATED=y
1852CONFIG_ENABLE_MUST_CHECK=y
1853# CONFIG_MAGIC_SYSRQ is not set
1854# CONFIG_UNUSED_SYMBOLS is not set
1855CONFIG_DEBUG_FS=y
1856# CONFIG_HEADERS_CHECK is not set
1857# CONFIG_DEBUG_KERNEL is not set
1858# CONFIG_SAMPLES is not set
1859CONFIG_CMDLINE=""
1860
1861#
1862# Security options
1863#
1864# CONFIG_KEYS is not set
1865# CONFIG_SECURITY is not set
1866# CONFIG_SECURITY_FILE_CAPABILITIES is not set
1867CONFIG_CRYPTO=y
1868CONFIG_CRYPTO_ALGAPI=y
1869CONFIG_CRYPTO_AEAD=m
1870CONFIG_CRYPTO_BLKCIPHER=m
1871# CONFIG_CRYPTO_SEQIV is not set
1872CONFIG_CRYPTO_HASH=y
1873CONFIG_CRYPTO_MANAGER=y
1874CONFIG_CRYPTO_HMAC=y
1875CONFIG_CRYPTO_XCBC=m
1876CONFIG_CRYPTO_NULL=m
1877CONFIG_CRYPTO_MD4=m
1878CONFIG_CRYPTO_MD5=y
1879CONFIG_CRYPTO_SHA1=m
1880CONFIG_CRYPTO_SHA256=m
1881CONFIG_CRYPTO_SHA512=m
1882CONFIG_CRYPTO_WP512=m
1883CONFIG_CRYPTO_TGR192=m
1884CONFIG_CRYPTO_GF128MUL=m
1885CONFIG_CRYPTO_ECB=m
1886CONFIG_CRYPTO_CBC=m
1887CONFIG_CRYPTO_PCBC=m
1888CONFIG_CRYPTO_LRW=m
1889CONFIG_CRYPTO_XTS=m
1890# CONFIG_CRYPTO_CTR is not set
1891# CONFIG_CRYPTO_GCM is not set
1892# CONFIG_CRYPTO_CCM is not set
1893# CONFIG_CRYPTO_CRYPTD is not set
1894CONFIG_CRYPTO_DES=m
1895CONFIG_CRYPTO_FCRYPT=m
1896CONFIG_CRYPTO_BLOWFISH=m
1897CONFIG_CRYPTO_TWOFISH=m
1898CONFIG_CRYPTO_TWOFISH_COMMON=m
1899CONFIG_CRYPTO_SERPENT=m
1900CONFIG_CRYPTO_AES=m
1901CONFIG_CRYPTO_CAST5=m
1902CONFIG_CRYPTO_CAST6=m
1903CONFIG_CRYPTO_TEA=m
1904CONFIG_CRYPTO_ARC4=m
1905CONFIG_CRYPTO_KHAZAD=m
1906CONFIG_CRYPTO_ANUBIS=m
1907CONFIG_CRYPTO_SEED=m
1908# CONFIG_CRYPTO_SALSA20 is not set
1909CONFIG_CRYPTO_DEFLATE=m
1910CONFIG_CRYPTO_MICHAEL_MIC=m
1911CONFIG_CRYPTO_CRC32C=m
1912CONFIG_CRYPTO_CAMELLIA=m
1913CONFIG_CRYPTO_TEST=m
1914CONFIG_CRYPTO_AUTHENC=m
1915# CONFIG_CRYPTO_LZO is not set
1916CONFIG_CRYPTO_HW=y
1917# CONFIG_CRYPTO_DEV_HIFN_795X is not set
1918
1919#
1920# Library routines
1921#
1922CONFIG_BITREVERSE=y
1923CONFIG_CRC_CCITT=m
1924CONFIG_CRC16=m
1925CONFIG_CRC_ITU_T=m
1926CONFIG_CRC32=y
1927CONFIG_CRC7=m
1928CONFIG_LIBCRC32C=m
1929CONFIG_AUDIT_GENERIC=y
1930CONFIG_ZLIB_INFLATE=m
1931CONFIG_ZLIB_DEFLATE=m
1932CONFIG_TEXTSEARCH=y
1933CONFIG_TEXTSEARCH_KMP=m
1934CONFIG_TEXTSEARCH_BM=m
1935CONFIG_TEXTSEARCH_FSM=m
1936CONFIG_PLIST=y
1937CONFIG_HAS_IOMEM=y
1938CONFIG_HAS_IOPORT=y
1939CONFIG_HAS_DMA=y
diff --git a/arch/mips/configs/ip28_defconfig b/arch/mips/configs/ip28_defconfig
new file mode 100644
index 000000000000..ec188be9a67a
--- /dev/null
+++ b/arch/mips/configs/ip28_defconfig
@@ -0,0 +1,891 @@
1#
2# Automatically generated make config: don't edit
3# Linux kernel version: 2.6.25-rc1
4# Mon Feb 11 15:58:54 2008
5#
6CONFIG_MIPS=y
7
8#
9# Machine selection
10#
11# CONFIG_MACH_ALCHEMY is not set
12# CONFIG_BASLER_EXCITE is not set
13# CONFIG_BCM47XX is not set
14# CONFIG_MIPS_COBALT is not set
15# CONFIG_MACH_DECSTATION is not set
16# CONFIG_MACH_JAZZ is not set
17# CONFIG_LASAT is not set
18# CONFIG_LEMOTE_FULONG is not set
19# CONFIG_MIPS_ATLAS is not set
20# CONFIG_MIPS_MALTA is not set
21# CONFIG_MIPS_SEAD is not set
22# CONFIG_MIPS_SIM is not set
23# CONFIG_MARKEINS is not set
24# CONFIG_MACH_VR41XX is not set
25# CONFIG_PNX8550_JBS is not set
26# CONFIG_PNX8550_STB810 is not set
27# CONFIG_PMC_MSP is not set
28# CONFIG_PMC_YOSEMITE is not set
29# CONFIG_SGI_IP22 is not set
30# CONFIG_SGI_IP27 is not set
31CONFIG_SGI_IP28=y
32# CONFIG_SGI_IP32 is not set
33# CONFIG_SIBYTE_CRHINE is not set
34# CONFIG_SIBYTE_CARMEL is not set
35# CONFIG_SIBYTE_CRHONE is not set
36# CONFIG_SIBYTE_RHONE is not set
37# CONFIG_SIBYTE_SWARM is not set
38# CONFIG_SIBYTE_LITTLESUR is not set
39# CONFIG_SIBYTE_SENTOSA is not set
40# CONFIG_SIBYTE_BIGSUR is not set
41# CONFIG_SNI_RM is not set
42# CONFIG_TOSHIBA_JMR3927 is not set
43# CONFIG_TOSHIBA_RBTX4927 is not set
44# CONFIG_TOSHIBA_RBTX4938 is not set
45# CONFIG_WR_PPMC is not set
46CONFIG_RWSEM_GENERIC_SPINLOCK=y
47# CONFIG_ARCH_HAS_ILOG2_U32 is not set
48# CONFIG_ARCH_HAS_ILOG2_U64 is not set
49CONFIG_ARCH_SUPPORTS_OPROFILE=y
50CONFIG_GENERIC_FIND_NEXT_BIT=y
51CONFIG_GENERIC_HWEIGHT=y
52CONFIG_GENERIC_CALIBRATE_DELAY=y
53CONFIG_GENERIC_CLOCKEVENTS=y
54CONFIG_GENERIC_TIME=y
55CONFIG_GENERIC_CMOS_UPDATE=y
56CONFIG_SCHED_NO_NO_OMIT_FRAME_POINTER=y
57# CONFIG_GENERIC_HARDIRQS_NO__DO_IRQ is not set
58CONFIG_ARC=y
59CONFIG_CEVT_R4K=y
60CONFIG_CSRC_R4K=y
61CONFIG_DMA_NONCOHERENT=y
62CONFIG_DMA_NEED_PCI_MAP_STATE=y
63CONFIG_EARLY_PRINTK=y
64CONFIG_SYS_HAS_EARLY_PRINTK=y
65# CONFIG_HOTPLUG_CPU is not set
66CONFIG_I8259=y
67# CONFIG_NO_IOPORT is not set
68CONFIG_GENERIC_ISA_DMA=y
69CONFIG_GENERIC_ISA_DMA_SUPPORT_BROKEN=y
70CONFIG_CPU_BIG_ENDIAN=y
71# CONFIG_CPU_LITTLE_ENDIAN is not set
72CONFIG_SYS_SUPPORTS_BIG_ENDIAN=y
73CONFIG_IRQ_CPU=y
74CONFIG_SWAP_IO_SPACE=y
75CONFIG_SGI_HAS_DS1286=y
76CONFIG_SGI_HAS_INDYDOG=y
77CONFIG_SGI_HAS_SEEQ=y
78CONFIG_SGI_HAS_WD93=y
79CONFIG_SGI_HAS_ZILOG=y
80CONFIG_SGI_HAS_I8042=y
81CONFIG_DEFAULT_SGI_PARTITION=y
82CONFIG_MIPS_L1_CACHE_SHIFT=7
83CONFIG_ARC_CONSOLE=y
84CONFIG_ARC_PROMLIB=y
85CONFIG_ARC64=y
86CONFIG_BOOT_ELF64=y
87
88#
89# CPU selection
90#
91# CONFIG_CPU_LOONGSON2 is not set
92# CONFIG_CPU_MIPS32_R1 is not set
93# CONFIG_CPU_MIPS32_R2 is not set
94# CONFIG_CPU_MIPS64_R1 is not set
95# CONFIG_CPU_MIPS64_R2 is not set
96# CONFIG_CPU_R3000 is not set
97# CONFIG_CPU_TX39XX is not set
98# CONFIG_CPU_VR41XX is not set
99# CONFIG_CPU_R4300 is not set
100# CONFIG_CPU_R4X00 is not set
101# CONFIG_CPU_TX49XX is not set
102# CONFIG_CPU_R5000 is not set
103# CONFIG_CPU_R5432 is not set
104# CONFIG_CPU_R6000 is not set
105# CONFIG_CPU_NEVADA is not set
106# CONFIG_CPU_R8000 is not set
107CONFIG_CPU_R10000=y
108# CONFIG_CPU_RM7000 is not set
109# CONFIG_CPU_RM9000 is not set
110# CONFIG_CPU_SB1 is not set
111CONFIG_SYS_HAS_CPU_R10000=y
112CONFIG_SYS_SUPPORTS_64BIT_KERNEL=y
113CONFIG_CPU_SUPPORTS_32BIT_KERNEL=y
114CONFIG_CPU_SUPPORTS_64BIT_KERNEL=y
115
116#
117# Kernel type
118#
119# CONFIG_32BIT is not set
120CONFIG_64BIT=y
121CONFIG_PAGE_SIZE_4KB=y
122# CONFIG_PAGE_SIZE_8KB is not set
123# CONFIG_PAGE_SIZE_16KB is not set
124# CONFIG_PAGE_SIZE_64KB is not set
125CONFIG_CPU_HAS_PREFETCH=y
126CONFIG_MIPS_MT_DISABLED=y
127# CONFIG_MIPS_MT_SMP is not set
128# CONFIG_MIPS_MT_SMTC is not set
129CONFIG_CPU_HAS_LLSC=y
130CONFIG_CPU_HAS_SYNC=y
131CONFIG_GENERIC_HARDIRQS=y
132CONFIG_GENERIC_IRQ_PROBE=y
133CONFIG_CPU_SUPPORTS_HIGHMEM=y
134CONFIG_ARCH_FLATMEM_ENABLE=y
135CONFIG_ARCH_POPULATES_NODE_MAP=y
136CONFIG_SELECT_MEMORY_MODEL=y
137CONFIG_FLATMEM_MANUAL=y
138# CONFIG_DISCONTIGMEM_MANUAL is not set
139# CONFIG_SPARSEMEM_MANUAL is not set
140CONFIG_FLATMEM=y
141CONFIG_FLAT_NODE_MEM_MAP=y
142# CONFIG_SPARSEMEM_STATIC is not set
143# CONFIG_SPARSEMEM_VMEMMAP_ENABLE is not set
144CONFIG_SPLIT_PTLOCK_CPUS=4
145CONFIG_RESOURCES_64BIT=y
146CONFIG_ZONE_DMA_FLAG=0
147CONFIG_VIRT_TO_BUS=y
148# CONFIG_TICK_ONESHOT is not set
149# CONFIG_NO_HZ is not set
150# CONFIG_HIGH_RES_TIMERS is not set
151CONFIG_GENERIC_CLOCKEVENTS_BUILD=y
152# CONFIG_HZ_48 is not set
153# CONFIG_HZ_100 is not set
154# CONFIG_HZ_128 is not set
155CONFIG_HZ_250=y
156# CONFIG_HZ_256 is not set
157# CONFIG_HZ_1000 is not set
158# CONFIG_HZ_1024 is not set
159CONFIG_SYS_SUPPORTS_ARBIT_HZ=y
160CONFIG_HZ=250
161# CONFIG_PREEMPT_NONE is not set
162CONFIG_PREEMPT_VOLUNTARY=y
163# CONFIG_PREEMPT is not set
164# CONFIG_RCU_TRACE is not set
165# CONFIG_MIPS_INSANE_LARGE is not set
166# CONFIG_KEXEC is not set
167CONFIG_SECCOMP=y
168CONFIG_LOCKDEP_SUPPORT=y
169CONFIG_STACKTRACE_SUPPORT=y
170CONFIG_DEFCONFIG_LIST="/lib/modules/$UNAME_RELEASE/.config"
171
172#
173# General setup
174#
175CONFIG_EXPERIMENTAL=y
176CONFIG_BROKEN_ON_SMP=y
177CONFIG_INIT_ENV_ARG_LIMIT=32
178CONFIG_LOCALVERSION=""
179CONFIG_LOCALVERSION_AUTO=y
180CONFIG_SWAP=y
181CONFIG_SYSVIPC=y
182CONFIG_SYSVIPC_SYSCTL=y
183# CONFIG_POSIX_MQUEUE is not set
184# CONFIG_BSD_PROCESS_ACCT is not set
185# CONFIG_TASKSTATS is not set
186# CONFIG_AUDIT is not set
187CONFIG_IKCONFIG=y
188CONFIG_IKCONFIG_PROC=y
189CONFIG_LOG_BUF_SHIFT=14
190# CONFIG_CGROUPS is not set
191CONFIG_FAIR_GROUP_SCHED=y
192CONFIG_FAIR_USER_SCHED=y
193# CONFIG_FAIR_CGROUP_SCHED is not set
194CONFIG_SYSFS_DEPRECATED=y
195CONFIG_RELAY=y
196# CONFIG_NAMESPACES is not set
197# CONFIG_BLK_DEV_INITRD is not set
198# CONFIG_CC_OPTIMIZE_FOR_SIZE is not set
199CONFIG_SYSCTL=y
200CONFIG_EMBEDDED=y
201CONFIG_SYSCTL_SYSCALL=y
202CONFIG_KALLSYMS=y
203# CONFIG_KALLSYMS_EXTRA_PASS is not set
204# CONFIG_HOTPLUG is not set
205CONFIG_PRINTK=y
206CONFIG_BUG=y
207CONFIG_ELF_CORE=y
208CONFIG_COMPAT_BRK=y
209CONFIG_BASE_FULL=y
210CONFIG_FUTEX=y
211CONFIG_ANON_INODES=y
212CONFIG_EPOLL=y
213CONFIG_SIGNALFD=y
214CONFIG_TIMERFD=y
215CONFIG_EVENTFD=y
216CONFIG_SHMEM=y
217CONFIG_VM_EVENT_COUNTERS=y
218CONFIG_SLAB=y
219# CONFIG_SLUB is not set
220# CONFIG_SLOB is not set
221# CONFIG_PROFILING is not set
222# CONFIG_MARKERS is not set
223CONFIG_HAVE_OPROFILE=y
224# CONFIG_HAVE_KPROBES is not set
225# CONFIG_PROC_PAGE_MONITOR is not set
226CONFIG_SLABINFO=y
227CONFIG_RT_MUTEXES=y
228# CONFIG_TINY_SHMEM is not set
229CONFIG_BASE_SMALL=0
230CONFIG_MODULES=y
231CONFIG_MODULE_UNLOAD=y
232# CONFIG_MODULE_FORCE_UNLOAD is not set
233CONFIG_MODVERSIONS=y
234CONFIG_MODULE_SRCVERSION_ALL=y
235CONFIG_KMOD=y
236CONFIG_BLOCK=y
237# CONFIG_BLK_DEV_IO_TRACE is not set
238# CONFIG_BLK_DEV_BSG is not set
239CONFIG_BLOCK_COMPAT=y
240
241#
242# IO Schedulers
243#
244CONFIG_IOSCHED_NOOP=y
245CONFIG_IOSCHED_AS=y
246CONFIG_IOSCHED_DEADLINE=y
247CONFIG_IOSCHED_CFQ=y
248CONFIG_DEFAULT_AS=y
249# CONFIG_DEFAULT_DEADLINE is not set
250# CONFIG_DEFAULT_CFQ is not set
251# CONFIG_DEFAULT_NOOP is not set
252CONFIG_DEFAULT_IOSCHED="anticipatory"
253CONFIG_CLASSIC_RCU=y
254# CONFIG_PREEMPT_RCU is not set
255
256#
257# Bus options (PCI, PCMCIA, EISA, ISA, TC)
258#
259CONFIG_HW_HAS_EISA=y
260# CONFIG_ARCH_SUPPORTS_MSI is not set
261CONFIG_ISA=y
262CONFIG_EISA=y
263CONFIG_EISA_NAMES=y
264CONFIG_MMU=y
265CONFIG_I8253=y
266
267#
268# Executable file formats
269#
270CONFIG_BINFMT_ELF=y
271# CONFIG_BINFMT_MISC is not set
272CONFIG_MIPS32_COMPAT=y
273CONFIG_COMPAT=y
274CONFIG_SYSVIPC_COMPAT=y
275CONFIG_MIPS32_O32=y
276CONFIG_MIPS32_N32=y
277CONFIG_BINFMT_ELF32=y
278
279#
280# Power management options
281#
282CONFIG_ARCH_SUSPEND_POSSIBLE=y
283CONFIG_PM=y
284# CONFIG_PM_LEGACY is not set
285# CONFIG_PM_DEBUG is not set
286# CONFIG_SUSPEND is not set
287
288#
289# Networking
290#
291CONFIG_NET=y
292
293#
294# Networking options
295#
296CONFIG_PACKET=y
297CONFIG_PACKET_MMAP=y
298CONFIG_UNIX=y
299CONFIG_XFRM=y
300# CONFIG_XFRM_USER is not set
301# CONFIG_XFRM_SUB_POLICY is not set
302CONFIG_XFRM_MIGRATE=y
303# CONFIG_XFRM_STATISTICS is not set
304CONFIG_NET_KEY=y
305CONFIG_NET_KEY_MIGRATE=y
306CONFIG_INET=y
307CONFIG_IP_MULTICAST=y
308# CONFIG_IP_ADVANCED_ROUTER is not set
309CONFIG_IP_FIB_HASH=y
310CONFIG_IP_PNP=y
311CONFIG_IP_PNP_DHCP=y
312CONFIG_IP_PNP_BOOTP=y
313# CONFIG_IP_PNP_RARP is not set
314# CONFIG_NET_IPIP is not set
315# CONFIG_NET_IPGRE is not set
316# CONFIG_IP_MROUTE is not set
317# CONFIG_ARPD is not set
318# CONFIG_SYN_COOKIES is not set
319# CONFIG_INET_AH is not set
320# CONFIG_INET_ESP is not set
321# CONFIG_INET_IPCOMP is not set
322# CONFIG_INET_XFRM_TUNNEL is not set
323# CONFIG_INET_TUNNEL is not set
324# CONFIG_INET_XFRM_MODE_TRANSPORT is not set
325# CONFIG_INET_XFRM_MODE_TUNNEL is not set
326# CONFIG_INET_XFRM_MODE_BEET is not set
327# CONFIG_INET_LRO is not set
328CONFIG_INET_DIAG=y
329CONFIG_INET_TCP_DIAG=y
330# CONFIG_TCP_CONG_ADVANCED is not set
331CONFIG_TCP_CONG_CUBIC=y
332CONFIG_DEFAULT_TCP_CONG="cubic"
333CONFIG_TCP_MD5SIG=y
334# CONFIG_IPV6 is not set
335# CONFIG_INET6_XFRM_TUNNEL is not set
336# CONFIG_INET6_TUNNEL is not set
337# CONFIG_NETWORK_SECMARK is not set
338# CONFIG_NETFILTER is not set
339# CONFIG_IP_DCCP is not set
340# CONFIG_IP_SCTP is not set
341# CONFIG_TIPC is not set
342# CONFIG_ATM is not set
343# CONFIG_BRIDGE is not set
344# CONFIG_VLAN_8021Q is not set
345# CONFIG_DECNET is not set
346# CONFIG_LLC2 is not set
347# CONFIG_IPX is not set
348# CONFIG_ATALK is not set
349# CONFIG_X25 is not set
350# CONFIG_LAPB is not set
351# CONFIG_ECONET is not set
352# CONFIG_WAN_ROUTER is not set
353# CONFIG_NET_SCHED is not set
354
355#
356# Network testing
357#
358# CONFIG_NET_PKTGEN is not set
359# CONFIG_HAMRADIO is not set
360# CONFIG_CAN is not set
361# CONFIG_IRDA is not set
362# CONFIG_BT is not set
363# CONFIG_AF_RXRPC is not set
364
365#
366# Wireless
367#
368# CONFIG_CFG80211 is not set
369# CONFIG_WIRELESS_EXT is not set
370# CONFIG_MAC80211 is not set
371# CONFIG_IEEE80211 is not set
372# CONFIG_RFKILL is not set
373# CONFIG_NET_9P is not set
374
375#
376# Device Drivers
377#
378
379#
380# Generic Driver Options
381#
382CONFIG_STANDALONE=y
383CONFIG_PREVENT_FIRMWARE_BUILD=y
384# CONFIG_SYS_HYPERVISOR is not set
385# CONFIG_CONNECTOR is not set
386# CONFIG_MTD is not set
387# CONFIG_PARPORT is not set
388# CONFIG_PNP is not set
389CONFIG_BLK_DEV=y
390# CONFIG_BLK_DEV_COW_COMMON is not set
391# CONFIG_BLK_DEV_LOOP is not set
392# CONFIG_BLK_DEV_NBD is not set
393# CONFIG_BLK_DEV_RAM is not set
394# CONFIG_CDROM_PKTCDVD is not set
395# CONFIG_ATA_OVER_ETH is not set
396# CONFIG_MISC_DEVICES is not set
397CONFIG_HAVE_IDE=y
398# CONFIG_IDE is not set
399
400#
401# SCSI device support
402#
403# CONFIG_RAID_ATTRS is not set
404CONFIG_SCSI=y
405CONFIG_SCSI_DMA=y
406# CONFIG_SCSI_TGT is not set
407# CONFIG_SCSI_NETLINK is not set
408CONFIG_SCSI_PROC_FS=y
409
410#
411# SCSI support type (disk, tape, CD-ROM)
412#
413CONFIG_BLK_DEV_SD=y
414# CONFIG_CHR_DEV_ST is not set
415# CONFIG_CHR_DEV_OSST is not set
416CONFIG_BLK_DEV_SR=y
417# CONFIG_BLK_DEV_SR_VENDOR is not set
418# CONFIG_CHR_DEV_SG is not set
419# CONFIG_CHR_DEV_SCH is not set
420
421#
422# Some SCSI devices (e.g. CD jukebox) support multiple LUNs
423#
424# CONFIG_SCSI_MULTI_LUN is not set
425CONFIG_SCSI_CONSTANTS=y
426# CONFIG_SCSI_LOGGING is not set
427# CONFIG_SCSI_SCAN_ASYNC is not set
428CONFIG_SCSI_WAIT_SCAN=m
429
430#
431# SCSI Transports
432#
433# CONFIG_SCSI_SPI_ATTRS is not set
434# CONFIG_SCSI_FC_ATTRS is not set
435# CONFIG_SCSI_ISCSI_ATTRS is not set
436# CONFIG_SCSI_SAS_LIBSAS is not set
437# CONFIG_SCSI_SRP_ATTRS is not set
438CONFIG_SCSI_LOWLEVEL=y
439# CONFIG_ISCSI_TCP is not set
440CONFIG_SGIWD93_SCSI=y
441# CONFIG_SCSI_AHA1740 is not set
442# CONFIG_SCSI_AIC7XXX is not set
443# CONFIG_SCSI_AIC7XXX_OLD is not set
444# CONFIG_SCSI_ADVANSYS is not set
445# CONFIG_SCSI_IN2000 is not set
446# CONFIG_SCSI_DTC3280 is not set
447# CONFIG_SCSI_FUTURE_DOMAIN is not set
448# CONFIG_SCSI_GENERIC_NCR5380 is not set
449# CONFIG_SCSI_GENERIC_NCR5380_MMIO is not set
450# CONFIG_SCSI_NCR53C406A is not set
451# CONFIG_SCSI_PAS16 is not set
452# CONFIG_SCSI_QLOGIC_FAS is not set
453# CONFIG_SCSI_SIM710 is not set
454# CONFIG_SCSI_SYM53C416 is not set
455# CONFIG_SCSI_T128 is not set
456# CONFIG_SCSI_DEBUG is not set
457# CONFIG_ATA is not set
458# CONFIG_MD is not set
459CONFIG_NETDEVICES=y
460# CONFIG_NETDEVICES_MULTIQUEUE is not set
461CONFIG_DUMMY=m
462# CONFIG_BONDING is not set
463# CONFIG_MACVLAN is not set
464# CONFIG_EQUALIZER is not set
465# CONFIG_TUN is not set
466# CONFIG_VETH is not set
467# CONFIG_ARCNET is not set
468# CONFIG_PHYLIB is not set
469CONFIG_NET_ETHERNET=y
470# CONFIG_MII is not set
471# CONFIG_AX88796 is not set
472# CONFIG_NET_VENDOR_3COM is not set
473# CONFIG_NET_VENDOR_SMC is not set
474# CONFIG_DM9000 is not set
475# CONFIG_NET_VENDOR_RACAL is not set
476# CONFIG_NET_TULIP is not set
477# CONFIG_AT1700 is not set
478# CONFIG_DEPCA is not set
479# CONFIG_HP100 is not set
480# CONFIG_NET_ISA is not set
481# CONFIG_IBM_NEW_EMAC_ZMII is not set
482# CONFIG_IBM_NEW_EMAC_RGMII is not set
483# CONFIG_IBM_NEW_EMAC_TAH is not set
484# CONFIG_IBM_NEW_EMAC_EMAC4 is not set
485# CONFIG_NET_PCI is not set
486# CONFIG_B44 is not set
487CONFIG_SGISEEQ=y
488# CONFIG_NETDEV_1000 is not set
489# CONFIG_NETDEV_10000 is not set
490# CONFIG_TR is not set
491
492#
493# Wireless LAN
494#
495# CONFIG_WLAN_PRE80211 is not set
496# CONFIG_WLAN_80211 is not set
497# CONFIG_WAN is not set
498# CONFIG_FDDI is not set
499# CONFIG_PPP is not set
500# CONFIG_SLIP is not set
501# CONFIG_NETCONSOLE is not set
502# CONFIG_NETPOLL is not set
503# CONFIG_NET_POLL_CONTROLLER is not set
504# CONFIG_ISDN is not set
505# CONFIG_PHONE is not set
506
507#
508# Input device support
509#
510CONFIG_INPUT=y
511# CONFIG_INPUT_FF_MEMLESS is not set
512# CONFIG_INPUT_POLLDEV is not set
513
514#
515# Userland interfaces
516#
517CONFIG_INPUT_MOUSEDEV=y
518CONFIG_INPUT_MOUSEDEV_PSAUX=y
519CONFIG_INPUT_MOUSEDEV_SCREEN_X=1024
520CONFIG_INPUT_MOUSEDEV_SCREEN_Y=768
521# CONFIG_INPUT_JOYDEV is not set
522# CONFIG_INPUT_EVDEV is not set
523# CONFIG_INPUT_EVBUG is not set
524
525#
526# Input Device Drivers
527#
528CONFIG_INPUT_KEYBOARD=y
529CONFIG_KEYBOARD_ATKBD=y
530# CONFIG_KEYBOARD_SUNKBD is not set
531# CONFIG_KEYBOARD_LKKBD is not set
532# CONFIG_KEYBOARD_XTKBD is not set
533# CONFIG_KEYBOARD_NEWTON is not set
534# CONFIG_KEYBOARD_STOWAWAY is not set
535CONFIG_INPUT_MOUSE=y
536CONFIG_MOUSE_PS2=y
537# CONFIG_MOUSE_PS2_ALPS is not set
538CONFIG_MOUSE_PS2_LOGIPS2PP=y
539# CONFIG_MOUSE_PS2_SYNAPTICS is not set
540# CONFIG_MOUSE_PS2_LIFEBOOK is not set
541CONFIG_MOUSE_PS2_TRACKPOINT=y
542# CONFIG_MOUSE_PS2_TOUCHKIT is not set
543# CONFIG_MOUSE_SERIAL is not set
544# CONFIG_MOUSE_INPORT is not set
545# CONFIG_MOUSE_LOGIBM is not set
546# CONFIG_MOUSE_PC110PAD is not set
547# CONFIG_MOUSE_VSXXXAA is not set
548# CONFIG_INPUT_JOYSTICK is not set
549# CONFIG_INPUT_TABLET is not set
550# CONFIG_INPUT_TOUCHSCREEN is not set
551# CONFIG_INPUT_MISC is not set
552
553#
554# Hardware I/O ports
555#
556CONFIG_SERIO=y
557CONFIG_SERIO_I8042=y
558CONFIG_SERIO_SERPORT=y
559CONFIG_SERIO_LIBPS2=y
560# CONFIG_SERIO_RAW is not set
561# CONFIG_GAMEPORT is not set
562
563#
564# Character devices
565#
566CONFIG_VT=y
567CONFIG_VT_CONSOLE=y
568CONFIG_HW_CONSOLE=y
569CONFIG_VT_HW_CONSOLE_BINDING=y
570# CONFIG_SERIAL_NONSTANDARD is not set
571
572#
573# Serial drivers
574#
575# CONFIG_SERIAL_8250 is not set
576
577#
578# Non-8250 serial port support
579#
580CONFIG_SERIAL_IP22_ZILOG=y
581CONFIG_SERIAL_IP22_ZILOG_CONSOLE=y
582CONFIG_SERIAL_CORE=y
583CONFIG_SERIAL_CORE_CONSOLE=y
584CONFIG_UNIX98_PTYS=y
585CONFIG_LEGACY_PTYS=y
586CONFIG_LEGACY_PTY_COUNT=256
587# CONFIG_IPMI_HANDLER is not set
588# CONFIG_HW_RANDOM is not set
589# CONFIG_RTC is not set
590CONFIG_SGI_DS1286=y
591# CONFIG_DTLK is not set
592# CONFIG_R3964 is not set
593# CONFIG_RAW_DRIVER is not set
594# CONFIG_TCG_TPM is not set
595CONFIG_DEVPORT=y
596# CONFIG_I2C is not set
597
598#
599# SPI support
600#
601# CONFIG_SPI is not set
602# CONFIG_SPI_MASTER is not set
603# CONFIG_W1 is not set
604# CONFIG_POWER_SUPPLY is not set
605# CONFIG_HWMON is not set
606# CONFIG_THERMAL is not set
607CONFIG_WATCHDOG=y
608# CONFIG_WATCHDOG_NOWAYOUT is not set
609
610#
611# Watchdog Device Drivers
612#
613# CONFIG_SOFT_WATCHDOG is not set
614CONFIG_INDYDOG=y
615
616#
617# ISA-based Watchdog Cards
618#
619# CONFIG_PCWATCHDOG is not set
620# CONFIG_MIXCOMWD is not set
621# CONFIG_WDT is not set
622
623#
624# Sonics Silicon Backplane
625#
626CONFIG_SSB_POSSIBLE=y
627# CONFIG_SSB is not set
628
629#
630# Multifunction device drivers
631#
632# CONFIG_MFD_SM501 is not set
633
634#
635# Multimedia devices
636#
637# CONFIG_VIDEO_DEV is not set
638# CONFIG_DVB_CORE is not set
639# CONFIG_DAB is not set
640
641#
642# Graphics support
643#
644# CONFIG_VGASTATE is not set
645# CONFIG_VIDEO_OUTPUT_CONTROL is not set
646# CONFIG_FB is not set
647# CONFIG_BACKLIGHT_LCD_SUPPORT is not set
648
649#
650# Display device support
651#
652# CONFIG_DISPLAY_SUPPORT is not set
653
654#
655# Console display driver support
656#
657# CONFIG_VGA_CONSOLE is not set
658# CONFIG_MDA_CONSOLE is not set
659CONFIG_DUMMY_CONSOLE=y
660
661#
662# Sound
663#
664# CONFIG_SOUND is not set
665CONFIG_HID_SUPPORT=y
666CONFIG_HID=y
667# CONFIG_HID_DEBUG is not set
668# CONFIG_HIDRAW is not set
669CONFIG_USB_SUPPORT=y
670# CONFIG_USB_ARCH_HAS_HCD is not set
671# CONFIG_USB_ARCH_HAS_OHCI is not set
672# CONFIG_USB_ARCH_HAS_EHCI is not set
673
674#
675# NOTE: USB_STORAGE enables SCSI, and 'SCSI disk support'
676#
677# CONFIG_USB_GADGET is not set
678# CONFIG_MMC is not set
679# CONFIG_MEMSTICK is not set
680# CONFIG_NEW_LEDS is not set
681CONFIG_RTC_LIB=y
682# CONFIG_RTC_CLASS is not set
683
684#
685# Userspace I/O
686#
687# CONFIG_UIO is not set
688
689#
690# File systems
691#
692CONFIG_EXT2_FS=y
693# CONFIG_EXT2_FS_XATTR is not set
694# CONFIG_EXT2_FS_XIP is not set
695CONFIG_EXT3_FS=y
696CONFIG_EXT3_FS_XATTR=y
697CONFIG_EXT3_FS_POSIX_ACL=y
698CONFIG_EXT3_FS_SECURITY=y
699# CONFIG_EXT4DEV_FS is not set
700CONFIG_JBD=y
701CONFIG_FS_MBCACHE=y
702# CONFIG_REISERFS_FS is not set
703# CONFIG_JFS_FS is not set
704CONFIG_FS_POSIX_ACL=y
705# CONFIG_XFS_FS is not set
706# CONFIG_GFS2_FS is not set
707# CONFIG_OCFS2_FS is not set
708CONFIG_DNOTIFY=y
709CONFIG_INOTIFY=y
710CONFIG_INOTIFY_USER=y
711CONFIG_QUOTA=y
712# CONFIG_QUOTA_NETLINK_INTERFACE is not set
713CONFIG_PRINT_QUOTA_WARNING=y
714# CONFIG_QFMT_V1 is not set
715# CONFIG_QFMT_V2 is not set
716CONFIG_QUOTACTL=y
717# CONFIG_AUTOFS_FS is not set
718# CONFIG_AUTOFS4_FS is not set
719# CONFIG_FUSE_FS is not set
720CONFIG_GENERIC_ACL=y
721
722#
723# CD-ROM/DVD Filesystems
724#
725# CONFIG_ISO9660_FS is not set
726# CONFIG_UDF_FS is not set
727
728#
729# DOS/FAT/NT Filesystems
730#
731# CONFIG_MSDOS_FS is not set
732# CONFIG_VFAT_FS is not set
733# CONFIG_NTFS_FS is not set
734
735#
736# Pseudo filesystems
737#
738CONFIG_PROC_FS=y
739CONFIG_PROC_KCORE=y
740CONFIG_PROC_SYSCTL=y
741CONFIG_SYSFS=y
742CONFIG_TMPFS=y
743CONFIG_TMPFS_POSIX_ACL=y
744# CONFIG_HUGETLB_PAGE is not set
745# CONFIG_CONFIGFS_FS is not set
746
747#
748# Miscellaneous filesystems
749#
750# CONFIG_ADFS_FS is not set
751# CONFIG_AFFS_FS is not set
752# CONFIG_HFS_FS is not set
753# CONFIG_HFSPLUS_FS is not set
754# CONFIG_BEFS_FS is not set
755# CONFIG_BFS_FS is not set
756# CONFIG_EFS_FS is not set
757# CONFIG_CRAMFS is not set
758# CONFIG_VXFS_FS is not set
759# CONFIG_MINIX_FS is not set
760# CONFIG_HPFS_FS is not set
761# CONFIG_QNX4FS_FS is not set
762# CONFIG_ROMFS_FS is not set
763# CONFIG_SYSV_FS is not set
764# CONFIG_UFS_FS is not set
765CONFIG_NETWORK_FILESYSTEMS=y
766CONFIG_NFS_FS=y
767CONFIG_NFS_V3=y
768CONFIG_NFS_V3_ACL=y
769# CONFIG_NFS_V4 is not set
770# CONFIG_NFS_DIRECTIO is not set
771# CONFIG_NFSD is not set
772CONFIG_ROOT_NFS=y
773CONFIG_LOCKD=y
774CONFIG_LOCKD_V4=y
775CONFIG_NFS_ACL_SUPPORT=y
776CONFIG_NFS_COMMON=y
777CONFIG_SUNRPC=y
778# CONFIG_SUNRPC_BIND34 is not set
779# CONFIG_RPCSEC_GSS_KRB5 is not set
780# CONFIG_RPCSEC_GSS_SPKM3 is not set
781# CONFIG_SMB_FS is not set
782# CONFIG_CIFS is not set
783# CONFIG_NCP_FS is not set
784# CONFIG_CODA_FS is not set
785# CONFIG_AFS_FS is not set
786
787#
788# Partition Types
789#
790CONFIG_PARTITION_ADVANCED=y
791# CONFIG_ACORN_PARTITION is not set
792# CONFIG_OSF_PARTITION is not set
793# CONFIG_AMIGA_PARTITION is not set
794# CONFIG_ATARI_PARTITION is not set
795# CONFIG_MAC_PARTITION is not set
796CONFIG_MSDOS_PARTITION=y
797# CONFIG_BSD_DISKLABEL is not set
798# CONFIG_MINIX_SUBPARTITION is not set
799# CONFIG_SOLARIS_X86_PARTITION is not set
800# CONFIG_UNIXWARE_DISKLABEL is not set
801# CONFIG_LDM_PARTITION is not set
802CONFIG_SGI_PARTITION=y
803# CONFIG_ULTRIX_PARTITION is not set
804# CONFIG_SUN_PARTITION is not set
805# CONFIG_KARMA_PARTITION is not set
806# CONFIG_EFI_PARTITION is not set
807# CONFIG_SYSV68_PARTITION is not set
808# CONFIG_NLS is not set
809# CONFIG_DLM is not set
810
811#
812# Kernel hacking
813#
814CONFIG_TRACE_IRQFLAGS_SUPPORT=y
815# CONFIG_PRINTK_TIME is not set
816CONFIG_ENABLE_WARN_DEPRECATED=y
817CONFIG_ENABLE_MUST_CHECK=y
818CONFIG_MAGIC_SYSRQ=y
819# CONFIG_UNUSED_SYMBOLS is not set
820# CONFIG_DEBUG_FS is not set
821# CONFIG_HEADERS_CHECK is not set
822# CONFIG_DEBUG_KERNEL is not set
823# CONFIG_SAMPLES is not set
824CONFIG_CMDLINE=""
825
826#
827# Security options
828#
829# CONFIG_KEYS is not set
830# CONFIG_SECURITY is not set
831# CONFIG_SECURITY_FILE_CAPABILITIES is not set
832CONFIG_CRYPTO=y
833CONFIG_CRYPTO_ALGAPI=y
834# CONFIG_CRYPTO_SEQIV is not set
835CONFIG_CRYPTO_MANAGER=y
836# CONFIG_CRYPTO_HMAC is not set
837# CONFIG_CRYPTO_XCBC is not set
838# CONFIG_CRYPTO_NULL is not set
839# CONFIG_CRYPTO_MD4 is not set
840CONFIG_CRYPTO_MD5=y
841# CONFIG_CRYPTO_SHA1 is not set
842# CONFIG_CRYPTO_SHA256 is not set
843# CONFIG_CRYPTO_SHA512 is not set
844# CONFIG_CRYPTO_WP512 is not set
845# CONFIG_CRYPTO_TGR192 is not set
846# CONFIG_CRYPTO_GF128MUL is not set
847# CONFIG_CRYPTO_ECB is not set
848# CONFIG_CRYPTO_CBC is not set
849# CONFIG_CRYPTO_PCBC is not set
850# CONFIG_CRYPTO_LRW is not set
851# CONFIG_CRYPTO_XTS is not set
852# CONFIG_CRYPTO_CTR is not set
853# CONFIG_CRYPTO_GCM is not set
854# CONFIG_CRYPTO_CCM is not set
855# CONFIG_CRYPTO_CRYPTD is not set
856# CONFIG_CRYPTO_DES is not set
857# CONFIG_CRYPTO_FCRYPT is not set
858# CONFIG_CRYPTO_BLOWFISH is not set
859# CONFIG_CRYPTO_TWOFISH is not set
860# CONFIG_CRYPTO_SERPENT is not set
861# CONFIG_CRYPTO_AES is not set
862# CONFIG_CRYPTO_CAST5 is not set
863# CONFIG_CRYPTO_CAST6 is not set
864# CONFIG_CRYPTO_TEA is not set
865# CONFIG_CRYPTO_ARC4 is not set
866# CONFIG_CRYPTO_KHAZAD is not set
867# CONFIG_CRYPTO_ANUBIS is not set
868# CONFIG_CRYPTO_SEED is not set
869# CONFIG_CRYPTO_SALSA20 is not set
870# CONFIG_CRYPTO_DEFLATE is not set
871# CONFIG_CRYPTO_MICHAEL_MIC is not set
872# CONFIG_CRYPTO_CRC32C is not set
873# CONFIG_CRYPTO_CAMELLIA is not set
874# CONFIG_CRYPTO_TEST is not set
875# CONFIG_CRYPTO_AUTHENC is not set
876# CONFIG_CRYPTO_LZO is not set
877# CONFIG_CRYPTO_HW is not set
878
879#
880# Library routines
881#
882# CONFIG_CRC_CCITT is not set
883# CONFIG_CRC16 is not set
884# CONFIG_CRC_ITU_T is not set
885# CONFIG_CRC32 is not set
886# CONFIG_CRC7 is not set
887# CONFIG_LIBCRC32C is not set
888CONFIG_PLIST=y
889CONFIG_HAS_IOMEM=y
890CONFIG_HAS_IOPORT=y
891CONFIG_HAS_DMA=y
diff --git a/arch/mips/configs/qemu_defconfig b/arch/mips/configs/qemu_defconfig
deleted file mode 100644
index 72ca147f9422..000000000000
--- a/arch/mips/configs/qemu_defconfig
+++ /dev/null
@@ -1,800 +0,0 @@
1#
2# Automatically generated make config: don't edit
3# Linux kernel version: 2.6.20
4# Tue Feb 20 21:47:39 2007
5#
6CONFIG_MIPS=y
7
8#
9# Machine selection
10#
11CONFIG_ZONE_DMA=y
12# CONFIG_MIPS_MTX1 is not set
13# CONFIG_MIPS_BOSPORUS is not set
14# CONFIG_MIPS_PB1000 is not set
15# CONFIG_MIPS_PB1100 is not set
16# CONFIG_MIPS_PB1500 is not set
17# CONFIG_MIPS_PB1550 is not set
18# CONFIG_MIPS_PB1200 is not set
19# CONFIG_MIPS_DB1000 is not set
20# CONFIG_MIPS_DB1100 is not set
21# CONFIG_MIPS_DB1500 is not set
22# CONFIG_MIPS_DB1550 is not set
23# CONFIG_MIPS_DB1200 is not set
24# CONFIG_MIPS_MIRAGE is not set
25# CONFIG_BASLER_EXCITE is not set
26# CONFIG_MIPS_COBALT is not set
27# CONFIG_MACH_DECSTATION is not set
28# CONFIG_MACH_JAZZ is not set
29# CONFIG_MIPS_ATLAS is not set
30# CONFIG_MIPS_MALTA is not set
31# CONFIG_MIPS_SEAD is not set
32# CONFIG_WR_PPMC is not set
33# CONFIG_MIPS_SIM is not set
34# CONFIG_MOMENCO_JAGUAR_ATX is not set
35# CONFIG_MIPS_XXS1500 is not set
36# CONFIG_PNX8550_JBS is not set
37# CONFIG_PNX8550_STB810 is not set
38# CONFIG_MACH_VR41XX is not set
39# CONFIG_PMC_YOSEMITE is not set
40# CONFIG_MARKEINS is not set
41# CONFIG_SGI_IP22 is not set
42# CONFIG_SGI_IP27 is not set
43# CONFIG_SGI_IP32 is not set
44# CONFIG_SIBYTE_BIGSUR is not set
45# CONFIG_SIBYTE_SWARM is not set
46# CONFIG_SIBYTE_SENTOSA is not set
47# CONFIG_SIBYTE_RHONE is not set
48# CONFIG_SIBYTE_CARMEL is not set
49# CONFIG_SIBYTE_LITTLESUR is not set
50# CONFIG_SIBYTE_CRHINE is not set
51# CONFIG_SIBYTE_CRHONE is not set
52# CONFIG_SNI_RM is not set
53# CONFIG_TOSHIBA_JMR3927 is not set
54# CONFIG_TOSHIBA_RBTX4927 is not set
55# CONFIG_TOSHIBA_RBTX4938 is not set
56CONFIG_RWSEM_GENERIC_SPINLOCK=y
57# CONFIG_ARCH_HAS_ILOG2_U32 is not set
58# CONFIG_ARCH_HAS_ILOG2_U64 is not set
59CONFIG_GENERIC_FIND_NEXT_BIT=y
60CONFIG_GENERIC_HWEIGHT=y
61CONFIG_GENERIC_CALIBRATE_DELAY=y
62CONFIG_GENERIC_TIME=y
63CONFIG_SCHED_NO_NO_OMIT_FRAME_POINTER=y
64CONFIG_GENERIC_HARDIRQS_NO__DO_IRQ=y
65CONFIG_DMA_COHERENT=y
66CONFIG_GENERIC_ISA_DMA=y
67CONFIG_I8259=y
68CONFIG_CPU_BIG_ENDIAN=y
69# CONFIG_CPU_LITTLE_ENDIAN is not set
70CONFIG_SYS_SUPPORTS_BIG_ENDIAN=y
71CONFIG_SYS_SUPPORTS_LITTLE_ENDIAN=y
72CONFIG_SWAP_IO_SPACE=y
73CONFIG_MIPS_L1_CACHE_SHIFT=5
74CONFIG_HAVE_STD_PC_SERIAL_PORT=y
75
76#
77# CPU selection
78#
79CONFIG_CPU_MIPS32_R1=y
80# CONFIG_CPU_MIPS32_R2 is not set
81# CONFIG_CPU_MIPS64_R1 is not set
82# CONFIG_CPU_MIPS64_R2 is not set
83# CONFIG_CPU_R3000 is not set
84# CONFIG_CPU_TX39XX is not set
85# CONFIG_CPU_VR41XX is not set
86# CONFIG_CPU_R4300 is not set
87# CONFIG_CPU_R4X00 is not set
88# CONFIG_CPU_TX49XX is not set
89# CONFIG_CPU_R5000 is not set
90# CONFIG_CPU_R5432 is not set
91# CONFIG_CPU_R6000 is not set
92# CONFIG_CPU_NEVADA is not set
93# CONFIG_CPU_R8000 is not set
94# CONFIG_CPU_R10000 is not set
95# CONFIG_CPU_RM7000 is not set
96# CONFIG_CPU_RM9000 is not set
97# CONFIG_CPU_SB1 is not set
98CONFIG_SYS_HAS_CPU_MIPS32_R1=y
99CONFIG_CPU_MIPS32=y
100CONFIG_CPU_MIPSR1=y
101CONFIG_SYS_SUPPORTS_32BIT_KERNEL=y
102CONFIG_CPU_SUPPORTS_32BIT_KERNEL=y
103
104#
105# Kernel type
106#
107CONFIG_32BIT=y
108# CONFIG_64BIT is not set
109CONFIG_PAGE_SIZE_4KB=y
110# CONFIG_PAGE_SIZE_8KB is not set
111# CONFIG_PAGE_SIZE_16KB is not set
112# CONFIG_PAGE_SIZE_64KB is not set
113CONFIG_CPU_HAS_PREFETCH=y
114CONFIG_MIPS_MT_DISABLED=y
115# CONFIG_MIPS_MT_SMP is not set
116# CONFIG_MIPS_MT_SMTC is not set
117# CONFIG_MIPS_VPE_LOADER is not set
118# CONFIG_64BIT_PHYS_ADDR is not set
119CONFIG_CPU_HAS_LLSC=y
120CONFIG_CPU_HAS_SYNC=y
121CONFIG_GENERIC_HARDIRQS=y
122CONFIG_GENERIC_IRQ_PROBE=y
123CONFIG_CPU_SUPPORTS_HIGHMEM=y
124CONFIG_ARCH_FLATMEM_ENABLE=y
125CONFIG_ARCH_SPARSEMEM_ENABLE=y
126CONFIG_FLATMEM=y
127CONFIG_FLAT_NODE_MEM_MAP=y
128CONFIG_SPARSEMEM_STATIC=y
129CONFIG_SPLIT_PTLOCK_CPUS=4
130# CONFIG_RESOURCES_64BIT is not set
131CONFIG_ZONE_DMA_FLAG=1
132# CONFIG_HZ_48 is not set
133CONFIG_HZ_100=y
134# CONFIG_HZ_128 is not set
135# CONFIG_HZ_250 is not set
136# CONFIG_HZ_256 is not set
137# CONFIG_HZ_1000 is not set
138# CONFIG_HZ_1024 is not set
139CONFIG_SYS_SUPPORTS_ARBIT_HZ=y
140CONFIG_HZ=100
141CONFIG_PREEMPT_NONE=y
142# CONFIG_PREEMPT_VOLUNTARY is not set
143# CONFIG_PREEMPT is not set
144CONFIG_LOCKDEP_SUPPORT=y
145CONFIG_STACKTRACE_SUPPORT=y
146CONFIG_DEFCONFIG_LIST="/lib/modules/$UNAME_RELEASE/.config"
147
148#
149# Code maturity level options
150#
151# CONFIG_EXPERIMENTAL is not set
152CONFIG_BROKEN_ON_SMP=y
153CONFIG_INIT_ENV_ARG_LIMIT=32
154
155#
156# General setup
157#
158CONFIG_LOCALVERSION=""
159CONFIG_LOCALVERSION_AUTO=y
160# CONFIG_SWAP is not set
161# CONFIG_SYSVIPC is not set
162# CONFIG_BSD_PROCESS_ACCT is not set
163# CONFIG_TASKSTATS is not set
164# CONFIG_UTS_NS is not set
165# CONFIG_AUDIT is not set
166# CONFIG_IKCONFIG is not set
167CONFIG_SYSFS_DEPRECATED=y
168CONFIG_RELAY=y
169CONFIG_SYSCTL=y
170CONFIG_EMBEDDED=y
171CONFIG_SYSCTL_SYSCALL=y
172CONFIG_KALLSYMS=y
173# CONFIG_KALLSYMS_EXTRA_PASS is not set
174# CONFIG_HOTPLUG is not set
175CONFIG_PRINTK=y
176# CONFIG_BUG is not set
177CONFIG_ELF_CORE=y
178# CONFIG_BASE_FULL is not set
179# CONFIG_FUTEX is not set
180# CONFIG_EPOLL is not set
181# CONFIG_SHMEM is not set
182CONFIG_SLAB=y
183CONFIG_VM_EVENT_COUNTERS=y
184CONFIG_TINY_SHMEM=y
185CONFIG_BASE_SMALL=1
186# CONFIG_SLOB is not set
187
188#
189# Loadable module support
190#
191# CONFIG_MODULES is not set
192
193#
194# Block layer
195#
196CONFIG_BLOCK=y
197# CONFIG_LBD is not set
198# CONFIG_BLK_DEV_IO_TRACE is not set
199# CONFIG_LSF is not set
200
201#
202# IO Schedulers
203#
204CONFIG_IOSCHED_NOOP=y
205# CONFIG_IOSCHED_AS is not set
206# CONFIG_IOSCHED_DEADLINE is not set
207# CONFIG_IOSCHED_CFQ is not set
208# CONFIG_DEFAULT_AS is not set
209# CONFIG_DEFAULT_DEADLINE is not set
210# CONFIG_DEFAULT_CFQ is not set
211CONFIG_DEFAULT_NOOP=y
212CONFIG_DEFAULT_IOSCHED="noop"
213
214#
215# Bus options (PCI, PCMCIA, EISA, ISA, TC)
216#
217CONFIG_ISA=y
218CONFIG_MMU=y
219CONFIG_PCSPEAKER=y
220
221#
222# PCCARD (PCMCIA/CardBus) support
223#
224
225#
226# PCI Hotplug Support
227#
228
229#
230# Executable file formats
231#
232CONFIG_BINFMT_ELF=y
233# CONFIG_BINFMT_MISC is not set
234CONFIG_TRAD_SIGNALS=y
235
236#
237# Power management options
238#
239CONFIG_PM=y
240# CONFIG_PM_LEGACY is not set
241# CONFIG_PM_DEBUG is not set
242# CONFIG_PM_SYSFS_DEPRECATED is not set
243
244#
245# Networking
246#
247CONFIG_NET=y
248
249#
250# Networking options
251#
252# CONFIG_NETDEBUG is not set
253CONFIG_PACKET=y
254CONFIG_PACKET_MMAP=y
255CONFIG_UNIX=y
256CONFIG_XFRM=y
257# CONFIG_XFRM_USER is not set
258# CONFIG_NET_KEY is not set
259CONFIG_INET=y
260CONFIG_IP_MULTICAST=y
261# CONFIG_IP_ADVANCED_ROUTER is not set
262CONFIG_IP_FIB_HASH=y
263CONFIG_IP_PNP=y
264CONFIG_IP_PNP_DHCP=y
265CONFIG_IP_PNP_BOOTP=y
266# CONFIG_IP_PNP_RARP is not set
267# CONFIG_NET_IPIP is not set
268# CONFIG_NET_IPGRE is not set
269# CONFIG_IP_MROUTE is not set
270# CONFIG_SYN_COOKIES is not set
271# CONFIG_INET_AH is not set
272# CONFIG_INET_ESP is not set
273# CONFIG_INET_IPCOMP is not set
274# CONFIG_INET_XFRM_TUNNEL is not set
275# CONFIG_INET_TUNNEL is not set
276CONFIG_INET_XFRM_MODE_TRANSPORT=y
277CONFIG_INET_XFRM_MODE_TUNNEL=y
278CONFIG_INET_XFRM_MODE_BEET=y
279CONFIG_INET_DIAG=y
280CONFIG_INET_TCP_DIAG=y
281# CONFIG_TCP_CONG_ADVANCED is not set
282CONFIG_TCP_CONG_CUBIC=y
283CONFIG_DEFAULT_TCP_CONG="cubic"
284# CONFIG_IPV6 is not set
285# CONFIG_INET6_XFRM_TUNNEL is not set
286# CONFIG_INET6_TUNNEL is not set
287CONFIG_NETWORK_SECMARK=y
288# CONFIG_NETFILTER is not set
289# CONFIG_BRIDGE is not set
290# CONFIG_VLAN_8021Q is not set
291# CONFIG_DECNET is not set
292# CONFIG_LLC2 is not set
293# CONFIG_IPX is not set
294# CONFIG_ATALK is not set
295
296#
297# QoS and/or fair queueing
298#
299# CONFIG_NET_SCHED is not set
300
301#
302# Network testing
303#
304# CONFIG_NET_PKTGEN is not set
305# CONFIG_HAMRADIO is not set
306# CONFIG_IRDA is not set
307# CONFIG_BT is not set
308# CONFIG_IEEE80211 is not set
309
310#
311# Device Drivers
312#
313
314#
315# Generic Driver Options
316#
317CONFIG_STANDALONE=y
318# CONFIG_PREVENT_FIRMWARE_BUILD is not set
319# CONFIG_SYS_HYPERVISOR is not set
320
321#
322# Connector - unified userspace <-> kernelspace linker
323#
324CONFIG_CONNECTOR=y
325CONFIG_PROC_EVENTS=y
326
327#
328# Memory Technology Devices (MTD)
329#
330# CONFIG_MTD is not set
331
332#
333# Parallel port support
334#
335# CONFIG_PARPORT is not set
336
337#
338# Plug and Play support
339#
340# CONFIG_PNP is not set
341# CONFIG_PNPACPI is not set
342
343#
344# Block devices
345#
346# CONFIG_BLK_DEV_COW_COMMON is not set
347# CONFIG_BLK_DEV_LOOP is not set
348# CONFIG_BLK_DEV_NBD is not set
349# CONFIG_BLK_DEV_RAM is not set
350# CONFIG_BLK_DEV_INITRD is not set
351# CONFIG_CDROM_PKTCDVD is not set
352# CONFIG_ATA_OVER_ETH is not set
353
354#
355# Misc devices
356#
357
358#
359# ATA/ATAPI/MFM/RLL support
360#
361# CONFIG_IDE is not set
362
363#
364# SCSI device support
365#
366# CONFIG_RAID_ATTRS is not set
367# CONFIG_SCSI is not set
368# CONFIG_SCSI_NETLINK is not set
369
370#
371# Serial ATA (prod) and Parallel ATA (experimental) drivers
372#
373# CONFIG_ATA is not set
374
375#
376# Old CD-ROM drivers (not SCSI, not IDE)
377#
378# CONFIG_CD_NO_IDESCSI is not set
379
380#
381# Multi-device support (RAID and LVM)
382#
383# CONFIG_MD is not set
384
385#
386# Fusion MPT device support
387#
388# CONFIG_FUSION is not set
389
390#
391# IEEE 1394 (FireWire) support
392#
393
394#
395# I2O device support
396#
397
398#
399# Network device support
400#
401CONFIG_NETDEVICES=y
402# CONFIG_DUMMY is not set
403# CONFIG_BONDING is not set
404# CONFIG_EQUALIZER is not set
405# CONFIG_TUN is not set
406
407#
408# ARCnet devices
409#
410# CONFIG_ARCNET is not set
411
412#
413# PHY device support
414#
415# CONFIG_PHYLIB is not set
416
417#
418# Ethernet (10 or 100Mbit)
419#
420CONFIG_NET_ETHERNET=y
421# CONFIG_MII is not set
422# CONFIG_NET_VENDOR_3COM is not set
423# CONFIG_NET_VENDOR_SMC is not set
424# CONFIG_DM9000 is not set
425# CONFIG_NET_VENDOR_RACAL is not set
426# CONFIG_DEPCA is not set
427# CONFIG_HP100 is not set
428CONFIG_NET_ISA=y
429# CONFIG_E2100 is not set
430# CONFIG_EWRK3 is not set
431# CONFIG_EEXPRESS is not set
432# CONFIG_EEXPRESS_PRO is not set
433# CONFIG_HPLAN_PLUS is not set
434# CONFIG_HPLAN is not set
435# CONFIG_LP486E is not set
436# CONFIG_ETH16I is not set
437CONFIG_NE2000=y
438# CONFIG_NET_PCI is not set
439
440#
441# Ethernet (1000 Mbit)
442#
443
444#
445# Ethernet (10000 Mbit)
446#
447
448#
449# Token Ring devices
450#
451# CONFIG_TR is not set
452
453#
454# Wireless LAN (non-hamradio)
455#
456# CONFIG_NET_RADIO is not set
457
458#
459# Wan interfaces
460#
461# CONFIG_WAN is not set
462# CONFIG_PPP is not set
463# CONFIG_SLIP is not set
464# CONFIG_NETPOLL is not set
465# CONFIG_NET_POLL_CONTROLLER is not set
466
467#
468# ISDN subsystem
469#
470# CONFIG_ISDN is not set
471
472#
473# Telephony Support
474#
475# CONFIG_PHONE is not set
476
477#
478# Input device support
479#
480CONFIG_INPUT=y
481# CONFIG_INPUT_FF_MEMLESS is not set
482
483#
484# Userland interfaces
485#
486# CONFIG_INPUT_MOUSEDEV is not set
487# CONFIG_INPUT_JOYDEV is not set
488# CONFIG_INPUT_TSDEV is not set
489# CONFIG_INPUT_EVDEV is not set
490# CONFIG_INPUT_EVBUG is not set
491
492#
493# Input Device Drivers
494#
495# CONFIG_INPUT_KEYBOARD is not set
496# CONFIG_INPUT_MOUSE is not set
497# CONFIG_INPUT_JOYSTICK is not set
498# CONFIG_INPUT_TOUCHSCREEN is not set
499# CONFIG_INPUT_MISC is not set
500
501#
502# Hardware I/O ports
503#
504# CONFIG_SERIO is not set
505# CONFIG_GAMEPORT is not set
506
507#
508# Character devices
509#
510CONFIG_VT=y
511CONFIG_VT_CONSOLE=y
512CONFIG_HW_CONSOLE=y
513CONFIG_VT_HW_CONSOLE_BINDING=y
514# CONFIG_SERIAL_NONSTANDARD is not set
515
516#
517# Serial drivers
518#
519CONFIG_SERIAL_8250=y
520CONFIG_SERIAL_8250_CONSOLE=y
521CONFIG_SERIAL_8250_NR_UARTS=4
522CONFIG_SERIAL_8250_RUNTIME_UARTS=4
523# CONFIG_SERIAL_8250_EXTENDED is not set
524
525#
526# Non-8250 serial port support
527#
528CONFIG_SERIAL_CORE=y
529CONFIG_SERIAL_CORE_CONSOLE=y
530CONFIG_UNIX98_PTYS=y
531CONFIG_LEGACY_PTYS=y
532CONFIG_LEGACY_PTY_COUNT=256
533
534#
535# IPMI
536#
537# CONFIG_IPMI_HANDLER is not set
538
539#
540# Watchdog Cards
541#
542# CONFIG_WATCHDOG is not set
543# CONFIG_HW_RANDOM is not set
544# CONFIG_RTC is not set
545# CONFIG_GEN_RTC is not set
546# CONFIG_DTLK is not set
547# CONFIG_R3964 is not set
548# CONFIG_RAW_DRIVER is not set
549
550#
551# TPM devices
552#
553
554#
555# I2C support
556#
557# CONFIG_I2C is not set
558
559#
560# SPI support
561#
562# CONFIG_SPI is not set
563# CONFIG_SPI_MASTER is not set
564
565#
566# Dallas's 1-wire bus
567#
568# CONFIG_W1 is not set
569
570#
571# Hardware Monitoring support
572#
573# CONFIG_HWMON is not set
574# CONFIG_HWMON_VID is not set
575
576#
577# Multimedia devices
578#
579# CONFIG_VIDEO_DEV is not set
580
581#
582# Digital Video Broadcasting Devices
583#
584# CONFIG_DVB is not set
585
586#
587# Graphics support
588#
589# CONFIG_FIRMWARE_EDID is not set
590# CONFIG_FB is not set
591
592#
593# Console display driver support
594#
595CONFIG_VGA_CONSOLE=y
596# CONFIG_VGACON_SOFT_SCROLLBACK is not set
597# CONFIG_MDA_CONSOLE is not set
598CONFIG_DUMMY_CONSOLE=y
599# CONFIG_BACKLIGHT_LCD_SUPPORT is not set
600
601#
602# Sound
603#
604# CONFIG_SOUND is not set
605
606#
607# HID Devices
608#
609CONFIG_HID=y
610# CONFIG_HID_DEBUG is not set
611
612#
613# USB support
614#
615# CONFIG_USB_ARCH_HAS_HCD is not set
616# CONFIG_USB_ARCH_HAS_OHCI is not set
617# CONFIG_USB_ARCH_HAS_EHCI is not set
618
619#
620# NOTE: USB_STORAGE enables SCSI, and 'SCSI disk support'
621#
622
623#
624# USB Gadget Support
625#
626# CONFIG_USB_GADGET is not set
627
628#
629# MMC/SD Card support
630#
631# CONFIG_MMC is not set
632
633#
634# LED devices
635#
636# CONFIG_NEW_LEDS is not set
637
638#
639# LED drivers
640#
641
642#
643# LED Triggers
644#
645
646#
647# InfiniBand support
648#
649
650#
651# EDAC - error detection and reporting (RAS) (EXPERIMENTAL)
652#
653
654#
655# Real Time Clock
656#
657
658#
659# DMA Engine support
660#
661# CONFIG_DMA_ENGINE is not set
662
663#
664# DMA Clients
665#
666
667#
668# DMA Devices
669#
670
671#
672# Auxiliary Display support
673#
674
675#
676# Virtualization
677#
678
679#
680# File systems
681#
682# CONFIG_EXT2_FS is not set
683# CONFIG_EXT3_FS is not set
684# CONFIG_REISERFS_FS is not set
685# CONFIG_JFS_FS is not set
686CONFIG_FS_POSIX_ACL=y
687# CONFIG_XFS_FS is not set
688# CONFIG_OCFS2_FS is not set
689# CONFIG_MINIX_FS is not set
690# CONFIG_ROMFS_FS is not set
691CONFIG_INOTIFY=y
692CONFIG_INOTIFY_USER=y
693# CONFIG_QUOTA is not set
694# CONFIG_DNOTIFY is not set
695# CONFIG_AUTOFS_FS is not set
696# CONFIG_AUTOFS4_FS is not set
697CONFIG_FUSE_FS=y
698CONFIG_GENERIC_ACL=y
699
700#
701# CD-ROM/DVD Filesystems
702#
703# CONFIG_ISO9660_FS is not set
704# CONFIG_UDF_FS is not set
705
706#
707# DOS/FAT/NT Filesystems
708#
709# CONFIG_MSDOS_FS is not set
710# CONFIG_VFAT_FS is not set
711# CONFIG_NTFS_FS is not set
712
713#
714# Pseudo filesystems
715#
716CONFIG_PROC_FS=y
717CONFIG_PROC_KCORE=y
718CONFIG_PROC_SYSCTL=y
719CONFIG_SYSFS=y
720CONFIG_TMPFS=y
721CONFIG_TMPFS_POSIX_ACL=y
722# CONFIG_HUGETLB_PAGE is not set
723CONFIG_RAMFS=y
724
725#
726# Miscellaneous filesystems
727#
728# CONFIG_HFSPLUS_FS is not set
729# CONFIG_CRAMFS is not set
730# CONFIG_VXFS_FS is not set
731# CONFIG_HPFS_FS is not set
732# CONFIG_QNX4FS_FS is not set
733# CONFIG_SYSV_FS is not set
734# CONFIG_UFS_FS is not set
735
736#
737# Network File Systems
738#
739CONFIG_NFS_FS=y
740CONFIG_NFS_V3=y
741# CONFIG_NFS_V3_ACL is not set
742CONFIG_NFS_DIRECTIO=y
743# CONFIG_NFSD is not set
744CONFIG_ROOT_NFS=y
745CONFIG_LOCKD=y
746CONFIG_LOCKD_V4=y
747CONFIG_NFS_COMMON=y
748CONFIG_SUNRPC=y
749# CONFIG_SMB_FS is not set
750# CONFIG_CIFS is not set
751# CONFIG_NCP_FS is not set
752# CONFIG_CODA_FS is not set
753
754#
755# Partition Types
756#
757# CONFIG_PARTITION_ADVANCED is not set
758CONFIG_MSDOS_PARTITION=y
759
760#
761# Native Language Support
762#
763# CONFIG_NLS is not set
764
765#
766# Kernel hacking
767#
768CONFIG_TRACE_IRQFLAGS_SUPPORT=y
769# CONFIG_PRINTK_TIME is not set
770CONFIG_ENABLE_MUST_CHECK=y
771# CONFIG_MAGIC_SYSRQ is not set
772# CONFIG_UNUSED_SYMBOLS is not set
773# CONFIG_DEBUG_FS is not set
774# CONFIG_HEADERS_CHECK is not set
775# CONFIG_DEBUG_KERNEL is not set
776CONFIG_LOG_BUF_SHIFT=14
777CONFIG_CROSSCOMPILE=y
778CONFIG_CMDLINE=""
779
780#
781# Security options
782#
783# CONFIG_KEYS is not set
784# CONFIG_SECURITY is not set
785
786#
787# Cryptographic options
788#
789# CONFIG_CRYPTO is not set
790
791#
792# Library routines
793#
794CONFIG_BITREVERSE=y
795# CONFIG_CRC_CCITT is not set
796# CONFIG_CRC16 is not set
797CONFIG_CRC32=y
798# CONFIG_LIBCRC32C is not set
799CONFIG_HAS_IOMEM=y
800CONFIG_HAS_IOPORT=y
diff --git a/arch/mips/kernel/irq-rm7000.c b/arch/mips/kernel/irq-rm7000.c
index 971adf6ef4f4..fb50cc78b28b 100644
--- a/arch/mips/kernel/irq-rm7000.c
+++ b/arch/mips/kernel/irq-rm7000.c
@@ -33,6 +33,7 @@ static struct irq_chip rm7k_irq_controller = {
33 .mask = mask_rm7k_irq, 33 .mask = mask_rm7k_irq,
34 .mask_ack = mask_rm7k_irq, 34 .mask_ack = mask_rm7k_irq,
35 .unmask = unmask_rm7k_irq, 35 .unmask = unmask_rm7k_irq,
36 .eoi = unmask_rm7k_irq
36}; 37};
37 38
38void __init rm7k_cpu_irq_init(void) 39void __init rm7k_cpu_irq_init(void)
diff --git a/arch/mips/kernel/irq-rm9000.c b/arch/mips/kernel/irq-rm9000.c
index 7b04583bd800..ed9febe63d72 100644
--- a/arch/mips/kernel/irq-rm9000.c
+++ b/arch/mips/kernel/irq-rm9000.c
@@ -75,6 +75,7 @@ static struct irq_chip rm9k_irq_controller = {
75 .mask = mask_rm9k_irq, 75 .mask = mask_rm9k_irq,
76 .mask_ack = mask_rm9k_irq, 76 .mask_ack = mask_rm9k_irq,
77 .unmask = unmask_rm9k_irq, 77 .unmask = unmask_rm9k_irq,
78 .eoi = unmask_rm9k_irq
78}; 79};
79 80
80static struct irq_chip rm9k_perfcounter_irq = { 81static struct irq_chip rm9k_perfcounter_irq = {
diff --git a/arch/mips/kernel/mips-mt-fpaff.c b/arch/mips/kernel/mips-mt-fpaff.c
index bb4f00c0cbe9..df4d3f2f740c 100644
--- a/arch/mips/kernel/mips-mt-fpaff.c
+++ b/arch/mips/kernel/mips-mt-fpaff.c
@@ -36,7 +36,7 @@ unsigned long mt_fpemul_threshold = 0;
36 */ 36 */
37static inline struct task_struct *find_process_by_pid(pid_t pid) 37static inline struct task_struct *find_process_by_pid(pid_t pid)
38{ 38{
39 return pid ? find_task_by_pid(pid) : current; 39 return pid ? find_task_by_vpid(pid) : current;
40} 40}
41 41
42 42
diff --git a/arch/mips/kernel/scall32-o32.S b/arch/mips/kernel/scall32-o32.S
index f798139e888e..08a9c5070ea8 100644
--- a/arch/mips/kernel/scall32-o32.S
+++ b/arch/mips/kernel/scall32-o32.S
@@ -663,6 +663,9 @@ einval: li v0, -EINVAL
663 sys sys_ni_syscall 0 663 sys sys_ni_syscall 0
664 sys sys_eventfd 1 664 sys sys_eventfd 1
665 sys sys_fallocate 6 /* 4320 */ 665 sys sys_fallocate 6 /* 4320 */
666 sys sys_timerfd_create 2
667 sys sys_timerfd_gettime 2
668 sys sys_timerfd_settime 4
666 .endm 669 .endm
667 670
668 /* We pre-compute the number of _instruction_ bytes needed to 671 /* We pre-compute the number of _instruction_ bytes needed to
diff --git a/arch/mips/kernel/scall64-64.S b/arch/mips/kernel/scall64-64.S
index a626be6baea3..dc597b600c68 100644
--- a/arch/mips/kernel/scall64-64.S
+++ b/arch/mips/kernel/scall64-64.S
@@ -478,4 +478,7 @@ sys_call_table:
478 PTR sys_ni_syscall 478 PTR sys_ni_syscall
479 PTR sys_eventfd 479 PTR sys_eventfd
480 PTR sys_fallocate 480 PTR sys_fallocate
481 PTR sys_timerfd_create /* 5280 */
482 PTR sys_timerfd_gettime
483 PTR sys_timerfd_settime
481 .size sys_call_table,.-sys_call_table 484 .size sys_call_table,.-sys_call_table
diff --git a/arch/mips/kernel/scall64-n32.S b/arch/mips/kernel/scall64-n32.S
index 9d5bcaf1b389..12940eca7893 100644
--- a/arch/mips/kernel/scall64-n32.S
+++ b/arch/mips/kernel/scall64-n32.S
@@ -404,4 +404,7 @@ EXPORT(sysn32_call_table)
404 PTR sys_ni_syscall 404 PTR sys_ni_syscall
405 PTR sys_eventfd 405 PTR sys_eventfd
406 PTR sys_fallocate 406 PTR sys_fallocate
407 PTR sys_timerfd_create
408 PTR sys_timerfd_gettime /* 5285 */
409 PTR sys_timerfd_settime
407 .size sysn32_call_table,.-sysn32_call_table 410 .size sysn32_call_table,.-sysn32_call_table
diff --git a/arch/mips/kernel/scall64-o32.S b/arch/mips/kernel/scall64-o32.S
index fd2019c1ec2d..9a275efb4f04 100644
--- a/arch/mips/kernel/scall64-o32.S
+++ b/arch/mips/kernel/scall64-o32.S
@@ -526,4 +526,7 @@ sys_call_table:
526 PTR sys_ni_syscall 526 PTR sys_ni_syscall
527 PTR sys_eventfd 527 PTR sys_eventfd
528 PTR sys32_fallocate /* 4320 */ 528 PTR sys32_fallocate /* 4320 */
529 PTR sys_timerfd_create
530 PTR sys_timerfd_gettime
531 PTR sys_timerfd_settime
529 .size sys_call_table,.-sys_call_table 532 .size sys_call_table,.-sys_call_table
diff --git a/arch/mips/kernel/sysirix.c b/arch/mips/kernel/sysirix.c
index 672fba84b2cc..c357762b8012 100644
--- a/arch/mips/kernel/sysirix.c
+++ b/arch/mips/kernel/sysirix.c
@@ -111,7 +111,7 @@ asmlinkage int irix_prctl(unsigned option, ...)
111 printk("irix_prctl[%s:%d]: Wants PR_ISBLOCKED\n", 111 printk("irix_prctl[%s:%d]: Wants PR_ISBLOCKED\n",
112 current->comm, current->pid); 112 current->comm, current->pid);
113 read_lock(&tasklist_lock); 113 read_lock(&tasklist_lock);
114 task = find_task_by_pid(va_arg(args, pid_t)); 114 task = find_task_by_vpid(va_arg(args, pid_t));
115 error = -ESRCH; 115 error = -ESRCH;
116 if (error) 116 if (error)
117 error = (task->run_list.next != NULL); 117 error = (task->run_list.next != NULL);
diff --git a/arch/mips/mm/c-r4k.c b/arch/mips/mm/c-r4k.c
index 53ec05267a98..2c4f7e11f0d5 100644
--- a/arch/mips/mm/c-r4k.c
+++ b/arch/mips/mm/c-r4k.c
@@ -364,20 +364,23 @@ static inline int has_valid_asid(const struct mm_struct *mm)
364static inline void local_r4k_flush_cache_range(void * args) 364static inline void local_r4k_flush_cache_range(void * args)
365{ 365{
366 struct vm_area_struct *vma = args; 366 struct vm_area_struct *vma = args;
367 int exec = vma->vm_flags & VM_EXEC;
367 368
368 if (!(has_valid_asid(vma->vm_mm))) 369 if (!(has_valid_asid(vma->vm_mm)))
369 return; 370 return;
370 371
371 r4k_blast_dcache(); 372 r4k_blast_dcache();
373 if (exec)
374 r4k_blast_icache();
372} 375}
373 376
374static void r4k_flush_cache_range(struct vm_area_struct *vma, 377static void r4k_flush_cache_range(struct vm_area_struct *vma,
375 unsigned long start, unsigned long end) 378 unsigned long start, unsigned long end)
376{ 379{
377 if (!cpu_has_dc_aliases) 380 int exec = vma->vm_flags & VM_EXEC;
378 return;
379 381
380 r4k_on_each_cpu(local_r4k_flush_cache_range, vma, 1, 1); 382 if (cpu_has_dc_aliases || (exec && !cpu_has_ic_fills_f_dc))
383 r4k_on_each_cpu(local_r4k_flush_cache_range, vma, 1, 1);
381} 384}
382 385
383static inline void local_r4k_flush_cache_mm(void * args) 386static inline void local_r4k_flush_cache_mm(void * args)
diff --git a/arch/mips/mm/cache.c b/arch/mips/mm/cache.c
index 81f30ac2bff9..6a24651971df 100644
--- a/arch/mips/mm/cache.c
+++ b/arch/mips/mm/cache.c
@@ -92,12 +92,17 @@ EXPORT_SYMBOL(__flush_dcache_page);
92 92
93void __flush_anon_page(struct page *page, unsigned long vmaddr) 93void __flush_anon_page(struct page *page, unsigned long vmaddr)
94{ 94{
95 if (pages_do_alias((unsigned long)page_address(page), vmaddr)) { 95 unsigned long addr = (unsigned long) page_address(page);
96 void *kaddr;
97 96
98 kaddr = kmap_coherent(page, vmaddr); 97 if (pages_do_alias(addr, vmaddr)) {
99 flush_data_cache_page((unsigned long)kaddr); 98 if (page_mapped(page) && !Page_dcache_dirty(page)) {
100 kunmap_coherent(); 99 void *kaddr;
100
101 kaddr = kmap_coherent(page, vmaddr);
102 flush_data_cache_page((unsigned long)kaddr);
103 kunmap_coherent();
104 } else
105 flush_data_cache_page(addr);
101 } 106 }
102} 107}
103 108
diff --git a/arch/mips/mm/init.c b/arch/mips/mm/init.c
index 480dec04f552..c7aed133d11d 100644
--- a/arch/mips/mm/init.c
+++ b/arch/mips/mm/init.c
@@ -211,7 +211,8 @@ void copy_user_highpage(struct page *to, struct page *from,
211 void *vfrom, *vto; 211 void *vfrom, *vto;
212 212
213 vto = kmap_atomic(to, KM_USER1); 213 vto = kmap_atomic(to, KM_USER1);
214 if (cpu_has_dc_aliases && page_mapped(from)) { 214 if (cpu_has_dc_aliases &&
215 page_mapped(from) && !Page_dcache_dirty(from)) {
215 vfrom = kmap_coherent(from, vaddr); 216 vfrom = kmap_coherent(from, vaddr);
216 copy_page(vto, vfrom); 217 copy_page(vto, vfrom);
217 kunmap_coherent(); 218 kunmap_coherent();
@@ -234,7 +235,8 @@ void copy_to_user_page(struct vm_area_struct *vma,
234 struct page *page, unsigned long vaddr, void *dst, const void *src, 235 struct page *page, unsigned long vaddr, void *dst, const void *src,
235 unsigned long len) 236 unsigned long len)
236{ 237{
237 if (cpu_has_dc_aliases && page_mapped(page)) { 238 if (cpu_has_dc_aliases &&
239 page_mapped(page) && !Page_dcache_dirty(page)) {
238 void *vto = kmap_coherent(page, vaddr) + (vaddr & ~PAGE_MASK); 240 void *vto = kmap_coherent(page, vaddr) + (vaddr & ~PAGE_MASK);
239 memcpy(vto, src, len); 241 memcpy(vto, src, len);
240 kunmap_coherent(); 242 kunmap_coherent();
@@ -253,7 +255,8 @@ void copy_from_user_page(struct vm_area_struct *vma,
253 struct page *page, unsigned long vaddr, void *dst, const void *src, 255 struct page *page, unsigned long vaddr, void *dst, const void *src,
254 unsigned long len) 256 unsigned long len)
255{ 257{
256 if (cpu_has_dc_aliases && page_mapped(page)) { 258 if (cpu_has_dc_aliases &&
259 page_mapped(page) && !Page_dcache_dirty(page)) {
257 void *vfrom = kmap_coherent(page, vaddr) + (vaddr & ~PAGE_MASK); 260 void *vfrom = kmap_coherent(page, vaddr) + (vaddr & ~PAGE_MASK);
258 memcpy(dst, vfrom, len); 261 memcpy(dst, vfrom, len);
259 kunmap_coherent(); 262 kunmap_coherent();
diff --git a/arch/mips/mm/pg-sb1.c b/arch/mips/mm/pg-sb1.c
index a3e98c243a89..89925ec57d6a 100644
--- a/arch/mips/mm/pg-sb1.c
+++ b/arch/mips/mm/pg-sb1.c
@@ -216,7 +216,7 @@ void sb1_dma_init(void)
216 int i; 216 int i;
217 217
218 for (i = 0; i < DM_NUM_CHANNELS; i++) { 218 for (i = 0; i < DM_NUM_CHANNELS; i++) {
219 const u64 base_val = CPHYSADDR(&page_descr[i]) | 219 const u64 base_val = CPHYSADDR((unsigned long)&page_descr[i]) |
220 V_DM_DSCR_BASE_RINGSZ(1); 220 V_DM_DSCR_BASE_RINGSZ(1);
221 void *base_reg = IOADDR(A_DM_REGISTER(i, R_DM_DSCR_BASE)); 221 void *base_reg = IOADDR(A_DM_REGISTER(i, R_DM_DSCR_BASE));
222 222
@@ -228,11 +228,11 @@ void sb1_dma_init(void)
228 228
229void clear_page(void *page) 229void clear_page(void *page)
230{ 230{
231 u64 to_phys = CPHYSADDR(page); 231 u64 to_phys = CPHYSADDR((unsigned long)page);
232 unsigned int cpu = smp_processor_id(); 232 unsigned int cpu = smp_processor_id();
233 233
234 /* if the page is not in KSEG0, use old way */ 234 /* if the page is not in KSEG0, use old way */
235 if ((long)KSEGX(page) != (long)CKSEG0) 235 if ((long)KSEGX((unsigned long)page) != (long)CKSEG0)
236 return clear_page_cpu(page); 236 return clear_page_cpu(page);
237 237
238 page_descr[cpu].dscr_a = to_phys | M_DM_DSCRA_ZERO_MEM | 238 page_descr[cpu].dscr_a = to_phys | M_DM_DSCRA_ZERO_MEM |
@@ -252,13 +252,13 @@ void clear_page(void *page)
252 252
253void copy_page(void *to, void *from) 253void copy_page(void *to, void *from)
254{ 254{
255 u64 from_phys = CPHYSADDR(from); 255 u64 from_phys = CPHYSADDR((unsigned long)from);
256 u64 to_phys = CPHYSADDR(to); 256 u64 to_phys = CPHYSADDR((unsigned long)to);
257 unsigned int cpu = smp_processor_id(); 257 unsigned int cpu = smp_processor_id();
258 258
259 /* if any page is not in KSEG0, use old way */ 259 /* if any page is not in KSEG0, use old way */
260 if ((long)KSEGX(to) != (long)CKSEG0 260 if ((long)KSEGX((unsigned long)to) != (long)CKSEG0
261 || (long)KSEGX(from) != (long)CKSEG0) 261 || (long)KSEGX((unsigned long)from) != (long)CKSEG0)
262 return copy_page_cpu(to, from); 262 return copy_page_cpu(to, from);
263 263
264 page_descr[cpu].dscr_a = to_phys | M_DM_DSCRA_L2C_DEST | 264 page_descr[cpu].dscr_a = to_phys | M_DM_DSCRA_L2C_DEST |
diff --git a/arch/mips/pci/pci.c b/arch/mips/pci/pci.c
index 6e6981fd7934..f9471d77c096 100644
--- a/arch/mips/pci/pci.c
+++ b/arch/mips/pci/pci.c
@@ -177,8 +177,15 @@ static int pcibios_enable_resources(struct pci_dev *dev, int mask)
177 continue; 177 continue;
178 178
179 r = &dev->resource[idx]; 179 r = &dev->resource[idx];
180 if (!(r->flags & (IORESOURCE_IO | IORESOURCE_MEM)))
181 continue;
182 if ((idx == PCI_ROM_RESOURCE) &&
183 (!(r->flags & IORESOURCE_ROM_ENABLE)))
184 continue;
180 if (!r->start && r->end) { 185 if (!r->start && r->end) {
181 printk(KERN_ERR "PCI: Device %s not available because of resource collisions\n", pci_name(dev)); 186 printk(KERN_ERR "PCI: Device %s not available "
187 "because of resource collisions\n",
188 pci_name(dev));
182 return -EINVAL; 189 return -EINVAL;
183 } 190 }
184 if (r->flags & IORESOURCE_IO) 191 if (r->flags & IORESOURCE_IO)
@@ -186,10 +193,9 @@ static int pcibios_enable_resources(struct pci_dev *dev, int mask)
186 if (r->flags & IORESOURCE_MEM) 193 if (r->flags & IORESOURCE_MEM)
187 cmd |= PCI_COMMAND_MEMORY; 194 cmd |= PCI_COMMAND_MEMORY;
188 } 195 }
189 if (dev->resource[PCI_ROM_RESOURCE].start)
190 cmd |= PCI_COMMAND_MEMORY;
191 if (cmd != old_cmd) { 196 if (cmd != old_cmd) {
192 printk("PCI: Enabling device %s (%04x -> %04x)\n", pci_name(dev), old_cmd, cmd); 197 printk("PCI: Enabling device %s (%04x -> %04x)\n",
198 pci_name(dev), old_cmd, cmd);
193 pci_write_config_word(dev, PCI_COMMAND, cmd); 199 pci_write_config_word(dev, PCI_COMMAND, cmd);
194 } 200 }
195 return 0; 201 return 0;
diff --git a/arch/mips/sibyte/bcm1480/smp.c b/arch/mips/sibyte/bcm1480/smp.c
index 183c460b9ca1..bd9eeb43ed0e 100644
--- a/arch/mips/sibyte/bcm1480/smp.c
+++ b/arch/mips/sibyte/bcm1480/smp.c
@@ -110,7 +110,6 @@ static void __cpuinit bcm1480_smp_finish(void)
110 110
111 sb1480_clockevent_init(); 111 sb1480_clockevent_init();
112 local_irq_enable(); 112 local_irq_enable();
113 bcm1480_smp_finish();
114} 113}
115 114
116/* 115/*
diff --git a/arch/mn10300/Kconfig b/arch/mn10300/Kconfig
index eedc3a5e0d9b..6a6409adc564 100644
--- a/arch/mn10300/Kconfig
+++ b/arch/mn10300/Kconfig
@@ -63,6 +63,10 @@ config GENERIC_HARDIRQS
63config HOTPLUG_CPU 63config HOTPLUG_CPU
64 def_bool n 64 def_bool n
65 65
66config HZ
67 int
68 default 1000
69
66mainmenu "Matsushita MN10300/AM33 Kernel Configuration" 70mainmenu "Matsushita MN10300/AM33 Kernel Configuration"
67 71
68source "init/Kconfig" 72source "init/Kconfig"
diff --git a/arch/mn10300/configs/asb2303_defconfig b/arch/mn10300/configs/asb2303_defconfig
index ca9876a111d3..3aa8906b3dea 100644
--- a/arch/mn10300/configs/asb2303_defconfig
+++ b/arch/mn10300/configs/asb2303_defconfig
@@ -1,7 +1,7 @@
1# 1#
2# Automatically generated make config: don't edit 2# Automatically generated make config: don't edit
3# Linux kernel version: 2.6.24-rc2 3# Linux kernel version: 2.6.25-rc2
4# Fri Nov 16 13:36:38 2007 4# Tue Feb 19 18:52:24 2008
5# 5#
6CONFIG_MN10300=y 6CONFIG_MN10300=y
7CONFIG_AM33=y 7CONFIG_AM33=y
@@ -21,6 +21,7 @@ CONFIG_ARCH_HAS_ILOG2_U32=y
21# CONFIG_ARCH_SUPPORTS_AOUT is not set 21# CONFIG_ARCH_SUPPORTS_AOUT is not set
22CONFIG_GENERIC_HARDIRQS=y 22CONFIG_GENERIC_HARDIRQS=y
23# CONFIG_HOTPLUG_CPU is not set 23# CONFIG_HOTPLUG_CPU is not set
24CONFIG_HZ=1000
24CONFIG_DEFCONFIG_LIST="/lib/modules/$UNAME_RELEASE/.config" 25CONFIG_DEFCONFIG_LIST="/lib/modules/$UNAME_RELEASE/.config"
25 26
26# 27#
@@ -38,15 +39,16 @@ CONFIG_SYSVIPC_SYSCTL=y
38CONFIG_BSD_PROCESS_ACCT=y 39CONFIG_BSD_PROCESS_ACCT=y
39# CONFIG_BSD_PROCESS_ACCT_V3 is not set 40# CONFIG_BSD_PROCESS_ACCT_V3 is not set
40# CONFIG_TASKSTATS is not set 41# CONFIG_TASKSTATS is not set
41# CONFIG_USER_NS is not set
42# CONFIG_PID_NS is not set
43# CONFIG_AUDIT is not set 42# CONFIG_AUDIT is not set
44# CONFIG_IKCONFIG is not set 43# CONFIG_IKCONFIG is not set
45CONFIG_LOG_BUF_SHIFT=14 44CONFIG_LOG_BUF_SHIFT=14
46# CONFIG_CGROUPS is not set 45# CONFIG_CGROUPS is not set
47# CONFIG_FAIR_GROUP_SCHED is not set 46# CONFIG_GROUP_SCHED is not set
47# CONFIG_USER_SCHED is not set
48# CONFIG_CGROUP_SCHED is not set
48# CONFIG_SYSFS_DEPRECATED is not set 49# CONFIG_SYSFS_DEPRECATED is not set
49# CONFIG_RELAY is not set 50# CONFIG_RELAY is not set
51# CONFIG_NAMESPACES is not set
50# CONFIG_BLK_DEV_INITRD is not set 52# CONFIG_BLK_DEV_INITRD is not set
51# CONFIG_CC_OPTIMIZE_FOR_SIZE is not set 53# CONFIG_CC_OPTIMIZE_FOR_SIZE is not set
52CONFIG_SYSCTL=y 54CONFIG_SYSCTL=y
@@ -57,22 +59,33 @@ CONFIG_SYSCTL_SYSCALL=y
57CONFIG_PRINTK=y 59CONFIG_PRINTK=y
58CONFIG_BUG=y 60CONFIG_BUG=y
59CONFIG_ELF_CORE=y 61CONFIG_ELF_CORE=y
62CONFIG_COMPAT_BRK=y
60CONFIG_BASE_FULL=y 63CONFIG_BASE_FULL=y
61CONFIG_FUTEX=y 64CONFIG_FUTEX=y
62CONFIG_ANON_INODES=y 65CONFIG_ANON_INODES=y
63CONFIG_EPOLL=y 66CONFIG_EPOLL=y
64CONFIG_SIGNALFD=y 67CONFIG_SIGNALFD=y
68CONFIG_TIMERFD=y
65CONFIG_EVENTFD=y 69CONFIG_EVENTFD=y
66CONFIG_SHMEM=y 70CONFIG_SHMEM=y
67# CONFIG_VM_EVENT_COUNTERS is not set 71# CONFIG_VM_EVENT_COUNTERS is not set
68CONFIG_SLAB=y 72CONFIG_SLAB=y
69# CONFIG_SLUB is not set 73# CONFIG_SLUB is not set
70# CONFIG_SLOB is not set 74# CONFIG_SLOB is not set
75CONFIG_PROFILING=y
76# CONFIG_MARKERS is not set
77CONFIG_OPROFILE=y
78# CONFIG_HAVE_OPROFILE is not set
79# CONFIG_HAVE_KPROBES is not set
80# CONFIG_PROC_PAGE_MONITOR is not set
81CONFIG_SLABINFO=y
71CONFIG_RT_MUTEXES=y 82CONFIG_RT_MUTEXES=y
72# CONFIG_TINY_SHMEM is not set 83# CONFIG_TINY_SHMEM is not set
73CONFIG_BASE_SMALL=0 84CONFIG_BASE_SMALL=0
74# CONFIG_MODULES is not set 85# CONFIG_MODULES is not set
75# CONFIG_BLOCK is not set 86# CONFIG_BLOCK is not set
87CONFIG_CLASSIC_RCU=y
88# CONFIG_PREEMPT_RCU is not set
76 89
77# 90#
78# Matsushita MN10300 system setup 91# Matsushita MN10300 system setup
@@ -206,6 +219,7 @@ CONFIG_DEFAULT_TCP_CONG="cubic"
206# 219#
207# CONFIG_NET_PKTGEN is not set 220# CONFIG_NET_PKTGEN is not set
208# CONFIG_HAMRADIO is not set 221# CONFIG_HAMRADIO is not set
222# CONFIG_CAN is not set
209# CONFIG_IRDA is not set 223# CONFIG_IRDA is not set
210# CONFIG_BT is not set 224# CONFIG_BT is not set
211# CONFIG_AF_RXRPC is not set 225# CONFIG_AF_RXRPC is not set
@@ -311,6 +325,8 @@ CONFIG_MTD_PHYSMAP_BANKWIDTH=2
311# CONFIG_PARPORT is not set 325# CONFIG_PARPORT is not set
312CONFIG_MISC_DEVICES=y 326CONFIG_MISC_DEVICES=y
313# CONFIG_EEPROM_93CX6 is not set 327# CONFIG_EEPROM_93CX6 is not set
328# CONFIG_ENCLOSURE_SERVICES is not set
329# CONFIG_HAVE_IDE is not set
314 330
315# 331#
316# SCSI device support 332# SCSI device support
@@ -345,7 +361,6 @@ CONFIG_SMC91X=y
345# CONFIG_WAN is not set 361# CONFIG_WAN is not set
346# CONFIG_PPP is not set 362# CONFIG_PPP is not set
347# CONFIG_SLIP is not set 363# CONFIG_SLIP is not set
348# CONFIG_SHAPER is not set
349# CONFIG_NETCONSOLE is not set 364# CONFIG_NETCONSOLE is not set
350# CONFIG_NETPOLL is not set 365# CONFIG_NETPOLL is not set
351# CONFIG_NET_POLL_CONTROLLER is not set 366# CONFIG_NET_POLL_CONTROLLER is not set
@@ -405,6 +420,7 @@ CONFIG_RTC=y
405# CONFIG_W1 is not set 420# CONFIG_W1 is not set
406# CONFIG_POWER_SUPPLY is not set 421# CONFIG_POWER_SUPPLY is not set
407# CONFIG_HWMON is not set 422# CONFIG_HWMON is not set
423# CONFIG_THERMAL is not set
408# CONFIG_WATCHDOG is not set 424# CONFIG_WATCHDOG is not set
409 425
410# 426#
@@ -444,6 +460,7 @@ CONFIG_SSB_POSSIBLE=y
444# CONFIG_SOUND is not set 460# CONFIG_SOUND is not set
445# CONFIG_USB_SUPPORT is not set 461# CONFIG_USB_SUPPORT is not set
446# CONFIG_MMC is not set 462# CONFIG_MMC is not set
463# CONFIG_MEMSTICK is not set
447# CONFIG_NEW_LEDS is not set 464# CONFIG_NEW_LEDS is not set
448# CONFIG_RTC_CLASS is not set 465# CONFIG_RTC_CLASS is not set
449 466
@@ -455,10 +472,10 @@ CONFIG_SSB_POSSIBLE=y
455# 472#
456# File systems 473# File systems
457# 474#
475CONFIG_DNOTIFY=y
458CONFIG_INOTIFY=y 476CONFIG_INOTIFY=y
459CONFIG_INOTIFY_USER=y 477CONFIG_INOTIFY_USER=y
460# CONFIG_QUOTA is not set 478# CONFIG_QUOTA is not set
461CONFIG_DNOTIFY=y
462# CONFIG_AUTOFS_FS is not set 479# CONFIG_AUTOFS_FS is not set
463# CONFIG_AUTOFS4_FS is not set 480# CONFIG_AUTOFS4_FS is not set
464# CONFIG_FUSE_FS is not set 481# CONFIG_FUSE_FS is not set
@@ -554,5 +571,3 @@ CONFIG_HAS_DMA=y
554# 571#
555# Profiling support 572# Profiling support
556# 573#
557CONFIG_PROFILING=y
558CONFIG_OPROFILE=y
diff --git a/arch/mn10300/kernel/gdb-io-ttysm.c b/arch/mn10300/kernel/gdb-io-ttysm.c
index c5451592d403..e94c25e8ca05 100644
--- a/arch/mn10300/kernel/gdb-io-ttysm.c
+++ b/arch/mn10300/kernel/gdb-io-ttysm.c
@@ -196,6 +196,7 @@ int gdbstub_io_rx_char(unsigned char *_ch, int nonblock)
196try_again: 196try_again:
197 /* pull chars out of the buffer */ 197 /* pull chars out of the buffer */
198 ix = gdbstub_rx_outp; 198 ix = gdbstub_rx_outp;
199 barrier();
199 if (ix == gdbstub_rx_inp) { 200 if (ix == gdbstub_rx_inp) {
200 if (nonblock) 201 if (nonblock)
201 return -EAGAIN; 202 return -EAGAIN;
@@ -207,6 +208,7 @@ try_again:
207 208
208 ch = gdbstub_rx_buffer[ix++]; 209 ch = gdbstub_rx_buffer[ix++];
209 st = gdbstub_rx_buffer[ix++]; 210 st = gdbstub_rx_buffer[ix++];
211 barrier();
210 gdbstub_rx_outp = ix & (PAGE_SIZE - 1); 212 gdbstub_rx_outp = ix & (PAGE_SIZE - 1);
211 213
212 st &= SC01STR_RXF | SC01STR_RBF | SC01STR_FEF | SC01STR_PEF | 214 st &= SC01STR_RXF | SC01STR_RBF | SC01STR_FEF | SC01STR_PEF |
diff --git a/arch/mn10300/kernel/time.c b/arch/mn10300/kernel/time.c
index ff492e3b3457..babb7c2ac377 100644
--- a/arch/mn10300/kernel/time.c
+++ b/arch/mn10300/kernel/time.c
@@ -84,11 +84,13 @@ static irqreturn_t timer_interrupt(int irq, void *dev_id)
84 /* advance the kernel's time tracking system */ 84 /* advance the kernel's time tracking system */
85 profile_tick(CPU_PROFILING); 85 profile_tick(CPU_PROFILING);
86 do_timer(1); 86 do_timer(1);
87 update_process_times(user_mode(get_irq_regs()));
88 check_rtc_time(); 87 check_rtc_time();
89 } 88 }
90 89
91 write_sequnlock(&xtime_lock); 90 write_sequnlock(&xtime_lock);
91
92 update_process_times(user_mode(get_irq_regs()));
93
92 return IRQ_HANDLED; 94 return IRQ_HANDLED;
93} 95}
94 96
diff --git a/arch/mn10300/kernel/traps.c b/arch/mn10300/kernel/traps.c
index 8b9dc6d9dcc6..fcb9a03d46a8 100644
--- a/arch/mn10300/kernel/traps.c
+++ b/arch/mn10300/kernel/traps.c
@@ -391,7 +391,7 @@ static asmlinkage void unsupported_syscall(struct pt_regs *regs,
391 if (code == EXCEP_SYSCALL15 && !user_mode(regs)) { 391 if (code == EXCEP_SYSCALL15 && !user_mode(regs)) {
392 if (report_bug(regs->pc, regs) == BUG_TRAP_TYPE_BUG) { 392 if (report_bug(regs->pc, regs) == BUG_TRAP_TYPE_BUG) {
393#ifdef CONFIG_GDBSTUB 393#ifdef CONFIG_GDBSTUB
394 __gdbstub_bug_trap(); 394 gdbstub_intercept(regs, code);
395#endif 395#endif
396 } 396 }
397 } 397 }
diff --git a/arch/powerpc/Makefile b/arch/powerpc/Makefile
index 6845482f0093..1c6ce3536e4c 100644
--- a/arch/powerpc/Makefile
+++ b/arch/powerpc/Makefile
@@ -176,7 +176,7 @@ define archhelp
176 @echo ' *_defconfig - Select default config from arch/$(ARCH)/configs' 176 @echo ' *_defconfig - Select default config from arch/$(ARCH)/configs'
177endef 177endef
178 178
179install: vdso_install 179install:
180 $(Q)$(MAKE) $(build)=$(boot) install 180 $(Q)$(MAKE) $(build)=$(boot) install
181 181
182vdso_install: 182vdso_install:
diff --git a/arch/powerpc/boot/Makefile b/arch/powerpc/boot/Makefile
index 63d07ccbb9db..e3993a607584 100644
--- a/arch/powerpc/boot/Makefile
+++ b/arch/powerpc/boot/Makefile
@@ -35,10 +35,10 @@ endif
35 35
36BOOTCFLAGS += -I$(obj) -I$(srctree)/$(obj) -I$(srctree)/$(src)/libfdt 36BOOTCFLAGS += -I$(obj) -I$(srctree)/$(obj) -I$(srctree)/$(src)/libfdt
37 37
38$(obj)/4xx.o: BOOTCFLAGS += -mcpu=440 38$(obj)/4xx.o: BOOTCFLAGS += -mcpu=405
39$(obj)/ebony.o: BOOTCFLAGS += -mcpu=440 39$(obj)/ebony.o: BOOTCFLAGS += -mcpu=405
40$(obj)/cuboot-taishan.o: BOOTCFLAGS += -mcpu=440 40$(obj)/cuboot-taishan.o: BOOTCFLAGS += -mcpu=405
41$(obj)/cuboot-katmai.o: BOOTCFLAGS += -mcpu=440 41$(obj)/cuboot-katmai.o: BOOTCFLAGS += -mcpu=405
42$(obj)/treeboot-walnut.o: BOOTCFLAGS += -mcpu=405 42$(obj)/treeboot-walnut.o: BOOTCFLAGS += -mcpu=405
43 43
44 44
diff --git a/arch/powerpc/boot/dts/bamboo.dts b/arch/powerpc/boot/dts/bamboo.dts
index 29f1a6f3e373..7dc37c9a7446 100644
--- a/arch/powerpc/boot/dts/bamboo.dts
+++ b/arch/powerpc/boot/dts/bamboo.dts
@@ -185,7 +185,6 @@
185 }; 185 };
186 186
187 IIC0: i2c@ef600700 { 187 IIC0: i2c@ef600700 {
188 device_type = "i2c";
189 compatible = "ibm,iic-440ep", "ibm,iic-440gp", "ibm,iic"; 188 compatible = "ibm,iic-440ep", "ibm,iic-440gp", "ibm,iic";
190 reg = <ef600700 14>; 189 reg = <ef600700 14>;
191 interrupt-parent = <&UIC0>; 190 interrupt-parent = <&UIC0>;
@@ -193,7 +192,6 @@
193 }; 192 };
194 193
195 IIC1: i2c@ef600800 { 194 IIC1: i2c@ef600800 {
196 device_type = "i2c";
197 compatible = "ibm,iic-440ep", "ibm,iic-440gp", "ibm,iic"; 195 compatible = "ibm,iic-440ep", "ibm,iic-440gp", "ibm,iic";
198 reg = <ef600800 14>; 196 reg = <ef600800 14>;
199 interrupt-parent = <&UIC0>; 197 interrupt-parent = <&UIC0>;
@@ -201,7 +199,6 @@
201 }; 199 };
202 200
203 ZMII0: emac-zmii@ef600d00 { 201 ZMII0: emac-zmii@ef600d00 {
204 device_type = "zmii-interface";
205 compatible = "ibm,zmii-440ep", "ibm,zmii-440gp", "ibm,zmii"; 202 compatible = "ibm,zmii-440ep", "ibm,zmii-440gp", "ibm,zmii";
206 reg = <ef600d00 c>; 203 reg = <ef600d00 c>;
207 }; 204 };
diff --git a/arch/powerpc/boot/dts/ebony.dts b/arch/powerpc/boot/dts/ebony.dts
index 7aad135a44b0..0b000cb7ed8b 100644
--- a/arch/powerpc/boot/dts/ebony.dts
+++ b/arch/powerpc/boot/dts/ebony.dts
@@ -216,7 +216,6 @@
216 216
217 IIC0: i2c@40000400 { 217 IIC0: i2c@40000400 {
218 /* FIXME */ 218 /* FIXME */
219 device_type = "i2c";
220 compatible = "ibm,iic-440gp", "ibm,iic"; 219 compatible = "ibm,iic-440gp", "ibm,iic";
221 reg = <40000400 14>; 220 reg = <40000400 14>;
222 interrupt-parent = <&UIC0>; 221 interrupt-parent = <&UIC0>;
@@ -224,7 +223,6 @@
224 }; 223 };
225 IIC1: i2c@40000500 { 224 IIC1: i2c@40000500 {
226 /* FIXME */ 225 /* FIXME */
227 device_type = "i2c";
228 compatible = "ibm,iic-440gp", "ibm,iic"; 226 compatible = "ibm,iic-440gp", "ibm,iic";
229 reg = <40000500 14>; 227 reg = <40000500 14>;
230 interrupt-parent = <&UIC0>; 228 interrupt-parent = <&UIC0>;
diff --git a/arch/powerpc/boot/dts/katmai.dts b/arch/powerpc/boot/dts/katmai.dts
index 9bdfc0ff3c24..bc32ac7250ec 100644
--- a/arch/powerpc/boot/dts/katmai.dts
+++ b/arch/powerpc/boot/dts/katmai.dts
@@ -187,7 +187,6 @@
187 }; 187 };
188 188
189 IIC0: i2c@10000400 { 189 IIC0: i2c@10000400 {
190 device_type = "i2c";
191 compatible = "ibm,iic-440spe", "ibm,iic-440gp", "ibm,iic"; 190 compatible = "ibm,iic-440spe", "ibm,iic-440gp", "ibm,iic";
192 reg = <10000400 14>; 191 reg = <10000400 14>;
193 interrupt-parent = <&UIC0>; 192 interrupt-parent = <&UIC0>;
@@ -195,7 +194,6 @@
195 }; 194 };
196 195
197 IIC1: i2c@10000500 { 196 IIC1: i2c@10000500 {
198 device_type = "i2c";
199 compatible = "ibm,iic-440spe", "ibm,iic-440gp", "ibm,iic"; 197 compatible = "ibm,iic-440spe", "ibm,iic-440gp", "ibm,iic";
200 reg = <10000500 14>; 198 reg = <10000500 14>;
201 interrupt-parent = <&UIC0>; 199 interrupt-parent = <&UIC0>;
diff --git a/arch/powerpc/boot/dts/kilauea.dts b/arch/powerpc/boot/dts/kilauea.dts
index 67c7ea179a07..8baef61f31cd 100644
--- a/arch/powerpc/boot/dts/kilauea.dts
+++ b/arch/powerpc/boot/dts/kilauea.dts
@@ -182,7 +182,6 @@
182 }; 182 };
183 183
184 IIC0: i2c@ef600400 { 184 IIC0: i2c@ef600400 {
185 device_type = "i2c";
186 compatible = "ibm,iic-405ex", "ibm,iic"; 185 compatible = "ibm,iic-405ex", "ibm,iic";
187 reg = <ef600400 14>; 186 reg = <ef600400 14>;
188 interrupt-parent = <&UIC0>; 187 interrupt-parent = <&UIC0>;
@@ -190,7 +189,6 @@
190 }; 189 };
191 190
192 IIC1: i2c@ef600500 { 191 IIC1: i2c@ef600500 {
193 device_type = "i2c";
194 compatible = "ibm,iic-405ex", "ibm,iic"; 192 compatible = "ibm,iic-405ex", "ibm,iic";
195 reg = <ef600500 14>; 193 reg = <ef600500 14>;
196 interrupt-parent = <&UIC0>; 194 interrupt-parent = <&UIC0>;
@@ -199,7 +197,6 @@
199 197
200 198
201 RGMII0: emac-rgmii@ef600b00 { 199 RGMII0: emac-rgmii@ef600b00 {
202 device_type = "rgmii-interface";
203 compatible = "ibm,rgmii-405ex", "ibm,rgmii"; 200 compatible = "ibm,rgmii-405ex", "ibm,rgmii";
204 reg = <ef600b00 104>; 201 reg = <ef600b00 104>;
205 has-mdio; 202 has-mdio;
diff --git a/arch/powerpc/boot/dts/makalu.dts b/arch/powerpc/boot/dts/makalu.dts
index bdd70e4596ae..710c01168179 100644
--- a/arch/powerpc/boot/dts/makalu.dts
+++ b/arch/powerpc/boot/dts/makalu.dts
@@ -182,7 +182,6 @@
182 }; 182 };
183 183
184 IIC0: i2c@ef600400 { 184 IIC0: i2c@ef600400 {
185 device_type = "i2c";
186 compatible = "ibm,iic-405ex", "ibm,iic"; 185 compatible = "ibm,iic-405ex", "ibm,iic";
187 reg = <ef600400 14>; 186 reg = <ef600400 14>;
188 interrupt-parent = <&UIC0>; 187 interrupt-parent = <&UIC0>;
@@ -190,7 +189,6 @@
190 }; 189 };
191 190
192 IIC1: i2c@ef600500 { 191 IIC1: i2c@ef600500 {
193 device_type = "i2c";
194 compatible = "ibm,iic-405ex", "ibm,iic"; 192 compatible = "ibm,iic-405ex", "ibm,iic";
195 reg = <ef600500 14>; 193 reg = <ef600500 14>;
196 interrupt-parent = <&UIC0>; 194 interrupt-parent = <&UIC0>;
@@ -199,7 +197,6 @@
199 197
200 198
201 RGMII0: emac-rgmii@ef600b00 { 199 RGMII0: emac-rgmii@ef600b00 {
202 device_type = "rgmii-interface";
203 compatible = "ibm,rgmii-405ex", "ibm,rgmii"; 200 compatible = "ibm,rgmii-405ex", "ibm,rgmii";
204 reg = <ef600b00 104>; 201 reg = <ef600b00 104>;
205 has-mdio; 202 has-mdio;
diff --git a/arch/powerpc/boot/dts/rainier.dts b/arch/powerpc/boot/dts/rainier.dts
index d3c2ac394ce9..f947c75a2e94 100644
--- a/arch/powerpc/boot/dts/rainier.dts
+++ b/arch/powerpc/boot/dts/rainier.dts
@@ -229,7 +229,6 @@
229 }; 229 };
230 230
231 IIC0: i2c@ef600700 { 231 IIC0: i2c@ef600700 {
232 device_type = "i2c";
233 compatible = "ibm,iic-440grx", "ibm,iic"; 232 compatible = "ibm,iic-440grx", "ibm,iic";
234 reg = <ef600700 14>; 233 reg = <ef600700 14>;
235 interrupt-parent = <&UIC0>; 234 interrupt-parent = <&UIC0>;
@@ -237,7 +236,6 @@
237 }; 236 };
238 237
239 IIC1: i2c@ef600800 { 238 IIC1: i2c@ef600800 {
240 device_type = "i2c";
241 compatible = "ibm,iic-440grx", "ibm,iic"; 239 compatible = "ibm,iic-440grx", "ibm,iic";
242 reg = <ef600800 14>; 240 reg = <ef600800 14>;
243 interrupt-parent = <&UIC0>; 241 interrupt-parent = <&UIC0>;
@@ -245,13 +243,11 @@
245 }; 243 };
246 244
247 ZMII0: emac-zmii@ef600d00 { 245 ZMII0: emac-zmii@ef600d00 {
248 device_type = "zmii-interface";
249 compatible = "ibm,zmii-440grx", "ibm,zmii"; 246 compatible = "ibm,zmii-440grx", "ibm,zmii";
250 reg = <ef600d00 c>; 247 reg = <ef600d00 c>;
251 }; 248 };
252 249
253 RGMII0: emac-rgmii@ef601000 { 250 RGMII0: emac-rgmii@ef601000 {
254 device_type = "rgmii-interface";
255 compatible = "ibm,rgmii-440grx", "ibm,rgmii"; 251 compatible = "ibm,rgmii-440grx", "ibm,rgmii";
256 reg = <ef601000 8>; 252 reg = <ef601000 8>;
257 has-mdio; 253 has-mdio;
diff --git a/arch/powerpc/boot/dts/sequoia.dts b/arch/powerpc/boot/dts/sequoia.dts
index 5c13d46f441d..8db9515d7dc3 100644
--- a/arch/powerpc/boot/dts/sequoia.dts
+++ b/arch/powerpc/boot/dts/sequoia.dts
@@ -244,7 +244,6 @@
244 }; 244 };
245 245
246 IIC0: i2c@ef600700 { 246 IIC0: i2c@ef600700 {
247 device_type = "i2c";
248 compatible = "ibm,iic-440epx", "ibm,iic"; 247 compatible = "ibm,iic-440epx", "ibm,iic";
249 reg = <ef600700 14>; 248 reg = <ef600700 14>;
250 interrupt-parent = <&UIC0>; 249 interrupt-parent = <&UIC0>;
@@ -252,7 +251,6 @@
252 }; 251 };
253 252
254 IIC1: i2c@ef600800 { 253 IIC1: i2c@ef600800 {
255 device_type = "i2c";
256 compatible = "ibm,iic-440epx", "ibm,iic"; 254 compatible = "ibm,iic-440epx", "ibm,iic";
257 reg = <ef600800 14>; 255 reg = <ef600800 14>;
258 interrupt-parent = <&UIC0>; 256 interrupt-parent = <&UIC0>;
@@ -260,13 +258,11 @@
260 }; 258 };
261 259
262 ZMII0: emac-zmii@ef600d00 { 260 ZMII0: emac-zmii@ef600d00 {
263 device_type = "zmii-interface";
264 compatible = "ibm,zmii-440epx", "ibm,zmii"; 261 compatible = "ibm,zmii-440epx", "ibm,zmii";
265 reg = <ef600d00 c>; 262 reg = <ef600d00 c>;
266 }; 263 };
267 264
268 RGMII0: emac-rgmii@ef601000 { 265 RGMII0: emac-rgmii@ef601000 {
269 device_type = "rgmii-interface";
270 compatible = "ibm,rgmii-440epx", "ibm,rgmii"; 266 compatible = "ibm,rgmii-440epx", "ibm,rgmii";
271 reg = <ef601000 8>; 267 reg = <ef601000 8>;
272 has-mdio; 268 has-mdio;
diff --git a/arch/powerpc/boot/dts/taishan.dts b/arch/powerpc/boot/dts/taishan.dts
index 0706a4a13b9f..8278068c802c 100644
--- a/arch/powerpc/boot/dts/taishan.dts
+++ b/arch/powerpc/boot/dts/taishan.dts
@@ -203,7 +203,6 @@
203 203
204 IIC0: i2c@40000400 { 204 IIC0: i2c@40000400 {
205 /* FIXME */ 205 /* FIXME */
206 device_type = "i2c";
207 compatible = "ibm,iic-440gp", "ibm,iic"; 206 compatible = "ibm,iic-440gp", "ibm,iic";
208 reg = <40000400 14>; 207 reg = <40000400 14>;
209 interrupt-parent = <&UIC0>; 208 interrupt-parent = <&UIC0>;
@@ -211,7 +210,6 @@
211 }; 210 };
212 IIC1: i2c@40000500 { 211 IIC1: i2c@40000500 {
213 /* FIXME */ 212 /* FIXME */
214 device_type = "i2c";
215 compatible = "ibm,iic-440gp", "ibm,iic"; 213 compatible = "ibm,iic-440gp", "ibm,iic";
216 reg = <40000500 14>; 214 reg = <40000500 14>;
217 interrupt-parent = <&UIC0>; 215 interrupt-parent = <&UIC0>;
@@ -225,13 +223,11 @@
225 }; 223 };
226 224
227 ZMII0: emac-zmii@40000780 { 225 ZMII0: emac-zmii@40000780 {
228 device_type = "zgmii-interface";
229 compatible = "ibm,zmii-440gx", "ibm,zmii"; 226 compatible = "ibm,zmii-440gx", "ibm,zmii";
230 reg = <40000780 c>; 227 reg = <40000780 c>;
231 }; 228 };
232 229
233 RGMII0: emac-rgmii@40000790 { 230 RGMII0: emac-rgmii@40000790 {
234 device_type = "rgmii-interface";
235 compatible = "ibm,rgmii"; 231 compatible = "ibm,rgmii";
236 reg = <40000790 8>; 232 reg = <40000790 8>;
237 }; 233 };
diff --git a/arch/powerpc/configs/bamboo_defconfig b/arch/powerpc/configs/bamboo_defconfig
index 1ed9afc9b281..c44db554cdc6 100644
--- a/arch/powerpc/configs/bamboo_defconfig
+++ b/arch/powerpc/configs/bamboo_defconfig
@@ -1,7 +1,7 @@
1# 1#
2# Automatically generated make config: don't edit 2# Automatically generated make config: don't edit
3# Linux kernel version: 2.6.24-rc6 3# Linux kernel version: 2.6.25-rc2
4# Mon Dec 24 10:49:50 2007 4# Fri Feb 15 21:36:39 2008
5# 5#
6# CONFIG_PPC64 is not set 6# CONFIG_PPC64 is not set
7 7
@@ -30,6 +30,7 @@ CONFIG_GENERIC_TIME=y
30CONFIG_GENERIC_TIME_VSYSCALL=y 30CONFIG_GENERIC_TIME_VSYSCALL=y
31CONFIG_GENERIC_CLOCKEVENTS=y 31CONFIG_GENERIC_CLOCKEVENTS=y
32CONFIG_GENERIC_HARDIRQS=y 32CONFIG_GENERIC_HARDIRQS=y
33# CONFIG_HAVE_SETUP_PER_CPU_AREA is not set
33CONFIG_IRQ_PER_CPU=y 34CONFIG_IRQ_PER_CPU=y
34CONFIG_RWSEM_XCHGADD_ALGORITHM=y 35CONFIG_RWSEM_XCHGADD_ALGORITHM=y
35CONFIG_ARCH_HAS_ILOG2_U32=y 36CONFIG_ARCH_HAS_ILOG2_U32=y
@@ -68,17 +69,18 @@ CONFIG_SYSVIPC_SYSCTL=y
68CONFIG_POSIX_MQUEUE=y 69CONFIG_POSIX_MQUEUE=y
69# CONFIG_BSD_PROCESS_ACCT is not set 70# CONFIG_BSD_PROCESS_ACCT is not set
70# CONFIG_TASKSTATS is not set 71# CONFIG_TASKSTATS is not set
71# CONFIG_USER_NS is not set
72# CONFIG_PID_NS is not set
73# CONFIG_AUDIT is not set 72# CONFIG_AUDIT is not set
74# CONFIG_IKCONFIG is not set 73# CONFIG_IKCONFIG is not set
75CONFIG_LOG_BUF_SHIFT=14 74CONFIG_LOG_BUF_SHIFT=14
76# CONFIG_CGROUPS is not set 75# CONFIG_CGROUPS is not set
76CONFIG_GROUP_SCHED=y
77CONFIG_FAIR_GROUP_SCHED=y 77CONFIG_FAIR_GROUP_SCHED=y
78CONFIG_FAIR_USER_SCHED=y 78# CONFIG_RT_GROUP_SCHED is not set
79# CONFIG_FAIR_CGROUP_SCHED is not set 79CONFIG_USER_SCHED=y
80# CONFIG_CGROUP_SCHED is not set
80CONFIG_SYSFS_DEPRECATED=y 81CONFIG_SYSFS_DEPRECATED=y
81# CONFIG_RELAY is not set 82# CONFIG_RELAY is not set
83# CONFIG_NAMESPACES is not set
82CONFIG_BLK_DEV_INITRD=y 84CONFIG_BLK_DEV_INITRD=y
83CONFIG_INITRAMFS_SOURCE="" 85CONFIG_INITRAMFS_SOURCE=""
84# CONFIG_CC_OPTIMIZE_FOR_SIZE is not set 86# CONFIG_CC_OPTIMIZE_FOR_SIZE is not set
@@ -92,11 +94,13 @@ CONFIG_HOTPLUG=y
92CONFIG_PRINTK=y 94CONFIG_PRINTK=y
93CONFIG_BUG=y 95CONFIG_BUG=y
94CONFIG_ELF_CORE=y 96CONFIG_ELF_CORE=y
97CONFIG_COMPAT_BRK=y
95CONFIG_BASE_FULL=y 98CONFIG_BASE_FULL=y
96CONFIG_FUTEX=y 99CONFIG_FUTEX=y
97CONFIG_ANON_INODES=y 100CONFIG_ANON_INODES=y
98CONFIG_EPOLL=y 101CONFIG_EPOLL=y
99CONFIG_SIGNALFD=y 102CONFIG_SIGNALFD=y
103CONFIG_TIMERFD=y
100CONFIG_EVENTFD=y 104CONFIG_EVENTFD=y
101CONFIG_SHMEM=y 105CONFIG_SHMEM=y
102CONFIG_VM_EVENT_COUNTERS=y 106CONFIG_VM_EVENT_COUNTERS=y
@@ -104,6 +108,13 @@ CONFIG_SLUB_DEBUG=y
104# CONFIG_SLAB is not set 108# CONFIG_SLAB is not set
105CONFIG_SLUB=y 109CONFIG_SLUB=y
106# CONFIG_SLOB is not set 110# CONFIG_SLOB is not set
111# CONFIG_PROFILING is not set
112# CONFIG_MARKERS is not set
113CONFIG_HAVE_OPROFILE=y
114# CONFIG_KPROBES is not set
115CONFIG_HAVE_KPROBES=y
116CONFIG_PROC_PAGE_MONITOR=y
117CONFIG_SLABINFO=y
107CONFIG_RT_MUTEXES=y 118CONFIG_RT_MUTEXES=y
108# CONFIG_TINY_SHMEM is not set 119# CONFIG_TINY_SHMEM is not set
109CONFIG_BASE_SMALL=0 120CONFIG_BASE_SMALL=0
@@ -131,13 +142,15 @@ CONFIG_DEFAULT_AS=y
131# CONFIG_DEFAULT_CFQ is not set 142# CONFIG_DEFAULT_CFQ is not set
132# CONFIG_DEFAULT_NOOP is not set 143# CONFIG_DEFAULT_NOOP is not set
133CONFIG_DEFAULT_IOSCHED="anticipatory" 144CONFIG_DEFAULT_IOSCHED="anticipatory"
145CONFIG_CLASSIC_RCU=y
146# CONFIG_PREEMPT_RCU is not set
134# CONFIG_PPC4xx_PCI_EXPRESS is not set 147# CONFIG_PPC4xx_PCI_EXPRESS is not set
135 148
136# 149#
137# Platform support 150# Platform support
138# 151#
139# CONFIG_PPC_MPC52xx is not set 152# CONFIG_PPC_MPC512x is not set
140# CONFIG_PPC_MPC5200 is not set 153# CONFIG_PPC_MPC5121 is not set
141# CONFIG_PPC_CELL is not set 154# CONFIG_PPC_CELL is not set
142# CONFIG_PPC_CELL_NATIVE is not set 155# CONFIG_PPC_CELL_NATIVE is not set
143# CONFIG_PQ2ADS is not set 156# CONFIG_PQ2ADS is not set
@@ -147,8 +160,10 @@ CONFIG_BAMBOO=y
147# CONFIG_TAISHAN is not set 160# CONFIG_TAISHAN is not set
148# CONFIG_KATMAI is not set 161# CONFIG_KATMAI is not set
149# CONFIG_RAINIER is not set 162# CONFIG_RAINIER is not set
163# CONFIG_WARP is not set
150CONFIG_440EP=y 164CONFIG_440EP=y
151CONFIG_IBM440EP_ERR42=y 165CONFIG_IBM440EP_ERR42=y
166# CONFIG_IPIC is not set
152# CONFIG_MPIC is not set 167# CONFIG_MPIC is not set
153# CONFIG_MPIC_WEIRD is not set 168# CONFIG_MPIC_WEIRD is not set
154# CONFIG_PPC_I8259 is not set 169# CONFIG_PPC_I8259 is not set
@@ -159,7 +174,6 @@ CONFIG_IBM440EP_ERR42=y
159# CONFIG_PPC_INDIRECT_IO is not set 174# CONFIG_PPC_INDIRECT_IO is not set
160# CONFIG_GENERIC_IOMAP is not set 175# CONFIG_GENERIC_IOMAP is not set
161# CONFIG_CPU_FREQ is not set 176# CONFIG_CPU_FREQ is not set
162# CONFIG_CPM2 is not set
163# CONFIG_FSL_ULI1575 is not set 177# CONFIG_FSL_ULI1575 is not set
164 178
165# 179#
@@ -175,13 +189,18 @@ CONFIG_HZ_250=y
175# CONFIG_HZ_300 is not set 189# CONFIG_HZ_300 is not set
176# CONFIG_HZ_1000 is not set 190# CONFIG_HZ_1000 is not set
177CONFIG_HZ=250 191CONFIG_HZ=250
192# CONFIG_SCHED_HRTICK is not set
178CONFIG_PREEMPT_NONE=y 193CONFIG_PREEMPT_NONE=y
179# CONFIG_PREEMPT_VOLUNTARY is not set 194# CONFIG_PREEMPT_VOLUNTARY is not set
180# CONFIG_PREEMPT is not set 195# CONFIG_PREEMPT is not set
196CONFIG_RCU_TRACE=y
181CONFIG_BINFMT_ELF=y 197CONFIG_BINFMT_ELF=y
182# CONFIG_BINFMT_MISC is not set 198# CONFIG_BINFMT_MISC is not set
183# CONFIG_MATH_EMULATION is not set 199# CONFIG_MATH_EMULATION is not set
200# CONFIG_IOMMU_HELPER is not set
184CONFIG_ARCH_ENABLE_MEMORY_HOTPLUG=y 201CONFIG_ARCH_ENABLE_MEMORY_HOTPLUG=y
202CONFIG_ARCH_HAS_WALK_MEMORY=y
203CONFIG_ARCH_ENABLE_MEMORY_HOTREMOVE=y
185CONFIG_ARCH_FLATMEM_ENABLE=y 204CONFIG_ARCH_FLATMEM_ENABLE=y
186CONFIG_ARCH_POPULATES_NODE_MAP=y 205CONFIG_ARCH_POPULATES_NODE_MAP=y
187CONFIG_SELECT_MEMORY_MODEL=y 206CONFIG_SELECT_MEMORY_MODEL=y
@@ -201,8 +220,6 @@ CONFIG_PROC_DEVICETREE=y
201CONFIG_CMDLINE_BOOL=y 220CONFIG_CMDLINE_BOOL=y
202CONFIG_CMDLINE="" 221CONFIG_CMDLINE=""
203CONFIG_SECCOMP=y 222CONFIG_SECCOMP=y
204CONFIG_WANT_DEVICE_TREE=y
205CONFIG_DEVICE_TREE="bamboo.dts"
206CONFIG_ISA_DMA_API=y 223CONFIG_ISA_DMA_API=y
207 224
208# 225#
@@ -302,6 +319,7 @@ CONFIG_DEFAULT_TCP_CONG="cubic"
302# 319#
303# CONFIG_NET_PKTGEN is not set 320# CONFIG_NET_PKTGEN is not set
304# CONFIG_HAMRADIO is not set 321# CONFIG_HAMRADIO is not set
322# CONFIG_CAN is not set
305# CONFIG_IRDA is not set 323# CONFIG_IRDA is not set
306# CONFIG_BT is not set 324# CONFIG_BT is not set
307# CONFIG_AF_RXRPC is not set 325# CONFIG_AF_RXRPC is not set
@@ -348,7 +366,7 @@ CONFIG_BLK_DEV=y
348CONFIG_BLK_DEV_RAM=y 366CONFIG_BLK_DEV_RAM=y
349CONFIG_BLK_DEV_RAM_COUNT=16 367CONFIG_BLK_DEV_RAM_COUNT=16
350CONFIG_BLK_DEV_RAM_SIZE=35000 368CONFIG_BLK_DEV_RAM_SIZE=35000
351CONFIG_BLK_DEV_RAM_BLOCKSIZE=1024 369# CONFIG_BLK_DEV_XIP is not set
352# CONFIG_CDROM_PKTCDVD is not set 370# CONFIG_CDROM_PKTCDVD is not set
353# CONFIG_ATA_OVER_ETH is not set 371# CONFIG_ATA_OVER_ETH is not set
354# CONFIG_XILINX_SYSACE is not set 372# CONFIG_XILINX_SYSACE is not set
@@ -357,6 +375,8 @@ CONFIG_MISC_DEVICES=y
357# CONFIG_EEPROM_93CX6 is not set 375# CONFIG_EEPROM_93CX6 is not set
358# CONFIG_SGI_IOC4 is not set 376# CONFIG_SGI_IOC4 is not set
359# CONFIG_TIFM_CORE is not set 377# CONFIG_TIFM_CORE is not set
378# CONFIG_ENCLOSURE_SERVICES is not set
379CONFIG_HAVE_IDE=y
360# CONFIG_IDE is not set 380# CONFIG_IDE is not set
361 381
362# 382#
@@ -385,7 +405,6 @@ CONFIG_NETDEVICES=y
385# CONFIG_EQUALIZER is not set 405# CONFIG_EQUALIZER is not set
386# CONFIG_TUN is not set 406# CONFIG_TUN is not set
387# CONFIG_VETH is not set 407# CONFIG_VETH is not set
388# CONFIG_IP1000 is not set
389# CONFIG_ARCNET is not set 408# CONFIG_ARCNET is not set
390# CONFIG_PHYLIB is not set 409# CONFIG_PHYLIB is not set
391CONFIG_NET_ETHERNET=y 410CONFIG_NET_ETHERNET=y
@@ -414,6 +433,9 @@ CONFIG_NETDEV_1000=y
414# CONFIG_DL2K is not set 433# CONFIG_DL2K is not set
415# CONFIG_E1000 is not set 434# CONFIG_E1000 is not set
416# CONFIG_E1000E is not set 435# CONFIG_E1000E is not set
436# CONFIG_E1000E_ENABLED is not set
437# CONFIG_IP1000 is not set
438# CONFIG_IGB is not set
417# CONFIG_NS83820 is not set 439# CONFIG_NS83820 is not set
418# CONFIG_HAMACHI is not set 440# CONFIG_HAMACHI is not set
419# CONFIG_YELLOWFIN is not set 441# CONFIG_YELLOWFIN is not set
@@ -438,6 +460,7 @@ CONFIG_NETDEV_10000=y
438# CONFIG_NIU is not set 460# CONFIG_NIU is not set
439# CONFIG_MLX4_CORE is not set 461# CONFIG_MLX4_CORE is not set
440# CONFIG_TEHUTI is not set 462# CONFIG_TEHUTI is not set
463# CONFIG_BNX2X is not set
441# CONFIG_TR is not set 464# CONFIG_TR is not set
442 465
443# 466#
@@ -450,7 +473,6 @@ CONFIG_NETDEV_10000=y
450# CONFIG_HIPPI is not set 473# CONFIG_HIPPI is not set
451# CONFIG_PPP is not set 474# CONFIG_PPP is not set
452# CONFIG_SLIP is not set 475# CONFIG_SLIP is not set
453# CONFIG_SHAPER is not set
454# CONFIG_NETCONSOLE is not set 476# CONFIG_NETCONSOLE is not set
455# CONFIG_NETPOLL is not set 477# CONFIG_NETPOLL is not set
456# CONFIG_NET_POLL_CONTROLLER is not set 478# CONFIG_NET_POLL_CONTROLLER is not set
@@ -473,6 +495,7 @@ CONFIG_NETDEV_10000=y
473# 495#
474# CONFIG_VT is not set 496# CONFIG_VT is not set
475# CONFIG_SERIAL_NONSTANDARD is not set 497# CONFIG_SERIAL_NONSTANDARD is not set
498# CONFIG_NOZOMI is not set
476 499
477# 500#
478# Serial drivers 501# Serial drivers
@@ -518,6 +541,7 @@ CONFIG_DEVPORT=y
518# CONFIG_W1 is not set 541# CONFIG_W1 is not set
519# CONFIG_POWER_SUPPLY is not set 542# CONFIG_POWER_SUPPLY is not set
520# CONFIG_HWMON is not set 543# CONFIG_HWMON is not set
544CONFIG_THERMAL=y
521# CONFIG_WATCHDOG is not set 545# CONFIG_WATCHDOG is not set
522 546
523# 547#
@@ -566,12 +590,9 @@ CONFIG_USB_ARCH_HAS_EHCI=y
566# 590#
567# NOTE: USB_STORAGE enables SCSI, and 'SCSI disk support' 591# NOTE: USB_STORAGE enables SCSI, and 'SCSI disk support'
568# 592#
569
570#
571# USB Gadget Support
572#
573# CONFIG_USB_GADGET is not set 593# CONFIG_USB_GADGET is not set
574# CONFIG_MMC is not set 594# CONFIG_MMC is not set
595# CONFIG_MEMSTICK is not set
575# CONFIG_NEW_LEDS is not set 596# CONFIG_NEW_LEDS is not set
576# CONFIG_INFINIBAND is not set 597# CONFIG_INFINIBAND is not set
577# CONFIG_EDAC is not set 598# CONFIG_EDAC is not set
@@ -596,12 +617,10 @@ CONFIG_EXT2_FS=y
596# CONFIG_XFS_FS is not set 617# CONFIG_XFS_FS is not set
597# CONFIG_GFS2_FS is not set 618# CONFIG_GFS2_FS is not set
598# CONFIG_OCFS2_FS is not set 619# CONFIG_OCFS2_FS is not set
599# CONFIG_MINIX_FS is not set 620CONFIG_DNOTIFY=y
600# CONFIG_ROMFS_FS is not set
601CONFIG_INOTIFY=y 621CONFIG_INOTIFY=y
602CONFIG_INOTIFY_USER=y 622CONFIG_INOTIFY_USER=y
603# CONFIG_QUOTA is not set 623# CONFIG_QUOTA is not set
604CONFIG_DNOTIFY=y
605# CONFIG_AUTOFS_FS is not set 624# CONFIG_AUTOFS_FS is not set
606# CONFIG_AUTOFS4_FS is not set 625# CONFIG_AUTOFS4_FS is not set
607# CONFIG_FUSE_FS is not set 626# CONFIG_FUSE_FS is not set
@@ -643,8 +662,10 @@ CONFIG_TMPFS=y
643# CONFIG_EFS_FS is not set 662# CONFIG_EFS_FS is not set
644CONFIG_CRAMFS=y 663CONFIG_CRAMFS=y
645# CONFIG_VXFS_FS is not set 664# CONFIG_VXFS_FS is not set
665# CONFIG_MINIX_FS is not set
646# CONFIG_HPFS_FS is not set 666# CONFIG_HPFS_FS is not set
647# CONFIG_QNX4FS_FS is not set 667# CONFIG_QNX4FS_FS is not set
668# CONFIG_ROMFS_FS is not set
648# CONFIG_SYSV_FS is not set 669# CONFIG_SYSV_FS is not set
649# CONFIG_UFS_FS is not set 670# CONFIG_UFS_FS is not set
650CONFIG_NETWORK_FILESYSTEMS=y 671CONFIG_NETWORK_FILESYSTEMS=y
@@ -675,7 +696,6 @@ CONFIG_SUNRPC=y
675CONFIG_MSDOS_PARTITION=y 696CONFIG_MSDOS_PARTITION=y
676# CONFIG_NLS is not set 697# CONFIG_NLS is not set
677# CONFIG_DLM is not set 698# CONFIG_DLM is not set
678# CONFIG_UCC_SLOW is not set
679 699
680# 700#
681# Library routines 701# Library routines
@@ -692,10 +712,6 @@ CONFIG_PLIST=y
692CONFIG_HAS_IOMEM=y 712CONFIG_HAS_IOMEM=y
693CONFIG_HAS_IOPORT=y 713CONFIG_HAS_IOPORT=y
694CONFIG_HAS_DMA=y 714CONFIG_HAS_DMA=y
695CONFIG_INSTRUMENTATION=y
696# CONFIG_PROFILING is not set
697# CONFIG_KPROBES is not set
698# CONFIG_MARKERS is not set
699 715
700# 716#
701# Kernel hacking 717# Kernel hacking
@@ -705,7 +721,7 @@ CONFIG_ENABLE_WARN_DEPRECATED=y
705CONFIG_ENABLE_MUST_CHECK=y 721CONFIG_ENABLE_MUST_CHECK=y
706CONFIG_MAGIC_SYSRQ=y 722CONFIG_MAGIC_SYSRQ=y
707# CONFIG_UNUSED_SYMBOLS is not set 723# CONFIG_UNUSED_SYMBOLS is not set
708# CONFIG_DEBUG_FS is not set 724CONFIG_DEBUG_FS=y
709# CONFIG_HEADERS_CHECK is not set 725# CONFIG_HEADERS_CHECK is not set
710CONFIG_DEBUG_KERNEL=y 726CONFIG_DEBUG_KERNEL=y
711# CONFIG_DEBUG_SHIRQ is not set 727# CONFIG_DEBUG_SHIRQ is not set
@@ -714,6 +730,7 @@ CONFIG_SCHED_DEBUG=y
714# CONFIG_SCHEDSTATS is not set 730# CONFIG_SCHEDSTATS is not set
715# CONFIG_TIMER_STATS is not set 731# CONFIG_TIMER_STATS is not set
716# CONFIG_SLUB_DEBUG_ON is not set 732# CONFIG_SLUB_DEBUG_ON is not set
733# CONFIG_SLUB_STATS is not set
717# CONFIG_DEBUG_RT_MUTEXES is not set 734# CONFIG_DEBUG_RT_MUTEXES is not set
718# CONFIG_RT_MUTEX_TESTER is not set 735# CONFIG_RT_MUTEX_TESTER is not set
719# CONFIG_DEBUG_SPINLOCK is not set 736# CONFIG_DEBUG_SPINLOCK is not set
@@ -726,9 +743,9 @@ CONFIG_SCHED_DEBUG=y
726# CONFIG_DEBUG_VM is not set 743# CONFIG_DEBUG_VM is not set
727# CONFIG_DEBUG_LIST is not set 744# CONFIG_DEBUG_LIST is not set
728# CONFIG_DEBUG_SG is not set 745# CONFIG_DEBUG_SG is not set
729CONFIG_FORCED_INLINING=y
730# CONFIG_BOOT_PRINTK_DELAY is not set 746# CONFIG_BOOT_PRINTK_DELAY is not set
731# CONFIG_RCU_TORTURE_TEST is not set 747# CONFIG_RCU_TORTURE_TEST is not set
748# CONFIG_BACKTRACE_SELF_TEST is not set
732# CONFIG_FAULT_INJECTION is not set 749# CONFIG_FAULT_INJECTION is not set
733# CONFIG_SAMPLES is not set 750# CONFIG_SAMPLES is not set
734# CONFIG_DEBUG_STACKOVERFLOW is not set 751# CONFIG_DEBUG_STACKOVERFLOW is not set
@@ -737,6 +754,7 @@ CONFIG_FORCED_INLINING=y
737CONFIG_DEBUGGER=y 754CONFIG_DEBUGGER=y
738# CONFIG_KGDB is not set 755# CONFIG_KGDB is not set
739# CONFIG_XMON is not set 756# CONFIG_XMON is not set
757# CONFIG_VIRQ_DEBUG is not set
740# CONFIG_BDI_SWITCH is not set 758# CONFIG_BDI_SWITCH is not set
741# CONFIG_PPC_EARLY_DEBUG is not set 759# CONFIG_PPC_EARLY_DEBUG is not set
742 760
@@ -749,6 +767,7 @@ CONFIG_DEBUGGER=y
749CONFIG_CRYPTO=y 767CONFIG_CRYPTO=y
750CONFIG_CRYPTO_ALGAPI=y 768CONFIG_CRYPTO_ALGAPI=y
751CONFIG_CRYPTO_BLKCIPHER=y 769CONFIG_CRYPTO_BLKCIPHER=y
770# CONFIG_CRYPTO_SEQIV is not set
752CONFIG_CRYPTO_MANAGER=y 771CONFIG_CRYPTO_MANAGER=y
753# CONFIG_CRYPTO_HMAC is not set 772# CONFIG_CRYPTO_HMAC is not set
754# CONFIG_CRYPTO_XCBC is not set 773# CONFIG_CRYPTO_XCBC is not set
@@ -766,6 +785,9 @@ CONFIG_CRYPTO_CBC=y
766CONFIG_CRYPTO_PCBC=y 785CONFIG_CRYPTO_PCBC=y
767# CONFIG_CRYPTO_LRW is not set 786# CONFIG_CRYPTO_LRW is not set
768# CONFIG_CRYPTO_XTS is not set 787# CONFIG_CRYPTO_XTS is not set
788# CONFIG_CRYPTO_CTR is not set
789# CONFIG_CRYPTO_GCM is not set
790# CONFIG_CRYPTO_CCM is not set
769# CONFIG_CRYPTO_CRYPTD is not set 791# CONFIG_CRYPTO_CRYPTD is not set
770CONFIG_CRYPTO_DES=y 792CONFIG_CRYPTO_DES=y
771# CONFIG_CRYPTO_FCRYPT is not set 793# CONFIG_CRYPTO_FCRYPT is not set
@@ -780,11 +802,14 @@ CONFIG_CRYPTO_DES=y
780# CONFIG_CRYPTO_KHAZAD is not set 802# CONFIG_CRYPTO_KHAZAD is not set
781# CONFIG_CRYPTO_ANUBIS is not set 803# CONFIG_CRYPTO_ANUBIS is not set
782# CONFIG_CRYPTO_SEED is not set 804# CONFIG_CRYPTO_SEED is not set
805# CONFIG_CRYPTO_SALSA20 is not set
783# CONFIG_CRYPTO_DEFLATE is not set 806# CONFIG_CRYPTO_DEFLATE is not set
784# CONFIG_CRYPTO_MICHAEL_MIC is not set 807# CONFIG_CRYPTO_MICHAEL_MIC is not set
785# CONFIG_CRYPTO_CRC32C is not set 808# CONFIG_CRYPTO_CRC32C is not set
786# CONFIG_CRYPTO_CAMELLIA is not set 809# CONFIG_CRYPTO_CAMELLIA is not set
787# CONFIG_CRYPTO_TEST is not set 810# CONFIG_CRYPTO_TEST is not set
788# CONFIG_CRYPTO_AUTHENC is not set 811# CONFIG_CRYPTO_AUTHENC is not set
812# CONFIG_CRYPTO_LZO is not set
789CONFIG_CRYPTO_HW=y 813CONFIG_CRYPTO_HW=y
814# CONFIG_CRYPTO_DEV_HIFN_795X is not set
790# CONFIG_PPC_CLOCK is not set 815# CONFIG_PPC_CLOCK is not set
diff --git a/arch/powerpc/configs/ebony_defconfig b/arch/powerpc/configs/ebony_defconfig
index cf860f166659..07c8d4ce175a 100644
--- a/arch/powerpc/configs/ebony_defconfig
+++ b/arch/powerpc/configs/ebony_defconfig
@@ -1,7 +1,7 @@
1# 1#
2# Automatically generated make config: don't edit 2# Automatically generated make config: don't edit
3# Linux kernel version: 2.6.24-rc6 3# Linux kernel version: 2.6.25-rc2
4# Mon Dec 24 11:16:26 2007 4# Fri Feb 15 21:50:44 2008
5# 5#
6# CONFIG_PPC64 is not set 6# CONFIG_PPC64 is not set
7 7
@@ -29,6 +29,7 @@ CONFIG_GENERIC_TIME=y
29CONFIG_GENERIC_TIME_VSYSCALL=y 29CONFIG_GENERIC_TIME_VSYSCALL=y
30CONFIG_GENERIC_CLOCKEVENTS=y 30CONFIG_GENERIC_CLOCKEVENTS=y
31CONFIG_GENERIC_HARDIRQS=y 31CONFIG_GENERIC_HARDIRQS=y
32# CONFIG_HAVE_SETUP_PER_CPU_AREA is not set
32CONFIG_IRQ_PER_CPU=y 33CONFIG_IRQ_PER_CPU=y
33CONFIG_RWSEM_XCHGADD_ALGORITHM=y 34CONFIG_RWSEM_XCHGADD_ALGORITHM=y
34CONFIG_ARCH_HAS_ILOG2_U32=y 35CONFIG_ARCH_HAS_ILOG2_U32=y
@@ -67,17 +68,18 @@ CONFIG_SYSVIPC_SYSCTL=y
67CONFIG_POSIX_MQUEUE=y 68CONFIG_POSIX_MQUEUE=y
68# CONFIG_BSD_PROCESS_ACCT is not set 69# CONFIG_BSD_PROCESS_ACCT is not set
69# CONFIG_TASKSTATS is not set 70# CONFIG_TASKSTATS is not set
70# CONFIG_USER_NS is not set
71# CONFIG_PID_NS is not set
72# CONFIG_AUDIT is not set 71# CONFIG_AUDIT is not set
73# CONFIG_IKCONFIG is not set 72# CONFIG_IKCONFIG is not set
74CONFIG_LOG_BUF_SHIFT=14 73CONFIG_LOG_BUF_SHIFT=14
75# CONFIG_CGROUPS is not set 74# CONFIG_CGROUPS is not set
75CONFIG_GROUP_SCHED=y
76CONFIG_FAIR_GROUP_SCHED=y 76CONFIG_FAIR_GROUP_SCHED=y
77CONFIG_FAIR_USER_SCHED=y 77# CONFIG_RT_GROUP_SCHED is not set
78# CONFIG_FAIR_CGROUP_SCHED is not set 78CONFIG_USER_SCHED=y
79# CONFIG_CGROUP_SCHED is not set
79CONFIG_SYSFS_DEPRECATED=y 80CONFIG_SYSFS_DEPRECATED=y
80# CONFIG_RELAY is not set 81# CONFIG_RELAY is not set
82# CONFIG_NAMESPACES is not set
81CONFIG_BLK_DEV_INITRD=y 83CONFIG_BLK_DEV_INITRD=y
82CONFIG_INITRAMFS_SOURCE="" 84CONFIG_INITRAMFS_SOURCE=""
83# CONFIG_CC_OPTIMIZE_FOR_SIZE is not set 85# CONFIG_CC_OPTIMIZE_FOR_SIZE is not set
@@ -91,11 +93,13 @@ CONFIG_HOTPLUG=y
91CONFIG_PRINTK=y 93CONFIG_PRINTK=y
92CONFIG_BUG=y 94CONFIG_BUG=y
93CONFIG_ELF_CORE=y 95CONFIG_ELF_CORE=y
96CONFIG_COMPAT_BRK=y
94CONFIG_BASE_FULL=y 97CONFIG_BASE_FULL=y
95CONFIG_FUTEX=y 98CONFIG_FUTEX=y
96CONFIG_ANON_INODES=y 99CONFIG_ANON_INODES=y
97CONFIG_EPOLL=y 100CONFIG_EPOLL=y
98CONFIG_SIGNALFD=y 101CONFIG_SIGNALFD=y
102CONFIG_TIMERFD=y
99CONFIG_EVENTFD=y 103CONFIG_EVENTFD=y
100CONFIG_SHMEM=y 104CONFIG_SHMEM=y
101CONFIG_VM_EVENT_COUNTERS=y 105CONFIG_VM_EVENT_COUNTERS=y
@@ -103,6 +107,13 @@ CONFIG_SLUB_DEBUG=y
103# CONFIG_SLAB is not set 107# CONFIG_SLAB is not set
104CONFIG_SLUB=y 108CONFIG_SLUB=y
105# CONFIG_SLOB is not set 109# CONFIG_SLOB is not set
110# CONFIG_PROFILING is not set
111# CONFIG_MARKERS is not set
112CONFIG_HAVE_OPROFILE=y
113# CONFIG_KPROBES is not set
114CONFIG_HAVE_KPROBES=y
115CONFIG_PROC_PAGE_MONITOR=y
116CONFIG_SLABINFO=y
106CONFIG_RT_MUTEXES=y 117CONFIG_RT_MUTEXES=y
107# CONFIG_TINY_SHMEM is not set 118# CONFIG_TINY_SHMEM is not set
108CONFIG_BASE_SMALL=0 119CONFIG_BASE_SMALL=0
@@ -130,13 +141,15 @@ CONFIG_DEFAULT_AS=y
130# CONFIG_DEFAULT_CFQ is not set 141# CONFIG_DEFAULT_CFQ is not set
131# CONFIG_DEFAULT_NOOP is not set 142# CONFIG_DEFAULT_NOOP is not set
132CONFIG_DEFAULT_IOSCHED="anticipatory" 143CONFIG_DEFAULT_IOSCHED="anticipatory"
144CONFIG_CLASSIC_RCU=y
145# CONFIG_PREEMPT_RCU is not set
133# CONFIG_PPC4xx_PCI_EXPRESS is not set 146# CONFIG_PPC4xx_PCI_EXPRESS is not set
134 147
135# 148#
136# Platform support 149# Platform support
137# 150#
138# CONFIG_PPC_MPC52xx is not set 151# CONFIG_PPC_MPC512x is not set
139# CONFIG_PPC_MPC5200 is not set 152# CONFIG_PPC_MPC5121 is not set
140# CONFIG_PPC_CELL is not set 153# CONFIG_PPC_CELL is not set
141# CONFIG_PPC_CELL_NATIVE is not set 154# CONFIG_PPC_CELL_NATIVE is not set
142# CONFIG_PQ2ADS is not set 155# CONFIG_PQ2ADS is not set
@@ -146,7 +159,9 @@ CONFIG_EBONY=y
146# CONFIG_TAISHAN is not set 159# CONFIG_TAISHAN is not set
147# CONFIG_KATMAI is not set 160# CONFIG_KATMAI is not set
148# CONFIG_RAINIER is not set 161# CONFIG_RAINIER is not set
162# CONFIG_WARP is not set
149CONFIG_440GP=y 163CONFIG_440GP=y
164# CONFIG_IPIC is not set
150# CONFIG_MPIC is not set 165# CONFIG_MPIC is not set
151# CONFIG_MPIC_WEIRD is not set 166# CONFIG_MPIC_WEIRD is not set
152# CONFIG_PPC_I8259 is not set 167# CONFIG_PPC_I8259 is not set
@@ -157,8 +172,8 @@ CONFIG_440GP=y
157# CONFIG_PPC_INDIRECT_IO is not set 172# CONFIG_PPC_INDIRECT_IO is not set
158# CONFIG_GENERIC_IOMAP is not set 173# CONFIG_GENERIC_IOMAP is not set
159# CONFIG_CPU_FREQ is not set 174# CONFIG_CPU_FREQ is not set
160# CONFIG_CPM2 is not set
161# CONFIG_FSL_ULI1575 is not set 175# CONFIG_FSL_ULI1575 is not set
176CONFIG_OF_RTC=y
162 177
163# 178#
164# Kernel options 179# Kernel options
@@ -173,13 +188,18 @@ CONFIG_HZ_250=y
173# CONFIG_HZ_300 is not set 188# CONFIG_HZ_300 is not set
174# CONFIG_HZ_1000 is not set 189# CONFIG_HZ_1000 is not set
175CONFIG_HZ=250 190CONFIG_HZ=250
191# CONFIG_SCHED_HRTICK is not set
176CONFIG_PREEMPT_NONE=y 192CONFIG_PREEMPT_NONE=y
177# CONFIG_PREEMPT_VOLUNTARY is not set 193# CONFIG_PREEMPT_VOLUNTARY is not set
178# CONFIG_PREEMPT is not set 194# CONFIG_PREEMPT is not set
195CONFIG_RCU_TRACE=y
179CONFIG_BINFMT_ELF=y 196CONFIG_BINFMT_ELF=y
180# CONFIG_BINFMT_MISC is not set 197# CONFIG_BINFMT_MISC is not set
181CONFIG_MATH_EMULATION=y 198CONFIG_MATH_EMULATION=y
199# CONFIG_IOMMU_HELPER is not set
182CONFIG_ARCH_ENABLE_MEMORY_HOTPLUG=y 200CONFIG_ARCH_ENABLE_MEMORY_HOTPLUG=y
201CONFIG_ARCH_HAS_WALK_MEMORY=y
202CONFIG_ARCH_ENABLE_MEMORY_HOTREMOVE=y
183CONFIG_ARCH_FLATMEM_ENABLE=y 203CONFIG_ARCH_FLATMEM_ENABLE=y
184CONFIG_ARCH_POPULATES_NODE_MAP=y 204CONFIG_ARCH_POPULATES_NODE_MAP=y
185CONFIG_SELECT_MEMORY_MODEL=y 205CONFIG_SELECT_MEMORY_MODEL=y
@@ -198,8 +218,6 @@ CONFIG_VIRT_TO_BUS=y
198CONFIG_PROC_DEVICETREE=y 218CONFIG_PROC_DEVICETREE=y
199# CONFIG_CMDLINE_BOOL is not set 219# CONFIG_CMDLINE_BOOL is not set
200CONFIG_SECCOMP=y 220CONFIG_SECCOMP=y
201CONFIG_WANT_DEVICE_TREE=y
202CONFIG_DEVICE_TREE="ebony.dts"
203CONFIG_ISA_DMA_API=y 221CONFIG_ISA_DMA_API=y
204 222
205# 223#
@@ -299,6 +317,7 @@ CONFIG_DEFAULT_TCP_CONG="cubic"
299# 317#
300# CONFIG_NET_PKTGEN is not set 318# CONFIG_NET_PKTGEN is not set
301# CONFIG_HAMRADIO is not set 319# CONFIG_HAMRADIO is not set
320# CONFIG_CAN is not set
302# CONFIG_IRDA is not set 321# CONFIG_IRDA is not set
303# CONFIG_BT is not set 322# CONFIG_BT is not set
304# CONFIG_AF_RXRPC is not set 323# CONFIG_AF_RXRPC is not set
@@ -335,6 +354,7 @@ CONFIG_MTD=y
335CONFIG_MTD_PARTITIONS=y 354CONFIG_MTD_PARTITIONS=y
336# CONFIG_MTD_REDBOOT_PARTS is not set 355# CONFIG_MTD_REDBOOT_PARTS is not set
337# CONFIG_MTD_CMDLINE_PARTS is not set 356# CONFIG_MTD_CMDLINE_PARTS is not set
357CONFIG_MTD_OF_PARTS=y
338 358
339# 359#
340# User Modules And Translation Layers 360# User Modules And Translation Layers
@@ -420,7 +440,7 @@ CONFIG_BLK_DEV=y
420CONFIG_BLK_DEV_RAM=y 440CONFIG_BLK_DEV_RAM=y
421CONFIG_BLK_DEV_RAM_COUNT=16 441CONFIG_BLK_DEV_RAM_COUNT=16
422CONFIG_BLK_DEV_RAM_SIZE=35000 442CONFIG_BLK_DEV_RAM_SIZE=35000
423CONFIG_BLK_DEV_RAM_BLOCKSIZE=1024 443# CONFIG_BLK_DEV_XIP is not set
424# CONFIG_CDROM_PKTCDVD is not set 444# CONFIG_CDROM_PKTCDVD is not set
425# CONFIG_ATA_OVER_ETH is not set 445# CONFIG_ATA_OVER_ETH is not set
426# CONFIG_XILINX_SYSACE is not set 446# CONFIG_XILINX_SYSACE is not set
@@ -429,6 +449,8 @@ CONFIG_MISC_DEVICES=y
429# CONFIG_EEPROM_93CX6 is not set 449# CONFIG_EEPROM_93CX6 is not set
430# CONFIG_SGI_IOC4 is not set 450# CONFIG_SGI_IOC4 is not set
431# CONFIG_TIFM_CORE is not set 451# CONFIG_TIFM_CORE is not set
452# CONFIG_ENCLOSURE_SERVICES is not set
453CONFIG_HAVE_IDE=y
432# CONFIG_IDE is not set 454# CONFIG_IDE is not set
433 455
434# 456#
@@ -457,7 +479,6 @@ CONFIG_NETDEVICES=y
457# CONFIG_EQUALIZER is not set 479# CONFIG_EQUALIZER is not set
458# CONFIG_TUN is not set 480# CONFIG_TUN is not set
459# CONFIG_VETH is not set 481# CONFIG_VETH is not set
460# CONFIG_IP1000 is not set
461# CONFIG_ARCNET is not set 482# CONFIG_ARCNET is not set
462# CONFIG_PHYLIB is not set 483# CONFIG_PHYLIB is not set
463CONFIG_NET_ETHERNET=y 484CONFIG_NET_ETHERNET=y
@@ -486,6 +507,9 @@ CONFIG_NETDEV_1000=y
486# CONFIG_DL2K is not set 507# CONFIG_DL2K is not set
487# CONFIG_E1000 is not set 508# CONFIG_E1000 is not set
488# CONFIG_E1000E is not set 509# CONFIG_E1000E is not set
510# CONFIG_E1000E_ENABLED is not set
511# CONFIG_IP1000 is not set
512# CONFIG_IGB is not set
489# CONFIG_NS83820 is not set 513# CONFIG_NS83820 is not set
490# CONFIG_HAMACHI is not set 514# CONFIG_HAMACHI is not set
491# CONFIG_YELLOWFIN is not set 515# CONFIG_YELLOWFIN is not set
@@ -510,6 +534,7 @@ CONFIG_NETDEV_10000=y
510# CONFIG_NIU is not set 534# CONFIG_NIU is not set
511# CONFIG_MLX4_CORE is not set 535# CONFIG_MLX4_CORE is not set
512# CONFIG_TEHUTI is not set 536# CONFIG_TEHUTI is not set
537# CONFIG_BNX2X is not set
513# CONFIG_TR is not set 538# CONFIG_TR is not set
514 539
515# 540#
@@ -522,7 +547,6 @@ CONFIG_NETDEV_10000=y
522# CONFIG_HIPPI is not set 547# CONFIG_HIPPI is not set
523# CONFIG_PPP is not set 548# CONFIG_PPP is not set
524# CONFIG_SLIP is not set 549# CONFIG_SLIP is not set
525# CONFIG_SHAPER is not set
526# CONFIG_NETCONSOLE is not set 550# CONFIG_NETCONSOLE is not set
527# CONFIG_NETPOLL is not set 551# CONFIG_NETPOLL is not set
528# CONFIG_NET_POLL_CONTROLLER is not set 552# CONFIG_NET_POLL_CONTROLLER is not set
@@ -545,6 +569,7 @@ CONFIG_NETDEV_10000=y
545# 569#
546# CONFIG_VT is not set 570# CONFIG_VT is not set
547# CONFIG_SERIAL_NONSTANDARD is not set 571# CONFIG_SERIAL_NONSTANDARD is not set
572# CONFIG_NOZOMI is not set
548 573
549# 574#
550# Serial drivers 575# Serial drivers
@@ -590,6 +615,7 @@ CONFIG_DEVPORT=y
590# CONFIG_W1 is not set 615# CONFIG_W1 is not set
591# CONFIG_POWER_SUPPLY is not set 616# CONFIG_POWER_SUPPLY is not set
592# CONFIG_HWMON is not set 617# CONFIG_HWMON is not set
618CONFIG_THERMAL=y
593# CONFIG_WATCHDOG is not set 619# CONFIG_WATCHDOG is not set
594 620
595# 621#
@@ -638,12 +664,9 @@ CONFIG_USB_ARCH_HAS_EHCI=y
638# 664#
639# NOTE: USB_STORAGE enables SCSI, and 'SCSI disk support' 665# NOTE: USB_STORAGE enables SCSI, and 'SCSI disk support'
640# 666#
641
642#
643# USB Gadget Support
644#
645# CONFIG_USB_GADGET is not set 667# CONFIG_USB_GADGET is not set
646# CONFIG_MMC is not set 668# CONFIG_MMC is not set
669# CONFIG_MEMSTICK is not set
647# CONFIG_NEW_LEDS is not set 670# CONFIG_NEW_LEDS is not set
648# CONFIG_INFINIBAND is not set 671# CONFIG_INFINIBAND is not set
649# CONFIG_EDAC is not set 672# CONFIG_EDAC is not set
@@ -668,12 +691,10 @@ CONFIG_EXT2_FS=y
668# CONFIG_XFS_FS is not set 691# CONFIG_XFS_FS is not set
669# CONFIG_GFS2_FS is not set 692# CONFIG_GFS2_FS is not set
670# CONFIG_OCFS2_FS is not set 693# CONFIG_OCFS2_FS is not set
671# CONFIG_MINIX_FS is not set 694CONFIG_DNOTIFY=y
672# CONFIG_ROMFS_FS is not set
673CONFIG_INOTIFY=y 695CONFIG_INOTIFY=y
674CONFIG_INOTIFY_USER=y 696CONFIG_INOTIFY_USER=y
675# CONFIG_QUOTA is not set 697# CONFIG_QUOTA is not set
676CONFIG_DNOTIFY=y
677# CONFIG_AUTOFS_FS is not set 698# CONFIG_AUTOFS_FS is not set
678# CONFIG_AUTOFS4_FS is not set 699# CONFIG_AUTOFS4_FS is not set
679# CONFIG_FUSE_FS is not set 700# CONFIG_FUSE_FS is not set
@@ -726,8 +747,10 @@ CONFIG_JFFS2_RTIME=y
726# CONFIG_JFFS2_RUBIN is not set 747# CONFIG_JFFS2_RUBIN is not set
727CONFIG_CRAMFS=y 748CONFIG_CRAMFS=y
728# CONFIG_VXFS_FS is not set 749# CONFIG_VXFS_FS is not set
750# CONFIG_MINIX_FS is not set
729# CONFIG_HPFS_FS is not set 751# CONFIG_HPFS_FS is not set
730# CONFIG_QNX4FS_FS is not set 752# CONFIG_QNX4FS_FS is not set
753# CONFIG_ROMFS_FS is not set
731# CONFIG_SYSV_FS is not set 754# CONFIG_SYSV_FS is not set
732# CONFIG_UFS_FS is not set 755# CONFIG_UFS_FS is not set
733CONFIG_NETWORK_FILESYSTEMS=y 756CONFIG_NETWORK_FILESYSTEMS=y
@@ -758,7 +781,6 @@ CONFIG_SUNRPC=y
758CONFIG_MSDOS_PARTITION=y 781CONFIG_MSDOS_PARTITION=y
759# CONFIG_NLS is not set 782# CONFIG_NLS is not set
760# CONFIG_DLM is not set 783# CONFIG_DLM is not set
761# CONFIG_UCC_SLOW is not set
762 784
763# 785#
764# Library routines 786# Library routines
@@ -776,7 +798,6 @@ CONFIG_PLIST=y
776CONFIG_HAS_IOMEM=y 798CONFIG_HAS_IOMEM=y
777CONFIG_HAS_IOPORT=y 799CONFIG_HAS_IOPORT=y
778CONFIG_HAS_DMA=y 800CONFIG_HAS_DMA=y
779# CONFIG_INSTRUMENTATION is not set
780 801
781# 802#
782# Kernel hacking 803# Kernel hacking
@@ -786,7 +807,7 @@ CONFIG_ENABLE_WARN_DEPRECATED=y
786CONFIG_ENABLE_MUST_CHECK=y 807CONFIG_ENABLE_MUST_CHECK=y
787CONFIG_MAGIC_SYSRQ=y 808CONFIG_MAGIC_SYSRQ=y
788# CONFIG_UNUSED_SYMBOLS is not set 809# CONFIG_UNUSED_SYMBOLS is not set
789# CONFIG_DEBUG_FS is not set 810CONFIG_DEBUG_FS=y
790# CONFIG_HEADERS_CHECK is not set 811# CONFIG_HEADERS_CHECK is not set
791CONFIG_DEBUG_KERNEL=y 812CONFIG_DEBUG_KERNEL=y
792# CONFIG_DEBUG_SHIRQ is not set 813# CONFIG_DEBUG_SHIRQ is not set
@@ -795,6 +816,7 @@ CONFIG_SCHED_DEBUG=y
795# CONFIG_SCHEDSTATS is not set 816# CONFIG_SCHEDSTATS is not set
796# CONFIG_TIMER_STATS is not set 817# CONFIG_TIMER_STATS is not set
797# CONFIG_SLUB_DEBUG_ON is not set 818# CONFIG_SLUB_DEBUG_ON is not set
819# CONFIG_SLUB_STATS is not set
798# CONFIG_DEBUG_RT_MUTEXES is not set 820# CONFIG_DEBUG_RT_MUTEXES is not set
799# CONFIG_RT_MUTEX_TESTER is not set 821# CONFIG_RT_MUTEX_TESTER is not set
800# CONFIG_DEBUG_SPINLOCK is not set 822# CONFIG_DEBUG_SPINLOCK is not set
@@ -807,15 +829,16 @@ CONFIG_DEBUG_BUGVERBOSE=y
807# CONFIG_DEBUG_VM is not set 829# CONFIG_DEBUG_VM is not set
808# CONFIG_DEBUG_LIST is not set 830# CONFIG_DEBUG_LIST is not set
809# CONFIG_DEBUG_SG is not set 831# CONFIG_DEBUG_SG is not set
810CONFIG_FORCED_INLINING=y
811# CONFIG_BOOT_PRINTK_DELAY is not set 832# CONFIG_BOOT_PRINTK_DELAY is not set
812# CONFIG_RCU_TORTURE_TEST is not set 833# CONFIG_RCU_TORTURE_TEST is not set
834# CONFIG_BACKTRACE_SELF_TEST is not set
813# CONFIG_FAULT_INJECTION is not set 835# CONFIG_FAULT_INJECTION is not set
814# CONFIG_SAMPLES is not set 836# CONFIG_SAMPLES is not set
815# CONFIG_DEBUG_STACKOVERFLOW is not set 837# CONFIG_DEBUG_STACKOVERFLOW is not set
816# CONFIG_DEBUG_STACK_USAGE is not set 838# CONFIG_DEBUG_STACK_USAGE is not set
817# CONFIG_DEBUG_PAGEALLOC is not set 839# CONFIG_DEBUG_PAGEALLOC is not set
818# CONFIG_DEBUGGER is not set 840# CONFIG_DEBUGGER is not set
841# CONFIG_VIRQ_DEBUG is not set
819# CONFIG_BDI_SWITCH is not set 842# CONFIG_BDI_SWITCH is not set
820# CONFIG_PPC_EARLY_DEBUG is not set 843# CONFIG_PPC_EARLY_DEBUG is not set
821 844
@@ -828,6 +851,7 @@ CONFIG_FORCED_INLINING=y
828CONFIG_CRYPTO=y 851CONFIG_CRYPTO=y
829CONFIG_CRYPTO_ALGAPI=y 852CONFIG_CRYPTO_ALGAPI=y
830CONFIG_CRYPTO_BLKCIPHER=y 853CONFIG_CRYPTO_BLKCIPHER=y
854# CONFIG_CRYPTO_SEQIV is not set
831CONFIG_CRYPTO_MANAGER=y 855CONFIG_CRYPTO_MANAGER=y
832# CONFIG_CRYPTO_HMAC is not set 856# CONFIG_CRYPTO_HMAC is not set
833# CONFIG_CRYPTO_XCBC is not set 857# CONFIG_CRYPTO_XCBC is not set
@@ -845,6 +869,9 @@ CONFIG_CRYPTO_CBC=y
845CONFIG_CRYPTO_PCBC=y 869CONFIG_CRYPTO_PCBC=y
846# CONFIG_CRYPTO_LRW is not set 870# CONFIG_CRYPTO_LRW is not set
847# CONFIG_CRYPTO_XTS is not set 871# CONFIG_CRYPTO_XTS is not set
872# CONFIG_CRYPTO_CTR is not set
873# CONFIG_CRYPTO_GCM is not set
874# CONFIG_CRYPTO_CCM is not set
848# CONFIG_CRYPTO_CRYPTD is not set 875# CONFIG_CRYPTO_CRYPTD is not set
849CONFIG_CRYPTO_DES=y 876CONFIG_CRYPTO_DES=y
850# CONFIG_CRYPTO_FCRYPT is not set 877# CONFIG_CRYPTO_FCRYPT is not set
@@ -859,11 +886,13 @@ CONFIG_CRYPTO_DES=y
859# CONFIG_CRYPTO_KHAZAD is not set 886# CONFIG_CRYPTO_KHAZAD is not set
860# CONFIG_CRYPTO_ANUBIS is not set 887# CONFIG_CRYPTO_ANUBIS is not set
861# CONFIG_CRYPTO_SEED is not set 888# CONFIG_CRYPTO_SEED is not set
889# CONFIG_CRYPTO_SALSA20 is not set
862# CONFIG_CRYPTO_DEFLATE is not set 890# CONFIG_CRYPTO_DEFLATE is not set
863# CONFIG_CRYPTO_MICHAEL_MIC is not set 891# CONFIG_CRYPTO_MICHAEL_MIC is not set
864# CONFIG_CRYPTO_CRC32C is not set 892# CONFIG_CRYPTO_CRC32C is not set
865# CONFIG_CRYPTO_CAMELLIA is not set 893# CONFIG_CRYPTO_CAMELLIA is not set
866# CONFIG_CRYPTO_TEST is not set 894# CONFIG_CRYPTO_TEST is not set
867# CONFIG_CRYPTO_AUTHENC is not set 895# CONFIG_CRYPTO_AUTHENC is not set
896# CONFIG_CRYPTO_LZO is not set
868# CONFIG_CRYPTO_HW is not set 897# CONFIG_CRYPTO_HW is not set
869# CONFIG_PPC_CLOCK is not set 898# CONFIG_PPC_CLOCK is not set
diff --git a/arch/powerpc/configs/ep405_defconfig b/arch/powerpc/configs/ep405_defconfig
index 3829c9166256..e24240a9a047 100644
--- a/arch/powerpc/configs/ep405_defconfig
+++ b/arch/powerpc/configs/ep405_defconfig
@@ -1,7 +1,7 @@
1# 1#
2# Automatically generated make config: don't edit 2# Automatically generated make config: don't edit
3# Linux kernel version: 2.6.24-rc6 3# Linux kernel version: 2.6.25-rc2
4# Mon Dec 24 11:17:13 2007 4# Fri Feb 15 21:50:09 2008
5# 5#
6# CONFIG_PPC64 is not set 6# CONFIG_PPC64 is not set
7 7
@@ -26,6 +26,7 @@ CONFIG_GENERIC_TIME=y
26CONFIG_GENERIC_TIME_VSYSCALL=y 26CONFIG_GENERIC_TIME_VSYSCALL=y
27CONFIG_GENERIC_CLOCKEVENTS=y 27CONFIG_GENERIC_CLOCKEVENTS=y
28CONFIG_GENERIC_HARDIRQS=y 28CONFIG_GENERIC_HARDIRQS=y
29# CONFIG_HAVE_SETUP_PER_CPU_AREA is not set
29CONFIG_IRQ_PER_CPU=y 30CONFIG_IRQ_PER_CPU=y
30CONFIG_RWSEM_XCHGADD_ALGORITHM=y 31CONFIG_RWSEM_XCHGADD_ALGORITHM=y
31CONFIG_ARCH_HAS_ILOG2_U32=y 32CONFIG_ARCH_HAS_ILOG2_U32=y
@@ -64,17 +65,18 @@ CONFIG_SYSVIPC_SYSCTL=y
64CONFIG_POSIX_MQUEUE=y 65CONFIG_POSIX_MQUEUE=y
65# CONFIG_BSD_PROCESS_ACCT is not set 66# CONFIG_BSD_PROCESS_ACCT is not set
66# CONFIG_TASKSTATS is not set 67# CONFIG_TASKSTATS is not set
67# CONFIG_USER_NS is not set
68# CONFIG_PID_NS is not set
69# CONFIG_AUDIT is not set 68# CONFIG_AUDIT is not set
70# CONFIG_IKCONFIG is not set 69# CONFIG_IKCONFIG is not set
71CONFIG_LOG_BUF_SHIFT=14 70CONFIG_LOG_BUF_SHIFT=14
72# CONFIG_CGROUPS is not set 71# CONFIG_CGROUPS is not set
72CONFIG_GROUP_SCHED=y
73CONFIG_FAIR_GROUP_SCHED=y 73CONFIG_FAIR_GROUP_SCHED=y
74CONFIG_FAIR_USER_SCHED=y 74# CONFIG_RT_GROUP_SCHED is not set
75# CONFIG_FAIR_CGROUP_SCHED is not set 75CONFIG_USER_SCHED=y
76# CONFIG_CGROUP_SCHED is not set
76CONFIG_SYSFS_DEPRECATED=y 77CONFIG_SYSFS_DEPRECATED=y
77# CONFIG_RELAY is not set 78# CONFIG_RELAY is not set
79# CONFIG_NAMESPACES is not set
78CONFIG_BLK_DEV_INITRD=y 80CONFIG_BLK_DEV_INITRD=y
79CONFIG_INITRAMFS_SOURCE="" 81CONFIG_INITRAMFS_SOURCE=""
80# CONFIG_CC_OPTIMIZE_FOR_SIZE is not set 82# CONFIG_CC_OPTIMIZE_FOR_SIZE is not set
@@ -88,11 +90,13 @@ CONFIG_HOTPLUG=y
88CONFIG_PRINTK=y 90CONFIG_PRINTK=y
89CONFIG_BUG=y 91CONFIG_BUG=y
90CONFIG_ELF_CORE=y 92CONFIG_ELF_CORE=y
93CONFIG_COMPAT_BRK=y
91CONFIG_BASE_FULL=y 94CONFIG_BASE_FULL=y
92CONFIG_FUTEX=y 95CONFIG_FUTEX=y
93CONFIG_ANON_INODES=y 96CONFIG_ANON_INODES=y
94CONFIG_EPOLL=y 97CONFIG_EPOLL=y
95CONFIG_SIGNALFD=y 98CONFIG_SIGNALFD=y
99CONFIG_TIMERFD=y
96CONFIG_EVENTFD=y 100CONFIG_EVENTFD=y
97CONFIG_SHMEM=y 101CONFIG_SHMEM=y
98CONFIG_VM_EVENT_COUNTERS=y 102CONFIG_VM_EVENT_COUNTERS=y
@@ -100,6 +104,13 @@ CONFIG_SLUB_DEBUG=y
100# CONFIG_SLAB is not set 104# CONFIG_SLAB is not set
101CONFIG_SLUB=y 105CONFIG_SLUB=y
102# CONFIG_SLOB is not set 106# CONFIG_SLOB is not set
107# CONFIG_PROFILING is not set
108# CONFIG_MARKERS is not set
109CONFIG_HAVE_OPROFILE=y
110# CONFIG_KPROBES is not set
111CONFIG_HAVE_KPROBES=y
112CONFIG_PROC_PAGE_MONITOR=y
113CONFIG_SLABINFO=y
103CONFIG_RT_MUTEXES=y 114CONFIG_RT_MUTEXES=y
104# CONFIG_TINY_SHMEM is not set 115# CONFIG_TINY_SHMEM is not set
105CONFIG_BASE_SMALL=0 116CONFIG_BASE_SMALL=0
@@ -127,13 +138,15 @@ CONFIG_DEFAULT_AS=y
127# CONFIG_DEFAULT_CFQ is not set 138# CONFIG_DEFAULT_CFQ is not set
128# CONFIG_DEFAULT_NOOP is not set 139# CONFIG_DEFAULT_NOOP is not set
129CONFIG_DEFAULT_IOSCHED="anticipatory" 140CONFIG_DEFAULT_IOSCHED="anticipatory"
141CONFIG_CLASSIC_RCU=y
142# CONFIG_PREEMPT_RCU is not set
130# CONFIG_PPC4xx_PCI_EXPRESS is not set 143# CONFIG_PPC4xx_PCI_EXPRESS is not set
131 144
132# 145#
133# Platform support 146# Platform support
134# 147#
135# CONFIG_PPC_MPC52xx is not set 148# CONFIG_PPC_MPC512x is not set
136# CONFIG_PPC_MPC5200 is not set 149# CONFIG_PPC_MPC5121 is not set
137# CONFIG_PPC_CELL is not set 150# CONFIG_PPC_CELL is not set
138# CONFIG_PPC_CELL_NATIVE is not set 151# CONFIG_PPC_CELL_NATIVE is not set
139# CONFIG_PQ2ADS is not set 152# CONFIG_PQ2ADS is not set
@@ -145,6 +158,7 @@ CONFIG_EP405=y
145CONFIG_405GP=y 158CONFIG_405GP=y
146CONFIG_IBM405_ERR77=y 159CONFIG_IBM405_ERR77=y
147CONFIG_IBM405_ERR51=y 160CONFIG_IBM405_ERR51=y
161# CONFIG_IPIC is not set
148# CONFIG_MPIC is not set 162# CONFIG_MPIC is not set
149# CONFIG_MPIC_WEIRD is not set 163# CONFIG_MPIC_WEIRD is not set
150# CONFIG_PPC_I8259 is not set 164# CONFIG_PPC_I8259 is not set
@@ -155,7 +169,6 @@ CONFIG_IBM405_ERR51=y
155# CONFIG_PPC_INDIRECT_IO is not set 169# CONFIG_PPC_INDIRECT_IO is not set
156# CONFIG_GENERIC_IOMAP is not set 170# CONFIG_GENERIC_IOMAP is not set
157# CONFIG_CPU_FREQ is not set 171# CONFIG_CPU_FREQ is not set
158# CONFIG_CPM2 is not set
159# CONFIG_FSL_ULI1575 is not set 172# CONFIG_FSL_ULI1575 is not set
160 173
161# 174#
@@ -171,13 +184,18 @@ CONFIG_HZ_250=y
171# CONFIG_HZ_300 is not set 184# CONFIG_HZ_300 is not set
172# CONFIG_HZ_1000 is not set 185# CONFIG_HZ_1000 is not set
173CONFIG_HZ=250 186CONFIG_HZ=250
187# CONFIG_SCHED_HRTICK is not set
174CONFIG_PREEMPT_NONE=y 188CONFIG_PREEMPT_NONE=y
175# CONFIG_PREEMPT_VOLUNTARY is not set 189# CONFIG_PREEMPT_VOLUNTARY is not set
176# CONFIG_PREEMPT is not set 190# CONFIG_PREEMPT is not set
191CONFIG_RCU_TRACE=y
177CONFIG_BINFMT_ELF=y 192CONFIG_BINFMT_ELF=y
178# CONFIG_BINFMT_MISC is not set 193# CONFIG_BINFMT_MISC is not set
179# CONFIG_MATH_EMULATION is not set 194# CONFIG_MATH_EMULATION is not set
195# CONFIG_IOMMU_HELPER is not set
180CONFIG_ARCH_ENABLE_MEMORY_HOTPLUG=y 196CONFIG_ARCH_ENABLE_MEMORY_HOTPLUG=y
197CONFIG_ARCH_HAS_WALK_MEMORY=y
198CONFIG_ARCH_ENABLE_MEMORY_HOTREMOVE=y
181CONFIG_ARCH_FLATMEM_ENABLE=y 199CONFIG_ARCH_FLATMEM_ENABLE=y
182CONFIG_ARCH_POPULATES_NODE_MAP=y 200CONFIG_ARCH_POPULATES_NODE_MAP=y
183CONFIG_SELECT_MEMORY_MODEL=y 201CONFIG_SELECT_MEMORY_MODEL=y
@@ -196,11 +214,7 @@ CONFIG_VIRT_TO_BUS=y
196CONFIG_PROC_DEVICETREE=y 214CONFIG_PROC_DEVICETREE=y
197# CONFIG_CMDLINE_BOOL is not set 215# CONFIG_CMDLINE_BOOL is not set
198# CONFIG_PM is not set 216# CONFIG_PM is not set
199CONFIG_SUSPEND_UP_POSSIBLE=y
200CONFIG_HIBERNATION_UP_POSSIBLE=y
201CONFIG_SECCOMP=y 217CONFIG_SECCOMP=y
202CONFIG_WANT_DEVICE_TREE=y
203CONFIG_DEVICE_TREE="ep405.dts"
204CONFIG_ISA_DMA_API=y 218CONFIG_ISA_DMA_API=y
205 219
206# 220#
@@ -300,6 +314,7 @@ CONFIG_DEFAULT_TCP_CONG="cubic"
300# 314#
301# CONFIG_NET_PKTGEN is not set 315# CONFIG_NET_PKTGEN is not set
302# CONFIG_HAMRADIO is not set 316# CONFIG_HAMRADIO is not set
317# CONFIG_CAN is not set
303# CONFIG_IRDA is not set 318# CONFIG_IRDA is not set
304# CONFIG_BT is not set 319# CONFIG_BT is not set
305# CONFIG_AF_RXRPC is not set 320# CONFIG_AF_RXRPC is not set
@@ -336,6 +351,7 @@ CONFIG_MTD=y
336CONFIG_MTD_PARTITIONS=y 351CONFIG_MTD_PARTITIONS=y
337# CONFIG_MTD_REDBOOT_PARTS is not set 352# CONFIG_MTD_REDBOOT_PARTS is not set
338CONFIG_MTD_CMDLINE_PARTS=y 353CONFIG_MTD_CMDLINE_PARTS=y
354CONFIG_MTD_OF_PARTS=y
339 355
340# 356#
341# User Modules And Translation Layers 357# User Modules And Translation Layers
@@ -423,7 +439,7 @@ CONFIG_BLK_DEV=y
423CONFIG_BLK_DEV_RAM=y 439CONFIG_BLK_DEV_RAM=y
424CONFIG_BLK_DEV_RAM_COUNT=16 440CONFIG_BLK_DEV_RAM_COUNT=16
425CONFIG_BLK_DEV_RAM_SIZE=35000 441CONFIG_BLK_DEV_RAM_SIZE=35000
426CONFIG_BLK_DEV_RAM_BLOCKSIZE=1024 442# CONFIG_BLK_DEV_XIP is not set
427# CONFIG_CDROM_PKTCDVD is not set 443# CONFIG_CDROM_PKTCDVD is not set
428# CONFIG_ATA_OVER_ETH is not set 444# CONFIG_ATA_OVER_ETH is not set
429# CONFIG_XILINX_SYSACE is not set 445# CONFIG_XILINX_SYSACE is not set
@@ -432,6 +448,8 @@ CONFIG_MISC_DEVICES=y
432# CONFIG_EEPROM_93CX6 is not set 448# CONFIG_EEPROM_93CX6 is not set
433# CONFIG_SGI_IOC4 is not set 449# CONFIG_SGI_IOC4 is not set
434# CONFIG_TIFM_CORE is not set 450# CONFIG_TIFM_CORE is not set
451# CONFIG_ENCLOSURE_SERVICES is not set
452CONFIG_HAVE_IDE=y
435# CONFIG_IDE is not set 453# CONFIG_IDE is not set
436 454
437# 455#
@@ -460,7 +478,6 @@ CONFIG_NETDEVICES=y
460# CONFIG_EQUALIZER is not set 478# CONFIG_EQUALIZER is not set
461# CONFIG_TUN is not set 479# CONFIG_TUN is not set
462# CONFIG_VETH is not set 480# CONFIG_VETH is not set
463# CONFIG_IP1000 is not set
464# CONFIG_ARCNET is not set 481# CONFIG_ARCNET is not set
465# CONFIG_PHYLIB is not set 482# CONFIG_PHYLIB is not set
466CONFIG_NET_ETHERNET=y 483CONFIG_NET_ETHERNET=y
@@ -489,6 +506,9 @@ CONFIG_NETDEV_1000=y
489# CONFIG_DL2K is not set 506# CONFIG_DL2K is not set
490# CONFIG_E1000 is not set 507# CONFIG_E1000 is not set
491# CONFIG_E1000E is not set 508# CONFIG_E1000E is not set
509# CONFIG_E1000E_ENABLED is not set
510# CONFIG_IP1000 is not set
511# CONFIG_IGB is not set
492# CONFIG_NS83820 is not set 512# CONFIG_NS83820 is not set
493# CONFIG_HAMACHI is not set 513# CONFIG_HAMACHI is not set
494# CONFIG_YELLOWFIN is not set 514# CONFIG_YELLOWFIN is not set
@@ -513,6 +533,7 @@ CONFIG_NETDEV_10000=y
513# CONFIG_NIU is not set 533# CONFIG_NIU is not set
514# CONFIG_MLX4_CORE is not set 534# CONFIG_MLX4_CORE is not set
515# CONFIG_TEHUTI is not set 535# CONFIG_TEHUTI is not set
536# CONFIG_BNX2X is not set
516# CONFIG_TR is not set 537# CONFIG_TR is not set
517 538
518# 539#
@@ -534,7 +555,6 @@ CONFIG_NETDEV_10000=y
534# CONFIG_HIPPI is not set 555# CONFIG_HIPPI is not set
535# CONFIG_PPP is not set 556# CONFIG_PPP is not set
536# CONFIG_SLIP is not set 557# CONFIG_SLIP is not set
537# CONFIG_SHAPER is not set
538# CONFIG_NETCONSOLE is not set 558# CONFIG_NETCONSOLE is not set
539# CONFIG_NETPOLL is not set 559# CONFIG_NETPOLL is not set
540# CONFIG_NET_POLL_CONTROLLER is not set 560# CONFIG_NET_POLL_CONTROLLER is not set
@@ -557,6 +577,7 @@ CONFIG_NETDEV_10000=y
557# 577#
558# CONFIG_VT is not set 578# CONFIG_VT is not set
559# CONFIG_SERIAL_NONSTANDARD is not set 579# CONFIG_SERIAL_NONSTANDARD is not set
580# CONFIG_NOZOMI is not set
560 581
561# 582#
562# Serial drivers 583# Serial drivers
@@ -602,6 +623,7 @@ CONFIG_DEVPORT=y
602# CONFIG_W1 is not set 623# CONFIG_W1 is not set
603# CONFIG_POWER_SUPPLY is not set 624# CONFIG_POWER_SUPPLY is not set
604# CONFIG_HWMON is not set 625# CONFIG_HWMON is not set
626CONFIG_THERMAL=y
605# CONFIG_WATCHDOG is not set 627# CONFIG_WATCHDOG is not set
606 628
607# 629#
@@ -647,6 +669,7 @@ CONFIG_USB_ARCH_HAS_OHCI=y
647CONFIG_USB_ARCH_HAS_EHCI=y 669CONFIG_USB_ARCH_HAS_EHCI=y
648CONFIG_USB=y 670CONFIG_USB=y
649# CONFIG_USB_DEBUG is not set 671# CONFIG_USB_DEBUG is not set
672# CONFIG_USB_ANNOUNCE_NEW_DEVICES is not set
650 673
651# 674#
652# Miscellaneous USB options 675# Miscellaneous USB options
@@ -697,10 +720,6 @@ CONFIG_USB_MON=y
697# 720#
698# USB port drivers 721# USB port drivers
699# 722#
700
701#
702# USB Serial Converter support
703#
704# CONFIG_USB_SERIAL is not set 723# CONFIG_USB_SERIAL is not set
705 724
706# 725#
@@ -725,16 +744,9 @@ CONFIG_USB_MON=y
725# CONFIG_USB_TRANCEVIBRATOR is not set 744# CONFIG_USB_TRANCEVIBRATOR is not set
726# CONFIG_USB_IOWARRIOR is not set 745# CONFIG_USB_IOWARRIOR is not set
727# CONFIG_USB_TEST is not set 746# CONFIG_USB_TEST is not set
728
729#
730# USB DSL modem support
731#
732
733#
734# USB Gadget Support
735#
736# CONFIG_USB_GADGET is not set 747# CONFIG_USB_GADGET is not set
737# CONFIG_MMC is not set 748# CONFIG_MMC is not set
749# CONFIG_MEMSTICK is not set
738# CONFIG_NEW_LEDS is not set 750# CONFIG_NEW_LEDS is not set
739# CONFIG_INFINIBAND is not set 751# CONFIG_INFINIBAND is not set
740# CONFIG_EDAC is not set 752# CONFIG_EDAC is not set
@@ -759,12 +771,10 @@ CONFIG_EXT2_FS=y
759# CONFIG_XFS_FS is not set 771# CONFIG_XFS_FS is not set
760# CONFIG_GFS2_FS is not set 772# CONFIG_GFS2_FS is not set
761# CONFIG_OCFS2_FS is not set 773# CONFIG_OCFS2_FS is not set
762# CONFIG_MINIX_FS is not set 774CONFIG_DNOTIFY=y
763# CONFIG_ROMFS_FS is not set
764CONFIG_INOTIFY=y 775CONFIG_INOTIFY=y
765CONFIG_INOTIFY_USER=y 776CONFIG_INOTIFY_USER=y
766# CONFIG_QUOTA is not set 777# CONFIG_QUOTA is not set
767CONFIG_DNOTIFY=y
768# CONFIG_AUTOFS_FS is not set 778# CONFIG_AUTOFS_FS is not set
769# CONFIG_AUTOFS4_FS is not set 779# CONFIG_AUTOFS4_FS is not set
770# CONFIG_FUSE_FS is not set 780# CONFIG_FUSE_FS is not set
@@ -807,8 +817,10 @@ CONFIG_TMPFS=y
807# CONFIG_JFFS2_FS is not set 817# CONFIG_JFFS2_FS is not set
808CONFIG_CRAMFS=y 818CONFIG_CRAMFS=y
809# CONFIG_VXFS_FS is not set 819# CONFIG_VXFS_FS is not set
820# CONFIG_MINIX_FS is not set
810# CONFIG_HPFS_FS is not set 821# CONFIG_HPFS_FS is not set
811# CONFIG_QNX4FS_FS is not set 822# CONFIG_QNX4FS_FS is not set
823# CONFIG_ROMFS_FS is not set
812# CONFIG_SYSV_FS is not set 824# CONFIG_SYSV_FS is not set
813# CONFIG_UFS_FS is not set 825# CONFIG_UFS_FS is not set
814CONFIG_NETWORK_FILESYSTEMS=y 826CONFIG_NETWORK_FILESYSTEMS=y
@@ -839,7 +851,6 @@ CONFIG_SUNRPC=y
839CONFIG_MSDOS_PARTITION=y 851CONFIG_MSDOS_PARTITION=y
840# CONFIG_NLS is not set 852# CONFIG_NLS is not set
841# CONFIG_DLM is not set 853# CONFIG_DLM is not set
842# CONFIG_UCC_SLOW is not set
843 854
844# 855#
845# Library routines 856# Library routines
@@ -856,10 +867,6 @@ CONFIG_PLIST=y
856CONFIG_HAS_IOMEM=y 867CONFIG_HAS_IOMEM=y
857CONFIG_HAS_IOPORT=y 868CONFIG_HAS_IOPORT=y
858CONFIG_HAS_DMA=y 869CONFIG_HAS_DMA=y
859CONFIG_INSTRUMENTATION=y
860# CONFIG_PROFILING is not set
861# CONFIG_KPROBES is not set
862# CONFIG_MARKERS is not set
863 870
864# 871#
865# Kernel hacking 872# Kernel hacking
@@ -869,7 +876,7 @@ CONFIG_ENABLE_WARN_DEPRECATED=y
869CONFIG_ENABLE_MUST_CHECK=y 876CONFIG_ENABLE_MUST_CHECK=y
870CONFIG_MAGIC_SYSRQ=y 877CONFIG_MAGIC_SYSRQ=y
871# CONFIG_UNUSED_SYMBOLS is not set 878# CONFIG_UNUSED_SYMBOLS is not set
872# CONFIG_DEBUG_FS is not set 879CONFIG_DEBUG_FS=y
873# CONFIG_HEADERS_CHECK is not set 880# CONFIG_HEADERS_CHECK is not set
874CONFIG_DEBUG_KERNEL=y 881CONFIG_DEBUG_KERNEL=y
875# CONFIG_DEBUG_SHIRQ is not set 882# CONFIG_DEBUG_SHIRQ is not set
@@ -878,6 +885,7 @@ CONFIG_SCHED_DEBUG=y
878# CONFIG_SCHEDSTATS is not set 885# CONFIG_SCHEDSTATS is not set
879# CONFIG_TIMER_STATS is not set 886# CONFIG_TIMER_STATS is not set
880# CONFIG_SLUB_DEBUG_ON is not set 887# CONFIG_SLUB_DEBUG_ON is not set
888# CONFIG_SLUB_STATS is not set
881# CONFIG_DEBUG_RT_MUTEXES is not set 889# CONFIG_DEBUG_RT_MUTEXES is not set
882# CONFIG_RT_MUTEX_TESTER is not set 890# CONFIG_RT_MUTEX_TESTER is not set
883# CONFIG_DEBUG_SPINLOCK is not set 891# CONFIG_DEBUG_SPINLOCK is not set
@@ -890,15 +898,16 @@ CONFIG_DEBUG_BUGVERBOSE=y
890# CONFIG_DEBUG_VM is not set 898# CONFIG_DEBUG_VM is not set
891# CONFIG_DEBUG_LIST is not set 899# CONFIG_DEBUG_LIST is not set
892# CONFIG_DEBUG_SG is not set 900# CONFIG_DEBUG_SG is not set
893CONFIG_FORCED_INLINING=y
894# CONFIG_BOOT_PRINTK_DELAY is not set 901# CONFIG_BOOT_PRINTK_DELAY is not set
895# CONFIG_RCU_TORTURE_TEST is not set 902# CONFIG_RCU_TORTURE_TEST is not set
903# CONFIG_BACKTRACE_SELF_TEST is not set
896# CONFIG_FAULT_INJECTION is not set 904# CONFIG_FAULT_INJECTION is not set
897# CONFIG_SAMPLES is not set 905# CONFIG_SAMPLES is not set
898# CONFIG_DEBUG_STACKOVERFLOW is not set 906# CONFIG_DEBUG_STACKOVERFLOW is not set
899# CONFIG_DEBUG_STACK_USAGE is not set 907# CONFIG_DEBUG_STACK_USAGE is not set
900# CONFIG_DEBUG_PAGEALLOC is not set 908# CONFIG_DEBUG_PAGEALLOC is not set
901# CONFIG_DEBUGGER is not set 909# CONFIG_DEBUGGER is not set
910# CONFIG_VIRQ_DEBUG is not set
902# CONFIG_BDI_SWITCH is not set 911# CONFIG_BDI_SWITCH is not set
903# CONFIG_PPC_EARLY_DEBUG is not set 912# CONFIG_PPC_EARLY_DEBUG is not set
904 913
@@ -911,6 +920,7 @@ CONFIG_FORCED_INLINING=y
911CONFIG_CRYPTO=y 920CONFIG_CRYPTO=y
912CONFIG_CRYPTO_ALGAPI=y 921CONFIG_CRYPTO_ALGAPI=y
913CONFIG_CRYPTO_BLKCIPHER=y 922CONFIG_CRYPTO_BLKCIPHER=y
923# CONFIG_CRYPTO_SEQIV is not set
914CONFIG_CRYPTO_MANAGER=y 924CONFIG_CRYPTO_MANAGER=y
915# CONFIG_CRYPTO_HMAC is not set 925# CONFIG_CRYPTO_HMAC is not set
916# CONFIG_CRYPTO_XCBC is not set 926# CONFIG_CRYPTO_XCBC is not set
@@ -928,6 +938,9 @@ CONFIG_CRYPTO_CBC=y
928CONFIG_CRYPTO_PCBC=y 938CONFIG_CRYPTO_PCBC=y
929# CONFIG_CRYPTO_LRW is not set 939# CONFIG_CRYPTO_LRW is not set
930# CONFIG_CRYPTO_XTS is not set 940# CONFIG_CRYPTO_XTS is not set
941# CONFIG_CRYPTO_CTR is not set
942# CONFIG_CRYPTO_GCM is not set
943# CONFIG_CRYPTO_CCM is not set
931# CONFIG_CRYPTO_CRYPTD is not set 944# CONFIG_CRYPTO_CRYPTD is not set
932CONFIG_CRYPTO_DES=y 945CONFIG_CRYPTO_DES=y
933# CONFIG_CRYPTO_FCRYPT is not set 946# CONFIG_CRYPTO_FCRYPT is not set
@@ -942,11 +955,14 @@ CONFIG_CRYPTO_DES=y
942# CONFIG_CRYPTO_KHAZAD is not set 955# CONFIG_CRYPTO_KHAZAD is not set
943# CONFIG_CRYPTO_ANUBIS is not set 956# CONFIG_CRYPTO_ANUBIS is not set
944# CONFIG_CRYPTO_SEED is not set 957# CONFIG_CRYPTO_SEED is not set
958# CONFIG_CRYPTO_SALSA20 is not set
945# CONFIG_CRYPTO_DEFLATE is not set 959# CONFIG_CRYPTO_DEFLATE is not set
946# CONFIG_CRYPTO_MICHAEL_MIC is not set 960# CONFIG_CRYPTO_MICHAEL_MIC is not set
947# CONFIG_CRYPTO_CRC32C is not set 961# CONFIG_CRYPTO_CRC32C is not set
948# CONFIG_CRYPTO_CAMELLIA is not set 962# CONFIG_CRYPTO_CAMELLIA is not set
949# CONFIG_CRYPTO_TEST is not set 963# CONFIG_CRYPTO_TEST is not set
950# CONFIG_CRYPTO_AUTHENC is not set 964# CONFIG_CRYPTO_AUTHENC is not set
965# CONFIG_CRYPTO_LZO is not set
951CONFIG_CRYPTO_HW=y 966CONFIG_CRYPTO_HW=y
967# CONFIG_CRYPTO_DEV_HIFN_795X is not set
952# CONFIG_PPC_CLOCK is not set 968# CONFIG_PPC_CLOCK is not set
diff --git a/arch/powerpc/configs/kilauea_defconfig b/arch/powerpc/configs/kilauea_defconfig
index 8dca3d451c0e..2f475391f1d1 100644
--- a/arch/powerpc/configs/kilauea_defconfig
+++ b/arch/powerpc/configs/kilauea_defconfig
@@ -1,7 +1,7 @@
1# 1#
2# Automatically generated make config: don't edit 2# Automatically generated make config: don't edit
3# Linux kernel version: 2.6.24-rc6 3# Linux kernel version: 2.6.25-rc2
4# Thu Jan 3 14:21:31 2008 4# Fri Feb 15 21:51:43 2008
5# 5#
6# CONFIG_PPC64 is not set 6# CONFIG_PPC64 is not set
7 7
@@ -26,6 +26,7 @@ CONFIG_GENERIC_TIME=y
26CONFIG_GENERIC_TIME_VSYSCALL=y 26CONFIG_GENERIC_TIME_VSYSCALL=y
27CONFIG_GENERIC_CLOCKEVENTS=y 27CONFIG_GENERIC_CLOCKEVENTS=y
28CONFIG_GENERIC_HARDIRQS=y 28CONFIG_GENERIC_HARDIRQS=y
29# CONFIG_HAVE_SETUP_PER_CPU_AREA is not set
29CONFIG_IRQ_PER_CPU=y 30CONFIG_IRQ_PER_CPU=y
30CONFIG_RWSEM_XCHGADD_ALGORITHM=y 31CONFIG_RWSEM_XCHGADD_ALGORITHM=y
31CONFIG_ARCH_HAS_ILOG2_U32=y 32CONFIG_ARCH_HAS_ILOG2_U32=y
@@ -64,15 +65,18 @@ CONFIG_SYSVIPC_SYSCTL=y
64CONFIG_POSIX_MQUEUE=y 65CONFIG_POSIX_MQUEUE=y
65# CONFIG_BSD_PROCESS_ACCT is not set 66# CONFIG_BSD_PROCESS_ACCT is not set
66# CONFIG_TASKSTATS is not set 67# CONFIG_TASKSTATS is not set
67# CONFIG_USER_NS is not set
68# CONFIG_PID_NS is not set
69# CONFIG_AUDIT is not set 68# CONFIG_AUDIT is not set
70# CONFIG_IKCONFIG is not set 69# CONFIG_IKCONFIG is not set
71CONFIG_LOG_BUF_SHIFT=14 70CONFIG_LOG_BUF_SHIFT=14
72# CONFIG_CGROUPS is not set 71# CONFIG_CGROUPS is not set
72CONFIG_GROUP_SCHED=y
73# CONFIG_FAIR_GROUP_SCHED is not set 73# CONFIG_FAIR_GROUP_SCHED is not set
74# CONFIG_RT_GROUP_SCHED is not set
75CONFIG_USER_SCHED=y
76# CONFIG_CGROUP_SCHED is not set
74CONFIG_SYSFS_DEPRECATED=y 77CONFIG_SYSFS_DEPRECATED=y
75# CONFIG_RELAY is not set 78# CONFIG_RELAY is not set
79# CONFIG_NAMESPACES is not set
76CONFIG_BLK_DEV_INITRD=y 80CONFIG_BLK_DEV_INITRD=y
77CONFIG_INITRAMFS_SOURCE="" 81CONFIG_INITRAMFS_SOURCE=""
78# CONFIG_CC_OPTIMIZE_FOR_SIZE is not set 82# CONFIG_CC_OPTIMIZE_FOR_SIZE is not set
@@ -86,11 +90,13 @@ CONFIG_HOTPLUG=y
86CONFIG_PRINTK=y 90CONFIG_PRINTK=y
87CONFIG_BUG=y 91CONFIG_BUG=y
88CONFIG_ELF_CORE=y 92CONFIG_ELF_CORE=y
93CONFIG_COMPAT_BRK=y
89CONFIG_BASE_FULL=y 94CONFIG_BASE_FULL=y
90CONFIG_FUTEX=y 95CONFIG_FUTEX=y
91CONFIG_ANON_INODES=y 96CONFIG_ANON_INODES=y
92CONFIG_EPOLL=y 97CONFIG_EPOLL=y
93CONFIG_SIGNALFD=y 98CONFIG_SIGNALFD=y
99CONFIG_TIMERFD=y
94CONFIG_EVENTFD=y 100CONFIG_EVENTFD=y
95CONFIG_SHMEM=y 101CONFIG_SHMEM=y
96CONFIG_VM_EVENT_COUNTERS=y 102CONFIG_VM_EVENT_COUNTERS=y
@@ -98,6 +104,13 @@ CONFIG_SLUB_DEBUG=y
98# CONFIG_SLAB is not set 104# CONFIG_SLAB is not set
99CONFIG_SLUB=y 105CONFIG_SLUB=y
100# CONFIG_SLOB is not set 106# CONFIG_SLOB is not set
107# CONFIG_PROFILING is not set
108# CONFIG_MARKERS is not set
109CONFIG_HAVE_OPROFILE=y
110# CONFIG_KPROBES is not set
111CONFIG_HAVE_KPROBES=y
112CONFIG_PROC_PAGE_MONITOR=y
113CONFIG_SLABINFO=y
101CONFIG_RT_MUTEXES=y 114CONFIG_RT_MUTEXES=y
102# CONFIG_TINY_SHMEM is not set 115# CONFIG_TINY_SHMEM is not set
103CONFIG_BASE_SMALL=0 116CONFIG_BASE_SMALL=0
@@ -125,13 +138,15 @@ CONFIG_DEFAULT_AS=y
125# CONFIG_DEFAULT_CFQ is not set 138# CONFIG_DEFAULT_CFQ is not set
126# CONFIG_DEFAULT_NOOP is not set 139# CONFIG_DEFAULT_NOOP is not set
127CONFIG_DEFAULT_IOSCHED="anticipatory" 140CONFIG_DEFAULT_IOSCHED="anticipatory"
141CONFIG_CLASSIC_RCU=y
142# CONFIG_PREEMPT_RCU is not set
128CONFIG_PPC4xx_PCI_EXPRESS=y 143CONFIG_PPC4xx_PCI_EXPRESS=y
129 144
130# 145#
131# Platform support 146# Platform support
132# 147#
133# CONFIG_PPC_MPC52xx is not set 148# CONFIG_PPC_MPC512x is not set
134# CONFIG_PPC_MPC5200 is not set 149# CONFIG_PPC_MPC5121 is not set
135# CONFIG_PPC_CELL is not set 150# CONFIG_PPC_CELL is not set
136# CONFIG_PPC_CELL_NATIVE is not set 151# CONFIG_PPC_CELL_NATIVE is not set
137# CONFIG_PQ2ADS is not set 152# CONFIG_PQ2ADS is not set
@@ -141,6 +156,7 @@ CONFIG_KILAUEA=y
141# CONFIG_WALNUT is not set 156# CONFIG_WALNUT is not set
142# CONFIG_XILINX_VIRTEX_GENERIC_BOARD is not set 157# CONFIG_XILINX_VIRTEX_GENERIC_BOARD is not set
143CONFIG_405EX=y 158CONFIG_405EX=y
159# CONFIG_IPIC is not set
144# CONFIG_MPIC is not set 160# CONFIG_MPIC is not set
145# CONFIG_MPIC_WEIRD is not set 161# CONFIG_MPIC_WEIRD is not set
146# CONFIG_PPC_I8259 is not set 162# CONFIG_PPC_I8259 is not set
@@ -151,7 +167,6 @@ CONFIG_405EX=y
151# CONFIG_PPC_INDIRECT_IO is not set 167# CONFIG_PPC_INDIRECT_IO is not set
152# CONFIG_GENERIC_IOMAP is not set 168# CONFIG_GENERIC_IOMAP is not set
153# CONFIG_CPU_FREQ is not set 169# CONFIG_CPU_FREQ is not set
154# CONFIG_CPM2 is not set
155# CONFIG_FSL_ULI1575 is not set 170# CONFIG_FSL_ULI1575 is not set
156 171
157# 172#
@@ -167,13 +182,18 @@ CONFIG_HZ_250=y
167# CONFIG_HZ_300 is not set 182# CONFIG_HZ_300 is not set
168# CONFIG_HZ_1000 is not set 183# CONFIG_HZ_1000 is not set
169CONFIG_HZ=250 184CONFIG_HZ=250
185# CONFIG_SCHED_HRTICK is not set
170CONFIG_PREEMPT_NONE=y 186CONFIG_PREEMPT_NONE=y
171# CONFIG_PREEMPT_VOLUNTARY is not set 187# CONFIG_PREEMPT_VOLUNTARY is not set
172# CONFIG_PREEMPT is not set 188# CONFIG_PREEMPT is not set
189CONFIG_RCU_TRACE=y
173CONFIG_BINFMT_ELF=y 190CONFIG_BINFMT_ELF=y
174# CONFIG_BINFMT_MISC is not set 191# CONFIG_BINFMT_MISC is not set
175# CONFIG_MATH_EMULATION is not set 192# CONFIG_MATH_EMULATION is not set
193# CONFIG_IOMMU_HELPER is not set
176CONFIG_ARCH_ENABLE_MEMORY_HOTPLUG=y 194CONFIG_ARCH_ENABLE_MEMORY_HOTPLUG=y
195CONFIG_ARCH_HAS_WALK_MEMORY=y
196CONFIG_ARCH_ENABLE_MEMORY_HOTREMOVE=y
177CONFIG_ARCH_FLATMEM_ENABLE=y 197CONFIG_ARCH_FLATMEM_ENABLE=y
178CONFIG_ARCH_POPULATES_NODE_MAP=y 198CONFIG_ARCH_POPULATES_NODE_MAP=y
179CONFIG_SELECT_MEMORY_MODEL=y 199CONFIG_SELECT_MEMORY_MODEL=y
@@ -192,11 +212,7 @@ CONFIG_VIRT_TO_BUS=y
192CONFIG_PROC_DEVICETREE=y 212CONFIG_PROC_DEVICETREE=y
193# CONFIG_CMDLINE_BOOL is not set 213# CONFIG_CMDLINE_BOOL is not set
194# CONFIG_PM is not set 214# CONFIG_PM is not set
195CONFIG_SUSPEND_UP_POSSIBLE=y
196CONFIG_HIBERNATION_UP_POSSIBLE=y
197CONFIG_SECCOMP=y 215CONFIG_SECCOMP=y
198CONFIG_WANT_DEVICE_TREE=y
199CONFIG_DEVICE_TREE="kilauea.dts"
200CONFIG_ISA_DMA_API=y 216CONFIG_ISA_DMA_API=y
201 217
202# 218#
@@ -296,6 +312,7 @@ CONFIG_DEFAULT_TCP_CONG="cubic"
296# 312#
297# CONFIG_NET_PKTGEN is not set 313# CONFIG_NET_PKTGEN is not set
298# CONFIG_HAMRADIO is not set 314# CONFIG_HAMRADIO is not set
315# CONFIG_CAN is not set
299# CONFIG_IRDA is not set 316# CONFIG_IRDA is not set
300# CONFIG_BT is not set 317# CONFIG_BT is not set
301# CONFIG_AF_RXRPC is not set 318# CONFIG_AF_RXRPC is not set
@@ -332,6 +349,7 @@ CONFIG_MTD=y
332CONFIG_MTD_PARTITIONS=y 349CONFIG_MTD_PARTITIONS=y
333# CONFIG_MTD_REDBOOT_PARTS is not set 350# CONFIG_MTD_REDBOOT_PARTS is not set
334CONFIG_MTD_CMDLINE_PARTS=y 351CONFIG_MTD_CMDLINE_PARTS=y
352CONFIG_MTD_OF_PARTS=y
335 353
336# 354#
337# User Modules And Translation Layers 355# User Modules And Translation Layers
@@ -418,11 +436,12 @@ CONFIG_BLK_DEV=y
418CONFIG_BLK_DEV_RAM=y 436CONFIG_BLK_DEV_RAM=y
419CONFIG_BLK_DEV_RAM_COUNT=16 437CONFIG_BLK_DEV_RAM_COUNT=16
420CONFIG_BLK_DEV_RAM_SIZE=35000 438CONFIG_BLK_DEV_RAM_SIZE=35000
421CONFIG_BLK_DEV_RAM_BLOCKSIZE=1024 439# CONFIG_BLK_DEV_XIP is not set
422# CONFIG_CDROM_PKTCDVD is not set 440# CONFIG_CDROM_PKTCDVD is not set
423# CONFIG_ATA_OVER_ETH is not set 441# CONFIG_ATA_OVER_ETH is not set
424# CONFIG_XILINX_SYSACE is not set 442# CONFIG_XILINX_SYSACE is not set
425# CONFIG_MISC_DEVICES is not set 443# CONFIG_MISC_DEVICES is not set
444CONFIG_HAVE_IDE=y
426# CONFIG_IDE is not set 445# CONFIG_IDE is not set
427 446
428# 447#
@@ -451,7 +470,6 @@ CONFIG_NETDEVICES=y
451# CONFIG_EQUALIZER is not set 470# CONFIG_EQUALIZER is not set
452# CONFIG_TUN is not set 471# CONFIG_TUN is not set
453# CONFIG_VETH is not set 472# CONFIG_VETH is not set
454# CONFIG_IP1000 is not set
455# CONFIG_ARCNET is not set 473# CONFIG_ARCNET is not set
456# CONFIG_PHYLIB is not set 474# CONFIG_PHYLIB is not set
457CONFIG_NET_ETHERNET=y 475CONFIG_NET_ETHERNET=y
@@ -489,7 +507,6 @@ CONFIG_IBM_NEW_EMAC_EMAC4=y
489# CONFIG_HIPPI is not set 507# CONFIG_HIPPI is not set
490# CONFIG_PPP is not set 508# CONFIG_PPP is not set
491# CONFIG_SLIP is not set 509# CONFIG_SLIP is not set
492# CONFIG_SHAPER is not set
493# CONFIG_NETCONSOLE is not set 510# CONFIG_NETCONSOLE is not set
494# CONFIG_NETPOLL is not set 511# CONFIG_NETPOLL is not set
495# CONFIG_NET_POLL_CONTROLLER is not set 512# CONFIG_NET_POLL_CONTROLLER is not set
@@ -512,6 +529,7 @@ CONFIG_IBM_NEW_EMAC_EMAC4=y
512# 529#
513# CONFIG_VT is not set 530# CONFIG_VT is not set
514# CONFIG_SERIAL_NONSTANDARD is not set 531# CONFIG_SERIAL_NONSTANDARD is not set
532# CONFIG_NOZOMI is not set
515 533
516# 534#
517# Serial drivers 535# Serial drivers
@@ -557,6 +575,7 @@ CONFIG_DEVPORT=y
557# CONFIG_W1 is not set 575# CONFIG_W1 is not set
558# CONFIG_POWER_SUPPLY is not set 576# CONFIG_POWER_SUPPLY is not set
559# CONFIG_HWMON is not set 577# CONFIG_HWMON is not set
578CONFIG_THERMAL=y
560# CONFIG_WATCHDOG is not set 579# CONFIG_WATCHDOG is not set
561 580
562# 581#
@@ -598,6 +617,7 @@ CONFIG_SSB_POSSIBLE=y
598# CONFIG_SOUND is not set 617# CONFIG_SOUND is not set
599# CONFIG_USB_SUPPORT is not set 618# CONFIG_USB_SUPPORT is not set
600# CONFIG_MMC is not set 619# CONFIG_MMC is not set
620# CONFIG_MEMSTICK is not set
601# CONFIG_NEW_LEDS is not set 621# CONFIG_NEW_LEDS is not set
602# CONFIG_INFINIBAND is not set 622# CONFIG_INFINIBAND is not set
603# CONFIG_EDAC is not set 623# CONFIG_EDAC is not set
@@ -622,12 +642,10 @@ CONFIG_EXT2_FS=y
622# CONFIG_XFS_FS is not set 642# CONFIG_XFS_FS is not set
623# CONFIG_GFS2_FS is not set 643# CONFIG_GFS2_FS is not set
624# CONFIG_OCFS2_FS is not set 644# CONFIG_OCFS2_FS is not set
625# CONFIG_MINIX_FS is not set 645CONFIG_DNOTIFY=y
626# CONFIG_ROMFS_FS is not set
627CONFIG_INOTIFY=y 646CONFIG_INOTIFY=y
628CONFIG_INOTIFY_USER=y 647CONFIG_INOTIFY_USER=y
629# CONFIG_QUOTA is not set 648# CONFIG_QUOTA is not set
630CONFIG_DNOTIFY=y
631# CONFIG_AUTOFS_FS is not set 649# CONFIG_AUTOFS_FS is not set
632# CONFIG_AUTOFS4_FS is not set 650# CONFIG_AUTOFS4_FS is not set
633# CONFIG_FUSE_FS is not set 651# CONFIG_FUSE_FS is not set
@@ -670,8 +688,10 @@ CONFIG_TMPFS=y
670# CONFIG_JFFS2_FS is not set 688# CONFIG_JFFS2_FS is not set
671CONFIG_CRAMFS=y 689CONFIG_CRAMFS=y
672# CONFIG_VXFS_FS is not set 690# CONFIG_VXFS_FS is not set
691# CONFIG_MINIX_FS is not set
673# CONFIG_HPFS_FS is not set 692# CONFIG_HPFS_FS is not set
674# CONFIG_QNX4FS_FS is not set 693# CONFIG_QNX4FS_FS is not set
694# CONFIG_ROMFS_FS is not set
675# CONFIG_SYSV_FS is not set 695# CONFIG_SYSV_FS is not set
676# CONFIG_UFS_FS is not set 696# CONFIG_UFS_FS is not set
677CONFIG_NETWORK_FILESYSTEMS=y 697CONFIG_NETWORK_FILESYSTEMS=y
@@ -702,7 +722,6 @@ CONFIG_SUNRPC=y
702CONFIG_MSDOS_PARTITION=y 722CONFIG_MSDOS_PARTITION=y
703# CONFIG_NLS is not set 723# CONFIG_NLS is not set
704# CONFIG_DLM is not set 724# CONFIG_DLM is not set
705# CONFIG_UCC_SLOW is not set
706 725
707# 726#
708# Library routines 727# Library routines
@@ -719,7 +738,6 @@ CONFIG_PLIST=y
719CONFIG_HAS_IOMEM=y 738CONFIG_HAS_IOMEM=y
720CONFIG_HAS_IOPORT=y 739CONFIG_HAS_IOPORT=y
721CONFIG_HAS_DMA=y 740CONFIG_HAS_DMA=y
722# CONFIG_INSTRUMENTATION is not set
723 741
724# 742#
725# Kernel hacking 743# Kernel hacking
@@ -729,7 +747,7 @@ CONFIG_ENABLE_WARN_DEPRECATED=y
729CONFIG_ENABLE_MUST_CHECK=y 747CONFIG_ENABLE_MUST_CHECK=y
730CONFIG_MAGIC_SYSRQ=y 748CONFIG_MAGIC_SYSRQ=y
731# CONFIG_UNUSED_SYMBOLS is not set 749# CONFIG_UNUSED_SYMBOLS is not set
732# CONFIG_DEBUG_FS is not set 750CONFIG_DEBUG_FS=y
733# CONFIG_HEADERS_CHECK is not set 751# CONFIG_HEADERS_CHECK is not set
734CONFIG_DEBUG_KERNEL=y 752CONFIG_DEBUG_KERNEL=y
735# CONFIG_DEBUG_SHIRQ is not set 753# CONFIG_DEBUG_SHIRQ is not set
@@ -738,6 +756,7 @@ CONFIG_SCHED_DEBUG=y
738# CONFIG_SCHEDSTATS is not set 756# CONFIG_SCHEDSTATS is not set
739# CONFIG_TIMER_STATS is not set 757# CONFIG_TIMER_STATS is not set
740# CONFIG_SLUB_DEBUG_ON is not set 758# CONFIG_SLUB_DEBUG_ON is not set
759# CONFIG_SLUB_STATS is not set
741# CONFIG_DEBUG_RT_MUTEXES is not set 760# CONFIG_DEBUG_RT_MUTEXES is not set
742# CONFIG_RT_MUTEX_TESTER is not set 761# CONFIG_RT_MUTEX_TESTER is not set
743# CONFIG_DEBUG_SPINLOCK is not set 762# CONFIG_DEBUG_SPINLOCK is not set
@@ -750,15 +769,16 @@ CONFIG_DEBUG_BUGVERBOSE=y
750# CONFIG_DEBUG_VM is not set 769# CONFIG_DEBUG_VM is not set
751# CONFIG_DEBUG_LIST is not set 770# CONFIG_DEBUG_LIST is not set
752# CONFIG_DEBUG_SG is not set 771# CONFIG_DEBUG_SG is not set
753CONFIG_FORCED_INLINING=y
754# CONFIG_BOOT_PRINTK_DELAY is not set 772# CONFIG_BOOT_PRINTK_DELAY is not set
755# CONFIG_RCU_TORTURE_TEST is not set 773# CONFIG_RCU_TORTURE_TEST is not set
774# CONFIG_BACKTRACE_SELF_TEST is not set
756# CONFIG_FAULT_INJECTION is not set 775# CONFIG_FAULT_INJECTION is not set
757# CONFIG_SAMPLES is not set 776# CONFIG_SAMPLES is not set
758# CONFIG_DEBUG_STACKOVERFLOW is not set 777# CONFIG_DEBUG_STACKOVERFLOW is not set
759# CONFIG_DEBUG_STACK_USAGE is not set 778# CONFIG_DEBUG_STACK_USAGE is not set
760# CONFIG_DEBUG_PAGEALLOC is not set 779# CONFIG_DEBUG_PAGEALLOC is not set
761# CONFIG_DEBUGGER is not set 780# CONFIG_DEBUGGER is not set
781# CONFIG_VIRQ_DEBUG is not set
762# CONFIG_BDI_SWITCH is not set 782# CONFIG_BDI_SWITCH is not set
763# CONFIG_PPC_EARLY_DEBUG is not set 783# CONFIG_PPC_EARLY_DEBUG is not set
764 784
@@ -771,6 +791,7 @@ CONFIG_FORCED_INLINING=y
771CONFIG_CRYPTO=y 791CONFIG_CRYPTO=y
772CONFIG_CRYPTO_ALGAPI=y 792CONFIG_CRYPTO_ALGAPI=y
773CONFIG_CRYPTO_BLKCIPHER=y 793CONFIG_CRYPTO_BLKCIPHER=y
794# CONFIG_CRYPTO_SEQIV is not set
774CONFIG_CRYPTO_MANAGER=y 795CONFIG_CRYPTO_MANAGER=y
775# CONFIG_CRYPTO_HMAC is not set 796# CONFIG_CRYPTO_HMAC is not set
776# CONFIG_CRYPTO_XCBC is not set 797# CONFIG_CRYPTO_XCBC is not set
@@ -788,6 +809,9 @@ CONFIG_CRYPTO_CBC=y
788CONFIG_CRYPTO_PCBC=y 809CONFIG_CRYPTO_PCBC=y
789# CONFIG_CRYPTO_LRW is not set 810# CONFIG_CRYPTO_LRW is not set
790# CONFIG_CRYPTO_XTS is not set 811# CONFIG_CRYPTO_XTS is not set
812# CONFIG_CRYPTO_CTR is not set
813# CONFIG_CRYPTO_GCM is not set
814# CONFIG_CRYPTO_CCM is not set
791# CONFIG_CRYPTO_CRYPTD is not set 815# CONFIG_CRYPTO_CRYPTD is not set
792CONFIG_CRYPTO_DES=y 816CONFIG_CRYPTO_DES=y
793# CONFIG_CRYPTO_FCRYPT is not set 817# CONFIG_CRYPTO_FCRYPT is not set
@@ -802,11 +826,14 @@ CONFIG_CRYPTO_DES=y
802# CONFIG_CRYPTO_KHAZAD is not set 826# CONFIG_CRYPTO_KHAZAD is not set
803# CONFIG_CRYPTO_ANUBIS is not set 827# CONFIG_CRYPTO_ANUBIS is not set
804# CONFIG_CRYPTO_SEED is not set 828# CONFIG_CRYPTO_SEED is not set
829# CONFIG_CRYPTO_SALSA20 is not set
805# CONFIG_CRYPTO_DEFLATE is not set 830# CONFIG_CRYPTO_DEFLATE is not set
806# CONFIG_CRYPTO_MICHAEL_MIC is not set 831# CONFIG_CRYPTO_MICHAEL_MIC is not set
807# CONFIG_CRYPTO_CRC32C is not set 832# CONFIG_CRYPTO_CRC32C is not set
808# CONFIG_CRYPTO_CAMELLIA is not set 833# CONFIG_CRYPTO_CAMELLIA is not set
809# CONFIG_CRYPTO_TEST is not set 834# CONFIG_CRYPTO_TEST is not set
810# CONFIG_CRYPTO_AUTHENC is not set 835# CONFIG_CRYPTO_AUTHENC is not set
836# CONFIG_CRYPTO_LZO is not set
811CONFIG_CRYPTO_HW=y 837CONFIG_CRYPTO_HW=y
838# CONFIG_CRYPTO_DEV_HIFN_795X is not set
812# CONFIG_PPC_CLOCK is not set 839# CONFIG_PPC_CLOCK is not set
diff --git a/arch/powerpc/configs/makalu_defconfig b/arch/powerpc/configs/makalu_defconfig
index c5db0265e5d8..9ef4d8a312c8 100644
--- a/arch/powerpc/configs/makalu_defconfig
+++ b/arch/powerpc/configs/makalu_defconfig
@@ -1,7 +1,7 @@
1# 1#
2# Automatically generated make config: don't edit 2# Automatically generated make config: don't edit
3# Linux kernel version: 2.6.24-rc6 3# Linux kernel version: 2.6.25-rc2
4# Mon Dec 24 11:18:32 2007 4# Fri Feb 15 21:52:30 2008
5# 5#
6# CONFIG_PPC64 is not set 6# CONFIG_PPC64 is not set
7 7
@@ -26,6 +26,7 @@ CONFIG_GENERIC_TIME=y
26CONFIG_GENERIC_TIME_VSYSCALL=y 26CONFIG_GENERIC_TIME_VSYSCALL=y
27CONFIG_GENERIC_CLOCKEVENTS=y 27CONFIG_GENERIC_CLOCKEVENTS=y
28CONFIG_GENERIC_HARDIRQS=y 28CONFIG_GENERIC_HARDIRQS=y
29# CONFIG_HAVE_SETUP_PER_CPU_AREA is not set
29CONFIG_IRQ_PER_CPU=y 30CONFIG_IRQ_PER_CPU=y
30CONFIG_RWSEM_XCHGADD_ALGORITHM=y 31CONFIG_RWSEM_XCHGADD_ALGORITHM=y
31CONFIG_ARCH_HAS_ILOG2_U32=y 32CONFIG_ARCH_HAS_ILOG2_U32=y
@@ -64,15 +65,18 @@ CONFIG_SYSVIPC_SYSCTL=y
64CONFIG_POSIX_MQUEUE=y 65CONFIG_POSIX_MQUEUE=y
65# CONFIG_BSD_PROCESS_ACCT is not set 66# CONFIG_BSD_PROCESS_ACCT is not set
66# CONFIG_TASKSTATS is not set 67# CONFIG_TASKSTATS is not set
67# CONFIG_USER_NS is not set
68# CONFIG_PID_NS is not set
69# CONFIG_AUDIT is not set 68# CONFIG_AUDIT is not set
70# CONFIG_IKCONFIG is not set 69# CONFIG_IKCONFIG is not set
71CONFIG_LOG_BUF_SHIFT=14 70CONFIG_LOG_BUF_SHIFT=14
72# CONFIG_CGROUPS is not set 71# CONFIG_CGROUPS is not set
72CONFIG_GROUP_SCHED=y
73# CONFIG_FAIR_GROUP_SCHED is not set 73# CONFIG_FAIR_GROUP_SCHED is not set
74# CONFIG_RT_GROUP_SCHED is not set
75CONFIG_USER_SCHED=y
76# CONFIG_CGROUP_SCHED is not set
74CONFIG_SYSFS_DEPRECATED=y 77CONFIG_SYSFS_DEPRECATED=y
75# CONFIG_RELAY is not set 78# CONFIG_RELAY is not set
79# CONFIG_NAMESPACES is not set
76CONFIG_BLK_DEV_INITRD=y 80CONFIG_BLK_DEV_INITRD=y
77CONFIG_INITRAMFS_SOURCE="" 81CONFIG_INITRAMFS_SOURCE=""
78# CONFIG_CC_OPTIMIZE_FOR_SIZE is not set 82# CONFIG_CC_OPTIMIZE_FOR_SIZE is not set
@@ -86,11 +90,13 @@ CONFIG_HOTPLUG=y
86CONFIG_PRINTK=y 90CONFIG_PRINTK=y
87CONFIG_BUG=y 91CONFIG_BUG=y
88CONFIG_ELF_CORE=y 92CONFIG_ELF_CORE=y
93CONFIG_COMPAT_BRK=y
89CONFIG_BASE_FULL=y 94CONFIG_BASE_FULL=y
90CONFIG_FUTEX=y 95CONFIG_FUTEX=y
91CONFIG_ANON_INODES=y 96CONFIG_ANON_INODES=y
92CONFIG_EPOLL=y 97CONFIG_EPOLL=y
93CONFIG_SIGNALFD=y 98CONFIG_SIGNALFD=y
99CONFIG_TIMERFD=y
94CONFIG_EVENTFD=y 100CONFIG_EVENTFD=y
95CONFIG_SHMEM=y 101CONFIG_SHMEM=y
96CONFIG_VM_EVENT_COUNTERS=y 102CONFIG_VM_EVENT_COUNTERS=y
@@ -98,6 +104,13 @@ CONFIG_SLUB_DEBUG=y
98# CONFIG_SLAB is not set 104# CONFIG_SLAB is not set
99CONFIG_SLUB=y 105CONFIG_SLUB=y
100# CONFIG_SLOB is not set 106# CONFIG_SLOB is not set
107# CONFIG_PROFILING is not set
108# CONFIG_MARKERS is not set
109CONFIG_HAVE_OPROFILE=y
110# CONFIG_KPROBES is not set
111CONFIG_HAVE_KPROBES=y
112CONFIG_PROC_PAGE_MONITOR=y
113CONFIG_SLABINFO=y
101CONFIG_RT_MUTEXES=y 114CONFIG_RT_MUTEXES=y
102# CONFIG_TINY_SHMEM is not set 115# CONFIG_TINY_SHMEM is not set
103CONFIG_BASE_SMALL=0 116CONFIG_BASE_SMALL=0
@@ -125,13 +138,15 @@ CONFIG_DEFAULT_AS=y
125# CONFIG_DEFAULT_CFQ is not set 138# CONFIG_DEFAULT_CFQ is not set
126# CONFIG_DEFAULT_NOOP is not set 139# CONFIG_DEFAULT_NOOP is not set
127CONFIG_DEFAULT_IOSCHED="anticipatory" 140CONFIG_DEFAULT_IOSCHED="anticipatory"
141CONFIG_CLASSIC_RCU=y
142# CONFIG_PREEMPT_RCU is not set
128CONFIG_PPC4xx_PCI_EXPRESS=y 143CONFIG_PPC4xx_PCI_EXPRESS=y
129 144
130# 145#
131# Platform support 146# Platform support
132# 147#
133# CONFIG_PPC_MPC52xx is not set 148# CONFIG_PPC_MPC512x is not set
134# CONFIG_PPC_MPC5200 is not set 149# CONFIG_PPC_MPC5121 is not set
135# CONFIG_PPC_CELL is not set 150# CONFIG_PPC_CELL is not set
136# CONFIG_PPC_CELL_NATIVE is not set 151# CONFIG_PPC_CELL_NATIVE is not set
137# CONFIG_PQ2ADS is not set 152# CONFIG_PQ2ADS is not set
@@ -141,6 +156,7 @@ CONFIG_MAKALU=y
141# CONFIG_WALNUT is not set 156# CONFIG_WALNUT is not set
142# CONFIG_XILINX_VIRTEX_GENERIC_BOARD is not set 157# CONFIG_XILINX_VIRTEX_GENERIC_BOARD is not set
143CONFIG_405EX=y 158CONFIG_405EX=y
159# CONFIG_IPIC is not set
144# CONFIG_MPIC is not set 160# CONFIG_MPIC is not set
145# CONFIG_MPIC_WEIRD is not set 161# CONFIG_MPIC_WEIRD is not set
146# CONFIG_PPC_I8259 is not set 162# CONFIG_PPC_I8259 is not set
@@ -151,7 +167,6 @@ CONFIG_405EX=y
151# CONFIG_PPC_INDIRECT_IO is not set 167# CONFIG_PPC_INDIRECT_IO is not set
152# CONFIG_GENERIC_IOMAP is not set 168# CONFIG_GENERIC_IOMAP is not set
153# CONFIG_CPU_FREQ is not set 169# CONFIG_CPU_FREQ is not set
154# CONFIG_CPM2 is not set
155# CONFIG_FSL_ULI1575 is not set 170# CONFIG_FSL_ULI1575 is not set
156 171
157# 172#
@@ -167,13 +182,18 @@ CONFIG_HZ_250=y
167# CONFIG_HZ_300 is not set 182# CONFIG_HZ_300 is not set
168# CONFIG_HZ_1000 is not set 183# CONFIG_HZ_1000 is not set
169CONFIG_HZ=250 184CONFIG_HZ=250
185# CONFIG_SCHED_HRTICK is not set
170CONFIG_PREEMPT_NONE=y 186CONFIG_PREEMPT_NONE=y
171# CONFIG_PREEMPT_VOLUNTARY is not set 187# CONFIG_PREEMPT_VOLUNTARY is not set
172# CONFIG_PREEMPT is not set 188# CONFIG_PREEMPT is not set
189CONFIG_RCU_TRACE=y
173CONFIG_BINFMT_ELF=y 190CONFIG_BINFMT_ELF=y
174# CONFIG_BINFMT_MISC is not set 191# CONFIG_BINFMT_MISC is not set
175# CONFIG_MATH_EMULATION is not set 192# CONFIG_MATH_EMULATION is not set
193# CONFIG_IOMMU_HELPER is not set
176CONFIG_ARCH_ENABLE_MEMORY_HOTPLUG=y 194CONFIG_ARCH_ENABLE_MEMORY_HOTPLUG=y
195CONFIG_ARCH_HAS_WALK_MEMORY=y
196CONFIG_ARCH_ENABLE_MEMORY_HOTREMOVE=y
177CONFIG_ARCH_FLATMEM_ENABLE=y 197CONFIG_ARCH_FLATMEM_ENABLE=y
178CONFIG_ARCH_POPULATES_NODE_MAP=y 198CONFIG_ARCH_POPULATES_NODE_MAP=y
179CONFIG_SELECT_MEMORY_MODEL=y 199CONFIG_SELECT_MEMORY_MODEL=y
@@ -192,11 +212,7 @@ CONFIG_VIRT_TO_BUS=y
192CONFIG_PROC_DEVICETREE=y 212CONFIG_PROC_DEVICETREE=y
193# CONFIG_CMDLINE_BOOL is not set 213# CONFIG_CMDLINE_BOOL is not set
194# CONFIG_PM is not set 214# CONFIG_PM is not set
195CONFIG_SUSPEND_UP_POSSIBLE=y
196CONFIG_HIBERNATION_UP_POSSIBLE=y
197CONFIG_SECCOMP=y 215CONFIG_SECCOMP=y
198CONFIG_WANT_DEVICE_TREE=y
199CONFIG_DEVICE_TREE="kilauea.dts"
200CONFIG_ISA_DMA_API=y 216CONFIG_ISA_DMA_API=y
201 217
202# 218#
@@ -296,6 +312,7 @@ CONFIG_DEFAULT_TCP_CONG="cubic"
296# 312#
297# CONFIG_NET_PKTGEN is not set 313# CONFIG_NET_PKTGEN is not set
298# CONFIG_HAMRADIO is not set 314# CONFIG_HAMRADIO is not set
315# CONFIG_CAN is not set
299# CONFIG_IRDA is not set 316# CONFIG_IRDA is not set
300# CONFIG_BT is not set 317# CONFIG_BT is not set
301# CONFIG_AF_RXRPC is not set 318# CONFIG_AF_RXRPC is not set
@@ -332,6 +349,7 @@ CONFIG_MTD=y
332CONFIG_MTD_PARTITIONS=y 349CONFIG_MTD_PARTITIONS=y
333# CONFIG_MTD_REDBOOT_PARTS is not set 350# CONFIG_MTD_REDBOOT_PARTS is not set
334CONFIG_MTD_CMDLINE_PARTS=y 351CONFIG_MTD_CMDLINE_PARTS=y
352CONFIG_MTD_OF_PARTS=y
335 353
336# 354#
337# User Modules And Translation Layers 355# User Modules And Translation Layers
@@ -418,11 +436,12 @@ CONFIG_BLK_DEV=y
418CONFIG_BLK_DEV_RAM=y 436CONFIG_BLK_DEV_RAM=y
419CONFIG_BLK_DEV_RAM_COUNT=16 437CONFIG_BLK_DEV_RAM_COUNT=16
420CONFIG_BLK_DEV_RAM_SIZE=35000 438CONFIG_BLK_DEV_RAM_SIZE=35000
421CONFIG_BLK_DEV_RAM_BLOCKSIZE=1024 439# CONFIG_BLK_DEV_XIP is not set
422# CONFIG_CDROM_PKTCDVD is not set 440# CONFIG_CDROM_PKTCDVD is not set
423# CONFIG_ATA_OVER_ETH is not set 441# CONFIG_ATA_OVER_ETH is not set
424# CONFIG_XILINX_SYSACE is not set 442# CONFIG_XILINX_SYSACE is not set
425# CONFIG_MISC_DEVICES is not set 443# CONFIG_MISC_DEVICES is not set
444CONFIG_HAVE_IDE=y
426# CONFIG_IDE is not set 445# CONFIG_IDE is not set
427 446
428# 447#
@@ -451,7 +470,6 @@ CONFIG_NETDEVICES=y
451# CONFIG_EQUALIZER is not set 470# CONFIG_EQUALIZER is not set
452# CONFIG_TUN is not set 471# CONFIG_TUN is not set
453# CONFIG_VETH is not set 472# CONFIG_VETH is not set
454# CONFIG_IP1000 is not set
455# CONFIG_ARCNET is not set 473# CONFIG_ARCNET is not set
456# CONFIG_PHYLIB is not set 474# CONFIG_PHYLIB is not set
457CONFIG_NET_ETHERNET=y 475CONFIG_NET_ETHERNET=y
@@ -489,7 +507,6 @@ CONFIG_IBM_NEW_EMAC_EMAC4=y
489# CONFIG_HIPPI is not set 507# CONFIG_HIPPI is not set
490# CONFIG_PPP is not set 508# CONFIG_PPP is not set
491# CONFIG_SLIP is not set 509# CONFIG_SLIP is not set
492# CONFIG_SHAPER is not set
493# CONFIG_NETCONSOLE is not set 510# CONFIG_NETCONSOLE is not set
494# CONFIG_NETPOLL is not set 511# CONFIG_NETPOLL is not set
495# CONFIG_NET_POLL_CONTROLLER is not set 512# CONFIG_NET_POLL_CONTROLLER is not set
@@ -512,6 +529,7 @@ CONFIG_IBM_NEW_EMAC_EMAC4=y
512# 529#
513# CONFIG_VT is not set 530# CONFIG_VT is not set
514# CONFIG_SERIAL_NONSTANDARD is not set 531# CONFIG_SERIAL_NONSTANDARD is not set
532# CONFIG_NOZOMI is not set
515 533
516# 534#
517# Serial drivers 535# Serial drivers
@@ -557,6 +575,7 @@ CONFIG_DEVPORT=y
557# CONFIG_W1 is not set 575# CONFIG_W1 is not set
558# CONFIG_POWER_SUPPLY is not set 576# CONFIG_POWER_SUPPLY is not set
559# CONFIG_HWMON is not set 577# CONFIG_HWMON is not set
578CONFIG_THERMAL=y
560# CONFIG_WATCHDOG is not set 579# CONFIG_WATCHDOG is not set
561 580
562# 581#
@@ -598,6 +617,7 @@ CONFIG_SSB_POSSIBLE=y
598# CONFIG_SOUND is not set 617# CONFIG_SOUND is not set
599# CONFIG_USB_SUPPORT is not set 618# CONFIG_USB_SUPPORT is not set
600# CONFIG_MMC is not set 619# CONFIG_MMC is not set
620# CONFIG_MEMSTICK is not set
601# CONFIG_NEW_LEDS is not set 621# CONFIG_NEW_LEDS is not set
602# CONFIG_INFINIBAND is not set 622# CONFIG_INFINIBAND is not set
603# CONFIG_EDAC is not set 623# CONFIG_EDAC is not set
@@ -622,12 +642,10 @@ CONFIG_EXT2_FS=y
622# CONFIG_XFS_FS is not set 642# CONFIG_XFS_FS is not set
623# CONFIG_GFS2_FS is not set 643# CONFIG_GFS2_FS is not set
624# CONFIG_OCFS2_FS is not set 644# CONFIG_OCFS2_FS is not set
625# CONFIG_MINIX_FS is not set 645CONFIG_DNOTIFY=y
626# CONFIG_ROMFS_FS is not set
627CONFIG_INOTIFY=y 646CONFIG_INOTIFY=y
628CONFIG_INOTIFY_USER=y 647CONFIG_INOTIFY_USER=y
629# CONFIG_QUOTA is not set 648# CONFIG_QUOTA is not set
630CONFIG_DNOTIFY=y
631# CONFIG_AUTOFS_FS is not set 649# CONFIG_AUTOFS_FS is not set
632# CONFIG_AUTOFS4_FS is not set 650# CONFIG_AUTOFS4_FS is not set
633# CONFIG_FUSE_FS is not set 651# CONFIG_FUSE_FS is not set
@@ -670,8 +688,10 @@ CONFIG_TMPFS=y
670# CONFIG_JFFS2_FS is not set 688# CONFIG_JFFS2_FS is not set
671CONFIG_CRAMFS=y 689CONFIG_CRAMFS=y
672# CONFIG_VXFS_FS is not set 690# CONFIG_VXFS_FS is not set
691# CONFIG_MINIX_FS is not set
673# CONFIG_HPFS_FS is not set 692# CONFIG_HPFS_FS is not set
674# CONFIG_QNX4FS_FS is not set 693# CONFIG_QNX4FS_FS is not set
694# CONFIG_ROMFS_FS is not set
675# CONFIG_SYSV_FS is not set 695# CONFIG_SYSV_FS is not set
676# CONFIG_UFS_FS is not set 696# CONFIG_UFS_FS is not set
677CONFIG_NETWORK_FILESYSTEMS=y 697CONFIG_NETWORK_FILESYSTEMS=y
@@ -702,7 +722,6 @@ CONFIG_SUNRPC=y
702CONFIG_MSDOS_PARTITION=y 722CONFIG_MSDOS_PARTITION=y
703# CONFIG_NLS is not set 723# CONFIG_NLS is not set
704# CONFIG_DLM is not set 724# CONFIG_DLM is not set
705# CONFIG_UCC_SLOW is not set
706 725
707# 726#
708# Library routines 727# Library routines
@@ -719,7 +738,6 @@ CONFIG_PLIST=y
719CONFIG_HAS_IOMEM=y 738CONFIG_HAS_IOMEM=y
720CONFIG_HAS_IOPORT=y 739CONFIG_HAS_IOPORT=y
721CONFIG_HAS_DMA=y 740CONFIG_HAS_DMA=y
722# CONFIG_INSTRUMENTATION is not set
723 741
724# 742#
725# Kernel hacking 743# Kernel hacking
@@ -729,7 +747,7 @@ CONFIG_ENABLE_WARN_DEPRECATED=y
729CONFIG_ENABLE_MUST_CHECK=y 747CONFIG_ENABLE_MUST_CHECK=y
730CONFIG_MAGIC_SYSRQ=y 748CONFIG_MAGIC_SYSRQ=y
731# CONFIG_UNUSED_SYMBOLS is not set 749# CONFIG_UNUSED_SYMBOLS is not set
732# CONFIG_DEBUG_FS is not set 750CONFIG_DEBUG_FS=y
733# CONFIG_HEADERS_CHECK is not set 751# CONFIG_HEADERS_CHECK is not set
734CONFIG_DEBUG_KERNEL=y 752CONFIG_DEBUG_KERNEL=y
735# CONFIG_DEBUG_SHIRQ is not set 753# CONFIG_DEBUG_SHIRQ is not set
@@ -738,6 +756,7 @@ CONFIG_SCHED_DEBUG=y
738# CONFIG_SCHEDSTATS is not set 756# CONFIG_SCHEDSTATS is not set
739# CONFIG_TIMER_STATS is not set 757# CONFIG_TIMER_STATS is not set
740# CONFIG_SLUB_DEBUG_ON is not set 758# CONFIG_SLUB_DEBUG_ON is not set
759# CONFIG_SLUB_STATS is not set
741# CONFIG_DEBUG_RT_MUTEXES is not set 760# CONFIG_DEBUG_RT_MUTEXES is not set
742# CONFIG_RT_MUTEX_TESTER is not set 761# CONFIG_RT_MUTEX_TESTER is not set
743# CONFIG_DEBUG_SPINLOCK is not set 762# CONFIG_DEBUG_SPINLOCK is not set
@@ -750,15 +769,16 @@ CONFIG_DEBUG_BUGVERBOSE=y
750# CONFIG_DEBUG_VM is not set 769# CONFIG_DEBUG_VM is not set
751# CONFIG_DEBUG_LIST is not set 770# CONFIG_DEBUG_LIST is not set
752# CONFIG_DEBUG_SG is not set 771# CONFIG_DEBUG_SG is not set
753CONFIG_FORCED_INLINING=y
754# CONFIG_BOOT_PRINTK_DELAY is not set 772# CONFIG_BOOT_PRINTK_DELAY is not set
755# CONFIG_RCU_TORTURE_TEST is not set 773# CONFIG_RCU_TORTURE_TEST is not set
774# CONFIG_BACKTRACE_SELF_TEST is not set
756# CONFIG_FAULT_INJECTION is not set 775# CONFIG_FAULT_INJECTION is not set
757# CONFIG_SAMPLES is not set 776# CONFIG_SAMPLES is not set
758# CONFIG_DEBUG_STACKOVERFLOW is not set 777# CONFIG_DEBUG_STACKOVERFLOW is not set
759# CONFIG_DEBUG_STACK_USAGE is not set 778# CONFIG_DEBUG_STACK_USAGE is not set
760# CONFIG_DEBUG_PAGEALLOC is not set 779# CONFIG_DEBUG_PAGEALLOC is not set
761# CONFIG_DEBUGGER is not set 780# CONFIG_DEBUGGER is not set
781# CONFIG_VIRQ_DEBUG is not set
762# CONFIG_BDI_SWITCH is not set 782# CONFIG_BDI_SWITCH is not set
763# CONFIG_PPC_EARLY_DEBUG is not set 783# CONFIG_PPC_EARLY_DEBUG is not set
764 784
@@ -771,6 +791,7 @@ CONFIG_FORCED_INLINING=y
771CONFIG_CRYPTO=y 791CONFIG_CRYPTO=y
772CONFIG_CRYPTO_ALGAPI=y 792CONFIG_CRYPTO_ALGAPI=y
773CONFIG_CRYPTO_BLKCIPHER=y 793CONFIG_CRYPTO_BLKCIPHER=y
794# CONFIG_CRYPTO_SEQIV is not set
774CONFIG_CRYPTO_MANAGER=y 795CONFIG_CRYPTO_MANAGER=y
775# CONFIG_CRYPTO_HMAC is not set 796# CONFIG_CRYPTO_HMAC is not set
776# CONFIG_CRYPTO_XCBC is not set 797# CONFIG_CRYPTO_XCBC is not set
@@ -788,6 +809,9 @@ CONFIG_CRYPTO_CBC=y
788CONFIG_CRYPTO_PCBC=y 809CONFIG_CRYPTO_PCBC=y
789# CONFIG_CRYPTO_LRW is not set 810# CONFIG_CRYPTO_LRW is not set
790# CONFIG_CRYPTO_XTS is not set 811# CONFIG_CRYPTO_XTS is not set
812# CONFIG_CRYPTO_CTR is not set
813# CONFIG_CRYPTO_GCM is not set
814# CONFIG_CRYPTO_CCM is not set
791# CONFIG_CRYPTO_CRYPTD is not set 815# CONFIG_CRYPTO_CRYPTD is not set
792CONFIG_CRYPTO_DES=y 816CONFIG_CRYPTO_DES=y
793# CONFIG_CRYPTO_FCRYPT is not set 817# CONFIG_CRYPTO_FCRYPT is not set
@@ -802,11 +826,14 @@ CONFIG_CRYPTO_DES=y
802# CONFIG_CRYPTO_KHAZAD is not set 826# CONFIG_CRYPTO_KHAZAD is not set
803# CONFIG_CRYPTO_ANUBIS is not set 827# CONFIG_CRYPTO_ANUBIS is not set
804# CONFIG_CRYPTO_SEED is not set 828# CONFIG_CRYPTO_SEED is not set
829# CONFIG_CRYPTO_SALSA20 is not set
805# CONFIG_CRYPTO_DEFLATE is not set 830# CONFIG_CRYPTO_DEFLATE is not set
806# CONFIG_CRYPTO_MICHAEL_MIC is not set 831# CONFIG_CRYPTO_MICHAEL_MIC is not set
807# CONFIG_CRYPTO_CRC32C is not set 832# CONFIG_CRYPTO_CRC32C is not set
808# CONFIG_CRYPTO_CAMELLIA is not set 833# CONFIG_CRYPTO_CAMELLIA is not set
809# CONFIG_CRYPTO_TEST is not set 834# CONFIG_CRYPTO_TEST is not set
810# CONFIG_CRYPTO_AUTHENC is not set 835# CONFIG_CRYPTO_AUTHENC is not set
836# CONFIG_CRYPTO_LZO is not set
811CONFIG_CRYPTO_HW=y 837CONFIG_CRYPTO_HW=y
838# CONFIG_CRYPTO_DEV_HIFN_795X is not set
812# CONFIG_PPC_CLOCK is not set 839# CONFIG_PPC_CLOCK is not set
diff --git a/arch/powerpc/configs/ppc44x_defconfig b/arch/powerpc/configs/ppc44x_defconfig
new file mode 100644
index 000000000000..57bd775ef777
--- /dev/null
+++ b/arch/powerpc/configs/ppc44x_defconfig
@@ -0,0 +1,904 @@
1#
2# Automatically generated make config: don't edit
3# Linux kernel version: 2.6.25-rc2
4# Fri Feb 15 21:57:35 2008
5#
6# CONFIG_PPC64 is not set
7
8#
9# Processor support
10#
11# CONFIG_6xx is not set
12# CONFIG_PPC_85xx is not set
13# CONFIG_PPC_8xx is not set
14# CONFIG_40x is not set
15CONFIG_44x=y
16# CONFIG_E200 is not set
17CONFIG_PPC_FPU=y
18CONFIG_4xx=y
19CONFIG_BOOKE=y
20CONFIG_PTE_64BIT=y
21CONFIG_PHYS_64BIT=y
22# CONFIG_PPC_MM_SLICES is not set
23CONFIG_NOT_COHERENT_CACHE=y
24CONFIG_PPC32=y
25CONFIG_WORD_SIZE=32
26CONFIG_PPC_MERGE=y
27CONFIG_MMU=y
28CONFIG_GENERIC_CMOS_UPDATE=y
29CONFIG_GENERIC_TIME=y
30CONFIG_GENERIC_TIME_VSYSCALL=y
31CONFIG_GENERIC_CLOCKEVENTS=y
32CONFIG_GENERIC_HARDIRQS=y
33# CONFIG_HAVE_SETUP_PER_CPU_AREA is not set
34CONFIG_IRQ_PER_CPU=y
35CONFIG_RWSEM_XCHGADD_ALGORITHM=y
36CONFIG_ARCH_HAS_ILOG2_U32=y
37CONFIG_GENERIC_HWEIGHT=y
38CONFIG_GENERIC_CALIBRATE_DELAY=y
39CONFIG_GENERIC_FIND_NEXT_BIT=y
40# CONFIG_ARCH_NO_VIRT_TO_BUS is not set
41CONFIG_PPC=y
42CONFIG_EARLY_PRINTK=y
43CONFIG_GENERIC_NVRAM=y
44CONFIG_SCHED_NO_NO_OMIT_FRAME_POINTER=y
45CONFIG_ARCH_MAY_HAVE_PC_FDC=y
46CONFIG_PPC_OF=y
47CONFIG_OF=y
48CONFIG_PPC_UDBG_16550=y
49# CONFIG_GENERIC_TBSYNC is not set
50CONFIG_AUDIT_ARCH=y
51CONFIG_GENERIC_BUG=y
52# CONFIG_DEFAULT_UIMAGE is not set
53CONFIG_PPC_DCR_NATIVE=y
54# CONFIG_PPC_DCR_MMIO is not set
55CONFIG_PPC_DCR=y
56CONFIG_DEFCONFIG_LIST="/lib/modules/$UNAME_RELEASE/.config"
57
58#
59# General setup
60#
61CONFIG_EXPERIMENTAL=y
62CONFIG_BROKEN_ON_SMP=y
63CONFIG_INIT_ENV_ARG_LIMIT=32
64CONFIG_LOCALVERSION=""
65CONFIG_LOCALVERSION_AUTO=y
66CONFIG_SWAP=y
67CONFIG_SYSVIPC=y
68CONFIG_SYSVIPC_SYSCTL=y
69CONFIG_POSIX_MQUEUE=y
70# CONFIG_BSD_PROCESS_ACCT is not set
71# CONFIG_TASKSTATS is not set
72# CONFIG_AUDIT is not set
73# CONFIG_IKCONFIG is not set
74CONFIG_LOG_BUF_SHIFT=14
75# CONFIG_CGROUPS is not set
76CONFIG_GROUP_SCHED=y
77CONFIG_FAIR_GROUP_SCHED=y
78# CONFIG_RT_GROUP_SCHED is not set
79CONFIG_USER_SCHED=y
80# CONFIG_CGROUP_SCHED is not set
81CONFIG_SYSFS_DEPRECATED=y
82# CONFIG_RELAY is not set
83# CONFIG_NAMESPACES is not set
84CONFIG_BLK_DEV_INITRD=y
85CONFIG_INITRAMFS_SOURCE=""
86# CONFIG_CC_OPTIMIZE_FOR_SIZE is not set
87CONFIG_SYSCTL=y
88CONFIG_EMBEDDED=y
89CONFIG_SYSCTL_SYSCALL=y
90CONFIG_KALLSYMS=y
91CONFIG_KALLSYMS_ALL=y
92CONFIG_KALLSYMS_EXTRA_PASS=y
93CONFIG_HOTPLUG=y
94CONFIG_PRINTK=y
95CONFIG_BUG=y
96CONFIG_ELF_CORE=y
97CONFIG_COMPAT_BRK=y
98CONFIG_BASE_FULL=y
99CONFIG_FUTEX=y
100CONFIG_ANON_INODES=y
101CONFIG_EPOLL=y
102CONFIG_SIGNALFD=y
103CONFIG_TIMERFD=y
104CONFIG_EVENTFD=y
105CONFIG_SHMEM=y
106CONFIG_VM_EVENT_COUNTERS=y
107CONFIG_SLUB_DEBUG=y
108# CONFIG_SLAB is not set
109CONFIG_SLUB=y
110# CONFIG_SLOB is not set
111# CONFIG_PROFILING is not set
112# CONFIG_MARKERS is not set
113CONFIG_HAVE_OPROFILE=y
114# CONFIG_KPROBES is not set
115CONFIG_HAVE_KPROBES=y
116CONFIG_PROC_PAGE_MONITOR=y
117CONFIG_SLABINFO=y
118CONFIG_RT_MUTEXES=y
119# CONFIG_TINY_SHMEM is not set
120CONFIG_BASE_SMALL=0
121CONFIG_MODULES=y
122CONFIG_MODULE_UNLOAD=y
123# CONFIG_MODULE_FORCE_UNLOAD is not set
124# CONFIG_MODVERSIONS is not set
125# CONFIG_MODULE_SRCVERSION_ALL is not set
126CONFIG_KMOD=y
127CONFIG_BLOCK=y
128CONFIG_LBD=y
129# CONFIG_BLK_DEV_IO_TRACE is not set
130# CONFIG_LSF is not set
131# CONFIG_BLK_DEV_BSG is not set
132
133#
134# IO Schedulers
135#
136CONFIG_IOSCHED_NOOP=y
137CONFIG_IOSCHED_AS=y
138CONFIG_IOSCHED_DEADLINE=y
139CONFIG_IOSCHED_CFQ=y
140CONFIG_DEFAULT_AS=y
141# CONFIG_DEFAULT_DEADLINE is not set
142# CONFIG_DEFAULT_CFQ is not set
143# CONFIG_DEFAULT_NOOP is not set
144CONFIG_DEFAULT_IOSCHED="anticipatory"
145CONFIG_CLASSIC_RCU=y
146# CONFIG_PREEMPT_RCU is not set
147CONFIG_PPC4xx_PCI_EXPRESS=y
148
149#
150# Platform support
151#
152# CONFIG_PPC_MPC512x is not set
153# CONFIG_PPC_MPC5121 is not set
154# CONFIG_PPC_CELL is not set
155# CONFIG_PPC_CELL_NATIVE is not set
156# CONFIG_PQ2ADS is not set
157CONFIG_BAMBOO=y
158CONFIG_EBONY=y
159CONFIG_SEQUOIA=y
160CONFIG_TAISHAN=y
161CONFIG_KATMAI=y
162CONFIG_RAINIER=y
163CONFIG_WARP=y
164CONFIG_440EP=y
165CONFIG_440EPX=y
166CONFIG_440GRX=y
167CONFIG_440GP=y
168CONFIG_440GX=y
169CONFIG_440SPe=y
170CONFIG_IBM440EP_ERR42=y
171# CONFIG_IPIC is not set
172# CONFIG_MPIC is not set
173# CONFIG_MPIC_WEIRD is not set
174# CONFIG_PPC_I8259 is not set
175# CONFIG_PPC_RTAS is not set
176# CONFIG_MMIO_NVRAM is not set
177# CONFIG_PPC_MPC106 is not set
178# CONFIG_PPC_970_NAP is not set
179# CONFIG_PPC_INDIRECT_IO is not set
180# CONFIG_GENERIC_IOMAP is not set
181# CONFIG_CPU_FREQ is not set
182# CONFIG_FSL_ULI1575 is not set
183CONFIG_OF_RTC=y
184
185#
186# Kernel options
187#
188# CONFIG_HIGHMEM is not set
189# CONFIG_TICK_ONESHOT is not set
190# CONFIG_NO_HZ is not set
191# CONFIG_HIGH_RES_TIMERS is not set
192CONFIG_GENERIC_CLOCKEVENTS_BUILD=y
193# CONFIG_HZ_100 is not set
194CONFIG_HZ_250=y
195# CONFIG_HZ_300 is not set
196# CONFIG_HZ_1000 is not set
197CONFIG_HZ=250
198# CONFIG_SCHED_HRTICK is not set
199CONFIG_PREEMPT_NONE=y
200# CONFIG_PREEMPT_VOLUNTARY is not set
201# CONFIG_PREEMPT is not set
202# CONFIG_RCU_TRACE is not set
203CONFIG_BINFMT_ELF=y
204# CONFIG_BINFMT_MISC is not set
205CONFIG_MATH_EMULATION=y
206# CONFIG_IOMMU_HELPER is not set
207CONFIG_ARCH_ENABLE_MEMORY_HOTPLUG=y
208CONFIG_ARCH_HAS_WALK_MEMORY=y
209CONFIG_ARCH_ENABLE_MEMORY_HOTREMOVE=y
210CONFIG_ARCH_FLATMEM_ENABLE=y
211CONFIG_ARCH_POPULATES_NODE_MAP=y
212CONFIG_SELECT_MEMORY_MODEL=y
213CONFIG_FLATMEM_MANUAL=y
214# CONFIG_DISCONTIGMEM_MANUAL is not set
215# CONFIG_SPARSEMEM_MANUAL is not set
216CONFIG_FLATMEM=y
217CONFIG_FLAT_NODE_MEM_MAP=y
218# CONFIG_SPARSEMEM_STATIC is not set
219# CONFIG_SPARSEMEM_VMEMMAP_ENABLE is not set
220CONFIG_SPLIT_PTLOCK_CPUS=4
221CONFIG_RESOURCES_64BIT=y
222CONFIG_ZONE_DMA_FLAG=1
223CONFIG_BOUNCE=y
224CONFIG_VIRT_TO_BUS=y
225CONFIG_PROC_DEVICETREE=y
226# CONFIG_CMDLINE_BOOL is not set
227CONFIG_SECCOMP=y
228CONFIG_ISA_DMA_API=y
229
230#
231# Bus options
232#
233CONFIG_ZONE_DMA=y
234CONFIG_PPC_INDIRECT_PCI=y
235CONFIG_PCI=y
236CONFIG_PCI_DOMAINS=y
237CONFIG_PCI_SYSCALL=y
238# CONFIG_PCIEPORTBUS is not set
239CONFIG_ARCH_SUPPORTS_MSI=y
240# CONFIG_PCI_MSI is not set
241CONFIG_PCI_LEGACY=y
242# CONFIG_PCI_DEBUG is not set
243# CONFIG_PCCARD is not set
244# CONFIG_HOTPLUG_PCI is not set
245
246#
247# Advanced setup
248#
249# CONFIG_ADVANCED_OPTIONS is not set
250
251#
252# Default settings for advanced configuration options are used
253#
254CONFIG_HIGHMEM_START=0xfe000000
255CONFIG_LOWMEM_SIZE=0x30000000
256CONFIG_KERNEL_START=0xc0000000
257CONFIG_TASK_SIZE=0xc0000000
258CONFIG_CONSISTENT_START=0xff100000
259CONFIG_CONSISTENT_SIZE=0x00200000
260CONFIG_BOOT_LOAD=0x01000000
261
262#
263# Networking
264#
265CONFIG_NET=y
266
267#
268# Networking options
269#
270CONFIG_PACKET=y
271# CONFIG_PACKET_MMAP is not set
272CONFIG_UNIX=y
273# CONFIG_NET_KEY is not set
274CONFIG_INET=y
275# CONFIG_IP_MULTICAST is not set
276# CONFIG_IP_ADVANCED_ROUTER is not set
277CONFIG_IP_FIB_HASH=y
278CONFIG_IP_PNP=y
279CONFIG_IP_PNP_DHCP=y
280CONFIG_IP_PNP_BOOTP=y
281# CONFIG_IP_PNP_RARP is not set
282# CONFIG_NET_IPIP is not set
283# CONFIG_NET_IPGRE is not set
284# CONFIG_ARPD is not set
285# CONFIG_SYN_COOKIES is not set
286# CONFIG_INET_AH is not set
287# CONFIG_INET_ESP is not set
288# CONFIG_INET_IPCOMP is not set
289# CONFIG_INET_XFRM_TUNNEL is not set
290# CONFIG_INET_TUNNEL is not set
291# CONFIG_INET_XFRM_MODE_TRANSPORT is not set
292# CONFIG_INET_XFRM_MODE_TUNNEL is not set
293# CONFIG_INET_XFRM_MODE_BEET is not set
294# CONFIG_INET_LRO is not set
295CONFIG_INET_DIAG=y
296CONFIG_INET_TCP_DIAG=y
297# CONFIG_TCP_CONG_ADVANCED is not set
298CONFIG_TCP_CONG_CUBIC=y
299CONFIG_DEFAULT_TCP_CONG="cubic"
300# CONFIG_TCP_MD5SIG is not set
301# CONFIG_IPV6 is not set
302# CONFIG_INET6_XFRM_TUNNEL is not set
303# CONFIG_INET6_TUNNEL is not set
304# CONFIG_NETWORK_SECMARK is not set
305# CONFIG_NETFILTER is not set
306# CONFIG_IP_DCCP is not set
307# CONFIG_IP_SCTP is not set
308# CONFIG_TIPC is not set
309# CONFIG_ATM is not set
310# CONFIG_BRIDGE is not set
311# CONFIG_VLAN_8021Q is not set
312# CONFIG_DECNET is not set
313# CONFIG_LLC2 is not set
314# CONFIG_IPX is not set
315# CONFIG_ATALK is not set
316# CONFIG_X25 is not set
317# CONFIG_LAPB is not set
318# CONFIG_ECONET is not set
319# CONFIG_WAN_ROUTER is not set
320# CONFIG_NET_SCHED is not set
321
322#
323# Network testing
324#
325# CONFIG_NET_PKTGEN is not set
326# CONFIG_HAMRADIO is not set
327# CONFIG_CAN is not set
328# CONFIG_IRDA is not set
329# CONFIG_BT is not set
330# CONFIG_AF_RXRPC is not set
331
332#
333# Wireless
334#
335# CONFIG_CFG80211 is not set
336# CONFIG_WIRELESS_EXT is not set
337# CONFIG_MAC80211 is not set
338# CONFIG_IEEE80211 is not set
339# CONFIG_RFKILL is not set
340# CONFIG_NET_9P is not set
341
342#
343# Device Drivers
344#
345
346#
347# Generic Driver Options
348#
349CONFIG_UEVENT_HELPER_PATH="/sbin/hotplug"
350CONFIG_STANDALONE=y
351CONFIG_PREVENT_FIRMWARE_BUILD=y
352CONFIG_FW_LOADER=y
353# CONFIG_DEBUG_DRIVER is not set
354# CONFIG_DEBUG_DEVRES is not set
355# CONFIG_SYS_HYPERVISOR is not set
356CONFIG_CONNECTOR=y
357CONFIG_PROC_EVENTS=y
358CONFIG_MTD=y
359# CONFIG_MTD_DEBUG is not set
360# CONFIG_MTD_CONCAT is not set
361CONFIG_MTD_PARTITIONS=y
362# CONFIG_MTD_REDBOOT_PARTS is not set
363# CONFIG_MTD_CMDLINE_PARTS is not set
364CONFIG_MTD_OF_PARTS=y
365
366#
367# User Modules And Translation Layers
368#
369CONFIG_MTD_CHAR=y
370CONFIG_MTD_BLKDEVS=y
371CONFIG_MTD_BLOCK=y
372# CONFIG_FTL is not set
373# CONFIG_NFTL is not set
374# CONFIG_INFTL is not set
375# CONFIG_RFD_FTL is not set
376# CONFIG_SSFDC is not set
377# CONFIG_MTD_OOPS is not set
378
379#
380# RAM/ROM/Flash chip drivers
381#
382CONFIG_MTD_CFI=y
383CONFIG_MTD_JEDECPROBE=y
384CONFIG_MTD_GEN_PROBE=y
385# CONFIG_MTD_CFI_ADV_OPTIONS is not set
386CONFIG_MTD_MAP_BANK_WIDTH_1=y
387CONFIG_MTD_MAP_BANK_WIDTH_2=y
388CONFIG_MTD_MAP_BANK_WIDTH_4=y
389# CONFIG_MTD_MAP_BANK_WIDTH_8 is not set
390# CONFIG_MTD_MAP_BANK_WIDTH_16 is not set
391# CONFIG_MTD_MAP_BANK_WIDTH_32 is not set
392CONFIG_MTD_CFI_I1=y
393CONFIG_MTD_CFI_I2=y
394# CONFIG_MTD_CFI_I4 is not set
395# CONFIG_MTD_CFI_I8 is not set
396# CONFIG_MTD_CFI_INTELEXT is not set
397CONFIG_MTD_CFI_AMDSTD=y
398# CONFIG_MTD_CFI_STAA is not set
399CONFIG_MTD_CFI_UTIL=y
400# CONFIG_MTD_RAM is not set
401# CONFIG_MTD_ROM is not set
402# CONFIG_MTD_ABSENT is not set
403
404#
405# Mapping drivers for chip access
406#
407# CONFIG_MTD_COMPLEX_MAPPINGS is not set
408# CONFIG_MTD_PHYSMAP is not set
409CONFIG_MTD_PHYSMAP_OF=y
410# CONFIG_MTD_INTEL_VR_NOR is not set
411# CONFIG_MTD_PLATRAM is not set
412
413#
414# Self-contained MTD device drivers
415#
416# CONFIG_MTD_PMC551 is not set
417# CONFIG_MTD_SLRAM is not set
418# CONFIG_MTD_PHRAM is not set
419# CONFIG_MTD_MTDRAM is not set
420# CONFIG_MTD_BLOCK2MTD is not set
421
422#
423# Disk-On-Chip Device Drivers
424#
425# CONFIG_MTD_DOC2000 is not set
426# CONFIG_MTD_DOC2001 is not set
427# CONFIG_MTD_DOC2001PLUS is not set
428# CONFIG_MTD_NAND is not set
429# CONFIG_MTD_ONENAND is not set
430
431#
432# UBI - Unsorted block images
433#
434# CONFIG_MTD_UBI is not set
435CONFIG_OF_DEVICE=y
436# CONFIG_PARPORT is not set
437CONFIG_BLK_DEV=y
438# CONFIG_BLK_DEV_FD is not set
439# CONFIG_BLK_CPQ_DA is not set
440# CONFIG_BLK_CPQ_CISS_DA is not set
441# CONFIG_BLK_DEV_DAC960 is not set
442# CONFIG_BLK_DEV_UMEM is not set
443# CONFIG_BLK_DEV_COW_COMMON is not set
444# CONFIG_BLK_DEV_LOOP is not set
445# CONFIG_BLK_DEV_NBD is not set
446# CONFIG_BLK_DEV_SX8 is not set
447CONFIG_BLK_DEV_RAM=y
448CONFIG_BLK_DEV_RAM_COUNT=16
449CONFIG_BLK_DEV_RAM_SIZE=35000
450# CONFIG_BLK_DEV_XIP is not set
451# CONFIG_CDROM_PKTCDVD is not set
452# CONFIG_ATA_OVER_ETH is not set
453# CONFIG_XILINX_SYSACE is not set
454CONFIG_MISC_DEVICES=y
455# CONFIG_PHANTOM is not set
456# CONFIG_EEPROM_93CX6 is not set
457# CONFIG_SGI_IOC4 is not set
458# CONFIG_TIFM_CORE is not set
459# CONFIG_ENCLOSURE_SERVICES is not set
460CONFIG_HAVE_IDE=y
461# CONFIG_IDE is not set
462
463#
464# SCSI device support
465#
466# CONFIG_RAID_ATTRS is not set
467# CONFIG_SCSI is not set
468# CONFIG_SCSI_DMA is not set
469# CONFIG_SCSI_NETLINK is not set
470# CONFIG_ATA is not set
471# CONFIG_MD is not set
472# CONFIG_FUSION is not set
473
474#
475# IEEE 1394 (FireWire) support
476#
477# CONFIG_FIREWIRE is not set
478# CONFIG_IEEE1394 is not set
479# CONFIG_I2O is not set
480# CONFIG_MACINTOSH_DRIVERS is not set
481CONFIG_NETDEVICES=y
482# CONFIG_NETDEVICES_MULTIQUEUE is not set
483# CONFIG_DUMMY is not set
484# CONFIG_BONDING is not set
485# CONFIG_MACVLAN is not set
486# CONFIG_EQUALIZER is not set
487# CONFIG_TUN is not set
488# CONFIG_VETH is not set
489# CONFIG_ARCNET is not set
490# CONFIG_PHYLIB is not set
491CONFIG_NET_ETHERNET=y
492# CONFIG_MII is not set
493# CONFIG_HAPPYMEAL is not set
494# CONFIG_SUNGEM is not set
495# CONFIG_CASSINI is not set
496# CONFIG_NET_VENDOR_3COM is not set
497# CONFIG_NET_TULIP is not set
498# CONFIG_HP100 is not set
499CONFIG_IBM_NEW_EMAC=y
500CONFIG_IBM_NEW_EMAC_RXB=128
501CONFIG_IBM_NEW_EMAC_TXB=64
502CONFIG_IBM_NEW_EMAC_POLL_WEIGHT=32
503CONFIG_IBM_NEW_EMAC_RX_COPY_THRESHOLD=256
504CONFIG_IBM_NEW_EMAC_RX_SKB_HEADROOM=0
505# CONFIG_IBM_NEW_EMAC_DEBUG is not set
506CONFIG_IBM_NEW_EMAC_ZMII=y
507CONFIG_IBM_NEW_EMAC_RGMII=y
508CONFIG_IBM_NEW_EMAC_TAH=y
509CONFIG_IBM_NEW_EMAC_EMAC4=y
510# CONFIG_NET_PCI is not set
511# CONFIG_B44 is not set
512CONFIG_NETDEV_1000=y
513# CONFIG_ACENIC is not set
514# CONFIG_DL2K is not set
515# CONFIG_E1000 is not set
516# CONFIG_E1000E is not set
517# CONFIG_E1000E_ENABLED is not set
518# CONFIG_IP1000 is not set
519# CONFIG_IGB is not set
520# CONFIG_NS83820 is not set
521# CONFIG_HAMACHI is not set
522# CONFIG_YELLOWFIN is not set
523# CONFIG_R8169 is not set
524# CONFIG_SIS190 is not set
525# CONFIG_SKGE is not set
526# CONFIG_SKY2 is not set
527# CONFIG_SK98LIN is not set
528# CONFIG_VIA_VELOCITY is not set
529# CONFIG_TIGON3 is not set
530# CONFIG_BNX2 is not set
531# CONFIG_QLA3XXX is not set
532# CONFIG_ATL1 is not set
533CONFIG_NETDEV_10000=y
534# CONFIG_CHELSIO_T1 is not set
535# CONFIG_CHELSIO_T3 is not set
536# CONFIG_IXGBE is not set
537# CONFIG_IXGB is not set
538# CONFIG_S2IO is not set
539# CONFIG_MYRI10GE is not set
540# CONFIG_NETXEN_NIC is not set
541# CONFIG_NIU is not set
542# CONFIG_MLX4_CORE is not set
543# CONFIG_TEHUTI is not set
544# CONFIG_BNX2X is not set
545# CONFIG_TR is not set
546
547#
548# Wireless LAN
549#
550# CONFIG_WLAN_PRE80211 is not set
551# CONFIG_WLAN_80211 is not set
552# CONFIG_WAN is not set
553# CONFIG_FDDI is not set
554# CONFIG_HIPPI is not set
555# CONFIG_PPP is not set
556# CONFIG_SLIP is not set
557# CONFIG_NETCONSOLE is not set
558# CONFIG_NETPOLL is not set
559# CONFIG_NET_POLL_CONTROLLER is not set
560# CONFIG_ISDN is not set
561# CONFIG_PHONE is not set
562
563#
564# Input device support
565#
566# CONFIG_INPUT is not set
567
568#
569# Hardware I/O ports
570#
571# CONFIG_SERIO is not set
572# CONFIG_GAMEPORT is not set
573
574#
575# Character devices
576#
577# CONFIG_VT is not set
578# CONFIG_SERIAL_NONSTANDARD is not set
579# CONFIG_NOZOMI is not set
580
581#
582# Serial drivers
583#
584CONFIG_SERIAL_8250=y
585CONFIG_SERIAL_8250_CONSOLE=y
586# CONFIG_SERIAL_8250_PCI is not set
587CONFIG_SERIAL_8250_NR_UARTS=4
588CONFIG_SERIAL_8250_RUNTIME_UARTS=4
589CONFIG_SERIAL_8250_EXTENDED=y
590# CONFIG_SERIAL_8250_MANY_PORTS is not set
591CONFIG_SERIAL_8250_SHARE_IRQ=y
592# CONFIG_SERIAL_8250_DETECT_IRQ is not set
593# CONFIG_SERIAL_8250_RSA is not set
594
595#
596# Non-8250 serial port support
597#
598# CONFIG_SERIAL_UARTLITE is not set
599CONFIG_SERIAL_CORE=y
600CONFIG_SERIAL_CORE_CONSOLE=y
601# CONFIG_SERIAL_JSM is not set
602CONFIG_SERIAL_OF_PLATFORM=y
603CONFIG_UNIX98_PTYS=y
604CONFIG_LEGACY_PTYS=y
605CONFIG_LEGACY_PTY_COUNT=256
606# CONFIG_IPMI_HANDLER is not set
607# CONFIG_HW_RANDOM is not set
608# CONFIG_NVRAM is not set
609# CONFIG_GEN_RTC is not set
610# CONFIG_R3964 is not set
611# CONFIG_APPLICOM is not set
612# CONFIG_RAW_DRIVER is not set
613# CONFIG_TCG_TPM is not set
614CONFIG_DEVPORT=y
615# CONFIG_I2C is not set
616
617#
618# SPI support
619#
620# CONFIG_SPI is not set
621# CONFIG_SPI_MASTER is not set
622# CONFIG_W1 is not set
623# CONFIG_POWER_SUPPLY is not set
624# CONFIG_HWMON is not set
625# CONFIG_THERMAL is not set
626# CONFIG_WATCHDOG is not set
627
628#
629# Sonics Silicon Backplane
630#
631CONFIG_SSB_POSSIBLE=y
632# CONFIG_SSB is not set
633
634#
635# Multifunction device drivers
636#
637# CONFIG_MFD_SM501 is not set
638
639#
640# Multimedia devices
641#
642# CONFIG_VIDEO_DEV is not set
643# CONFIG_DVB_CORE is not set
644# CONFIG_DAB is not set
645
646#
647# Graphics support
648#
649# CONFIG_AGP is not set
650# CONFIG_DRM is not set
651# CONFIG_VGASTATE is not set
652# CONFIG_VIDEO_OUTPUT_CONTROL is not set
653# CONFIG_FB is not set
654# CONFIG_BACKLIGHT_LCD_SUPPORT is not set
655
656#
657# Display device support
658#
659# CONFIG_DISPLAY_SUPPORT is not set
660
661#
662# Sound
663#
664# CONFIG_SOUND is not set
665CONFIG_USB_SUPPORT=y
666CONFIG_USB_ARCH_HAS_HCD=y
667CONFIG_USB_ARCH_HAS_OHCI=y
668CONFIG_USB_ARCH_HAS_EHCI=y
669# CONFIG_USB is not set
670
671#
672# NOTE: USB_STORAGE enables SCSI, and 'SCSI disk support'
673#
674# CONFIG_USB_GADGET is not set
675# CONFIG_MMC is not set
676# CONFIG_MEMSTICK is not set
677# CONFIG_NEW_LEDS is not set
678# CONFIG_INFINIBAND is not set
679# CONFIG_EDAC is not set
680# CONFIG_RTC_CLASS is not set
681
682#
683# Userspace I/O
684#
685# CONFIG_UIO is not set
686
687#
688# File systems
689#
690CONFIG_EXT2_FS=y
691# CONFIG_EXT2_FS_XATTR is not set
692# CONFIG_EXT2_FS_XIP is not set
693# CONFIG_EXT3_FS is not set
694# CONFIG_EXT4DEV_FS is not set
695# CONFIG_REISERFS_FS is not set
696# CONFIG_JFS_FS is not set
697# CONFIG_FS_POSIX_ACL is not set
698# CONFIG_XFS_FS is not set
699# CONFIG_GFS2_FS is not set
700# CONFIG_OCFS2_FS is not set
701CONFIG_DNOTIFY=y
702CONFIG_INOTIFY=y
703CONFIG_INOTIFY_USER=y
704# CONFIG_QUOTA is not set
705# CONFIG_AUTOFS_FS is not set
706# CONFIG_AUTOFS4_FS is not set
707# CONFIG_FUSE_FS is not set
708
709#
710# CD-ROM/DVD Filesystems
711#
712# CONFIG_ISO9660_FS is not set
713# CONFIG_UDF_FS is not set
714
715#
716# DOS/FAT/NT Filesystems
717#
718# CONFIG_MSDOS_FS is not set
719# CONFIG_VFAT_FS is not set
720# CONFIG_NTFS_FS is not set
721
722#
723# Pseudo filesystems
724#
725CONFIG_PROC_FS=y
726CONFIG_PROC_KCORE=y
727CONFIG_PROC_SYSCTL=y
728CONFIG_SYSFS=y
729CONFIG_TMPFS=y
730# CONFIG_TMPFS_POSIX_ACL is not set
731# CONFIG_HUGETLB_PAGE is not set
732# CONFIG_CONFIGFS_FS is not set
733
734#
735# Miscellaneous filesystems
736#
737# CONFIG_ADFS_FS is not set
738# CONFIG_AFFS_FS is not set
739# CONFIG_HFS_FS is not set
740# CONFIG_HFSPLUS_FS is not set
741# CONFIG_BEFS_FS is not set
742# CONFIG_BFS_FS is not set
743# CONFIG_EFS_FS is not set
744CONFIG_JFFS2_FS=y
745CONFIG_JFFS2_FS_DEBUG=0
746CONFIG_JFFS2_FS_WRITEBUFFER=y
747# CONFIG_JFFS2_FS_WBUF_VERIFY is not set
748# CONFIG_JFFS2_SUMMARY is not set
749# CONFIG_JFFS2_FS_XATTR is not set
750# CONFIG_JFFS2_COMPRESSION_OPTIONS is not set
751CONFIG_JFFS2_ZLIB=y
752# CONFIG_JFFS2_LZO is not set
753CONFIG_JFFS2_RTIME=y
754# CONFIG_JFFS2_RUBIN is not set
755CONFIG_CRAMFS=y
756# CONFIG_VXFS_FS is not set
757# CONFIG_MINIX_FS is not set
758# CONFIG_HPFS_FS is not set
759# CONFIG_QNX4FS_FS is not set
760# CONFIG_ROMFS_FS is not set
761# CONFIG_SYSV_FS is not set
762# CONFIG_UFS_FS is not set
763CONFIG_NETWORK_FILESYSTEMS=y
764CONFIG_NFS_FS=y
765CONFIG_NFS_V3=y
766# CONFIG_NFS_V3_ACL is not set
767# CONFIG_NFS_V4 is not set
768# CONFIG_NFS_DIRECTIO is not set
769# CONFIG_NFSD is not set
770CONFIG_ROOT_NFS=y
771CONFIG_LOCKD=y
772CONFIG_LOCKD_V4=y
773CONFIG_NFS_COMMON=y
774CONFIG_SUNRPC=y
775# CONFIG_SUNRPC_BIND34 is not set
776# CONFIG_RPCSEC_GSS_KRB5 is not set
777# CONFIG_RPCSEC_GSS_SPKM3 is not set
778# CONFIG_SMB_FS is not set
779# CONFIG_CIFS is not set
780# CONFIG_NCP_FS is not set
781# CONFIG_CODA_FS is not set
782# CONFIG_AFS_FS is not set
783
784#
785# Partition Types
786#
787# CONFIG_PARTITION_ADVANCED is not set
788CONFIG_MSDOS_PARTITION=y
789# CONFIG_NLS is not set
790# CONFIG_DLM is not set
791
792#
793# Library routines
794#
795CONFIG_BITREVERSE=y
796# CONFIG_CRC_CCITT is not set
797# CONFIG_CRC16 is not set
798# CONFIG_CRC_ITU_T is not set
799CONFIG_CRC32=y
800# CONFIG_CRC7 is not set
801# CONFIG_LIBCRC32C is not set
802CONFIG_ZLIB_INFLATE=y
803CONFIG_ZLIB_DEFLATE=y
804CONFIG_PLIST=y
805CONFIG_HAS_IOMEM=y
806CONFIG_HAS_IOPORT=y
807CONFIG_HAS_DMA=y
808
809#
810# Kernel hacking
811#
812# CONFIG_PRINTK_TIME is not set
813CONFIG_ENABLE_WARN_DEPRECATED=y
814CONFIG_ENABLE_MUST_CHECK=y
815CONFIG_MAGIC_SYSRQ=y
816# CONFIG_UNUSED_SYMBOLS is not set
817# CONFIG_DEBUG_FS is not set
818# CONFIG_HEADERS_CHECK is not set
819CONFIG_DEBUG_KERNEL=y
820# CONFIG_DEBUG_SHIRQ is not set
821CONFIG_DETECT_SOFTLOCKUP=y
822CONFIG_SCHED_DEBUG=y
823# CONFIG_SCHEDSTATS is not set
824# CONFIG_TIMER_STATS is not set
825# CONFIG_SLUB_DEBUG_ON is not set
826# CONFIG_SLUB_STATS is not set
827# CONFIG_DEBUG_RT_MUTEXES is not set
828# CONFIG_RT_MUTEX_TESTER is not set
829# CONFIG_DEBUG_SPINLOCK is not set
830# CONFIG_DEBUG_MUTEXES is not set
831# CONFIG_DEBUG_SPINLOCK_SLEEP is not set
832# CONFIG_DEBUG_LOCKING_API_SELFTESTS is not set
833# CONFIG_DEBUG_KOBJECT is not set
834CONFIG_DEBUG_BUGVERBOSE=y
835# CONFIG_DEBUG_INFO is not set
836# CONFIG_DEBUG_VM is not set
837# CONFIG_DEBUG_LIST is not set
838# CONFIG_DEBUG_SG is not set
839# CONFIG_BOOT_PRINTK_DELAY is not set
840# CONFIG_RCU_TORTURE_TEST is not set
841# CONFIG_BACKTRACE_SELF_TEST is not set
842# CONFIG_FAULT_INJECTION is not set
843# CONFIG_SAMPLES is not set
844# CONFIG_DEBUG_STACKOVERFLOW is not set
845# CONFIG_DEBUG_STACK_USAGE is not set
846# CONFIG_DEBUG_PAGEALLOC is not set
847# CONFIG_DEBUGGER is not set
848# CONFIG_BDI_SWITCH is not set
849# CONFIG_PPC_EARLY_DEBUG is not set
850
851#
852# Security options
853#
854# CONFIG_KEYS is not set
855# CONFIG_SECURITY is not set
856# CONFIG_SECURITY_FILE_CAPABILITIES is not set
857CONFIG_CRYPTO=y
858CONFIG_CRYPTO_ALGAPI=y
859CONFIG_CRYPTO_BLKCIPHER=y
860# CONFIG_CRYPTO_SEQIV is not set
861CONFIG_CRYPTO_MANAGER=y
862# CONFIG_CRYPTO_HMAC is not set
863# CONFIG_CRYPTO_XCBC is not set
864# CONFIG_CRYPTO_NULL is not set
865# CONFIG_CRYPTO_MD4 is not set
866CONFIG_CRYPTO_MD5=y
867# CONFIG_CRYPTO_SHA1 is not set
868# CONFIG_CRYPTO_SHA256 is not set
869# CONFIG_CRYPTO_SHA512 is not set
870# CONFIG_CRYPTO_WP512 is not set
871# CONFIG_CRYPTO_TGR192 is not set
872# CONFIG_CRYPTO_GF128MUL is not set
873CONFIG_CRYPTO_ECB=y
874CONFIG_CRYPTO_CBC=y
875CONFIG_CRYPTO_PCBC=y
876# CONFIG_CRYPTO_LRW is not set
877# CONFIG_CRYPTO_XTS is not set
878# CONFIG_CRYPTO_CTR is not set
879# CONFIG_CRYPTO_GCM is not set
880# CONFIG_CRYPTO_CCM is not set
881# CONFIG_CRYPTO_CRYPTD is not set
882CONFIG_CRYPTO_DES=y
883# CONFIG_CRYPTO_FCRYPT is not set
884# CONFIG_CRYPTO_BLOWFISH is not set
885# CONFIG_CRYPTO_TWOFISH is not set
886# CONFIG_CRYPTO_SERPENT is not set
887# CONFIG_CRYPTO_AES is not set
888# CONFIG_CRYPTO_CAST5 is not set
889# CONFIG_CRYPTO_CAST6 is not set
890# CONFIG_CRYPTO_TEA is not set
891# CONFIG_CRYPTO_ARC4 is not set
892# CONFIG_CRYPTO_KHAZAD is not set
893# CONFIG_CRYPTO_ANUBIS is not set
894# CONFIG_CRYPTO_SEED is not set
895# CONFIG_CRYPTO_SALSA20 is not set
896# CONFIG_CRYPTO_DEFLATE is not set
897# CONFIG_CRYPTO_MICHAEL_MIC is not set
898# CONFIG_CRYPTO_CRC32C is not set
899# CONFIG_CRYPTO_CAMELLIA is not set
900# CONFIG_CRYPTO_TEST is not set
901# CONFIG_CRYPTO_AUTHENC is not set
902# CONFIG_CRYPTO_LZO is not set
903# CONFIG_CRYPTO_HW is not set
904# CONFIG_PPC_CLOCK is not set
diff --git a/arch/powerpc/configs/rainier_defconfig b/arch/powerpc/configs/rainier_defconfig
index 7b95001a22a8..dec18ca73519 100644
--- a/arch/powerpc/configs/rainier_defconfig
+++ b/arch/powerpc/configs/rainier_defconfig
@@ -1,7 +1,7 @@
1# 1#
2# Automatically generated make config: don't edit 2# Automatically generated make config: don't edit
3# Linux kernel version: 2.6.24-rc6 3# Linux kernel version: 2.6.25-rc2
4# Mon Dec 24 11:22:40 2007 4# Fri Feb 15 21:53:10 2008
5# 5#
6# CONFIG_PPC64 is not set 6# CONFIG_PPC64 is not set
7 7
@@ -29,6 +29,7 @@ CONFIG_GENERIC_TIME=y
29CONFIG_GENERIC_TIME_VSYSCALL=y 29CONFIG_GENERIC_TIME_VSYSCALL=y
30CONFIG_GENERIC_CLOCKEVENTS=y 30CONFIG_GENERIC_CLOCKEVENTS=y
31CONFIG_GENERIC_HARDIRQS=y 31CONFIG_GENERIC_HARDIRQS=y
32# CONFIG_HAVE_SETUP_PER_CPU_AREA is not set
32CONFIG_IRQ_PER_CPU=y 33CONFIG_IRQ_PER_CPU=y
33CONFIG_RWSEM_XCHGADD_ALGORITHM=y 34CONFIG_RWSEM_XCHGADD_ALGORITHM=y
34CONFIG_ARCH_HAS_ILOG2_U32=y 35CONFIG_ARCH_HAS_ILOG2_U32=y
@@ -67,17 +68,18 @@ CONFIG_SYSVIPC_SYSCTL=y
67CONFIG_POSIX_MQUEUE=y 68CONFIG_POSIX_MQUEUE=y
68# CONFIG_BSD_PROCESS_ACCT is not set 69# CONFIG_BSD_PROCESS_ACCT is not set
69# CONFIG_TASKSTATS is not set 70# CONFIG_TASKSTATS is not set
70# CONFIG_USER_NS is not set
71# CONFIG_PID_NS is not set
72# CONFIG_AUDIT is not set 71# CONFIG_AUDIT is not set
73# CONFIG_IKCONFIG is not set 72# CONFIG_IKCONFIG is not set
74CONFIG_LOG_BUF_SHIFT=14 73CONFIG_LOG_BUF_SHIFT=14
75# CONFIG_CGROUPS is not set 74# CONFIG_CGROUPS is not set
75CONFIG_GROUP_SCHED=y
76CONFIG_FAIR_GROUP_SCHED=y 76CONFIG_FAIR_GROUP_SCHED=y
77CONFIG_FAIR_USER_SCHED=y 77# CONFIG_RT_GROUP_SCHED is not set
78# CONFIG_FAIR_CGROUP_SCHED is not set 78CONFIG_USER_SCHED=y
79# CONFIG_CGROUP_SCHED is not set
79CONFIG_SYSFS_DEPRECATED=y 80CONFIG_SYSFS_DEPRECATED=y
80# CONFIG_RELAY is not set 81# CONFIG_RELAY is not set
82# CONFIG_NAMESPACES is not set
81CONFIG_BLK_DEV_INITRD=y 83CONFIG_BLK_DEV_INITRD=y
82CONFIG_INITRAMFS_SOURCE="" 84CONFIG_INITRAMFS_SOURCE=""
83# CONFIG_CC_OPTIMIZE_FOR_SIZE is not set 85# CONFIG_CC_OPTIMIZE_FOR_SIZE is not set
@@ -91,11 +93,13 @@ CONFIG_HOTPLUG=y
91CONFIG_PRINTK=y 93CONFIG_PRINTK=y
92CONFIG_BUG=y 94CONFIG_BUG=y
93CONFIG_ELF_CORE=y 95CONFIG_ELF_CORE=y
96CONFIG_COMPAT_BRK=y
94CONFIG_BASE_FULL=y 97CONFIG_BASE_FULL=y
95CONFIG_FUTEX=y 98CONFIG_FUTEX=y
96CONFIG_ANON_INODES=y 99CONFIG_ANON_INODES=y
97CONFIG_EPOLL=y 100CONFIG_EPOLL=y
98CONFIG_SIGNALFD=y 101CONFIG_SIGNALFD=y
102CONFIG_TIMERFD=y
99CONFIG_EVENTFD=y 103CONFIG_EVENTFD=y
100CONFIG_SHMEM=y 104CONFIG_SHMEM=y
101CONFIG_VM_EVENT_COUNTERS=y 105CONFIG_VM_EVENT_COUNTERS=y
@@ -103,6 +107,13 @@ CONFIG_SLUB_DEBUG=y
103# CONFIG_SLAB is not set 107# CONFIG_SLAB is not set
104CONFIG_SLUB=y 108CONFIG_SLUB=y
105# CONFIG_SLOB is not set 109# CONFIG_SLOB is not set
110# CONFIG_PROFILING is not set
111# CONFIG_MARKERS is not set
112CONFIG_HAVE_OPROFILE=y
113# CONFIG_KPROBES is not set
114CONFIG_HAVE_KPROBES=y
115CONFIG_PROC_PAGE_MONITOR=y
116CONFIG_SLABINFO=y
106CONFIG_RT_MUTEXES=y 117CONFIG_RT_MUTEXES=y
107# CONFIG_TINY_SHMEM is not set 118# CONFIG_TINY_SHMEM is not set
108CONFIG_BASE_SMALL=0 119CONFIG_BASE_SMALL=0
@@ -130,13 +141,15 @@ CONFIG_DEFAULT_AS=y
130# CONFIG_DEFAULT_CFQ is not set 141# CONFIG_DEFAULT_CFQ is not set
131# CONFIG_DEFAULT_NOOP is not set 142# CONFIG_DEFAULT_NOOP is not set
132CONFIG_DEFAULT_IOSCHED="anticipatory" 143CONFIG_DEFAULT_IOSCHED="anticipatory"
144CONFIG_CLASSIC_RCU=y
145# CONFIG_PREEMPT_RCU is not set
133# CONFIG_PPC4xx_PCI_EXPRESS is not set 146# CONFIG_PPC4xx_PCI_EXPRESS is not set
134 147
135# 148#
136# Platform support 149# Platform support
137# 150#
138# CONFIG_PPC_MPC52xx is not set 151# CONFIG_PPC_MPC512x is not set
139# CONFIG_PPC_MPC5200 is not set 152# CONFIG_PPC_MPC5121 is not set
140# CONFIG_PPC_CELL is not set 153# CONFIG_PPC_CELL is not set
141# CONFIG_PPC_CELL_NATIVE is not set 154# CONFIG_PPC_CELL_NATIVE is not set
142# CONFIG_PQ2ADS is not set 155# CONFIG_PQ2ADS is not set
@@ -146,7 +159,9 @@ CONFIG_DEFAULT_IOSCHED="anticipatory"
146# CONFIG_TAISHAN is not set 159# CONFIG_TAISHAN is not set
147# CONFIG_KATMAI is not set 160# CONFIG_KATMAI is not set
148CONFIG_RAINIER=y 161CONFIG_RAINIER=y
162# CONFIG_WARP is not set
149CONFIG_440GRX=y 163CONFIG_440GRX=y
164# CONFIG_IPIC is not set
150# CONFIG_MPIC is not set 165# CONFIG_MPIC is not set
151# CONFIG_MPIC_WEIRD is not set 166# CONFIG_MPIC_WEIRD is not set
152# CONFIG_PPC_I8259 is not set 167# CONFIG_PPC_I8259 is not set
@@ -157,7 +172,6 @@ CONFIG_440GRX=y
157# CONFIG_PPC_INDIRECT_IO is not set 172# CONFIG_PPC_INDIRECT_IO is not set
158# CONFIG_GENERIC_IOMAP is not set 173# CONFIG_GENERIC_IOMAP is not set
159# CONFIG_CPU_FREQ is not set 174# CONFIG_CPU_FREQ is not set
160# CONFIG_CPM2 is not set
161# CONFIG_FSL_ULI1575 is not set 175# CONFIG_FSL_ULI1575 is not set
162 176
163# 177#
@@ -173,13 +187,18 @@ CONFIG_HZ_250=y
173# CONFIG_HZ_300 is not set 187# CONFIG_HZ_300 is not set
174# CONFIG_HZ_1000 is not set 188# CONFIG_HZ_1000 is not set
175CONFIG_HZ=250 189CONFIG_HZ=250
190# CONFIG_SCHED_HRTICK is not set
176CONFIG_PREEMPT_NONE=y 191CONFIG_PREEMPT_NONE=y
177# CONFIG_PREEMPT_VOLUNTARY is not set 192# CONFIG_PREEMPT_VOLUNTARY is not set
178# CONFIG_PREEMPT is not set 193# CONFIG_PREEMPT is not set
194CONFIG_RCU_TRACE=y
179CONFIG_BINFMT_ELF=y 195CONFIG_BINFMT_ELF=y
180# CONFIG_BINFMT_MISC is not set 196# CONFIG_BINFMT_MISC is not set
181CONFIG_MATH_EMULATION=y 197CONFIG_MATH_EMULATION=y
198# CONFIG_IOMMU_HELPER is not set
182CONFIG_ARCH_ENABLE_MEMORY_HOTPLUG=y 199CONFIG_ARCH_ENABLE_MEMORY_HOTPLUG=y
200CONFIG_ARCH_HAS_WALK_MEMORY=y
201CONFIG_ARCH_ENABLE_MEMORY_HOTREMOVE=y
183CONFIG_ARCH_FLATMEM_ENABLE=y 202CONFIG_ARCH_FLATMEM_ENABLE=y
184CONFIG_ARCH_POPULATES_NODE_MAP=y 203CONFIG_ARCH_POPULATES_NODE_MAP=y
185CONFIG_SELECT_MEMORY_MODEL=y 204CONFIG_SELECT_MEMORY_MODEL=y
@@ -199,8 +218,6 @@ CONFIG_PROC_DEVICETREE=y
199CONFIG_CMDLINE_BOOL=y 218CONFIG_CMDLINE_BOOL=y
200CONFIG_CMDLINE="" 219CONFIG_CMDLINE=""
201CONFIG_SECCOMP=y 220CONFIG_SECCOMP=y
202CONFIG_WANT_DEVICE_TREE=y
203CONFIG_DEVICE_TREE="rainier.dts"
204CONFIG_ISA_DMA_API=y 221CONFIG_ISA_DMA_API=y
205 222
206# 223#
@@ -300,6 +317,7 @@ CONFIG_DEFAULT_TCP_CONG="cubic"
300# 317#
301# CONFIG_NET_PKTGEN is not set 318# CONFIG_NET_PKTGEN is not set
302# CONFIG_HAMRADIO is not set 319# CONFIG_HAMRADIO is not set
320# CONFIG_CAN is not set
303# CONFIG_IRDA is not set 321# CONFIG_IRDA is not set
304# CONFIG_BT is not set 322# CONFIG_BT is not set
305# CONFIG_AF_RXRPC is not set 323# CONFIG_AF_RXRPC is not set
@@ -336,6 +354,7 @@ CONFIG_MTD=y
336CONFIG_MTD_PARTITIONS=y 354CONFIG_MTD_PARTITIONS=y
337# CONFIG_MTD_REDBOOT_PARTS is not set 355# CONFIG_MTD_REDBOOT_PARTS is not set
338CONFIG_MTD_CMDLINE_PARTS=y 356CONFIG_MTD_CMDLINE_PARTS=y
357CONFIG_MTD_OF_PARTS=y
339 358
340# 359#
341# User Modules And Translation Layers 360# User Modules And Translation Layers
@@ -422,7 +441,7 @@ CONFIG_BLK_DEV=y
422CONFIG_BLK_DEV_RAM=y 441CONFIG_BLK_DEV_RAM=y
423CONFIG_BLK_DEV_RAM_COUNT=16 442CONFIG_BLK_DEV_RAM_COUNT=16
424CONFIG_BLK_DEV_RAM_SIZE=35000 443CONFIG_BLK_DEV_RAM_SIZE=35000
425CONFIG_BLK_DEV_RAM_BLOCKSIZE=1024 444# CONFIG_BLK_DEV_XIP is not set
426# CONFIG_CDROM_PKTCDVD is not set 445# CONFIG_CDROM_PKTCDVD is not set
427# CONFIG_ATA_OVER_ETH is not set 446# CONFIG_ATA_OVER_ETH is not set
428# CONFIG_XILINX_SYSACE is not set 447# CONFIG_XILINX_SYSACE is not set
@@ -431,6 +450,8 @@ CONFIG_MISC_DEVICES=y
431# CONFIG_EEPROM_93CX6 is not set 450# CONFIG_EEPROM_93CX6 is not set
432# CONFIG_SGI_IOC4 is not set 451# CONFIG_SGI_IOC4 is not set
433# CONFIG_TIFM_CORE is not set 452# CONFIG_TIFM_CORE is not set
453# CONFIG_ENCLOSURE_SERVICES is not set
454CONFIG_HAVE_IDE=y
434# CONFIG_IDE is not set 455# CONFIG_IDE is not set
435 456
436# 457#
@@ -461,7 +482,6 @@ CONFIG_NETDEVICES=y
461# CONFIG_EQUALIZER is not set 482# CONFIG_EQUALIZER is not set
462# CONFIG_TUN is not set 483# CONFIG_TUN is not set
463# CONFIG_VETH is not set 484# CONFIG_VETH is not set
464# CONFIG_IP1000 is not set
465# CONFIG_ARCNET is not set 485# CONFIG_ARCNET is not set
466# CONFIG_NET_ETHERNET is not set 486# CONFIG_NET_ETHERNET is not set
467CONFIG_IBM_NEW_EMAC_ZMII=y 487CONFIG_IBM_NEW_EMAC_ZMII=y
@@ -472,6 +492,9 @@ CONFIG_NETDEV_1000=y
472# CONFIG_DL2K is not set 492# CONFIG_DL2K is not set
473# CONFIG_E1000 is not set 493# CONFIG_E1000 is not set
474# CONFIG_E1000E is not set 494# CONFIG_E1000E is not set
495# CONFIG_E1000E_ENABLED is not set
496# CONFIG_IP1000 is not set
497# CONFIG_IGB is not set
475# CONFIG_NS83820 is not set 498# CONFIG_NS83820 is not set
476# CONFIG_HAMACHI is not set 499# CONFIG_HAMACHI is not set
477# CONFIG_YELLOWFIN is not set 500# CONFIG_YELLOWFIN is not set
@@ -496,6 +519,7 @@ CONFIG_NETDEV_10000=y
496# CONFIG_NIU is not set 519# CONFIG_NIU is not set
497# CONFIG_MLX4_CORE is not set 520# CONFIG_MLX4_CORE is not set
498# CONFIG_TEHUTI is not set 521# CONFIG_TEHUTI is not set
522# CONFIG_BNX2X is not set
499# CONFIG_TR is not set 523# CONFIG_TR is not set
500 524
501# 525#
@@ -508,7 +532,6 @@ CONFIG_NETDEV_10000=y
508# CONFIG_HIPPI is not set 532# CONFIG_HIPPI is not set
509# CONFIG_PPP is not set 533# CONFIG_PPP is not set
510# CONFIG_SLIP is not set 534# CONFIG_SLIP is not set
511# CONFIG_SHAPER is not set
512# CONFIG_NETCONSOLE is not set 535# CONFIG_NETCONSOLE is not set
513# CONFIG_NETPOLL is not set 536# CONFIG_NETPOLL is not set
514# CONFIG_NET_POLL_CONTROLLER is not set 537# CONFIG_NET_POLL_CONTROLLER is not set
@@ -531,6 +554,7 @@ CONFIG_NETDEV_10000=y
531# 554#
532# CONFIG_VT is not set 555# CONFIG_VT is not set
533# CONFIG_SERIAL_NONSTANDARD is not set 556# CONFIG_SERIAL_NONSTANDARD is not set
557# CONFIG_NOZOMI is not set
534 558
535# 559#
536# Serial drivers 560# Serial drivers
@@ -576,6 +600,7 @@ CONFIG_DEVPORT=y
576# CONFIG_W1 is not set 600# CONFIG_W1 is not set
577# CONFIG_POWER_SUPPLY is not set 601# CONFIG_POWER_SUPPLY is not set
578# CONFIG_HWMON is not set 602# CONFIG_HWMON is not set
603CONFIG_THERMAL=y
579# CONFIG_WATCHDOG is not set 604# CONFIG_WATCHDOG is not set
580 605
581# 606#
@@ -624,12 +649,9 @@ CONFIG_USB_ARCH_HAS_EHCI=y
624# 649#
625# NOTE: USB_STORAGE enables SCSI, and 'SCSI disk support' 650# NOTE: USB_STORAGE enables SCSI, and 'SCSI disk support'
626# 651#
627
628#
629# USB Gadget Support
630#
631# CONFIG_USB_GADGET is not set 652# CONFIG_USB_GADGET is not set
632# CONFIG_MMC is not set 653# CONFIG_MMC is not set
654# CONFIG_MEMSTICK is not set
633# CONFIG_NEW_LEDS is not set 655# CONFIG_NEW_LEDS is not set
634# CONFIG_INFINIBAND is not set 656# CONFIG_INFINIBAND is not set
635# CONFIG_EDAC is not set 657# CONFIG_EDAC is not set
@@ -654,12 +676,10 @@ CONFIG_EXT2_FS=y
654# CONFIG_XFS_FS is not set 676# CONFIG_XFS_FS is not set
655# CONFIG_GFS2_FS is not set 677# CONFIG_GFS2_FS is not set
656# CONFIG_OCFS2_FS is not set 678# CONFIG_OCFS2_FS is not set
657# CONFIG_MINIX_FS is not set 679CONFIG_DNOTIFY=y
658# CONFIG_ROMFS_FS is not set
659CONFIG_INOTIFY=y 680CONFIG_INOTIFY=y
660CONFIG_INOTIFY_USER=y 681CONFIG_INOTIFY_USER=y
661# CONFIG_QUOTA is not set 682# CONFIG_QUOTA is not set
662CONFIG_DNOTIFY=y
663# CONFIG_AUTOFS_FS is not set 683# CONFIG_AUTOFS_FS is not set
664# CONFIG_AUTOFS4_FS is not set 684# CONFIG_AUTOFS4_FS is not set
665# CONFIG_FUSE_FS is not set 685# CONFIG_FUSE_FS is not set
@@ -712,8 +732,10 @@ CONFIG_JFFS2_RTIME=y
712# CONFIG_JFFS2_RUBIN is not set 732# CONFIG_JFFS2_RUBIN is not set
713CONFIG_CRAMFS=y 733CONFIG_CRAMFS=y
714# CONFIG_VXFS_FS is not set 734# CONFIG_VXFS_FS is not set
735# CONFIG_MINIX_FS is not set
715# CONFIG_HPFS_FS is not set 736# CONFIG_HPFS_FS is not set
716# CONFIG_QNX4FS_FS is not set 737# CONFIG_QNX4FS_FS is not set
738# CONFIG_ROMFS_FS is not set
717# CONFIG_SYSV_FS is not set 739# CONFIG_SYSV_FS is not set
718# CONFIG_UFS_FS is not set 740# CONFIG_UFS_FS is not set
719CONFIG_NETWORK_FILESYSTEMS=y 741CONFIG_NETWORK_FILESYSTEMS=y
@@ -744,7 +766,6 @@ CONFIG_SUNRPC=y
744CONFIG_MSDOS_PARTITION=y 766CONFIG_MSDOS_PARTITION=y
745# CONFIG_NLS is not set 767# CONFIG_NLS is not set
746# CONFIG_DLM is not set 768# CONFIG_DLM is not set
747# CONFIG_UCC_SLOW is not set
748 769
749# 770#
750# Library routines 771# Library routines
@@ -762,10 +783,6 @@ CONFIG_PLIST=y
762CONFIG_HAS_IOMEM=y 783CONFIG_HAS_IOMEM=y
763CONFIG_HAS_IOPORT=y 784CONFIG_HAS_IOPORT=y
764CONFIG_HAS_DMA=y 785CONFIG_HAS_DMA=y
765CONFIG_INSTRUMENTATION=y
766# CONFIG_PROFILING is not set
767# CONFIG_KPROBES is not set
768# CONFIG_MARKERS is not set
769 786
770# 787#
771# Kernel hacking 788# Kernel hacking
@@ -775,7 +792,7 @@ CONFIG_ENABLE_WARN_DEPRECATED=y
775CONFIG_ENABLE_MUST_CHECK=y 792CONFIG_ENABLE_MUST_CHECK=y
776CONFIG_MAGIC_SYSRQ=y 793CONFIG_MAGIC_SYSRQ=y
777# CONFIG_UNUSED_SYMBOLS is not set 794# CONFIG_UNUSED_SYMBOLS is not set
778# CONFIG_DEBUG_FS is not set 795CONFIG_DEBUG_FS=y
779# CONFIG_HEADERS_CHECK is not set 796# CONFIG_HEADERS_CHECK is not set
780CONFIG_DEBUG_KERNEL=y 797CONFIG_DEBUG_KERNEL=y
781# CONFIG_DEBUG_SHIRQ is not set 798# CONFIG_DEBUG_SHIRQ is not set
@@ -784,6 +801,7 @@ CONFIG_SCHED_DEBUG=y
784# CONFIG_SCHEDSTATS is not set 801# CONFIG_SCHEDSTATS is not set
785# CONFIG_TIMER_STATS is not set 802# CONFIG_TIMER_STATS is not set
786# CONFIG_SLUB_DEBUG_ON is not set 803# CONFIG_SLUB_DEBUG_ON is not set
804# CONFIG_SLUB_STATS is not set
787# CONFIG_DEBUG_RT_MUTEXES is not set 805# CONFIG_DEBUG_RT_MUTEXES is not set
788# CONFIG_RT_MUTEX_TESTER is not set 806# CONFIG_RT_MUTEX_TESTER is not set
789# CONFIG_DEBUG_SPINLOCK is not set 807# CONFIG_DEBUG_SPINLOCK is not set
@@ -796,9 +814,9 @@ CONFIG_SCHED_DEBUG=y
796# CONFIG_DEBUG_VM is not set 814# CONFIG_DEBUG_VM is not set
797# CONFIG_DEBUG_LIST is not set 815# CONFIG_DEBUG_LIST is not set
798# CONFIG_DEBUG_SG is not set 816# CONFIG_DEBUG_SG is not set
799CONFIG_FORCED_INLINING=y
800# CONFIG_BOOT_PRINTK_DELAY is not set 817# CONFIG_BOOT_PRINTK_DELAY is not set
801# CONFIG_RCU_TORTURE_TEST is not set 818# CONFIG_RCU_TORTURE_TEST is not set
819# CONFIG_BACKTRACE_SELF_TEST is not set
802# CONFIG_FAULT_INJECTION is not set 820# CONFIG_FAULT_INJECTION is not set
803# CONFIG_SAMPLES is not set 821# CONFIG_SAMPLES is not set
804# CONFIG_DEBUG_STACKOVERFLOW is not set 822# CONFIG_DEBUG_STACKOVERFLOW is not set
@@ -807,6 +825,7 @@ CONFIG_FORCED_INLINING=y
807CONFIG_DEBUGGER=y 825CONFIG_DEBUGGER=y
808# CONFIG_KGDB is not set 826# CONFIG_KGDB is not set
809# CONFIG_XMON is not set 827# CONFIG_XMON is not set
828# CONFIG_VIRQ_DEBUG is not set
810# CONFIG_BDI_SWITCH is not set 829# CONFIG_BDI_SWITCH is not set
811CONFIG_PPC_EARLY_DEBUG=y 830CONFIG_PPC_EARLY_DEBUG=y
812# CONFIG_PPC_EARLY_DEBUG_LPAR is not set 831# CONFIG_PPC_EARLY_DEBUG_LPAR is not set
@@ -832,6 +851,7 @@ CONFIG_PPC_EARLY_DEBUG_44x_PHYSHIGH=0x1
832CONFIG_CRYPTO=y 851CONFIG_CRYPTO=y
833CONFIG_CRYPTO_ALGAPI=y 852CONFIG_CRYPTO_ALGAPI=y
834CONFIG_CRYPTO_BLKCIPHER=y 853CONFIG_CRYPTO_BLKCIPHER=y
854# CONFIG_CRYPTO_SEQIV is not set
835CONFIG_CRYPTO_MANAGER=y 855CONFIG_CRYPTO_MANAGER=y
836# CONFIG_CRYPTO_HMAC is not set 856# CONFIG_CRYPTO_HMAC is not set
837# CONFIG_CRYPTO_XCBC is not set 857# CONFIG_CRYPTO_XCBC is not set
@@ -849,6 +869,9 @@ CONFIG_CRYPTO_CBC=y
849CONFIG_CRYPTO_PCBC=y 869CONFIG_CRYPTO_PCBC=y
850# CONFIG_CRYPTO_LRW is not set 870# CONFIG_CRYPTO_LRW is not set
851# CONFIG_CRYPTO_XTS is not set 871# CONFIG_CRYPTO_XTS is not set
872# CONFIG_CRYPTO_CTR is not set
873# CONFIG_CRYPTO_GCM is not set
874# CONFIG_CRYPTO_CCM is not set
852# CONFIG_CRYPTO_CRYPTD is not set 875# CONFIG_CRYPTO_CRYPTD is not set
853CONFIG_CRYPTO_DES=y 876CONFIG_CRYPTO_DES=y
854# CONFIG_CRYPTO_FCRYPT is not set 877# CONFIG_CRYPTO_FCRYPT is not set
@@ -863,11 +886,14 @@ CONFIG_CRYPTO_DES=y
863# CONFIG_CRYPTO_KHAZAD is not set 886# CONFIG_CRYPTO_KHAZAD is not set
864# CONFIG_CRYPTO_ANUBIS is not set 887# CONFIG_CRYPTO_ANUBIS is not set
865# CONFIG_CRYPTO_SEED is not set 888# CONFIG_CRYPTO_SEED is not set
889# CONFIG_CRYPTO_SALSA20 is not set
866# CONFIG_CRYPTO_DEFLATE is not set 890# CONFIG_CRYPTO_DEFLATE is not set
867# CONFIG_CRYPTO_MICHAEL_MIC is not set 891# CONFIG_CRYPTO_MICHAEL_MIC is not set
868# CONFIG_CRYPTO_CRC32C is not set 892# CONFIG_CRYPTO_CRC32C is not set
869# CONFIG_CRYPTO_CAMELLIA is not set 893# CONFIG_CRYPTO_CAMELLIA is not set
870# CONFIG_CRYPTO_TEST is not set 894# CONFIG_CRYPTO_TEST is not set
871# CONFIG_CRYPTO_AUTHENC is not set 895# CONFIG_CRYPTO_AUTHENC is not set
896# CONFIG_CRYPTO_LZO is not set
872CONFIG_CRYPTO_HW=y 897CONFIG_CRYPTO_HW=y
898# CONFIG_CRYPTO_DEV_HIFN_795X is not set
873# CONFIG_PPC_CLOCK is not set 899# CONFIG_PPC_CLOCK is not set
diff --git a/arch/powerpc/configs/sequoia_defconfig b/arch/powerpc/configs/sequoia_defconfig
index abbfed6582e1..dd5d6303c396 100644
--- a/arch/powerpc/configs/sequoia_defconfig
+++ b/arch/powerpc/configs/sequoia_defconfig
@@ -1,7 +1,7 @@
1# 1#
2# Automatically generated make config: don't edit 2# Automatically generated make config: don't edit
3# Linux kernel version: 2.6.24-rc6 3# Linux kernel version: 2.6.25-rc2
4# Mon Dec 24 11:23:22 2007 4# Fri Feb 15 21:53:46 2008
5# 5#
6# CONFIG_PPC64 is not set 6# CONFIG_PPC64 is not set
7 7
@@ -30,6 +30,7 @@ CONFIG_GENERIC_TIME=y
30CONFIG_GENERIC_TIME_VSYSCALL=y 30CONFIG_GENERIC_TIME_VSYSCALL=y
31CONFIG_GENERIC_CLOCKEVENTS=y 31CONFIG_GENERIC_CLOCKEVENTS=y
32CONFIG_GENERIC_HARDIRQS=y 32CONFIG_GENERIC_HARDIRQS=y
33# CONFIG_HAVE_SETUP_PER_CPU_AREA is not set
33CONFIG_IRQ_PER_CPU=y 34CONFIG_IRQ_PER_CPU=y
34CONFIG_RWSEM_XCHGADD_ALGORITHM=y 35CONFIG_RWSEM_XCHGADD_ALGORITHM=y
35CONFIG_ARCH_HAS_ILOG2_U32=y 36CONFIG_ARCH_HAS_ILOG2_U32=y
@@ -68,15 +69,18 @@ CONFIG_SYSVIPC_SYSCTL=y
68CONFIG_POSIX_MQUEUE=y 69CONFIG_POSIX_MQUEUE=y
69# CONFIG_BSD_PROCESS_ACCT is not set 70# CONFIG_BSD_PROCESS_ACCT is not set
70# CONFIG_TASKSTATS is not set 71# CONFIG_TASKSTATS is not set
71# CONFIG_USER_NS is not set
72# CONFIG_PID_NS is not set
73# CONFIG_AUDIT is not set 72# CONFIG_AUDIT is not set
74# CONFIG_IKCONFIG is not set 73# CONFIG_IKCONFIG is not set
75CONFIG_LOG_BUF_SHIFT=14 74CONFIG_LOG_BUF_SHIFT=14
76# CONFIG_CGROUPS is not set 75# CONFIG_CGROUPS is not set
76CONFIG_GROUP_SCHED=y
77# CONFIG_FAIR_GROUP_SCHED is not set 77# CONFIG_FAIR_GROUP_SCHED is not set
78# CONFIG_RT_GROUP_SCHED is not set
79CONFIG_USER_SCHED=y
80# CONFIG_CGROUP_SCHED is not set
78CONFIG_SYSFS_DEPRECATED=y 81CONFIG_SYSFS_DEPRECATED=y
79# CONFIG_RELAY is not set 82# CONFIG_RELAY is not set
83# CONFIG_NAMESPACES is not set
80CONFIG_BLK_DEV_INITRD=y 84CONFIG_BLK_DEV_INITRD=y
81CONFIG_INITRAMFS_SOURCE="" 85CONFIG_INITRAMFS_SOURCE=""
82# CONFIG_CC_OPTIMIZE_FOR_SIZE is not set 86# CONFIG_CC_OPTIMIZE_FOR_SIZE is not set
@@ -90,11 +94,13 @@ CONFIG_HOTPLUG=y
90CONFIG_PRINTK=y 94CONFIG_PRINTK=y
91CONFIG_BUG=y 95CONFIG_BUG=y
92CONFIG_ELF_CORE=y 96CONFIG_ELF_CORE=y
97CONFIG_COMPAT_BRK=y
93CONFIG_BASE_FULL=y 98CONFIG_BASE_FULL=y
94CONFIG_FUTEX=y 99CONFIG_FUTEX=y
95CONFIG_ANON_INODES=y 100CONFIG_ANON_INODES=y
96CONFIG_EPOLL=y 101CONFIG_EPOLL=y
97CONFIG_SIGNALFD=y 102CONFIG_SIGNALFD=y
103CONFIG_TIMERFD=y
98CONFIG_EVENTFD=y 104CONFIG_EVENTFD=y
99CONFIG_SHMEM=y 105CONFIG_SHMEM=y
100CONFIG_VM_EVENT_COUNTERS=y 106CONFIG_VM_EVENT_COUNTERS=y
@@ -102,6 +108,13 @@ CONFIG_SLUB_DEBUG=y
102# CONFIG_SLAB is not set 108# CONFIG_SLAB is not set
103CONFIG_SLUB=y 109CONFIG_SLUB=y
104# CONFIG_SLOB is not set 110# CONFIG_SLOB is not set
111# CONFIG_PROFILING is not set
112# CONFIG_MARKERS is not set
113CONFIG_HAVE_OPROFILE=y
114# CONFIG_KPROBES is not set
115CONFIG_HAVE_KPROBES=y
116CONFIG_PROC_PAGE_MONITOR=y
117CONFIG_SLABINFO=y
105CONFIG_RT_MUTEXES=y 118CONFIG_RT_MUTEXES=y
106# CONFIG_TINY_SHMEM is not set 119# CONFIG_TINY_SHMEM is not set
107CONFIG_BASE_SMALL=0 120CONFIG_BASE_SMALL=0
@@ -129,13 +142,15 @@ CONFIG_DEFAULT_AS=y
129# CONFIG_DEFAULT_CFQ is not set 142# CONFIG_DEFAULT_CFQ is not set
130# CONFIG_DEFAULT_NOOP is not set 143# CONFIG_DEFAULT_NOOP is not set
131CONFIG_DEFAULT_IOSCHED="anticipatory" 144CONFIG_DEFAULT_IOSCHED="anticipatory"
145CONFIG_CLASSIC_RCU=y
146# CONFIG_PREEMPT_RCU is not set
132# CONFIG_PPC4xx_PCI_EXPRESS is not set 147# CONFIG_PPC4xx_PCI_EXPRESS is not set
133 148
134# 149#
135# Platform support 150# Platform support
136# 151#
137# CONFIG_PPC_MPC52xx is not set 152# CONFIG_PPC_MPC512x is not set
138# CONFIG_PPC_MPC5200 is not set 153# CONFIG_PPC_MPC5121 is not set
139# CONFIG_PPC_CELL is not set 154# CONFIG_PPC_CELL is not set
140# CONFIG_PPC_CELL_NATIVE is not set 155# CONFIG_PPC_CELL_NATIVE is not set
141# CONFIG_PQ2ADS is not set 156# CONFIG_PQ2ADS is not set
@@ -145,7 +160,9 @@ CONFIG_SEQUOIA=y
145# CONFIG_TAISHAN is not set 160# CONFIG_TAISHAN is not set
146# CONFIG_KATMAI is not set 161# CONFIG_KATMAI is not set
147# CONFIG_RAINIER is not set 162# CONFIG_RAINIER is not set
163# CONFIG_WARP is not set
148CONFIG_440EPX=y 164CONFIG_440EPX=y
165# CONFIG_IPIC is not set
149# CONFIG_MPIC is not set 166# CONFIG_MPIC is not set
150# CONFIG_MPIC_WEIRD is not set 167# CONFIG_MPIC_WEIRD is not set
151# CONFIG_PPC_I8259 is not set 168# CONFIG_PPC_I8259 is not set
@@ -156,7 +173,6 @@ CONFIG_440EPX=y
156# CONFIG_PPC_INDIRECT_IO is not set 173# CONFIG_PPC_INDIRECT_IO is not set
157# CONFIG_GENERIC_IOMAP is not set 174# CONFIG_GENERIC_IOMAP is not set
158# CONFIG_CPU_FREQ is not set 175# CONFIG_CPU_FREQ is not set
159# CONFIG_CPM2 is not set
160# CONFIG_FSL_ULI1575 is not set 176# CONFIG_FSL_ULI1575 is not set
161 177
162# 178#
@@ -172,13 +188,18 @@ CONFIG_HZ_250=y
172# CONFIG_HZ_300 is not set 188# CONFIG_HZ_300 is not set
173# CONFIG_HZ_1000 is not set 189# CONFIG_HZ_1000 is not set
174CONFIG_HZ=250 190CONFIG_HZ=250
191# CONFIG_SCHED_HRTICK is not set
175CONFIG_PREEMPT_NONE=y 192CONFIG_PREEMPT_NONE=y
176# CONFIG_PREEMPT_VOLUNTARY is not set 193# CONFIG_PREEMPT_VOLUNTARY is not set
177# CONFIG_PREEMPT is not set 194# CONFIG_PREEMPT is not set
195CONFIG_RCU_TRACE=y
178CONFIG_BINFMT_ELF=y 196CONFIG_BINFMT_ELF=y
179# CONFIG_BINFMT_MISC is not set 197# CONFIG_BINFMT_MISC is not set
180# CONFIG_MATH_EMULATION is not set 198# CONFIG_MATH_EMULATION is not set
199# CONFIG_IOMMU_HELPER is not set
181CONFIG_ARCH_ENABLE_MEMORY_HOTPLUG=y 200CONFIG_ARCH_ENABLE_MEMORY_HOTPLUG=y
201CONFIG_ARCH_HAS_WALK_MEMORY=y
202CONFIG_ARCH_ENABLE_MEMORY_HOTREMOVE=y
182CONFIG_ARCH_FLATMEM_ENABLE=y 203CONFIG_ARCH_FLATMEM_ENABLE=y
183CONFIG_ARCH_POPULATES_NODE_MAP=y 204CONFIG_ARCH_POPULATES_NODE_MAP=y
184CONFIG_SELECT_MEMORY_MODEL=y 205CONFIG_SELECT_MEMORY_MODEL=y
@@ -198,8 +219,6 @@ CONFIG_PROC_DEVICETREE=y
198CONFIG_CMDLINE_BOOL=y 219CONFIG_CMDLINE_BOOL=y
199CONFIG_CMDLINE="" 220CONFIG_CMDLINE=""
200CONFIG_SECCOMP=y 221CONFIG_SECCOMP=y
201CONFIG_WANT_DEVICE_TREE=y
202CONFIG_DEVICE_TREE="sequoia.dts"
203CONFIG_ISA_DMA_API=y 222CONFIG_ISA_DMA_API=y
204 223
205# 224#
@@ -299,6 +318,7 @@ CONFIG_DEFAULT_TCP_CONG="cubic"
299# 318#
300# CONFIG_NET_PKTGEN is not set 319# CONFIG_NET_PKTGEN is not set
301# CONFIG_HAMRADIO is not set 320# CONFIG_HAMRADIO is not set
321# CONFIG_CAN is not set
302# CONFIG_IRDA is not set 322# CONFIG_IRDA is not set
303# CONFIG_BT is not set 323# CONFIG_BT is not set
304# CONFIG_AF_RXRPC is not set 324# CONFIG_AF_RXRPC is not set
@@ -335,6 +355,7 @@ CONFIG_MTD=y
335CONFIG_MTD_PARTITIONS=y 355CONFIG_MTD_PARTITIONS=y
336# CONFIG_MTD_REDBOOT_PARTS is not set 356# CONFIG_MTD_REDBOOT_PARTS is not set
337CONFIG_MTD_CMDLINE_PARTS=y 357CONFIG_MTD_CMDLINE_PARTS=y
358CONFIG_MTD_OF_PARTS=y
338 359
339# 360#
340# User Modules And Translation Layers 361# User Modules And Translation Layers
@@ -421,7 +442,7 @@ CONFIG_BLK_DEV=y
421CONFIG_BLK_DEV_RAM=y 442CONFIG_BLK_DEV_RAM=y
422CONFIG_BLK_DEV_RAM_COUNT=16 443CONFIG_BLK_DEV_RAM_COUNT=16
423CONFIG_BLK_DEV_RAM_SIZE=35000 444CONFIG_BLK_DEV_RAM_SIZE=35000
424CONFIG_BLK_DEV_RAM_BLOCKSIZE=1024 445# CONFIG_BLK_DEV_XIP is not set
425# CONFIG_CDROM_PKTCDVD is not set 446# CONFIG_CDROM_PKTCDVD is not set
426# CONFIG_ATA_OVER_ETH is not set 447# CONFIG_ATA_OVER_ETH is not set
427# CONFIG_XILINX_SYSACE is not set 448# CONFIG_XILINX_SYSACE is not set
@@ -430,6 +451,8 @@ CONFIG_MISC_DEVICES=y
430# CONFIG_EEPROM_93CX6 is not set 451# CONFIG_EEPROM_93CX6 is not set
431# CONFIG_SGI_IOC4 is not set 452# CONFIG_SGI_IOC4 is not set
432# CONFIG_TIFM_CORE is not set 453# CONFIG_TIFM_CORE is not set
454# CONFIG_ENCLOSURE_SERVICES is not set
455CONFIG_HAVE_IDE=y
433# CONFIG_IDE is not set 456# CONFIG_IDE is not set
434 457
435# 458#
@@ -458,7 +481,6 @@ CONFIG_NETDEVICES=y
458# CONFIG_EQUALIZER is not set 481# CONFIG_EQUALIZER is not set
459# CONFIG_TUN is not set 482# CONFIG_TUN is not set
460# CONFIG_VETH is not set 483# CONFIG_VETH is not set
461# CONFIG_IP1000 is not set
462# CONFIG_ARCNET is not set 484# CONFIG_ARCNET is not set
463# CONFIG_PHYLIB is not set 485# CONFIG_PHYLIB is not set
464CONFIG_NET_ETHERNET=y 486CONFIG_NET_ETHERNET=y
@@ -487,6 +509,9 @@ CONFIG_NETDEV_1000=y
487# CONFIG_DL2K is not set 509# CONFIG_DL2K is not set
488# CONFIG_E1000 is not set 510# CONFIG_E1000 is not set
489# CONFIG_E1000E is not set 511# CONFIG_E1000E is not set
512# CONFIG_E1000E_ENABLED is not set
513# CONFIG_IP1000 is not set
514# CONFIG_IGB is not set
490# CONFIG_NS83820 is not set 515# CONFIG_NS83820 is not set
491# CONFIG_HAMACHI is not set 516# CONFIG_HAMACHI is not set
492# CONFIG_YELLOWFIN is not set 517# CONFIG_YELLOWFIN is not set
@@ -511,6 +536,7 @@ CONFIG_NETDEV_10000=y
511# CONFIG_NIU is not set 536# CONFIG_NIU is not set
512# CONFIG_MLX4_CORE is not set 537# CONFIG_MLX4_CORE is not set
513# CONFIG_TEHUTI is not set 538# CONFIG_TEHUTI is not set
539# CONFIG_BNX2X is not set
514# CONFIG_TR is not set 540# CONFIG_TR is not set
515 541
516# 542#
@@ -523,7 +549,6 @@ CONFIG_NETDEV_10000=y
523# CONFIG_HIPPI is not set 549# CONFIG_HIPPI is not set
524# CONFIG_PPP is not set 550# CONFIG_PPP is not set
525# CONFIG_SLIP is not set 551# CONFIG_SLIP is not set
526# CONFIG_SHAPER is not set
527# CONFIG_NETCONSOLE is not set 552# CONFIG_NETCONSOLE is not set
528# CONFIG_NETPOLL is not set 553# CONFIG_NETPOLL is not set
529# CONFIG_NET_POLL_CONTROLLER is not set 554# CONFIG_NET_POLL_CONTROLLER is not set
@@ -546,6 +571,7 @@ CONFIG_NETDEV_10000=y
546# 571#
547# CONFIG_VT is not set 572# CONFIG_VT is not set
548# CONFIG_SERIAL_NONSTANDARD is not set 573# CONFIG_SERIAL_NONSTANDARD is not set
574# CONFIG_NOZOMI is not set
549 575
550# 576#
551# Serial drivers 577# Serial drivers
@@ -591,6 +617,7 @@ CONFIG_DEVPORT=y
591# CONFIG_W1 is not set 617# CONFIG_W1 is not set
592# CONFIG_POWER_SUPPLY is not set 618# CONFIG_POWER_SUPPLY is not set
593# CONFIG_HWMON is not set 619# CONFIG_HWMON is not set
620CONFIG_THERMAL=y
594# CONFIG_WATCHDOG is not set 621# CONFIG_WATCHDOG is not set
595 622
596# 623#
@@ -639,12 +666,9 @@ CONFIG_USB_ARCH_HAS_EHCI=y
639# 666#
640# NOTE: USB_STORAGE enables SCSI, and 'SCSI disk support' 667# NOTE: USB_STORAGE enables SCSI, and 'SCSI disk support'
641# 668#
642
643#
644# USB Gadget Support
645#
646# CONFIG_USB_GADGET is not set 669# CONFIG_USB_GADGET is not set
647# CONFIG_MMC is not set 670# CONFIG_MMC is not set
671# CONFIG_MEMSTICK is not set
648# CONFIG_NEW_LEDS is not set 672# CONFIG_NEW_LEDS is not set
649# CONFIG_INFINIBAND is not set 673# CONFIG_INFINIBAND is not set
650# CONFIG_EDAC is not set 674# CONFIG_EDAC is not set
@@ -669,12 +693,10 @@ CONFIG_EXT2_FS=y
669# CONFIG_XFS_FS is not set 693# CONFIG_XFS_FS is not set
670# CONFIG_GFS2_FS is not set 694# CONFIG_GFS2_FS is not set
671# CONFIG_OCFS2_FS is not set 695# CONFIG_OCFS2_FS is not set
672# CONFIG_MINIX_FS is not set 696CONFIG_DNOTIFY=y
673# CONFIG_ROMFS_FS is not set
674CONFIG_INOTIFY=y 697CONFIG_INOTIFY=y
675CONFIG_INOTIFY_USER=y 698CONFIG_INOTIFY_USER=y
676# CONFIG_QUOTA is not set 699# CONFIG_QUOTA is not set
677CONFIG_DNOTIFY=y
678# CONFIG_AUTOFS_FS is not set 700# CONFIG_AUTOFS_FS is not set
679# CONFIG_AUTOFS4_FS is not set 701# CONFIG_AUTOFS4_FS is not set
680# CONFIG_FUSE_FS is not set 702# CONFIG_FUSE_FS is not set
@@ -727,8 +749,10 @@ CONFIG_JFFS2_RTIME=y
727# CONFIG_JFFS2_RUBIN is not set 749# CONFIG_JFFS2_RUBIN is not set
728CONFIG_CRAMFS=y 750CONFIG_CRAMFS=y
729# CONFIG_VXFS_FS is not set 751# CONFIG_VXFS_FS is not set
752# CONFIG_MINIX_FS is not set
730# CONFIG_HPFS_FS is not set 753# CONFIG_HPFS_FS is not set
731# CONFIG_QNX4FS_FS is not set 754# CONFIG_QNX4FS_FS is not set
755# CONFIG_ROMFS_FS is not set
732# CONFIG_SYSV_FS is not set 756# CONFIG_SYSV_FS is not set
733# CONFIG_UFS_FS is not set 757# CONFIG_UFS_FS is not set
734CONFIG_NETWORK_FILESYSTEMS=y 758CONFIG_NETWORK_FILESYSTEMS=y
@@ -759,7 +783,6 @@ CONFIG_SUNRPC=y
759CONFIG_MSDOS_PARTITION=y 783CONFIG_MSDOS_PARTITION=y
760# CONFIG_NLS is not set 784# CONFIG_NLS is not set
761# CONFIG_DLM is not set 785# CONFIG_DLM is not set
762# CONFIG_UCC_SLOW is not set
763 786
764# 787#
765# Library routines 788# Library routines
@@ -777,7 +800,6 @@ CONFIG_PLIST=y
777CONFIG_HAS_IOMEM=y 800CONFIG_HAS_IOMEM=y
778CONFIG_HAS_IOPORT=y 801CONFIG_HAS_IOPORT=y
779CONFIG_HAS_DMA=y 802CONFIG_HAS_DMA=y
780# CONFIG_INSTRUMENTATION is not set
781 803
782# 804#
783# Kernel hacking 805# Kernel hacking
@@ -787,7 +809,7 @@ CONFIG_ENABLE_WARN_DEPRECATED=y
787CONFIG_ENABLE_MUST_CHECK=y 809CONFIG_ENABLE_MUST_CHECK=y
788CONFIG_MAGIC_SYSRQ=y 810CONFIG_MAGIC_SYSRQ=y
789# CONFIG_UNUSED_SYMBOLS is not set 811# CONFIG_UNUSED_SYMBOLS is not set
790# CONFIG_DEBUG_FS is not set 812CONFIG_DEBUG_FS=y
791# CONFIG_HEADERS_CHECK is not set 813# CONFIG_HEADERS_CHECK is not set
792CONFIG_DEBUG_KERNEL=y 814CONFIG_DEBUG_KERNEL=y
793# CONFIG_DEBUG_SHIRQ is not set 815# CONFIG_DEBUG_SHIRQ is not set
@@ -796,6 +818,7 @@ CONFIG_SCHED_DEBUG=y
796# CONFIG_SCHEDSTATS is not set 818# CONFIG_SCHEDSTATS is not set
797# CONFIG_TIMER_STATS is not set 819# CONFIG_TIMER_STATS is not set
798# CONFIG_SLUB_DEBUG_ON is not set 820# CONFIG_SLUB_DEBUG_ON is not set
821# CONFIG_SLUB_STATS is not set
799# CONFIG_DEBUG_RT_MUTEXES is not set 822# CONFIG_DEBUG_RT_MUTEXES is not set
800# CONFIG_RT_MUTEX_TESTER is not set 823# CONFIG_RT_MUTEX_TESTER is not set
801# CONFIG_DEBUG_SPINLOCK is not set 824# CONFIG_DEBUG_SPINLOCK is not set
@@ -808,9 +831,9 @@ CONFIG_SCHED_DEBUG=y
808# CONFIG_DEBUG_VM is not set 831# CONFIG_DEBUG_VM is not set
809# CONFIG_DEBUG_LIST is not set 832# CONFIG_DEBUG_LIST is not set
810# CONFIG_DEBUG_SG is not set 833# CONFIG_DEBUG_SG is not set
811CONFIG_FORCED_INLINING=y
812# CONFIG_BOOT_PRINTK_DELAY is not set 834# CONFIG_BOOT_PRINTK_DELAY is not set
813# CONFIG_RCU_TORTURE_TEST is not set 835# CONFIG_RCU_TORTURE_TEST is not set
836# CONFIG_BACKTRACE_SELF_TEST is not set
814# CONFIG_FAULT_INJECTION is not set 837# CONFIG_FAULT_INJECTION is not set
815# CONFIG_SAMPLES is not set 838# CONFIG_SAMPLES is not set
816# CONFIG_DEBUG_STACKOVERFLOW is not set 839# CONFIG_DEBUG_STACKOVERFLOW is not set
@@ -819,6 +842,7 @@ CONFIG_FORCED_INLINING=y
819CONFIG_DEBUGGER=y 842CONFIG_DEBUGGER=y
820# CONFIG_KGDB is not set 843# CONFIG_KGDB is not set
821# CONFIG_XMON is not set 844# CONFIG_XMON is not set
845# CONFIG_VIRQ_DEBUG is not set
822# CONFIG_BDI_SWITCH is not set 846# CONFIG_BDI_SWITCH is not set
823CONFIG_PPC_EARLY_DEBUG=y 847CONFIG_PPC_EARLY_DEBUG=y
824# CONFIG_PPC_EARLY_DEBUG_LPAR is not set 848# CONFIG_PPC_EARLY_DEBUG_LPAR is not set
@@ -844,6 +868,7 @@ CONFIG_PPC_EARLY_DEBUG_44x_PHYSHIGH=0x1
844CONFIG_CRYPTO=y 868CONFIG_CRYPTO=y
845CONFIG_CRYPTO_ALGAPI=y 869CONFIG_CRYPTO_ALGAPI=y
846CONFIG_CRYPTO_BLKCIPHER=y 870CONFIG_CRYPTO_BLKCIPHER=y
871# CONFIG_CRYPTO_SEQIV is not set
847CONFIG_CRYPTO_MANAGER=y 872CONFIG_CRYPTO_MANAGER=y
848# CONFIG_CRYPTO_HMAC is not set 873# CONFIG_CRYPTO_HMAC is not set
849# CONFIG_CRYPTO_XCBC is not set 874# CONFIG_CRYPTO_XCBC is not set
@@ -861,6 +886,9 @@ CONFIG_CRYPTO_CBC=y
861CONFIG_CRYPTO_PCBC=y 886CONFIG_CRYPTO_PCBC=y
862# CONFIG_CRYPTO_LRW is not set 887# CONFIG_CRYPTO_LRW is not set
863# CONFIG_CRYPTO_XTS is not set 888# CONFIG_CRYPTO_XTS is not set
889# CONFIG_CRYPTO_CTR is not set
890# CONFIG_CRYPTO_GCM is not set
891# CONFIG_CRYPTO_CCM is not set
864# CONFIG_CRYPTO_CRYPTD is not set 892# CONFIG_CRYPTO_CRYPTD is not set
865CONFIG_CRYPTO_DES=y 893CONFIG_CRYPTO_DES=y
866# CONFIG_CRYPTO_FCRYPT is not set 894# CONFIG_CRYPTO_FCRYPT is not set
@@ -875,11 +903,14 @@ CONFIG_CRYPTO_DES=y
875# CONFIG_CRYPTO_KHAZAD is not set 903# CONFIG_CRYPTO_KHAZAD is not set
876# CONFIG_CRYPTO_ANUBIS is not set 904# CONFIG_CRYPTO_ANUBIS is not set
877# CONFIG_CRYPTO_SEED is not set 905# CONFIG_CRYPTO_SEED is not set
906# CONFIG_CRYPTO_SALSA20 is not set
878# CONFIG_CRYPTO_DEFLATE is not set 907# CONFIG_CRYPTO_DEFLATE is not set
879# CONFIG_CRYPTO_MICHAEL_MIC is not set 908# CONFIG_CRYPTO_MICHAEL_MIC is not set
880# CONFIG_CRYPTO_CRC32C is not set 909# CONFIG_CRYPTO_CRC32C is not set
881# CONFIG_CRYPTO_CAMELLIA is not set 910# CONFIG_CRYPTO_CAMELLIA is not set
882# CONFIG_CRYPTO_TEST is not set 911# CONFIG_CRYPTO_TEST is not set
883# CONFIG_CRYPTO_AUTHENC is not set 912# CONFIG_CRYPTO_AUTHENC is not set
913# CONFIG_CRYPTO_LZO is not set
884CONFIG_CRYPTO_HW=y 914CONFIG_CRYPTO_HW=y
915# CONFIG_CRYPTO_DEV_HIFN_795X is not set
885# CONFIG_PPC_CLOCK is not set 916# CONFIG_PPC_CLOCK is not set
diff --git a/arch/powerpc/configs/taishan_defconfig b/arch/powerpc/configs/taishan_defconfig
index ade84b92877e..087aedce1338 100644
--- a/arch/powerpc/configs/taishan_defconfig
+++ b/arch/powerpc/configs/taishan_defconfig
@@ -1,7 +1,7 @@
1# 1#
2# Automatically generated make config: don't edit 2# Automatically generated make config: don't edit
3# Linux kernel version: 2.6.24-rc6 3# Linux kernel version: 2.6.25-rc2
4# Mon Dec 24 11:23:39 2007 4# Fri Feb 15 21:40:44 2008
5# 5#
6# CONFIG_PPC64 is not set 6# CONFIG_PPC64 is not set
7 7
@@ -29,6 +29,7 @@ CONFIG_GENERIC_TIME=y
29CONFIG_GENERIC_TIME_VSYSCALL=y 29CONFIG_GENERIC_TIME_VSYSCALL=y
30CONFIG_GENERIC_CLOCKEVENTS=y 30CONFIG_GENERIC_CLOCKEVENTS=y
31CONFIG_GENERIC_HARDIRQS=y 31CONFIG_GENERIC_HARDIRQS=y
32# CONFIG_HAVE_SETUP_PER_CPU_AREA is not set
32CONFIG_IRQ_PER_CPU=y 33CONFIG_IRQ_PER_CPU=y
33CONFIG_RWSEM_XCHGADD_ALGORITHM=y 34CONFIG_RWSEM_XCHGADD_ALGORITHM=y
34CONFIG_ARCH_HAS_ILOG2_U32=y 35CONFIG_ARCH_HAS_ILOG2_U32=y
@@ -67,17 +68,18 @@ CONFIG_SYSVIPC_SYSCTL=y
67CONFIG_POSIX_MQUEUE=y 68CONFIG_POSIX_MQUEUE=y
68# CONFIG_BSD_PROCESS_ACCT is not set 69# CONFIG_BSD_PROCESS_ACCT is not set
69# CONFIG_TASKSTATS is not set 70# CONFIG_TASKSTATS is not set
70# CONFIG_USER_NS is not set
71# CONFIG_PID_NS is not set
72# CONFIG_AUDIT is not set 71# CONFIG_AUDIT is not set
73# CONFIG_IKCONFIG is not set 72# CONFIG_IKCONFIG is not set
74CONFIG_LOG_BUF_SHIFT=14 73CONFIG_LOG_BUF_SHIFT=14
75# CONFIG_CGROUPS is not set 74# CONFIG_CGROUPS is not set
75CONFIG_GROUP_SCHED=y
76CONFIG_FAIR_GROUP_SCHED=y 76CONFIG_FAIR_GROUP_SCHED=y
77CONFIG_FAIR_USER_SCHED=y 77# CONFIG_RT_GROUP_SCHED is not set
78# CONFIG_FAIR_CGROUP_SCHED is not set 78CONFIG_USER_SCHED=y
79# CONFIG_CGROUP_SCHED is not set
79CONFIG_SYSFS_DEPRECATED=y 80CONFIG_SYSFS_DEPRECATED=y
80# CONFIG_RELAY is not set 81# CONFIG_RELAY is not set
82# CONFIG_NAMESPACES is not set
81CONFIG_BLK_DEV_INITRD=y 83CONFIG_BLK_DEV_INITRD=y
82CONFIG_INITRAMFS_SOURCE="" 84CONFIG_INITRAMFS_SOURCE=""
83# CONFIG_CC_OPTIMIZE_FOR_SIZE is not set 85# CONFIG_CC_OPTIMIZE_FOR_SIZE is not set
@@ -91,11 +93,13 @@ CONFIG_HOTPLUG=y
91CONFIG_PRINTK=y 93CONFIG_PRINTK=y
92CONFIG_BUG=y 94CONFIG_BUG=y
93CONFIG_ELF_CORE=y 95CONFIG_ELF_CORE=y
96CONFIG_COMPAT_BRK=y
94CONFIG_BASE_FULL=y 97CONFIG_BASE_FULL=y
95CONFIG_FUTEX=y 98CONFIG_FUTEX=y
96CONFIG_ANON_INODES=y 99CONFIG_ANON_INODES=y
97CONFIG_EPOLL=y 100CONFIG_EPOLL=y
98CONFIG_SIGNALFD=y 101CONFIG_SIGNALFD=y
102CONFIG_TIMERFD=y
99CONFIG_EVENTFD=y 103CONFIG_EVENTFD=y
100CONFIG_SHMEM=y 104CONFIG_SHMEM=y
101CONFIG_VM_EVENT_COUNTERS=y 105CONFIG_VM_EVENT_COUNTERS=y
@@ -103,6 +107,13 @@ CONFIG_SLUB_DEBUG=y
103# CONFIG_SLAB is not set 107# CONFIG_SLAB is not set
104CONFIG_SLUB=y 108CONFIG_SLUB=y
105# CONFIG_SLOB is not set 109# CONFIG_SLOB is not set
110# CONFIG_PROFILING is not set
111# CONFIG_MARKERS is not set
112CONFIG_HAVE_OPROFILE=y
113# CONFIG_KPROBES is not set
114CONFIG_HAVE_KPROBES=y
115CONFIG_PROC_PAGE_MONITOR=y
116CONFIG_SLABINFO=y
106CONFIG_RT_MUTEXES=y 117CONFIG_RT_MUTEXES=y
107# CONFIG_TINY_SHMEM is not set 118# CONFIG_TINY_SHMEM is not set
108CONFIG_BASE_SMALL=0 119CONFIG_BASE_SMALL=0
@@ -130,13 +141,15 @@ CONFIG_DEFAULT_AS=y
130# CONFIG_DEFAULT_CFQ is not set 141# CONFIG_DEFAULT_CFQ is not set
131# CONFIG_DEFAULT_NOOP is not set 142# CONFIG_DEFAULT_NOOP is not set
132CONFIG_DEFAULT_IOSCHED="anticipatory" 143CONFIG_DEFAULT_IOSCHED="anticipatory"
144CONFIG_CLASSIC_RCU=y
145# CONFIG_PREEMPT_RCU is not set
133# CONFIG_PPC4xx_PCI_EXPRESS is not set 146# CONFIG_PPC4xx_PCI_EXPRESS is not set
134 147
135# 148#
136# Platform support 149# Platform support
137# 150#
138# CONFIG_PPC_MPC52xx is not set 151# CONFIG_PPC_MPC512x is not set
139# CONFIG_PPC_MPC5200 is not set 152# CONFIG_PPC_MPC5121 is not set
140# CONFIG_PPC_CELL is not set 153# CONFIG_PPC_CELL is not set
141# CONFIG_PPC_CELL_NATIVE is not set 154# CONFIG_PPC_CELL_NATIVE is not set
142# CONFIG_PQ2ADS is not set 155# CONFIG_PQ2ADS is not set
@@ -146,7 +159,9 @@ CONFIG_DEFAULT_IOSCHED="anticipatory"
146CONFIG_TAISHAN=y 159CONFIG_TAISHAN=y
147# CONFIG_KATMAI is not set 160# CONFIG_KATMAI is not set
148# CONFIG_RAINIER is not set 161# CONFIG_RAINIER is not set
162# CONFIG_WARP is not set
149CONFIG_440GX=y 163CONFIG_440GX=y
164# CONFIG_IPIC is not set
150# CONFIG_MPIC is not set 165# CONFIG_MPIC is not set
151# CONFIG_MPIC_WEIRD is not set 166# CONFIG_MPIC_WEIRD is not set
152# CONFIG_PPC_I8259 is not set 167# CONFIG_PPC_I8259 is not set
@@ -157,7 +172,6 @@ CONFIG_440GX=y
157# CONFIG_PPC_INDIRECT_IO is not set 172# CONFIG_PPC_INDIRECT_IO is not set
158# CONFIG_GENERIC_IOMAP is not set 173# CONFIG_GENERIC_IOMAP is not set
159# CONFIG_CPU_FREQ is not set 174# CONFIG_CPU_FREQ is not set
160# CONFIG_CPM2 is not set
161# CONFIG_FSL_ULI1575 is not set 175# CONFIG_FSL_ULI1575 is not set
162 176
163# 177#
@@ -173,13 +187,18 @@ CONFIG_HZ_250=y
173# CONFIG_HZ_300 is not set 187# CONFIG_HZ_300 is not set
174# CONFIG_HZ_1000 is not set 188# CONFIG_HZ_1000 is not set
175CONFIG_HZ=250 189CONFIG_HZ=250
190# CONFIG_SCHED_HRTICK is not set
176CONFIG_PREEMPT_NONE=y 191CONFIG_PREEMPT_NONE=y
177# CONFIG_PREEMPT_VOLUNTARY is not set 192# CONFIG_PREEMPT_VOLUNTARY is not set
178# CONFIG_PREEMPT is not set 193# CONFIG_PREEMPT is not set
194CONFIG_RCU_TRACE=y
179CONFIG_BINFMT_ELF=y 195CONFIG_BINFMT_ELF=y
180# CONFIG_BINFMT_MISC is not set 196# CONFIG_BINFMT_MISC is not set
181# CONFIG_MATH_EMULATION is not set 197# CONFIG_MATH_EMULATION is not set
198# CONFIG_IOMMU_HELPER is not set
182CONFIG_ARCH_ENABLE_MEMORY_HOTPLUG=y 199CONFIG_ARCH_ENABLE_MEMORY_HOTPLUG=y
200CONFIG_ARCH_HAS_WALK_MEMORY=y
201CONFIG_ARCH_ENABLE_MEMORY_HOTREMOVE=y
183CONFIG_ARCH_FLATMEM_ENABLE=y 202CONFIG_ARCH_FLATMEM_ENABLE=y
184CONFIG_ARCH_POPULATES_NODE_MAP=y 203CONFIG_ARCH_POPULATES_NODE_MAP=y
185CONFIG_SELECT_MEMORY_MODEL=y 204CONFIG_SELECT_MEMORY_MODEL=y
@@ -199,8 +218,6 @@ CONFIG_PROC_DEVICETREE=y
199CONFIG_CMDLINE_BOOL=y 218CONFIG_CMDLINE_BOOL=y
200CONFIG_CMDLINE="" 219CONFIG_CMDLINE=""
201CONFIG_SECCOMP=y 220CONFIG_SECCOMP=y
202CONFIG_WANT_DEVICE_TREE=y
203CONFIG_DEVICE_TREE="taishan.dts"
204CONFIG_ISA_DMA_API=y 221CONFIG_ISA_DMA_API=y
205 222
206# 223#
@@ -300,6 +317,7 @@ CONFIG_DEFAULT_TCP_CONG="cubic"
300# 317#
301# CONFIG_NET_PKTGEN is not set 318# CONFIG_NET_PKTGEN is not set
302# CONFIG_HAMRADIO is not set 319# CONFIG_HAMRADIO is not set
320# CONFIG_CAN is not set
303# CONFIG_IRDA is not set 321# CONFIG_IRDA is not set
304# CONFIG_BT is not set 322# CONFIG_BT is not set
305# CONFIG_AF_RXRPC is not set 323# CONFIG_AF_RXRPC is not set
@@ -346,7 +364,7 @@ CONFIG_BLK_DEV=y
346CONFIG_BLK_DEV_RAM=y 364CONFIG_BLK_DEV_RAM=y
347CONFIG_BLK_DEV_RAM_COUNT=16 365CONFIG_BLK_DEV_RAM_COUNT=16
348CONFIG_BLK_DEV_RAM_SIZE=35000 366CONFIG_BLK_DEV_RAM_SIZE=35000
349CONFIG_BLK_DEV_RAM_BLOCKSIZE=1024 367# CONFIG_BLK_DEV_XIP is not set
350# CONFIG_CDROM_PKTCDVD is not set 368# CONFIG_CDROM_PKTCDVD is not set
351# CONFIG_ATA_OVER_ETH is not set 369# CONFIG_ATA_OVER_ETH is not set
352# CONFIG_XILINX_SYSACE is not set 370# CONFIG_XILINX_SYSACE is not set
@@ -355,6 +373,8 @@ CONFIG_MISC_DEVICES=y
355# CONFIG_EEPROM_93CX6 is not set 373# CONFIG_EEPROM_93CX6 is not set
356# CONFIG_SGI_IOC4 is not set 374# CONFIG_SGI_IOC4 is not set
357# CONFIG_TIFM_CORE is not set 375# CONFIG_TIFM_CORE is not set
376# CONFIG_ENCLOSURE_SERVICES is not set
377CONFIG_HAVE_IDE=y
358# CONFIG_IDE is not set 378# CONFIG_IDE is not set
359 379
360# 380#
@@ -385,7 +405,6 @@ CONFIG_NETDEVICES=y
385# CONFIG_EQUALIZER is not set 405# CONFIG_EQUALIZER is not set
386# CONFIG_TUN is not set 406# CONFIG_TUN is not set
387# CONFIG_VETH is not set 407# CONFIG_VETH is not set
388# CONFIG_IP1000 is not set
389# CONFIG_ARCNET is not set 408# CONFIG_ARCNET is not set
390# CONFIG_PHYLIB is not set 409# CONFIG_PHYLIB is not set
391CONFIG_NET_ETHERNET=y 410CONFIG_NET_ETHERNET=y
@@ -414,6 +433,9 @@ CONFIG_NETDEV_1000=y
414# CONFIG_DL2K is not set 433# CONFIG_DL2K is not set
415# CONFIG_E1000 is not set 434# CONFIG_E1000 is not set
416# CONFIG_E1000E is not set 435# CONFIG_E1000E is not set
436# CONFIG_E1000E_ENABLED is not set
437# CONFIG_IP1000 is not set
438# CONFIG_IGB is not set
417# CONFIG_NS83820 is not set 439# CONFIG_NS83820 is not set
418# CONFIG_HAMACHI is not set 440# CONFIG_HAMACHI is not set
419# CONFIG_YELLOWFIN is not set 441# CONFIG_YELLOWFIN is not set
@@ -438,6 +460,7 @@ CONFIG_NETDEV_10000=y
438# CONFIG_NIU is not set 460# CONFIG_NIU is not set
439# CONFIG_MLX4_CORE is not set 461# CONFIG_MLX4_CORE is not set
440# CONFIG_TEHUTI is not set 462# CONFIG_TEHUTI is not set
463# CONFIG_BNX2X is not set
441# CONFIG_TR is not set 464# CONFIG_TR is not set
442 465
443# 466#
@@ -450,7 +473,6 @@ CONFIG_NETDEV_10000=y
450# CONFIG_HIPPI is not set 473# CONFIG_HIPPI is not set
451# CONFIG_PPP is not set 474# CONFIG_PPP is not set
452# CONFIG_SLIP is not set 475# CONFIG_SLIP is not set
453# CONFIG_SHAPER is not set
454# CONFIG_NETCONSOLE is not set 476# CONFIG_NETCONSOLE is not set
455# CONFIG_NETPOLL is not set 477# CONFIG_NETPOLL is not set
456# CONFIG_NET_POLL_CONTROLLER is not set 478# CONFIG_NET_POLL_CONTROLLER is not set
@@ -473,6 +495,7 @@ CONFIG_NETDEV_10000=y
473# 495#
474# CONFIG_VT is not set 496# CONFIG_VT is not set
475# CONFIG_SERIAL_NONSTANDARD is not set 497# CONFIG_SERIAL_NONSTANDARD is not set
498# CONFIG_NOZOMI is not set
476 499
477# 500#
478# Serial drivers 501# Serial drivers
@@ -518,6 +541,7 @@ CONFIG_DEVPORT=y
518# CONFIG_W1 is not set 541# CONFIG_W1 is not set
519# CONFIG_POWER_SUPPLY is not set 542# CONFIG_POWER_SUPPLY is not set
520# CONFIG_HWMON is not set 543# CONFIG_HWMON is not set
544CONFIG_THERMAL=y
521# CONFIG_WATCHDOG is not set 545# CONFIG_WATCHDOG is not set
522 546
523# 547#
@@ -566,12 +590,9 @@ CONFIG_USB_ARCH_HAS_EHCI=y
566# 590#
567# NOTE: USB_STORAGE enables SCSI, and 'SCSI disk support' 591# NOTE: USB_STORAGE enables SCSI, and 'SCSI disk support'
568# 592#
569
570#
571# USB Gadget Support
572#
573# CONFIG_USB_GADGET is not set 593# CONFIG_USB_GADGET is not set
574# CONFIG_MMC is not set 594# CONFIG_MMC is not set
595# CONFIG_MEMSTICK is not set
575# CONFIG_NEW_LEDS is not set 596# CONFIG_NEW_LEDS is not set
576# CONFIG_INFINIBAND is not set 597# CONFIG_INFINIBAND is not set
577# CONFIG_EDAC is not set 598# CONFIG_EDAC is not set
@@ -596,12 +617,10 @@ CONFIG_EXT2_FS=y
596# CONFIG_XFS_FS is not set 617# CONFIG_XFS_FS is not set
597# CONFIG_GFS2_FS is not set 618# CONFIG_GFS2_FS is not set
598# CONFIG_OCFS2_FS is not set 619# CONFIG_OCFS2_FS is not set
599# CONFIG_MINIX_FS is not set 620CONFIG_DNOTIFY=y
600# CONFIG_ROMFS_FS is not set
601CONFIG_INOTIFY=y 621CONFIG_INOTIFY=y
602CONFIG_INOTIFY_USER=y 622CONFIG_INOTIFY_USER=y
603# CONFIG_QUOTA is not set 623# CONFIG_QUOTA is not set
604CONFIG_DNOTIFY=y
605# CONFIG_AUTOFS_FS is not set 624# CONFIG_AUTOFS_FS is not set
606# CONFIG_AUTOFS4_FS is not set 625# CONFIG_AUTOFS4_FS is not set
607# CONFIG_FUSE_FS is not set 626# CONFIG_FUSE_FS is not set
@@ -643,8 +662,10 @@ CONFIG_TMPFS=y
643# CONFIG_EFS_FS is not set 662# CONFIG_EFS_FS is not set
644CONFIG_CRAMFS=y 663CONFIG_CRAMFS=y
645# CONFIG_VXFS_FS is not set 664# CONFIG_VXFS_FS is not set
665# CONFIG_MINIX_FS is not set
646# CONFIG_HPFS_FS is not set 666# CONFIG_HPFS_FS is not set
647# CONFIG_QNX4FS_FS is not set 667# CONFIG_QNX4FS_FS is not set
668# CONFIG_ROMFS_FS is not set
648# CONFIG_SYSV_FS is not set 669# CONFIG_SYSV_FS is not set
649# CONFIG_UFS_FS is not set 670# CONFIG_UFS_FS is not set
650CONFIG_NETWORK_FILESYSTEMS=y 671CONFIG_NETWORK_FILESYSTEMS=y
@@ -675,7 +696,6 @@ CONFIG_SUNRPC=y
675CONFIG_MSDOS_PARTITION=y 696CONFIG_MSDOS_PARTITION=y
676# CONFIG_NLS is not set 697# CONFIG_NLS is not set
677# CONFIG_DLM is not set 698# CONFIG_DLM is not set
678# CONFIG_UCC_SLOW is not set
679 699
680# 700#
681# Library routines 701# Library routines
@@ -692,10 +712,6 @@ CONFIG_PLIST=y
692CONFIG_HAS_IOMEM=y 712CONFIG_HAS_IOMEM=y
693CONFIG_HAS_IOPORT=y 713CONFIG_HAS_IOPORT=y
694CONFIG_HAS_DMA=y 714CONFIG_HAS_DMA=y
695CONFIG_INSTRUMENTATION=y
696# CONFIG_PROFILING is not set
697# CONFIG_KPROBES is not set
698# CONFIG_MARKERS is not set
699 715
700# 716#
701# Kernel hacking 717# Kernel hacking
@@ -705,7 +721,7 @@ CONFIG_ENABLE_WARN_DEPRECATED=y
705CONFIG_ENABLE_MUST_CHECK=y 721CONFIG_ENABLE_MUST_CHECK=y
706CONFIG_MAGIC_SYSRQ=y 722CONFIG_MAGIC_SYSRQ=y
707# CONFIG_UNUSED_SYMBOLS is not set 723# CONFIG_UNUSED_SYMBOLS is not set
708# CONFIG_DEBUG_FS is not set 724CONFIG_DEBUG_FS=y
709# CONFIG_HEADERS_CHECK is not set 725# CONFIG_HEADERS_CHECK is not set
710CONFIG_DEBUG_KERNEL=y 726CONFIG_DEBUG_KERNEL=y
711# CONFIG_DEBUG_SHIRQ is not set 727# CONFIG_DEBUG_SHIRQ is not set
@@ -714,6 +730,7 @@ CONFIG_SCHED_DEBUG=y
714# CONFIG_SCHEDSTATS is not set 730# CONFIG_SCHEDSTATS is not set
715# CONFIG_TIMER_STATS is not set 731# CONFIG_TIMER_STATS is not set
716# CONFIG_SLUB_DEBUG_ON is not set 732# CONFIG_SLUB_DEBUG_ON is not set
733# CONFIG_SLUB_STATS is not set
717# CONFIG_DEBUG_RT_MUTEXES is not set 734# CONFIG_DEBUG_RT_MUTEXES is not set
718# CONFIG_RT_MUTEX_TESTER is not set 735# CONFIG_RT_MUTEX_TESTER is not set
719# CONFIG_DEBUG_SPINLOCK is not set 736# CONFIG_DEBUG_SPINLOCK is not set
@@ -726,9 +743,9 @@ CONFIG_SCHED_DEBUG=y
726# CONFIG_DEBUG_VM is not set 743# CONFIG_DEBUG_VM is not set
727# CONFIG_DEBUG_LIST is not set 744# CONFIG_DEBUG_LIST is not set
728# CONFIG_DEBUG_SG is not set 745# CONFIG_DEBUG_SG is not set
729CONFIG_FORCED_INLINING=y
730# CONFIG_BOOT_PRINTK_DELAY is not set 746# CONFIG_BOOT_PRINTK_DELAY is not set
731# CONFIG_RCU_TORTURE_TEST is not set 747# CONFIG_RCU_TORTURE_TEST is not set
748# CONFIG_BACKTRACE_SELF_TEST is not set
732# CONFIG_FAULT_INJECTION is not set 749# CONFIG_FAULT_INJECTION is not set
733# CONFIG_SAMPLES is not set 750# CONFIG_SAMPLES is not set
734# CONFIG_DEBUG_STACKOVERFLOW is not set 751# CONFIG_DEBUG_STACKOVERFLOW is not set
@@ -737,6 +754,7 @@ CONFIG_FORCED_INLINING=y
737CONFIG_DEBUGGER=y 754CONFIG_DEBUGGER=y
738# CONFIG_KGDB is not set 755# CONFIG_KGDB is not set
739# CONFIG_XMON is not set 756# CONFIG_XMON is not set
757# CONFIG_VIRQ_DEBUG is not set
740# CONFIG_BDI_SWITCH is not set 758# CONFIG_BDI_SWITCH is not set
741# CONFIG_PPC_EARLY_DEBUG is not set 759# CONFIG_PPC_EARLY_DEBUG is not set
742 760
@@ -749,6 +767,7 @@ CONFIG_DEBUGGER=y
749CONFIG_CRYPTO=y 767CONFIG_CRYPTO=y
750CONFIG_CRYPTO_ALGAPI=y 768CONFIG_CRYPTO_ALGAPI=y
751CONFIG_CRYPTO_BLKCIPHER=y 769CONFIG_CRYPTO_BLKCIPHER=y
770# CONFIG_CRYPTO_SEQIV is not set
752CONFIG_CRYPTO_MANAGER=y 771CONFIG_CRYPTO_MANAGER=y
753# CONFIG_CRYPTO_HMAC is not set 772# CONFIG_CRYPTO_HMAC is not set
754# CONFIG_CRYPTO_XCBC is not set 773# CONFIG_CRYPTO_XCBC is not set
@@ -766,6 +785,9 @@ CONFIG_CRYPTO_CBC=y
766CONFIG_CRYPTO_PCBC=y 785CONFIG_CRYPTO_PCBC=y
767# CONFIG_CRYPTO_LRW is not set 786# CONFIG_CRYPTO_LRW is not set
768# CONFIG_CRYPTO_XTS is not set 787# CONFIG_CRYPTO_XTS is not set
788# CONFIG_CRYPTO_CTR is not set
789# CONFIG_CRYPTO_GCM is not set
790# CONFIG_CRYPTO_CCM is not set
769# CONFIG_CRYPTO_CRYPTD is not set 791# CONFIG_CRYPTO_CRYPTD is not set
770CONFIG_CRYPTO_DES=y 792CONFIG_CRYPTO_DES=y
771# CONFIG_CRYPTO_FCRYPT is not set 793# CONFIG_CRYPTO_FCRYPT is not set
@@ -780,11 +802,14 @@ CONFIG_CRYPTO_DES=y
780# CONFIG_CRYPTO_KHAZAD is not set 802# CONFIG_CRYPTO_KHAZAD is not set
781# CONFIG_CRYPTO_ANUBIS is not set 803# CONFIG_CRYPTO_ANUBIS is not set
782# CONFIG_CRYPTO_SEED is not set 804# CONFIG_CRYPTO_SEED is not set
805# CONFIG_CRYPTO_SALSA20 is not set
783# CONFIG_CRYPTO_DEFLATE is not set 806# CONFIG_CRYPTO_DEFLATE is not set
784# CONFIG_CRYPTO_MICHAEL_MIC is not set 807# CONFIG_CRYPTO_MICHAEL_MIC is not set
785# CONFIG_CRYPTO_CRC32C is not set 808# CONFIG_CRYPTO_CRC32C is not set
786# CONFIG_CRYPTO_CAMELLIA is not set 809# CONFIG_CRYPTO_CAMELLIA is not set
787# CONFIG_CRYPTO_TEST is not set 810# CONFIG_CRYPTO_TEST is not set
788# CONFIG_CRYPTO_AUTHENC is not set 811# CONFIG_CRYPTO_AUTHENC is not set
812# CONFIG_CRYPTO_LZO is not set
789CONFIG_CRYPTO_HW=y 813CONFIG_CRYPTO_HW=y
814# CONFIG_CRYPTO_DEV_HIFN_795X is not set
790# CONFIG_PPC_CLOCK is not set 815# CONFIG_PPC_CLOCK is not set
diff --git a/arch/powerpc/configs/walnut_defconfig b/arch/powerpc/configs/walnut_defconfig
index e431128e8e9e..3b2689e5002a 100644
--- a/arch/powerpc/configs/walnut_defconfig
+++ b/arch/powerpc/configs/walnut_defconfig
@@ -1,7 +1,7 @@
1# 1#
2# Automatically generated make config: don't edit 2# Automatically generated make config: don't edit
3# Linux kernel version: 2.6.24-rc6 3# Linux kernel version: 2.6.25-rc2
4# Mon Dec 24 11:23:58 2007 4# Fri Feb 15 21:54:12 2008
5# 5#
6# CONFIG_PPC64 is not set 6# CONFIG_PPC64 is not set
7 7
@@ -26,6 +26,7 @@ CONFIG_GENERIC_TIME=y
26CONFIG_GENERIC_TIME_VSYSCALL=y 26CONFIG_GENERIC_TIME_VSYSCALL=y
27CONFIG_GENERIC_CLOCKEVENTS=y 27CONFIG_GENERIC_CLOCKEVENTS=y
28CONFIG_GENERIC_HARDIRQS=y 28CONFIG_GENERIC_HARDIRQS=y
29# CONFIG_HAVE_SETUP_PER_CPU_AREA is not set
29CONFIG_IRQ_PER_CPU=y 30CONFIG_IRQ_PER_CPU=y
30CONFIG_RWSEM_XCHGADD_ALGORITHM=y 31CONFIG_RWSEM_XCHGADD_ALGORITHM=y
31CONFIG_ARCH_HAS_ILOG2_U32=y 32CONFIG_ARCH_HAS_ILOG2_U32=y
@@ -64,17 +65,18 @@ CONFIG_SYSVIPC_SYSCTL=y
64CONFIG_POSIX_MQUEUE=y 65CONFIG_POSIX_MQUEUE=y
65# CONFIG_BSD_PROCESS_ACCT is not set 66# CONFIG_BSD_PROCESS_ACCT is not set
66# CONFIG_TASKSTATS is not set 67# CONFIG_TASKSTATS is not set
67# CONFIG_USER_NS is not set
68# CONFIG_PID_NS is not set
69# CONFIG_AUDIT is not set 68# CONFIG_AUDIT is not set
70# CONFIG_IKCONFIG is not set 69# CONFIG_IKCONFIG is not set
71CONFIG_LOG_BUF_SHIFT=14 70CONFIG_LOG_BUF_SHIFT=14
72# CONFIG_CGROUPS is not set 71# CONFIG_CGROUPS is not set
72CONFIG_GROUP_SCHED=y
73CONFIG_FAIR_GROUP_SCHED=y 73CONFIG_FAIR_GROUP_SCHED=y
74CONFIG_FAIR_USER_SCHED=y 74# CONFIG_RT_GROUP_SCHED is not set
75# CONFIG_FAIR_CGROUP_SCHED is not set 75CONFIG_USER_SCHED=y
76# CONFIG_CGROUP_SCHED is not set
76CONFIG_SYSFS_DEPRECATED=y 77CONFIG_SYSFS_DEPRECATED=y
77# CONFIG_RELAY is not set 78# CONFIG_RELAY is not set
79# CONFIG_NAMESPACES is not set
78CONFIG_BLK_DEV_INITRD=y 80CONFIG_BLK_DEV_INITRD=y
79CONFIG_INITRAMFS_SOURCE="" 81CONFIG_INITRAMFS_SOURCE=""
80# CONFIG_CC_OPTIMIZE_FOR_SIZE is not set 82# CONFIG_CC_OPTIMIZE_FOR_SIZE is not set
@@ -88,11 +90,13 @@ CONFIG_HOTPLUG=y
88CONFIG_PRINTK=y 90CONFIG_PRINTK=y
89CONFIG_BUG=y 91CONFIG_BUG=y
90CONFIG_ELF_CORE=y 92CONFIG_ELF_CORE=y
93CONFIG_COMPAT_BRK=y
91CONFIG_BASE_FULL=y 94CONFIG_BASE_FULL=y
92CONFIG_FUTEX=y 95CONFIG_FUTEX=y
93CONFIG_ANON_INODES=y 96CONFIG_ANON_INODES=y
94CONFIG_EPOLL=y 97CONFIG_EPOLL=y
95CONFIG_SIGNALFD=y 98CONFIG_SIGNALFD=y
99CONFIG_TIMERFD=y
96CONFIG_EVENTFD=y 100CONFIG_EVENTFD=y
97CONFIG_SHMEM=y 101CONFIG_SHMEM=y
98CONFIG_VM_EVENT_COUNTERS=y 102CONFIG_VM_EVENT_COUNTERS=y
@@ -100,6 +104,13 @@ CONFIG_SLUB_DEBUG=y
100# CONFIG_SLAB is not set 104# CONFIG_SLAB is not set
101CONFIG_SLUB=y 105CONFIG_SLUB=y
102# CONFIG_SLOB is not set 106# CONFIG_SLOB is not set
107# CONFIG_PROFILING is not set
108# CONFIG_MARKERS is not set
109CONFIG_HAVE_OPROFILE=y
110# CONFIG_KPROBES is not set
111CONFIG_HAVE_KPROBES=y
112CONFIG_PROC_PAGE_MONITOR=y
113CONFIG_SLABINFO=y
103CONFIG_RT_MUTEXES=y 114CONFIG_RT_MUTEXES=y
104# CONFIG_TINY_SHMEM is not set 115# CONFIG_TINY_SHMEM is not set
105CONFIG_BASE_SMALL=0 116CONFIG_BASE_SMALL=0
@@ -127,13 +138,15 @@ CONFIG_DEFAULT_AS=y
127# CONFIG_DEFAULT_CFQ is not set 138# CONFIG_DEFAULT_CFQ is not set
128# CONFIG_DEFAULT_NOOP is not set 139# CONFIG_DEFAULT_NOOP is not set
129CONFIG_DEFAULT_IOSCHED="anticipatory" 140CONFIG_DEFAULT_IOSCHED="anticipatory"
141CONFIG_CLASSIC_RCU=y
142# CONFIG_PREEMPT_RCU is not set
130# CONFIG_PPC4xx_PCI_EXPRESS is not set 143# CONFIG_PPC4xx_PCI_EXPRESS is not set
131 144
132# 145#
133# Platform support 146# Platform support
134# 147#
135# CONFIG_PPC_MPC52xx is not set 148# CONFIG_PPC_MPC512x is not set
136# CONFIG_PPC_MPC5200 is not set 149# CONFIG_PPC_MPC5121 is not set
137# CONFIG_PPC_CELL is not set 150# CONFIG_PPC_CELL is not set
138# CONFIG_PPC_CELL_NATIVE is not set 151# CONFIG_PPC_CELL_NATIVE is not set
139# CONFIG_PQ2ADS is not set 152# CONFIG_PQ2ADS is not set
@@ -145,6 +158,7 @@ CONFIG_WALNUT=y
145CONFIG_405GP=y 158CONFIG_405GP=y
146CONFIG_IBM405_ERR77=y 159CONFIG_IBM405_ERR77=y
147CONFIG_IBM405_ERR51=y 160CONFIG_IBM405_ERR51=y
161# CONFIG_IPIC is not set
148# CONFIG_MPIC is not set 162# CONFIG_MPIC is not set
149# CONFIG_MPIC_WEIRD is not set 163# CONFIG_MPIC_WEIRD is not set
150# CONFIG_PPC_I8259 is not set 164# CONFIG_PPC_I8259 is not set
@@ -155,8 +169,8 @@ CONFIG_IBM405_ERR51=y
155# CONFIG_PPC_INDIRECT_IO is not set 169# CONFIG_PPC_INDIRECT_IO is not set
156# CONFIG_GENERIC_IOMAP is not set 170# CONFIG_GENERIC_IOMAP is not set
157# CONFIG_CPU_FREQ is not set 171# CONFIG_CPU_FREQ is not set
158# CONFIG_CPM2 is not set
159# CONFIG_FSL_ULI1575 is not set 172# CONFIG_FSL_ULI1575 is not set
173CONFIG_OF_RTC=y
160 174
161# 175#
162# Kernel options 176# Kernel options
@@ -171,13 +185,18 @@ CONFIG_HZ_250=y
171# CONFIG_HZ_300 is not set 185# CONFIG_HZ_300 is not set
172# CONFIG_HZ_1000 is not set 186# CONFIG_HZ_1000 is not set
173CONFIG_HZ=250 187CONFIG_HZ=250
188# CONFIG_SCHED_HRTICK is not set
174CONFIG_PREEMPT_NONE=y 189CONFIG_PREEMPT_NONE=y
175# CONFIG_PREEMPT_VOLUNTARY is not set 190# CONFIG_PREEMPT_VOLUNTARY is not set
176# CONFIG_PREEMPT is not set 191# CONFIG_PREEMPT is not set
192CONFIG_RCU_TRACE=y
177CONFIG_BINFMT_ELF=y 193CONFIG_BINFMT_ELF=y
178# CONFIG_BINFMT_MISC is not set 194# CONFIG_BINFMT_MISC is not set
179# CONFIG_MATH_EMULATION is not set 195# CONFIG_MATH_EMULATION is not set
196# CONFIG_IOMMU_HELPER is not set
180CONFIG_ARCH_ENABLE_MEMORY_HOTPLUG=y 197CONFIG_ARCH_ENABLE_MEMORY_HOTPLUG=y
198CONFIG_ARCH_HAS_WALK_MEMORY=y
199CONFIG_ARCH_ENABLE_MEMORY_HOTREMOVE=y
181CONFIG_ARCH_FLATMEM_ENABLE=y 200CONFIG_ARCH_FLATMEM_ENABLE=y
182CONFIG_ARCH_POPULATES_NODE_MAP=y 201CONFIG_ARCH_POPULATES_NODE_MAP=y
183CONFIG_SELECT_MEMORY_MODEL=y 202CONFIG_SELECT_MEMORY_MODEL=y
@@ -196,11 +215,7 @@ CONFIG_VIRT_TO_BUS=y
196CONFIG_PROC_DEVICETREE=y 215CONFIG_PROC_DEVICETREE=y
197# CONFIG_CMDLINE_BOOL is not set 216# CONFIG_CMDLINE_BOOL is not set
198# CONFIG_PM is not set 217# CONFIG_PM is not set
199CONFIG_SUSPEND_UP_POSSIBLE=y
200CONFIG_HIBERNATION_UP_POSSIBLE=y
201CONFIG_SECCOMP=y 218CONFIG_SECCOMP=y
202CONFIG_WANT_DEVICE_TREE=y
203CONFIG_DEVICE_TREE="walnut.dts"
204CONFIG_ISA_DMA_API=y 219CONFIG_ISA_DMA_API=y
205 220
206# 221#
@@ -300,6 +315,7 @@ CONFIG_DEFAULT_TCP_CONG="cubic"
300# 315#
301# CONFIG_NET_PKTGEN is not set 316# CONFIG_NET_PKTGEN is not set
302# CONFIG_HAMRADIO is not set 317# CONFIG_HAMRADIO is not set
318# CONFIG_CAN is not set
303# CONFIG_IRDA is not set 319# CONFIG_IRDA is not set
304# CONFIG_BT is not set 320# CONFIG_BT is not set
305# CONFIG_AF_RXRPC is not set 321# CONFIG_AF_RXRPC is not set
@@ -336,6 +352,7 @@ CONFIG_MTD=y
336CONFIG_MTD_PARTITIONS=y 352CONFIG_MTD_PARTITIONS=y
337# CONFIG_MTD_REDBOOT_PARTS is not set 353# CONFIG_MTD_REDBOOT_PARTS is not set
338CONFIG_MTD_CMDLINE_PARTS=y 354CONFIG_MTD_CMDLINE_PARTS=y
355CONFIG_MTD_OF_PARTS=y
339 356
340# 357#
341# User Modules And Translation Layers 358# User Modules And Translation Layers
@@ -422,7 +439,7 @@ CONFIG_BLK_DEV=y
422CONFIG_BLK_DEV_RAM=y 439CONFIG_BLK_DEV_RAM=y
423CONFIG_BLK_DEV_RAM_COUNT=16 440CONFIG_BLK_DEV_RAM_COUNT=16
424CONFIG_BLK_DEV_RAM_SIZE=35000 441CONFIG_BLK_DEV_RAM_SIZE=35000
425CONFIG_BLK_DEV_RAM_BLOCKSIZE=1024 442# CONFIG_BLK_DEV_XIP is not set
426# CONFIG_CDROM_PKTCDVD is not set 443# CONFIG_CDROM_PKTCDVD is not set
427# CONFIG_ATA_OVER_ETH is not set 444# CONFIG_ATA_OVER_ETH is not set
428# CONFIG_XILINX_SYSACE is not set 445# CONFIG_XILINX_SYSACE is not set
@@ -431,6 +448,8 @@ CONFIG_MISC_DEVICES=y
431# CONFIG_EEPROM_93CX6 is not set 448# CONFIG_EEPROM_93CX6 is not set
432# CONFIG_SGI_IOC4 is not set 449# CONFIG_SGI_IOC4 is not set
433# CONFIG_TIFM_CORE is not set 450# CONFIG_TIFM_CORE is not set
451# CONFIG_ENCLOSURE_SERVICES is not set
452CONFIG_HAVE_IDE=y
434# CONFIG_IDE is not set 453# CONFIG_IDE is not set
435 454
436# 455#
@@ -459,7 +478,6 @@ CONFIG_NETDEVICES=y
459# CONFIG_EQUALIZER is not set 478# CONFIG_EQUALIZER is not set
460# CONFIG_TUN is not set 479# CONFIG_TUN is not set
461# CONFIG_VETH is not set 480# CONFIG_VETH is not set
462# CONFIG_IP1000 is not set
463# CONFIG_ARCNET is not set 481# CONFIG_ARCNET is not set
464# CONFIG_PHYLIB is not set 482# CONFIG_PHYLIB is not set
465CONFIG_NET_ETHERNET=y 483CONFIG_NET_ETHERNET=y
@@ -488,6 +506,9 @@ CONFIG_NETDEV_1000=y
488# CONFIG_DL2K is not set 506# CONFIG_DL2K is not set
489# CONFIG_E1000 is not set 507# CONFIG_E1000 is not set
490# CONFIG_E1000E is not set 508# CONFIG_E1000E is not set
509# CONFIG_E1000E_ENABLED is not set
510# CONFIG_IP1000 is not set
511# CONFIG_IGB is not set
491# CONFIG_NS83820 is not set 512# CONFIG_NS83820 is not set
492# CONFIG_HAMACHI is not set 513# CONFIG_HAMACHI is not set
493# CONFIG_YELLOWFIN is not set 514# CONFIG_YELLOWFIN is not set
@@ -512,6 +533,7 @@ CONFIG_NETDEV_10000=y
512# CONFIG_NIU is not set 533# CONFIG_NIU is not set
513# CONFIG_MLX4_CORE is not set 534# CONFIG_MLX4_CORE is not set
514# CONFIG_TEHUTI is not set 535# CONFIG_TEHUTI is not set
536# CONFIG_BNX2X is not set
515# CONFIG_TR is not set 537# CONFIG_TR is not set
516 538
517# 539#
@@ -524,7 +546,6 @@ CONFIG_NETDEV_10000=y
524# CONFIG_HIPPI is not set 546# CONFIG_HIPPI is not set
525# CONFIG_PPP is not set 547# CONFIG_PPP is not set
526# CONFIG_SLIP is not set 548# CONFIG_SLIP is not set
527# CONFIG_SHAPER is not set
528# CONFIG_NETCONSOLE is not set 549# CONFIG_NETCONSOLE is not set
529# CONFIG_NETPOLL is not set 550# CONFIG_NETPOLL is not set
530# CONFIG_NET_POLL_CONTROLLER is not set 551# CONFIG_NET_POLL_CONTROLLER is not set
@@ -547,6 +568,7 @@ CONFIG_NETDEV_10000=y
547# 568#
548# CONFIG_VT is not set 569# CONFIG_VT is not set
549# CONFIG_SERIAL_NONSTANDARD is not set 570# CONFIG_SERIAL_NONSTANDARD is not set
571# CONFIG_NOZOMI is not set
550 572
551# 573#
552# Serial drivers 574# Serial drivers
@@ -592,6 +614,7 @@ CONFIG_DEVPORT=y
592# CONFIG_W1 is not set 614# CONFIG_W1 is not set
593# CONFIG_POWER_SUPPLY is not set 615# CONFIG_POWER_SUPPLY is not set
594# CONFIG_HWMON is not set 616# CONFIG_HWMON is not set
617CONFIG_THERMAL=y
595# CONFIG_WATCHDOG is not set 618# CONFIG_WATCHDOG is not set
596 619
597# 620#
@@ -640,12 +663,9 @@ CONFIG_USB_ARCH_HAS_EHCI=y
640# 663#
641# NOTE: USB_STORAGE enables SCSI, and 'SCSI disk support' 664# NOTE: USB_STORAGE enables SCSI, and 'SCSI disk support'
642# 665#
643
644#
645# USB Gadget Support
646#
647# CONFIG_USB_GADGET is not set 666# CONFIG_USB_GADGET is not set
648# CONFIG_MMC is not set 667# CONFIG_MMC is not set
668# CONFIG_MEMSTICK is not set
649# CONFIG_NEW_LEDS is not set 669# CONFIG_NEW_LEDS is not set
650# CONFIG_INFINIBAND is not set 670# CONFIG_INFINIBAND is not set
651# CONFIG_EDAC is not set 671# CONFIG_EDAC is not set
@@ -670,12 +690,10 @@ CONFIG_EXT2_FS=y
670# CONFIG_XFS_FS is not set 690# CONFIG_XFS_FS is not set
671# CONFIG_GFS2_FS is not set 691# CONFIG_GFS2_FS is not set
672# CONFIG_OCFS2_FS is not set 692# CONFIG_OCFS2_FS is not set
673# CONFIG_MINIX_FS is not set 693CONFIG_DNOTIFY=y
674# CONFIG_ROMFS_FS is not set
675CONFIG_INOTIFY=y 694CONFIG_INOTIFY=y
676CONFIG_INOTIFY_USER=y 695CONFIG_INOTIFY_USER=y
677# CONFIG_QUOTA is not set 696# CONFIG_QUOTA is not set
678CONFIG_DNOTIFY=y
679# CONFIG_AUTOFS_FS is not set 697# CONFIG_AUTOFS_FS is not set
680# CONFIG_AUTOFS4_FS is not set 698# CONFIG_AUTOFS4_FS is not set
681# CONFIG_FUSE_FS is not set 699# CONFIG_FUSE_FS is not set
@@ -718,8 +736,10 @@ CONFIG_TMPFS=y
718# CONFIG_JFFS2_FS is not set 736# CONFIG_JFFS2_FS is not set
719CONFIG_CRAMFS=y 737CONFIG_CRAMFS=y
720# CONFIG_VXFS_FS is not set 738# CONFIG_VXFS_FS is not set
739# CONFIG_MINIX_FS is not set
721# CONFIG_HPFS_FS is not set 740# CONFIG_HPFS_FS is not set
722# CONFIG_QNX4FS_FS is not set 741# CONFIG_QNX4FS_FS is not set
742# CONFIG_ROMFS_FS is not set
723# CONFIG_SYSV_FS is not set 743# CONFIG_SYSV_FS is not set
724# CONFIG_UFS_FS is not set 744# CONFIG_UFS_FS is not set
725CONFIG_NETWORK_FILESYSTEMS=y 745CONFIG_NETWORK_FILESYSTEMS=y
@@ -750,7 +770,6 @@ CONFIG_SUNRPC=y
750CONFIG_MSDOS_PARTITION=y 770CONFIG_MSDOS_PARTITION=y
751# CONFIG_NLS is not set 771# CONFIG_NLS is not set
752# CONFIG_DLM is not set 772# CONFIG_DLM is not set
753# CONFIG_UCC_SLOW is not set
754 773
755# 774#
756# Library routines 775# Library routines
@@ -767,7 +786,6 @@ CONFIG_PLIST=y
767CONFIG_HAS_IOMEM=y 786CONFIG_HAS_IOMEM=y
768CONFIG_HAS_IOPORT=y 787CONFIG_HAS_IOPORT=y
769CONFIG_HAS_DMA=y 788CONFIG_HAS_DMA=y
770# CONFIG_INSTRUMENTATION is not set
771 789
772# 790#
773# Kernel hacking 791# Kernel hacking
@@ -777,7 +795,7 @@ CONFIG_ENABLE_WARN_DEPRECATED=y
777CONFIG_ENABLE_MUST_CHECK=y 795CONFIG_ENABLE_MUST_CHECK=y
778CONFIG_MAGIC_SYSRQ=y 796CONFIG_MAGIC_SYSRQ=y
779# CONFIG_UNUSED_SYMBOLS is not set 797# CONFIG_UNUSED_SYMBOLS is not set
780# CONFIG_DEBUG_FS is not set 798CONFIG_DEBUG_FS=y
781# CONFIG_HEADERS_CHECK is not set 799# CONFIG_HEADERS_CHECK is not set
782CONFIG_DEBUG_KERNEL=y 800CONFIG_DEBUG_KERNEL=y
783# CONFIG_DEBUG_SHIRQ is not set 801# CONFIG_DEBUG_SHIRQ is not set
@@ -786,6 +804,7 @@ CONFIG_SCHED_DEBUG=y
786# CONFIG_SCHEDSTATS is not set 804# CONFIG_SCHEDSTATS is not set
787# CONFIG_TIMER_STATS is not set 805# CONFIG_TIMER_STATS is not set
788# CONFIG_SLUB_DEBUG_ON is not set 806# CONFIG_SLUB_DEBUG_ON is not set
807# CONFIG_SLUB_STATS is not set
789# CONFIG_DEBUG_RT_MUTEXES is not set 808# CONFIG_DEBUG_RT_MUTEXES is not set
790# CONFIG_RT_MUTEX_TESTER is not set 809# CONFIG_RT_MUTEX_TESTER is not set
791# CONFIG_DEBUG_SPINLOCK is not set 810# CONFIG_DEBUG_SPINLOCK is not set
@@ -798,15 +817,16 @@ CONFIG_DEBUG_BUGVERBOSE=y
798# CONFIG_DEBUG_VM is not set 817# CONFIG_DEBUG_VM is not set
799# CONFIG_DEBUG_LIST is not set 818# CONFIG_DEBUG_LIST is not set
800# CONFIG_DEBUG_SG is not set 819# CONFIG_DEBUG_SG is not set
801CONFIG_FORCED_INLINING=y
802# CONFIG_BOOT_PRINTK_DELAY is not set 820# CONFIG_BOOT_PRINTK_DELAY is not set
803# CONFIG_RCU_TORTURE_TEST is not set 821# CONFIG_RCU_TORTURE_TEST is not set
822# CONFIG_BACKTRACE_SELF_TEST is not set
804# CONFIG_FAULT_INJECTION is not set 823# CONFIG_FAULT_INJECTION is not set
805# CONFIG_SAMPLES is not set 824# CONFIG_SAMPLES is not set
806# CONFIG_DEBUG_STACKOVERFLOW is not set 825# CONFIG_DEBUG_STACKOVERFLOW is not set
807# CONFIG_DEBUG_STACK_USAGE is not set 826# CONFIG_DEBUG_STACK_USAGE is not set
808# CONFIG_DEBUG_PAGEALLOC is not set 827# CONFIG_DEBUG_PAGEALLOC is not set
809# CONFIG_DEBUGGER is not set 828# CONFIG_DEBUGGER is not set
829# CONFIG_VIRQ_DEBUG is not set
810# CONFIG_BDI_SWITCH is not set 830# CONFIG_BDI_SWITCH is not set
811# CONFIG_PPC_EARLY_DEBUG is not set 831# CONFIG_PPC_EARLY_DEBUG is not set
812 832
@@ -819,6 +839,7 @@ CONFIG_FORCED_INLINING=y
819CONFIG_CRYPTO=y 839CONFIG_CRYPTO=y
820CONFIG_CRYPTO_ALGAPI=y 840CONFIG_CRYPTO_ALGAPI=y
821CONFIG_CRYPTO_BLKCIPHER=y 841CONFIG_CRYPTO_BLKCIPHER=y
842# CONFIG_CRYPTO_SEQIV is not set
822CONFIG_CRYPTO_MANAGER=y 843CONFIG_CRYPTO_MANAGER=y
823# CONFIG_CRYPTO_HMAC is not set 844# CONFIG_CRYPTO_HMAC is not set
824# CONFIG_CRYPTO_XCBC is not set 845# CONFIG_CRYPTO_XCBC is not set
@@ -836,6 +857,9 @@ CONFIG_CRYPTO_CBC=y
836CONFIG_CRYPTO_PCBC=y 857CONFIG_CRYPTO_PCBC=y
837# CONFIG_CRYPTO_LRW is not set 858# CONFIG_CRYPTO_LRW is not set
838# CONFIG_CRYPTO_XTS is not set 859# CONFIG_CRYPTO_XTS is not set
860# CONFIG_CRYPTO_CTR is not set
861# CONFIG_CRYPTO_GCM is not set
862# CONFIG_CRYPTO_CCM is not set
839# CONFIG_CRYPTO_CRYPTD is not set 863# CONFIG_CRYPTO_CRYPTD is not set
840CONFIG_CRYPTO_DES=y 864CONFIG_CRYPTO_DES=y
841# CONFIG_CRYPTO_FCRYPT is not set 865# CONFIG_CRYPTO_FCRYPT is not set
@@ -850,11 +874,14 @@ CONFIG_CRYPTO_DES=y
850# CONFIG_CRYPTO_KHAZAD is not set 874# CONFIG_CRYPTO_KHAZAD is not set
851# CONFIG_CRYPTO_ANUBIS is not set 875# CONFIG_CRYPTO_ANUBIS is not set
852# CONFIG_CRYPTO_SEED is not set 876# CONFIG_CRYPTO_SEED is not set
877# CONFIG_CRYPTO_SALSA20 is not set
853# CONFIG_CRYPTO_DEFLATE is not set 878# CONFIG_CRYPTO_DEFLATE is not set
854# CONFIG_CRYPTO_MICHAEL_MIC is not set 879# CONFIG_CRYPTO_MICHAEL_MIC is not set
855# CONFIG_CRYPTO_CRC32C is not set 880# CONFIG_CRYPTO_CRC32C is not set
856# CONFIG_CRYPTO_CAMELLIA is not set 881# CONFIG_CRYPTO_CAMELLIA is not set
857# CONFIG_CRYPTO_TEST is not set 882# CONFIG_CRYPTO_TEST is not set
858# CONFIG_CRYPTO_AUTHENC is not set 883# CONFIG_CRYPTO_AUTHENC is not set
884# CONFIG_CRYPTO_LZO is not set
859CONFIG_CRYPTO_HW=y 885CONFIG_CRYPTO_HW=y
886# CONFIG_CRYPTO_DEV_HIFN_795X is not set
860# CONFIG_PPC_CLOCK is not set 887# CONFIG_PPC_CLOCK is not set
diff --git a/arch/powerpc/configs/warp_defconfig b/arch/powerpc/configs/warp_defconfig
index 312557b5df53..2313c3e8ef61 100644
--- a/arch/powerpc/configs/warp_defconfig
+++ b/arch/powerpc/configs/warp_defconfig
@@ -1,7 +1,7 @@
1# 1#
2# Automatically generated make config: don't edit 2# Automatically generated make config: don't edit
3# Linux kernel version: 2.6.24-rc6 3# Linux kernel version: 2.6.25-rc2
4# Tue Jan 8 12:23:23 2008 4# Fri Feb 15 21:54:43 2008
5# 5#
6# CONFIG_PPC64 is not set 6# CONFIG_PPC64 is not set
7 7
@@ -30,6 +30,7 @@ CONFIG_GENERIC_TIME=y
30CONFIG_GENERIC_TIME_VSYSCALL=y 30CONFIG_GENERIC_TIME_VSYSCALL=y
31CONFIG_GENERIC_CLOCKEVENTS=y 31CONFIG_GENERIC_CLOCKEVENTS=y
32CONFIG_GENERIC_HARDIRQS=y 32CONFIG_GENERIC_HARDIRQS=y
33# CONFIG_HAVE_SETUP_PER_CPU_AREA is not set
33CONFIG_IRQ_PER_CPU=y 34CONFIG_IRQ_PER_CPU=y
34CONFIG_RWSEM_XCHGADD_ALGORITHM=y 35CONFIG_RWSEM_XCHGADD_ALGORITHM=y
35CONFIG_ARCH_HAS_ILOG2_U32=y 36CONFIG_ARCH_HAS_ILOG2_U32=y
@@ -68,17 +69,18 @@ CONFIG_SYSVIPC_SYSCTL=y
68# CONFIG_POSIX_MQUEUE is not set 69# CONFIG_POSIX_MQUEUE is not set
69# CONFIG_BSD_PROCESS_ACCT is not set 70# CONFIG_BSD_PROCESS_ACCT is not set
70# CONFIG_TASKSTATS is not set 71# CONFIG_TASKSTATS is not set
71# CONFIG_USER_NS is not set
72# CONFIG_PID_NS is not set
73# CONFIG_AUDIT is not set 72# CONFIG_AUDIT is not set
74# CONFIG_IKCONFIG is not set 73# CONFIG_IKCONFIG is not set
75CONFIG_LOG_BUF_SHIFT=14 74CONFIG_LOG_BUF_SHIFT=14
76# CONFIG_CGROUPS is not set 75# CONFIG_CGROUPS is not set
76CONFIG_GROUP_SCHED=y
77CONFIG_FAIR_GROUP_SCHED=y 77CONFIG_FAIR_GROUP_SCHED=y
78CONFIG_FAIR_USER_SCHED=y 78# CONFIG_RT_GROUP_SCHED is not set
79# CONFIG_FAIR_CGROUP_SCHED is not set 79CONFIG_USER_SCHED=y
80# CONFIG_CGROUP_SCHED is not set
80CONFIG_SYSFS_DEPRECATED=y 81CONFIG_SYSFS_DEPRECATED=y
81# CONFIG_RELAY is not set 82# CONFIG_RELAY is not set
83# CONFIG_NAMESPACES is not set
82CONFIG_BLK_DEV_INITRD=y 84CONFIG_BLK_DEV_INITRD=y
83CONFIG_INITRAMFS_SOURCE="" 85CONFIG_INITRAMFS_SOURCE=""
84# CONFIG_CC_OPTIMIZE_FOR_SIZE is not set 86# CONFIG_CC_OPTIMIZE_FOR_SIZE is not set
@@ -92,17 +94,26 @@ CONFIG_KALLSYMS=y
92CONFIG_PRINTK=y 94CONFIG_PRINTK=y
93CONFIG_BUG=y 95CONFIG_BUG=y
94CONFIG_ELF_CORE=y 96CONFIG_ELF_CORE=y
97CONFIG_COMPAT_BRK=y
95CONFIG_BASE_FULL=y 98CONFIG_BASE_FULL=y
96CONFIG_FUTEX=y 99CONFIG_FUTEX=y
97CONFIG_ANON_INODES=y 100CONFIG_ANON_INODES=y
98CONFIG_EPOLL=y 101CONFIG_EPOLL=y
99CONFIG_SIGNALFD=y 102CONFIG_SIGNALFD=y
103CONFIG_TIMERFD=y
100CONFIG_EVENTFD=y 104CONFIG_EVENTFD=y
101CONFIG_SHMEM=y 105CONFIG_SHMEM=y
102CONFIG_VM_EVENT_COUNTERS=y 106CONFIG_VM_EVENT_COUNTERS=y
103CONFIG_SLAB=y 107CONFIG_SLAB=y
104# CONFIG_SLUB is not set 108# CONFIG_SLUB is not set
105# CONFIG_SLOB is not set 109# CONFIG_SLOB is not set
110# CONFIG_PROFILING is not set
111# CONFIG_MARKERS is not set
112CONFIG_HAVE_OPROFILE=y
113# CONFIG_KPROBES is not set
114CONFIG_HAVE_KPROBES=y
115CONFIG_PROC_PAGE_MONITOR=y
116CONFIG_SLABINFO=y
106CONFIG_RT_MUTEXES=y 117CONFIG_RT_MUTEXES=y
107# CONFIG_TINY_SHMEM is not set 118# CONFIG_TINY_SHMEM is not set
108CONFIG_BASE_SMALL=0 119CONFIG_BASE_SMALL=0
@@ -130,12 +141,14 @@ CONFIG_DEFAULT_AS=y
130# CONFIG_DEFAULT_CFQ is not set 141# CONFIG_DEFAULT_CFQ is not set
131# CONFIG_DEFAULT_NOOP is not set 142# CONFIG_DEFAULT_NOOP is not set
132CONFIG_DEFAULT_IOSCHED="anticipatory" 143CONFIG_DEFAULT_IOSCHED="anticipatory"
144CONFIG_CLASSIC_RCU=y
145# CONFIG_PREEMPT_RCU is not set
133 146
134# 147#
135# Platform support 148# Platform support
136# 149#
137# CONFIG_PPC_MPC52xx is not set 150# CONFIG_PPC_MPC512x is not set
138# CONFIG_PPC_MPC5200 is not set 151# CONFIG_PPC_MPC5121 is not set
139# CONFIG_PPC_CELL is not set 152# CONFIG_PPC_CELL is not set
140# CONFIG_PPC_CELL_NATIVE is not set 153# CONFIG_PPC_CELL_NATIVE is not set
141# CONFIG_PQ2ADS is not set 154# CONFIG_PQ2ADS is not set
@@ -148,6 +161,7 @@ CONFIG_DEFAULT_IOSCHED="anticipatory"
148CONFIG_WARP=y 161CONFIG_WARP=y
149CONFIG_440EP=y 162CONFIG_440EP=y
150CONFIG_IBM440EP_ERR42=y 163CONFIG_IBM440EP_ERR42=y
164# CONFIG_IPIC is not set
151# CONFIG_MPIC is not set 165# CONFIG_MPIC is not set
152# CONFIG_MPIC_WEIRD is not set 166# CONFIG_MPIC_WEIRD is not set
153# CONFIG_PPC_I8259 is not set 167# CONFIG_PPC_I8259 is not set
@@ -158,7 +172,6 @@ CONFIG_IBM440EP_ERR42=y
158# CONFIG_PPC_INDIRECT_IO is not set 172# CONFIG_PPC_INDIRECT_IO is not set
159# CONFIG_GENERIC_IOMAP is not set 173# CONFIG_GENERIC_IOMAP is not set
160# CONFIG_CPU_FREQ is not set 174# CONFIG_CPU_FREQ is not set
161# CONFIG_CPM2 is not set
162# CONFIG_FSL_ULI1575 is not set 175# CONFIG_FSL_ULI1575 is not set
163 176
164# 177#
@@ -174,13 +187,18 @@ CONFIG_GENERIC_CLOCKEVENTS_BUILD=y
174# CONFIG_HZ_300 is not set 187# CONFIG_HZ_300 is not set
175CONFIG_HZ_1000=y 188CONFIG_HZ_1000=y
176CONFIG_HZ=1000 189CONFIG_HZ=1000
190# CONFIG_SCHED_HRTICK is not set
177CONFIG_PREEMPT_NONE=y 191CONFIG_PREEMPT_NONE=y
178# CONFIG_PREEMPT_VOLUNTARY is not set 192# CONFIG_PREEMPT_VOLUNTARY is not set
179# CONFIG_PREEMPT is not set 193# CONFIG_PREEMPT is not set
194CONFIG_RCU_TRACE=y
180CONFIG_BINFMT_ELF=y 195CONFIG_BINFMT_ELF=y
181# CONFIG_BINFMT_MISC is not set 196# CONFIG_BINFMT_MISC is not set
182# CONFIG_MATH_EMULATION is not set 197# CONFIG_MATH_EMULATION is not set
198# CONFIG_IOMMU_HELPER is not set
183CONFIG_ARCH_ENABLE_MEMORY_HOTPLUG=y 199CONFIG_ARCH_ENABLE_MEMORY_HOTPLUG=y
200CONFIG_ARCH_HAS_WALK_MEMORY=y
201CONFIG_ARCH_ENABLE_MEMORY_HOTREMOVE=y
184CONFIG_ARCH_FLATMEM_ENABLE=y 202CONFIG_ARCH_FLATMEM_ENABLE=y
185CONFIG_ARCH_POPULATES_NODE_MAP=y 203CONFIG_ARCH_POPULATES_NODE_MAP=y
186CONFIG_SELECT_MEMORY_MODEL=y 204CONFIG_SELECT_MEMORY_MODEL=y
@@ -200,8 +218,6 @@ CONFIG_PROC_DEVICETREE=y
200CONFIG_CMDLINE_BOOL=y 218CONFIG_CMDLINE_BOOL=y
201CONFIG_CMDLINE="ip=on" 219CONFIG_CMDLINE="ip=on"
202CONFIG_SECCOMP=y 220CONFIG_SECCOMP=y
203CONFIG_WANT_DEVICE_TREE=y
204CONFIG_DEVICE_TREE="warp.dts"
205CONFIG_ISA_DMA_API=y 221CONFIG_ISA_DMA_API=y
206 222
207# 223#
@@ -244,6 +260,7 @@ CONFIG_XFRM=y
244# CONFIG_XFRM_USER is not set 260# CONFIG_XFRM_USER is not set
245# CONFIG_XFRM_SUB_POLICY is not set 261# CONFIG_XFRM_SUB_POLICY is not set
246# CONFIG_XFRM_MIGRATE is not set 262# CONFIG_XFRM_MIGRATE is not set
263# CONFIG_XFRM_STATISTICS is not set
247# CONFIG_NET_KEY is not set 264# CONFIG_NET_KEY is not set
248CONFIG_INET=y 265CONFIG_INET=y
249# CONFIG_IP_MULTICAST is not set 266# CONFIG_IP_MULTICAST is not set
@@ -279,12 +296,13 @@ CONFIG_DEFAULT_TCP_CONG="cubic"
279# CONFIG_NETWORK_SECMARK is not set 296# CONFIG_NETWORK_SECMARK is not set
280CONFIG_NETFILTER=y 297CONFIG_NETFILTER=y
281# CONFIG_NETFILTER_DEBUG is not set 298# CONFIG_NETFILTER_DEBUG is not set
299CONFIG_NETFILTER_ADVANCED=y
282 300
283# 301#
284# Core Netfilter Configuration 302# Core Netfilter Configuration
285# 303#
286# CONFIG_NETFILTER_NETLINK is not set 304# CONFIG_NETFILTER_NETLINK_QUEUE is not set
287# CONFIG_NF_CONNTRACK_ENABLED is not set 305# CONFIG_NETFILTER_NETLINK_LOG is not set
288# CONFIG_NF_CONNTRACK is not set 306# CONFIG_NF_CONNTRACK is not set
289# CONFIG_NETFILTER_XTABLES is not set 307# CONFIG_NETFILTER_XTABLES is not set
290 308
@@ -315,6 +333,7 @@ CONFIG_VLAN_8021Q=y
315# 333#
316# CONFIG_NET_PKTGEN is not set 334# CONFIG_NET_PKTGEN is not set
317# CONFIG_HAMRADIO is not set 335# CONFIG_HAMRADIO is not set
336# CONFIG_CAN is not set
318# CONFIG_IRDA is not set 337# CONFIG_IRDA is not set
319# CONFIG_BT is not set 338# CONFIG_BT is not set
320# CONFIG_AF_RXRPC is not set 339# CONFIG_AF_RXRPC is not set
@@ -348,6 +367,7 @@ CONFIG_MTD=y
348CONFIG_MTD_PARTITIONS=y 367CONFIG_MTD_PARTITIONS=y
349# CONFIG_MTD_REDBOOT_PARTS is not set 368# CONFIG_MTD_REDBOOT_PARTS is not set
350# CONFIG_MTD_CMDLINE_PARTS is not set 369# CONFIG_MTD_CMDLINE_PARTS is not set
370CONFIG_MTD_OF_PARTS=y
351 371
352# 372#
353# User Modules And Translation Layers 373# User Modules And Translation Layers
@@ -414,11 +434,11 @@ CONFIG_MTD_NAND=y
414CONFIG_MTD_NAND_ECC_SMC=y 434CONFIG_MTD_NAND_ECC_SMC=y
415# CONFIG_MTD_NAND_MUSEUM_IDS is not set 435# CONFIG_MTD_NAND_MUSEUM_IDS is not set
416CONFIG_MTD_NAND_IDS=y 436CONFIG_MTD_NAND_IDS=y
417CONFIG_MTD_NAND_NDFC=y
418# CONFIG_MTD_NAND_DISKONCHIP is not set 437# CONFIG_MTD_NAND_DISKONCHIP is not set
419# CONFIG_MTD_NAND_NANDSIM is not set 438# CONFIG_MTD_NAND_NANDSIM is not set
420# CONFIG_MTD_NAND_PLATFORM is not set 439# CONFIG_MTD_NAND_PLATFORM is not set
421# CONFIG_MTD_ALAUDA is not set 440# CONFIG_MTD_ALAUDA is not set
441# CONFIG_MTD_NAND_FSL_ELBC is not set
422# CONFIG_MTD_ONENAND is not set 442# CONFIG_MTD_ONENAND is not set
423 443
424# 444#
@@ -436,12 +456,14 @@ CONFIG_BLK_DEV=y
436CONFIG_BLK_DEV_RAM=y 456CONFIG_BLK_DEV_RAM=y
437CONFIG_BLK_DEV_RAM_COUNT=16 457CONFIG_BLK_DEV_RAM_COUNT=16
438CONFIG_BLK_DEV_RAM_SIZE=4096 458CONFIG_BLK_DEV_RAM_SIZE=4096
439CONFIG_BLK_DEV_RAM_BLOCKSIZE=1024 459# CONFIG_BLK_DEV_XIP is not set
440# CONFIG_CDROM_PKTCDVD is not set 460# CONFIG_CDROM_PKTCDVD is not set
441# CONFIG_ATA_OVER_ETH is not set 461# CONFIG_ATA_OVER_ETH is not set
442# CONFIG_XILINX_SYSACE is not set 462# CONFIG_XILINX_SYSACE is not set
443CONFIG_MISC_DEVICES=y 463CONFIG_MISC_DEVICES=y
444# CONFIG_EEPROM_93CX6 is not set 464# CONFIG_EEPROM_93CX6 is not set
465# CONFIG_ENCLOSURE_SERVICES is not set
466CONFIG_HAVE_IDE=y
445# CONFIG_IDE is not set 467# CONFIG_IDE is not set
446 468
447# 469#
@@ -471,7 +493,7 @@ CONFIG_BLK_DEV_SD=y
471# CONFIG_SCSI_CONSTANTS is not set 493# CONFIG_SCSI_CONSTANTS is not set
472# CONFIG_SCSI_LOGGING is not set 494# CONFIG_SCSI_LOGGING is not set
473# CONFIG_SCSI_SCAN_ASYNC is not set 495# CONFIG_SCSI_SCAN_ASYNC is not set
474# CONFIG_SCSI_WAIT_SCAN is not set 496CONFIG_SCSI_WAIT_SCAN=m
475 497
476# 498#
477# SCSI Transports 499# SCSI Transports
@@ -528,7 +550,6 @@ CONFIG_IBM_NEW_EMAC_ZMII=y
528# CONFIG_WAN is not set 550# CONFIG_WAN is not set
529# CONFIG_PPP is not set 551# CONFIG_PPP is not set
530# CONFIG_SLIP is not set 552# CONFIG_SLIP is not set
531# CONFIG_SHAPER is not set
532# CONFIG_NETCONSOLE is not set 553# CONFIG_NETCONSOLE is not set
533# CONFIG_NETPOLL is not set 554# CONFIG_NETPOLL is not set
534# CONFIG_NET_POLL_CONTROLLER is not set 555# CONFIG_NET_POLL_CONTROLLER is not set
@@ -596,7 +617,6 @@ CONFIG_I2C_BOARDINFO=y
596# 617#
597# I2C Hardware Bus support 618# I2C Hardware Bus support
598# 619#
599CONFIG_I2C_IBM_IIC=y
600# CONFIG_I2C_MPC is not set 620# CONFIG_I2C_MPC is not set
601# CONFIG_I2C_OCORES is not set 621# CONFIG_I2C_OCORES is not set
602# CONFIG_I2C_PARPORT_LIGHT is not set 622# CONFIG_I2C_PARPORT_LIGHT is not set
@@ -608,14 +628,12 @@ CONFIG_I2C_IBM_IIC=y
608# 628#
609# Miscellaneous I2C Chip support 629# Miscellaneous I2C Chip support
610# 630#
611# CONFIG_SENSORS_DS1337 is not set
612# CONFIG_SENSORS_DS1374 is not set
613# CONFIG_DS1682 is not set 631# CONFIG_DS1682 is not set
614CONFIG_SENSORS_EEPROM=y 632CONFIG_SENSORS_EEPROM=y
615# CONFIG_SENSORS_PCF8574 is not set 633# CONFIG_SENSORS_PCF8574 is not set
616# CONFIG_SENSORS_PCA9539 is not set 634# CONFIG_PCF8575 is not set
617# CONFIG_SENSORS_PCF8591 is not set 635# CONFIG_SENSORS_PCF8591 is not set
618# CONFIG_SENSORS_M41T00 is not set 636# CONFIG_TPS65010 is not set
619# CONFIG_SENSORS_MAX6875 is not set 637# CONFIG_SENSORS_MAX6875 is not set
620# CONFIG_SENSORS_TSL2550 is not set 638# CONFIG_SENSORS_TSL2550 is not set
621# CONFIG_I2C_DEBUG_CORE is not set 639# CONFIG_I2C_DEBUG_CORE is not set
@@ -632,7 +650,6 @@ CONFIG_SENSORS_EEPROM=y
632# CONFIG_POWER_SUPPLY is not set 650# CONFIG_POWER_SUPPLY is not set
633CONFIG_HWMON=y 651CONFIG_HWMON=y
634# CONFIG_HWMON_VID is not set 652# CONFIG_HWMON_VID is not set
635CONFIG_SENSORS_AD7414=y
636# CONFIG_SENSORS_AD7418 is not set 653# CONFIG_SENSORS_AD7418 is not set
637# CONFIG_SENSORS_ADM1021 is not set 654# CONFIG_SENSORS_ADM1021 is not set
638# CONFIG_SENSORS_ADM1025 is not set 655# CONFIG_SENSORS_ADM1025 is not set
@@ -668,6 +685,7 @@ CONFIG_SENSORS_AD7414=y
668# CONFIG_SENSORS_SMSC47M1 is not set 685# CONFIG_SENSORS_SMSC47M1 is not set
669# CONFIG_SENSORS_SMSC47M192 is not set 686# CONFIG_SENSORS_SMSC47M192 is not set
670# CONFIG_SENSORS_SMSC47B397 is not set 687# CONFIG_SENSORS_SMSC47B397 is not set
688# CONFIG_SENSORS_ADS7828 is not set
671# CONFIG_SENSORS_THMC50 is not set 689# CONFIG_SENSORS_THMC50 is not set
672# CONFIG_SENSORS_VT1211 is not set 690# CONFIG_SENSORS_VT1211 is not set
673# CONFIG_SENSORS_W83781D is not set 691# CONFIG_SENSORS_W83781D is not set
@@ -675,9 +693,11 @@ CONFIG_SENSORS_AD7414=y
675# CONFIG_SENSORS_W83792D is not set 693# CONFIG_SENSORS_W83792D is not set
676# CONFIG_SENSORS_W83793 is not set 694# CONFIG_SENSORS_W83793 is not set
677# CONFIG_SENSORS_W83L785TS is not set 695# CONFIG_SENSORS_W83L785TS is not set
696# CONFIG_SENSORS_W83L786NG is not set
678# CONFIG_SENSORS_W83627HF is not set 697# CONFIG_SENSORS_W83627HF is not set
679# CONFIG_SENSORS_W83627EHF is not set 698# CONFIG_SENSORS_W83627EHF is not set
680# CONFIG_HWMON_DEBUG_CHIP is not set 699# CONFIG_HWMON_DEBUG_CHIP is not set
700CONFIG_THERMAL=y
681# CONFIG_WATCHDOG is not set 701# CONFIG_WATCHDOG is not set
682 702
683# 703#
@@ -721,6 +741,7 @@ CONFIG_USB_ARCH_HAS_OHCI=y
721# CONFIG_USB_ARCH_HAS_EHCI is not set 741# CONFIG_USB_ARCH_HAS_EHCI is not set
722CONFIG_USB=y 742CONFIG_USB=y
723# CONFIG_USB_DEBUG is not set 743# CONFIG_USB_DEBUG is not set
744# CONFIG_USB_ANNOUNCE_NEW_DEVICES is not set
724 745
725# 746#
726# Miscellaneous USB options 747# Miscellaneous USB options
@@ -781,10 +802,6 @@ CONFIG_USB_MON=y
781# 802#
782# USB port drivers 803# USB port drivers
783# 804#
784
785#
786# USB Serial Converter support
787#
788# CONFIG_USB_SERIAL is not set 805# CONFIG_USB_SERIAL is not set
789 806
790# 807#
@@ -808,14 +825,6 @@ CONFIG_USB_MON=y
808# CONFIG_USB_LD is not set 825# CONFIG_USB_LD is not set
809# CONFIG_USB_TRANCEVIBRATOR is not set 826# CONFIG_USB_TRANCEVIBRATOR is not set
810# CONFIG_USB_IOWARRIOR is not set 827# CONFIG_USB_IOWARRIOR is not set
811
812#
813# USB DSL modem support
814#
815
816#
817# USB Gadget Support
818#
819# CONFIG_USB_GADGET is not set 828# CONFIG_USB_GADGET is not set
820CONFIG_MMC=m 829CONFIG_MMC=m
821# CONFIG_MMC_DEBUG is not set 830# CONFIG_MMC_DEBUG is not set
@@ -832,6 +841,7 @@ CONFIG_MMC_BLOCK_BOUNCE=y
832# MMC/SD Host Controller Drivers 841# MMC/SD Host Controller Drivers
833# 842#
834# CONFIG_MMC_WBSD is not set 843# CONFIG_MMC_WBSD is not set
844# CONFIG_MEMSTICK is not set
835# CONFIG_NEW_LEDS is not set 845# CONFIG_NEW_LEDS is not set
836# CONFIG_EDAC is not set 846# CONFIG_EDAC is not set
837# CONFIG_RTC_CLASS is not set 847# CONFIG_RTC_CLASS is not set
@@ -855,12 +865,10 @@ CONFIG_EXT2_FS=y
855# CONFIG_XFS_FS is not set 865# CONFIG_XFS_FS is not set
856# CONFIG_GFS2_FS is not set 866# CONFIG_GFS2_FS is not set
857# CONFIG_OCFS2_FS is not set 867# CONFIG_OCFS2_FS is not set
858# CONFIG_MINIX_FS is not set 868CONFIG_DNOTIFY=y
859# CONFIG_ROMFS_FS is not set
860CONFIG_INOTIFY=y 869CONFIG_INOTIFY=y
861CONFIG_INOTIFY_USER=y 870CONFIG_INOTIFY_USER=y
862# CONFIG_QUOTA is not set 871# CONFIG_QUOTA is not set
863CONFIG_DNOTIFY=y
864# CONFIG_AUTOFS_FS is not set 872# CONFIG_AUTOFS_FS is not set
865# CONFIG_AUTOFS4_FS is not set 873# CONFIG_AUTOFS4_FS is not set
866# CONFIG_FUSE_FS is not set 874# CONFIG_FUSE_FS is not set
@@ -915,8 +923,10 @@ CONFIG_JFFS2_RTIME=y
915# CONFIG_JFFS2_RUBIN is not set 923# CONFIG_JFFS2_RUBIN is not set
916CONFIG_CRAMFS=y 924CONFIG_CRAMFS=y
917# CONFIG_VXFS_FS is not set 925# CONFIG_VXFS_FS is not set
926# CONFIG_MINIX_FS is not set
918# CONFIG_HPFS_FS is not set 927# CONFIG_HPFS_FS is not set
919# CONFIG_QNX4FS_FS is not set 928# CONFIG_QNX4FS_FS is not set
929# CONFIG_ROMFS_FS is not set
920# CONFIG_SYSV_FS is not set 930# CONFIG_SYSV_FS is not set
921# CONFIG_UFS_FS is not set 931# CONFIG_UFS_FS is not set
922CONFIG_NETWORK_FILESYSTEMS=y 932CONFIG_NETWORK_FILESYSTEMS=y
@@ -986,7 +996,6 @@ CONFIG_NLS_ISO8859_15=y
986# CONFIG_NLS_KOI8_U is not set 996# CONFIG_NLS_KOI8_U is not set
987CONFIG_NLS_UTF8=y 997CONFIG_NLS_UTF8=y
988# CONFIG_DLM is not set 998# CONFIG_DLM is not set
989# CONFIG_UCC_SLOW is not set
990 999
991# 1000#
992# Library routines 1001# Library routines
@@ -1004,7 +1013,6 @@ CONFIG_PLIST=y
1004CONFIG_HAS_IOMEM=y 1013CONFIG_HAS_IOMEM=y
1005CONFIG_HAS_IOPORT=y 1014CONFIG_HAS_IOPORT=y
1006CONFIG_HAS_DMA=y 1015CONFIG_HAS_DMA=y
1007# CONFIG_INSTRUMENTATION is not set
1008 1016
1009# 1017#
1010# Kernel hacking 1018# Kernel hacking
@@ -1014,7 +1022,7 @@ CONFIG_ENABLE_WARN_DEPRECATED=y
1014CONFIG_ENABLE_MUST_CHECK=y 1022CONFIG_ENABLE_MUST_CHECK=y
1015CONFIG_MAGIC_SYSRQ=y 1023CONFIG_MAGIC_SYSRQ=y
1016# CONFIG_UNUSED_SYMBOLS is not set 1024# CONFIG_UNUSED_SYMBOLS is not set
1017# CONFIG_DEBUG_FS is not set 1025CONFIG_DEBUG_FS=y
1018# CONFIG_HEADERS_CHECK is not set 1026# CONFIG_HEADERS_CHECK is not set
1019CONFIG_DEBUG_KERNEL=y 1027CONFIG_DEBUG_KERNEL=y
1020# CONFIG_DEBUG_SHIRQ is not set 1028# CONFIG_DEBUG_SHIRQ is not set
@@ -1035,15 +1043,16 @@ CONFIG_DEBUG_INFO=y
1035# CONFIG_DEBUG_VM is not set 1043# CONFIG_DEBUG_VM is not set
1036# CONFIG_DEBUG_LIST is not set 1044# CONFIG_DEBUG_LIST is not set
1037# CONFIG_DEBUG_SG is not set 1045# CONFIG_DEBUG_SG is not set
1038CONFIG_FORCED_INLINING=y
1039# CONFIG_BOOT_PRINTK_DELAY is not set 1046# CONFIG_BOOT_PRINTK_DELAY is not set
1040# CONFIG_RCU_TORTURE_TEST is not set 1047# CONFIG_RCU_TORTURE_TEST is not set
1048# CONFIG_BACKTRACE_SELF_TEST is not set
1041# CONFIG_FAULT_INJECTION is not set 1049# CONFIG_FAULT_INJECTION is not set
1042# CONFIG_SAMPLES is not set 1050# CONFIG_SAMPLES is not set
1043# CONFIG_DEBUG_STACKOVERFLOW is not set 1051# CONFIG_DEBUG_STACKOVERFLOW is not set
1044# CONFIG_DEBUG_STACK_USAGE is not set 1052# CONFIG_DEBUG_STACK_USAGE is not set
1045# CONFIG_DEBUG_PAGEALLOC is not set 1053# CONFIG_DEBUG_PAGEALLOC is not set
1046# CONFIG_DEBUGGER is not set 1054# CONFIG_DEBUGGER is not set
1055# CONFIG_VIRQ_DEBUG is not set
1047CONFIG_BDI_SWITCH=y 1056CONFIG_BDI_SWITCH=y
1048# CONFIG_PPC_EARLY_DEBUG is not set 1057# CONFIG_PPC_EARLY_DEBUG is not set
1049 1058
@@ -1053,5 +1062,49 @@ CONFIG_BDI_SWITCH=y
1053# CONFIG_KEYS is not set 1062# CONFIG_KEYS is not set
1054# CONFIG_SECURITY is not set 1063# CONFIG_SECURITY is not set
1055# CONFIG_SECURITY_FILE_CAPABILITIES is not set 1064# CONFIG_SECURITY_FILE_CAPABILITIES is not set
1056# CONFIG_CRYPTO is not set 1065CONFIG_CRYPTO=y
1066# CONFIG_CRYPTO_SEQIV is not set
1067# CONFIG_CRYPTO_MANAGER is not set
1068# CONFIG_CRYPTO_HMAC is not set
1069# CONFIG_CRYPTO_XCBC is not set
1070# CONFIG_CRYPTO_NULL is not set
1071# CONFIG_CRYPTO_MD4 is not set
1072# CONFIG_CRYPTO_MD5 is not set
1073# CONFIG_CRYPTO_SHA1 is not set
1074# CONFIG_CRYPTO_SHA256 is not set
1075# CONFIG_CRYPTO_SHA512 is not set
1076# CONFIG_CRYPTO_WP512 is not set
1077# CONFIG_CRYPTO_TGR192 is not set
1078# CONFIG_CRYPTO_GF128MUL is not set
1079# CONFIG_CRYPTO_ECB is not set
1080# CONFIG_CRYPTO_CBC is not set
1081# CONFIG_CRYPTO_PCBC is not set
1082# CONFIG_CRYPTO_LRW is not set
1083# CONFIG_CRYPTO_XTS is not set
1084# CONFIG_CRYPTO_CTR is not set
1085# CONFIG_CRYPTO_GCM is not set
1086# CONFIG_CRYPTO_CCM is not set
1087# CONFIG_CRYPTO_CRYPTD is not set
1088# CONFIG_CRYPTO_DES is not set
1089# CONFIG_CRYPTO_FCRYPT is not set
1090# CONFIG_CRYPTO_BLOWFISH is not set
1091# CONFIG_CRYPTO_TWOFISH is not set
1092# CONFIG_CRYPTO_SERPENT is not set
1093# CONFIG_CRYPTO_AES is not set
1094# CONFIG_CRYPTO_CAST5 is not set
1095# CONFIG_CRYPTO_CAST6 is not set
1096# CONFIG_CRYPTO_TEA is not set
1097# CONFIG_CRYPTO_ARC4 is not set
1098# CONFIG_CRYPTO_KHAZAD is not set
1099# CONFIG_CRYPTO_ANUBIS is not set
1100# CONFIG_CRYPTO_SEED is not set
1101# CONFIG_CRYPTO_SALSA20 is not set
1102# CONFIG_CRYPTO_DEFLATE is not set
1103# CONFIG_CRYPTO_MICHAEL_MIC is not set
1104# CONFIG_CRYPTO_CRC32C is not set
1105# CONFIG_CRYPTO_CAMELLIA is not set
1106# CONFIG_CRYPTO_TEST is not set
1107# CONFIG_CRYPTO_AUTHENC is not set
1108# CONFIG_CRYPTO_LZO is not set
1109CONFIG_CRYPTO_HW=y
1057# CONFIG_PPC_CLOCK is not set 1110# CONFIG_PPC_CLOCK is not set
diff --git a/arch/powerpc/kernel/kprobes.c b/arch/powerpc/kernel/kprobes.c
index 5338e4855712..c176c513566b 100644
--- a/arch/powerpc/kernel/kprobes.c
+++ b/arch/powerpc/kernel/kprobes.c
@@ -274,7 +274,7 @@ no_kprobe:
274 * - When the probed function returns, this probe 274 * - When the probed function returns, this probe
275 * causes the handlers to fire 275 * causes the handlers to fire
276 */ 276 */
277void kretprobe_trampoline_holder(void) 277static void __used kretprobe_trampoline_holder(void)
278{ 278{
279 asm volatile(".global kretprobe_trampoline\n" 279 asm volatile(".global kretprobe_trampoline\n"
280 "kretprobe_trampoline:\n" 280 "kretprobe_trampoline:\n"
@@ -284,7 +284,8 @@ void kretprobe_trampoline_holder(void)
284/* 284/*
285 * Called when the probe at kretprobe trampoline is hit 285 * Called when the probe at kretprobe trampoline is hit
286 */ 286 */
287int __kprobes trampoline_probe_handler(struct kprobe *p, struct pt_regs *regs) 287static int __kprobes trampoline_probe_handler(struct kprobe *p,
288 struct pt_regs *regs)
288{ 289{
289 struct kretprobe_instance *ri = NULL; 290 struct kretprobe_instance *ri = NULL;
290 struct hlist_head *head, empty_rp; 291 struct hlist_head *head, empty_rp;
@@ -517,12 +518,12 @@ int __kprobes setjmp_pre_handler(struct kprobe *p, struct pt_regs *regs)
517 return 1; 518 return 1;
518} 519}
519 520
520void __kprobes jprobe_return(void) 521void __used __kprobes jprobe_return(void)
521{ 522{
522 asm volatile("trap" ::: "memory"); 523 asm volatile("trap" ::: "memory");
523} 524}
524 525
525void __kprobes jprobe_return_end(void) 526static void __used __kprobes jprobe_return_end(void)
526{ 527{
527}; 528};
528 529
diff --git a/arch/powerpc/kernel/prom.c b/arch/powerpc/kernel/prom.c
index 8b5efbce8d90..eac97f48b9b8 100644
--- a/arch/powerpc/kernel/prom.c
+++ b/arch/powerpc/kernel/prom.c
@@ -865,12 +865,12 @@ static int __init early_init_dt_scan_root(unsigned long node,
865 return 1; 865 return 1;
866} 866}
867 867
868static unsigned long __init dt_mem_next_cell(int s, cell_t **cellp) 868static u64 __init dt_mem_next_cell(int s, cell_t **cellp)
869{ 869{
870 cell_t *p = *cellp; 870 cell_t *p = *cellp;
871 871
872 *cellp = p + s; 872 *cellp = p + s;
873 return of_read_ulong(p, s); 873 return of_read_number(p, s);
874} 874}
875 875
876#ifdef CONFIG_PPC_PSERIES 876#ifdef CONFIG_PPC_PSERIES
@@ -883,8 +883,8 @@ static unsigned long __init dt_mem_next_cell(int s, cell_t **cellp)
883static int __init early_init_dt_scan_drconf_memory(unsigned long node) 883static int __init early_init_dt_scan_drconf_memory(unsigned long node)
884{ 884{
885 cell_t *dm, *ls; 885 cell_t *dm, *ls;
886 unsigned long l, n; 886 unsigned long l, n, flags;
887 unsigned long base, size, lmb_size, flags; 887 u64 base, size, lmb_size;
888 888
889 ls = (cell_t *)of_get_flat_dt_prop(node, "ibm,lmb-size", &l); 889 ls = (cell_t *)of_get_flat_dt_prop(node, "ibm,lmb-size", &l);
890 if (ls == NULL || l < dt_root_size_cells * sizeof(cell_t)) 890 if (ls == NULL || l < dt_root_size_cells * sizeof(cell_t))
@@ -959,14 +959,15 @@ static int __init early_init_dt_scan_memory(unsigned long node,
959 uname, l, reg[0], reg[1], reg[2], reg[3]); 959 uname, l, reg[0], reg[1], reg[2], reg[3]);
960 960
961 while ((endp - reg) >= (dt_root_addr_cells + dt_root_size_cells)) { 961 while ((endp - reg) >= (dt_root_addr_cells + dt_root_size_cells)) {
962 unsigned long base, size; 962 u64 base, size;
963 963
964 base = dt_mem_next_cell(dt_root_addr_cells, &reg); 964 base = dt_mem_next_cell(dt_root_addr_cells, &reg);
965 size = dt_mem_next_cell(dt_root_size_cells, &reg); 965 size = dt_mem_next_cell(dt_root_size_cells, &reg);
966 966
967 if (size == 0) 967 if (size == 0)
968 continue; 968 continue;
969 DBG(" - %lx , %lx\n", base, size); 969 DBG(" - %llx , %llx\n", (unsigned long long)base,
970 (unsigned long long)size);
970#ifdef CONFIG_PPC64 971#ifdef CONFIG_PPC64
971 if (iommu_is_off) { 972 if (iommu_is_off) {
972 if (base >= 0x80000000ul) 973 if (base >= 0x80000000ul)
diff --git a/arch/powerpc/platforms/44x/Kconfig b/arch/powerpc/platforms/44x/Kconfig
index c062c4cbbed5..1bfb2191010a 100644
--- a/arch/powerpc/platforms/44x/Kconfig
+++ b/arch/powerpc/platforms/44x/Kconfig
@@ -61,7 +61,7 @@ config WARP
61 select 440EP 61 select 440EP
62 help 62 help
63 This option enables support for the PIKA Warp(tm) Appliance. The Warp 63 This option enables support for the PIKA Warp(tm) Appliance. The Warp
64 is a small computer replacement with up to 9 ports of FXO/FXS plus VOIP 64 is a small computer replacement with up to 9 ports of FXO/FXS plus VOIP
65 stations and trunks. 65 stations and trunks.
66 66
67 See http://www.pikatechnologies.com/ and follow the "PIKA for Computer 67 See http://www.pikatechnologies.com/ and follow the "PIKA for Computer
@@ -110,17 +110,17 @@ config 440GP
110 110
111config 440GX 111config 440GX
112 bool 112 bool
113 select IBM_NEW_EMAC_EMAC4 113 select IBM_NEW_EMAC_EMAC4
114 select IBM_NEW_EMAC_RGMII 114 select IBM_NEW_EMAC_RGMII
115 select IBM_NEW_EMAC_ZMII #test only 115 select IBM_NEW_EMAC_ZMII #test only
116 select IBM_NEW_EMAC_TAH #test only 116 select IBM_NEW_EMAC_TAH #test only
117 117
118config 440SP 118config 440SP
119 bool 119 bool
120 120
121config 440SPe 121config 440SPe
122 select IBM_NEW_EMAC_EMAC4
123 bool 122 bool
123 select IBM_NEW_EMAC_EMAC4
124 124
125# 44x errata/workaround config symbols, selected by the CPU models above 125# 44x errata/workaround config symbols, selected by the CPU models above
126config IBM440EP_ERR42 126config IBM440EP_ERR42
diff --git a/arch/powerpc/platforms/cell/spu_base.c b/arch/powerpc/platforms/cell/spu_base.c
index e45cfa84911f..87eb07f94c5f 100644
--- a/arch/powerpc/platforms/cell/spu_base.c
+++ b/arch/powerpc/platforms/cell/spu_base.c
@@ -160,13 +160,6 @@ static int __spu_trap_data_seg(struct spu *spu, unsigned long ea)
160 160
161 pr_debug("%s\n", __FUNCTION__); 161 pr_debug("%s\n", __FUNCTION__);
162 162
163 if (test_bit(SPU_CONTEXT_SWITCH_ACTIVE, &spu->flags)) {
164 /* SLBs are pre-loaded for context switch, so
165 * we should never get here!
166 */
167 printk("%s: invalid access during switch!\n", __func__);
168 return 1;
169 }
170 slb.esid = (ea & ESID_MASK) | SLB_ESID_V; 163 slb.esid = (ea & ESID_MASK) | SLB_ESID_V;
171 164
172 switch(REGION_ID(ea)) { 165 switch(REGION_ID(ea)) {
@@ -226,11 +219,6 @@ static int __spu_trap_data_map(struct spu *spu, unsigned long ea, u64 dsisr)
226 return 0; 219 return 0;
227 } 220 }
228 221
229 if (test_bit(SPU_CONTEXT_SWITCH_ACTIVE, &spu->flags)) {
230 printk("%s: invalid access during switch!\n", __func__);
231 return 1;
232 }
233
234 spu->class_0_pending = 0; 222 spu->class_0_pending = 0;
235 spu->dar = ea; 223 spu->dar = ea;
236 spu->dsisr = dsisr; 224 spu->dsisr = dsisr;
diff --git a/arch/powerpc/platforms/cell/spufs/run.c b/arch/powerpc/platforms/cell/spufs/run.c
index fca22e18069a..6221968c2a3c 100644
--- a/arch/powerpc/platforms/cell/spufs/run.c
+++ b/arch/powerpc/platforms/cell/spufs/run.c
@@ -234,6 +234,7 @@ static int spu_run_fini(struct spu_context *ctx, u32 *npc,
234 *npc = ctx->ops->npc_read(ctx); 234 *npc = ctx->ops->npc_read(ctx);
235 235
236 spuctx_switch_state(ctx, SPU_UTIL_IDLE_LOADED); 236 spuctx_switch_state(ctx, SPU_UTIL_IDLE_LOADED);
237 ctx->policy = SCHED_IDLE;
237 spu_release(ctx); 238 spu_release(ctx);
238 239
239 if (signal_pending(current)) 240 if (signal_pending(current))
diff --git a/arch/powerpc/platforms/cell/spufs/sched.c b/arch/powerpc/platforms/cell/spufs/sched.c
index 5915343e2599..3a5972117de7 100644
--- a/arch/powerpc/platforms/cell/spufs/sched.c
+++ b/arch/powerpc/platforms/cell/spufs/sched.c
@@ -856,21 +856,18 @@ static noinline void spusched_tick(struct spu_context *ctx)
856{ 856{
857 struct spu_context *new = NULL; 857 struct spu_context *new = NULL;
858 struct spu *spu = NULL; 858 struct spu *spu = NULL;
859 u32 status;
860 859
861 if (spu_acquire(ctx)) 860 if (spu_acquire(ctx))
862 BUG(); /* a kernel thread never has signals pending */ 861 BUG(); /* a kernel thread never has signals pending */
863 862
864 if (ctx->state != SPU_STATE_RUNNABLE) 863 if (ctx->state != SPU_STATE_RUNNABLE)
865 goto out; 864 goto out;
866 if (spu_stopped(ctx, &status))
867 goto out;
868 if (ctx->flags & SPU_CREATE_NOSCHED) 865 if (ctx->flags & SPU_CREATE_NOSCHED)
869 goto out; 866 goto out;
870 if (ctx->policy == SCHED_FIFO) 867 if (ctx->policy == SCHED_FIFO)
871 goto out; 868 goto out;
872 869
873 if (--ctx->time_slice) 870 if (--ctx->time_slice && ctx->policy != SCHED_IDLE)
874 goto out; 871 goto out;
875 872
876 spu = ctx->spu; 873 spu = ctx->spu;
@@ -880,7 +877,8 @@ static noinline void spusched_tick(struct spu_context *ctx)
880 new = grab_runnable_context(ctx->prio + 1, spu->node); 877 new = grab_runnable_context(ctx->prio + 1, spu->node);
881 if (new) { 878 if (new) {
882 spu_unschedule(spu, ctx); 879 spu_unschedule(spu, ctx);
883 spu_add_to_rq(ctx); 880 if (ctx->policy != SCHED_IDLE)
881 spu_add_to_rq(ctx);
884 } else { 882 } else {
885 spu_context_nospu_trace(spusched_tick__newslice, ctx); 883 spu_context_nospu_trace(spusched_tick__newslice, ctx);
886 ctx->time_slice++; 884 ctx->time_slice++;
diff --git a/arch/powerpc/platforms/cell/spufs/switch.c b/arch/powerpc/platforms/cell/spufs/switch.c
index 6063c88c26d2..6f5886c7b1f9 100644
--- a/arch/powerpc/platforms/cell/spufs/switch.c
+++ b/arch/powerpc/platforms/cell/spufs/switch.c
@@ -720,8 +720,9 @@ static inline void set_switch_active(struct spu_state *csa, struct spu *spu)
720 * Restore, Step 23. 720 * Restore, Step 23.
721 * Change the software context switch pending flag 721 * Change the software context switch pending flag
722 * to context switch active. 722 * to context switch active.
723 *
724 * This implementation does not uses a switch active flag.
723 */ 725 */
724 set_bit(SPU_CONTEXT_SWITCH_ACTIVE, &spu->flags);
725 clear_bit(SPU_CONTEXT_SWITCH_PENDING, &spu->flags); 726 clear_bit(SPU_CONTEXT_SWITCH_PENDING, &spu->flags);
726 mb(); 727 mb();
727} 728}
@@ -1739,9 +1740,8 @@ static inline void reset_switch_active(struct spu_state *csa, struct spu *spu)
1739{ 1740{
1740 /* Restore, Step 74: 1741 /* Restore, Step 74:
1741 * Reset the "context switch active" flag. 1742 * Reset the "context switch active" flag.
1743 * Not performed by this implementation.
1742 */ 1744 */
1743 clear_bit(SPU_CONTEXT_SWITCH_ACTIVE, &spu->flags);
1744 mb();
1745} 1745}
1746 1746
1747static inline void reenable_interrupts(struct spu_state *csa, struct spu *spu) 1747static inline void reenable_interrupts(struct spu_state *csa, struct spu *spu)
diff --git a/arch/powerpc/platforms/pasemi/Makefile b/arch/powerpc/platforms/pasemi/Makefile
index 8f52d7515793..ce6d789e0741 100644
--- a/arch/powerpc/platforms/pasemi/Makefile
+++ b/arch/powerpc/platforms/pasemi/Makefile
@@ -1,3 +1,3 @@
1obj-y += setup.o pci.o time.o idle.o powersave.o iommu.o dma_lib.o 1obj-y += setup.o pci.o time.o idle.o powersave.o iommu.o dma_lib.o misc.o
2obj-$(CONFIG_PPC_PASEMI_MDIO) += gpio_mdio.o 2obj-$(CONFIG_PPC_PASEMI_MDIO) += gpio_mdio.o
3obj-$(CONFIG_PPC_PASEMI_CPUFREQ) += cpufreq.o 3obj-$(CONFIG_PPC_PASEMI_CPUFREQ) += cpufreq.o
diff --git a/arch/powerpc/platforms/pasemi/misc.c b/arch/powerpc/platforms/pasemi/misc.c
new file mode 100644
index 000000000000..ded7d152d00c
--- /dev/null
+++ b/arch/powerpc/platforms/pasemi/misc.c
@@ -0,0 +1,97 @@
1/*
2 * Copyright (C) 2007 PA Semi, Inc
3 *
4 * Parts based on arch/powerpc/sysdev/fsl_soc.c:
5 *
6 * 2006 (c) MontaVista Software, Inc.
7 *
8 * This program is free software; you can redistribute it and/or modify it
9 * under the terms of the GNU General Public License as published by the
10 * Free Software Foundation; either version 2 of the License, or (at your
11 * option) any later version.
12 */
13
14#include <linux/errno.h>
15#include <linux/kernel.h>
16#include <linux/pci.h>
17#include <linux/of.h>
18#include <linux/i2c.h>
19
20#ifdef CONFIG_I2C_BOARDINFO
21/* The below is from fsl_soc.c. It's copied because since there are no
22 * official bus bindings at this time it doesn't make sense to share across
23 * the platforms, even though they happen to be common.
24 */
25struct i2c_driver_device {
26 char *of_device;
27 char *i2c_driver;
28 char *i2c_type;
29};
30
31static struct i2c_driver_device i2c_devices[] __initdata = {
32 {"dallas,ds1338", "rtc-ds1307", "ds1338"},
33};
34
35static int __init find_i2c_driver(struct device_node *node,
36 struct i2c_board_info *info)
37{
38 int i;
39
40 for (i = 0; i < ARRAY_SIZE(i2c_devices); i++) {
41 if (!of_device_is_compatible(node, i2c_devices[i].of_device))
42 continue;
43 if (strlcpy(info->driver_name, i2c_devices[i].i2c_driver,
44 KOBJ_NAME_LEN) >= KOBJ_NAME_LEN ||
45 strlcpy(info->type, i2c_devices[i].i2c_type,
46 I2C_NAME_SIZE) >= I2C_NAME_SIZE)
47 return -ENOMEM;
48 return 0;
49 }
50 return -ENODEV;
51}
52
53static int __init pasemi_register_i2c_devices(void)
54{
55 struct pci_dev *pdev;
56 struct device_node *adap_node;
57 struct device_node *node;
58
59 pdev = NULL;
60 while ((pdev = pci_get_device(PCI_VENDOR_ID_PASEMI, 0xa003, pdev))) {
61 adap_node = pci_device_to_OF_node(pdev);
62
63 if (!adap_node)
64 continue;
65
66 node = NULL;
67 while ((node = of_get_next_child(adap_node, node))) {
68 struct i2c_board_info info = {};
69 const u32 *addr;
70 int len;
71
72 addr = of_get_property(node, "reg", &len);
73 if (!addr || len < sizeof(int) ||
74 *addr > (1 << 10) - 1) {
75 printk(KERN_WARNING
76 "pasemi_register_i2c_devices: "
77 "invalid i2c device entry\n");
78 continue;
79 }
80
81 info.irq = irq_of_parse_and_map(node, 0);
82 if (info.irq == NO_IRQ)
83 info.irq = -1;
84
85 if (find_i2c_driver(node, &info) < 0)
86 continue;
87
88 info.addr = *addr;
89
90 i2c_register_board_info(PCI_FUNC(pdev->devfn), &info,
91 1);
92 }
93 }
94 return 0;
95}
96device_initcall(pasemi_register_i2c_devices);
97#endif
diff --git a/arch/powerpc/platforms/pseries/power.c b/arch/powerpc/platforms/pseries/power.c
index e95fc1594c84..6d6266236446 100644
--- a/arch/powerpc/platforms/pseries/power.c
+++ b/arch/powerpc/platforms/pseries/power.c
@@ -75,7 +75,7 @@ core_initcall(pm_init);
75#else 75#else
76static int __init apo_pm_init(void) 76static int __init apo_pm_init(void)
77{ 77{
78 return (sysfs_create_file(power_kobj, &auto_poweron_attr)); 78 return (sysfs_create_file(power_kobj, &auto_poweron_attr.attr));
79} 79}
80__initcall(apo_pm_init); 80__initcall(apo_pm_init);
81#endif 81#endif
diff --git a/arch/powerpc/sysdev/mpic_pasemi_msi.c b/arch/powerpc/sysdev/mpic_pasemi_msi.c
index d6bfda30ac87..33cbfb22ce3e 100644
--- a/arch/powerpc/sysdev/mpic_pasemi_msi.c
+++ b/arch/powerpc/sysdev/mpic_pasemi_msi.c
@@ -95,7 +95,6 @@ static int pasemi_msi_setup_msi_irqs(struct pci_dev *pdev, int nvec, int type)
95 unsigned int virq; 95 unsigned int virq;
96 struct msi_desc *entry; 96 struct msi_desc *entry;
97 struct msi_msg msg; 97 struct msi_msg msg;
98 u64 addr;
99 98
100 pr_debug("pasemi_msi_setup_msi_irqs, pdev %p nvec %d type %d\n", 99 pr_debug("pasemi_msi_setup_msi_irqs, pdev %p nvec %d type %d\n",
101 pdev, nvec, type); 100 pdev, nvec, type);
@@ -132,8 +131,8 @@ static int pasemi_msi_setup_msi_irqs(struct pci_dev *pdev, int nvec, int type)
132 set_irq_chip(virq, &mpic_pasemi_msi_chip); 131 set_irq_chip(virq, &mpic_pasemi_msi_chip);
133 set_irq_type(virq, IRQ_TYPE_EDGE_RISING); 132 set_irq_type(virq, IRQ_TYPE_EDGE_RISING);
134 133
135 pr_debug("pasemi_msi: allocated virq 0x%x (hw 0x%lx) addr 0x%lx\n", 134 pr_debug("pasemi_msi: allocated virq 0x%x (hw 0x%lx) addr 0x%x\n",
136 virq, hwirq, addr); 135 virq, hwirq, msg.address_lo);
137 136
138 /* Likewise, the device writes [0...511] into the target 137 /* Likewise, the device writes [0...511] into the target
139 * register to generate MSI [512...1023] 138 * register to generate MSI [512...1023]
diff --git a/arch/ppc/platforms/4xx/ibm440ep.c b/arch/ppc/platforms/4xx/ibm440ep.c
index 1fed6638c81f..0de91532aabb 100644
--- a/arch/ppc/platforms/4xx/ibm440ep.c
+++ b/arch/ppc/platforms/4xx/ibm440ep.c
@@ -172,11 +172,11 @@ struct ocp_def core_ocp[] = {
172/* Polarity and triggering settings for internal interrupt sources */ 172/* Polarity and triggering settings for internal interrupt sources */
173struct ppc4xx_uic_settings ppc4xx_core_uic_cfg[] __initdata = { 173struct ppc4xx_uic_settings ppc4xx_core_uic_cfg[] __initdata = {
174 { .polarity = 0xffbffe03, 174 { .polarity = 0xffbffe03,
175 .triggering = 0xfffffe00, 175 .triggering = 0x00000000,
176 .ext_irq_mask = 0x000001fc, /* IRQ0 - IRQ6 */ 176 .ext_irq_mask = 0x000001fc, /* IRQ0 - IRQ6 */
177 }, 177 },
178 { .polarity = 0xffffc6ef, 178 { .polarity = 0xffffc6af,
179 .triggering = 0xffffc7ff, 179 .triggering = 0x06000140,
180 .ext_irq_mask = 0x00003800, /* IRQ7 - IRQ9 */ 180 .ext_irq_mask = 0x00003800, /* IRQ7 - IRQ9 */
181 }, 181 },
182}; 182};
diff --git a/arch/s390/Kconfig b/arch/s390/Kconfig
index 92a4f7b4323a..b21444b681b6 100644
--- a/arch/s390/Kconfig
+++ b/arch/s390/Kconfig
@@ -100,7 +100,8 @@ config NR_CPUS
100 int "Maximum number of CPUs (2-64)" 100 int "Maximum number of CPUs (2-64)"
101 range 2 64 101 range 2 64
102 depends on SMP 102 depends on SMP
103 default "32" 103 default "32" if !64BIT
104 default "64" if 64BIT
104 help 105 help
105 This allows you to specify the maximum number of CPUs which this 106 This allows you to specify the maximum number of CPUs which this
106 kernel will support. The maximum supported value is 64 and the 107 kernel will support. The maximum supported value is 64 and the
diff --git a/arch/s390/kernel/process.c b/arch/s390/kernel/process.c
index a6a4729e0e94..1c59ec161cf8 100644
--- a/arch/s390/kernel/process.c
+++ b/arch/s390/kernel/process.c
@@ -114,24 +114,27 @@ extern void s390_handle_mcck(void);
114static void default_idle(void) 114static void default_idle(void)
115{ 115{
116 int cpu, rc; 116 int cpu, rc;
117 int nr_calls = 0;
118 void *hcpu;
117#ifdef CONFIG_SMP 119#ifdef CONFIG_SMP
118 struct s390_idle_data *idle; 120 struct s390_idle_data *idle;
119#endif 121#endif
120 122
121 /* CPU is going idle. */ 123 /* CPU is going idle. */
122 cpu = smp_processor_id(); 124 cpu = smp_processor_id();
123 125 hcpu = (void *)(long)cpu;
124 local_irq_disable(); 126 local_irq_disable();
125 if (need_resched()) { 127 if (need_resched()) {
126 local_irq_enable(); 128 local_irq_enable();
127 return; 129 return;
128 } 130 }
129 131
130 rc = atomic_notifier_call_chain(&idle_chain, 132 rc = __atomic_notifier_call_chain(&idle_chain, S390_CPU_IDLE, hcpu, -1,
131 S390_CPU_IDLE, (void *)(long) cpu); 133 &nr_calls);
132 if (rc != NOTIFY_OK && rc != NOTIFY_DONE) 134 if (rc == NOTIFY_BAD) {
133 BUG(); 135 nr_calls--;
134 if (rc != NOTIFY_OK) { 136 __atomic_notifier_call_chain(&idle_chain, S390_CPU_NOT_IDLE,
137 hcpu, nr_calls, NULL);
135 local_irq_enable(); 138 local_irq_enable();
136 return; 139 return;
137 } 140 }
diff --git a/arch/s390/kernel/smp.c b/arch/s390/kernel/smp.c
index 85060659fb12..818bd09c0260 100644
--- a/arch/s390/kernel/smp.c
+++ b/arch/s390/kernel/smp.c
@@ -626,13 +626,17 @@ static int __cpuinit smp_alloc_lowcore(int cpu)
626 if (!lowcore) 626 if (!lowcore)
627 return -ENOMEM; 627 return -ENOMEM;
628 async_stack = __get_free_pages(GFP_KERNEL, ASYNC_ORDER); 628 async_stack = __get_free_pages(GFP_KERNEL, ASYNC_ORDER);
629 if (!async_stack)
630 goto out_async_stack;
631 panic_stack = __get_free_page(GFP_KERNEL); 629 panic_stack = __get_free_page(GFP_KERNEL);
632 if (!panic_stack) 630 if (!panic_stack || !async_stack)
633 goto out_panic_stack; 631 goto out;
634 632 /*
635 *lowcore = S390_lowcore; 633 * Only need to copy the first 512 bytes from address 0. But since
634 * the compiler emits a warning if src == NULL for memcpy use copy_page
635 * instead. Copies more than needed but this code is not performance
636 * critical.
637 */
638 copy_page(lowcore, &S390_lowcore);
639 memset((void *)lowcore + 512, 0, sizeof(*lowcore) - 512);
636 lowcore->async_stack = async_stack + ASYNC_SIZE; 640 lowcore->async_stack = async_stack + ASYNC_SIZE;
637 lowcore->panic_stack = panic_stack + PAGE_SIZE; 641 lowcore->panic_stack = panic_stack + PAGE_SIZE;
638 642
@@ -653,9 +657,8 @@ static int __cpuinit smp_alloc_lowcore(int cpu)
653out_save_area: 657out_save_area:
654 free_page(panic_stack); 658 free_page(panic_stack);
655#endif 659#endif
656out_panic_stack: 660out:
657 free_pages(async_stack, ASYNC_ORDER); 661 free_pages(async_stack, ASYNC_ORDER);
658out_async_stack:
659 free_pages((unsigned long) lowcore, lc_order); 662 free_pages((unsigned long) lowcore, lc_order);
660 return -ENOMEM; 663 return -ENOMEM;
661} 664}
@@ -719,8 +722,8 @@ int __cpuinit __cpu_up(unsigned int cpu)
719 cpu_lowcore->percpu_offset = __per_cpu_offset[cpu]; 722 cpu_lowcore->percpu_offset = __per_cpu_offset[cpu];
720 cpu_lowcore->current_task = (unsigned long) idle; 723 cpu_lowcore->current_task = (unsigned long) idle;
721 cpu_lowcore->cpu_data.cpu_nr = cpu; 724 cpu_lowcore->cpu_data.cpu_nr = cpu;
722 cpu_lowcore->softirq_pending = 0; 725 cpu_lowcore->kernel_asce = S390_lowcore.kernel_asce;
723 cpu_lowcore->ext_call_fast = 0; 726 cpu_lowcore->ipl_device = S390_lowcore.ipl_device;
724 eieio(); 727 eieio();
725 728
726 while (signal_processor(cpu, sigp_restart) == sigp_busy) 729 while (signal_processor(cpu, sigp_restart) == sigp_busy)
@@ -797,23 +800,43 @@ void cpu_die(void)
797 800
798void __init smp_prepare_cpus(unsigned int max_cpus) 801void __init smp_prepare_cpus(unsigned int max_cpus)
799{ 802{
803#ifndef CONFIG_64BIT
804 unsigned long save_area = 0;
805#endif
806 unsigned long async_stack, panic_stack;
807 struct _lowcore *lowcore;
800 unsigned int cpu; 808 unsigned int cpu;
809 int lc_order;
801 810
802 smp_detect_cpus(); 811 smp_detect_cpus();
803 812
804 /* request the 0x1201 emergency signal external interrupt */ 813 /* request the 0x1201 emergency signal external interrupt */
805 if (register_external_interrupt(0x1201, do_ext_call_interrupt) != 0) 814 if (register_external_interrupt(0x1201, do_ext_call_interrupt) != 0)
806 panic("Couldn't request external interrupt 0x1201"); 815 panic("Couldn't request external interrupt 0x1201");
807 memset(lowcore_ptr, 0, sizeof(lowcore_ptr));
808 print_cpu_info(&S390_lowcore.cpu_data); 816 print_cpu_info(&S390_lowcore.cpu_data);
809 smp_alloc_lowcore(smp_processor_id());
810 817
818 /* Reallocate current lowcore, but keep its contents. */
819 lc_order = sizeof(long) == 8 ? 1 : 0;
820 lowcore = (void *) __get_free_pages(GFP_KERNEL | GFP_DMA, lc_order);
821 panic_stack = __get_free_page(GFP_KERNEL);
822 async_stack = __get_free_pages(GFP_KERNEL, ASYNC_ORDER);
811#ifndef CONFIG_64BIT 823#ifndef CONFIG_64BIT
812 if (MACHINE_HAS_IEEE) 824 if (MACHINE_HAS_IEEE)
813 ctl_set_bit(14, 29); /* enable extended save area */ 825 save_area = get_zeroed_page(GFP_KERNEL);
814#endif 826#endif
815 set_prefix((u32)(unsigned long) lowcore_ptr[smp_processor_id()]); 827 local_irq_disable();
816 828 local_mcck_disable();
829 lowcore_ptr[smp_processor_id()] = lowcore;
830 *lowcore = S390_lowcore;
831 lowcore->panic_stack = panic_stack + PAGE_SIZE;
832 lowcore->async_stack = async_stack + ASYNC_SIZE;
833#ifndef CONFIG_64BIT
834 if (MACHINE_HAS_IEEE)
835 lowcore->extended_save_area_addr = (u32) save_area;
836#endif
837 set_prefix((u32)(unsigned long) lowcore);
838 local_mcck_enable();
839 local_irq_enable();
817 for_each_possible_cpu(cpu) 840 for_each_possible_cpu(cpu)
818 if (cpu != smp_processor_id()) 841 if (cpu != smp_processor_id())
819 smp_create_idle(cpu); 842 smp_create_idle(cpu);
diff --git a/arch/s390/kernel/time.c b/arch/s390/kernel/time.c
index 3bbac1293be4..76a5dd1b4ce9 100644
--- a/arch/s390/kernel/time.c
+++ b/arch/s390/kernel/time.c
@@ -744,7 +744,6 @@ static void etr_adjust_time(unsigned long long clock, unsigned long long delay)
744 } 744 }
745} 745}
746 746
747#ifdef CONFIG_SMP
748static void etr_sync_cpu_start(void *dummy) 747static void etr_sync_cpu_start(void *dummy)
749{ 748{
750 int *in_sync = dummy; 749 int *in_sync = dummy;
@@ -777,7 +776,6 @@ static void etr_sync_cpu_start(void *dummy)
777static void etr_sync_cpu_end(void *dummy) 776static void etr_sync_cpu_end(void *dummy)
778{ 777{
779} 778}
780#endif /* CONFIG_SMP */
781 779
782/* 780/*
783 * Sync the TOD clock using the port refered to by aibp. This port 781 * Sync the TOD clock using the port refered to by aibp. This port
diff --git a/arch/s390/lib/uaccess_std.c b/arch/s390/lib/uaccess_std.c
index 28c4500a58d0..d2ffbadb51a7 100644
--- a/arch/s390/lib/uaccess_std.c
+++ b/arch/s390/lib/uaccess_std.c
@@ -293,10 +293,10 @@ int futex_atomic_cmpxchg_std(int __user *uaddr, int oldval, int newval)
293 293
294 asm volatile( 294 asm volatile(
295 " sacf 256\n" 295 " sacf 256\n"
296 " cs %1,%4,0(%5)\n" 296 "0: cs %1,%4,0(%5)\n"
297 "0: lr %0,%1\n" 297 "1: lr %0,%1\n"
298 "1: sacf 0\n" 298 "2: sacf 0\n"
299 EX_TABLE(0b,1b) 299 EX_TABLE(0b,2b) EX_TABLE(1b,2b)
300 : "=d" (ret), "+d" (oldval), "=m" (*uaddr) 300 : "=d" (ret), "+d" (oldval), "=m" (*uaddr)
301 : "0" (-EFAULT), "d" (newval), "a" (uaddr), "m" (*uaddr) 301 : "0" (-EFAULT), "d" (newval), "a" (uaddr), "m" (*uaddr)
302 : "cc", "memory" ); 302 : "cc", "memory" );
diff --git a/arch/sparc/kernel/process.c b/arch/sparc/kernel/process.c
index 19186ce8850d..0bd69d0b5cd7 100644
--- a/arch/sparc/kernel/process.c
+++ b/arch/sparc/kernel/process.c
@@ -141,16 +141,12 @@ void cpu_idle(void)
141 141
142extern char reboot_command []; 142extern char reboot_command [];
143 143
144extern void (*prom_palette)(int);
145
146/* XXX cli/sti -> local_irq_xxx here, check this works once SMP is fixed. */ 144/* XXX cli/sti -> local_irq_xxx here, check this works once SMP is fixed. */
147void machine_halt(void) 145void machine_halt(void)
148{ 146{
149 local_irq_enable(); 147 local_irq_enable();
150 mdelay(8); 148 mdelay(8);
151 local_irq_disable(); 149 local_irq_disable();
152 if (prom_palette)
153 prom_palette (1);
154 prom_halt(); 150 prom_halt();
155 panic("Halt failed!"); 151 panic("Halt failed!");
156} 152}
@@ -165,8 +161,6 @@ void machine_restart(char * cmd)
165 161
166 p = strchr (reboot_command, '\n'); 162 p = strchr (reboot_command, '\n');
167 if (p) *p = 0; 163 if (p) *p = 0;
168 if (prom_palette)
169 prom_palette (1);
170 if (cmd) 164 if (cmd)
171 prom_reboot(cmd); 165 prom_reboot(cmd);
172 if (*reboot_command) 166 if (*reboot_command)
diff --git a/arch/sparc/kernel/setup.c b/arch/sparc/kernel/setup.c
index 3cf78f160846..3c13137685da 100644
--- a/arch/sparc/kernel/setup.c
+++ b/arch/sparc/kernel/setup.c
@@ -65,7 +65,6 @@ struct screen_info screen_info = {
65 */ 65 */
66 66
67extern unsigned long trapbase; 67extern unsigned long trapbase;
68void (*prom_palette)(int);
69 68
70/* Pretty sick eh? */ 69/* Pretty sick eh? */
71void prom_sync_me(void) 70void prom_sync_me(void)
@@ -80,8 +79,6 @@ void prom_sync_me(void)
80 "nop\n\t" 79 "nop\n\t"
81 "nop\n\t" : : "r" (&trapbase)); 80 "nop\n\t" : : "r" (&trapbase));
82 81
83 if (prom_palette)
84 prom_palette(1);
85 prom_printf("PROM SYNC COMMAND...\n"); 82 prom_printf("PROM SYNC COMMAND...\n");
86 show_free_areas(); 83 show_free_areas();
87 if(current->pid != 0) { 84 if(current->pid != 0) {
@@ -191,7 +188,6 @@ extern int prom_probe_memory(void);
191extern void sun4c_probe_vac(void); 188extern void sun4c_probe_vac(void);
192extern char cputypval; 189extern char cputypval;
193extern unsigned long start, end; 190extern unsigned long start, end;
194extern void panic_setup(char *, int *);
195 191
196extern unsigned short root_flags; 192extern unsigned short root_flags;
197extern unsigned short root_dev; 193extern unsigned short root_dev;
diff --git a/arch/sparc/mm/sun4c.c b/arch/sparc/mm/sun4c.c
index c0442e8c4b15..2375fe9dc312 100644
--- a/arch/sparc/mm/sun4c.c
+++ b/arch/sparc/mm/sun4c.c
@@ -1941,9 +1941,7 @@ static pte_t *sun4c_pte_alloc_one_kernel(struct mm_struct *mm, unsigned long add
1941 if ((pte = sun4c_pte_alloc_one_fast(mm, address)) != NULL) 1941 if ((pte = sun4c_pte_alloc_one_fast(mm, address)) != NULL)
1942 return pte; 1942 return pte;
1943 1943
1944 pte = (pte_t *)__get_free_page(GFP_KERNEL|__GFP_REPEAT); 1944 pte = (pte_t *)get_zeroed_page(GFP_KERNEL|__GFP_REPEAT);
1945 if (pte)
1946 memset(pte, 0, PAGE_SIZE);
1947 return pte; 1945 return pte;
1948} 1946}
1949 1947
diff --git a/arch/sparc/prom/misc.c b/arch/sparc/prom/misc.c
index 37cff5f54704..d9fb3af41c1f 100644
--- a/arch/sparc/prom/misc.c
+++ b/arch/sparc/prom/misc.c
@@ -45,9 +45,6 @@ prom_feval(char *fstring)
45 spin_unlock_irqrestore(&prom_lock, flags); 45 spin_unlock_irqrestore(&prom_lock, flags);
46} 46}
47 47
48/* We want to do this more nicely some day. */
49extern void (*prom_palette)(int);
50
51/* Drop into the prom, with the chance to continue with the 'go' 48/* Drop into the prom, with the chance to continue with the 'go'
52 * prom command. 49 * prom command.
53 */ 50 */
@@ -58,8 +55,6 @@ prom_cmdline(void)
58 extern void install_linux_ticker(void); 55 extern void install_linux_ticker(void);
59 unsigned long flags; 56 unsigned long flags;
60 57
61 if (prom_palette)
62 prom_palette (1);
63 spin_lock_irqsave(&prom_lock, flags); 58 spin_lock_irqsave(&prom_lock, flags);
64 install_obp_ticker(); 59 install_obp_ticker();
65 (*(romvec->pv_abort))(); 60 (*(romvec->pv_abort))();
@@ -69,8 +64,6 @@ prom_cmdline(void)
69#ifdef CONFIG_SUN_AUXIO 64#ifdef CONFIG_SUN_AUXIO
70 set_auxio(AUXIO_LED, 0); 65 set_auxio(AUXIO_LED, 0);
71#endif 66#endif
72 if (prom_palette)
73 prom_palette (0);
74} 67}
75 68
76/* Drop into the prom, but completely terminate the program. 69/* Drop into the prom, but completely terminate the program.
diff --git a/arch/sparc64/Kconfig.debug b/arch/sparc64/Kconfig.debug
index a5faa3683bd6..6a4d28a4076d 100644
--- a/arch/sparc64/Kconfig.debug
+++ b/arch/sparc64/Kconfig.debug
@@ -23,10 +23,6 @@ config STACK_DEBUG
23 depends on DEBUG_KERNEL 23 depends on DEBUG_KERNEL
24 bool "Stack Overflow Detection Support" 24 bool "Stack Overflow Detection Support"
25 25
26config DEBUG_BOOTMEM
27 depends on DEBUG_KERNEL
28 bool "Debug BOOTMEM initialization"
29
30config DEBUG_PAGEALLOC 26config DEBUG_PAGEALLOC
31 bool "Debug page memory allocations" 27 bool "Debug page memory allocations"
32 depends on DEBUG_KERNEL && !HIBERNATION 28 depends on DEBUG_KERNEL && !HIBERNATION
diff --git a/arch/sparc64/Makefile b/arch/sparc64/Makefile
index 01159cb5f16d..f0c22f826982 100644
--- a/arch/sparc64/Makefile
+++ b/arch/sparc64/Makefile
@@ -12,39 +12,13 @@ CHECKFLAGS += -D__sparc__ -D__sparc_v9__ -m64
12 12
13CPPFLAGS_vmlinux.lds += -Usparc 13CPPFLAGS_vmlinux.lds += -Usparc
14 14
15CC := $(shell if $(CC) -m64 -S -o /dev/null -xc /dev/null >/dev/null 2>&1; then echo $(CC); else echo sparc64-linux-gcc; fi )
16
17NEW_GCC := $(call cc-option-yn, -m64 -mcmodel=medlow)
18NEW_GAS := $(shell if $(LD) -V 2>&1 | grep 'elf64_sparc' > /dev/null; then echo y; else echo n; fi)
19UNDECLARED_REGS := $(shell if $(CC) -c -x assembler /dev/null -Wa,--help | grep undeclared-regs > /dev/null; then echo y; else echo n; fi; )
20
21ifneq ($(NEW_GAS),y)
22AS = sparc64-linux-as
23LD = sparc64-linux-ld
24NM = sparc64-linux-nm
25AR = sparc64-linux-ar
26RANLIB = sparc64-linux-ranlib
27else
28AS := $(AS) -64
29LDFLAGS := -m elf64_sparc 15LDFLAGS := -m elf64_sparc
30endif
31 16
32ifneq ($(UNDECLARED_REGS),y) 17KBUILD_CFLAGS += -m64 -pipe -mno-fpu -mcpu=ultrasparc -mcmodel=medlow \
33CC_UNDECL = 18 -ffixed-g4 -ffixed-g5 -fcall-used-g7 -Wno-sign-compare \
34else 19 -Wa,--undeclared-regs
35CC_UNDECL = -Wa,--undeclared-regs 20KBUILD_CFLAGS += $(call cc-option,-mtune=ultrasparc3)
36AS := $(AS) --undeclared-regs 21KBUILD_AFLAGS += -m64 -mcpu=ultrasparc -Wa,--undeclared-regs
37endif
38
39ifneq ($(NEW_GCC),y)
40 KBUILD_CFLAGS += -pipe -mno-fpu -mtune=ultrasparc -mmedlow \
41 -ffixed-g4 -ffixed-g5 -fcall-used-g7 -Wno-sign-compare
42else
43 KBUILD_CFLAGS += -m64 -pipe -mno-fpu -mcpu=ultrasparc -mcmodel=medlow \
44 -ffixed-g4 -ffixed-g5 -fcall-used-g7 -Wno-sign-compare \
45 $(CC_UNDECL)
46 KBUILD_AFLAGS += -m64 -mcpu=ultrasparc $(CC_UNDECL)
47endif
48 22
49ifeq ($(CONFIG_MCOUNT),y) 23ifeq ($(CONFIG_MCOUNT),y)
50 KBUILD_CFLAGS += -pg 24 KBUILD_CFLAGS += -pg
diff --git a/arch/sparc64/defconfig b/arch/sparc64/defconfig
index 833d74b2b192..250958d1e3cb 100644
--- a/arch/sparc64/defconfig
+++ b/arch/sparc64/defconfig
@@ -1,7 +1,7 @@
1# 1#
2# Automatically generated make config: don't edit 2# Automatically generated make config: don't edit
3# Linux kernel version: 2.6.24 3# Linux kernel version: 2.6.25-rc1
4# Tue Feb 5 17:28:19 2008 4# Sun Feb 17 22:44:12 2008
5# 5#
6CONFIG_SPARC=y 6CONFIG_SPARC=y
7CONFIG_SPARC64=y 7CONFIG_SPARC64=y
@@ -10,6 +10,7 @@ CONFIG_GENERIC_CMOS_UPDATE=y
10CONFIG_GENERIC_CLOCKEVENTS=y 10CONFIG_GENERIC_CLOCKEVENTS=y
11CONFIG_64BIT=y 11CONFIG_64BIT=y
12CONFIG_MMU=y 12CONFIG_MMU=y
13CONFIG_IOMMU_HELPER=y
13CONFIG_QUICKLIST=y 14CONFIG_QUICKLIST=y
14CONFIG_STACKTRACE_SUPPORT=y 15CONFIG_STACKTRACE_SUPPORT=y
15CONFIG_LOCKDEP_SUPPORT=y 16CONFIG_LOCKDEP_SUPPORT=y
@@ -21,6 +22,7 @@ CONFIG_HAVE_SETUP_PER_CPU_AREA=y
21CONFIG_ARCH_NO_VIRT_TO_BUS=y 22CONFIG_ARCH_NO_VIRT_TO_BUS=y
22CONFIG_OF=y 23CONFIG_OF=y
23CONFIG_GENERIC_HARDIRQS_NO__DO_IRQ=y 24CONFIG_GENERIC_HARDIRQS_NO__DO_IRQ=y
25CONFIG_ARCH_SUPPORTS_AOUT=y
24CONFIG_SPARC64_PAGE_SIZE_8KB=y 26CONFIG_SPARC64_PAGE_SIZE_8KB=y
25# CONFIG_SPARC64_PAGE_SIZE_64KB is not set 27# CONFIG_SPARC64_PAGE_SIZE_64KB is not set
26# CONFIG_SPARC64_PAGE_SIZE_512KB is not set 28# CONFIG_SPARC64_PAGE_SIZE_512KB is not set
@@ -49,8 +51,6 @@ CONFIG_SYSVIPC_SYSCTL=y
49CONFIG_POSIX_MQUEUE=y 51CONFIG_POSIX_MQUEUE=y
50# CONFIG_BSD_PROCESS_ACCT is not set 52# CONFIG_BSD_PROCESS_ACCT is not set
51# CONFIG_TASKSTATS is not set 53# CONFIG_TASKSTATS is not set
52# CONFIG_USER_NS is not set
53# CONFIG_PID_NS is not set
54# CONFIG_AUDIT is not set 54# CONFIG_AUDIT is not set
55# CONFIG_IKCONFIG is not set 55# CONFIG_IKCONFIG is not set
56CONFIG_LOG_BUF_SHIFT=18 56CONFIG_LOG_BUF_SHIFT=18
@@ -60,6 +60,11 @@ CONFIG_FAIR_USER_SCHED=y
60# CONFIG_FAIR_CGROUP_SCHED is not set 60# CONFIG_FAIR_CGROUP_SCHED is not set
61CONFIG_SYSFS_DEPRECATED=y 61CONFIG_SYSFS_DEPRECATED=y
62CONFIG_RELAY=y 62CONFIG_RELAY=y
63CONFIG_NAMESPACES=y
64# CONFIG_UTS_NS is not set
65# CONFIG_IPC_NS is not set
66# CONFIG_USER_NS is not set
67# CONFIG_PID_NS is not set
63CONFIG_BLK_DEV_INITRD=y 68CONFIG_BLK_DEV_INITRD=y
64CONFIG_INITRAMFS_SOURCE="" 69CONFIG_INITRAMFS_SOURCE=""
65CONFIG_CC_OPTIMIZE_FOR_SIZE=y 70CONFIG_CC_OPTIMIZE_FOR_SIZE=y
@@ -74,6 +79,7 @@ CONFIG_HOTPLUG=y
74CONFIG_PRINTK=y 79CONFIG_PRINTK=y
75CONFIG_BUG=y 80CONFIG_BUG=y
76CONFIG_ELF_CORE=y 81CONFIG_ELF_CORE=y
82# CONFIG_COMPAT_BRK is not set
77CONFIG_BASE_FULL=y 83CONFIG_BASE_FULL=y
78CONFIG_FUTEX=y 84CONFIG_FUTEX=y
79CONFIG_ANON_INODES=y 85CONFIG_ANON_INODES=y
@@ -176,13 +182,13 @@ CONFIG_PCI_MSI=y
176CONFIG_SUN_OPENPROMFS=m 182CONFIG_SUN_OPENPROMFS=m
177CONFIG_SPARC32_COMPAT=y 183CONFIG_SPARC32_COMPAT=y
178CONFIG_COMPAT=y 184CONFIG_COMPAT=y
179CONFIG_BINFMT_ELF32=y
180# CONFIG_BINFMT_AOUT32 is not set 185# CONFIG_BINFMT_AOUT32 is not set
181 186
182# 187#
183# Executable file formats 188# Executable file formats
184# 189#
185CONFIG_BINFMT_ELF=y 190CONFIG_BINFMT_ELF=y
191CONFIG_COMPAT_BINFMT_ELF=y
186CONFIG_BINFMT_MISC=m 192CONFIG_BINFMT_MISC=m
187CONFIG_SOLARIS_EMUL=y 193CONFIG_SOLARIS_EMUL=y
188CONFIG_SCHED_SMT=y 194CONFIG_SCHED_SMT=y
@@ -354,6 +360,8 @@ CONFIG_MISC_DEVICES=y
354# CONFIG_EEPROM_93CX6 is not set 360# CONFIG_EEPROM_93CX6 is not set
355# CONFIG_SGI_IOC4 is not set 361# CONFIG_SGI_IOC4 is not set
356# CONFIG_TIFM_CORE is not set 362# CONFIG_TIFM_CORE is not set
363# CONFIG_ENCLOSURE_SERVICES is not set
364CONFIG_HAVE_IDE=y
357CONFIG_IDE=y 365CONFIG_IDE=y
358CONFIG_BLK_DEV_IDE=y 366CONFIG_BLK_DEV_IDE=y
359 367
@@ -376,6 +384,7 @@ CONFIG_IDE_PROC_FS=y
376# 384#
377CONFIG_IDE_GENERIC=y 385CONFIG_IDE_GENERIC=y
378# CONFIG_BLK_DEV_PLATFORM is not set 386# CONFIG_BLK_DEV_PLATFORM is not set
387CONFIG_BLK_DEV_IDEDMA_SFF=y
379 388
380# 389#
381# PCI IDE chipsets support 390# PCI IDE chipsets support
@@ -775,7 +784,6 @@ CONFIG_I2C_ALGOBIT=y
775# CONFIG_SENSORS_EEPROM is not set 784# CONFIG_SENSORS_EEPROM is not set
776# CONFIG_SENSORS_PCF8574 is not set 785# CONFIG_SENSORS_PCF8574 is not set
777# CONFIG_PCF8575 is not set 786# CONFIG_PCF8575 is not set
778# CONFIG_SENSORS_PCA9539 is not set
779# CONFIG_SENSORS_PCF8591 is not set 787# CONFIG_SENSORS_PCF8591 is not set
780# CONFIG_TPS65010 is not set 788# CONFIG_TPS65010 is not set
781# CONFIG_SENSORS_MAX6875 is not set 789# CONFIG_SENSORS_MAX6875 is not set
@@ -831,6 +839,7 @@ CONFIG_HWMON=y
831# CONFIG_SENSORS_SMSC47M1 is not set 839# CONFIG_SENSORS_SMSC47M1 is not set
832# CONFIG_SENSORS_SMSC47M192 is not set 840# CONFIG_SENSORS_SMSC47M192 is not set
833# CONFIG_SENSORS_SMSC47B397 is not set 841# CONFIG_SENSORS_SMSC47B397 is not set
842# CONFIG_SENSORS_ADS7828 is not set
834# CONFIG_SENSORS_THMC50 is not set 843# CONFIG_SENSORS_THMC50 is not set
835# CONFIG_SENSORS_VIA686A is not set 844# CONFIG_SENSORS_VIA686A is not set
836# CONFIG_SENSORS_VT1211 is not set 845# CONFIG_SENSORS_VT1211 is not set
@@ -840,9 +849,11 @@ CONFIG_HWMON=y
840# CONFIG_SENSORS_W83792D is not set 849# CONFIG_SENSORS_W83792D is not set
841# CONFIG_SENSORS_W83793 is not set 850# CONFIG_SENSORS_W83793 is not set
842# CONFIG_SENSORS_W83L785TS is not set 851# CONFIG_SENSORS_W83L785TS is not set
852# CONFIG_SENSORS_W83L786NG is not set
843# CONFIG_SENSORS_W83627HF is not set 853# CONFIG_SENSORS_W83627HF is not set
844# CONFIG_SENSORS_W83627EHF is not set 854# CONFIG_SENSORS_W83627EHF is not set
845# CONFIG_HWMON_DEBUG_CHIP is not set 855# CONFIG_HWMON_DEBUG_CHIP is not set
856# CONFIG_THERMAL is not set
846# CONFIG_WATCHDOG is not set 857# CONFIG_WATCHDOG is not set
847 858
848# 859#
@@ -1201,6 +1212,7 @@ CONFIG_USB_STORAGE=m
1201# CONFIG_USB_TEST is not set 1212# CONFIG_USB_TEST is not set
1202# CONFIG_USB_GADGET is not set 1213# CONFIG_USB_GADGET is not set
1203# CONFIG_MMC is not set 1214# CONFIG_MMC is not set
1215# CONFIG_MEMSTICK is not set
1204# CONFIG_NEW_LEDS is not set 1216# CONFIG_NEW_LEDS is not set
1205# CONFIG_INFINIBAND is not set 1217# CONFIG_INFINIBAND is not set
1206# CONFIG_RTC_CLASS is not set 1218# CONFIG_RTC_CLASS is not set
@@ -1242,12 +1254,10 @@ CONFIG_FS_POSIX_ACL=y
1242# CONFIG_XFS_FS is not set 1254# CONFIG_XFS_FS is not set
1243# CONFIG_GFS2_FS is not set 1255# CONFIG_GFS2_FS is not set
1244# CONFIG_OCFS2_FS is not set 1256# CONFIG_OCFS2_FS is not set
1245# CONFIG_MINIX_FS is not set 1257CONFIG_DNOTIFY=y
1246# CONFIG_ROMFS_FS is not set
1247CONFIG_INOTIFY=y 1258CONFIG_INOTIFY=y
1248CONFIG_INOTIFY_USER=y 1259CONFIG_INOTIFY_USER=y
1249# CONFIG_QUOTA is not set 1260# CONFIG_QUOTA is not set
1250CONFIG_DNOTIFY=y
1251# CONFIG_AUTOFS_FS is not set 1261# CONFIG_AUTOFS_FS is not set
1252# CONFIG_AUTOFS4_FS is not set 1262# CONFIG_AUTOFS4_FS is not set
1253# CONFIG_FUSE_FS is not set 1263# CONFIG_FUSE_FS is not set
@@ -1291,8 +1301,10 @@ CONFIG_HUGETLB_PAGE=y
1291# CONFIG_EFS_FS is not set 1301# CONFIG_EFS_FS is not set
1292# CONFIG_CRAMFS is not set 1302# CONFIG_CRAMFS is not set
1293# CONFIG_VXFS_FS is not set 1303# CONFIG_VXFS_FS is not set
1304# CONFIG_MINIX_FS is not set
1294# CONFIG_HPFS_FS is not set 1305# CONFIG_HPFS_FS is not set
1295# CONFIG_QNX4FS_FS is not set 1306# CONFIG_QNX4FS_FS is not set
1307# CONFIG_ROMFS_FS is not set
1296# CONFIG_SYSV_FS is not set 1308# CONFIG_SYSV_FS is not set
1297# CONFIG_UFS_FS is not set 1309# CONFIG_UFS_FS is not set
1298CONFIG_NETWORK_FILESYSTEMS=y 1310CONFIG_NETWORK_FILESYSTEMS=y
@@ -1370,6 +1382,7 @@ CONFIG_DETECT_SOFTLOCKUP=y
1370CONFIG_SCHEDSTATS=y 1382CONFIG_SCHEDSTATS=y
1371# CONFIG_TIMER_STATS is not set 1383# CONFIG_TIMER_STATS is not set
1372# CONFIG_SLUB_DEBUG_ON is not set 1384# CONFIG_SLUB_DEBUG_ON is not set
1385# CONFIG_SLUB_STATS is not set
1373# CONFIG_DEBUG_RT_MUTEXES is not set 1386# CONFIG_DEBUG_RT_MUTEXES is not set
1374# CONFIG_RT_MUTEX_TESTER is not set 1387# CONFIG_RT_MUTEX_TESTER is not set
1375# CONFIG_DEBUG_SPINLOCK is not set 1388# CONFIG_DEBUG_SPINLOCK is not set
@@ -1385,7 +1398,6 @@ CONFIG_DEBUG_BUGVERBOSE=y
1385# CONFIG_DEBUG_VM is not set 1398# CONFIG_DEBUG_VM is not set
1386# CONFIG_DEBUG_LIST is not set 1399# CONFIG_DEBUG_LIST is not set
1387# CONFIG_DEBUG_SG is not set 1400# CONFIG_DEBUG_SG is not set
1388CONFIG_FORCED_INLINING=y
1389# CONFIG_BOOT_PRINTK_DELAY is not set 1401# CONFIG_BOOT_PRINTK_DELAY is not set
1390# CONFIG_RCU_TORTURE_TEST is not set 1402# CONFIG_RCU_TORTURE_TEST is not set
1391# CONFIG_KPROBES_SANITY_TEST is not set 1403# CONFIG_KPROBES_SANITY_TEST is not set
@@ -1396,7 +1408,6 @@ CONFIG_FORCED_INLINING=y
1396# CONFIG_DEBUG_STACK_USAGE is not set 1408# CONFIG_DEBUG_STACK_USAGE is not set
1397# CONFIG_DEBUG_DCFLUSH is not set 1409# CONFIG_DEBUG_DCFLUSH is not set
1398# CONFIG_STACK_DEBUG is not set 1410# CONFIG_STACK_DEBUG is not set
1399# CONFIG_DEBUG_BOOTMEM is not set
1400# CONFIG_DEBUG_PAGEALLOC is not set 1411# CONFIG_DEBUG_PAGEALLOC is not set
1401 1412
1402# 1413#
diff --git a/arch/sparc64/kernel/hvtramp.S b/arch/sparc64/kernel/hvtramp.S
index b692e044a463..0236c43772fa 100644
--- a/arch/sparc64/kernel/hvtramp.S
+++ b/arch/sparc64/kernel/hvtramp.S
@@ -3,6 +3,8 @@
3 * Copyright (C) 2007 David S. Miller <davem@davemloft.net> 3 * Copyright (C) 2007 David S. Miller <davem@davemloft.net>
4 */ 4 */
5 5
6#include <linux/init.h>
7
6#include <asm/thread_info.h> 8#include <asm/thread_info.h>
7#include <asm/hypervisor.h> 9#include <asm/hypervisor.h>
8#include <asm/scratchpad.h> 10#include <asm/scratchpad.h>
@@ -13,7 +15,7 @@
13#include <asm/head.h> 15#include <asm/head.h>
14#include <asm/asi.h> 16#include <asm/asi.h>
15 17
16 .text 18 __CPUINIT
17 .align 8 19 .align 8
18 .globl hv_cpu_startup, hv_cpu_startup_end 20 .globl hv_cpu_startup, hv_cpu_startup_end
19 21
diff --git a/arch/sparc64/kernel/iommu.c b/arch/sparc64/kernel/iommu.c
index d3276ebcfb47..fbaab3497bfd 100644
--- a/arch/sparc64/kernel/iommu.c
+++ b/arch/sparc64/kernel/iommu.c
@@ -134,7 +134,8 @@ unsigned long iommu_range_alloc(struct device *dev,
134 else 134 else
135 boundary_size = ALIGN(1UL << 32, 1 << IO_PAGE_SHIFT); 135 boundary_size = ALIGN(1UL << 32, 1 << IO_PAGE_SHIFT);
136 136
137 n = iommu_area_alloc(arena->map, limit, start, npages, 0, 137 n = iommu_area_alloc(arena->map, limit, start, npages,
138 iommu->page_table_map_base >> IO_PAGE_SHIFT,
138 boundary_size >> IO_PAGE_SHIFT, 0); 139 boundary_size >> IO_PAGE_SHIFT, 0);
139 if (n == -1) { 140 if (n == -1) {
140 if (likely(pass < 1)) { 141 if (likely(pass < 1)) {
@@ -200,12 +201,11 @@ int iommu_table_init(struct iommu *iommu, int tsbsize,
200 /* Allocate and initialize the dummy page which we 201 /* Allocate and initialize the dummy page which we
201 * set inactive IO PTEs to point to. 202 * set inactive IO PTEs to point to.
202 */ 203 */
203 iommu->dummy_page = __get_free_pages(GFP_KERNEL, 0); 204 iommu->dummy_page = get_zeroed_page(GFP_KERNEL);
204 if (!iommu->dummy_page) { 205 if (!iommu->dummy_page) {
205 printk(KERN_ERR "IOMMU: Error, gfp(dummy_page) failed.\n"); 206 printk(KERN_ERR "IOMMU: Error, gfp(dummy_page) failed.\n");
206 goto out_free_map; 207 goto out_free_map;
207 } 208 }
208 memset((void *)iommu->dummy_page, 0, PAGE_SIZE);
209 iommu->dummy_page_pa = (unsigned long) __pa(iommu->dummy_page); 209 iommu->dummy_page_pa = (unsigned long) __pa(iommu->dummy_page);
210 210
211 /* Now allocate and setup the IOMMU page table itself. */ 211 /* Now allocate and setup the IOMMU page table itself. */
diff --git a/arch/sparc64/kernel/kprobes.c b/arch/sparc64/kernel/kprobes.c
index 34fc3ddd5002..f43b5d755354 100644
--- a/arch/sparc64/kernel/kprobes.c
+++ b/arch/sparc64/kernel/kprobes.c
@@ -465,8 +465,6 @@ void __kprobes jprobe_return(void)
465 465
466extern void jprobe_return_trap_instruction(void); 466extern void jprobe_return_trap_instruction(void);
467 467
468extern void __show_regs(struct pt_regs * regs);
469
470int __kprobes longjmp_break_handler(struct kprobe *p, struct pt_regs *regs) 468int __kprobes longjmp_break_handler(struct kprobe *p, struct pt_regs *regs)
471{ 469{
472 u32 *addr = (u32 *) regs->tpc; 470 u32 *addr = (u32 *) regs->tpc;
diff --git a/arch/sparc64/kernel/pci.c b/arch/sparc64/kernel/pci.c
index a61c38fe75ea..545356b00e2e 100644
--- a/arch/sparc64/kernel/pci.c
+++ b/arch/sparc64/kernel/pci.c
@@ -225,20 +225,6 @@ static int __init pci_controller_init(const char *model_name, int namelen, struc
225 return 0; 225 return 0;
226} 226}
227 227
228static int __init pci_is_controller(const char *model_name, int namelen, struct device_node *dp)
229{
230 int i;
231
232 for (i = 0; i < PCI_NUM_CONTROLLER_TYPES; i++) {
233 if (!strncmp(model_name,
234 pci_controller_table[i].model_name,
235 namelen)) {
236 return 1;
237 }
238 }
239 return 0;
240}
241
242static int __init pci_controller_scan(int (*handler)(const char *, int, struct device_node *)) 228static int __init pci_controller_scan(int (*handler)(const char *, int, struct device_node *))
243{ 229{
244 struct device_node *dp; 230 struct device_node *dp;
@@ -273,13 +259,6 @@ static int __init pci_controller_scan(int (*handler)(const char *, int, struct d
273 return count; 259 return count;
274} 260}
275 261
276
277/* Is there some PCI controller in the system? */
278int __init pcic_present(void)
279{
280 return pci_controller_scan(pci_is_controller);
281}
282
283/* Find each controller in the system, attach and initialize 262/* Find each controller in the system, attach and initialize
284 * software state structure for each and link into the 263 * software state structure for each and link into the
285 * pci_pbm_root. Setup the controller enough such 264 * pci_pbm_root. Setup the controller enough such
diff --git a/arch/sparc64/kernel/power.c b/arch/sparc64/kernel/power.c
index 850cdffdd69c..eae8ca2a6ba5 100644
--- a/arch/sparc64/kernel/power.c
+++ b/arch/sparc64/kernel/power.c
@@ -20,6 +20,7 @@
20#include <asm/of_device.h> 20#include <asm/of_device.h>
21#include <asm/io.h> 21#include <asm/io.h>
22#include <asm/sstate.h> 22#include <asm/sstate.h>
23#include <asm/reboot.h>
23 24
24#include <linux/unistd.h> 25#include <linux/unistd.h>
25 26
@@ -39,8 +40,6 @@ static irqreturn_t power_handler(int irq, void *dev_id)
39 return IRQ_HANDLED; 40 return IRQ_HANDLED;
40} 41}
41 42
42extern void machine_halt(void);
43extern void machine_alt_power_off(void);
44static void (*poweroff_method)(void) = machine_alt_power_off; 43static void (*poweroff_method)(void) = machine_alt_power_off;
45 44
46void machine_power_off(void) 45void machine_power_off(void)
diff --git a/arch/sparc64/kernel/process.c b/arch/sparc64/kernel/process.c
index 1b2379174988..2aafce7dfc0e 100644
--- a/arch/sparc64/kernel/process.c
+++ b/arch/sparc64/kernel/process.c
@@ -30,6 +30,7 @@
30#include <linux/tick.h> 30#include <linux/tick.h>
31#include <linux/init.h> 31#include <linux/init.h>
32#include <linux/cpu.h> 32#include <linux/cpu.h>
33#include <linux/elfcore.h>
33 34
34#include <asm/oplib.h> 35#include <asm/oplib.h>
35#include <asm/uaccess.h> 36#include <asm/uaccess.h>
@@ -47,6 +48,8 @@
47#include <asm/unistd.h> 48#include <asm/unistd.h>
48#include <asm/hypervisor.h> 49#include <asm/hypervisor.h>
49#include <asm/sstate.h> 50#include <asm/sstate.h>
51#include <asm/reboot.h>
52#include <asm/syscalls.h>
50 53
51/* #define VERBOSE_SHOWREGS */ 54/* #define VERBOSE_SHOWREGS */
52 55
@@ -113,16 +116,9 @@ void cpu_idle(void)
113 116
114extern char reboot_command []; 117extern char reboot_command [];
115 118
116extern void (*prom_palette)(int);
117extern void (*prom_keyboard)(void);
118
119void machine_halt(void) 119void machine_halt(void)
120{ 120{
121 sstate_halt(); 121 sstate_halt();
122 if (prom_palette)
123 prom_palette (1);
124 if (prom_keyboard)
125 prom_keyboard();
126 prom_halt(); 122 prom_halt();
127 panic("Halt failed!"); 123 panic("Halt failed!");
128} 124}
@@ -130,10 +126,6 @@ void machine_halt(void)
130void machine_alt_power_off(void) 126void machine_alt_power_off(void)
131{ 127{
132 sstate_poweroff(); 128 sstate_poweroff();
133 if (prom_palette)
134 prom_palette(1);
135 if (prom_keyboard)
136 prom_keyboard();
137 prom_halt_power_off(); 129 prom_halt_power_off();
138 panic("Power-off failed!"); 130 panic("Power-off failed!");
139} 131}
@@ -145,10 +137,6 @@ void machine_restart(char * cmd)
145 sstate_reboot(); 137 sstate_reboot();
146 p = strchr (reboot_command, '\n'); 138 p = strchr (reboot_command, '\n');
147 if (p) *p = 0; 139 if (p) *p = 0;
148 if (prom_palette)
149 prom_palette (1);
150 if (prom_keyboard)
151 prom_keyboard();
152 if (cmd) 140 if (cmd)
153 prom_reboot(cmd); 141 prom_reboot(cmd);
154 if (*reboot_command) 142 if (*reboot_command)
@@ -226,62 +214,6 @@ static void show_regwindow(struct pt_regs *regs)
226 print_symbol("I7: <%s>\n", rwk->ins[7]); 214 print_symbol("I7: <%s>\n", rwk->ins[7]);
227} 215}
228 216
229void show_stackframe(struct sparc_stackf *sf)
230{
231 unsigned long size;
232 unsigned long *stk;
233 int i;
234
235 printk("l0: %016lx l1: %016lx l2: %016lx l3: %016lx\n"
236 "l4: %016lx l5: %016lx l6: %016lx l7: %016lx\n",
237 sf->locals[0], sf->locals[1], sf->locals[2], sf->locals[3],
238 sf->locals[4], sf->locals[5], sf->locals[6], sf->locals[7]);
239 printk("i0: %016lx i1: %016lx i2: %016lx i3: %016lx\n"
240 "i4: %016lx i5: %016lx fp: %016lx ret_pc: %016lx\n",
241 sf->ins[0], sf->ins[1], sf->ins[2], sf->ins[3],
242 sf->ins[4], sf->ins[5], (unsigned long)sf->fp, sf->callers_pc);
243 printk("sp: %016lx x0: %016lx x1: %016lx x2: %016lx\n"
244 "x3: %016lx x4: %016lx x5: %016lx xx: %016lx\n",
245 (unsigned long)sf->structptr, sf->xargs[0], sf->xargs[1],
246 sf->xargs[2], sf->xargs[3], sf->xargs[4], sf->xargs[5],
247 sf->xxargs[0]);
248 size = ((unsigned long)sf->fp) - ((unsigned long)sf);
249 size -= STACKFRAME_SZ;
250 stk = (unsigned long *)((unsigned long)sf + STACKFRAME_SZ);
251 i = 0;
252 do {
253 printk("s%d: %016lx\n", i++, *stk++);
254 } while ((size -= sizeof(unsigned long)));
255}
256
257void show_stackframe32(struct sparc_stackf32 *sf)
258{
259 unsigned long size;
260 unsigned *stk;
261 int i;
262
263 printk("l0: %08x l1: %08x l2: %08x l3: %08x\n",
264 sf->locals[0], sf->locals[1], sf->locals[2], sf->locals[3]);
265 printk("l4: %08x l5: %08x l6: %08x l7: %08x\n",
266 sf->locals[4], sf->locals[5], sf->locals[6], sf->locals[7]);
267 printk("i0: %08x i1: %08x i2: %08x i3: %08x\n",
268 sf->ins[0], sf->ins[1], sf->ins[2], sf->ins[3]);
269 printk("i4: %08x i5: %08x fp: %08x ret_pc: %08x\n",
270 sf->ins[4], sf->ins[5], sf->fp, sf->callers_pc);
271 printk("sp: %08x x0: %08x x1: %08x x2: %08x\n"
272 "x3: %08x x4: %08x x5: %08x xx: %08x\n",
273 sf->structptr, sf->xargs[0], sf->xargs[1],
274 sf->xargs[2], sf->xargs[3], sf->xargs[4], sf->xargs[5],
275 sf->xxargs[0]);
276 size = ((unsigned long)sf->fp) - ((unsigned long)sf);
277 size -= STACKFRAME32_SZ;
278 stk = (unsigned *)((unsigned long)sf + STACKFRAME32_SZ);
279 i = 0;
280 do {
281 printk("s%d: %08x\n", i++, *stk++);
282 } while ((size -= sizeof(unsigned)));
283}
284
285#ifdef CONFIG_SMP 217#ifdef CONFIG_SMP
286static DEFINE_SPINLOCK(regdump_lock); 218static DEFINE_SPINLOCK(regdump_lock);
287#endif 219#endif
@@ -369,24 +301,6 @@ void show_regs(struct pt_regs *regs)
369#endif 301#endif
370} 302}
371 303
372void show_regs32(struct pt_regs32 *regs)
373{
374 printk("PSR: %08x PC: %08x NPC: %08x Y: %08x %s\n", regs->psr,
375 regs->pc, regs->npc, regs->y, print_tainted());
376 printk("g0: %08x g1: %08x g2: %08x g3: %08x ",
377 regs->u_regs[0], regs->u_regs[1], regs->u_regs[2],
378 regs->u_regs[3]);
379 printk("g4: %08x g5: %08x g6: %08x g7: %08x\n",
380 regs->u_regs[4], regs->u_regs[5], regs->u_regs[6],
381 regs->u_regs[7]);
382 printk("o0: %08x o1: %08x o2: %08x o3: %08x ",
383 regs->u_regs[8], regs->u_regs[9], regs->u_regs[10],
384 regs->u_regs[11]);
385 printk("o4: %08x o5: %08x sp: %08x ret_pc: %08x\n",
386 regs->u_regs[12], regs->u_regs[13], regs->u_regs[14],
387 regs->u_regs[15]);
388}
389
390unsigned long thread_saved_pc(struct task_struct *tsk) 304unsigned long thread_saved_pc(struct task_struct *tsk)
391{ 305{
392 struct thread_info *ti = task_thread_info(tsk); 306 struct thread_info *ti = task_thread_info(tsk);
diff --git a/arch/sparc64/kernel/prom.c b/arch/sparc64/kernel/prom.c
index a246e962e5a7..68964ddcde1e 100644
--- a/arch/sparc64/kernel/prom.c
+++ b/arch/sparc64/kernel/prom.c
@@ -1716,7 +1716,6 @@ static void __init of_console_init(void)
1716 1716
1717 of_console_device = dp; 1717 of_console_device = dp;
1718 1718
1719 prom_printf(msg, of_console_path);
1720 printk(msg, of_console_path); 1719 printk(msg, of_console_path);
1721} 1720}
1722 1721
diff --git a/arch/sparc64/kernel/setup.c b/arch/sparc64/kernel/setup.c
index 5964d8653ade..d036dbe72864 100644
--- a/arch/sparc64/kernel/setup.c
+++ b/arch/sparc64/kernel/setup.c
@@ -68,33 +68,22 @@ struct screen_info screen_info = {
68 16 /* orig-video-points */ 68 16 /* orig-video-points */
69}; 69};
70 70
71void (*prom_palette)(int);
72void (*prom_keyboard)(void);
73
74static void 71static void
75prom_console_write(struct console *con, const char *s, unsigned n) 72prom_console_write(struct console *con, const char *s, unsigned n)
76{ 73{
77 prom_write(s, n); 74 prom_write(s, n);
78} 75}
79 76
80unsigned int boot_flags = 0;
81#define BOOTME_DEBUG 0x1
82
83/* Exported for mm/init.c:paging_init. */ 77/* Exported for mm/init.c:paging_init. */
84unsigned long cmdline_memory_size = 0; 78unsigned long cmdline_memory_size = 0;
85 79
86static struct console prom_debug_console = { 80static struct console prom_early_console = {
87 .name = "debug", 81 .name = "earlyprom",
88 .write = prom_console_write, 82 .write = prom_console_write,
89 .flags = CON_PRINTBUFFER, 83 .flags = CON_PRINTBUFFER | CON_BOOT,
90 .index = -1, 84 .index = -1,
91}; 85};
92 86
93/* XXX Implement this at some point... */
94void kernel_enter_debugger(void)
95{
96}
97
98/* 87/*
99 * Process kernel command line switches that are specific to the 88 * Process kernel command line switches that are specific to the
100 * SPARC or that require special low-level processing. 89 * SPARC or that require special low-level processing.
@@ -103,8 +92,6 @@ static void __init process_switch(char c)
103{ 92{
104 switch (c) { 93 switch (c) {
105 case 'd': 94 case 'd':
106 boot_flags |= BOOTME_DEBUG;
107 break;
108 case 's': 95 case 's':
109 break; 96 break;
110 case 'h': 97 case 'h':
@@ -112,8 +99,7 @@ static void __init process_switch(char c)
112 prom_halt(); 99 prom_halt();
113 break; 100 break;
114 case 'p': 101 case 'p':
115 /* Use PROM debug console. */ 102 /* Just ignore, this behavior is now the default. */
116 register_console(&prom_debug_console);
117 break; 103 break;
118 case 'P': 104 case 'P':
119 /* Force UltraSPARC-III P-Cache on. */ 105 /* Force UltraSPARC-III P-Cache on. */
@@ -168,8 +154,6 @@ static void __init boot_flags_init(char *commands)
168 } 154 }
169} 155}
170 156
171extern void panic_setup(char *, int *);
172
173extern unsigned short root_flags; 157extern unsigned short root_flags;
174extern unsigned short root_dev; 158extern unsigned short root_dev;
175extern unsigned short ram_flags; 159extern unsigned short ram_flags;
@@ -296,6 +280,9 @@ void __init setup_arch(char **cmdline_p)
296 *cmdline_p = prom_getbootargs(); 280 *cmdline_p = prom_getbootargs();
297 strcpy(boot_command_line, *cmdline_p); 281 strcpy(boot_command_line, *cmdline_p);
298 282
283 boot_flags_init(*cmdline_p);
284 register_console(&prom_early_console);
285
299 if (tlb_type == hypervisor) 286 if (tlb_type == hypervisor)
300 printk("ARCH: SUN4V\n"); 287 printk("ARCH: SUN4V\n");
301 else 288 else
@@ -307,8 +294,6 @@ void __init setup_arch(char **cmdline_p)
307 conswitchp = &prom_con; 294 conswitchp = &prom_con;
308#endif 295#endif
309 296
310 boot_flags_init(*cmdline_p);
311
312 idprom_init(); 297 idprom_init();
313 298
314 if (!root_flags) 299 if (!root_flags)
diff --git a/arch/sparc64/kernel/smp.c b/arch/sparc64/kernel/smp.c
index a8052b76df41..cc454731d879 100644
--- a/arch/sparc64/kernel/smp.c
+++ b/arch/sparc64/kernel/smp.c
@@ -86,7 +86,7 @@ extern void setup_sparc64_timer(void);
86 86
87static volatile unsigned long callin_flag = 0; 87static volatile unsigned long callin_flag = 0;
88 88
89void __devinit smp_callin(void) 89void __cpuinit smp_callin(void)
90{ 90{
91 int cpuid = hard_smp_processor_id(); 91 int cpuid = hard_smp_processor_id();
92 92
diff --git a/arch/sparc64/kernel/sparc64_ksyms.c b/arch/sparc64/kernel/sparc64_ksyms.c
index 68db08930399..51fa773f38c9 100644
--- a/arch/sparc64/kernel/sparc64_ksyms.c
+++ b/arch/sparc64/kernel/sparc64_ksyms.c
@@ -85,7 +85,6 @@ extern int (*handle_mathemu)(struct pt_regs *, struct fpustate *);
85extern long sparc32_open(const char __user * filename, int flags, int mode); 85extern long sparc32_open(const char __user * filename, int flags, int mode);
86extern int io_remap_pfn_range(struct vm_area_struct *vma, unsigned long from, 86extern int io_remap_pfn_range(struct vm_area_struct *vma, unsigned long from,
87 unsigned long pfn, unsigned long size, pgprot_t prot); 87 unsigned long pfn, unsigned long size, pgprot_t prot);
88extern void (*prom_palette)(int);
89 88
90extern int __ashrdi3(int, int); 89extern int __ashrdi3(int, int);
91 90
@@ -355,5 +354,3 @@ EXPORT_SYMBOL(xor_niagara_2);
355EXPORT_SYMBOL(xor_niagara_3); 354EXPORT_SYMBOL(xor_niagara_3);
356EXPORT_SYMBOL(xor_niagara_4); 355EXPORT_SYMBOL(xor_niagara_4);
357EXPORT_SYMBOL(xor_niagara_5); 356EXPORT_SYMBOL(xor_niagara_5);
358
359EXPORT_SYMBOL(prom_palette);
diff --git a/arch/sparc64/kernel/trampoline.S b/arch/sparc64/kernel/trampoline.S
index 04e81dda13d0..4ae2e525d68b 100644
--- a/arch/sparc64/kernel/trampoline.S
+++ b/arch/sparc64/kernel/trampoline.S
@@ -4,6 +4,8 @@
4 * Copyright (C) 1997 David S. Miller (davem@caip.rutgers.edu) 4 * Copyright (C) 1997 David S. Miller (davem@caip.rutgers.edu)
5 */ 5 */
6 6
7#include <linux/init.h>
8
7#include <asm/head.h> 9#include <asm/head.h>
8#include <asm/asi.h> 10#include <asm/asi.h>
9#include <asm/lsu.h> 11#include <asm/lsu.h>
@@ -36,7 +38,7 @@ dtlb_load:
36tramp_stack: 38tramp_stack:
37 .skip TRAMP_STACK_SIZE 39 .skip TRAMP_STACK_SIZE
38 40
39 .text 41 __CPUINIT
40 .align 8 42 .align 8
41 .globl sparc64_cpu_startup, sparc64_cpu_startup_end 43 .globl sparc64_cpu_startup, sparc64_cpu_startup_end
42sparc64_cpu_startup: 44sparc64_cpu_startup:
diff --git a/arch/sparc64/kernel/traps.c b/arch/sparc64/kernel/traps.c
index 2b6abf633343..007f5317c0de 100644
--- a/arch/sparc64/kernel/traps.c
+++ b/arch/sparc64/kernel/traps.c
@@ -1791,8 +1791,6 @@ static const char *sun4v_err_type_to_str(u32 type)
1791 }; 1791 };
1792} 1792}
1793 1793
1794extern void __show_regs(struct pt_regs * regs);
1795
1796static void sun4v_log_error(struct pt_regs *regs, struct sun4v_error_entry *ent, int cpu, const char *pfx, atomic_t *ocnt) 1794static void sun4v_log_error(struct pt_regs *regs, struct sun4v_error_entry *ent, int cpu, const char *pfx, atomic_t *ocnt)
1797{ 1795{
1798 int cnt; 1796 int cnt;
diff --git a/arch/sparc64/kernel/unaligned.c b/arch/sparc64/kernel/unaligned.c
index dc7bf1b6321c..1a511e9f0d3e 100644
--- a/arch/sparc64/kernel/unaligned.c
+++ b/arch/sparc64/kernel/unaligned.c
@@ -7,6 +7,7 @@
7 */ 7 */
8 8
9 9
10#include <linux/jiffies.h>
10#include <linux/kernel.h> 11#include <linux/kernel.h>
11#include <linux/sched.h> 12#include <linux/sched.h>
12#include <linux/mm.h> 13#include <linux/mm.h>
@@ -283,7 +284,7 @@ static void log_unaligned(struct pt_regs *regs)
283{ 284{
284 static unsigned long count, last_time; 285 static unsigned long count, last_time;
285 286
286 if (jiffies - last_time > 5 * HZ) 287 if (time_after(jiffies, last_time + 5 * HZ))
287 count = 0; 288 count = 0;
288 if (count < 5) { 289 if (count < 5) {
289 last_time = jiffies; 290 last_time = jiffies;
diff --git a/arch/sparc64/mm/init.c b/arch/sparc64/mm/init.c
index e726c45645ff..9e6bca266d88 100644
--- a/arch/sparc64/mm/init.c
+++ b/arch/sparc64/mm/init.c
@@ -618,9 +618,9 @@ static void __init inherit_prom_mappings(void)
618 read_obp_translations(); 618 read_obp_translations();
619 619
620 /* Now fixup OBP's idea about where we really are mapped. */ 620 /* Now fixup OBP's idea about where we really are mapped. */
621 prom_printf("Remapping the kernel... "); 621 printk("Remapping the kernel... ");
622 remap_kernel(); 622 remap_kernel();
623 prom_printf("done.\n"); 623 printk("done.\n");
624} 624}
625 625
626void prom_world(int enter) 626void prom_world(int enter)
@@ -739,11 +739,6 @@ static unsigned long __init choose_bootmap_pfn(unsigned long start_pfn,
739 avoid_end = PAGE_ALIGN(initrd_end); 739 avoid_end = PAGE_ALIGN(initrd_end);
740#endif 740#endif
741 741
742#ifdef CONFIG_DEBUG_BOOTMEM
743 prom_printf("choose_bootmap_pfn: kern[%lx:%lx] avoid[%lx:%lx]\n",
744 kern_base, PAGE_ALIGN(kern_base + kern_size),
745 avoid_start, avoid_end);
746#endif
747 for (i = 0; i < pavail_ents; i++) { 742 for (i = 0; i < pavail_ents; i++) {
748 unsigned long start, end; 743 unsigned long start, end;
749 744
@@ -777,10 +772,6 @@ static unsigned long __init choose_bootmap_pfn(unsigned long start_pfn,
777 } 772 }
778 773
779 /* OK, it doesn't overlap anything, use it. */ 774 /* OK, it doesn't overlap anything, use it. */
780#ifdef CONFIG_DEBUG_BOOTMEM
781 prom_printf("choose_bootmap_pfn: Using %lx [%lx]\n",
782 start >> PAGE_SHIFT, start);
783#endif
784 return start >> PAGE_SHIFT; 775 return start >> PAGE_SHIFT;
785 } 776 }
786 } 777 }
@@ -920,10 +911,6 @@ static unsigned long __init bootmem_init(unsigned long *pages_avail,
920 unsigned long bootmap_pfn, bytes_avail, size; 911 unsigned long bootmap_pfn, bytes_avail, size;
921 int i; 912 int i;
922 913
923#ifdef CONFIG_DEBUG_BOOTMEM
924 prom_printf("bootmem_init: Scan pavail, ");
925#endif
926
927 bytes_avail = 0UL; 914 bytes_avail = 0UL;
928 for (i = 0; i < pavail_ents; i++) { 915 for (i = 0; i < pavail_ents; i++) {
929 end_of_phys_memory = pavail[i].phys_addr + 916 end_of_phys_memory = pavail[i].phys_addr +
@@ -970,33 +957,20 @@ static unsigned long __init bootmem_init(unsigned long *pages_avail,
970 957
971 bootmap_pfn = choose_bootmap_pfn(min_low_pfn, end_pfn); 958 bootmap_pfn = choose_bootmap_pfn(min_low_pfn, end_pfn);
972 959
973#ifdef CONFIG_DEBUG_BOOTMEM
974 prom_printf("init_bootmem(min[%lx], bootmap[%lx], max[%lx])\n",
975 min_low_pfn, bootmap_pfn, max_low_pfn);
976#endif
977 bootmap_size = init_bootmem_node(NODE_DATA(0), bootmap_pfn, 960 bootmap_size = init_bootmem_node(NODE_DATA(0), bootmap_pfn,
978 min_low_pfn, end_pfn); 961 min_low_pfn, end_pfn);
979 962
980 /* Now register the available physical memory with the 963 /* Now register the available physical memory with the
981 * allocator. 964 * allocator.
982 */ 965 */
983 for (i = 0; i < pavail_ents; i++) { 966 for (i = 0; i < pavail_ents; i++)
984#ifdef CONFIG_DEBUG_BOOTMEM
985 prom_printf("free_bootmem(pavail:%d): base[%lx] size[%lx]\n",
986 i, pavail[i].phys_addr, pavail[i].reg_size);
987#endif
988 free_bootmem(pavail[i].phys_addr, pavail[i].reg_size); 967 free_bootmem(pavail[i].phys_addr, pavail[i].reg_size);
989 }
990 968
991#ifdef CONFIG_BLK_DEV_INITRD 969#ifdef CONFIG_BLK_DEV_INITRD
992 if (initrd_start) { 970 if (initrd_start) {
993 size = initrd_end - initrd_start; 971 size = initrd_end - initrd_start;
994 972
995 /* Reserve the initrd image area. */ 973 /* Reserve the initrd image area. */
996#ifdef CONFIG_DEBUG_BOOTMEM
997 prom_printf("reserve_bootmem(initrd): base[%llx] size[%lx]\n",
998 initrd_start, initrd_end);
999#endif
1000 reserve_bootmem(initrd_start, size, BOOTMEM_DEFAULT); 974 reserve_bootmem(initrd_start, size, BOOTMEM_DEFAULT);
1001 975
1002 initrd_start += PAGE_OFFSET; 976 initrd_start += PAGE_OFFSET;
@@ -1004,9 +978,6 @@ static unsigned long __init bootmem_init(unsigned long *pages_avail,
1004 } 978 }
1005#endif 979#endif
1006 /* Reserve the kernel text/data/bss. */ 980 /* Reserve the kernel text/data/bss. */
1007#ifdef CONFIG_DEBUG_BOOTMEM
1008 prom_printf("reserve_bootmem(kernel): base[%lx] size[%lx]\n", kern_base, kern_size);
1009#endif
1010 reserve_bootmem(kern_base, kern_size, BOOTMEM_DEFAULT); 981 reserve_bootmem(kern_base, kern_size, BOOTMEM_DEFAULT);
1011 *pages_avail -= PAGE_ALIGN(kern_size) >> PAGE_SHIFT; 982 *pages_avail -= PAGE_ALIGN(kern_size) >> PAGE_SHIFT;
1012 983
@@ -1020,10 +991,6 @@ static unsigned long __init bootmem_init(unsigned long *pages_avail,
1020 * in free_all_bootmem. 991 * in free_all_bootmem.
1021 */ 992 */
1022 size = bootmap_size; 993 size = bootmap_size;
1023#ifdef CONFIG_DEBUG_BOOTMEM
1024 prom_printf("reserve_bootmem(bootmap): base[%lx] size[%lx]\n",
1025 (bootmap_pfn << PAGE_SHIFT), size);
1026#endif
1027 reserve_bootmem((bootmap_pfn << PAGE_SHIFT), size, BOOTMEM_DEFAULT); 994 reserve_bootmem((bootmap_pfn << PAGE_SHIFT), size, BOOTMEM_DEFAULT);
1028 995
1029 for (i = 0; i < pavail_ents; i++) { 996 for (i = 0; i < pavail_ents; i++) {
@@ -1031,10 +998,6 @@ static unsigned long __init bootmem_init(unsigned long *pages_avail,
1031 998
1032 start_pfn = pavail[i].phys_addr >> PAGE_SHIFT; 999 start_pfn = pavail[i].phys_addr >> PAGE_SHIFT;
1033 end_pfn = (start_pfn + (pavail[i].reg_size >> PAGE_SHIFT)); 1000 end_pfn = (start_pfn + (pavail[i].reg_size >> PAGE_SHIFT));
1034#ifdef CONFIG_DEBUG_BOOTMEM
1035 prom_printf("memory_present(0, %lx, %lx)\n",
1036 start_pfn, end_pfn);
1037#endif
1038 memory_present(0, start_pfn, end_pfn); 1001 memory_present(0, start_pfn, end_pfn);
1039 } 1002 }
1040 1003
@@ -1451,7 +1414,7 @@ void __init paging_init(void)
1451 zholes_size); 1414 zholes_size);
1452 } 1415 }
1453 1416
1454 prom_printf("Booting Linux...\n"); 1417 printk("Booting Linux...\n");
1455 1418
1456 central_probe(); 1419 central_probe();
1457 cpu_probe(); 1420 cpu_probe();
@@ -1549,10 +1512,6 @@ void __init mem_init(void)
1549 1512
1550 high_memory = __va(last_valid_pfn << PAGE_SHIFT); 1513 high_memory = __va(last_valid_pfn << PAGE_SHIFT);
1551 1514
1552#ifdef CONFIG_DEBUG_BOOTMEM
1553 prom_printf("mem_init: Calling free_all_bootmem().\n");
1554#endif
1555
1556 /* We subtract one to account for the mem_map_zero page 1515 /* We subtract one to account for the mem_map_zero page
1557 * allocated below. 1516 * allocated below.
1558 */ 1517 */
diff --git a/arch/sparc64/prom/misc.c b/arch/sparc64/prom/misc.c
index bbec7522826c..47a877a15abd 100644
--- a/arch/sparc64/prom/misc.c
+++ b/arch/sparc64/prom/misc.c
@@ -55,9 +55,6 @@ void prom_feval(const char *fstring)
55 P1275_INOUT(1, 1), fstring); 55 P1275_INOUT(1, 1), fstring);
56} 56}
57 57
58/* We want to do this more nicely some day. */
59extern void (*prom_palette)(int);
60
61#ifdef CONFIG_SMP 58#ifdef CONFIG_SMP
62extern void smp_capture(void); 59extern void smp_capture(void);
63extern void smp_release(void); 60extern void smp_release(void);
@@ -72,9 +69,6 @@ void prom_cmdline(void)
72 69
73 local_irq_save(flags); 70 local_irq_save(flags);
74 71
75 if (prom_palette)
76 prom_palette(1);
77
78#ifdef CONFIG_SMP 72#ifdef CONFIG_SMP
79 smp_capture(); 73 smp_capture();
80#endif 74#endif
@@ -85,9 +79,6 @@ void prom_cmdline(void)
85 smp_release(); 79 smp_release();
86#endif 80#endif
87 81
88 if (prom_palette)
89 prom_palette(0);
90
91 local_irq_restore(flags); 82 local_irq_restore(flags);
92} 83}
93 84
diff --git a/arch/um/defconfig b/arch/um/defconfig
index 59215bc264ef..6bd456f96f90 100644
--- a/arch/um/defconfig
+++ b/arch/um/defconfig
@@ -1,13 +1,22 @@
1# 1#
2# Automatically generated make config: don't edit 2# Automatically generated make config: don't edit
3# Linux kernel version: 2.6.17-rc3 3# Linux kernel version: 2.6.24
4# Fri Apr 28 09:31:20 2006 4# Thu Feb 7 11:48:55 2008
5# 5#
6CONFIG_DEFCONFIG_LIST="arch/$ARCH/defconfig"
6CONFIG_GENERIC_HARDIRQS=y 7CONFIG_GENERIC_HARDIRQS=y
7CONFIG_UML=y 8CONFIG_UML=y
8CONFIG_MMU=y 9CONFIG_MMU=y
10CONFIG_NO_IOMEM=y
11# CONFIG_TRACE_IRQFLAGS_SUPPORT is not set
12CONFIG_LOCKDEP_SUPPORT=y
13# CONFIG_STACKTRACE_SUPPORT is not set
9CONFIG_GENERIC_CALIBRATE_DELAY=y 14CONFIG_GENERIC_CALIBRATE_DELAY=y
15CONFIG_GENERIC_BUG=y
16CONFIG_GENERIC_TIME=y
17CONFIG_GENERIC_CLOCKEVENTS=y
10CONFIG_IRQ_RELEASE_METHOD=y 18CONFIG_IRQ_RELEASE_METHOD=y
19CONFIG_HZ=100
11 20
12# 21#
13# UML-specific options 22# UML-specific options
@@ -40,11 +49,13 @@ CONFIG_M686=y
40# CONFIG_MCYRIXIII is not set 49# CONFIG_MCYRIXIII is not set
41# CONFIG_MVIAC3_2 is not set 50# CONFIG_MVIAC3_2 is not set
42# CONFIG_MVIAC7 is not set 51# CONFIG_MVIAC7 is not set
52# CONFIG_MPSC is not set
53# CONFIG_MCORE2 is not set
54# CONFIG_GENERIC_CPU is not set
43# CONFIG_X86_GENERIC is not set 55# CONFIG_X86_GENERIC is not set
44CONFIG_X86_CMPXCHG=y 56CONFIG_X86_CMPXCHG=y
45CONFIG_X86_XADD=y
46CONFIG_X86_L1_CACHE_SHIFT=5 57CONFIG_X86_L1_CACHE_SHIFT=5
47CONFIG_RWSEM_XCHGADD_ALGORITHM=y 58CONFIG_X86_XADD=y
48CONFIG_X86_PPRO_FENCE=y 59CONFIG_X86_PPRO_FENCE=y
49CONFIG_X86_WP_WORKS_OK=y 60CONFIG_X86_WP_WORKS_OK=y
50CONFIG_X86_INVLPG=y 61CONFIG_X86_INVLPG=y
@@ -53,7 +64,12 @@ CONFIG_X86_POPAD_OK=y
53CONFIG_X86_GOOD_APIC=y 64CONFIG_X86_GOOD_APIC=y
54CONFIG_X86_USE_PPRO_CHECKSUM=y 65CONFIG_X86_USE_PPRO_CHECKSUM=y
55CONFIG_X86_TSC=y 66CONFIG_X86_TSC=y
67CONFIG_X86_CMOV=y
68CONFIG_X86_MINIMUM_CPU_FAMILY=4
69CONFIG_X86_DEBUGCTLMSR=y
56CONFIG_UML_X86=y 70CONFIG_UML_X86=y
71CONFIG_X86_32=y
72CONFIG_RWSEM_XCHGADD_ALGORITHM=y
57# CONFIG_64BIT is not set 73# CONFIG_64BIT is not set
58CONFIG_SEMAPHORE_SLEEPERS=y 74CONFIG_SEMAPHORE_SLEEPERS=y
59# CONFIG_3_LEVEL_PGTABLES is not set 75# CONFIG_3_LEVEL_PGTABLES is not set
@@ -67,13 +83,18 @@ CONFIG_FLATMEM_MANUAL=y
67CONFIG_FLATMEM=y 83CONFIG_FLATMEM=y
68CONFIG_FLAT_NODE_MEM_MAP=y 84CONFIG_FLAT_NODE_MEM_MAP=y
69# CONFIG_SPARSEMEM_STATIC is not set 85# CONFIG_SPARSEMEM_STATIC is not set
86# CONFIG_SPARSEMEM_VMEMMAP_ENABLE is not set
70CONFIG_SPLIT_PTLOCK_CPUS=4 87CONFIG_SPLIT_PTLOCK_CPUS=4
88# CONFIG_RESOURCES_64BIT is not set
89CONFIG_ZONE_DMA_FLAG=0
90CONFIG_VIRT_TO_BUS=y
71CONFIG_TICK_ONESHOT=y 91CONFIG_TICK_ONESHOT=y
72CONFIG_NO_HZ=y 92CONFIG_NO_HZ=y
73CONFIG_HIGH_RES_TIMERS=y 93CONFIG_HIGH_RES_TIMERS=y
94CONFIG_GENERIC_CLOCKEVENTS_BUILD=y
74CONFIG_LD_SCRIPT_DYN=y 95CONFIG_LD_SCRIPT_DYN=y
75CONFIG_NET=y
76CONFIG_BINFMT_ELF=y 96CONFIG_BINFMT_ELF=y
97# CONFIG_BINFMT_AOUT is not set
77CONFIG_BINFMT_MISC=m 98CONFIG_BINFMT_MISC=m
78CONFIG_HOSTFS=y 99CONFIG_HOSTFS=y
79# CONFIG_HPPFS is not set 100# CONFIG_HPPFS is not set
@@ -83,31 +104,38 @@ CONFIG_MAGIC_SYSRQ=y
83CONFIG_KERNEL_STACK_ORDER=0 104CONFIG_KERNEL_STACK_ORDER=0
84 105
85# 106#
86# Code maturity level options 107# General setup
87# 108#
88CONFIG_EXPERIMENTAL=y 109CONFIG_EXPERIMENTAL=y
89CONFIG_BROKEN_ON_SMP=y 110CONFIG_BROKEN_ON_SMP=y
90CONFIG_INIT_ENV_ARG_LIMIT=32 111CONFIG_INIT_ENV_ARG_LIMIT=128
91
92#
93# General setup
94#
95CONFIG_LOCALVERSION="" 112CONFIG_LOCALVERSION=""
96CONFIG_LOCALVERSION_AUTO=y 113CONFIG_LOCALVERSION_AUTO=y
97CONFIG_SWAP=y 114CONFIG_SWAP=y
98CONFIG_SYSVIPC=y 115CONFIG_SYSVIPC=y
116CONFIG_SYSVIPC_SYSCTL=y
99CONFIG_POSIX_MQUEUE=y 117CONFIG_POSIX_MQUEUE=y
100CONFIG_BSD_PROCESS_ACCT=y 118CONFIG_BSD_PROCESS_ACCT=y
101# CONFIG_BSD_PROCESS_ACCT_V3 is not set 119# CONFIG_BSD_PROCESS_ACCT_V3 is not set
102CONFIG_SYSCTL=y 120# CONFIG_TASKSTATS is not set
121# CONFIG_USER_NS is not set
122# CONFIG_PID_NS is not set
103# CONFIG_AUDIT is not set 123# CONFIG_AUDIT is not set
104CONFIG_IKCONFIG=y 124CONFIG_IKCONFIG=y
105CONFIG_IKCONFIG_PROC=y 125CONFIG_IKCONFIG_PROC=y
126CONFIG_LOG_BUF_SHIFT=14
127# CONFIG_CGROUPS is not set
128CONFIG_FAIR_GROUP_SCHED=y
129CONFIG_FAIR_USER_SCHED=y
130# CONFIG_FAIR_CGROUP_SCHED is not set
131CONFIG_SYSFS_DEPRECATED=y
106# CONFIG_RELAY is not set 132# CONFIG_RELAY is not set
107CONFIG_INITRAMFS_SOURCE="" 133# CONFIG_BLK_DEV_INITRD is not set
108CONFIG_UID16=y
109CONFIG_CC_OPTIMIZE_FOR_SIZE=y 134CONFIG_CC_OPTIMIZE_FOR_SIZE=y
135CONFIG_SYSCTL=y
110# CONFIG_EMBEDDED is not set 136# CONFIG_EMBEDDED is not set
137CONFIG_UID16=y
138CONFIG_SYSCTL_SYSCALL=y
111CONFIG_KALLSYMS=y 139CONFIG_KALLSYMS=y
112# CONFIG_KALLSYMS_ALL is not set 140# CONFIG_KALLSYMS_ALL is not set
113CONFIG_KALLSYMS_EXTRA_PASS=y 141CONFIG_KALLSYMS_EXTRA_PASS=y
@@ -117,29 +145,36 @@ CONFIG_BUG=y
117CONFIG_ELF_CORE=y 145CONFIG_ELF_CORE=y
118CONFIG_BASE_FULL=y 146CONFIG_BASE_FULL=y
119CONFIG_FUTEX=y 147CONFIG_FUTEX=y
148CONFIG_ANON_INODES=y
120CONFIG_EPOLL=y 149CONFIG_EPOLL=y
150CONFIG_SIGNALFD=y
151CONFIG_TIMERFD=y
152CONFIG_EVENTFD=y
121CONFIG_SHMEM=y 153CONFIG_SHMEM=y
154CONFIG_VM_EVENT_COUNTERS=y
122CONFIG_SLAB=y 155CONFIG_SLAB=y
156# CONFIG_SLUB is not set
157# CONFIG_SLOB is not set
158# CONFIG_PROFILING is not set
159# CONFIG_MARKERS is not set
160# CONFIG_HAVE_OPROFILE is not set
161# CONFIG_HAVE_KPROBES is not set
162CONFIG_PROC_PAGE_MONITOR=y
163CONFIG_SLABINFO=y
164CONFIG_RT_MUTEXES=y
123# CONFIG_TINY_SHMEM is not set 165# CONFIG_TINY_SHMEM is not set
124CONFIG_BASE_SMALL=0 166CONFIG_BASE_SMALL=0
125# CONFIG_SLOB is not set
126
127#
128# Loadable module support
129#
130CONFIG_MODULES=y 167CONFIG_MODULES=y
131CONFIG_MODULE_UNLOAD=y 168CONFIG_MODULE_UNLOAD=y
132# CONFIG_MODULE_FORCE_UNLOAD is not set 169# CONFIG_MODULE_FORCE_UNLOAD is not set
133# CONFIG_MODVERSIONS is not set 170# CONFIG_MODVERSIONS is not set
134# CONFIG_MODULE_SRCVERSION_ALL is not set 171# CONFIG_MODULE_SRCVERSION_ALL is not set
135CONFIG_KMOD=y 172CONFIG_KMOD=y
136 173CONFIG_BLOCK=y
137#
138# Block layer
139#
140# CONFIG_LBD is not set 174# CONFIG_LBD is not set
141# CONFIG_BLK_DEV_IO_TRACE is not set 175# CONFIG_BLK_DEV_IO_TRACE is not set
142# CONFIG_LSF is not set 176# CONFIG_LSF is not set
177# CONFIG_BLK_DEV_BSG is not set
143 178
144# 179#
145# IO Schedulers 180# IO Schedulers
@@ -153,19 +188,16 @@ CONFIG_DEFAULT_AS=y
153# CONFIG_DEFAULT_CFQ is not set 188# CONFIG_DEFAULT_CFQ is not set
154# CONFIG_DEFAULT_NOOP is not set 189# CONFIG_DEFAULT_NOOP is not set
155CONFIG_DEFAULT_IOSCHED="anticipatory" 190CONFIG_DEFAULT_IOSCHED="anticipatory"
156 191CONFIG_CLASSIC_RCU=y
157# 192# CONFIG_PREEMPT_RCU is not set
158# Block devices 193CONFIG_BLK_DEV=y
159#
160CONFIG_BLK_DEV_UBD=y 194CONFIG_BLK_DEV_UBD=y
161# CONFIG_BLK_DEV_UBD_SYNC is not set 195# CONFIG_BLK_DEV_UBD_SYNC is not set
162CONFIG_BLK_DEV_COW_COMMON=y 196CONFIG_BLK_DEV_COW_COMMON=y
163# CONFIG_MMAPPER is not set
164CONFIG_BLK_DEV_LOOP=m 197CONFIG_BLK_DEV_LOOP=m
165# CONFIG_BLK_DEV_CRYPTOLOOP is not set 198# CONFIG_BLK_DEV_CRYPTOLOOP is not set
166CONFIG_BLK_DEV_NBD=m 199CONFIG_BLK_DEV_NBD=m
167# CONFIG_BLK_DEV_RAM is not set 200# CONFIG_BLK_DEV_RAM is not set
168# CONFIG_BLK_DEV_INITRD is not set
169# CONFIG_ATA_OVER_ETH is not set 201# CONFIG_ATA_OVER_ETH is not set
170 202
171# 203#
@@ -185,32 +217,43 @@ CONFIG_CON_CHAN="xterm"
185CONFIG_SSL_CHAN="pts" 217CONFIG_SSL_CHAN="pts"
186CONFIG_UNIX98_PTYS=y 218CONFIG_UNIX98_PTYS=y
187CONFIG_LEGACY_PTYS=y 219CONFIG_LEGACY_PTYS=y
220# CONFIG_RAW_DRIVER is not set
188CONFIG_LEGACY_PTY_COUNT=32 221CONFIG_LEGACY_PTY_COUNT=32
189# CONFIG_WATCHDOG is not set 222# CONFIG_WATCHDOG is not set
190CONFIG_UML_SOUND=m 223CONFIG_UML_SOUND=m
191CONFIG_SOUND=m 224CONFIG_SOUND=m
192CONFIG_HOSTAUDIO=m 225CONFIG_HOSTAUDIO=m
226# CONFIG_HW_RANDOM is not set
193CONFIG_UML_RANDOM=y 227CONFIG_UML_RANDOM=y
228# CONFIG_MMAPPER is not set
194 229
195# 230#
196# Generic Driver Options 231# Generic Driver Options
197# 232#
233CONFIG_UEVENT_HELPER_PATH="/sbin/hotplug"
198CONFIG_STANDALONE=y 234CONFIG_STANDALONE=y
199CONFIG_PREVENT_FIRMWARE_BUILD=y 235CONFIG_PREVENT_FIRMWARE_BUILD=y
200# CONFIG_FW_LOADER is not set 236# CONFIG_FW_LOADER is not set
201# CONFIG_DEBUG_DRIVER is not set 237# CONFIG_DEBUG_DRIVER is not set
238# CONFIG_DEBUG_DEVRES is not set
239# CONFIG_SYS_HYPERVISOR is not set
202 240
203# 241#
204# Networking 242# Networking
205# 243#
244CONFIG_NET=y
206 245
207# 246#
208# Networking options 247# Networking options
209# 248#
210# CONFIG_NETDEBUG is not set
211CONFIG_PACKET=y 249CONFIG_PACKET=y
212CONFIG_PACKET_MMAP=y 250CONFIG_PACKET_MMAP=y
213CONFIG_UNIX=y 251CONFIG_UNIX=y
252CONFIG_XFRM=y
253# CONFIG_XFRM_USER is not set
254# CONFIG_XFRM_SUB_POLICY is not set
255# CONFIG_XFRM_MIGRATE is not set
256# CONFIG_XFRM_STATISTICS is not set
214# CONFIG_NET_KEY is not set 257# CONFIG_NET_KEY is not set
215CONFIG_INET=y 258CONFIG_INET=y
216# CONFIG_IP_MULTICAST is not set 259# CONFIG_IP_MULTICAST is not set
@@ -226,28 +269,23 @@ CONFIG_IP_FIB_HASH=y
226# CONFIG_INET_IPCOMP is not set 269# CONFIG_INET_IPCOMP is not set
227# CONFIG_INET_XFRM_TUNNEL is not set 270# CONFIG_INET_XFRM_TUNNEL is not set
228# CONFIG_INET_TUNNEL is not set 271# CONFIG_INET_TUNNEL is not set
272CONFIG_INET_XFRM_MODE_TRANSPORT=y
273CONFIG_INET_XFRM_MODE_TUNNEL=y
274CONFIG_INET_XFRM_MODE_BEET=y
275# CONFIG_INET_LRO is not set
229CONFIG_INET_DIAG=y 276CONFIG_INET_DIAG=y
230CONFIG_INET_TCP_DIAG=y 277CONFIG_INET_TCP_DIAG=y
231# CONFIG_TCP_CONG_ADVANCED is not set 278# CONFIG_TCP_CONG_ADVANCED is not set
232CONFIG_TCP_CONG_BIC=y 279CONFIG_TCP_CONG_CUBIC=y
280CONFIG_DEFAULT_TCP_CONG="cubic"
281# CONFIG_TCP_MD5SIG is not set
233# CONFIG_IPV6 is not set 282# CONFIG_IPV6 is not set
234# CONFIG_INET6_XFRM_TUNNEL is not set 283# CONFIG_INET6_XFRM_TUNNEL is not set
235# CONFIG_INET6_TUNNEL is not set 284# CONFIG_INET6_TUNNEL is not set
285# CONFIG_NETWORK_SECMARK is not set
236# CONFIG_NETFILTER is not set 286# CONFIG_NETFILTER is not set
237
238#
239# DCCP Configuration (EXPERIMENTAL)
240#
241# CONFIG_IP_DCCP is not set 287# CONFIG_IP_DCCP is not set
242
243#
244# SCTP Configuration (EXPERIMENTAL)
245#
246# CONFIG_IP_SCTP is not set 288# CONFIG_IP_SCTP is not set
247
248#
249# TIPC Configuration (EXPERIMENTAL)
250#
251# CONFIG_TIPC is not set 289# CONFIG_TIPC is not set
252# CONFIG_ATM is not set 290# CONFIG_ATM is not set
253# CONFIG_BRIDGE is not set 291# CONFIG_BRIDGE is not set
@@ -258,13 +296,8 @@ CONFIG_TCP_CONG_BIC=y
258# CONFIG_ATALK is not set 296# CONFIG_ATALK is not set
259# CONFIG_X25 is not set 297# CONFIG_X25 is not set
260# CONFIG_LAPB is not set 298# CONFIG_LAPB is not set
261# CONFIG_NET_DIVERT is not set
262# CONFIG_ECONET is not set 299# CONFIG_ECONET is not set
263# CONFIG_WAN_ROUTER is not set 300# CONFIG_WAN_ROUTER is not set
264
265#
266# QoS and/or fair queueing
267#
268# CONFIG_NET_SCHED is not set 301# CONFIG_NET_SCHED is not set
269 302
270# 303#
@@ -272,9 +305,20 @@ CONFIG_TCP_CONG_BIC=y
272# 305#
273# CONFIG_NET_PKTGEN is not set 306# CONFIG_NET_PKTGEN is not set
274# CONFIG_HAMRADIO is not set 307# CONFIG_HAMRADIO is not set
308# CONFIG_CAN is not set
275# CONFIG_IRDA is not set 309# CONFIG_IRDA is not set
276# CONFIG_BT is not set 310# CONFIG_BT is not set
311# CONFIG_AF_RXRPC is not set
312
313#
314# Wireless
315#
316# CONFIG_CFG80211 is not set
317# CONFIG_WIRELESS_EXT is not set
318# CONFIG_MAC80211 is not set
277# CONFIG_IEEE80211 is not set 319# CONFIG_IEEE80211 is not set
320# CONFIG_RFKILL is not set
321# CONFIG_NET_9P is not set
278 322
279# 323#
280# UML Network Devices 324# UML Network Devices
@@ -284,31 +328,24 @@ CONFIG_UML_NET_ETHERTAP=y
284CONFIG_UML_NET_TUNTAP=y 328CONFIG_UML_NET_TUNTAP=y
285CONFIG_UML_NET_SLIP=y 329CONFIG_UML_NET_SLIP=y
286CONFIG_UML_NET_DAEMON=y 330CONFIG_UML_NET_DAEMON=y
331# CONFIG_UML_NET_VDE is not set
287CONFIG_UML_NET_MCAST=y 332CONFIG_UML_NET_MCAST=y
288# CONFIG_UML_NET_PCAP is not set 333# CONFIG_UML_NET_PCAP is not set
289CONFIG_UML_NET_SLIRP=y 334CONFIG_UML_NET_SLIRP=y
290
291#
292# Network device support
293#
294CONFIG_NETDEVICES=y 335CONFIG_NETDEVICES=y
336# CONFIG_NETDEVICES_MULTIQUEUE is not set
295CONFIG_DUMMY=m 337CONFIG_DUMMY=m
296# CONFIG_BONDING is not set 338# CONFIG_BONDING is not set
339# CONFIG_MACVLAN is not set
297# CONFIG_EQUALIZER is not set 340# CONFIG_EQUALIZER is not set
298CONFIG_TUN=m 341CONFIG_TUN=m
342# CONFIG_VETH is not set
299 343
300# 344#
301# PHY device support 345# Wireless LAN
302#
303
304#
305# Wireless LAN (non-hamradio)
306#
307# CONFIG_NET_RADIO is not set
308
309#
310# Wan interfaces
311# 346#
347# CONFIG_WLAN_PRE80211 is not set
348# CONFIG_WLAN_80211 is not set
312# CONFIG_WAN is not set 349# CONFIG_WAN is not set
313CONFIG_PPP=m 350CONFIG_PPP=m
314# CONFIG_PPP_MULTILINK is not set 351# CONFIG_PPP_MULTILINK is not set
@@ -319,18 +356,15 @@ CONFIG_PPP=m
319# CONFIG_PPP_BSDCOMP is not set 356# CONFIG_PPP_BSDCOMP is not set
320# CONFIG_PPP_MPPE is not set 357# CONFIG_PPP_MPPE is not set
321# CONFIG_PPPOE is not set 358# CONFIG_PPPOE is not set
359# CONFIG_PPPOL2TP is not set
322CONFIG_SLIP=m 360CONFIG_SLIP=m
323# CONFIG_SLIP_COMPRESSED is not set 361# CONFIG_SLIP_COMPRESSED is not set
362CONFIG_SLHC=m
324# CONFIG_SLIP_SMART is not set 363# CONFIG_SLIP_SMART is not set
325# CONFIG_SLIP_MODE_SLIP6 is not set 364# CONFIG_SLIP_MODE_SLIP6 is not set
326# CONFIG_SHAPER is not set
327# CONFIG_NETCONSOLE is not set 365# CONFIG_NETCONSOLE is not set
328# CONFIG_NETPOLL is not set 366# CONFIG_NETPOLL is not set
329# CONFIG_NET_POLL_CONTROLLER is not set 367# CONFIG_NET_POLL_CONTROLLER is not set
330
331#
332# Connector - unified userspace <-> kernelspace linker
333#
334# CONFIG_CONNECTOR is not set 368# CONFIG_CONNECTOR is not set
335 369
336# 370#
@@ -341,8 +375,8 @@ CONFIG_EXT2_FS=y
341# CONFIG_EXT2_FS_XIP is not set 375# CONFIG_EXT2_FS_XIP is not set
342CONFIG_EXT3_FS=y 376CONFIG_EXT3_FS=y
343# CONFIG_EXT3_FS_XATTR is not set 377# CONFIG_EXT3_FS_XATTR is not set
378# CONFIG_EXT4DEV_FS is not set
344CONFIG_JBD=y 379CONFIG_JBD=y
345# CONFIG_JBD_DEBUG is not set
346CONFIG_REISERFS_FS=y 380CONFIG_REISERFS_FS=y
347# CONFIG_REISERFS_CHECK is not set 381# CONFIG_REISERFS_CHECK is not set
348# CONFIG_REISERFS_PROC_INFO is not set 382# CONFIG_REISERFS_PROC_INFO is not set
@@ -350,11 +384,15 @@ CONFIG_REISERFS_FS=y
350# CONFIG_JFS_FS is not set 384# CONFIG_JFS_FS is not set
351# CONFIG_FS_POSIX_ACL is not set 385# CONFIG_FS_POSIX_ACL is not set
352# CONFIG_XFS_FS is not set 386# CONFIG_XFS_FS is not set
387# CONFIG_GFS2_FS is not set
353# CONFIG_OCFS2_FS is not set 388# CONFIG_OCFS2_FS is not set
354# CONFIG_MINIX_FS is not set 389# CONFIG_MINIX_FS is not set
355# CONFIG_ROMFS_FS is not set 390# CONFIG_ROMFS_FS is not set
356CONFIG_INOTIFY=y 391CONFIG_INOTIFY=y
392CONFIG_INOTIFY_USER=y
357CONFIG_QUOTA=y 393CONFIG_QUOTA=y
394# CONFIG_QUOTA_NETLINK_INTERFACE is not set
395CONFIG_PRINT_QUOTA_WARNING=y
358# CONFIG_QFMT_V1 is not set 396# CONFIG_QFMT_V1 is not set
359# CONFIG_QFMT_V2 is not set 397# CONFIG_QFMT_V2 is not set
360CONFIG_QUOTACTL=y 398CONFIG_QUOTACTL=y
@@ -383,10 +421,11 @@ CONFIG_JOLIET=y
383# 421#
384CONFIG_PROC_FS=y 422CONFIG_PROC_FS=y
385CONFIG_PROC_KCORE=y 423CONFIG_PROC_KCORE=y
424CONFIG_PROC_SYSCTL=y
386CONFIG_SYSFS=y 425CONFIG_SYSFS=y
387CONFIG_TMPFS=y 426CONFIG_TMPFS=y
427# CONFIG_TMPFS_POSIX_ACL is not set
388# CONFIG_HUGETLB_PAGE is not set 428# CONFIG_HUGETLB_PAGE is not set
389CONFIG_RAMFS=y
390# CONFIG_CONFIGFS_FS is not set 429# CONFIG_CONFIGFS_FS is not set
391 430
392# 431#
@@ -405,10 +444,7 @@ CONFIG_RAMFS=y
405# CONFIG_QNX4FS_FS is not set 444# CONFIG_QNX4FS_FS is not set
406# CONFIG_SYSV_FS is not set 445# CONFIG_SYSV_FS is not set
407# CONFIG_UFS_FS is not set 446# CONFIG_UFS_FS is not set
408 447CONFIG_NETWORK_FILESYSTEMS=y
409#
410# Network File Systems
411#
412# CONFIG_NFS_FS is not set 448# CONFIG_NFS_FS is not set
413# CONFIG_NFSD is not set 449# CONFIG_NFSD is not set
414# CONFIG_SMB_FS is not set 450# CONFIG_SMB_FS is not set
@@ -416,17 +452,12 @@ CONFIG_RAMFS=y
416# CONFIG_NCP_FS is not set 452# CONFIG_NCP_FS is not set
417# CONFIG_CODA_FS is not set 453# CONFIG_CODA_FS is not set
418# CONFIG_AFS_FS is not set 454# CONFIG_AFS_FS is not set
419# CONFIG_9P_FS is not set
420 455
421# 456#
422# Partition Types 457# Partition Types
423# 458#
424# CONFIG_PARTITION_ADVANCED is not set 459# CONFIG_PARTITION_ADVANCED is not set
425CONFIG_MSDOS_PARTITION=y 460CONFIG_MSDOS_PARTITION=y
426
427#
428# Native Language Support
429#
430CONFIG_NLS=y 461CONFIG_NLS=y
431CONFIG_NLS_DEFAULT="iso8859-1" 462CONFIG_NLS_DEFAULT="iso8859-1"
432# CONFIG_NLS_CODEPAGE_437 is not set 463# CONFIG_NLS_CODEPAGE_437 is not set
@@ -467,33 +498,83 @@ CONFIG_NLS_DEFAULT="iso8859-1"
467# CONFIG_NLS_KOI8_R is not set 498# CONFIG_NLS_KOI8_R is not set
468# CONFIG_NLS_KOI8_U is not set 499# CONFIG_NLS_KOI8_U is not set
469# CONFIG_NLS_UTF8 is not set 500# CONFIG_NLS_UTF8 is not set
501# CONFIG_DLM is not set
470 502
471# 503#
472# Security options 504# Security options
473# 505#
474# CONFIG_KEYS is not set 506# CONFIG_KEYS is not set
475# CONFIG_SECURITY is not set 507# CONFIG_SECURITY is not set
476 508# CONFIG_SECURITY_FILE_CAPABILITIES is not set
477# 509CONFIG_CRYPTO=y
478# Cryptographic options 510# CONFIG_CRYPTO_SEQIV is not set
479# 511# CONFIG_CRYPTO_MANAGER is not set
480# CONFIG_CRYPTO is not set 512# CONFIG_CRYPTO_HMAC is not set
481 513# CONFIG_CRYPTO_XCBC is not set
482# 514# CONFIG_CRYPTO_NULL is not set
483# Hardware crypto devices 515# CONFIG_CRYPTO_MD4 is not set
484# 516# CONFIG_CRYPTO_MD5 is not set
517# CONFIG_CRYPTO_SHA1 is not set
518# CONFIG_CRYPTO_SHA256 is not set
519# CONFIG_CRYPTO_SHA512 is not set
520# CONFIG_CRYPTO_WP512 is not set
521# CONFIG_CRYPTO_TGR192 is not set
522# CONFIG_CRYPTO_GF128MUL is not set
523# CONFIG_CRYPTO_ECB is not set
524# CONFIG_CRYPTO_CBC is not set
525# CONFIG_CRYPTO_PCBC is not set
526# CONFIG_CRYPTO_LRW is not set
527# CONFIG_CRYPTO_XTS is not set
528# CONFIG_CRYPTO_CTR is not set
529# CONFIG_CRYPTO_GCM is not set
530# CONFIG_CRYPTO_CCM is not set
531# CONFIG_CRYPTO_CRYPTD is not set
532# CONFIG_CRYPTO_DES is not set
533# CONFIG_CRYPTO_FCRYPT is not set
534# CONFIG_CRYPTO_BLOWFISH is not set
535# CONFIG_CRYPTO_TWOFISH is not set
536# CONFIG_CRYPTO_TWOFISH_586 is not set
537# CONFIG_CRYPTO_SERPENT is not set
538# CONFIG_CRYPTO_AES is not set
539# CONFIG_CRYPTO_AES_586 is not set
540# CONFIG_CRYPTO_CAST5 is not set
541# CONFIG_CRYPTO_CAST6 is not set
542# CONFIG_CRYPTO_TEA is not set
543# CONFIG_CRYPTO_ARC4 is not set
544# CONFIG_CRYPTO_KHAZAD is not set
545# CONFIG_CRYPTO_ANUBIS is not set
546# CONFIG_CRYPTO_SEED is not set
547# CONFIG_CRYPTO_SALSA20 is not set
548# CONFIG_CRYPTO_SALSA20_586 is not set
549# CONFIG_CRYPTO_DEFLATE is not set
550# CONFIG_CRYPTO_MICHAEL_MIC is not set
551# CONFIG_CRYPTO_CRC32C is not set
552# CONFIG_CRYPTO_CAMELLIA is not set
553# CONFIG_CRYPTO_TEST is not set
554# CONFIG_CRYPTO_AUTHENC is not set
555# CONFIG_CRYPTO_LZO is not set
556CONFIG_CRYPTO_HW=y
485 557
486# 558#
487# Library routines 559# Library routines
488# 560#
561CONFIG_BITREVERSE=m
489# CONFIG_CRC_CCITT is not set 562# CONFIG_CRC_CCITT is not set
490# CONFIG_CRC16 is not set 563# CONFIG_CRC16 is not set
564# CONFIG_CRC_ITU_T is not set
491CONFIG_CRC32=m 565CONFIG_CRC32=m
566# CONFIG_CRC7 is not set
492# CONFIG_LIBCRC32C is not set 567# CONFIG_LIBCRC32C is not set
568CONFIG_PLIST=y
569CONFIG_HAS_DMA=y
493 570
494# 571#
495# Multi-device support (RAID and LVM) 572# SCSI device support
496# 573#
574# CONFIG_RAID_ATTRS is not set
575# CONFIG_SCSI is not set
576# CONFIG_SCSI_DMA is not set
577# CONFIG_SCSI_NETLINK is not set
497# CONFIG_MD is not set 578# CONFIG_MD is not set
498# CONFIG_INPUT is not set 579# CONFIG_INPUT is not set
499 580
@@ -501,23 +582,36 @@ CONFIG_CRC32=m
501# Kernel hacking 582# Kernel hacking
502# 583#
503# CONFIG_PRINTK_TIME is not set 584# CONFIG_PRINTK_TIME is not set
585CONFIG_ENABLE_WARN_DEPRECATED=y
586CONFIG_ENABLE_MUST_CHECK=y
587# CONFIG_UNUSED_SYMBOLS is not set
588# CONFIG_DEBUG_FS is not set
504CONFIG_DEBUG_KERNEL=y 589CONFIG_DEBUG_KERNEL=y
505CONFIG_LOG_BUF_SHIFT=14 590# CONFIG_DEBUG_SHIRQ is not set
506CONFIG_DETECT_SOFTLOCKUP=y 591CONFIG_DETECT_SOFTLOCKUP=y
592CONFIG_SCHED_DEBUG=y
507# CONFIG_SCHEDSTATS is not set 593# CONFIG_SCHEDSTATS is not set
594# CONFIG_TIMER_STATS is not set
508# CONFIG_DEBUG_SLAB is not set 595# CONFIG_DEBUG_SLAB is not set
509# CONFIG_DEBUG_SLAB_LEAK is not set 596# CONFIG_DEBUG_RT_MUTEXES is not set
510# CONFIG_DEBUG_MUTEXES is not set 597# CONFIG_RT_MUTEX_TESTER is not set
511# CONFIG_DEBUG_SPINLOCK is not set 598# CONFIG_DEBUG_SPINLOCK is not set
599# CONFIG_DEBUG_MUTEXES is not set
512# CONFIG_DEBUG_SPINLOCK_SLEEP is not set 600# CONFIG_DEBUG_SPINLOCK_SLEEP is not set
601# CONFIG_DEBUG_LOCKING_API_SELFTESTS is not set
513# CONFIG_DEBUG_KOBJECT is not set 602# CONFIG_DEBUG_KOBJECT is not set
603CONFIG_DEBUG_BUGVERBOSE=y
514CONFIG_DEBUG_INFO=y 604CONFIG_DEBUG_INFO=y
515# CONFIG_DEBUG_FS is not set
516# CONFIG_DEBUG_VM is not set 605# CONFIG_DEBUG_VM is not set
606# CONFIG_DEBUG_LIST is not set
607# CONFIG_DEBUG_SG is not set
517CONFIG_FRAME_POINTER=y 608CONFIG_FRAME_POINTER=y
518# CONFIG_UNWIND_INFO is not set
519CONFIG_FORCED_INLINING=y 609CONFIG_FORCED_INLINING=y
610# CONFIG_BOOT_PRINTK_DELAY is not set
520# CONFIG_RCU_TORTURE_TEST is not set 611# CONFIG_RCU_TORTURE_TEST is not set
612# CONFIG_BACKTRACE_SELF_TEST is not set
613# CONFIG_FAULT_INJECTION is not set
614# CONFIG_SAMPLES is not set
521# CONFIG_GPROF is not set 615# CONFIG_GPROF is not set
522# CONFIG_GCOV is not set 616# CONFIG_GCOV is not set
523# CONFIG_DEBUG_STACK_USAGE is not set 617# CONFIG_DEBUG_STACK_USAGE is not set
diff --git a/arch/um/drivers/harddog_user.c b/arch/um/drivers/harddog_user.c
index 448ba59207a1..b56f8e0196a9 100644
--- a/arch/um/drivers/harddog_user.c
+++ b/arch/um/drivers/harddog_user.c
@@ -79,14 +79,14 @@ int start_watchdog(int *in_fd_ret, int *out_fd_ret, char *sock)
79 n = read(in_fds[0], &c, sizeof(c)); 79 n = read(in_fds[0], &c, sizeof(c));
80 if (n == 0) { 80 if (n == 0) {
81 printk("harddog_open - EOF on watchdog pipe\n"); 81 printk("harddog_open - EOF on watchdog pipe\n");
82 helper_wait(pid, 1, NULL); 82 helper_wait(pid);
83 err = -EIO; 83 err = -EIO;
84 goto out_close_out; 84 goto out_close_out;
85 } 85 }
86 else if (n < 0) { 86 else if (n < 0) {
87 printk("harddog_open - read of watchdog pipe failed, " 87 printk("harddog_open - read of watchdog pipe failed, "
88 "err = %d\n", errno); 88 "err = %d\n", errno);
89 helper_wait(pid, 1, NULL); 89 helper_wait(pid);
90 err = n; 90 err = n;
91 goto out_close_out; 91 goto out_close_out;
92 } 92 }
diff --git a/arch/um/include/registers.h b/arch/um/include/registers.h
index 9ea1ae3c8f46..b0b4589e0ebc 100644
--- a/arch/um/include/registers.h
+++ b/arch/um/include/registers.h
@@ -18,5 +18,7 @@ extern int restore_registers(int pid, struct uml_pt_regs *regs);
18extern int init_registers(int pid); 18extern int init_registers(int pid);
19extern void get_safe_registers(unsigned long *regs); 19extern void get_safe_registers(unsigned long *regs);
20extern unsigned long get_thread_reg(int reg, jmp_buf *buf); 20extern unsigned long get_thread_reg(int reg, jmp_buf *buf);
21extern int get_fp_registers(int pid, unsigned long *regs);
22extern int put_fp_registers(int pid, unsigned long *regs);
21 23
22#endif 24#endif
diff --git a/arch/um/include/sysdep-i386/ptrace_user.h b/arch/um/include/sysdep-i386/ptrace_user.h
index 899aa4b2a78d..75650723c38f 100644
--- a/arch/um/include/sysdep-i386/ptrace_user.h
+++ b/arch/um/include/sysdep-i386/ptrace_user.h
@@ -9,6 +9,7 @@
9#include <sys/ptrace.h> 9#include <sys/ptrace.h>
10#include <linux/ptrace.h> 10#include <linux/ptrace.h>
11#include <asm/ptrace.h> 11#include <asm/ptrace.h>
12#include "user_constants.h"
12 13
13#define PT_OFFSET(r) ((r) * sizeof(long)) 14#define PT_OFFSET(r) ((r) * sizeof(long))
14 15
@@ -40,6 +41,8 @@
40#define PT_SP_OFFSET PT_OFFSET(UESP) 41#define PT_SP_OFFSET PT_OFFSET(UESP)
41#define PT_SP(regs) ((regs)[UESP]) 42#define PT_SP(regs) ((regs)[UESP])
42 43
44#define FP_SIZE ((HOST_XFP_SIZE > HOST_FP_SIZE) ? HOST_XFP_SIZE : HOST_FP_SIZE)
45
43#ifndef FRAME_SIZE 46#ifndef FRAME_SIZE
44#define FRAME_SIZE (17) 47#define FRAME_SIZE (17)
45#endif 48#endif
diff --git a/arch/um/include/sysdep-x86_64/ptrace_user.h b/arch/um/include/sysdep-x86_64/ptrace_user.h
index 4cd61a852fab..45c0bd881cb3 100644
--- a/arch/um/include/sysdep-x86_64/ptrace_user.h
+++ b/arch/um/include/sysdep-x86_64/ptrace_user.h
@@ -12,6 +12,7 @@
12#include <linux/ptrace.h> 12#include <linux/ptrace.h>
13#include <asm/ptrace.h> 13#include <asm/ptrace.h>
14#undef __FRAME_OFFSETS 14#undef __FRAME_OFFSETS
15#include "user_constants.h"
15 16
16#define PT_INDEX(off) ((off) / sizeof(unsigned long)) 17#define PT_INDEX(off) ((off) / sizeof(unsigned long))
17 18
@@ -69,6 +70,8 @@
69#define REGS_IP_INDEX PT_INDEX(RIP) 70#define REGS_IP_INDEX PT_INDEX(RIP)
70#define REGS_SP_INDEX PT_INDEX(RSP) 71#define REGS_SP_INDEX PT_INDEX(RSP)
71 72
73#define FP_SIZE (HOST_FP_SIZE)
74
72#endif 75#endif
73 76
74/* 77/*
diff --git a/arch/um/kernel/initrd.c b/arch/um/kernel/initrd.c
index fa015565001b..d386c75c88eb 100644
--- a/arch/um/kernel/initrd.c
+++ b/arch/um/kernel/initrd.c
@@ -32,7 +32,7 @@ static int __init read_initrd(void)
32 * ask for no memory. 32 * ask for no memory.
33 */ 33 */
34 if (size == 0) { 34 if (size == 0) {
35 printk(KERN_ERR "\"%\" is a zero-size initrd\n"); 35 printk(KERN_ERR "\"%s\" is a zero-size initrd\n", initrd);
36 return 0; 36 return 0;
37 } 37 }
38 38
diff --git a/arch/um/kernel/mem.c b/arch/um/kernel/mem.c
index 2627ce82e918..2eea1ff235e6 100644
--- a/arch/um/kernel/mem.c
+++ b/arch/um/kernel/mem.c
@@ -299,7 +299,7 @@ void show_mem(void)
299{ 299{
300 int pfn, total = 0, reserved = 0; 300 int pfn, total = 0, reserved = 0;
301 int shared = 0, cached = 0; 301 int shared = 0, cached = 0;
302 int highmem = 0; 302 int high_mem = 0;
303 struct page *page; 303 struct page *page;
304 304
305 printk(KERN_INFO "Mem-info:\n"); 305 printk(KERN_INFO "Mem-info:\n");
@@ -311,7 +311,7 @@ void show_mem(void)
311 page = pfn_to_page(pfn); 311 page = pfn_to_page(pfn);
312 total++; 312 total++;
313 if (PageHighMem(page)) 313 if (PageHighMem(page))
314 highmem++; 314 high_mem++;
315 if (PageReserved(page)) 315 if (PageReserved(page))
316 reserved++; 316 reserved++;
317 else if (PageSwapCache(page)) 317 else if (PageSwapCache(page))
@@ -320,7 +320,7 @@ void show_mem(void)
320 shared += page_count(page) - 1; 320 shared += page_count(page) - 1;
321 } 321 }
322 printk(KERN_INFO "%d pages of RAM\n", total); 322 printk(KERN_INFO "%d pages of RAM\n", total);
323 printk(KERN_INFO "%d pages of HIGHMEM\n", highmem); 323 printk(KERN_INFO "%d pages of HIGHMEM\n", high_mem);
324 printk(KERN_INFO "%d reserved pages\n", reserved); 324 printk(KERN_INFO "%d reserved pages\n", reserved);
325 printk(KERN_INFO "%d pages shared\n", shared); 325 printk(KERN_INFO "%d pages shared\n", shared);
326 printk(KERN_INFO "%d pages swap cached\n", cached); 326 printk(KERN_INFO "%d pages swap cached\n", cached);
diff --git a/arch/um/os-Linux/skas/process.c b/arch/um/os-Linux/skas/process.c
index b14829469fae..1e8cba6550a9 100644
--- a/arch/um/os-Linux/skas/process.c
+++ b/arch/um/os-Linux/skas/process.c
@@ -115,6 +115,14 @@ void get_skas_faultinfo(int pid, struct faultinfo * fi)
115 sizeof(struct ptrace_faultinfo)); 115 sizeof(struct ptrace_faultinfo));
116 } 116 }
117 else { 117 else {
118 unsigned long fpregs[FP_SIZE];
119
120 err = get_fp_registers(pid, fpregs);
121 if (err < 0) {
122 printk(UM_KERN_ERR "save_fp_registers returned %d\n",
123 err);
124 fatal_sigsegv();
125 }
118 err = ptrace(PTRACE_CONT, pid, 0, SIGSEGV); 126 err = ptrace(PTRACE_CONT, pid, 0, SIGSEGV);
119 if (err) { 127 if (err) {
120 printk(UM_KERN_ERR "Failed to continue stub, pid = %d, " 128 printk(UM_KERN_ERR "Failed to continue stub, pid = %d, "
@@ -128,6 +136,13 @@ void get_skas_faultinfo(int pid, struct faultinfo * fi)
128 * the stub stack page. We just have to copy it. 136 * the stub stack page. We just have to copy it.
129 */ 137 */
130 memcpy(fi, (void *)current_stub_stack(), sizeof(*fi)); 138 memcpy(fi, (void *)current_stub_stack(), sizeof(*fi));
139
140 err = put_fp_registers(pid, fpregs);
141 if (err < 0) {
142 printk(UM_KERN_ERR "put_fp_registers returned %d\n",
143 err);
144 fatal_sigsegv();
145 }
131 } 146 }
132} 147}
133 148
diff --git a/arch/um/os-Linux/sys-i386/registers.c b/arch/um/os-Linux/sys-i386/registers.c
index f74d853a0ee0..b613473b3ec1 100644
--- a/arch/um/os-Linux/sys-i386/registers.c
+++ b/arch/um/os-Linux/sys-i386/registers.c
@@ -56,6 +56,22 @@ unsigned long get_thread_reg(int reg, jmp_buf *buf)
56 56
57int have_fpx_regs = 1; 57int have_fpx_regs = 1;
58 58
59int get_fp_registers(int pid, unsigned long *regs)
60{
61 if (have_fpx_regs)
62 return save_fpx_registers(pid, regs);
63 else
64 return save_fp_registers(pid, regs);
65}
66
67int put_fp_registers(int pid, unsigned long *regs)
68{
69 if (have_fpx_regs)
70 return restore_fpx_registers(pid, regs);
71 else
72 return restore_fp_registers(pid, regs);
73}
74
59void arch_init_registers(int pid) 75void arch_init_registers(int pid)
60{ 76{
61 unsigned long fpx_regs[HOST_XFP_SIZE]; 77 unsigned long fpx_regs[HOST_XFP_SIZE];
diff --git a/arch/um/os-Linux/sys-x86_64/registers.c b/arch/um/os-Linux/sys-x86_64/registers.c
index a375853337a7..594d97ad02b3 100644
--- a/arch/um/os-Linux/sys-x86_64/registers.c
+++ b/arch/um/os-Linux/sys-x86_64/registers.c
@@ -40,3 +40,13 @@ unsigned long get_thread_reg(int reg, jmp_buf *buf)
40 return 0; 40 return 0;
41 } 41 }
42} 42}
43
44int get_fp_registers(int pid, unsigned long *regs)
45{
46 return save_fp_registers(pid, regs);
47}
48
49int put_fp_registers(int pid, unsigned long *regs)
50{
51 return restore_fp_registers(pid, regs);
52}
diff --git a/arch/um/sys-i386/user-offsets.c b/arch/um/sys-i386/user-offsets.c
index 514241526a1b..39bd32bf84f0 100644
--- a/arch/um/sys-i386/user-offsets.c
+++ b/arch/um/sys-i386/user-offsets.c
@@ -17,36 +17,9 @@
17 17
18void foo(void) 18void foo(void)
19{ 19{
20 OFFSET(HOST_SC_IP, sigcontext, eip);
21 OFFSET(HOST_SC_SP, sigcontext, esp);
22 OFFSET(HOST_SC_FS, sigcontext, fs);
23 OFFSET(HOST_SC_GS, sigcontext, gs);
24 OFFSET(HOST_SC_DS, sigcontext, ds);
25 OFFSET(HOST_SC_ES, sigcontext, es);
26 OFFSET(HOST_SC_SS, sigcontext, ss);
27 OFFSET(HOST_SC_CS, sigcontext, cs);
28 OFFSET(HOST_SC_EFLAGS, sigcontext, eflags);
29 OFFSET(HOST_SC_EAX, sigcontext, eax);
30 OFFSET(HOST_SC_EBX, sigcontext, ebx);
31 OFFSET(HOST_SC_ECX, sigcontext, ecx);
32 OFFSET(HOST_SC_EDX, sigcontext, edx);
33 OFFSET(HOST_SC_EDI, sigcontext, edi);
34 OFFSET(HOST_SC_ESI, sigcontext, esi);
35 OFFSET(HOST_SC_EBP, sigcontext, ebp);
36 OFFSET(HOST_SC_TRAPNO, sigcontext, trapno); 20 OFFSET(HOST_SC_TRAPNO, sigcontext, trapno);
37 OFFSET(HOST_SC_ERR, sigcontext, err); 21 OFFSET(HOST_SC_ERR, sigcontext, err);
38 OFFSET(HOST_SC_CR2, sigcontext, cr2); 22 OFFSET(HOST_SC_CR2, sigcontext, cr2);
39 OFFSET(HOST_SC_FPSTATE, sigcontext, fpstate);
40 OFFSET(HOST_SC_SIGMASK, sigcontext, oldmask);
41 OFFSET(HOST_SC_FP_CW, _fpstate, cw);
42 OFFSET(HOST_SC_FP_SW, _fpstate, sw);
43 OFFSET(HOST_SC_FP_TAG, _fpstate, tag);
44 OFFSET(HOST_SC_FP_IPOFF, _fpstate, ipoff);
45 OFFSET(HOST_SC_FP_CSSEL, _fpstate, cssel);
46 OFFSET(HOST_SC_FP_DATAOFF, _fpstate, dataoff);
47 OFFSET(HOST_SC_FP_DATASEL, _fpstate, datasel);
48 OFFSET(HOST_SC_FP_ST, _fpstate, _st);
49 OFFSET(HOST_SC_FXSR_ENV, _fpstate, _fxsr_env);
50 23
51 DEFINE_LONGS(HOST_FP_SIZE, sizeof(struct user_fpregs_struct)); 24 DEFINE_LONGS(HOST_FP_SIZE, sizeof(struct user_fpregs_struct));
52 DEFINE_LONGS(HOST_XFP_SIZE, sizeof(struct user_fpxregs_struct)); 25 DEFINE_LONGS(HOST_XFP_SIZE, sizeof(struct user_fpxregs_struct));
diff --git a/arch/um/sys-x86_64/user-offsets.c b/arch/um/sys-x86_64/user-offsets.c
index f1ef2a8dfbc6..2f3443c6e859 100644
--- a/arch/um/sys-x86_64/user-offsets.c
+++ b/arch/um/sys-x86_64/user-offsets.c
@@ -19,37 +19,9 @@
19 19
20void foo(void) 20void foo(void)
21{ 21{
22 OFFSET(HOST_SC_RBX, sigcontext, rbx);
23 OFFSET(HOST_SC_RCX, sigcontext, rcx);
24 OFFSET(HOST_SC_RDX, sigcontext, rdx);
25 OFFSET(HOST_SC_RSI, sigcontext, rsi);
26 OFFSET(HOST_SC_RDI, sigcontext, rdi);
27 OFFSET(HOST_SC_RBP, sigcontext, rbp);
28 OFFSET(HOST_SC_RAX, sigcontext, rax);
29 OFFSET(HOST_SC_R8, sigcontext, r8);
30 OFFSET(HOST_SC_R9, sigcontext, r9);
31 OFFSET(HOST_SC_R10, sigcontext, r10);
32 OFFSET(HOST_SC_R11, sigcontext, r11);
33 OFFSET(HOST_SC_R12, sigcontext, r12);
34 OFFSET(HOST_SC_R13, sigcontext, r13);
35 OFFSET(HOST_SC_R14, sigcontext, r14);
36 OFFSET(HOST_SC_R15, sigcontext, r15);
37 OFFSET(HOST_SC_IP, sigcontext, rip);
38 OFFSET(HOST_SC_SP, sigcontext, rsp);
39 OFFSET(HOST_SC_CR2, sigcontext, cr2); 22 OFFSET(HOST_SC_CR2, sigcontext, cr2);
40 OFFSET(HOST_SC_ERR, sigcontext, err); 23 OFFSET(HOST_SC_ERR, sigcontext, err);
41 OFFSET(HOST_SC_TRAPNO, sigcontext, trapno); 24 OFFSET(HOST_SC_TRAPNO, sigcontext, trapno);
42 OFFSET(HOST_SC_CS, sigcontext, cs);
43 OFFSET(HOST_SC_FS, sigcontext, fs);
44 OFFSET(HOST_SC_GS, sigcontext, gs);
45 OFFSET(HOST_SC_EFLAGS, sigcontext, eflags);
46 OFFSET(HOST_SC_SIGMASK, sigcontext, oldmask);
47#if 0
48 OFFSET(HOST_SC_ORIG_RAX, sigcontext, orig_rax);
49 OFFSET(HOST_SC_DS, sigcontext, ds);
50 OFFSET(HOST_SC_ES, sigcontext, es);
51 OFFSET(HOST_SC_SS, sigcontext, ss);
52#endif
53 25
54 DEFINE(HOST_FP_SIZE, sizeof(struct _fpstate) / sizeof(unsigned long)); 26 DEFINE(HOST_FP_SIZE, sizeof(struct _fpstate) / sizeof(unsigned long));
55 DEFINE(HOST_XFP_SIZE, 0); 27 DEFINE(HOST_XFP_SIZE, 0);
diff --git a/arch/x86/Kconfig b/arch/x86/Kconfig
index 3be2305709b7..4a88cf7695b4 100644
--- a/arch/x86/Kconfig
+++ b/arch/x86/Kconfig
@@ -1054,7 +1054,7 @@ config SECCOMP
1054 1054
1055config CC_STACKPROTECTOR 1055config CC_STACKPROTECTOR
1056 bool "Enable -fstack-protector buffer overflow detection (EXPERIMENTAL)" 1056 bool "Enable -fstack-protector buffer overflow detection (EXPERIMENTAL)"
1057 depends on X86_64 && EXPERIMENTAL 1057 depends on X86_64 && EXPERIMENTAL && BROKEN
1058 help 1058 help
1059 This option turns on the -fstack-protector GCC feature. This 1059 This option turns on the -fstack-protector GCC feature. This
1060 feature puts, at the beginning of critical functions, a canary 1060 feature puts, at the beginning of critical functions, a canary
diff --git a/arch/x86/Kconfig.debug b/arch/x86/Kconfig.debug
index 864affc9a7b0..702eb39901ca 100644
--- a/arch/x86/Kconfig.debug
+++ b/arch/x86/Kconfig.debug
@@ -156,7 +156,7 @@ config IO_DELAY_TYPE_NONE
156 156
157choice 157choice
158 prompt "IO delay type" 158 prompt "IO delay type"
159 default IO_DELAY_0XED 159 default IO_DELAY_0X80
160 160
161config IO_DELAY_0X80 161config IO_DELAY_0X80
162 bool "port 0x80 based port-IO delay [recommended]" 162 bool "port 0x80 based port-IO delay [recommended]"
diff --git a/arch/x86/Makefile b/arch/x86/Makefile
index 204af43535c5..f1e739a43d41 100644
--- a/arch/x86/Makefile
+++ b/arch/x86/Makefile
@@ -229,7 +229,7 @@ zdisk bzdisk: vmlinux
229fdimage fdimage144 fdimage288 isoimage: vmlinux 229fdimage fdimage144 fdimage288 isoimage: vmlinux
230 $(Q)$(MAKE) $(build)=$(boot) BOOTIMAGE=$(KBUILD_IMAGE) $@ 230 $(Q)$(MAKE) $(build)=$(boot) BOOTIMAGE=$(KBUILD_IMAGE) $@
231 231
232install: vdso_install 232install:
233 $(Q)$(MAKE) $(build)=$(boot) BOOTIMAGE=$(KBUILD_IMAGE) install 233 $(Q)$(MAKE) $(build)=$(boot) BOOTIMAGE=$(KBUILD_IMAGE) install
234 234
235PHONY += vdso_install 235PHONY += vdso_install
diff --git a/arch/x86/kernel/Makefile b/arch/x86/kernel/Makefile
index 76ec0f8f138a..4eb5ce841106 100644
--- a/arch/x86/kernel/Makefile
+++ b/arch/x86/kernel/Makefile
@@ -6,7 +6,15 @@ extra-y := head_$(BITS).o init_task.o vmlinux.lds
6extra-$(CONFIG_X86_64) += head64.o 6extra-$(CONFIG_X86_64) += head64.o
7 7
8CPPFLAGS_vmlinux.lds += -U$(UTS_MACHINE) 8CPPFLAGS_vmlinux.lds += -U$(UTS_MACHINE)
9CFLAGS_vsyscall_64.o := $(PROFILING) -g0 9
10#
11# vsyscalls (which work on the user stack) should have
12# no stack-protector checks:
13#
14nostackp := $(call cc-option, -fno-stack-protector)
15CFLAGS_vsyscall_64.o := $(PROFILING) -g0 $(nostackp)
16CFLAGS_hpet.o := $(nostackp)
17CFLAGS_tsc_64.o := $(nostackp)
10 18
11obj-y := process_$(BITS).o signal_$(BITS).o entry_$(BITS).o 19obj-y := process_$(BITS).o signal_$(BITS).o entry_$(BITS).o
12obj-y += traps_$(BITS).o irq_$(BITS).o 20obj-y += traps_$(BITS).o irq_$(BITS).o
diff --git a/arch/x86/kernel/acpi/boot.c b/arch/x86/kernel/acpi/boot.c
index 680b7300a489..2cdc9de9371d 100644
--- a/arch/x86/kernel/acpi/boot.c
+++ b/arch/x86/kernel/acpi/boot.c
@@ -72,7 +72,8 @@ static inline int acpi_madt_oem_check(char *oem_id, char *oem_table_id) { return
72#define PREFIX "ACPI: " 72#define PREFIX "ACPI: "
73 73
74int acpi_noirq; /* skip ACPI IRQ initialization */ 74int acpi_noirq; /* skip ACPI IRQ initialization */
75int acpi_pci_disabled __initdata; /* skip ACPI PCI scan and IRQ initialization */ 75int acpi_pci_disabled; /* skip ACPI PCI scan and IRQ initialization */
76EXPORT_SYMBOL(acpi_pci_disabled);
76int acpi_ht __initdata = 1; /* enable HT */ 77int acpi_ht __initdata = 1; /* enable HT */
77 78
78int acpi_lapic; 79int acpi_lapic;
diff --git a/arch/x86/kernel/asm-offsets_32.c b/arch/x86/kernel/asm-offsets_32.c
index afd84463b712..a33d53017997 100644
--- a/arch/x86/kernel/asm-offsets_32.c
+++ b/arch/x86/kernel/asm-offsets_32.c
@@ -20,10 +20,8 @@
20 20
21#include <xen/interface/xen.h> 21#include <xen/interface/xen.h>
22 22
23#ifdef CONFIG_LGUEST_GUEST
24#include <linux/lguest.h> 23#include <linux/lguest.h>
25#include "../../../drivers/lguest/lg.h" 24#include "../../../drivers/lguest/lg.h"
26#endif
27 25
28#define DEFINE(sym, val) \ 26#define DEFINE(sym, val) \
29 asm volatile("\n->" #sym " %0 " #val : : "i" (val)) 27 asm volatile("\n->" #sym " %0 " #val : : "i" (val))
@@ -134,6 +132,10 @@ void foo(void)
134 BLANK(); 132 BLANK();
135 OFFSET(LGUEST_DATA_irq_enabled, lguest_data, irq_enabled); 133 OFFSET(LGUEST_DATA_irq_enabled, lguest_data, irq_enabled);
136 OFFSET(LGUEST_DATA_pgdir, lguest_data, pgdir); 134 OFFSET(LGUEST_DATA_pgdir, lguest_data, pgdir);
135#endif
136
137#ifdef CONFIG_LGUEST
138 BLANK();
137 OFFSET(LGUEST_PAGES_host_gdt_desc, lguest_pages, state.host_gdt_desc); 139 OFFSET(LGUEST_PAGES_host_gdt_desc, lguest_pages, state.host_gdt_desc);
138 OFFSET(LGUEST_PAGES_host_idt_desc, lguest_pages, state.host_idt_desc); 140 OFFSET(LGUEST_PAGES_host_idt_desc, lguest_pages, state.host_idt_desc);
139 OFFSET(LGUEST_PAGES_host_cr3, lguest_pages, state.host_cr3); 141 OFFSET(LGUEST_PAGES_host_cr3, lguest_pages, state.host_cr3);
diff --git a/arch/x86/kernel/cpu/bugs.c b/arch/x86/kernel/cpu/bugs.c
index 9b95edcfc6ae..027e5c003b16 100644
--- a/arch/x86/kernel/cpu/bugs.c
+++ b/arch/x86/kernel/cpu/bugs.c
@@ -25,14 +25,6 @@ static int __init no_halt(char *s)
25 25
26__setup("no-hlt", no_halt); 26__setup("no-hlt", no_halt);
27 27
28static int __init mca_pentium(char *s)
29{
30 mca_pentium_flag = 1;
31 return 1;
32}
33
34__setup("mca-pentium", mca_pentium);
35
36static int __init no_387(char *s) 28static int __init no_387(char *s)
37{ 29{
38 boot_cpu_data.hard_math = 0; 30 boot_cpu_data.hard_math = 0;
diff --git a/arch/x86/kernel/efi.c b/arch/x86/kernel/efi.c
index 0c0eeb163d90..759e02bec070 100644
--- a/arch/x86/kernel/efi.c
+++ b/arch/x86/kernel/efi.c
@@ -54,7 +54,7 @@ EXPORT_SYMBOL(efi);
54 54
55struct efi_memory_map memmap; 55struct efi_memory_map memmap;
56 56
57struct efi efi_phys __initdata; 57static struct efi efi_phys __initdata;
58static efi_system_table_t efi_systab __initdata; 58static efi_system_table_t efi_systab __initdata;
59 59
60static int __init setup_noefi(char *arg) 60static int __init setup_noefi(char *arg)
diff --git a/arch/x86/kernel/efi_32.c b/arch/x86/kernel/efi_32.c
index cb91f985b4a1..5d23d85624d4 100644
--- a/arch/x86/kernel/efi_32.c
+++ b/arch/x86/kernel/efi_32.c
@@ -28,6 +28,7 @@
28#include <asm/page.h> 28#include <asm/page.h>
29#include <asm/pgtable.h> 29#include <asm/pgtable.h>
30#include <asm/tlbflush.h> 30#include <asm/tlbflush.h>
31#include <asm/efi.h>
31 32
32/* 33/*
33 * To make EFI call EFI runtime service in physical addressing mode we need 34 * To make EFI call EFI runtime service in physical addressing mode we need
diff --git a/arch/x86/kernel/entry_32.S b/arch/x86/kernel/entry_32.S
index 824e21b80aad..4b87c32b639f 100644
--- a/arch/x86/kernel/entry_32.S
+++ b/arch/x86/kernel/entry_32.S
@@ -409,7 +409,7 @@ restore_nocheck_notrace:
409 RESTORE_REGS 409 RESTORE_REGS
410 addl $4, %esp # skip orig_eax/error_code 410 addl $4, %esp # skip orig_eax/error_code
411 CFI_ADJUST_CFA_OFFSET -4 411 CFI_ADJUST_CFA_OFFSET -4
412ENTRY(irq_return) 412irq_return:
413 INTERRUPT_RETURN 413 INTERRUPT_RETURN
414.section .fixup,"ax" 414.section .fixup,"ax"
415iret_exc: 415iret_exc:
diff --git a/arch/x86/kernel/entry_64.S b/arch/x86/kernel/entry_64.S
index 6be39a387c5a..2ad9a1bc6a73 100644
--- a/arch/x86/kernel/entry_64.S
+++ b/arch/x86/kernel/entry_64.S
@@ -583,7 +583,7 @@ retint_restore_args: /* return to kernel space */
583restore_args: 583restore_args:
584 RESTORE_ARGS 0,8,0 584 RESTORE_ARGS 0,8,0
585 585
586ENTRY(irq_return) 586irq_return:
587 INTERRUPT_RETURN 587 INTERRUPT_RETURN
588 588
589 .section __ex_table, "a" 589 .section __ex_table, "a"
diff --git a/arch/x86/kernel/head64.c b/arch/x86/kernel/head64.c
index 24dbf56928d7..ad2440832de0 100644
--- a/arch/x86/kernel/head64.c
+++ b/arch/x86/kernel/head64.c
@@ -88,6 +88,9 @@ void __init x86_64_start_kernel(char * real_mode_data)
88 /* Make NULL pointers segfault */ 88 /* Make NULL pointers segfault */
89 zap_identity_mappings(); 89 zap_identity_mappings();
90 90
91 /* Cleanup the over mapped high alias */
92 cleanup_highmap();
93
91 for (i = 0; i < IDT_ENTRIES; i++) { 94 for (i = 0; i < IDT_ENTRIES; i++) {
92#ifdef CONFIG_EARLY_PRINTK 95#ifdef CONFIG_EARLY_PRINTK
93 set_intr_gate(i, &early_idt_handlers[i]); 96 set_intr_gate(i, &early_idt_handlers[i]);
diff --git a/arch/x86/kernel/head_32.S b/arch/x86/kernel/head_32.S
index 74ef4a41f224..25eb98540a41 100644
--- a/arch/x86/kernel/head_32.S
+++ b/arch/x86/kernel/head_32.S
@@ -612,7 +612,7 @@ ENTRY(swapper_pg_pmd)
612ENTRY(swapper_pg_dir) 612ENTRY(swapper_pg_dir)
613 .fill 1024,4,0 613 .fill 1024,4,0
614#endif 614#endif
615ENTRY(swapper_pg_fixmap) 615swapper_pg_fixmap:
616 .fill 1024,4,0 616 .fill 1024,4,0
617ENTRY(empty_zero_page) 617ENTRY(empty_zero_page)
618 .fill 4096,1,0 618 .fill 4096,1,0
diff --git a/arch/x86/kernel/head_64.S b/arch/x86/kernel/head_64.S
index 09b38d539b09..eb415043a929 100644
--- a/arch/x86/kernel/head_64.S
+++ b/arch/x86/kernel/head_64.S
@@ -107,8 +107,13 @@ startup_64:
107 movq %rdx, 0(%rbx, %rax, 8) 107 movq %rdx, 0(%rbx, %rax, 8)
108ident_complete: 108ident_complete:
109 109
110 /* Fixup the kernel text+data virtual addresses 110 /*
111 * Fixup the kernel text+data virtual addresses. Note that
112 * we might write invalid pmds, when the kernel is relocated
113 * cleanup_highmap() fixes this up along with the mappings
114 * beyond _end.
111 */ 115 */
116
112 leaq level2_kernel_pgt(%rip), %rdi 117 leaq level2_kernel_pgt(%rip), %rdi
113 leaq 4096(%rdi), %r8 118 leaq 4096(%rdi), %r8
114 /* See if it is a valid page table entry */ 119 /* See if it is a valid page table entry */
@@ -250,7 +255,7 @@ ENTRY(secondary_startup_64)
250 lretq 255 lretq
251 256
252 /* SMP bootup changes these two */ 257 /* SMP bootup changes these two */
253 __CPUINITDATA 258 __REFDATA
254 .align 8 259 .align 8
255 ENTRY(initial_code) 260 ENTRY(initial_code)
256 .quad x86_64_start_kernel 261 .quad x86_64_start_kernel
diff --git a/arch/x86/kernel/i387.c b/arch/x86/kernel/i387.c
index 26719bd2c77c..763dfc407232 100644
--- a/arch/x86/kernel/i387.c
+++ b/arch/x86/kernel/i387.c
@@ -39,7 +39,7 @@
39#define HAVE_HWFP 1 39#define HAVE_HWFP 1
40#endif 40#endif
41 41
42unsigned int mxcsr_feature_mask __read_mostly = 0xffffffffu; 42static unsigned int mxcsr_feature_mask __read_mostly = 0xffffffffu;
43 43
44void mxcsr_feature_mask_init(void) 44void mxcsr_feature_mask_init(void)
45{ 45{
diff --git a/arch/x86/kernel/i8259_32.c b/arch/x86/kernel/i8259_32.c
index 2d25b77102fe..fe631967d625 100644
--- a/arch/x86/kernel/i8259_32.c
+++ b/arch/x86/kernel/i8259_32.c
@@ -26,8 +26,6 @@
26 * present in the majority of PC/AT boxes. 26 * present in the majority of PC/AT boxes.
27 * plus some generic x86 specific things if generic specifics makes 27 * plus some generic x86 specific things if generic specifics makes
28 * any sense at all. 28 * any sense at all.
29 * this file should become arch/i386/kernel/irq.c when the old irq.c
30 * moves to arch independent land
31 */ 29 */
32 30
33static int i8259A_auto_eoi; 31static int i8259A_auto_eoi;
@@ -362,23 +360,12 @@ void __init init_ISA_irqs (void)
362#endif 360#endif
363 init_8259A(0); 361 init_8259A(0);
364 362
365 for (i = 0; i < NR_IRQS; i++) { 363 /*
366 irq_desc[i].status = IRQ_DISABLED; 364 * 16 old-style INTA-cycle interrupts:
367 irq_desc[i].action = NULL; 365 */
368 irq_desc[i].depth = 1; 366 for (i = 0; i < 16; i++) {
369 367 set_irq_chip_and_handler_name(i, &i8259A_chip,
370 if (i < 16) { 368 handle_level_irq, "XT");
371 /*
372 * 16 old-style INTA-cycle interrupts:
373 */
374 set_irq_chip_and_handler_name(i, &i8259A_chip,
375 handle_level_irq, "XT");
376 } else {
377 /*
378 * 'high' PCI IRQs filled in on demand
379 */
380 irq_desc[i].chip = &no_irq_chip;
381 }
382 } 369 }
383} 370}
384 371
diff --git a/arch/x86/kernel/io_delay.c b/arch/x86/kernel/io_delay.c
index bd49321034db..c706a3061553 100644
--- a/arch/x86/kernel/io_delay.c
+++ b/arch/x86/kernel/io_delay.c
@@ -13,7 +13,6 @@
13#include <asm/io.h> 13#include <asm/io.h>
14 14
15int io_delay_type __read_mostly = CONFIG_DEFAULT_IO_DELAY_TYPE; 15int io_delay_type __read_mostly = CONFIG_DEFAULT_IO_DELAY_TYPE;
16EXPORT_SYMBOL_GPL(io_delay_type);
17 16
18static int __initdata io_delay_override; 17static int __initdata io_delay_override;
19 18
diff --git a/arch/x86/kernel/kprobes.c b/arch/x86/kernel/kprobes.c
index a99e764fd66a..34a591283f5d 100644
--- a/arch/x86/kernel/kprobes.c
+++ b/arch/x86/kernel/kprobes.c
@@ -581,7 +581,7 @@ static int __kprobes kprobe_handler(struct pt_regs *regs)
581 * When a retprobed function returns, this code saves registers and 581 * When a retprobed function returns, this code saves registers and
582 * calls trampoline_handler() runs, which calls the kretprobe's handler. 582 * calls trampoline_handler() runs, which calls the kretprobe's handler.
583 */ 583 */
584void __kprobes kretprobe_trampoline_holder(void) 584static void __used __kprobes kretprobe_trampoline_holder(void)
585{ 585{
586 asm volatile ( 586 asm volatile (
587 ".global kretprobe_trampoline\n" 587 ".global kretprobe_trampoline\n"
@@ -673,7 +673,7 @@ void __kprobes kretprobe_trampoline_holder(void)
673/* 673/*
674 * Called from kretprobe_trampoline 674 * Called from kretprobe_trampoline
675 */ 675 */
676void * __kprobes trampoline_handler(struct pt_regs *regs) 676static __used __kprobes void *trampoline_handler(struct pt_regs *regs)
677{ 677{
678 struct kretprobe_instance *ri = NULL; 678 struct kretprobe_instance *ri = NULL;
679 struct hlist_head *head, empty_rp; 679 struct hlist_head *head, empty_rp;
diff --git a/arch/x86/kernel/nmi_32.c b/arch/x86/kernel/nmi_32.c
index edd413650b3b..6a0aa7038685 100644
--- a/arch/x86/kernel/nmi_32.c
+++ b/arch/x86/kernel/nmi_32.c
@@ -46,9 +46,6 @@ static unsigned int nmi_hz = HZ;
46 46
47static DEFINE_PER_CPU(short, wd_enabled); 47static DEFINE_PER_CPU(short, wd_enabled);
48 48
49/* local prototypes */
50static int unknown_nmi_panic_callback(struct pt_regs *regs, int cpu);
51
52static int endflag __initdata = 0; 49static int endflag __initdata = 0;
53 50
54#ifdef CONFIG_SMP 51#ifdef CONFIG_SMP
@@ -391,15 +388,6 @@ __kprobes int nmi_watchdog_tick(struct pt_regs * regs, unsigned reason)
391 return rc; 388 return rc;
392} 389}
393 390
394int do_nmi_callback(struct pt_regs * regs, int cpu)
395{
396#ifdef CONFIG_SYSCTL
397 if (unknown_nmi_panic)
398 return unknown_nmi_panic_callback(regs, cpu);
399#endif
400 return 0;
401}
402
403#ifdef CONFIG_SYSCTL 391#ifdef CONFIG_SYSCTL
404 392
405static int unknown_nmi_panic_callback(struct pt_regs *regs, int cpu) 393static int unknown_nmi_panic_callback(struct pt_regs *regs, int cpu)
@@ -453,6 +441,15 @@ int proc_nmi_enabled(struct ctl_table *table, int write, struct file *file,
453 441
454#endif 442#endif
455 443
444int do_nmi_callback(struct pt_regs *regs, int cpu)
445{
446#ifdef CONFIG_SYSCTL
447 if (unknown_nmi_panic)
448 return unknown_nmi_panic_callback(regs, cpu);
449#endif
450 return 0;
451}
452
456void __trigger_all_cpu_backtrace(void) 453void __trigger_all_cpu_backtrace(void)
457{ 454{
458 int i; 455 int i;
diff --git a/arch/x86/kernel/nmi_64.c b/arch/x86/kernel/nmi_64.c
index fb99484d21cf..9a4fde74bee1 100644
--- a/arch/x86/kernel/nmi_64.c
+++ b/arch/x86/kernel/nmi_64.c
@@ -46,9 +46,6 @@ static unsigned int nmi_hz = HZ;
46 46
47static DEFINE_PER_CPU(short, wd_enabled); 47static DEFINE_PER_CPU(short, wd_enabled);
48 48
49/* local prototypes */
50static int unknown_nmi_panic_callback(struct pt_regs *regs, int cpu);
51
52/* Run after command line and cpu_init init, but before all other checks */ 49/* Run after command line and cpu_init init, but before all other checks */
53void nmi_watchdog_default(void) 50void nmi_watchdog_default(void)
54{ 51{
@@ -394,15 +391,6 @@ asmlinkage __kprobes void do_nmi(struct pt_regs * regs, long error_code)
394 nmi_exit(); 391 nmi_exit();
395} 392}
396 393
397int do_nmi_callback(struct pt_regs * regs, int cpu)
398{
399#ifdef CONFIG_SYSCTL
400 if (unknown_nmi_panic)
401 return unknown_nmi_panic_callback(regs, cpu);
402#endif
403 return 0;
404}
405
406void stop_nmi(void) 394void stop_nmi(void)
407{ 395{
408 acpi_nmi_disable(); 396 acpi_nmi_disable();
@@ -464,6 +452,15 @@ int proc_nmi_enabled(struct ctl_table *table, int write, struct file *file,
464 452
465#endif 453#endif
466 454
455int do_nmi_callback(struct pt_regs *regs, int cpu)
456{
457#ifdef CONFIG_SYSCTL
458 if (unknown_nmi_panic)
459 return unknown_nmi_panic_callback(regs, cpu);
460#endif
461 return 0;
462}
463
467void __trigger_all_cpu_backtrace(void) 464void __trigger_all_cpu_backtrace(void)
468{ 465{
469 int i; 466 int i;
diff --git a/arch/x86/kernel/ptrace.c b/arch/x86/kernel/ptrace.c
index 702c33efea84..d862e396b099 100644
--- a/arch/x86/kernel/ptrace.c
+++ b/arch/x86/kernel/ptrace.c
@@ -1160,7 +1160,7 @@ static int genregs32_set(struct task_struct *target,
1160 if (kbuf) { 1160 if (kbuf) {
1161 const compat_ulong_t *k = kbuf; 1161 const compat_ulong_t *k = kbuf;
1162 while (count > 0 && !ret) { 1162 while (count > 0 && !ret) {
1163 ret = putreg(target, pos, *k++); 1163 ret = putreg32(target, pos, *k++);
1164 count -= sizeof(*k); 1164 count -= sizeof(*k);
1165 pos += sizeof(*k); 1165 pos += sizeof(*k);
1166 } 1166 }
@@ -1171,7 +1171,7 @@ static int genregs32_set(struct task_struct *target,
1171 ret = __get_user(word, u++); 1171 ret = __get_user(word, u++);
1172 if (ret) 1172 if (ret)
1173 break; 1173 break;
1174 ret = putreg(target, pos, word); 1174 ret = putreg32(target, pos, word);
1175 count -= sizeof(*u); 1175 count -= sizeof(*u);
1176 pos += sizeof(*u); 1176 pos += sizeof(*u);
1177 } 1177 }
diff --git a/arch/x86/kernel/setup_32.c b/arch/x86/kernel/setup_32.c
index 691ab4cb167b..a1d7071a51c9 100644
--- a/arch/x86/kernel/setup_32.c
+++ b/arch/x86/kernel/setup_32.c
@@ -164,7 +164,6 @@ unsigned long mmu_cr4_features = X86_CR4_PAE;
164unsigned int machine_id; 164unsigned int machine_id;
165unsigned int machine_submodel_id; 165unsigned int machine_submodel_id;
166unsigned int BIOS_revision; 166unsigned int BIOS_revision;
167unsigned int mca_pentium_flag;
168 167
169/* Boot loader ID as an integer, for the benefit of proc_dointvec */ 168/* Boot loader ID as an integer, for the benefit of proc_dointvec */
170int bootloader_type; 169int bootloader_type;
diff --git a/arch/x86/kernel/setup_64.c b/arch/x86/kernel/setup_64.c
index c0d8208af12a..6fd804f07821 100644
--- a/arch/x86/kernel/setup_64.c
+++ b/arch/x86/kernel/setup_64.c
@@ -518,7 +518,7 @@ static void __cpuinit display_cacheinfo(struct cpuinfo_x86 *c)
518} 518}
519 519
520#ifdef CONFIG_NUMA 520#ifdef CONFIG_NUMA
521static int nearby_node(int apicid) 521static int __cpuinit nearby_node(int apicid)
522{ 522{
523 int i, node; 523 int i, node;
524 524
@@ -791,7 +791,7 @@ static int __cpuinit intel_num_cpu_cores(struct cpuinfo_x86 *c)
791 return 1; 791 return 1;
792} 792}
793 793
794static void srat_detect_node(void) 794static void __cpuinit srat_detect_node(void)
795{ 795{
796#ifdef CONFIG_NUMA 796#ifdef CONFIG_NUMA
797 unsigned node; 797 unsigned node;
@@ -1046,7 +1046,7 @@ __setup("noclflush", setup_noclflush);
1046void __cpuinit print_cpu_info(struct cpuinfo_x86 *c) 1046void __cpuinit print_cpu_info(struct cpuinfo_x86 *c)
1047{ 1047{
1048 if (c->x86_model_id[0]) 1048 if (c->x86_model_id[0])
1049 printk(KERN_INFO "%s", c->x86_model_id); 1049 printk(KERN_CONT "%s", c->x86_model_id);
1050 1050
1051 if (c->x86_mask || c->cpuid_level >= 0) 1051 if (c->x86_mask || c->cpuid_level >= 0)
1052 printk(KERN_CONT " stepping %02x\n", c->x86_mask); 1052 printk(KERN_CONT " stepping %02x\n", c->x86_mask);
diff --git a/arch/x86/kernel/topology.c b/arch/x86/kernel/topology.c
index a40051b71d9b..0fcc95a354f7 100644
--- a/arch/x86/kernel/topology.c
+++ b/arch/x86/kernel/topology.c
@@ -34,7 +34,7 @@
34static DEFINE_PER_CPU(struct x86_cpu, cpu_devices); 34static DEFINE_PER_CPU(struct x86_cpu, cpu_devices);
35 35
36#ifdef CONFIG_HOTPLUG_CPU 36#ifdef CONFIG_HOTPLUG_CPU
37int arch_register_cpu(int num) 37int __ref arch_register_cpu(int num)
38{ 38{
39 /* 39 /*
40 * CPU0 cannot be offlined due to several 40 * CPU0 cannot be offlined due to several
diff --git a/arch/x86/kernel/vmlinux_32.lds.S b/arch/x86/kernel/vmlinux_32.lds.S
index f1148ac8abe3..2ffa9656fe7a 100644
--- a/arch/x86/kernel/vmlinux_32.lds.S
+++ b/arch/x86/kernel/vmlinux_32.lds.S
@@ -38,7 +38,7 @@ SECTIONS
38 38
39 /* read-only */ 39 /* read-only */
40 .text : AT(ADDR(.text) - LOAD_OFFSET) { 40 .text : AT(ADDR(.text) - LOAD_OFFSET) {
41 . = ALIGN(4096); /* not really needed, already page aligned */ 41 . = ALIGN(PAGE_SIZE); /* not really needed, already page aligned */
42 *(.text.page_aligned) 42 *(.text.page_aligned)
43 TEXT_TEXT 43 TEXT_TEXT
44 SCHED_TEXT 44 SCHED_TEXT
@@ -70,21 +70,21 @@ SECTIONS
70 RODATA 70 RODATA
71 71
72 /* writeable */ 72 /* writeable */
73 . = ALIGN(4096); 73 . = ALIGN(PAGE_SIZE);
74 .data : AT(ADDR(.data) - LOAD_OFFSET) { /* Data */ 74 .data : AT(ADDR(.data) - LOAD_OFFSET) { /* Data */
75 DATA_DATA 75 DATA_DATA
76 CONSTRUCTORS 76 CONSTRUCTORS
77 } :data 77 } :data
78 78
79 . = ALIGN(4096); 79 . = ALIGN(PAGE_SIZE);
80 .data_nosave : AT(ADDR(.data_nosave) - LOAD_OFFSET) { 80 .data_nosave : AT(ADDR(.data_nosave) - LOAD_OFFSET) {
81 __nosave_begin = .; 81 __nosave_begin = .;
82 *(.data.nosave) 82 *(.data.nosave)
83 . = ALIGN(4096); 83 . = ALIGN(PAGE_SIZE);
84 __nosave_end = .; 84 __nosave_end = .;
85 } 85 }
86 86
87 . = ALIGN(4096); 87 . = ALIGN(PAGE_SIZE);
88 .data.page_aligned : AT(ADDR(.data.page_aligned) - LOAD_OFFSET) { 88 .data.page_aligned : AT(ADDR(.data.page_aligned) - LOAD_OFFSET) {
89 *(.data.page_aligned) 89 *(.data.page_aligned)
90 *(.data.idt) 90 *(.data.idt)
@@ -108,7 +108,7 @@ SECTIONS
108 } 108 }
109 109
110 /* might get freed after init */ 110 /* might get freed after init */
111 . = ALIGN(4096); 111 . = ALIGN(PAGE_SIZE);
112 .smp_locks : AT(ADDR(.smp_locks) - LOAD_OFFSET) { 112 .smp_locks : AT(ADDR(.smp_locks) - LOAD_OFFSET) {
113 __smp_locks = .; 113 __smp_locks = .;
114 *(.smp_locks) 114 *(.smp_locks)
@@ -120,10 +120,10 @@ SECTIONS
120 * after boot. Always make sure that ALIGN() directive is present after 120 * after boot. Always make sure that ALIGN() directive is present after
121 * the section which contains __smp_alt_end. 121 * the section which contains __smp_alt_end.
122 */ 122 */
123 . = ALIGN(4096); 123 . = ALIGN(PAGE_SIZE);
124 124
125 /* will be freed after init */ 125 /* will be freed after init */
126 . = ALIGN(4096); /* Init code and data */ 126 . = ALIGN(PAGE_SIZE); /* Init code and data */
127 .init.text : AT(ADDR(.init.text) - LOAD_OFFSET) { 127 .init.text : AT(ADDR(.init.text) - LOAD_OFFSET) {
128 __init_begin = .; 128 __init_begin = .;
129 _sinittext = .; 129 _sinittext = .;
@@ -174,23 +174,23 @@ SECTIONS
174 EXIT_DATA 174 EXIT_DATA
175 } 175 }
176#if defined(CONFIG_BLK_DEV_INITRD) 176#if defined(CONFIG_BLK_DEV_INITRD)
177 . = ALIGN(4096); 177 . = ALIGN(PAGE_SIZE);
178 .init.ramfs : AT(ADDR(.init.ramfs) - LOAD_OFFSET) { 178 .init.ramfs : AT(ADDR(.init.ramfs) - LOAD_OFFSET) {
179 __initramfs_start = .; 179 __initramfs_start = .;
180 *(.init.ramfs) 180 *(.init.ramfs)
181 __initramfs_end = .; 181 __initramfs_end = .;
182 } 182 }
183#endif 183#endif
184 . = ALIGN(4096); 184 . = ALIGN(PAGE_SIZE);
185 .data.percpu : AT(ADDR(.data.percpu) - LOAD_OFFSET) { 185 .data.percpu : AT(ADDR(.data.percpu) - LOAD_OFFSET) {
186 __per_cpu_start = .; 186 __per_cpu_start = .;
187 *(.data.percpu) 187 *(.data.percpu)
188 *(.data.percpu.shared_aligned) 188 *(.data.percpu.shared_aligned)
189 __per_cpu_end = .; 189 __per_cpu_end = .;
190 } 190 }
191 . = ALIGN(4096); 191 . = ALIGN(PAGE_SIZE);
192 /* freed after init ends here */ 192 /* freed after init ends here */
193 193
194 .bss : AT(ADDR(.bss) - LOAD_OFFSET) { 194 .bss : AT(ADDR(.bss) - LOAD_OFFSET) {
195 __init_end = .; 195 __init_end = .;
196 __bss_start = .; /* BSS */ 196 __bss_start = .; /* BSS */
@@ -200,7 +200,7 @@ SECTIONS
200 __bss_stop = .; 200 __bss_stop = .;
201 _end = . ; 201 _end = . ;
202 /* This is where the kernel creates the early boot page tables */ 202 /* This is where the kernel creates the early boot page tables */
203 . = ALIGN(4096); 203 . = ALIGN(PAGE_SIZE);
204 pg0 = . ; 204 pg0 = . ;
205 } 205 }
206 206
diff --git a/arch/x86/kernel/vmlinux_64.lds.S b/arch/x86/kernel/vmlinux_64.lds.S
index 0992b9946c6f..fab132299735 100644
--- a/arch/x86/kernel/vmlinux_64.lds.S
+++ b/arch/x86/kernel/vmlinux_64.lds.S
@@ -37,7 +37,7 @@ SECTIONS
37 KPROBES_TEXT 37 KPROBES_TEXT
38 *(.fixup) 38 *(.fixup)
39 *(.gnu.warning) 39 *(.gnu.warning)
40 _etext = .; /* End of text section */ 40 _etext = .; /* End of text section */
41 } :text = 0x9090 41 } :text = 0x9090
42 42
43 . = ALIGN(16); /* Exception table */ 43 . = ALIGN(16); /* Exception table */
@@ -60,7 +60,7 @@ SECTIONS
60 __tracedata_end = .; 60 __tracedata_end = .;
61 } 61 }
62 62
63 . = ALIGN(PAGE_SIZE); /* Align data segment to page size boundary */ 63 . = ALIGN(PAGE_SIZE); /* Align data segment to page size boundary */
64 /* Data */ 64 /* Data */
65 .data : AT(ADDR(.data) - LOAD_OFFSET) { 65 .data : AT(ADDR(.data) - LOAD_OFFSET) {
66 DATA_DATA 66 DATA_DATA
@@ -119,7 +119,7 @@ SECTIONS
119 .vsyscall_3 ADDR(.vsyscall_0) + 3072: AT(VLOAD(.vsyscall_3)) 119 .vsyscall_3 ADDR(.vsyscall_0) + 3072: AT(VLOAD(.vsyscall_3))
120 { *(.vsyscall_3) } 120 { *(.vsyscall_3) }
121 121
122 . = VSYSCALL_VIRT_ADDR + 4096; 122 . = VSYSCALL_VIRT_ADDR + PAGE_SIZE;
123 123
124#undef VSYSCALL_ADDR 124#undef VSYSCALL_ADDR
125#undef VSYSCALL_PHYS_ADDR 125#undef VSYSCALL_PHYS_ADDR
@@ -129,28 +129,28 @@ SECTIONS
129#undef VVIRT_OFFSET 129#undef VVIRT_OFFSET
130#undef VVIRT 130#undef VVIRT
131 131
132 . = ALIGN(8192); /* init_task */ 132 . = ALIGN(THREAD_SIZE); /* init_task */
133 .data.init_task : AT(ADDR(.data.init_task) - LOAD_OFFSET) { 133 .data.init_task : AT(ADDR(.data.init_task) - LOAD_OFFSET) {
134 *(.data.init_task) 134 *(.data.init_task)
135 }:data.init 135 }:data.init
136 136
137 . = ALIGN(4096); 137 . = ALIGN(PAGE_SIZE);
138 .data.page_aligned : AT(ADDR(.data.page_aligned) - LOAD_OFFSET) { 138 .data.page_aligned : AT(ADDR(.data.page_aligned) - LOAD_OFFSET) {
139 *(.data.page_aligned) 139 *(.data.page_aligned)
140 } 140 }
141 141
142 /* might get freed after init */ 142 /* might get freed after init */
143 . = ALIGN(4096); 143 . = ALIGN(PAGE_SIZE);
144 __smp_alt_begin = .; 144 __smp_alt_begin = .;
145 __smp_locks = .; 145 __smp_locks = .;
146 .smp_locks : AT(ADDR(.smp_locks) - LOAD_OFFSET) { 146 .smp_locks : AT(ADDR(.smp_locks) - LOAD_OFFSET) {
147 *(.smp_locks) 147 *(.smp_locks)
148 } 148 }
149 __smp_locks_end = .; 149 __smp_locks_end = .;
150 . = ALIGN(4096); 150 . = ALIGN(PAGE_SIZE);
151 __smp_alt_end = .; 151 __smp_alt_end = .;
152 152
153 . = ALIGN(4096); /* Init code and data */ 153 . = ALIGN(PAGE_SIZE); /* Init code and data */
154 __init_begin = .; 154 __init_begin = .;
155 .init.text : AT(ADDR(.init.text) - LOAD_OFFSET) { 155 .init.text : AT(ADDR(.init.text) - LOAD_OFFSET) {
156 _sinittext = .; 156 _sinittext = .;
@@ -191,7 +191,7 @@ SECTIONS
191 .altinstructions : AT(ADDR(.altinstructions) - LOAD_OFFSET) { 191 .altinstructions : AT(ADDR(.altinstructions) - LOAD_OFFSET) {
192 *(.altinstructions) 192 *(.altinstructions)
193 } 193 }
194 __alt_instructions_end = .; 194 __alt_instructions_end = .;
195 .altinstr_replacement : AT(ADDR(.altinstr_replacement) - LOAD_OFFSET) { 195 .altinstr_replacement : AT(ADDR(.altinstr_replacement) - LOAD_OFFSET) {
196 *(.altinstr_replacement) 196 *(.altinstr_replacement)
197 } 197 }
@@ -207,25 +207,25 @@ SECTIONS
207/* vdso blob that is mapped into user space */ 207/* vdso blob that is mapped into user space */
208 vdso_start = . ; 208 vdso_start = . ;
209 .vdso : AT(ADDR(.vdso) - LOAD_OFFSET) { *(.vdso) } 209 .vdso : AT(ADDR(.vdso) - LOAD_OFFSET) { *(.vdso) }
210 . = ALIGN(4096); 210 . = ALIGN(PAGE_SIZE);
211 vdso_end = .; 211 vdso_end = .;
212 212
213#ifdef CONFIG_BLK_DEV_INITRD 213#ifdef CONFIG_BLK_DEV_INITRD
214 . = ALIGN(4096); 214 . = ALIGN(PAGE_SIZE);
215 __initramfs_start = .; 215 __initramfs_start = .;
216 .init.ramfs : AT(ADDR(.init.ramfs) - LOAD_OFFSET) { *(.init.ramfs) } 216 .init.ramfs : AT(ADDR(.init.ramfs) - LOAD_OFFSET) { *(.init.ramfs) }
217 __initramfs_end = .; 217 __initramfs_end = .;
218#endif 218#endif
219 219
220 PERCPU(4096) 220 PERCPU(PAGE_SIZE)
221 221
222 . = ALIGN(4096); 222 . = ALIGN(PAGE_SIZE);
223 __init_end = .; 223 __init_end = .;
224 224
225 . = ALIGN(4096); 225 . = ALIGN(PAGE_SIZE);
226 __nosave_begin = .; 226 __nosave_begin = .;
227 .data_nosave : AT(ADDR(.data_nosave) - LOAD_OFFSET) { *(.data.nosave) } 227 .data_nosave : AT(ADDR(.data_nosave) - LOAD_OFFSET) { *(.data.nosave) }
228 . = ALIGN(4096); 228 . = ALIGN(PAGE_SIZE);
229 __nosave_end = .; 229 __nosave_end = .;
230 230
231 __bss_start = .; /* BSS */ 231 __bss_start = .; /* BSS */
diff --git a/arch/x86/lib/csum-wrappers_64.c b/arch/x86/lib/csum-wrappers_64.c
index fd42a4a095fc..459b58a8a15c 100644
--- a/arch/x86/lib/csum-wrappers_64.c
+++ b/arch/x86/lib/csum-wrappers_64.c
@@ -1,117 +1,129 @@
1/* Copyright 2002,2003 Andi Kleen, SuSE Labs. 1/*
2 * Copyright 2002, 2003 Andi Kleen, SuSE Labs.
2 * Subject to the GNU Public License v.2 3 * Subject to the GNU Public License v.2
3 * 4 *
4 * Wrappers of assembly checksum functions for x86-64. 5 * Wrappers of assembly checksum functions for x86-64.
5 */ 6 */
6
7#include <asm/checksum.h> 7#include <asm/checksum.h>
8#include <linux/module.h> 8#include <linux/module.h>
9 9
10/** 10/**
11 * csum_partial_copy_from_user - Copy and checksum from user space. 11 * csum_partial_copy_from_user - Copy and checksum from user space.
12 * @src: source address (user space) 12 * @src: source address (user space)
13 * @dst: destination address 13 * @dst: destination address
14 * @len: number of bytes to be copied. 14 * @len: number of bytes to be copied.
15 * @isum: initial sum that is added into the result (32bit unfolded) 15 * @isum: initial sum that is added into the result (32bit unfolded)
16 * @errp: set to -EFAULT for an bad source address. 16 * @errp: set to -EFAULT for an bad source address.
17 * 17 *
18 * Returns an 32bit unfolded checksum of the buffer. 18 * Returns an 32bit unfolded checksum of the buffer.
19 * src and dst are best aligned to 64bits. 19 * src and dst are best aligned to 64bits.
20 */ 20 */
21__wsum 21__wsum
22csum_partial_copy_from_user(const void __user *src, void *dst, 22csum_partial_copy_from_user(const void __user *src, void *dst,
23 int len, __wsum isum, int *errp) 23 int len, __wsum isum, int *errp)
24{ 24{
25 might_sleep(); 25 might_sleep();
26 *errp = 0; 26 *errp = 0;
27 if (likely(access_ok(VERIFY_READ,src, len))) { 27
28 /* Why 6, not 7? To handle odd addresses aligned we 28 if (!likely(access_ok(VERIFY_READ, src, len)))
29 would need to do considerable complications to fix the 29 goto out_err;
30 checksum which is defined as an 16bit accumulator. The 30
31 fix alignment code is primarily for performance 31 /*
32 compatibility with 32bit and that will handle odd 32 * Why 6, not 7? To handle odd addresses aligned we
33 addresses slowly too. */ 33 * would need to do considerable complications to fix the
34 if (unlikely((unsigned long)src & 6)) { 34 * checksum which is defined as an 16bit accumulator. The
35 while (((unsigned long)src & 6) && len >= 2) { 35 * fix alignment code is primarily for performance
36 __u16 val16; 36 * compatibility with 32bit and that will handle odd
37 *errp = __get_user(val16, (const __u16 __user *)src); 37 * addresses slowly too.
38 if (*errp) 38 */
39 return isum; 39 if (unlikely((unsigned long)src & 6)) {
40 *(__u16 *)dst = val16; 40 while (((unsigned long)src & 6) && len >= 2) {
41 isum = (__force __wsum)add32_with_carry( 41 __u16 val16;
42 (__force unsigned)isum, val16); 42
43 src += 2; 43 *errp = __get_user(val16, (const __u16 __user *)src);
44 dst += 2; 44 if (*errp)
45 len -= 2; 45 return isum;
46 } 46
47 *(__u16 *)dst = val16;
48 isum = (__force __wsum)add32_with_carry(
49 (__force unsigned)isum, val16);
50 src += 2;
51 dst += 2;
52 len -= 2;
47 } 53 }
48 isum = csum_partial_copy_generic((__force const void *)src, 54 }
49 dst, len, isum, errp, NULL); 55 isum = csum_partial_copy_generic((__force const void *)src,
50 if (likely(*errp == 0)) 56 dst, len, isum, errp, NULL);
51 return isum; 57 if (unlikely(*errp))
52 } 58 goto out_err;
59
60 return isum;
61
62out_err:
53 *errp = -EFAULT; 63 *errp = -EFAULT;
54 memset(dst,0,len); 64 memset(dst, 0, len);
55 return isum;
56}
57 65
66 return isum;
67}
58EXPORT_SYMBOL(csum_partial_copy_from_user); 68EXPORT_SYMBOL(csum_partial_copy_from_user);
59 69
60/** 70/**
61 * csum_partial_copy_to_user - Copy and checksum to user space. 71 * csum_partial_copy_to_user - Copy and checksum to user space.
62 * @src: source address 72 * @src: source address
63 * @dst: destination address (user space) 73 * @dst: destination address (user space)
64 * @len: number of bytes to be copied. 74 * @len: number of bytes to be copied.
65 * @isum: initial sum that is added into the result (32bit unfolded) 75 * @isum: initial sum that is added into the result (32bit unfolded)
66 * @errp: set to -EFAULT for an bad destination address. 76 * @errp: set to -EFAULT for an bad destination address.
67 * 77 *
68 * Returns an 32bit unfolded checksum of the buffer. 78 * Returns an 32bit unfolded checksum of the buffer.
69 * src and dst are best aligned to 64bits. 79 * src and dst are best aligned to 64bits.
70 */ 80 */
71__wsum 81__wsum
72csum_partial_copy_to_user(const void *src, void __user *dst, 82csum_partial_copy_to_user(const void *src, void __user *dst,
73 int len, __wsum isum, int *errp) 83 int len, __wsum isum, int *errp)
74{ 84{
75 might_sleep(); 85 might_sleep();
86
76 if (unlikely(!access_ok(VERIFY_WRITE, dst, len))) { 87 if (unlikely(!access_ok(VERIFY_WRITE, dst, len))) {
77 *errp = -EFAULT; 88 *errp = -EFAULT;
78 return 0; 89 return 0;
79 } 90 }
80 91
81 if (unlikely((unsigned long)dst & 6)) { 92 if (unlikely((unsigned long)dst & 6)) {
82 while (((unsigned long)dst & 6) && len >= 2) { 93 while (((unsigned long)dst & 6) && len >= 2) {
83 __u16 val16 = *(__u16 *)src; 94 __u16 val16 = *(__u16 *)src;
95
84 isum = (__force __wsum)add32_with_carry( 96 isum = (__force __wsum)add32_with_carry(
85 (__force unsigned)isum, val16); 97 (__force unsigned)isum, val16);
86 *errp = __put_user(val16, (__u16 __user *)dst); 98 *errp = __put_user(val16, (__u16 __user *)dst);
87 if (*errp) 99 if (*errp)
88 return isum; 100 return isum;
89 src += 2; 101 src += 2;
90 dst += 2; 102 dst += 2;
91 len -= 2; 103 len -= 2;
92 } 104 }
93 } 105 }
94 106
95 *errp = 0; 107 *errp = 0;
96 return csum_partial_copy_generic(src, (void __force *)dst,len,isum,NULL,errp); 108 return csum_partial_copy_generic(src, (void __force *)dst,
97} 109 len, isum, NULL, errp);
98 110}
99EXPORT_SYMBOL(csum_partial_copy_to_user); 111EXPORT_SYMBOL(csum_partial_copy_to_user);
100 112
101/** 113/**
102 * csum_partial_copy_nocheck - Copy and checksum. 114 * csum_partial_copy_nocheck - Copy and checksum.
103 * @src: source address 115 * @src: source address
104 * @dst: destination address 116 * @dst: destination address
105 * @len: number of bytes to be copied. 117 * @len: number of bytes to be copied.
106 * @isum: initial sum that is added into the result (32bit unfolded) 118 * @isum: initial sum that is added into the result (32bit unfolded)
107 * 119 *
108 * Returns an 32bit unfolded checksum of the buffer. 120 * Returns an 32bit unfolded checksum of the buffer.
109 */ 121 */
110__wsum 122__wsum
111csum_partial_copy_nocheck(const void *src, void *dst, int len, __wsum sum) 123csum_partial_copy_nocheck(const void *src, void *dst, int len, __wsum sum)
112{ 124{
113 return csum_partial_copy_generic(src,dst,len,sum,NULL,NULL); 125 return csum_partial_copy_generic(src, dst, len, sum, NULL, NULL);
114} 126}
115EXPORT_SYMBOL(csum_partial_copy_nocheck); 127EXPORT_SYMBOL(csum_partial_copy_nocheck);
116 128
117__sum16 csum_ipv6_magic(const struct in6_addr *saddr, 129__sum16 csum_ipv6_magic(const struct in6_addr *saddr,
@@ -119,17 +131,20 @@ __sum16 csum_ipv6_magic(const struct in6_addr *saddr,
119 __u32 len, unsigned short proto, __wsum sum) 131 __u32 len, unsigned short proto, __wsum sum)
120{ 132{
121 __u64 rest, sum64; 133 __u64 rest, sum64;
122 134
123 rest = (__force __u64)htonl(len) + (__force __u64)htons(proto) + 135 rest = (__force __u64)htonl(len) + (__force __u64)htons(proto) +
124 (__force __u64)sum; 136 (__force __u64)sum;
125 asm(" addq (%[saddr]),%[sum]\n"
126 " adcq 8(%[saddr]),%[sum]\n"
127 " adcq (%[daddr]),%[sum]\n"
128 " adcq 8(%[daddr]),%[sum]\n"
129 " adcq $0,%[sum]\n"
130 : [sum] "=r" (sum64)
131 : "[sum]" (rest),[saddr] "r" (saddr), [daddr] "r" (daddr));
132 return csum_fold((__force __wsum)add32_with_carry(sum64 & 0xffffffff, sum64>>32));
133}
134 137
138 asm(" addq (%[saddr]),%[sum]\n"
139 " adcq 8(%[saddr]),%[sum]\n"
140 " adcq (%[daddr]),%[sum]\n"
141 " adcq 8(%[daddr]),%[sum]\n"
142 " adcq $0,%[sum]\n"
143
144 : [sum] "=r" (sum64)
145 : "[sum]" (rest), [saddr] "r" (saddr), [daddr] "r" (daddr));
146
147 return csum_fold(
148 (__force __wsum)add32_with_carry(sum64 & 0xffffffff, sum64>>32));
149}
135EXPORT_SYMBOL(csum_ipv6_magic); 150EXPORT_SYMBOL(csum_ipv6_magic);
diff --git a/arch/x86/lib/io_64.c b/arch/x86/lib/io_64.c
index 87b4a4e18039..3f1eb59b5f08 100644
--- a/arch/x86/lib/io_64.c
+++ b/arch/x86/lib/io_64.c
@@ -1,23 +1,25 @@
1#include <linux/string.h> 1#include <linux/string.h>
2#include <asm/io.h>
3#include <linux/module.h> 2#include <linux/module.h>
3#include <asm/io.h>
4 4
5void __memcpy_toio(unsigned long dst,const void*src,unsigned len) 5void __memcpy_toio(unsigned long dst, const void *src, unsigned len)
6{ 6{
7 __inline_memcpy((void *) dst,src,len); 7 __inline_memcpy((void *)dst, src, len);
8} 8}
9EXPORT_SYMBOL(__memcpy_toio); 9EXPORT_SYMBOL(__memcpy_toio);
10 10
11void __memcpy_fromio(void *dst,unsigned long src,unsigned len) 11void __memcpy_fromio(void *dst, unsigned long src, unsigned len)
12{ 12{
13 __inline_memcpy(dst,(const void *) src,len); 13 __inline_memcpy(dst, (const void *)src, len);
14} 14}
15EXPORT_SYMBOL(__memcpy_fromio); 15EXPORT_SYMBOL(__memcpy_fromio);
16 16
17void memset_io(volatile void __iomem *a, int b, size_t c) 17void memset_io(volatile void __iomem *a, int b, size_t c)
18{ 18{
19 /* XXX: memset can mangle the IO patterns quite a bit. 19 /*
20 perhaps it would be better to use a dumb one */ 20 * TODO: memset can mangle the IO patterns quite a bit.
21 memset((void *)a,b,c); 21 * perhaps it would be better to use a dumb one:
22 */
23 memset((void *)a, b, c);
22} 24}
23EXPORT_SYMBOL(memset_io); 25EXPORT_SYMBOL(memset_io);
diff --git a/arch/x86/mm/init_64.c b/arch/x86/mm/init_64.c
index a4a9cccdd4f2..bb652f5a93fb 100644
--- a/arch/x86/mm/init_64.c
+++ b/arch/x86/mm/init_64.c
@@ -171,6 +171,33 @@ set_pte_phys(unsigned long vaddr, unsigned long phys, pgprot_t prot)
171 __flush_tlb_one(vaddr); 171 __flush_tlb_one(vaddr);
172} 172}
173 173
174/*
175 * The head.S code sets up the kernel high mapping from:
176 * __START_KERNEL_map to __START_KERNEL_map + KERNEL_TEXT_SIZE
177 *
178 * phys_addr holds the negative offset to the kernel, which is added
179 * to the compile time generated pmds. This results in invalid pmds up
180 * to the point where we hit the physaddr 0 mapping.
181 *
182 * We limit the mappings to the region from _text to _end. _end is
183 * rounded up to the 2MB boundary. This catches the invalid pmds as
184 * well, as they are located before _text:
185 */
186void __init cleanup_highmap(void)
187{
188 unsigned long vaddr = __START_KERNEL_map;
189 unsigned long end = round_up((unsigned long)_end, PMD_SIZE) - 1;
190 pmd_t *pmd = level2_kernel_pgt;
191 pmd_t *last_pmd = pmd + PTRS_PER_PMD;
192
193 for (; pmd < last_pmd; pmd++, vaddr += PMD_SIZE) {
194 if (!pmd_present(*pmd))
195 continue;
196 if (vaddr < (unsigned long) _text || vaddr > end)
197 set_pmd(pmd, __pmd(0));
198 }
199}
200
174/* NOTE: this is meant to be run only at boot */ 201/* NOTE: this is meant to be run only at boot */
175void __init 202void __init
176__set_fixmap(enum fixed_addresses idx, unsigned long phys, pgprot_t prot) 203__set_fixmap(enum fixed_addresses idx, unsigned long phys, pgprot_t prot)
diff --git a/arch/x86/mm/ioremap.c b/arch/x86/mm/ioremap.c
index 9f42d7e9c158..882328efc3db 100644
--- a/arch/x86/mm/ioremap.c
+++ b/arch/x86/mm/ioremap.c
@@ -42,6 +42,22 @@ int page_is_ram(unsigned long pagenr)
42 unsigned long addr, end; 42 unsigned long addr, end;
43 int i; 43 int i;
44 44
45 /*
46 * A special case is the first 4Kb of memory;
47 * This is a BIOS owned area, not kernel ram, but generally
48 * not listed as such in the E820 table.
49 */
50 if (pagenr == 0)
51 return 0;
52
53 /*
54 * Second special case: Some BIOSen report the PC BIOS
55 * area (640->1Mb) as ram even though it is not.
56 */
57 if (pagenr >= (BIOS_BEGIN >> PAGE_SHIFT) &&
58 pagenr < (BIOS_END >> PAGE_SHIFT))
59 return 0;
60
45 for (i = 0; i < e820.nr_map; i++) { 61 for (i = 0; i < e820.nr_map; i++) {
46 /* 62 /*
47 * Not usable memory: 63 * Not usable memory:
@@ -51,14 +67,6 @@ int page_is_ram(unsigned long pagenr)
51 addr = (e820.map[i].addr + PAGE_SIZE-1) >> PAGE_SHIFT; 67 addr = (e820.map[i].addr + PAGE_SIZE-1) >> PAGE_SHIFT;
52 end = (e820.map[i].addr + e820.map[i].size) >> PAGE_SHIFT; 68 end = (e820.map[i].addr + e820.map[i].size) >> PAGE_SHIFT;
53 69
54 /*
55 * Sanity check: Some BIOSen report areas as RAM that
56 * are not. Notably the 640->1Mb area, which is the
57 * PCI BIOS area.
58 */
59 if (addr >= (BIOS_BEGIN >> PAGE_SHIFT) &&
60 end < (BIOS_END >> PAGE_SHIFT))
61 continue;
62 70
63 if ((pagenr >= addr) && (pagenr < end)) 71 if ((pagenr >= addr) && (pagenr < end))
64 return 1; 72 return 1;
@@ -126,6 +134,8 @@ static void __iomem *__ioremap(unsigned long phys_addr, unsigned long size,
126 return NULL; 134 return NULL;
127 } 135 }
128 136
137 WARN_ON_ONCE(page_is_ram(pfn));
138
129 switch (mode) { 139 switch (mode) {
130 case IOR_MODE_UNCACHED: 140 case IOR_MODE_UNCACHED:
131 default: 141 default:
diff --git a/arch/x86/mm/numa_64.c b/arch/x86/mm/numa_64.c
index 1aecc658cd7d..59898fb0a4aa 100644
--- a/arch/x86/mm/numa_64.c
+++ b/arch/x86/mm/numa_64.c
@@ -494,11 +494,13 @@ void __init numa_initmem_init(unsigned long start_pfn, unsigned long end_pfn)
494 int i; 494 int i;
495 495
496 nodes_clear(node_possible_map); 496 nodes_clear(node_possible_map);
497 nodes_clear(node_online_map);
497 498
498#ifdef CONFIG_NUMA_EMU 499#ifdef CONFIG_NUMA_EMU
499 if (cmdline && !numa_emulation(start_pfn, end_pfn)) 500 if (cmdline && !numa_emulation(start_pfn, end_pfn))
500 return; 501 return;
501 nodes_clear(node_possible_map); 502 nodes_clear(node_possible_map);
503 nodes_clear(node_online_map);
502#endif 504#endif
503 505
504#ifdef CONFIG_ACPI_NUMA 506#ifdef CONFIG_ACPI_NUMA
@@ -506,6 +508,7 @@ void __init numa_initmem_init(unsigned long start_pfn, unsigned long end_pfn)
506 end_pfn << PAGE_SHIFT)) 508 end_pfn << PAGE_SHIFT))
507 return; 509 return;
508 nodes_clear(node_possible_map); 510 nodes_clear(node_possible_map);
511 nodes_clear(node_online_map);
509#endif 512#endif
510 513
511#ifdef CONFIG_K8_NUMA 514#ifdef CONFIG_K8_NUMA
@@ -513,6 +516,7 @@ void __init numa_initmem_init(unsigned long start_pfn, unsigned long end_pfn)
513 end_pfn<<PAGE_SHIFT)) 516 end_pfn<<PAGE_SHIFT))
514 return; 517 return;
515 nodes_clear(node_possible_map); 518 nodes_clear(node_possible_map);
519 nodes_clear(node_online_map);
516#endif 520#endif
517 printk(KERN_INFO "%s\n", 521 printk(KERN_INFO "%s\n",
518 numa_off ? "NUMA turned off" : "No NUMA configuration found"); 522 numa_off ? "NUMA turned off" : "No NUMA configuration found");
@@ -524,7 +528,6 @@ void __init numa_initmem_init(unsigned long start_pfn, unsigned long end_pfn)
524 memnode_shift = 63; 528 memnode_shift = 63;
525 memnodemap = memnode.embedded_map; 529 memnodemap = memnode.embedded_map;
526 memnodemap[0] = 0; 530 memnodemap[0] = 0;
527 nodes_clear(node_online_map);
528 node_set_online(0); 531 node_set_online(0);
529 node_set(0, node_possible_map); 532 node_set(0, node_possible_map);
530 for (i = 0; i < NR_CPUS; i++) 533 for (i = 0; i < NR_CPUS; i++)
diff --git a/arch/x86/mm/pageattr.c b/arch/x86/mm/pageattr.c
index 4119379f80ff..464d8fc21ce6 100644
--- a/arch/x86/mm/pageattr.c
+++ b/arch/x86/mm/pageattr.c
@@ -16,6 +16,7 @@
16#include <asm/sections.h> 16#include <asm/sections.h>
17#include <asm/uaccess.h> 17#include <asm/uaccess.h>
18#include <asm/pgalloc.h> 18#include <asm/pgalloc.h>
19#include <asm/proto.h>
19 20
20/* 21/*
21 * The current flushing context - we pass it instead of 5 arguments: 22 * The current flushing context - we pass it instead of 5 arguments:
@@ -26,8 +27,23 @@ struct cpa_data {
26 pgprot_t mask_clr; 27 pgprot_t mask_clr;
27 int numpages; 28 int numpages;
28 int flushtlb; 29 int flushtlb;
30 unsigned long pfn;
29}; 31};
30 32
33#ifdef CONFIG_X86_64
34
35static inline unsigned long highmap_start_pfn(void)
36{
37 return __pa(_text) >> PAGE_SHIFT;
38}
39
40static inline unsigned long highmap_end_pfn(void)
41{
42 return __pa(round_up((unsigned long)_end, PMD_SIZE)) >> PAGE_SHIFT;
43}
44
45#endif
46
31static inline int 47static inline int
32within(unsigned long addr, unsigned long start, unsigned long end) 48within(unsigned long addr, unsigned long start, unsigned long end)
33{ 49{
@@ -123,29 +139,14 @@ static void cpa_flush_range(unsigned long start, int numpages, int cache)
123 } 139 }
124} 140}
125 141
126#define HIGH_MAP_START __START_KERNEL_map
127#define HIGH_MAP_END (__START_KERNEL_map + KERNEL_TEXT_SIZE)
128
129
130/*
131 * Converts a virtual address to a X86-64 highmap address
132 */
133static unsigned long virt_to_highmap(void *address)
134{
135#ifdef CONFIG_X86_64
136 return __pa((unsigned long)address) + HIGH_MAP_START - phys_base;
137#else
138 return (unsigned long)address;
139#endif
140}
141
142/* 142/*
143 * Certain areas of memory on x86 require very specific protection flags, 143 * Certain areas of memory on x86 require very specific protection flags,
144 * for example the BIOS area or kernel text. Callers don't always get this 144 * for example the BIOS area or kernel text. Callers don't always get this
145 * right (again, ioremap() on BIOS memory is not uncommon) so this function 145 * right (again, ioremap() on BIOS memory is not uncommon) so this function
146 * checks and fixes these known static required protection bits. 146 * checks and fixes these known static required protection bits.
147 */ 147 */
148static inline pgprot_t static_protections(pgprot_t prot, unsigned long address) 148static inline pgprot_t static_protections(pgprot_t prot, unsigned long address,
149 unsigned long pfn)
149{ 150{
150 pgprot_t forbidden = __pgprot(0); 151 pgprot_t forbidden = __pgprot(0);
151 152
@@ -153,30 +154,23 @@ static inline pgprot_t static_protections(pgprot_t prot, unsigned long address)
153 * The BIOS area between 640k and 1Mb needs to be executable for 154 * The BIOS area between 640k and 1Mb needs to be executable for
154 * PCI BIOS based config access (CONFIG_PCI_GOBIOS) support. 155 * PCI BIOS based config access (CONFIG_PCI_GOBIOS) support.
155 */ 156 */
156 if (within(__pa(address), BIOS_BEGIN, BIOS_END)) 157 if (within(pfn, BIOS_BEGIN >> PAGE_SHIFT, BIOS_END >> PAGE_SHIFT))
157 pgprot_val(forbidden) |= _PAGE_NX; 158 pgprot_val(forbidden) |= _PAGE_NX;
158 159
159 /* 160 /*
160 * The kernel text needs to be executable for obvious reasons 161 * The kernel text needs to be executable for obvious reasons
161 * Does not cover __inittext since that is gone later on 162 * Does not cover __inittext since that is gone later on. On
163 * 64bit we do not enforce !NX on the low mapping
162 */ 164 */
163 if (within(address, (unsigned long)_text, (unsigned long)_etext)) 165 if (within(address, (unsigned long)_text, (unsigned long)_etext))
164 pgprot_val(forbidden) |= _PAGE_NX; 166 pgprot_val(forbidden) |= _PAGE_NX;
165 /*
166 * Do the same for the x86-64 high kernel mapping
167 */
168 if (within(address, virt_to_highmap(_text), virt_to_highmap(_etext)))
169 pgprot_val(forbidden) |= _PAGE_NX;
170 167
171 /* The .rodata section needs to be read-only */
172 if (within(address, (unsigned long)__start_rodata,
173 (unsigned long)__end_rodata))
174 pgprot_val(forbidden) |= _PAGE_RW;
175 /* 168 /*
176 * Do the same for the x86-64 high kernel mapping 169 * The .rodata section needs to be read-only. Using the pfn
170 * catches all aliases.
177 */ 171 */
178 if (within(address, virt_to_highmap(__start_rodata), 172 if (within(pfn, __pa((unsigned long)__start_rodata) >> PAGE_SHIFT,
179 virt_to_highmap(__end_rodata))) 173 __pa((unsigned long)__end_rodata) >> PAGE_SHIFT))
180 pgprot_val(forbidden) |= _PAGE_RW; 174 pgprot_val(forbidden) |= _PAGE_RW;
181 175
182 prot = __pgprot(pgprot_val(prot) & ~pgprot_val(forbidden)); 176 prot = __pgprot(pgprot_val(prot) & ~pgprot_val(forbidden));
@@ -253,7 +247,7 @@ static int
253try_preserve_large_page(pte_t *kpte, unsigned long address, 247try_preserve_large_page(pte_t *kpte, unsigned long address,
254 struct cpa_data *cpa) 248 struct cpa_data *cpa)
255{ 249{
256 unsigned long nextpage_addr, numpages, pmask, psize, flags, addr; 250 unsigned long nextpage_addr, numpages, pmask, psize, flags, addr, pfn;
257 pte_t new_pte, old_pte, *tmp; 251 pte_t new_pte, old_pte, *tmp;
258 pgprot_t old_prot, new_prot; 252 pgprot_t old_prot, new_prot;
259 int i, do_split = 1; 253 int i, do_split = 1;
@@ -301,7 +295,15 @@ try_preserve_large_page(pte_t *kpte, unsigned long address,
301 295
302 pgprot_val(new_prot) &= ~pgprot_val(cpa->mask_clr); 296 pgprot_val(new_prot) &= ~pgprot_val(cpa->mask_clr);
303 pgprot_val(new_prot) |= pgprot_val(cpa->mask_set); 297 pgprot_val(new_prot) |= pgprot_val(cpa->mask_set);
304 new_prot = static_protections(new_prot, address); 298
299 /*
300 * old_pte points to the large page base address. So we need
301 * to add the offset of the virtual address:
302 */
303 pfn = pte_pfn(old_pte) + ((address & (psize - 1)) >> PAGE_SHIFT);
304 cpa->pfn = pfn;
305
306 new_prot = static_protections(new_prot, address, pfn);
305 307
306 /* 308 /*
307 * We need to check the full range, whether 309 * We need to check the full range, whether
@@ -309,8 +311,9 @@ try_preserve_large_page(pte_t *kpte, unsigned long address,
309 * the pages in the range we try to preserve: 311 * the pages in the range we try to preserve:
310 */ 312 */
311 addr = address + PAGE_SIZE; 313 addr = address + PAGE_SIZE;
312 for (i = 1; i < cpa->numpages; i++, addr += PAGE_SIZE) { 314 pfn++;
313 pgprot_t chk_prot = static_protections(new_prot, addr); 315 for (i = 1; i < cpa->numpages; i++, addr += PAGE_SIZE, pfn++) {
316 pgprot_t chk_prot = static_protections(new_prot, addr, pfn);
314 317
315 if (pgprot_val(chk_prot) != pgprot_val(new_prot)) 318 if (pgprot_val(chk_prot) != pgprot_val(new_prot))
316 goto out_unlock; 319 goto out_unlock;
@@ -505,46 +508,46 @@ out_unlock:
505 return 0; 508 return 0;
506} 509}
507 510
508static int __change_page_attr(unsigned long address, struct cpa_data *cpa) 511static int __change_page_attr(struct cpa_data *cpa, int primary)
509{ 512{
513 unsigned long address = cpa->vaddr;
510 int do_split, err; 514 int do_split, err;
511 unsigned int level; 515 unsigned int level;
512 struct page *kpte_page; 516 pte_t *kpte, old_pte;
513 pte_t *kpte;
514 517
515repeat: 518repeat:
516 kpte = lookup_address(address, &level); 519 kpte = lookup_address(address, &level);
517 if (!kpte) 520 if (!kpte)
518 return -EINVAL; 521 return primary ? -EINVAL : 0;
519 522
520 kpte_page = virt_to_page(kpte); 523 old_pte = *kpte;
521 BUG_ON(PageLRU(kpte_page)); 524 if (!pte_val(old_pte)) {
522 BUG_ON(PageCompound(kpte_page)); 525 if (!primary)
526 return 0;
527 printk(KERN_WARNING "CPA: called for zero pte. "
528 "vaddr = %lx cpa->vaddr = %lx\n", address,
529 cpa->vaddr);
530 WARN_ON(1);
531 return -EINVAL;
532 }
523 533
524 if (level == PG_LEVEL_4K) { 534 if (level == PG_LEVEL_4K) {
525 pte_t new_pte, old_pte = *kpte; 535 pte_t new_pte;
526 pgprot_t new_prot = pte_pgprot(old_pte); 536 pgprot_t new_prot = pte_pgprot(old_pte);
527 537 unsigned long pfn = pte_pfn(old_pte);
528 if(!pte_val(old_pte)) {
529 printk(KERN_WARNING "CPA: called for zero pte. "
530 "vaddr = %lx cpa->vaddr = %lx\n", address,
531 cpa->vaddr);
532 WARN_ON(1);
533 return -EINVAL;
534 }
535 538
536 pgprot_val(new_prot) &= ~pgprot_val(cpa->mask_clr); 539 pgprot_val(new_prot) &= ~pgprot_val(cpa->mask_clr);
537 pgprot_val(new_prot) |= pgprot_val(cpa->mask_set); 540 pgprot_val(new_prot) |= pgprot_val(cpa->mask_set);
538 541
539 new_prot = static_protections(new_prot, address); 542 new_prot = static_protections(new_prot, address, pfn);
540 543
541 /* 544 /*
542 * We need to keep the pfn from the existing PTE, 545 * We need to keep the pfn from the existing PTE,
543 * after all we're only going to change it's attributes 546 * after all we're only going to change it's attributes
544 * not the memory it points to 547 * not the memory it points to
545 */ 548 */
546 new_pte = pfn_pte(pte_pfn(old_pte), canon_pgprot(new_prot)); 549 new_pte = pfn_pte(pfn, canon_pgprot(new_prot));
547 550 cpa->pfn = pfn;
548 /* 551 /*
549 * Do we really change anything ? 552 * Do we really change anything ?
550 */ 553 */
@@ -581,67 +584,59 @@ repeat:
581 return err; 584 return err;
582} 585}
583 586
584/** 587static int __change_page_attr_set_clr(struct cpa_data *cpa, int checkalias);
585 * change_page_attr_addr - Change page table attributes in linear mapping 588
586 * @address: Virtual address in linear mapping. 589static int cpa_process_alias(struct cpa_data *cpa)
587 * @prot: New page table attribute (PAGE_*)
588 *
589 * Change page attributes of a page in the direct mapping. This is a variant
590 * of change_page_attr() that also works on memory holes that do not have
591 * mem_map entry (pfn_valid() is false).
592 *
593 * See change_page_attr() documentation for more details.
594 *
595 * Modules and drivers should use the set_memory_* APIs instead.
596 */
597static int change_page_attr_addr(struct cpa_data *cpa)
598{ 590{
599 int err; 591 struct cpa_data alias_cpa;
600 unsigned long address = cpa->vaddr; 592 int ret = 0;
601 593
602#ifdef CONFIG_X86_64 594 if (cpa->pfn > max_pfn_mapped)
603 unsigned long phys_addr = __pa(address); 595 return 0;
604 596
605 /* 597 /*
606 * If we are inside the high mapped kernel range, then we 598 * No need to redo, when the primary call touched the direct
607 * fixup the low mapping first. __va() returns the virtual 599 * mapping already:
608 * address in the linear mapping:
609 */ 600 */
610 if (within(address, HIGH_MAP_START, HIGH_MAP_END)) 601 if (!within(cpa->vaddr, PAGE_OFFSET,
611 address = (unsigned long) __va(phys_addr); 602 PAGE_OFFSET + (max_pfn_mapped << PAGE_SHIFT))) {
612#endif
613 603
614 err = __change_page_attr(address, cpa); 604 alias_cpa = *cpa;
615 if (err) 605 alias_cpa.vaddr = (unsigned long) __va(cpa->pfn << PAGE_SHIFT);
616 return err; 606
607 ret = __change_page_attr_set_clr(&alias_cpa, 0);
608 }
617 609
618#ifdef CONFIG_X86_64 610#ifdef CONFIG_X86_64
611 if (ret)
612 return ret;
613 /*
614 * No need to redo, when the primary call touched the high
615 * mapping already:
616 */
617 if (within(cpa->vaddr, (unsigned long) _text, (unsigned long) _end))
618 return 0;
619
619 /* 620 /*
620 * If the physical address is inside the kernel map, we need 621 * If the physical address is inside the kernel map, we need
621 * to touch the high mapped kernel as well: 622 * to touch the high mapped kernel as well:
622 */ 623 */
623 if (within(phys_addr, 0, KERNEL_TEXT_SIZE)) { 624 if (!within(cpa->pfn, highmap_start_pfn(), highmap_end_pfn()))
624 /* 625 return 0;
625 * Calc the high mapping address. See __phys_addr()
626 * for the non obvious details.
627 *
628 * Note that NX and other required permissions are
629 * checked in static_protections().
630 */
631 address = phys_addr + HIGH_MAP_START - phys_base;
632 626
633 /* 627 alias_cpa = *cpa;
634 * Our high aliases are imprecise, because we check 628 alias_cpa.vaddr =
635 * everything between 0 and KERNEL_TEXT_SIZE, so do 629 (cpa->pfn << PAGE_SHIFT) + __START_KERNEL_map - phys_base;
636 * not propagate lookup failures back to users: 630
637 */ 631 /*
638 __change_page_attr(address, cpa); 632 * The high mapping range is imprecise, so ignore the return value.
639 } 633 */
634 __change_page_attr_set_clr(&alias_cpa, 0);
640#endif 635#endif
641 return err; 636 return ret;
642} 637}
643 638
644static int __change_page_attr_set_clr(struct cpa_data *cpa) 639static int __change_page_attr_set_clr(struct cpa_data *cpa, int checkalias)
645{ 640{
646 int ret, numpages = cpa->numpages; 641 int ret, numpages = cpa->numpages;
647 642
@@ -651,10 +646,17 @@ static int __change_page_attr_set_clr(struct cpa_data *cpa)
651 * preservation check. 646 * preservation check.
652 */ 647 */
653 cpa->numpages = numpages; 648 cpa->numpages = numpages;
654 ret = change_page_attr_addr(cpa); 649
650 ret = __change_page_attr(cpa, checkalias);
655 if (ret) 651 if (ret)
656 return ret; 652 return ret;
657 653
654 if (checkalias) {
655 ret = cpa_process_alias(cpa);
656 if (ret)
657 return ret;
658 }
659
658 /* 660 /*
659 * Adjust the number of pages with the result of the 661 * Adjust the number of pages with the result of the
660 * CPA operation. Either a large page has been 662 * CPA operation. Either a large page has been
@@ -677,7 +679,7 @@ static int change_page_attr_set_clr(unsigned long addr, int numpages,
677 pgprot_t mask_set, pgprot_t mask_clr) 679 pgprot_t mask_set, pgprot_t mask_clr)
678{ 680{
679 struct cpa_data cpa; 681 struct cpa_data cpa;
680 int ret, cache; 682 int ret, cache, checkalias;
681 683
682 /* 684 /*
683 * Check, if we are requested to change a not supported 685 * Check, if we are requested to change a not supported
@@ -703,7 +705,10 @@ static int change_page_attr_set_clr(unsigned long addr, int numpages,
703 cpa.mask_clr = mask_clr; 705 cpa.mask_clr = mask_clr;
704 cpa.flushtlb = 0; 706 cpa.flushtlb = 0;
705 707
706 ret = __change_page_attr_set_clr(&cpa); 708 /* No alias checking for _NX bit modifications */
709 checkalias = (pgprot_val(mask_set) | pgprot_val(mask_clr)) != _PAGE_NX;
710
711 ret = __change_page_attr_set_clr(&cpa, checkalias);
707 712
708 /* 713 /*
709 * Check whether we really changed something: 714 * Check whether we really changed something:
@@ -841,7 +846,7 @@ static int __set_pages_p(struct page *page, int numpages)
841 .mask_set = __pgprot(_PAGE_PRESENT | _PAGE_RW), 846 .mask_set = __pgprot(_PAGE_PRESENT | _PAGE_RW),
842 .mask_clr = __pgprot(0)}; 847 .mask_clr = __pgprot(0)};
843 848
844 return __change_page_attr_set_clr(&cpa); 849 return __change_page_attr_set_clr(&cpa, 1);
845} 850}
846 851
847static int __set_pages_np(struct page *page, int numpages) 852static int __set_pages_np(struct page *page, int numpages)
@@ -851,7 +856,7 @@ static int __set_pages_np(struct page *page, int numpages)
851 .mask_set = __pgprot(0), 856 .mask_set = __pgprot(0),
852 .mask_clr = __pgprot(_PAGE_PRESENT | _PAGE_RW)}; 857 .mask_clr = __pgprot(_PAGE_PRESENT | _PAGE_RW)};
853 858
854 return __change_page_attr_set_clr(&cpa); 859 return __change_page_attr_set_clr(&cpa, 1);
855} 860}
856 861
857void kernel_map_pages(struct page *page, int numpages, int enable) 862void kernel_map_pages(struct page *page, int numpages, int enable)
@@ -894,7 +899,24 @@ void kernel_map_pages(struct page *page, int numpages, int enable)
894 */ 899 */
895 cpa_fill_pool(); 900 cpa_fill_pool();
896} 901}
897#endif 902
903#ifdef CONFIG_HIBERNATION
904
905bool kernel_page_present(struct page *page)
906{
907 unsigned int level;
908 pte_t *pte;
909
910 if (PageHighMem(page))
911 return false;
912
913 pte = lookup_address((unsigned long)page_address(page), &level);
914 return (pte_val(*pte) & _PAGE_PRESENT);
915}
916
917#endif /* CONFIG_HIBERNATION */
918
919#endif /* CONFIG_DEBUG_PAGEALLOC */
898 920
899/* 921/*
900 * The testcases use internal knowledge of the implementation that shouldn't 922 * The testcases use internal knowledge of the implementation that shouldn't
diff --git a/arch/x86/mm/srat_64.c b/arch/x86/mm/srat_64.c
index ecd91ea8a8ae..845001c617cc 100644
--- a/arch/x86/mm/srat_64.c
+++ b/arch/x86/mm/srat_64.c
@@ -166,7 +166,8 @@ static inline int save_add_info(void) {return 0;}
166 * Both SPARSE and RESERVE need nodes_add information. 166 * Both SPARSE and RESERVE need nodes_add information.
167 * This code supports one contiguous hot add area per node. 167 * This code supports one contiguous hot add area per node.
168 */ 168 */
169static int reserve_hotadd(int node, unsigned long start, unsigned long end) 169static int __init
170reserve_hotadd(int node, unsigned long start, unsigned long end)
170{ 171{
171 unsigned long s_pfn = start >> PAGE_SHIFT; 172 unsigned long s_pfn = start >> PAGE_SHIFT;
172 unsigned long e_pfn = end >> PAGE_SHIFT; 173 unsigned long e_pfn = end >> PAGE_SHIFT;
diff --git a/arch/x86/pci/common.c b/arch/x86/pci/common.c
index b7c67a187b6b..7b6e3bb9b28c 100644
--- a/arch/x86/pci/common.c
+++ b/arch/x86/pci/common.c
@@ -541,7 +541,7 @@ void pcibios_disable_device (struct pci_dev *dev)
541 pcibios_disable_irq(dev); 541 pcibios_disable_irq(dev);
542} 542}
543 543
544struct pci_bus *pci_scan_bus_with_sysdata(int busno) 544struct pci_bus *__devinit pci_scan_bus_with_sysdata(int busno)
545{ 545{
546 struct pci_bus *bus = NULL; 546 struct pci_bus *bus = NULL;
547 struct pci_sysdata *sd; 547 struct pci_sysdata *sd;
diff --git a/arch/x86/pci/irq.c b/arch/x86/pci/irq.c
index ed07ce6c171b..a8715861877e 100644
--- a/arch/x86/pci/irq.c
+++ b/arch/x86/pci/irq.c
@@ -583,6 +583,10 @@ static __init int intel_router_probe(struct irq_router *r, struct pci_dev *route
583 case PCI_DEVICE_ID_INTEL_ICH9_4: 583 case PCI_DEVICE_ID_INTEL_ICH9_4:
584 case PCI_DEVICE_ID_INTEL_ICH9_5: 584 case PCI_DEVICE_ID_INTEL_ICH9_5:
585 case PCI_DEVICE_ID_INTEL_TOLAPAI_0: 585 case PCI_DEVICE_ID_INTEL_TOLAPAI_0:
586 case PCI_DEVICE_ID_INTEL_ICH10_0:
587 case PCI_DEVICE_ID_INTEL_ICH10_1:
588 case PCI_DEVICE_ID_INTEL_ICH10_2:
589 case PCI_DEVICE_ID_INTEL_ICH10_3:
586 r->name = "PIIX/ICH"; 590 r->name = "PIIX/ICH";
587 r->get = pirq_piix_get; 591 r->get = pirq_piix_get;
588 r->set = pirq_piix_set; 592 r->set = pirq_piix_set;
diff --git a/arch/x86/power/hibernate_asm_64.S b/arch/x86/power/hibernate_asm_64.S
index 1deb3244b99b..000415947d93 100644
--- a/arch/x86/power/hibernate_asm_64.S
+++ b/arch/x86/power/hibernate_asm_64.S
@@ -20,6 +20,7 @@
20#include <asm/segment.h> 20#include <asm/segment.h>
21#include <asm/page.h> 21#include <asm/page.h>
22#include <asm/asm-offsets.h> 22#include <asm/asm-offsets.h>
23#include <asm/processor-flags.h>
23 24
24ENTRY(swsusp_arch_suspend) 25ENTRY(swsusp_arch_suspend)
25 movq $saved_context, %rax 26 movq $saved_context, %rax
@@ -60,7 +61,7 @@ ENTRY(restore_image)
60 /* Flush TLB */ 61 /* Flush TLB */
61 movq mmu_cr4_features(%rip), %rax 62 movq mmu_cr4_features(%rip), %rax
62 movq %rax, %rdx 63 movq %rax, %rdx
63 andq $~(1<<7), %rdx # PGE 64 andq $~(X86_CR4_PGE), %rdx
64 movq %rdx, %cr4; # turn off PGE 65 movq %rdx, %cr4; # turn off PGE
65 movq %cr3, %rcx; # flush TLB 66 movq %cr3, %rcx; # flush TLB
66 movq %rcx, %cr3; 67 movq %rcx, %cr3;
@@ -112,7 +113,7 @@ ENTRY(restore_registers)
112 /* Flush TLB, including "global" things (vmalloc) */ 113 /* Flush TLB, including "global" things (vmalloc) */
113 movq mmu_cr4_features(%rip), %rax 114 movq mmu_cr4_features(%rip), %rax
114 movq %rax, %rdx 115 movq %rax, %rdx
115 andq $~(1<<7), %rdx; # PGE 116 andq $~(X86_CR4_PGE), %rdx
116 movq %rdx, %cr4; # turn off PGE 117 movq %rdx, %cr4; # turn off PGE
117 movq %cr3, %rcx; # flush TLB 118 movq %cr3, %rcx; # flush TLB
118 movq %rcx, %cr3 119 movq %rcx, %cr3
diff --git a/arch/xtensa/Makefile b/arch/xtensa/Makefile
index 56685a883347..4bd1e14c6b90 100644
--- a/arch/xtensa/Makefile
+++ b/arch/xtensa/Makefile
@@ -59,7 +59,7 @@ LIBGCC := $(shell $(CC) $(KBUILD_CFLAGS) -print-libgcc-file-name)
59head-y := arch/xtensa/kernel/head.o 59head-y := arch/xtensa/kernel/head.o
60core-y += arch/xtensa/kernel/ arch/xtensa/mm/ 60core-y += arch/xtensa/kernel/ arch/xtensa/mm/
61ifneq ($(PLATFORM),) 61ifneq ($(PLATFORM),)
62core-y += arch/xtensa/platform-$(PLATFORM)/ 62core-y += arch/xtensa/platforms/$(PLATFORM)/
63endif 63endif
64libs-y += arch/xtensa/lib/ $(LIBGCC) 64libs-y += arch/xtensa/lib/ $(LIBGCC)
65 65
diff --git a/arch/xtensa/boot/boot-elf/Makefile b/arch/xtensa/boot/boot-elf/Makefile
index 734db7f76583..08e8814f8c71 100644
--- a/arch/xtensa/boot/boot-elf/Makefile
+++ b/arch/xtensa/boot/boot-elf/Makefile
@@ -14,25 +14,26 @@ OBJCOPY_ARGS := -O elf32-xtensa-le
14endif 14endif
15 15
16export OBJCOPY_ARGS 16export OBJCOPY_ARGS
17export CPPFLAGS_boot.lds += -P -C
17 18
18boot-y := bootstrap.o 19boot-y := bootstrap.o
19 20
20OBJS := $(addprefix $(obj)/,$(boot-y)) 21OBJS := $(addprefix $(obj)/,$(boot-y))
21 22
22Image: vmlinux $(OBJS) 23Image: vmlinux $(OBJS) arch/$(ARCH)/boot/boot-elf/boot.lds
23 $(OBJCOPY) --strip-all -R .comment -R .xt.insn -O binary \ 24 $(OBJCOPY) --strip-all -R .comment -R .note.gnu.build-id -O binary \
24 vmlinux vmlinux.tmp 25 vmlinux vmlinux.tmp
25 $(OBJCOPY) $(OBJCOPY_ARGS) -R .comment \ 26 $(OBJCOPY) $(OBJCOPY_ARGS) -R .comment \
26 --add-section image=vmlinux.tmp \ 27 --add-section image=vmlinux.tmp \
27 --set-section-flags image=contents,alloc,load,load,data \ 28 --set-section-flags image=contents,alloc,load,load,data \
28 $(OBJS) $@.tmp 29 $(OBJS) $@.tmp
29 $(LD) $(LDFLAGS) $(LDFLAGS_vmlinux) \ 30 $(LD) $(LDFLAGS) $(LDFLAGS_vmlinux) \
30 -T $(srctree)/arch/$(ARCH)/boot/boot-elf/boot.ld \ 31 -T arch/$(ARCH)/boot/boot-elf/boot.lds \
31 -o arch/$(ARCH)/boot/$@.elf $@.tmp 32 -o arch/$(ARCH)/boot/$@.elf $@.tmp
32 rm -f $@.tmp vmlinux.tmp 33 rm -f $@.tmp vmlinux.tmp
33 34
34Image.initrd: vmlinux $(OBJS) 35Image.initrd: vmlinux $(OBJS)
35 $(OBJCOPY) --strip-all -R .comment -R .xt.insn -O binary \ 36 $(OBJCOPY) --strip-all -R .comment -R .note.gnu.build-id -O binary \
36 --add-section .initrd=arch/$(ARCH)/boot/ramdisk \ 37 --add-section .initrd=arch/$(ARCH)/boot/ramdisk \
37 --set-section-flags .initrd=contents,alloc,load,load,data \ 38 --set-section-flags .initrd=contents,alloc,load,load,data \
38 vmlinux vmlinux.tmp 39 vmlinux vmlinux.tmp
diff --git a/arch/xtensa/boot/boot-elf/boot.ld b/arch/xtensa/boot/boot-elf/boot.lds.S
index 4ab06a0a7a6b..849dfcafd518 100644
--- a/arch/xtensa/boot/boot-elf/boot.ld
+++ b/arch/xtensa/boot/boot-elf/boot.lds.S
@@ -1,4 +1,6 @@
1#include <asm/variant/core.h>
1OUTPUT_ARCH(xtensa) 2OUTPUT_ARCH(xtensa)
3ENTRY(_ResetVector)
2 4
3SECTIONS 5SECTIONS
4{ 6{
@@ -61,7 +63,7 @@ SECTIONS
61 _end = .; 63 _end = .;
62 _param_start = .; 64 _param_start = .;
63 65
64 .ResetVector.text 0xfe000020 : 66 .ResetVector.text XCHAL_RESET_VECTOR_VADDR :
65 { 67 {
66 *(.ResetVector.text) 68 *(.ResetVector.text)
67 } 69 }
diff --git a/arch/xtensa/boot/boot-redboot/Makefile b/arch/xtensa/boot/boot-redboot/Makefile
index 74d15d08077b..872029b84435 100644
--- a/arch/xtensa/boot/boot-redboot/Makefile
+++ b/arch/xtensa/boot/boot-redboot/Makefile
@@ -22,7 +22,7 @@ LIBS := arch/xtensa/boot/lib/lib.a arch/xtensa/lib/lib.a
22LIBGCC := $(shell $(CC) $(KBUILD_CFLAGS) -print-libgcc-file-name) 22LIBGCC := $(shell $(CC) $(KBUILD_CFLAGS) -print-libgcc-file-name)
23 23
24zImage: vmlinux $(OBJS) $(LIBS) 24zImage: vmlinux $(OBJS) $(LIBS)
25 $(OBJCOPY) --strip-all -R .comment -R .xt.insn -O binary \ 25 $(OBJCOPY) --strip-all -R .comment -R .note.gnu.build-id -O binary \
26 vmlinux vmlinux.tmp 26 vmlinux vmlinux.tmp
27 gzip -vf9 vmlinux.tmp 27 gzip -vf9 vmlinux.tmp
28 $(OBJCOPY) $(OBJCOPY_ARGS) -R .comment \ 28 $(OBJCOPY) $(OBJCOPY_ARGS) -R .comment \
diff --git a/arch/xtensa/boot/boot-redboot/boot.ld b/arch/xtensa/boot/boot-redboot/boot.ld
index 65b726410e8a..774db20d11f7 100644
--- a/arch/xtensa/boot/boot-redboot/boot.ld
+++ b/arch/xtensa/boot/boot-redboot/boot.ld
@@ -2,7 +2,7 @@ OUTPUT_ARCH(xtensa)
2 2
3SECTIONS 3SECTIONS
4{ 4{
5 .start 0xD0200000 : { *(.start) } 5 .start 0xD1000000 : { *(.start) }
6 6
7 .text : 7 .text :
8 { 8 {
diff --git a/arch/xtensa/kernel/asm-offsets.c b/arch/xtensa/kernel/asm-offsets.c
index d5ffe7b6443e..ef63adadf7f4 100644
--- a/arch/xtensa/kernel/asm-offsets.c
+++ b/arch/xtensa/kernel/asm-offsets.c
@@ -21,7 +21,6 @@
21#include <linux/mm.h> 21#include <linux/mm.h>
22 22
23#include <asm/ptrace.h> 23#include <asm/ptrace.h>
24#include <asm/processor.h>
25#include <asm/uaccess.h> 24#include <asm/uaccess.h>
26 25
27#define DEFINE(sym, val) asm volatile("\n->" #sym " %0 " #val : : "i" (val)) 26#define DEFINE(sym, val) asm volatile("\n->" #sym " %0 " #val : : "i" (val))
@@ -64,6 +63,8 @@ int main(void)
64 DEFINE(PT_SIZE, sizeof(struct pt_regs)); 63 DEFINE(PT_SIZE, sizeof(struct pt_regs));
65 DEFINE(PT_AREG_END, offsetof (struct pt_regs, areg[XCHAL_NUM_AREGS])); 64 DEFINE(PT_AREG_END, offsetof (struct pt_regs, areg[XCHAL_NUM_AREGS]));
66 DEFINE(PT_USER_SIZE, offsetof(struct pt_regs, areg[XCHAL_NUM_AREGS])); 65 DEFINE(PT_USER_SIZE, offsetof(struct pt_regs, areg[XCHAL_NUM_AREGS]));
66 DEFINE(PT_XTREGS_OPT, offsetof(struct pt_regs, xtregs_opt));
67 DEFINE(XTREGS_OPT_SIZE, sizeof(xtregs_opt_t));
67 68
68 /* struct task_struct */ 69 /* struct task_struct */
69 DEFINE(TASK_PTRACE, offsetof (struct task_struct, ptrace)); 70 DEFINE(TASK_PTRACE, offsetof (struct task_struct, ptrace));
@@ -77,7 +78,19 @@ int main(void)
77 /* struct thread_info (offset from start_struct) */ 78 /* struct thread_info (offset from start_struct) */
78 DEFINE(THREAD_RA, offsetof (struct task_struct, thread.ra)); 79 DEFINE(THREAD_RA, offsetof (struct task_struct, thread.ra));
79 DEFINE(THREAD_SP, offsetof (struct task_struct, thread.sp)); 80 DEFINE(THREAD_SP, offsetof (struct task_struct, thread.sp));
80 DEFINE(THREAD_CP_SAVE, offsetof (struct task_struct, thread.cp_save)); 81 DEFINE(THREAD_CPENABLE, offsetof (struct thread_info, cpenable));
82#if XTENSA_HAVE_COPROCESSORS
83 DEFINE(THREAD_XTREGS_CP0, offsetof (struct thread_info, xtregs_cp));
84 DEFINE(THREAD_XTREGS_CP1, offsetof (struct thread_info, xtregs_cp));
85 DEFINE(THREAD_XTREGS_CP2, offsetof (struct thread_info, xtregs_cp));
86 DEFINE(THREAD_XTREGS_CP3, offsetof (struct thread_info, xtregs_cp));
87 DEFINE(THREAD_XTREGS_CP4, offsetof (struct thread_info, xtregs_cp));
88 DEFINE(THREAD_XTREGS_CP5, offsetof (struct thread_info, xtregs_cp));
89 DEFINE(THREAD_XTREGS_CP6, offsetof (struct thread_info, xtregs_cp));
90 DEFINE(THREAD_XTREGS_CP7, offsetof (struct thread_info, xtregs_cp));
91#endif
92 DEFINE(THREAD_XTREGS_USER, offsetof (struct thread_info, xtregs_user));
93 DEFINE(XTREGS_USER_SIZE, sizeof(xtregs_user_t));
81 DEFINE(THREAD_CURRENT_DS, offsetof (struct task_struct, thread.current_ds)); 94 DEFINE(THREAD_CURRENT_DS, offsetof (struct task_struct, thread.current_ds));
82 95
83 /* struct mm_struct */ 96 /* struct mm_struct */
diff --git a/arch/xtensa/kernel/coprocessor.S b/arch/xtensa/kernel/coprocessor.S
index 01bcb9fcfcbd..2bc1e145c0a4 100644
--- a/arch/xtensa/kernel/coprocessor.S
+++ b/arch/xtensa/kernel/coprocessor.S
@@ -8,193 +8,328 @@
8 * License. See the file "COPYING" in the main directory of this archive 8 * License. See the file "COPYING" in the main directory of this archive
9 * for more details. 9 * for more details.
10 * 10 *
11 * Copyright (C) 2003 - 2005 Tensilica Inc. 11 * Copyright (C) 2003 - 2007 Tensilica Inc.
12 *
13 * Marc Gauthier <marc@tensilica.com> <marc@alumni.uwaterloo.ca>
14 */ 12 */
15 13
16/*
17 * This module contains a table that describes the layout of the various
18 * custom registers and states associated with each coprocessor, as well
19 * as those not associated with any coprocessor ("extra state").
20 * This table is included with core dumps and is available via the ptrace
21 * interface, allowing the layout of such register/state information to
22 * be modified in the kernel without affecting the debugger. Each
23 * register or state is identified using a 32-bit "libdb target number"
24 * assigned when the Xtensa processor is generated.
25 */
26 14
27#include <linux/linkage.h> 15#include <linux/linkage.h>
16#include <asm/asm-offsets.h>
28#include <asm/processor.h> 17#include <asm/processor.h>
18#include <asm/coprocessor.h>
19#include <asm/thread_info.h>
20#include <asm/uaccess.h>
21#include <asm/unistd.h>
22#include <asm/ptrace.h>
23#include <asm/current.h>
24#include <asm/pgtable.h>
25#include <asm/page.h>
26#include <asm/signal.h>
27#include <asm/tlbflush.h>
29 28
30#if XCHAL_HAVE_CP 29/*
30 * Entry condition:
31 *
32 * a0: trashed, original value saved on stack (PT_AREG0)
33 * a1: a1
34 * a2: new stack pointer, original in DEPC
35 * a3: dispatch table
36 * depc: a2, original value saved on stack (PT_DEPC)
37 * excsave_1: a3
38 *
39 * PT_DEPC >= VALID_DOUBLE_EXCEPTION_ADDRESS: double exception, DEPC
40 * < VALID_DOUBLE_EXCEPTION_ADDRESS: regular exception
41 */
31 42
32#define CP_LAST ((XCHAL_CP_MAX - 1) * COPROCESSOR_INFO_SIZE) 43/* IO protection is currently unsupported. */
33 44
34ENTRY(release_coprocessors) 45ENTRY(fast_io_protect)
46 wsr a0, EXCSAVE_1
47 movi a0, unrecoverable_exception
48 callx0 a0
35 49
36 entry a1, 16 50#if XTENSA_HAVE_COPROCESSORS
37 # a2: task
38 movi a3, 1 << XCHAL_CP_MAX # a3: coprocessor-bit
39 movi a4, coprocessor_info+CP_LAST # a4: owner-table
40 # a5: tmp
41 movi a6, 0 # a6: 0
42 rsil a7, LOCKLEVEL # a7: PS
43 51
441: /* Check if task is coprocessor owner of coprocessor[i]. */ 52/*
53 * Macros for lazy context switch.
54 */
45 55
46 l32i a5, a4, COPROCESSOR_INFO_OWNER 56#define SAVE_CP_REGS(x) \
47 srli a3, a3, 1 57 .align 4; \
48 beqz a3, 1f 58 .Lsave_cp_regs_cp##x: \
49 addi a4, a4, -8 59 .if XTENSA_HAVE_COPROCESSOR(x); \
50 beq a2, a5, 1b 60 xchal_cp##x##_store a2 a4 a5 a6 a7; \
61 .endif; \
62 jx a0
51 63
52 /* Found an entry: Clear entry CPENABLE bit to disable CP. */ 64#define SAVE_CP_REGS_TAB(x) \
65 .if XTENSA_HAVE_COPROCESSOR(x); \
66 .long .Lsave_cp_regs_cp##x - .Lsave_cp_regs_jump_table; \
67 .else; \
68 .long 0; \
69 .endif; \
70 .long THREAD_XTREGS_CP##x
53 71
54 rsr a5, CPENABLE
55 s32i a6, a4, COPROCESSOR_INFO_OWNER
56 xor a5, a3, a5
57 wsr a5, CPENABLE
58 72
59 bnez a3, 1b 73#define LOAD_CP_REGS(x) \
74 .align 4; \
75 .Lload_cp_regs_cp##x: \
76 .if XTENSA_HAVE_COPROCESSOR(x); \
77 xchal_cp##x##_load a2 a4 a5 a6 a7; \
78 .endif; \
79 jx a0
60 80
611: wsr a7, PS 81#define LOAD_CP_REGS_TAB(x) \
62 rsync 82 .if XTENSA_HAVE_COPROCESSOR(x); \
63 retw 83 .long .Lload_cp_regs_cp##x - .Lload_cp_regs_jump_table; \
84 .else; \
85 .long 0; \
86 .endif; \
87 .long THREAD_XTREGS_CP##x
64 88
89 SAVE_CP_REGS(0)
90 SAVE_CP_REGS(1)
91 SAVE_CP_REGS(2)
92 SAVE_CP_REGS(3)
93 SAVE_CP_REGS(4)
94 SAVE_CP_REGS(5)
95 SAVE_CP_REGS(6)
96 SAVE_CP_REGS(7)
65 97
66ENTRY(disable_coprocessor) 98 LOAD_CP_REGS(0)
67 entry sp, 16 99 LOAD_CP_REGS(1)
68 rsil a7, LOCKLEVEL 100 LOAD_CP_REGS(2)
69 rsr a3, CPENABLE 101 LOAD_CP_REGS(3)
70 movi a4, 1 102 LOAD_CP_REGS(4)
71 ssl a2 103 LOAD_CP_REGS(5)
72 sll a4, a4 104 LOAD_CP_REGS(6)
73 and a4, a3, a4 105 LOAD_CP_REGS(7)
74 xor a3, a3, a4
75 wsr a3, CPENABLE
76 wsr a7, PS
77 rsync
78 retw
79 106
80ENTRY(enable_coprocessor) 107 .align 4
81 entry sp, 16 108.Lsave_cp_regs_jump_table:
82 rsil a7, LOCKLEVEL 109 SAVE_CP_REGS_TAB(0)
83 rsr a3, CPENABLE 110 SAVE_CP_REGS_TAB(1)
84 movi a4, 1 111 SAVE_CP_REGS_TAB(2)
85 ssl a2 112 SAVE_CP_REGS_TAB(3)
86 sll a4, a4 113 SAVE_CP_REGS_TAB(4)
87 or a3, a3, a4 114 SAVE_CP_REGS_TAB(5)
88 wsr a3, CPENABLE 115 SAVE_CP_REGS_TAB(6)
89 wsr a7, PS 116 SAVE_CP_REGS_TAB(7)
90 rsync
91 retw
92 117
118.Lload_cp_regs_jump_table:
119 LOAD_CP_REGS_TAB(0)
120 LOAD_CP_REGS_TAB(1)
121 LOAD_CP_REGS_TAB(2)
122 LOAD_CP_REGS_TAB(3)
123 LOAD_CP_REGS_TAB(4)
124 LOAD_CP_REGS_TAB(5)
125 LOAD_CP_REGS_TAB(6)
126 LOAD_CP_REGS_TAB(7)
93 127
94ENTRY(save_coprocessor_extra) 128/*
95 entry sp, 16 129 * coprocessor_save(buffer, index)
96 xchal_extra_store_funcbody 130 * a2 a3
97 retw 131 * coprocessor_load(buffer, index)
132 * a2 a3
133 *
134 * Save or load coprocessor registers for coprocessor 'index'.
135 * The register values are saved to or loaded from them 'buffer' address.
136 *
137 * Note that these functions don't update the coprocessor_owner information!
138 *
139 */
98 140
99ENTRY(restore_coprocessor_extra) 141ENTRY(coprocessor_save)
100 entry sp, 16 142 entry a1, 32
101 xchal_extra_load_funcbody 143 s32i a0, a1, 0
144 movi a0, .Lsave_cp_regs_jump_table
145 addx8 a3, a3, a0
146 l32i a3, a3, 0
147 beqz a3, 1f
148 add a0, a0, a3
149 callx0 a0
1501: l32i a0, a1, 0
102 retw 151 retw
103 152
104ENTRY(save_coprocessor_registers) 153ENTRY(coprocessor_load)
105 entry sp, 16 154 entry a1, 32
106 xchal_cpi_store_funcbody 155 s32i a0, a1, 0
156 movi a0, .Lload_cp_regs_jump_table
157 addx4 a3, a3, a0
158 l32i a3, a3, 0
159 beqz a3, 1f
160 add a0, a0, a3
161 callx0 a0
1621: l32i a0, a1, 0
107 retw 163 retw
108 164
109ENTRY(restore_coprocessor_registers) 165/*
110 entry sp, 16 166 * coprocessor_flush(struct task_info*, index)
111 xchal_cpi_load_funcbody 167 * a2 a3
168 * coprocessor_restore(struct task_info*, index)
169 * a2 a3
170 *
171 * Save or load coprocessor registers for coprocessor 'index'.
172 * The register values are saved to or loaded from the coprocessor area
173 * inside the task_info structure.
174 *
175 * Note that these functions don't update the coprocessor_owner information!
176 *
177 */
178
179
180ENTRY(coprocessor_flush)
181 entry a1, 32
182 s32i a0, a1, 0
183 movi a0, .Lsave_cp_regs_jump_table
184 addx8 a3, a3, a0
185 l32i a4, a3, 4
186 l32i a3, a3, 0
187 add a2, a2, a4
188 beqz a3, 1f
189 add a0, a0, a3
190 callx0 a0
1911: l32i a0, a1, 0
112 retw 192 retw
113 193
194ENTRY(coprocessor_restore)
195 entry a1, 32
196 s32i a0, a1, 0
197 movi a0, .Lload_cp_regs_jump_table
198 addx4 a3, a3, a0
199 l32i a4, a3, 4
200 l32i a3, a3, 0
201 add a2, a2, a4
202 beqz a3, 1f
203 add a0, a0, a3
204 callx0 a0
2051: l32i a0, a1, 0
206 retw
114 207
115/* 208/*
116 * The Xtensa compile-time HAL (core.h) XCHAL_*_SA_CONTENTS_LIBDB macros 209 * Entry condition:
117 * describe the contents of coprocessor & extra save areas in terms of
118 * undefined CONTENTS_LIBDB_{SREG,UREG,REGF} macros. We define these
119 * latter macros here; they expand into a table of the format we want.
120 * The general format is:
121 * 210 *
122 * CONTENTS_LIBDB_SREG(libdbnum, offset, size, align, rsv1, name, sregnum, 211 * a0: trashed, original value saved on stack (PT_AREG0)
123 * bitmask, rsv2, rsv3) 212 * a1: a1
124 * CONTENTS_LIBDB_UREG(libdbnum, offset, size, align, rsv1, name, uregnum, 213 * a2: new stack pointer, original in DEPC
125 * bitmask, rsv2, rsv3) 214 * a3: dispatch table
126 * CONTENTS_LIBDB_REGF(libdbnum, offset, size, align, rsv1, name, index, 215 * depc: a2, original value saved on stack (PT_DEPC)
127 * numentries, contentsize, regname_base, 216 * excsave_1: a3
128 * regfile_name, rsv2, rsv3)
129 * 217 *
130 * For this table, we only care about the <libdbnum>, <offset> and <size> 218 * PT_DEPC >= VALID_DOUBLE_EXCEPTION_ADDRESS: double exception, DEPC
131 * fields. 219 * < VALID_DOUBLE_EXCEPTION_ADDRESS: regular exception
132 */ 220 */
133 221
134/* Map all XCHAL CONTENTS macros to the reg_entry asm macro defined below: */ 222ENTRY(fast_coprocessor_double)
135 223 wsr a0, EXCSAVE_1
136#define CONTENTS_LIBDB_SREG(libdbnum,offset,size,align,rsv1,name,sregnum, \ 224 movi a0, unrecoverable_exception
137 bitmask, rsv2, rsv3) \ 225 callx0 a0
138 reg_entry libdbnum, offset, size ;
139#define CONTENTS_LIBDB_UREG(libdbnum,offset,size,align,rsv1,name,uregnum, \
140 bitmask, rsv2, rsv3) \
141 reg_entry libdbnum, offset, size ;
142#define CONTENTS_LIBDB_REGF(libdbnum, offset, size, align, rsv1, name, index, \
143 numentries, contentsize, regname_base, \
144 regfile_name, rsv2, rsv3) \
145 reg_entry libdbnum, offset, size ;
146
147/* A single table entry: */
148 .macro reg_entry libdbnum, offset, size
149 .ifne (__last_offset-(__last_group_offset+\offset))
150 /* padding entry */
151 .word (0xFC000000+__last_offset-(__last_group_offset+\offset))
152 .endif
153 .word \libdbnum /* actual entry */
154 .set __last_offset, __last_group_offset+\offset+\size
155 .endm /* reg_entry */
156
157
158/* Table entry that marks the beginning of a group (coprocessor or "extra"): */
159 .macro reg_group cpnum, num_entries, align
160 .set __last_group_offset, (__last_offset + \align- 1) & -\align
161 .ifne \num_entries
162 .word 0xFD000000+(\cpnum<<16)+\num_entries
163 .endif
164 .endm /* reg_group */
165 226
166/*
167 * Register info tables.
168 */
169 227
170 .section .rodata, "a" 228ENTRY(fast_coprocessor)
171 .globl _xtensa_reginfo_tables 229
172 .globl _xtensa_reginfo_table_size 230 /* Save remaining registers a1-a3 and SAR */
173 .align 4 231
174_xtensa_reginfo_table_size: 232 xsr a3, EXCSAVE_1
175 .word _xtensa_reginfo_table_end - _xtensa_reginfo_tables 233 s32i a3, a2, PT_AREG3
176 234 rsr a3, SAR
177_xtensa_reginfo_tables: 235 s32i a1, a2, PT_AREG1
178 .set __last_offset, 0 236 s32i a3, a2, PT_SAR
179 reg_group 0xFF, XCHAL_EXTRA_SA_CONTENTS_LIBDB_NUM, XCHAL_EXTRA_SA_ALIGN 237 mov a1, a2
180 XCHAL_EXTRA_SA_CONTENTS_LIBDB 238 rsr a2, DEPC
181 reg_group 0, XCHAL_CP0_SA_CONTENTS_LIBDB_NUM, XCHAL_CP0_SA_ALIGN 239 s32i a2, a1, PT_AREG2
182 XCHAL_CP0_SA_CONTENTS_LIBDB 240
183 reg_group 1, XCHAL_CP1_SA_CONTENTS_LIBDB_NUM, XCHAL_CP1_SA_ALIGN 241 /*
184 XCHAL_CP1_SA_CONTENTS_LIBDB 242 * The hal macros require up to 4 temporary registers. We use a3..a6.
185 reg_group 2, XCHAL_CP2_SA_CONTENTS_LIBDB_NUM, XCHAL_CP2_SA_ALIGN 243 */
186 XCHAL_CP2_SA_CONTENTS_LIBDB 244
187 reg_group 3, XCHAL_CP3_SA_CONTENTS_LIBDB_NUM, XCHAL_CP3_SA_ALIGN 245 s32i a4, a1, PT_AREG4
188 XCHAL_CP3_SA_CONTENTS_LIBDB 246 s32i a5, a1, PT_AREG5
189 reg_group 4, XCHAL_CP4_SA_CONTENTS_LIBDB_NUM, XCHAL_CP4_SA_ALIGN 247 s32i a6, a1, PT_AREG6
190 XCHAL_CP4_SA_CONTENTS_LIBDB 248
191 reg_group 5, XCHAL_CP5_SA_CONTENTS_LIBDB_NUM, XCHAL_CP5_SA_ALIGN 249 /* Find coprocessor number. Subtract first CP EXCCAUSE from EXCCAUSE */
192 XCHAL_CP5_SA_CONTENTS_LIBDB 250
193 reg_group 6, XCHAL_CP6_SA_CONTENTS_LIBDB_NUM, XCHAL_CP6_SA_ALIGN 251 rsr a3, EXCCAUSE
194 XCHAL_CP6_SA_CONTENTS_LIBDB 252 addi a3, a3, -EXCCAUSE_COPROCESSOR0_DISABLED
195 reg_group 7, XCHAL_CP7_SA_CONTENTS_LIBDB_NUM, XCHAL_CP7_SA_ALIGN 253
196 XCHAL_CP7_SA_CONTENTS_LIBDB 254 /* Set corresponding CPENABLE bit -> (sar:cp-index, a3: 1<<cp-index)*/
197 .word 0xFC000000 /* invalid register number,marks end of table*/ 255
198_xtensa_reginfo_table_end: 256 ssl a3 # SAR: 32 - coprocessor_number
199#endif 257 movi a2, 1
258 rsr a0, CPENABLE
259 sll a2, a2
260 or a0, a0, a2
261 wsr a0, CPENABLE
262 rsync
263
264 /* Retrieve previous owner. (a3 still holds CP number) */
265
266 movi a0, coprocessor_owner # list of owners
267 addx4 a0, a3, a0 # entry for CP
268 l32i a4, a0, 0
269
270 beqz a4, 1f # skip 'save' if no previous owner
271
272 /* Disable coprocessor for previous owner. (a2 = 1 << CP number) */
273
274 l32i a5, a4, THREAD_CPENABLE
275 xor a5, a5, a2 # (1 << cp-id) still in a2
276 s32i a5, a4, THREAD_CPENABLE
277
278 /*
279 * Get context save area and 'call' save routine.
280 * (a4 still holds previous owner (thread_info), a3 CP number)
281 */
282
283 movi a5, .Lsave_cp_regs_jump_table
284 movi a0, 2f # a0: 'return' address
285 addx8 a3, a3, a5 # a3: coprocessor number
286 l32i a2, a3, 4 # a2: xtregs offset
287 l32i a3, a3, 0 # a3: jump offset
288 add a2, a2, a4
289 add a4, a3, a5 # a4: address of save routine
290 jx a4
291
292 /* Note that only a0 and a1 were preserved. */
293
2942: rsr a3, EXCCAUSE
295 addi a3, a3, -EXCCAUSE_COPROCESSOR0_DISABLED
296 movi a0, coprocessor_owner
297 addx4 a0, a3, a0
298
299 /* Set new 'owner' (a0 points to the CP owner, a3 contains the CP nr) */
300
3011: GET_THREAD_INFO (a4, a1)
302 s32i a4, a0, 0
303
304 /* Get context save area and 'call' load routine. */
305
306 movi a5, .Lload_cp_regs_jump_table
307 movi a0, 1f
308 addx8 a3, a3, a5
309 l32i a2, a3, 4 # a2: xtregs offset
310 l32i a3, a3, 0 # a3: jump offset
311 add a2, a2, a4
312 add a4, a3, a5
313 jx a4
314
315 /* Restore all registers and return from exception handler. */
316
3171: l32i a6, a1, PT_AREG6
318 l32i a5, a1, PT_AREG5
319 l32i a4, a1, PT_AREG4
320
321 l32i a0, a1, PT_SAR
322 l32i a3, a1, PT_AREG3
323 l32i a2, a1, PT_AREG2
324 wsr a0, SAR
325 l32i a0, a1, PT_AREG0
326 l32i a1, a1, PT_AREG1
327
328 rfe
329
330 .data
331ENTRY(coprocessor_owner)
332 .fill XCHAL_CP_MAX, 4, 0
333
334#endif /* XTENSA_HAVE_COPROCESSORS */
200 335
diff --git a/arch/xtensa/kernel/entry.S b/arch/xtensa/kernel/entry.S
index 91a689eca43d..dfd35dcc1cb5 100644
--- a/arch/xtensa/kernel/entry.S
+++ b/arch/xtensa/kernel/entry.S
@@ -25,10 +25,10 @@
25#include <asm/page.h> 25#include <asm/page.h>
26#include <asm/signal.h> 26#include <asm/signal.h>
27#include <asm/tlbflush.h> 27#include <asm/tlbflush.h>
28#include <asm/variant/tie-asm.h>
28 29
29/* Unimplemented features. */ 30/* Unimplemented features. */
30 31
31#undef SIGNAL_HANDLING_IN_DOUBLE_EXCEPTION
32#undef KERNEL_STACK_OVERFLOW_CHECK 32#undef KERNEL_STACK_OVERFLOW_CHECK
33#undef PREEMPTIBLE_KERNEL 33#undef PREEMPTIBLE_KERNEL
34#undef ALLOCA_EXCEPTION_IN_IRAM 34#undef ALLOCA_EXCEPTION_IN_IRAM
@@ -214,19 +214,7 @@ _user_exception:
214 214
215 /* We are back to the original stack pointer (a1) */ 215 /* We are back to the original stack pointer (a1) */
216 216
2172: 2172: /* Now, jump to the common exception handler. */
218#if XCHAL_EXTRA_SA_SIZE
219
220 /* For user exceptions, save the extra state into the user's TCB.
221 * Note: We must assume that xchal_extra_store_funcbody destroys a2..a15
222 */
223
224 GET_CURRENT(a2,a1)
225 addi a2, a2, THREAD_CP_SAVE
226 xchal_extra_store_funcbody
227#endif
228
229 /* Now, jump to the common exception handler. */
230 218
231 j common_exception 219 j common_exception
232 220
@@ -382,6 +370,10 @@ common_exception:
382 s32i a2, a1, PT_LBEG 370 s32i a2, a1, PT_LBEG
383 s32i a3, a1, PT_LEND 371 s32i a3, a1, PT_LEND
384 372
373 /* Save optional registers. */
374
375 save_xtregs_opt a1 a2 a4 a5 a6 a7 PT_XTREGS_OPT
376
385 /* Go to second-level dispatcher. Set up parameters to pass to the 377 /* Go to second-level dispatcher. Set up parameters to pass to the
386 * exception handler and call the exception handler. 378 * exception handler and call the exception handler.
387 */ 379 */
@@ -403,74 +395,49 @@ common_exception_return:
403 /* Jump if we are returning from kernel exceptions. */ 395 /* Jump if we are returning from kernel exceptions. */
404 396
4051: l32i a3, a1, PT_PS 3971: l32i a3, a1, PT_PS
406 _bbsi.l a3, PS_UM_BIT, 2f 398 _bbci.l a3, PS_UM_BIT, 4f
407 j kernel_exception_exit
408 399
409 /* Specific to a user exception exit: 400 /* Specific to a user exception exit:
410 * We need to check some flags for signal handling and rescheduling, 401 * We need to check some flags for signal handling and rescheduling,
411 * and have to restore WB and WS, extra states, and all registers 402 * and have to restore WB and WS, extra states, and all registers
412 * in the register file that were in use in the user task. 403 * in the register file that were in use in the user task.
413 */ 404 * Note that we don't disable interrupts here.
414
4152: wsr a3, PS /* disable interrupts */
416
417 /* Check for signals (keep interrupts disabled while we read TI_FLAGS)
418 * Note: PS.INTLEVEL = 0, PS.EXCM = 1
419 */ 405 */
420 406
421 GET_THREAD_INFO(a2,a1) 407 GET_THREAD_INFO(a2,a1)
422 l32i a4, a2, TI_FLAGS 408 l32i a4, a2, TI_FLAGS
423 409
424 /* Enable interrupts again.
425 * Note: When we get here, we certainly have handled any interrupts.
426 * (Hint: There is only one user exception frame on stack)
427 */
428
429 movi a3, 1 << PS_WOE_BIT
430
431 _bbsi.l a4, TIF_NEED_RESCHED, 3f 410 _bbsi.l a4, TIF_NEED_RESCHED, 3f
432 _bbci.l a4, TIF_SIGPENDING, 4f 411 _bbci.l a4, TIF_SIGPENDING, 4f
433 412
434#ifndef SIGNAL_HANDLING_IN_DOUBLE_EXCEPTION
435 l32i a4, a1, PT_DEPC 413 l32i a4, a1, PT_DEPC
436 bgeui a4, VALID_DOUBLE_EXCEPTION_ADDRESS, 4f 414 bgeui a4, VALID_DOUBLE_EXCEPTION_ADDRESS, 4f
437#endif
438 415
439 /* Reenable interrupts and call do_signal() */ 416 /* Call do_signal() */
440 417
441 wsr a3, PS
442 movi a4, do_signal # int do_signal(struct pt_regs*, sigset_t*) 418 movi a4, do_signal # int do_signal(struct pt_regs*, sigset_t*)
443 mov a6, a1 419 mov a6, a1
444 movi a7, 0 420 movi a7, 0
445 callx4 a4 421 callx4 a4
446 j 1b 422 j 1b
447 423
4483: /* Reenable interrupts and reschedule */ 4243: /* Reschedule */
449 425
450 wsr a3, PS
451 movi a4, schedule # void schedule (void) 426 movi a4, schedule # void schedule (void)
452 callx4 a4 427 callx4 a4
453 j 1b 428 j 1b
454 429
455 /* Restore the state of the task and return from the exception. */ 4304: /* Restore optional registers. */
456
4574: /* a2 holds GET_CURRENT(a2,a1) */
458
459#if XCHAL_EXTRA_SA_SIZE
460 431
461 /* For user exceptions, restore the extra state from the user's TCB. */ 432 load_xtregs_opt a1 a2 a4 a5 a6 a7 PT_XTREGS_OPT
462 433
463 /* Note: a2 still contains GET_CURRENT(a2,a1) */ 434 wsr a3, PS /* disable interrupts */
464 addi a2, a2, THREAD_CP_SAVE
465 xchal_extra_load_funcbody
466 435
467 /* We must assume that xchal_extra_store_funcbody destroys 436 _bbci.l a3, PS_UM_BIT, kernel_exception_exit
468 * registers a2..a15. FIXME, this list can eventually be
469 * reduced once real register requirements of the macro are
470 * finalized. */
471 437
472#endif /* XCHAL_EXTRA_SA_SIZE */ 438user_exception_exit:
473 439
440 /* Restore the state of the task and return from the exception. */
474 441
475 /* Switch to the user thread WINDOWBASE. Save SP temporarily in DEPC */ 442 /* Switch to the user thread WINDOWBASE. Save SP temporarily in DEPC */
476 443
@@ -536,10 +503,6 @@ common_exception_return:
536 503
537kernel_exception_exit: 504kernel_exception_exit:
538 505
539 /* Disable interrupts (a3 holds PT_PS) */
540
541 wsr a3, PS
542
543#ifdef PREEMPTIBLE_KERNEL 506#ifdef PREEMPTIBLE_KERNEL
544 507
545#ifdef CONFIG_PREEMPT 508#ifdef CONFIG_PREEMPT
@@ -618,6 +581,8 @@ kernel_exception_exit:
618 581
619common_exception_exit: 582common_exception_exit:
620 583
584 /* Restore address registers. */
585
621 _bbsi.l a2, 1, 1f 586 _bbsi.l a2, 1, 1f
622 l32i a4, a1, PT_AREG4 587 l32i a4, a1, PT_AREG4
623 l32i a5, a1, PT_AREG5 588 l32i a5, a1, PT_AREG5
@@ -1150,7 +1115,6 @@ CATCH
1150 * excsave_1: a3 1115 * excsave_1: a3
1151 * 1116 *
1152 * Note: We assume the stack pointer is EXC_TABLE_KSTK in the fixup handler. 1117 * Note: We assume the stack pointer is EXC_TABLE_KSTK in the fixup handler.
1153 * Note: We don't need to save a2 in depc (return value)
1154 */ 1118 */
1155 1119
1156ENTRY(fast_syscall_spill_registers) 1120ENTRY(fast_syscall_spill_registers)
@@ -1166,29 +1130,31 @@ ENTRY(fast_syscall_spill_registers)
1166 1130
1167 rsr a0, SAR 1131 rsr a0, SAR
1168 xsr a3, EXCSAVE_1 # restore a3 and excsave_1 1132 xsr a3, EXCSAVE_1 # restore a3 and excsave_1
1169 s32i a0, a2, PT_AREG4 # store SAR to PT_AREG4
1170 s32i a3, a2, PT_AREG3 1133 s32i a3, a2, PT_AREG3
1134 s32i a4, a2, PT_AREG4
1135 s32i a0, a2, PT_AREG5 # store SAR to PT_AREG5
1171 1136
1172 /* The spill routine might clobber a7, a11, and a15. */ 1137 /* The spill routine might clobber a7, a11, and a15. */
1173 1138
1174 s32i a7, a2, PT_AREG5 1139 s32i a7, a2, PT_AREG7
1175 s32i a11, a2, PT_AREG6 1140 s32i a11, a2, PT_AREG11
1176 s32i a15, a2, PT_AREG7 1141 s32i a15, a2, PT_AREG15
1177 1142
1178 call0 _spill_registers # destroys a3, DEPC, and SAR 1143 call0 _spill_registers # destroys a3, a4, and SAR
1179 1144
1180 /* Advance PC, restore registers and SAR, and return from exception. */ 1145 /* Advance PC, restore registers and SAR, and return from exception. */
1181 1146
1182 l32i a3, a2, PT_AREG4 1147 l32i a3, a2, PT_AREG5
1148 l32i a4, a2, PT_AREG4
1183 l32i a0, a2, PT_AREG0 1149 l32i a0, a2, PT_AREG0
1184 wsr a3, SAR 1150 wsr a3, SAR
1185 l32i a3, a2, PT_AREG3 1151 l32i a3, a2, PT_AREG3
1186 1152
1187 /* Restore clobbered registers. */ 1153 /* Restore clobbered registers. */
1188 1154
1189 l32i a7, a2, PT_AREG5 1155 l32i a7, a2, PT_AREG7
1190 l32i a11, a2, PT_AREG6 1156 l32i a11, a2, PT_AREG11
1191 l32i a15, a2, PT_AREG7 1157 l32i a15, a2, PT_AREG15
1192 1158
1193 movi a2, 0 1159 movi a2, 0
1194 rfe 1160 rfe
@@ -1247,16 +1213,6 @@ fast_syscall_spill_registers_fixup:
1247 * Note: This frame might be the same as above. 1213 * Note: This frame might be the same as above.
1248 */ 1214 */
1249 1215
1250#ifdef SIGNAL_HANDLING_IN_DOUBLE_EXCEPTION
1251 /* Restore registers we precautiously saved.
1252 * We have the value of the 'right' a3
1253 */
1254
1255 l32i a7, a2, PT_AREG5
1256 l32i a11, a2, PT_AREG6
1257 l32i a15, a2, PT_AREG7
1258#endif
1259
1260 /* Setup stack pointer. */ 1216 /* Setup stack pointer. */
1261 1217
1262 addi a2, a2, -PT_USER_SIZE 1218 addi a2, a2, -PT_USER_SIZE
@@ -1271,9 +1227,9 @@ fast_syscall_spill_registers_fixup:
1271 1227
1272 movi a3, exc_table 1228 movi a3, exc_table
1273 rsr a0, EXCCAUSE 1229 rsr a0, EXCCAUSE
1274 addx4 a0, a0, a3 # find entry in table 1230 addx4 a0, a0, a3 # find entry in table
1275 l32i a0, a0, EXC_TABLE_FAST_USER # load handler 1231 l32i a0, a0, EXC_TABLE_FAST_USER # load handler
1276 jx a0 1232 jx a0
1277 1233
1278fast_syscall_spill_registers_fixup_return: 1234fast_syscall_spill_registers_fixup_return:
1279 1235
@@ -1290,14 +1246,6 @@ fast_syscall_spill_registers_fixup_return:
1290 s32i a2, a3, EXC_TABLE_PARAM 1246 s32i a2, a3, EXC_TABLE_PARAM
1291 l32i a2, a3, EXC_TABLE_KSTK 1247 l32i a2, a3, EXC_TABLE_KSTK
1292 1248
1293#ifdef SIGNAL_HANDLING_IN_DOUBLE_EXCEPTION
1294 /* Save registers again that might be clobbered. */
1295
1296 s32i a7, a2, PT_AREG5
1297 s32i a11, a2, PT_AREG6
1298 s32i a15, a2, PT_AREG7
1299#endif
1300
1301 /* Load WB at the time the exception occurred. */ 1249 /* Load WB at the time the exception occurred. */
1302 1250
1303 rsr a3, SAR # WB is still in SAR 1251 rsr a3, SAR # WB is still in SAR
@@ -1319,7 +1267,7 @@ fast_syscall_spill_registers_fixup_return:
1319 * This is not a real function. The following conditions must be met: 1267 * This is not a real function. The following conditions must be met:
1320 * 1268 *
1321 * - must be called with call0. 1269 * - must be called with call0.
1322 * - uses DEPC, a3 and SAR. 1270 * - uses a3, a4 and SAR.
1323 * - the last 'valid' register of each frame are clobbered. 1271 * - the last 'valid' register of each frame are clobbered.
1324 * - the caller must have registered a fixup handler 1272 * - the caller must have registered a fixup handler
1325 * (or be inside a critical section) 1273 * (or be inside a critical section)
@@ -1331,41 +1279,39 @@ ENTRY(_spill_registers)
1331 /* 1279 /*
1332 * Rotate ws so that the current windowbase is at bit 0. 1280 * Rotate ws so that the current windowbase is at bit 0.
1333 * Assume ws = xxxwww1yy (www1 current window frame). 1281 * Assume ws = xxxwww1yy (www1 current window frame).
1334 * Rotate ws right so that a2 = yyxxxwww1. 1282 * Rotate ws right so that a4 = yyxxxwww1.
1335 */ 1283 */
1336 1284
1337 wsr a2, DEPC # preserve a2 1285 rsr a4, WINDOWBASE
1338 rsr a2, WINDOWBASE 1286 rsr a3, WINDOWSTART # a3 = xxxwww1yy
1339 rsr a3, WINDOWSTART 1287 ssr a4 # holds WB
1340 ssr a2 # holds WB 1288 slli a4, a3, WSBITS
1341 slli a2, a3, WSBITS 1289 or a3, a3, a4 # a3 = xxxwww1yyxxxwww1yy
1342 or a3, a3, a2 # a2 = xxxwww1yyxxxwww1yy 1290 srl a3, a3 # a3 = 00xxxwww1yyxxxwww1
1343 srl a3, a3
1344 1291
1345 /* We are done if there are no more than the current register frame. */ 1292 /* We are done if there are no more than the current register frame. */
1346 1293
1347 extui a3, a3, 1, WSBITS-2 # a3 = 0yyxxxwww 1294 extui a3, a3, 1, WSBITS-1 # a3 = 0yyxxxwww
1348 movi a2, (1 << (WSBITS-1)) 1295 movi a4, (1 << (WSBITS-1))
1349 _beqz a3, .Lnospill # only one active frame? jump 1296 _beqz a3, .Lnospill # only one active frame? jump
1350 1297
1351 /* We want 1 at the top, so that we return to the current windowbase */ 1298 /* We want 1 at the top, so that we return to the current windowbase */
1352 1299
1353 or a3, a3, a2 # 1yyxxxwww 1300 or a3, a3, a4 # 1yyxxxwww
1354 1301
1355 /* Skip empty frames - get 'oldest' WINDOWSTART-bit. */ 1302 /* Skip empty frames - get 'oldest' WINDOWSTART-bit. */
1356 1303
1357 wsr a3, WINDOWSTART # save shifted windowstart 1304 wsr a3, WINDOWSTART # save shifted windowstart
1358 neg a2, a3 1305 neg a4, a3
1359 and a3, a2, a3 # first bit set from right: 000010000 1306 and a3, a4, a3 # first bit set from right: 000010000
1360 1307
1361 ffs_ws a2, a3 # a2: shifts to skip empty frames 1308 ffs_ws a4, a3 # a4: shifts to skip empty frames
1362 movi a3, WSBITS 1309 movi a3, WSBITS
1363 sub a2, a3, a2 # WSBITS-a2:number of 0-bits from right 1310 sub a4, a3, a4 # WSBITS-a4:number of 0-bits from right
1364 ssr a2 # save in SAR for later. 1311 ssr a4 # save in SAR for later.
1365 1312
1366 rsr a3, WINDOWBASE 1313 rsr a3, WINDOWBASE
1367 add a3, a3, a2 1314 add a3, a3, a4
1368 rsr a2, DEPC # restore a2
1369 wsr a3, WINDOWBASE 1315 wsr a3, WINDOWBASE
1370 rsync 1316 rsync
1371 1317
@@ -1394,6 +1340,9 @@ ENTRY(_spill_registers)
1394 l32e a4, a1, -16 1340 l32e a4, a1, -16
1395 j .Lc12c 1341 j .Lc12c
1396 1342
1343.Lnospill:
1344 ret
1345
1397.Lloop: _bbsi.l a3, 1, .Lc4 1346.Lloop: _bbsi.l a3, 1, .Lc4
1398 _bbci.l a3, 2, .Lc12 1347 _bbci.l a3, 2, .Lc12
1399 1348
@@ -1419,9 +1368,7 @@ ENTRY(_spill_registers)
1419 movi a3, 1 1368 movi a3, 1
1420 sll a3, a3 1369 sll a3, a3
1421 wsr a3, WINDOWSTART 1370 wsr a3, WINDOWSTART
1422 1371 ret
1423.Lnospill:
1424 jx a0
1425 1372
1426.Lc4: s32e a4, a9, -16 1373.Lc4: s32e a4, a9, -16
1427 s32e a5, a9, -12 1374 s32e a5, a9, -12
@@ -1830,154 +1777,6 @@ ENTRY(fast_store_prohibited)
18301: j _user_exception 17771: j _user_exception
1831 1778
1832 1779
1833#if XCHAL_EXTRA_SA_SIZE
1834
1835#warning fast_coprocessor untested
1836
1837/*
1838 * Entry condition:
1839 *
1840 * a0: trashed, original value saved on stack (PT_AREG0)
1841 * a1: a1
1842 * a2: new stack pointer, original in DEPC
1843 * a3: dispatch table
1844 * depc: a2, original value saved on stack (PT_DEPC)
1845 * excsave_1: a3
1846 *
1847 * PT_DEPC >= VALID_DOUBLE_EXCEPTION_ADDRESS: double exception, DEPC
1848 * < VALID_DOUBLE_EXCEPTION_ADDRESS: regular exception
1849 */
1850
1851ENTRY(fast_coprocessor_double)
1852 wsr a0, EXCSAVE_1
1853 movi a0, unrecoverable_exception
1854 callx0 a0
1855
1856ENTRY(fast_coprocessor)
1857
1858 /* Fatal if we are in a double exception. */
1859
1860 l32i a0, a2, PT_DEPC
1861 _bgeui a0, VALID_DOUBLE_EXCEPTION_ADDRESS, fast_coprocessor_double
1862
1863 /* Save some registers a1, a3, a4, SAR */
1864
1865 xsr a3, EXCSAVE_1
1866 s32i a3, a2, PT_AREG3
1867 rsr a3, SAR
1868 s32i a4, a2, PT_AREG4
1869 s32i a1, a2, PT_AREG1
1870 s32i a5, a1, PT_AREG5
1871 s32i a3, a2, PT_SAR
1872 mov a1, a2
1873
1874 /* Currently, the HAL macros only guarantee saving a0 and a1.
1875 * These can and will be refined in the future, but for now,
1876 * just save the remaining registers of a2...a15.
1877 */
1878 s32i a6, a1, PT_AREG6
1879 s32i a7, a1, PT_AREG7
1880 s32i a8, a1, PT_AREG8
1881 s32i a9, a1, PT_AREG9
1882 s32i a10, a1, PT_AREG10
1883 s32i a11, a1, PT_AREG11
1884 s32i a12, a1, PT_AREG12
1885 s32i a13, a1, PT_AREG13
1886 s32i a14, a1, PT_AREG14
1887 s32i a15, a1, PT_AREG15
1888
1889 /* Find coprocessor number. Subtract first CP EXCCAUSE from EXCCAUSE */
1890
1891 rsr a0, EXCCAUSE
1892 addi a3, a0, -XCHAL_EXCCAUSE_COPROCESSOR0_DISABLED
1893
1894 /* Set corresponding CPENABLE bit */
1895
1896 movi a4, 1
1897 ssl a3 # SAR: 32 - coprocessor_number
1898 rsr a5, CPENABLE
1899 sll a4, a4
1900 or a4, a5, a4
1901 wsr a4, CPENABLE
1902 rsync
1903 movi a5, coprocessor_info # list of owner and offset into cp_save
1904 addx8 a0, a4, a5 # entry for CP
1905
1906 bne a4, a5, .Lload # bit wasn't set before, cp not in use
1907
1908 /* Now compare the current task with the owner of the coprocessor.
1909 * If they are the same, there is no reason to save or restore any
1910 * coprocessor state. Having already enabled the coprocessor,
1911 * branch ahead to return.
1912 */
1913 GET_CURRENT(a5,a1)
1914 l32i a4, a0, COPROCESSOR_INFO_OWNER # a4: current owner for this CP
1915 beq a4, a5, .Ldone
1916
1917 /* Find location to dump current coprocessor state:
1918 * task_struct->task_cp_save_offset + coprocessor_offset[coprocessor]
1919 *
1920 * Note: a0 pointer to the entry in the coprocessor owner table,
1921 * a3 coprocessor number,
1922 * a4 current owner of coprocessor.
1923 */
1924 l32i a5, a0, COPROCESSOR_INFO_OFFSET
1925 addi a2, a4, THREAD_CP_SAVE
1926 add a2, a2, a5
1927
1928 /* Store current coprocessor states. (a5 still has CP number) */
1929
1930 xchal_cpi_store_funcbody
1931
1932 /* The macro might have destroyed a3 (coprocessor number), but
1933 * SAR still has 32 - coprocessor_number!
1934 */
1935 movi a3, 32
1936 rsr a4, SAR
1937 sub a3, a3, a4
1938
1939.Lload: /* A new task now owns the corpocessors. Save its TCB pointer into
1940 * the coprocessor owner table.
1941 *
1942 * Note: a0 pointer to the entry in the coprocessor owner table,
1943 * a3 coprocessor number.
1944 */
1945 GET_CURRENT(a4,a1)
1946 s32i a4, a0, 0
1947
1948 /* Find location from where to restore the current coprocessor state.*/
1949
1950 l32i a5, a0, COPROCESSOR_INFO_OFFSET
1951 addi a2, a4, THREAD_CP_SAVE
1952 add a2, a2, a4
1953
1954 xchal_cpi_load_funcbody
1955
1956 /* We must assume that the xchal_cpi_store_funcbody macro destroyed
1957 * registers a2..a15.
1958 */
1959
1960.Ldone: l32i a15, a1, PT_AREG15
1961 l32i a14, a1, PT_AREG14
1962 l32i a13, a1, PT_AREG13
1963 l32i a12, a1, PT_AREG12
1964 l32i a11, a1, PT_AREG11
1965 l32i a10, a1, PT_AREG10
1966 l32i a9, a1, PT_AREG9
1967 l32i a8, a1, PT_AREG8
1968 l32i a7, a1, PT_AREG7
1969 l32i a6, a1, PT_AREG6
1970 l32i a5, a1, PT_AREG5
1971 l32i a4, a1, PT_AREG4
1972 l32i a3, a1, PT_AREG3
1973 l32i a2, a1, PT_AREG2
1974 l32i a0, a1, PT_AREG0
1975 l32i a1, a1, PT_AREG1
1976
1977 rfe
1978
1979#endif /* XCHAL_EXTRA_SA_SIZE */
1980
1981/* 1780/*
1982 * System Calls. 1781 * System Calls.
1983 * 1782 *
@@ -2086,20 +1885,36 @@ ENTRY(_switch_to)
2086 1885
2087 entry a1, 16 1886 entry a1, 16
2088 1887
2089 mov a4, a3 # preserve a3 1888 mov a12, a2 # preserve 'prev' (a2)
1889 mov a13, a3 # and 'next' (a3)
1890
1891 l32i a4, a2, TASK_THREAD_INFO
1892 l32i a5, a3, TASK_THREAD_INFO
1893
1894 save_xtregs_user a4 a6 a8 a9 a10 a11 THREAD_XTREGS_USER
2090 1895
2091 s32i a0, a2, THREAD_RA # save return address 1896 s32i a0, a12, THREAD_RA # save return address
2092 s32i a1, a2, THREAD_SP # save stack pointer 1897 s32i a1, a12, THREAD_SP # save stack pointer
2093 1898
2094 /* Disable ints while we manipulate the stack pointer; spill regs. */ 1899 /* Disable ints while we manipulate the stack pointer. */
2095 1900
2096 movi a5, (1 << PS_EXCM_BIT) | LOCKLEVEL 1901 movi a14, (1 << PS_EXCM_BIT) | LOCKLEVEL
2097 xsr a5, PS 1902 xsr a14, PS
2098 rsr a3, EXCSAVE_1 1903 rsr a3, EXCSAVE_1
2099 rsync 1904 rsync
2100 s32i a3, a3, EXC_TABLE_FIXUP /* enter critical section */ 1905 s32i a3, a3, EXC_TABLE_FIXUP /* enter critical section */
2101 1906
2102 call0 _spill_registers 1907 /* Switch CPENABLE */
1908
1909#if (XTENSA_HAVE_COPROCESSORS || XTENSA_HAVE_IO_PORTS)
1910 l32i a3, a5, THREAD_CPENABLE
1911 xsr a3, CPENABLE
1912 s32i a3, a4, THREAD_CPENABLE
1913#endif
1914
1915 /* Flush register file. */
1916
1917 call0 _spill_registers # destroys a3, a4, and SAR
2103 1918
2104 /* Set kernel stack (and leave critical section) 1919 /* Set kernel stack (and leave critical section)
2105 * Note: It's save to set it here. The stack will not be overwritten 1920 * Note: It's save to set it here. The stack will not be overwritten
@@ -2107,19 +1922,21 @@ ENTRY(_switch_to)
2107 * we return from kernel space. 1922 * we return from kernel space.
2108 */ 1923 */
2109 1924
2110 l32i a0, a4, TASK_THREAD_INFO
2111 rsr a3, EXCSAVE_1 # exc_table 1925 rsr a3, EXCSAVE_1 # exc_table
2112 movi a1, 0 1926 movi a6, 0
2113 addi a0, a0, PT_REGS_OFFSET 1927 addi a7, a5, PT_REGS_OFFSET
2114 s32i a1, a3, EXC_TABLE_FIXUP 1928 s32i a6, a3, EXC_TABLE_FIXUP
2115 s32i a0, a3, EXC_TABLE_KSTK 1929 s32i a7, a3, EXC_TABLE_KSTK
2116 1930
2117 /* restore context of the task that 'next' addresses */ 1931 /* restore context of the task that 'next' addresses */
2118 1932
2119 l32i a0, a4, THREAD_RA /* restore return address */ 1933 l32i a0, a13, THREAD_RA # restore return address
2120 l32i a1, a4, THREAD_SP /* restore stack pointer */ 1934 l32i a1, a13, THREAD_SP # restore stack pointer
1935
1936 load_xtregs_user a5 a6 a8 a9 a10 a11 THREAD_XTREGS_USER
2121 1937
2122 wsr a5, PS 1938 wsr a14, PS
1939 mov a2, a12 # return 'prev'
2123 rsync 1940 rsync
2124 1941
2125 retw 1942 retw
diff --git a/arch/xtensa/kernel/module.c b/arch/xtensa/kernel/module.c
index ddf14dcf2ad9..3981a466c779 100644
--- a/arch/xtensa/kernel/module.c
+++ b/arch/xtensa/kernel/module.c
@@ -28,7 +28,7 @@ void *module_alloc(unsigned long size)
28{ 28{
29 if (size == 0) 29 if (size == 0)
30 return NULL; 30 return NULL;
31 return vmalloc(size); 31 return vmalloc_exec(size);
32} 32}
33 33
34void module_free(struct module *mod, void *module_region) 34void module_free(struct module *mod, void *module_region)
diff --git a/arch/xtensa/kernel/process.c b/arch/xtensa/kernel/process.c
index f53d7bd9dfb2..9185597eb6a0 100644
--- a/arch/xtensa/kernel/process.c
+++ b/arch/xtensa/kernel/process.c
@@ -52,6 +52,55 @@ void (*pm_power_off)(void) = NULL;
52EXPORT_SYMBOL(pm_power_off); 52EXPORT_SYMBOL(pm_power_off);
53 53
54 54
55#if XTENSA_HAVE_COPROCESSORS
56
57void coprocessor_release_all(struct thread_info *ti)
58{
59 unsigned long cpenable;
60 int i;
61
62 /* Make sure we don't switch tasks during this operation. */
63
64 preempt_disable();
65
66 /* Walk through all cp owners and release it for the requested one. */
67
68 cpenable = ti->cpenable;
69
70 for (i = 0; i < XCHAL_CP_MAX; i++) {
71 if (coprocessor_owner[i] == ti) {
72 coprocessor_owner[i] = 0;
73 cpenable &= ~(1 << i);
74 }
75 }
76
77 ti->cpenable = cpenable;
78 coprocessor_clear_cpenable();
79
80 preempt_enable();
81}
82
83void coprocessor_flush_all(struct thread_info *ti)
84{
85 unsigned long cpenable;
86 int i;
87
88 preempt_disable();
89
90 cpenable = ti->cpenable;
91
92 for (i = 0; i < XCHAL_CP_MAX; i++) {
93 if ((cpenable & 1) != 0 && coprocessor_owner[i] == ti)
94 coprocessor_flush(ti, i);
95 cpenable >>= 1;
96 }
97
98 preempt_enable();
99}
100
101#endif
102
103
55/* 104/*
56 * Powermanagement idle function, if any is provided by the platform. 105 * Powermanagement idle function, if any is provided by the platform.
57 */ 106 */
@@ -71,15 +120,36 @@ void cpu_idle(void)
71} 120}
72 121
73/* 122/*
74 * Free current thread data structures etc.. 123 * This is called when the thread calls exit().
75 */ 124 */
76
77void exit_thread(void) 125void exit_thread(void)
78{ 126{
127#if XTENSA_HAVE_COPROCESSORS
128 coprocessor_release_all(current_thread_info());
129#endif
79} 130}
80 131
132/*
133 * Flush thread state. This is called when a thread does an execve()
134 * Note that we flush coprocessor registers for the case execve fails.
135 */
81void flush_thread(void) 136void flush_thread(void)
82{ 137{
138#if XTENSA_HAVE_COPROCESSORS
139 struct thread_info *ti = current_thread_info();
140 coprocessor_flush_all(ti);
141 coprocessor_release_all(ti);
142#endif
143}
144
145/*
146 * This is called before the thread is copied.
147 */
148void prepare_to_copy(struct task_struct *tsk)
149{
150#if XTENSA_HAVE_COPROCESSORS
151 coprocessor_flush_all(task_thread_info(tsk));
152#endif
83} 153}
84 154
85/* 155/*
@@ -107,6 +177,7 @@ int copy_thread(int nr, unsigned long clone_flags, unsigned long usp,
107 struct task_struct * p, struct pt_regs * regs) 177 struct task_struct * p, struct pt_regs * regs)
108{ 178{
109 struct pt_regs *childregs; 179 struct pt_regs *childregs;
180 struct thread_info *ti;
110 unsigned long tos; 181 unsigned long tos;
111 int user_mode = user_mode(regs); 182 int user_mode = user_mode(regs);
112 183
@@ -128,13 +199,14 @@ int copy_thread(int nr, unsigned long clone_flags, unsigned long usp,
128 p->set_child_tid = p->clear_child_tid = NULL; 199 p->set_child_tid = p->clear_child_tid = NULL;
129 p->thread.ra = MAKE_RA_FOR_CALL((unsigned long)ret_from_fork, 0x1); 200 p->thread.ra = MAKE_RA_FOR_CALL((unsigned long)ret_from_fork, 0x1);
130 p->thread.sp = (unsigned long)childregs; 201 p->thread.sp = (unsigned long)childregs;
202
131 if (user_mode(regs)) { 203 if (user_mode(regs)) {
132 204
133 int len = childregs->wmask & ~0xf; 205 int len = childregs->wmask & ~0xf;
134 childregs->areg[1] = usp; 206 childregs->areg[1] = usp;
135 memcpy(&childregs->areg[XCHAL_NUM_AREGS - len/4], 207 memcpy(&childregs->areg[XCHAL_NUM_AREGS - len/4],
136 &regs->areg[XCHAL_NUM_AREGS - len/4], len); 208 &regs->areg[XCHAL_NUM_AREGS - len/4], len);
137 209// FIXME: we need to set THREADPTR in thread_info...
138 if (clone_flags & CLONE_SETTLS) 210 if (clone_flags & CLONE_SETTLS)
139 childregs->areg[2] = childregs->areg[6]; 211 childregs->areg[2] = childregs->areg[6];
140 212
@@ -142,6 +214,12 @@ int copy_thread(int nr, unsigned long clone_flags, unsigned long usp,
142 /* In kernel space, we start a new thread with a new stack. */ 214 /* In kernel space, we start a new thread with a new stack. */
143 childregs->wmask = 1; 215 childregs->wmask = 1;
144 } 216 }
217
218#if (XTENSA_HAVE_COPROCESSORS || XTENSA_HAVE_IO_PORTS)
219 ti = task_thread_info(p);
220 ti->cpenable = 0;
221#endif
222
145 return 0; 223 return 0;
146} 224}
147 225
@@ -179,10 +257,6 @@ unsigned long get_wchan(struct task_struct *p)
179} 257}
180 258
181/* 259/*
182 * do_copy_regs() gathers information from 'struct pt_regs' and
183 * 'current->thread.areg[]' to fill in the xtensa_gregset_t
184 * structure.
185 *
186 * xtensa_gregset_t and 'struct pt_regs' are vastly different formats 260 * xtensa_gregset_t and 'struct pt_regs' are vastly different formats
187 * of processor registers. Besides different ordering, 261 * of processor registers. Besides different ordering,
188 * xtensa_gregset_t contains non-live register information that 262 * xtensa_gregset_t contains non-live register information that
@@ -191,18 +265,19 @@ unsigned long get_wchan(struct task_struct *p)
191 * 265 *
192 */ 266 */
193 267
194void do_copy_regs (xtensa_gregset_t *elfregs, struct pt_regs *regs, 268void xtensa_elf_core_copy_regs (xtensa_gregset_t *elfregs, struct pt_regs *regs)
195 struct task_struct *tsk)
196{ 269{
197 int i, n, wb_offset; 270 unsigned long wb, ws, wm;
271 int live, last;
198 272
199 elfregs->xchal_config_id0 = XCHAL_HW_CONFIGID0; 273 wb = regs->windowbase;
200 elfregs->xchal_config_id1 = XCHAL_HW_CONFIGID1; 274 ws = regs->windowstart;
275 wm = regs->wmask;
276 ws = ((ws >> wb) | (ws << (WSBITS - wb))) & ((1 << WSBITS) - 1);
201 277
202 __asm__ __volatile__ ("rsr %0, 176\n" : "=a" (i)); 278 /* Don't leak any random bits. */
203 elfregs->cpux = i; 279
204 __asm__ __volatile__ ("rsr %0, 208\n" : "=a" (i)); 280 memset(elfregs, 0, sizeof (elfregs));
205 elfregs->cpuy = i;
206 281
207 /* Note: PS.EXCM is not set while user task is running; its 282 /* Note: PS.EXCM is not set while user task is running; its
208 * being set in regs->ps is for exception handling convenience. 283 * being set in regs->ps is for exception handling convenience.
@@ -210,204 +285,22 @@ void do_copy_regs (xtensa_gregset_t *elfregs, struct pt_regs *regs,
210 285
211 elfregs->pc = regs->pc; 286 elfregs->pc = regs->pc;
212 elfregs->ps = (regs->ps & ~(1 << PS_EXCM_BIT)); 287 elfregs->ps = (regs->ps & ~(1 << PS_EXCM_BIT));
213 elfregs->exccause = regs->exccause;
214 elfregs->excvaddr = regs->excvaddr;
215 elfregs->windowbase = regs->windowbase;
216 elfregs->windowstart = regs->windowstart;
217 elfregs->lbeg = regs->lbeg; 288 elfregs->lbeg = regs->lbeg;
218 elfregs->lend = regs->lend; 289 elfregs->lend = regs->lend;
219 elfregs->lcount = regs->lcount; 290 elfregs->lcount = regs->lcount;
220 elfregs->sar = regs->sar; 291 elfregs->sar = regs->sar;
221 elfregs->syscall = regs->syscall; 292 elfregs->windowstart = ws;
222
223 /* Copy register file.
224 * The layout looks like this:
225 *
226 * | a0 ... a15 | Z ... Z | arX ... arY |
227 * current window unused saved frames
228 */
229
230 memset (elfregs->ar, 0, sizeof(elfregs->ar));
231 293
232 wb_offset = regs->windowbase * 4; 294 live = (wm & 2) ? 4 : (wm & 4) ? 8 : (wm & 8) ? 12 : 16;
233 n = (regs->wmask&1)? 4 : (regs->wmask&2)? 8 : (regs->wmask&4)? 12 : 16; 295 last = XCHAL_NUM_AREGS - (wm >> 4) * 4;
234 296 memcpy(elfregs->a, regs->areg, live * 4);
235 for (i = 0; i < n; i++) 297 memcpy(elfregs->a + last, regs->areg + last, (wm >> 4) * 16);
236 elfregs->ar[(wb_offset + i) % XCHAL_NUM_AREGS] = regs->areg[i];
237
238 n = (regs->wmask >> 4) * 4;
239
240 for (i = XCHAL_NUM_AREGS - n; n > 0; i++, n--)
241 elfregs->ar[(wb_offset + i) % XCHAL_NUM_AREGS] = regs->areg[i];
242} 298}
243 299
244void xtensa_elf_core_copy_regs (xtensa_gregset_t *elfregs, struct pt_regs *regs) 300int dump_fpu(void)
245{ 301{
246 do_copy_regs ((xtensa_gregset_t *)elfregs, regs, current);
247}
248
249
250/* The inverse of do_copy_regs(). No error or sanity checking. */
251
252void do_restore_regs (xtensa_gregset_t *elfregs, struct pt_regs *regs,
253 struct task_struct *tsk)
254{
255 int i, n, wb_offset;
256
257 /* Note: PS.EXCM is not set while user task is running; it
258 * needs to be set in regs->ps is for exception handling convenience.
259 */
260
261 regs->pc = elfregs->pc;
262 regs->ps = (elfregs->ps | (1 << PS_EXCM_BIT));
263 regs->exccause = elfregs->exccause;
264 regs->excvaddr = elfregs->excvaddr;
265 regs->windowbase = elfregs->windowbase;
266 regs->windowstart = elfregs->windowstart;
267 regs->lbeg = elfregs->lbeg;
268 regs->lend = elfregs->lend;
269 regs->lcount = elfregs->lcount;
270 regs->sar = elfregs->sar;
271 regs->syscall = elfregs->syscall;
272
273 /* Clear everything. */
274
275 memset (regs->areg, 0, sizeof(regs->areg));
276
277 /* Copy regs from live window frame. */
278
279 wb_offset = regs->windowbase * 4;
280 n = (regs->wmask&1)? 4 : (regs->wmask&2)? 8 : (regs->wmask&4)? 12 : 16;
281
282 for (i = 0; i < n; i++)
283 regs->areg[(wb_offset+i) % XCHAL_NUM_AREGS] = elfregs->ar[i];
284
285 n = (regs->wmask >> 4) * 4;
286
287 for (i = XCHAL_NUM_AREGS - n; n > 0; i++, n--)
288 regs->areg[(wb_offset+i) % XCHAL_NUM_AREGS] = elfregs->ar[i];
289}
290
291/*
292 * do_save_fpregs() gathers information from 'struct pt_regs' and
293 * 'current->thread' to fill in the elf_fpregset_t structure.
294 *
295 * Core files and ptrace use elf_fpregset_t.
296 */
297
298void do_save_fpregs (elf_fpregset_t *fpregs, struct pt_regs *regs,
299 struct task_struct *tsk)
300{
301#if XCHAL_HAVE_CP
302
303 extern unsigned char _xtensa_reginfo_tables[];
304 extern unsigned _xtensa_reginfo_table_size;
305 int i;
306 unsigned long flags;
307
308 /* Before dumping coprocessor state from memory,
309 * ensure any live coprocessor contents for this
310 * task are first saved to memory:
311 */
312 local_irq_save(flags);
313
314 for (i = 0; i < XCHAL_CP_MAX; i++) {
315 if (tsk == coprocessor_info[i].owner) {
316 enable_coprocessor(i);
317 save_coprocessor_registers(
318 tsk->thread.cp_save+coprocessor_info[i].offset,i);
319 disable_coprocessor(i);
320 }
321 }
322
323 local_irq_restore(flags);
324
325 /* Now dump coprocessor & extra state: */
326 memcpy((unsigned char*)fpregs,
327 _xtensa_reginfo_tables, _xtensa_reginfo_table_size);
328 memcpy((unsigned char*)fpregs + _xtensa_reginfo_table_size,
329 tsk->thread.cp_save, XTENSA_CP_EXTRA_SIZE);
330#endif
331}
332
333/*
334 * The inverse of do_save_fpregs().
335 * Copies coprocessor and extra state from fpregs into regs and tsk->thread.
336 * Returns 0 on success, non-zero if layout doesn't match.
337 */
338
339int do_restore_fpregs (elf_fpregset_t *fpregs, struct pt_regs *regs,
340 struct task_struct *tsk)
341{
342#if XCHAL_HAVE_CP
343
344 extern unsigned char _xtensa_reginfo_tables[];
345 extern unsigned _xtensa_reginfo_table_size;
346 int i;
347 unsigned long flags;
348
349 /* Make sure save area layouts match.
350 * FIXME: in the future we could allow restoring from
351 * a different layout of the same registers, by comparing
352 * fpregs' table with _xtensa_reginfo_tables and matching
353 * entries and copying registers one at a time.
354 * Not too sure yet whether that's very useful.
355 */
356
357 if( memcmp((unsigned char*)fpregs,
358 _xtensa_reginfo_tables, _xtensa_reginfo_table_size) ) {
359 return -1;
360 }
361
362 /* Before restoring coprocessor state from memory,
363 * ensure any live coprocessor contents for this
364 * task are first invalidated.
365 */
366
367 local_irq_save(flags);
368
369 for (i = 0; i < XCHAL_CP_MAX; i++) {
370 if (tsk == coprocessor_info[i].owner) {
371 enable_coprocessor(i);
372 save_coprocessor_registers(
373 tsk->thread.cp_save+coprocessor_info[i].offset,i);
374 coprocessor_info[i].owner = 0;
375 disable_coprocessor(i);
376 }
377 }
378
379 local_irq_restore(flags);
380
381 /* Now restore coprocessor & extra state: */
382
383 memcpy(tsk->thread.cp_save,
384 (unsigned char*)fpregs + _xtensa_reginfo_table_size,
385 XTENSA_CP_EXTRA_SIZE);
386#endif
387 return 0; 302 return 0;
388} 303}
389/*
390 * Fill in the CP structure for a core dump for a particular task.
391 */
392
393int
394dump_task_fpu(struct pt_regs *regs, struct task_struct *task, elf_fpregset_t *r)
395{
396 return 0; /* no coprocessors active on this processor */
397}
398
399/*
400 * Fill in the CP structure for a core dump.
401 * This includes any FPU coprocessor.
402 * Here, we dump all coprocessors, and other ("extra") custom state.
403 *
404 * This function is called by elf_core_dump() in fs/binfmt_elf.c
405 * (in which case 'regs' comes from calls to do_coredump, see signals.c).
406 */
407int dump_fpu(struct pt_regs *regs, elf_fpregset_t *r)
408{
409 return dump_task_fpu(regs, current, r);
410}
411 304
412asmlinkage 305asmlinkage
413long xtensa_clone(unsigned long clone_flags, unsigned long newsp, 306long xtensa_clone(unsigned long clone_flags, unsigned long newsp,
@@ -421,8 +314,8 @@ long xtensa_clone(unsigned long clone_flags, unsigned long newsp,
421} 314}
422 315
423/* 316/*
424 * * xtensa_execve() executes a new program. 317 * xtensa_execve() executes a new program.
425 * */ 318 */
426 319
427asmlinkage 320asmlinkage
428long xtensa_execve(char __user *name, char __user * __user *argv, 321long xtensa_execve(char __user *name, char __user * __user *argv,
@@ -437,7 +330,6 @@ long xtensa_execve(char __user *name, char __user * __user *argv,
437 error = PTR_ERR(filename); 330 error = PTR_ERR(filename);
438 if (IS_ERR(filename)) 331 if (IS_ERR(filename))
439 goto out; 332 goto out;
440 // FIXME: release coprocessor??
441 error = do_execve(filename, argv, envp, regs); 333 error = do_execve(filename, argv, envp, regs);
442 if (error == 0) { 334 if (error == 0) {
443 task_lock(current); 335 task_lock(current);
diff --git a/arch/xtensa/kernel/ptrace.c b/arch/xtensa/kernel/ptrace.c
index 5533c7850d53..9486882ef0af 100644
--- a/arch/xtensa/kernel/ptrace.c
+++ b/arch/xtensa/kernel/ptrace.c
@@ -4,7 +4,7 @@
4 * License. See the file "COPYING" in the main directory of this archive 4 * License. See the file "COPYING" in the main directory of this archive
5 * for more details. 5 * for more details.
6 * 6 *
7 * Copyright (C) 2001 - 2005 Tensilica Inc. 7 * Copyright (C) 2001 - 2007 Tensilica Inc.
8 * 8 *
9 * Joe Taylor <joe@tensilica.com, joetylr@yahoo.com> 9 * Joe Taylor <joe@tensilica.com, joetylr@yahoo.com>
10 * Chris Zankel <chris@zankel.net> 10 * Chris Zankel <chris@zankel.net>
@@ -28,14 +28,10 @@
28#include <asm/uaccess.h> 28#include <asm/uaccess.h>
29#include <asm/ptrace.h> 29#include <asm/ptrace.h>
30#include <asm/elf.h> 30#include <asm/elf.h>
31 31#include <asm/coprocessor.h>
32#define TEST_KERNEL // verify kernel operations FIXME: remove
33
34 32
35/* 33/*
36 * Called by kernel/ptrace.c when detaching.. 34 * Called by kernel/ptrace.c when detaching to disable single stepping.
37 *
38 * Make sure single step bits etc are not set.
39 */ 35 */
40 36
41void ptrace_disable(struct task_struct *child) 37void ptrace_disable(struct task_struct *child)
@@ -43,136 +39,237 @@ void ptrace_disable(struct task_struct *child)
43 /* Nothing to do.. */ 39 /* Nothing to do.. */
44} 40}
45 41
46long arch_ptrace(struct task_struct *child, long request, long addr, long data) 42int ptrace_getregs(struct task_struct *child, void __user *uregs)
47{ 43{
48 int ret = -EPERM; 44 struct pt_regs *regs = task_pt_regs(child);
45 xtensa_gregset_t __user *gregset = uregs;
46 unsigned long wm = regs->wmask;
47 unsigned long wb = regs->windowbase;
48 int live, i;
49
50 if (!access_ok(VERIFY_WRITE, uregs, sizeof(xtensa_gregset_t)))
51 return -EIO;
52
53 __put_user(regs->pc, &gregset->pc);
54 __put_user(regs->ps & ~(1 << PS_EXCM_BIT), &gregset->ps);
55 __put_user(regs->lbeg, &gregset->lbeg);
56 __put_user(regs->lend, &gregset->lend);
57 __put_user(regs->lcount, &gregset->lcount);
58 __put_user(regs->windowstart, &gregset->windowstart);
59 __put_user(regs->windowbase, &gregset->windowbase);
60
61 live = (wm & 2) ? 4 : (wm & 4) ? 8 : (wm & 8) ? 12 : 16;
62
63 for (i = 0; i < live; i++)
64 __put_user(regs->areg[i],gregset->a+((wb*4+i)%XCHAL_NUM_AREGS));
65 for (i = XCHAL_NUM_AREGS - (wm >> 4) * 4; i < XCHAL_NUM_AREGS; i++)
66 __put_user(regs->areg[i],gregset->a+((wb*4+i)%XCHAL_NUM_AREGS));
67
68 return 0;
69}
49 70
50 switch (request) { 71int ptrace_setregs(struct task_struct *child, void __user *uregs)
51 case PTRACE_PEEKTEXT: /* read word at location addr. */ 72{
52 case PTRACE_PEEKDATA: 73 struct pt_regs *regs = task_pt_regs(child);
53 ret = generic_ptrace_peekdata(child, addr, data); 74 xtensa_gregset_t *gregset = uregs;
54 goto out; 75 const unsigned long ps_mask = PS_CALLINC_MASK | PS_OWB_MASK;
76 unsigned long ps;
77 unsigned long wb;
55 78
56 /* Read the word at location addr in the USER area. */ 79 if (!access_ok(VERIFY_WRITE, uregs, sizeof(xtensa_gregset_t)))
80 return -EIO;
57 81
58 case PTRACE_PEEKUSR: 82 __get_user(regs->pc, &gregset->pc);
59 { 83 __get_user(ps, &gregset->ps);
60 struct pt_regs *regs; 84 __get_user(regs->lbeg, &gregset->lbeg);
61 unsigned long tmp; 85 __get_user(regs->lend, &gregset->lend);
86 __get_user(regs->lcount, &gregset->lcount);
87 __get_user(regs->windowstart, &gregset->windowstart);
88 __get_user(wb, &gregset->windowbase);
89
90 regs->ps = (regs->ps & ~ps_mask) | (ps & ps_mask) | (1 << PS_EXCM_BIT);
91
92 if (wb >= XCHAL_NUM_AREGS / 4)
93 return -EFAULT;
94
95 regs->windowbase = wb;
96
97 if (wb != 0 && __copy_from_user(regs->areg + XCHAL_NUM_AREGS - wb * 4,
98 gregset->a, wb * 16))
99 return -EFAULT;
100
101 if (__copy_from_user(regs->areg, gregset->a + wb*4, (WSBITS-wb) * 16))
102 return -EFAULT;
103
104 return 0;
105}
106
107
108int ptrace_getxregs(struct task_struct *child, void __user *uregs)
109{
110 struct pt_regs *regs = task_pt_regs(child);
111 struct thread_info *ti = task_thread_info(child);
112 elf_xtregs_t __user *xtregs = uregs;
113 int ret = 0;
114
115 if (!access_ok(VERIFY_WRITE, uregs, sizeof(elf_xtregs_t)))
116 return -EIO;
117
118#if XTENSA_HAVE_COPROCESSORS
119 /* Flush all coprocessor registers to memory. */
120 coprocessor_flush_all(ti);
121 ret |= __copy_to_user(&xtregs->cp0, &ti->xtregs_cp,
122 sizeof(xtregs_coprocessor_t));
123#endif
124 ret |= __copy_to_user(&xtregs->opt, &regs->xtregs_opt,
125 sizeof(xtregs->opt));
126 ret |= __copy_to_user(&xtregs->user,&ti->xtregs_user,
127 sizeof(xtregs->user));
128
129 return ret ? -EFAULT : 0;
130}
131
132int ptrace_setxregs(struct task_struct *child, void __user *uregs)
133{
134 struct thread_info *ti = task_thread_info(child);
135 struct pt_regs *regs = task_pt_regs(child);
136 elf_xtregs_t *xtregs = uregs;
137 int ret = 0;
138
139#if XTENSA_HAVE_COPROCESSORS
140 /* Flush all coprocessors before we overwrite them. */
141 coprocessor_flush_all(ti);
142 coprocessor_release_all(ti);
143
144 ret |= __copy_from_user(&ti->xtregs_cp, &xtregs->cp0,
145 sizeof(xtregs_coprocessor_t));
146#endif
147 ret |= __copy_from_user(&regs->xtregs_opt, &xtregs->opt,
148 sizeof(xtregs->opt));
149 ret |= __copy_from_user(&ti->xtregs_user, &xtregs->user,
150 sizeof(xtregs->user));
151
152 return ret ? -EFAULT : 0;
153}
154
155int ptrace_peekusr(struct task_struct *child, long regno, long __user *ret)
156{
157 struct pt_regs *regs;
158 unsigned long tmp;
62 159
63 regs = task_pt_regs(child); 160 regs = task_pt_regs(child);
64 tmp = 0; /* Default return value. */ 161 tmp = 0; /* Default return value. */
65 162
66 switch(addr) { 163 switch(regno) {
67 164
68 case REG_AR_BASE ... REG_AR_BASE + XCHAL_NUM_AREGS - 1: 165 case REG_AR_BASE ... REG_AR_BASE + XCHAL_NUM_AREGS - 1:
69 { 166 tmp = regs->areg[regno - REG_AR_BASE];
70 int ar = addr - REG_AR_BASE - regs->windowbase * 4;
71 ar &= (XCHAL_NUM_AREGS - 1);
72 if (ar < 16 && ar + (regs->wmask >> 4) * 4 >= 0)
73 tmp = regs->areg[ar];
74 else
75 ret = -EIO;
76 break; 167 break;
77 } 168
78 case REG_A_BASE ... REG_A_BASE + 15: 169 case REG_A_BASE ... REG_A_BASE + 15:
79 tmp = regs->areg[addr - REG_A_BASE]; 170 tmp = regs->areg[regno - REG_A_BASE];
80 break; 171 break;
172
81 case REG_PC: 173 case REG_PC:
82 tmp = regs->pc; 174 tmp = regs->pc;
83 break; 175 break;
176
84 case REG_PS: 177 case REG_PS:
85 /* Note: PS.EXCM is not set while user task is running; 178 /* Note: PS.EXCM is not set while user task is running;
86 * its being set in regs is for exception handling 179 * its being set in regs is for exception handling
87 * convenience. */ 180 * convenience. */
88 tmp = (regs->ps & ~(1 << PS_EXCM_BIT)); 181 tmp = (regs->ps & ~(1 << PS_EXCM_BIT));
89 break; 182 break;
183
90 case REG_WB: 184 case REG_WB:
91 tmp = regs->windowbase; 185 break; /* tmp = 0 */
92 break; 186
93 case REG_WS: 187 case REG_WS:
94 tmp = regs->windowstart; 188 {
189 unsigned long wb = regs->windowbase;
190 unsigned long ws = regs->windowstart;
191 tmp = ((ws>>wb) | (ws<<(WSBITS-wb))) & ((1<<WSBITS)-1);
95 break; 192 break;
193 }
96 case REG_LBEG: 194 case REG_LBEG:
97 tmp = regs->lbeg; 195 tmp = regs->lbeg;
98 break; 196 break;
197
99 case REG_LEND: 198 case REG_LEND:
100 tmp = regs->lend; 199 tmp = regs->lend;
101 break; 200 break;
201
102 case REG_LCOUNT: 202 case REG_LCOUNT:
103 tmp = regs->lcount; 203 tmp = regs->lcount;
104 break; 204 break;
205
105 case REG_SAR: 206 case REG_SAR:
106 tmp = regs->sar; 207 tmp = regs->sar;
107 break; 208 break;
108 case REG_DEPC: 209
109 tmp = regs->depc;
110 break;
111 case REG_EXCCAUSE:
112 tmp = regs->exccause;
113 break;
114 case REG_EXCVADDR:
115 tmp = regs->excvaddr;
116 break;
117 case SYSCALL_NR: 210 case SYSCALL_NR:
118 tmp = regs->syscall; 211 tmp = regs->syscall;
119 break; 212 break;
120 default:
121 tmp = 0;
122 ret = -EIO;
123 goto out;
124 }
125 ret = put_user(tmp, (unsigned long *) data);
126 goto out;
127 }
128 213
129 case PTRACE_POKETEXT: /* write the word at location addr. */ 214 default:
130 case PTRACE_POKEDATA: 215 return -EIO;
131 ret = generic_ptrace_pokedata(child, addr, data); 216 }
132 goto out; 217 return put_user(tmp, ret);
218}
133 219
134 case PTRACE_POKEUSR: 220int ptrace_pokeusr(struct task_struct *child, long regno, long val)
135 { 221{
136 struct pt_regs *regs; 222 struct pt_regs *regs;
137 regs = task_pt_regs(child); 223 regs = task_pt_regs(child);
138 224
139 switch (addr) { 225 switch (regno) {
140 case REG_AR_BASE ... REG_AR_BASE + XCHAL_NUM_AREGS - 1: 226 case REG_AR_BASE ... REG_AR_BASE + XCHAL_NUM_AREGS - 1:
141 { 227 regs->areg[regno - REG_AR_BASE] = val;
142 int ar = addr - REG_AR_BASE - regs->windowbase * 4;
143 if (ar < 16 && ar + (regs->wmask >> 4) * 4 >= 0)
144 regs->areg[ar & (XCHAL_NUM_AREGS - 1)] = data;
145 else
146 ret = -EIO;
147 break; 228 break;
148 } 229
149 case REG_A_BASE ... REG_A_BASE + 15: 230 case REG_A_BASE ... REG_A_BASE + 15:
150 regs->areg[addr - REG_A_BASE] = data; 231 regs->areg[regno - REG_A_BASE] = val;
151 break; 232 break;
233
152 case REG_PC: 234 case REG_PC:
153 regs->pc = data; 235 regs->pc = val;
154 break; 236 break;
237
155 case SYSCALL_NR: 238 case SYSCALL_NR:
156 regs->syscall = data; 239 regs->syscall = val;
157 break;
158#ifdef TEST_KERNEL
159 case REG_WB:
160 regs->windowbase = data;
161 break;
162 case REG_WS:
163 regs->windowstart = data;
164 break; 240 break;
165#endif
166 241
167 default: 242 default:
168 /* The rest are not allowed. */ 243 return -EIO;
169 ret = -EIO; 244 }
170 break; 245 return 0;
171 } 246}
247
248long arch_ptrace(struct task_struct *child, long request, long addr, long data)
249{
250 int ret = -EPERM;
251
252 switch (request) {
253 case PTRACE_PEEKTEXT: /* read word at location addr. */
254 case PTRACE_PEEKDATA:
255 ret = generic_ptrace_peekdata(child, addr, data);
256 break;
257
258 case PTRACE_PEEKUSR: /* read register specified by addr. */
259 ret = ptrace_peekusr(child, addr, (void __user *) data);
260 break;
261
262 case PTRACE_POKETEXT: /* write the word at location addr. */
263 case PTRACE_POKEDATA:
264 ret = generic_ptrace_pokedata(child, addr, data);
265 break;
266
267 case PTRACE_POKEUSR: /* write register specified by addr. */
268 ret = ptrace_pokeusr(child, addr, data);
172 break; 269 break;
173 }
174 270
175 /* continue and stop at next (return from) syscall */ 271 /* continue and stop at next (return from) syscall */
272
176 case PTRACE_SYSCALL: 273 case PTRACE_SYSCALL:
177 case PTRACE_CONT: /* restart after signal. */ 274 case PTRACE_CONT: /* restart after signal. */
178 { 275 {
@@ -217,98 +314,26 @@ long arch_ptrace(struct task_struct *child, long request, long addr, long data)
217 break; 314 break;
218 315
219 case PTRACE_GETREGS: 316 case PTRACE_GETREGS:
220 { 317 ret = ptrace_getregs(child, (void __user *) data);
221 /* 'data' points to user memory in which to write.
222 * Mainly due to the non-live register values, we
223 * reformat the register values into something more
224 * standard. For convenience, we use the handy
225 * elf_gregset_t format. */
226
227 xtensa_gregset_t format;
228 struct pt_regs *regs = task_pt_regs(child);
229
230 do_copy_regs (&format, regs, child);
231
232 /* Now, copy to user space nice and easy... */
233 ret = 0;
234 if (copy_to_user((void *)data, &format, sizeof(elf_gregset_t)))
235 ret = -EFAULT;
236 break; 318 break;
237 }
238 319
239 case PTRACE_SETREGS: 320 case PTRACE_SETREGS:
240 { 321 ret = ptrace_setregs(child, (void __user *) data);
241 /* 'data' points to user memory that contains the new
242 * values in the elf_gregset_t format. */
243
244 xtensa_gregset_t format;
245 struct pt_regs *regs = task_pt_regs(child);
246
247 if (copy_from_user(&format,(void *)data,sizeof(elf_gregset_t))){
248 ret = -EFAULT;
249 break;
250 }
251
252 /* FIXME: Perhaps we want some sanity checks on
253 * these user-space values? See ARM version. Are
254 * debuggers a security concern? */
255
256 do_restore_regs (&format, regs, child);
257
258 ret = 0;
259 break;
260 }
261
262 case PTRACE_GETFPREGS:
263 {
264 /* 'data' points to user memory in which to write.
265 * For convenience, we use the handy
266 * elf_fpregset_t format. */
267
268 elf_fpregset_t fpregs;
269 struct pt_regs *regs = task_pt_regs(child);
270
271 do_save_fpregs (&fpregs, regs, child);
272
273 /* Now, copy to user space nice and easy... */
274 ret = 0;
275 if (copy_to_user((void *)data, &fpregs, sizeof(elf_fpregset_t)))
276 ret = -EFAULT;
277
278 break; 322 break;
279 }
280
281 case PTRACE_SETFPREGS:
282 {
283 /* 'data' points to user memory that contains the new
284 * values in the elf_fpregset_t format.
285 */
286 elf_fpregset_t fpregs;
287 struct pt_regs *regs = task_pt_regs(child);
288 323
289 ret = 0; 324 case PTRACE_GETXTREGS:
290 if (copy_from_user(&fpregs, (void *)data, sizeof(elf_fpregset_t))) { 325 ret = ptrace_getxregs(child, (void __user *) data);
291 ret = -EFAULT;
292 break;
293 }
294
295 if (do_restore_fpregs (&fpregs, regs, child))
296 ret = -EIO;
297 break; 326 break;
298 }
299 327
300 case PTRACE_GETFPREGSIZE: 328 case PTRACE_SETXTREGS:
301 /* 'data' points to 'unsigned long' set to the size 329 ret = ptrace_setxregs(child, (void __user *) data);
302 * of elf_fpregset_t
303 */
304 ret = put_user(sizeof(elf_fpregset_t), (unsigned long *) data);
305 break; 330 break;
306 331
307 default: 332 default:
308 ret = ptrace_request(child, request, addr, data); 333 ret = ptrace_request(child, request, addr, data);
309 goto out; 334 break;
310 } 335 }
311 out: 336
312 return ret; 337 return ret;
313} 338}
314 339
diff --git a/arch/xtensa/kernel/setup.c b/arch/xtensa/kernel/setup.c
index b80f2cb1b4fb..5e6d75c9f92b 100644
--- a/arch/xtensa/kernel/setup.c
+++ b/arch/xtensa/kernel/setup.c
@@ -60,11 +60,6 @@ struct ide_ops *ide_ops;
60extern struct rtc_ops no_rtc_ops; 60extern struct rtc_ops no_rtc_ops;
61struct rtc_ops *rtc_ops; 61struct rtc_ops *rtc_ops;
62 62
63#ifdef CONFIG_PC_KEYB
64extern struct kbd_ops no_kbd_ops;
65struct kbd_ops *kbd_ops;
66#endif
67
68#ifdef CONFIG_BLK_DEV_INITRD 63#ifdef CONFIG_BLK_DEV_INITRD
69extern void *initrd_start; 64extern void *initrd_start;
70extern void *initrd_end; 65extern void *initrd_end;
diff --git a/arch/xtensa/kernel/signal.c b/arch/xtensa/kernel/signal.c
index 033aae0336d2..f2220b5bdce6 100644
--- a/arch/xtensa/kernel/signal.c
+++ b/arch/xtensa/kernel/signal.c
@@ -35,13 +35,17 @@ asmlinkage int do_signal(struct pt_regs *regs, sigset_t *oldset);
35 35
36extern struct task_struct *coproc_owners[]; 36extern struct task_struct *coproc_owners[];
37 37
38extern void release_all_cp (struct task_struct *);
39
40struct rt_sigframe 38struct rt_sigframe
41{ 39{
42 struct siginfo info; 40 struct siginfo info;
43 struct ucontext uc; 41 struct ucontext uc;
44 cp_state_t cpstate; 42 struct {
43 xtregs_opt_t opt;
44 xtregs_user_t user;
45#if XTENSA_HAVE_COPROCESSORS
46 xtregs_coprocessor_t cp;
47#endif
48 } xtregs;
45 unsigned char retcode[6]; 49 unsigned char retcode[6];
46 unsigned int window[4]; 50 unsigned int window[4];
47}; 51};
@@ -49,8 +53,6 @@ struct rt_sigframe
49/* 53/*
50 * Flush register windows stored in pt_regs to stack. 54 * Flush register windows stored in pt_regs to stack.
51 * Returns 1 for errors. 55 * Returns 1 for errors.
52 *
53 * Note that windowbase, windowstart, and wmask are not updated!
54 */ 56 */
55 57
56int 58int
@@ -116,6 +118,9 @@ flush_window_regs_user(struct pt_regs *regs)
116 base += inc; 118 base += inc;
117 } 119 }
118 120
121 regs->wmask = 1;
122 regs->windowstart = 1 << wb;
123
119 return 0; 124 return 0;
120 125
121errout: 126errout:
@@ -131,9 +136,10 @@ errout:
131 */ 136 */
132 137
133static int 138static int
134setup_sigcontext(struct sigcontext __user *sc, cp_state_t *cpstate, 139setup_sigcontext(struct rt_sigframe __user *frame, struct pt_regs *regs)
135 struct pt_regs *regs, unsigned long mask)
136{ 140{
141 struct sigcontext __user *sc = &frame->uc.uc_mcontext;
142 struct thread_info *ti = current_thread_info();
137 int err = 0; 143 int err = 0;
138 144
139#define COPY(x) err |= __put_user(regs->x, &sc->sc_##x) 145#define COPY(x) err |= __put_user(regs->x, &sc->sc_##x)
@@ -147,23 +153,32 @@ setup_sigcontext(struct sigcontext __user *sc, cp_state_t *cpstate,
147 153
148 err |= flush_window_regs_user(regs); 154 err |= flush_window_regs_user(regs);
149 err |= __copy_to_user (sc->sc_a, regs->areg, 16 * 4); 155 err |= __copy_to_user (sc->sc_a, regs->areg, 16 * 4);
156 err |= __put_user(0, &sc->sc_xtregs);
150 157
151 // err |= __copy_to_user (sc->sc_a, regs->areg, XCHAL_NUM_AREGS * 4) 158 if (err)
159 return err;
152 160
153#if XCHAL_HAVE_CP 161#if XTENSA_HAVE_COPROCESSORS
154# error Coprocessors unsupported 162 coprocessor_flush_all(ti);
155 err |= save_cpextra(cpstate); 163 coprocessor_release_all(ti);
156 err |= __put_user(err ? NULL : cpstate, &sc->sc_cpstate); 164 err |= __copy_to_user(&frame->xtregs.cp, &ti->xtregs_cp,
165 sizeof (frame->xtregs.cp));
157#endif 166#endif
158 /* non-iBCS2 extensions.. */ 167 err |= __copy_to_user(&frame->xtregs.opt, &regs->xtregs_opt,
159 err |= __put_user(mask, &sc->oldmask); 168 sizeof (xtregs_opt_t));
169 err |= __copy_to_user(&frame->xtregs.user, &ti->xtregs_user,
170 sizeof (xtregs_user_t));
171
172 err |= __put_user(err ? NULL : &frame->xtregs, &sc->sc_xtregs);
160 173
161 return err; 174 return err;
162} 175}
163 176
164static int 177static int
165restore_sigcontext(struct pt_regs *regs, struct sigcontext __user *sc) 178restore_sigcontext(struct pt_regs *regs, struct rt_sigframe __user *frame)
166{ 179{
180 struct sigcontext __user *sc = &frame->uc.uc_mcontext;
181 struct thread_info *ti = current_thread_info();
167 unsigned int err = 0; 182 unsigned int err = 0;
168 unsigned long ps; 183 unsigned long ps;
169 184
@@ -181,6 +196,8 @@ restore_sigcontext(struct pt_regs *regs, struct sigcontext __user *sc)
181 regs->windowbase = 0; 196 regs->windowbase = 0;
182 regs->windowstart = 1; 197 regs->windowstart = 1;
183 198
199 regs->syscall = -1; /* disable syscall checks */
200
184 /* For PS, restore only PS.CALLINC. 201 /* For PS, restore only PS.CALLINC.
185 * Assume that all other bits are either the same as for the signal 202 * Assume that all other bits are either the same as for the signal
186 * handler, or the user mode value doesn't matter (e.g. PS.OWB). 203 * handler, or the user mode value doesn't matter (e.g. PS.OWB).
@@ -196,8 +213,9 @@ restore_sigcontext(struct pt_regs *regs, struct sigcontext __user *sc)
196 213
197 err |= __copy_from_user(regs->areg, sc->sc_a, 16 * 4); 214 err |= __copy_from_user(regs->areg, sc->sc_a, 16 * 4);
198 215
199#if XCHAL_HAVE_CP 216 if (err)
200# error Coprocessors unsupported 217 return err;
218
201 /* The signal handler may have used coprocessors in which 219 /* The signal handler may have used coprocessors in which
202 * case they are still enabled. We disable them to force a 220 * case they are still enabled. We disable them to force a
203 * reloading of the original task's CP state by the lazy 221 * reloading of the original task's CP state by the lazy
@@ -205,20 +223,20 @@ restore_sigcontext(struct pt_regs *regs, struct sigcontext __user *sc)
205 * Also, we essentially discard any coprocessor state that the 223 * Also, we essentially discard any coprocessor state that the
206 * signal handler created. */ 224 * signal handler created. */
207 225
208 if (!err) { 226#if XTENSA_HAVE_COPROCESSORS
209 struct task_struct *tsk = current; 227 coprocessor_release_all(ti);
210 release_all_cp(tsk); 228 err |= __copy_from_user(&ti->xtregs_cp, &frame->xtregs.cp,
211 err |= __copy_from_user(tsk->thread.cpextra, sc->sc_cpstate, 229 sizeof (frame->xtregs.cp));
212 XTENSA_CP_EXTRA_SIZE);
213 }
214#endif 230#endif
231 err |= __copy_from_user(&ti->xtregs_user, &frame->xtregs.user,
232 sizeof (xtregs_user_t));
233 err |= __copy_from_user(&regs->xtregs_opt, &frame->xtregs.opt,
234 sizeof (xtregs_opt_t));
215 235
216 regs->syscall = -1; /* disable syscall checks */
217 return err; 236 return err;
218} 237}
219 238
220 239
221
222/* 240/*
223 * Do a signal return; undo the signal stack. 241 * Do a signal return; undo the signal stack.
224 */ 242 */
@@ -247,7 +265,7 @@ asmlinkage long xtensa_rt_sigreturn(long a0, long a1, long a2, long a3,
247 recalc_sigpending(); 265 recalc_sigpending();
248 spin_unlock_irq(&current->sighand->siglock); 266 spin_unlock_irq(&current->sighand->siglock);
249 267
250 if (restore_sigcontext(regs, &frame->uc.uc_mcontext)) 268 if (restore_sigcontext(regs, frame))
251 goto badframe; 269 goto badframe;
252 270
253 ret = regs->areg[2]; 271 ret = regs->areg[2];
@@ -360,18 +378,22 @@ static void setup_frame(int sig, struct k_sigaction *ka, siginfo_t *info,
360 err |= __put_user(sas_ss_flags(regs->areg[1]), 378 err |= __put_user(sas_ss_flags(regs->areg[1]),
361 &frame->uc.uc_stack.ss_flags); 379 &frame->uc.uc_stack.ss_flags);
362 err |= __put_user(current->sas_ss_size, &frame->uc.uc_stack.ss_size); 380 err |= __put_user(current->sas_ss_size, &frame->uc.uc_stack.ss_size);
363 err |= setup_sigcontext(&frame->uc.uc_mcontext, &frame->cpstate, 381 err |= setup_sigcontext(frame, regs);
364 regs, set->sig[0]);
365 err |= __copy_to_user(&frame->uc.uc_sigmask, set, sizeof(*set)); 382 err |= __copy_to_user(&frame->uc.uc_sigmask, set, sizeof(*set));
366 383
367 /* Create sys_rt_sigreturn syscall in stack frame */ 384 if (ka->sa.sa_flags & SA_RESTORER) {
385 ra = (unsigned long)ka->sa.sa_restorer;
386 } else {
368 387
369 err |= gen_return_code(frame->retcode); 388 /* Create sys_rt_sigreturn syscall in stack frame */
370 389
371 if (err) { 390 err |= gen_return_code(frame->retcode);
372 goto give_sigsegv; 391
392 if (err) {
393 goto give_sigsegv;
394 }
395 ra = (unsigned long) frame->retcode;
373 } 396 }
374
375 397
376 /* 398 /*
377 * Create signal handler execution context. 399 * Create signal handler execution context.
@@ -385,7 +407,6 @@ static void setup_frame(int sig, struct k_sigaction *ka, siginfo_t *info,
385 /* Set up a stack frame for a call4 407 /* Set up a stack frame for a call4
386 * Note: PS.CALLINC is set to one by start_thread 408 * Note: PS.CALLINC is set to one by start_thread
387 */ 409 */
388 ra = (unsigned long) frame->retcode;
389 regs->areg[4] = (((unsigned long) ra) & 0x3fffffff) | 0x40000000; 410 regs->areg[4] = (((unsigned long) ra) & 0x3fffffff) | 0x40000000;
390 regs->areg[6] = (unsigned long) signal; 411 regs->areg[6] = (unsigned long) signal;
391 regs->areg[7] = (unsigned long) &frame->info; 412 regs->areg[7] = (unsigned long) &frame->info;
diff --git a/arch/xtensa/kernel/traps.c b/arch/xtensa/kernel/traps.c
index 397bcd6ad08d..c7a021d9f696 100644
--- a/arch/xtensa/kernel/traps.c
+++ b/arch/xtensa/kernel/traps.c
@@ -118,28 +118,28 @@ static dispatch_init_table_t __initdata dispatch_init_table[] = {
118{ EXCCAUSE_STORE_CACHE_ATTRIBUTE, 0, do_page_fault }, 118{ EXCCAUSE_STORE_CACHE_ATTRIBUTE, 0, do_page_fault },
119{ EXCCAUSE_LOAD_CACHE_ATTRIBUTE, 0, do_page_fault }, 119{ EXCCAUSE_LOAD_CACHE_ATTRIBUTE, 0, do_page_fault },
120/* XCCHAL_EXCCAUSE_FLOATING_POINT unhandled */ 120/* XCCHAL_EXCCAUSE_FLOATING_POINT unhandled */
121#if (XCHAL_CP_MASK & 1) 121#if XTENSA_HAVE_COPROCESSOR(0)
122COPROCESSOR(0), 122COPROCESSOR(0),
123#endif 123#endif
124#if (XCHAL_CP_MASK & 2) 124#if XTENSA_HAVE_COPROCESSOR(1)
125COPROCESSOR(1), 125COPROCESSOR(1),
126#endif 126#endif
127#if (XCHAL_CP_MASK & 4) 127#if XTENSA_HAVE_COPROCESSOR(2)
128COPROCESSOR(2), 128COPROCESSOR(2),
129#endif 129#endif
130#if (XCHAL_CP_MASK & 8) 130#if XTENSA_HAVE_COPROCESSOR(3)
131COPROCESSOR(3), 131COPROCESSOR(3),
132#endif 132#endif
133#if (XCHAL_CP_MASK & 16) 133#if XTENSA_HAVE_COPROCESSOR(4)
134COPROCESSOR(4), 134COPROCESSOR(4),
135#endif 135#endif
136#if (XCHAL_CP_MASK & 32) 136#if XTENSA_HAVE_COPROCESSOR(5)
137COPROCESSOR(5), 137COPROCESSOR(5),
138#endif 138#endif
139#if (XCHAL_CP_MASK & 64) 139#if XTENSA_HAVE_COPROCESSOR(6)
140COPROCESSOR(6), 140COPROCESSOR(6),
141#endif 141#endif
142#if (XCHAL_CP_MASK & 128) 142#if XTENSA_HAVE_COPROCESSOR(7)
143COPROCESSOR(7), 143COPROCESSOR(7),
144#endif 144#endif
145{ EXCCAUSE_MAPPED_DEBUG, 0, do_debug }, 145{ EXCCAUSE_MAPPED_DEBUG, 0, do_debug },
@@ -349,9 +349,7 @@ void show_regs(struct pt_regs * regs)
349 349
350 wmask = regs->wmask & ~1; 350 wmask = regs->wmask & ~1;
351 351
352 for (i = 0; i < 32; i++) { 352 for (i = 0; i < 16; i++) {
353 if (wmask & (1 << (i / 4)))
354 break;
355 if ((i % 8) == 0) 353 if ((i % 8) == 0)
356 printk ("\n" KERN_INFO "a%02d: ", i); 354 printk ("\n" KERN_INFO "a%02d: ", i);
357 printk("%08lx ", regs->areg[i]); 355 printk("%08lx ", regs->areg[i]);
diff --git a/arch/xtensa/kernel/vmlinux.lds.S b/arch/xtensa/kernel/vmlinux.lds.S
index 7d0f55a4982d..51f4fb6f16f9 100644
--- a/arch/xtensa/kernel/vmlinux.lds.S
+++ b/arch/xtensa/kernel/vmlinux.lds.S
@@ -136,7 +136,9 @@ SECTIONS
136 __init_begin = .; 136 __init_begin = .;
137 .init.text : { 137 .init.text : {
138 _sinittext = .; 138 _sinittext = .;
139 *(.init.literal) INIT_TEXT 139 *(.init.literal) *(.cpuinit.literal)
140 *(.devinit.literal) *(.meminit.literal)
141 INIT_TEXT
140 _einittext = .; 142 _einittext = .;
141 } 143 }
142 144
@@ -161,6 +163,8 @@ SECTIONS
161 .DoubleExceptionVector.literal); 163 .DoubleExceptionVector.literal);
162 RELOCATE_ENTRY(_DoubleExceptionVector_text, 164 RELOCATE_ENTRY(_DoubleExceptionVector_text,
163 .DoubleExceptionVector.text); 165 .DoubleExceptionVector.text);
166 RELOCATE_ENTRY(_DebugInterruptVector_text,
167 .DebugInterruptVector.text);
164 168
165 __boot_reloc_table_end = ABSOLUTE(.) ; 169 __boot_reloc_table_end = ABSOLUTE(.) ;
166 } 170 }
diff --git a/arch/xtensa/mm/cache.c b/arch/xtensa/mm/cache.c
index 9a1fa9478ae7..3ba990c67676 100644
--- a/arch/xtensa/mm/cache.c
+++ b/arch/xtensa/mm/cache.c
@@ -25,7 +25,6 @@
25#include <linux/swap.h> 25#include <linux/swap.h>
26#include <linux/pagemap.h> 26#include <linux/pagemap.h>
27 27
28#include <asm/pgtable.h>
29#include <asm/bootparam.h> 28#include <asm/bootparam.h>
30#include <asm/mmu_context.h> 29#include <asm/mmu_context.h>
31#include <asm/tlb.h> 30#include <asm/tlb.h>
@@ -181,9 +180,9 @@ update_mmu_cache(struct vm_area_struct * vma, unsigned long addr, pte_t pte)
181#else 180#else
182 if (!PageReserved(page) && !test_bit(PG_arch_1, &page->flags) 181 if (!PageReserved(page) && !test_bit(PG_arch_1, &page->flags)
183 && (vma->vm_flags & VM_EXEC) != 0) { 182 && (vma->vm_flags & VM_EXEC) != 0) {
184 unsigned long vaddr = addr & PAGE_MASK; 183 unsigned long paddr = (unsigned long) page_address(page);
185 __flush_dcache_page(vaddr); 184 __flush_dcache_page(paddr);
186 __invalidate_icache_page(vaddr); 185 __invalidate_icache_page(paddr);
187 set_bit(PG_arch_1, &page->flags); 186 set_bit(PG_arch_1, &page->flags);
188 } 187 }
189#endif 188#endif
diff --git a/arch/xtensa/mm/init.c b/arch/xtensa/mm/init.c
index b3086f34a8e7..81d0560eaea2 100644
--- a/arch/xtensa/mm/init.c
+++ b/arch/xtensa/mm/init.c
@@ -309,7 +309,7 @@ void show_mem(void)
309 309
310struct kmem_cache *pgtable_cache __read_mostly; 310struct kmem_cache *pgtable_cache __read_mostly;
311 311
312static void pgd_ctor(void *addr, struct kmem_cache *cache, unsigned long flags) 312static void pgd_ctor(struct kmem_cache *cache, void* addr)
313{ 313{
314 pte_t* ptep = (pte_t*)addr; 314 pte_t* ptep = (pte_t*)addr;
315 int i; 315 int i;
diff --git a/arch/xtensa/mm/misc.S b/arch/xtensa/mm/misc.S
index e1f880368e32..c885664211d1 100644
--- a/arch/xtensa/mm/misc.S
+++ b/arch/xtensa/mm/misc.S
@@ -295,7 +295,7 @@ ENTRY(__tlbtemp_mapping_itlb)
295ENTRY(__invalidate_icache_page_alias) 295ENTRY(__invalidate_icache_page_alias)
296 entry sp, 16 296 entry sp, 16
297 297
298 addi a6, a3, (PAGE_KERNEL | _PAGE_HW_WRITE) 298 addi a6, a3, (PAGE_KERNEL_EXEC | _PAGE_HW_WRITE)
299 mov a4, a2 299 mov a4, a2
300 witlb a6, a2 300 witlb a6, a2
301 isync 301 isync
diff --git a/arch/xtensa/platform-iss/Makefile b/arch/xtensa/platforms/iss/Makefile
index af96e314d71f..af96e314d71f 100644
--- a/arch/xtensa/platform-iss/Makefile
+++ b/arch/xtensa/platforms/iss/Makefile
diff --git a/arch/xtensa/platform-iss/console.c b/arch/xtensa/platforms/iss/console.c
index 854677d0c3f6..9141e3690731 100644
--- a/arch/xtensa/platform-iss/console.c
+++ b/arch/xtensa/platforms/iss/console.c
@@ -43,6 +43,7 @@ static DEFINE_SPINLOCK(timer_lock);
43 43
44int errno; 44int errno;
45 45
46static int __simc (int a, int b, int c, int d, int e, int f) __attribute__((__noinline__));
46static int __simc (int a, int b, int c, int d, int e, int f) 47static int __simc (int a, int b, int c, int d, int e, int f)
47{ 48{
48 int ret; 49 int ret;
diff --git a/arch/xtensa/platform-iss/io.c b/arch/xtensa/platforms/iss/io.c
index 5b161a5cb65f..5b161a5cb65f 100644
--- a/arch/xtensa/platform-iss/io.c
+++ b/arch/xtensa/platforms/iss/io.c
diff --git a/arch/xtensa/platform-iss/network.c b/arch/xtensa/platforms/iss/network.c
index f21b9b0899a8..a2e252217428 100644
--- a/arch/xtensa/platform-iss/network.c
+++ b/arch/xtensa/platforms/iss/network.c
@@ -31,7 +31,6 @@
31#include <linux/bootmem.h> 31#include <linux/bootmem.h>
32#include <linux/ethtool.h> 32#include <linux/ethtool.h>
33#include <linux/rtnetlink.h> 33#include <linux/rtnetlink.h>
34#include <linux/timer.h>
35#include <linux/platform_device.h> 34#include <linux/platform_device.h>
36 35
37#include <asm/platform/simcall.h> 36#include <asm/platform/simcall.h>
@@ -108,6 +107,7 @@ struct iss_net_private {
108 107
109static int errno; 108static int errno;
110 109
110static int __simc (int a, int b, int c, int d, int e, int f) __attribute__((__noinline__));
111static int __simc (int a, int b, int c, int d, int e, int f) 111static int __simc (int a, int b, int c, int d, int e, int f)
112{ 112{
113 int ret; 113 int ret;
diff --git a/arch/xtensa/platform-iss/setup.c b/arch/xtensa/platforms/iss/setup.c
index f60c8cf6dfbe..f60c8cf6dfbe 100644
--- a/arch/xtensa/platform-iss/setup.c
+++ b/arch/xtensa/platforms/iss/setup.c
diff --git a/block/blk-core.c b/block/blk-core.c
index e9754dc98ec4..775c8516abf5 100644
--- a/block/blk-core.c
+++ b/block/blk-core.c
@@ -38,7 +38,7 @@ static int __make_request(struct request_queue *q, struct bio *bio);
38/* 38/*
39 * For the allocated request tables 39 * For the allocated request tables
40 */ 40 */
41struct kmem_cache *request_cachep; 41static struct kmem_cache *request_cachep;
42 42
43/* 43/*
44 * For queue allocation 44 * For queue allocation
@@ -127,6 +127,7 @@ void rq_init(struct request_queue *q, struct request *rq)
127 rq->nr_hw_segments = 0; 127 rq->nr_hw_segments = 0;
128 rq->ioprio = 0; 128 rq->ioprio = 0;
129 rq->special = NULL; 129 rq->special = NULL;
130 rq->raw_data_len = 0;
130 rq->buffer = NULL; 131 rq->buffer = NULL;
131 rq->tag = -1; 132 rq->tag = -1;
132 rq->errors = 0; 133 rq->errors = 0;
@@ -2015,6 +2016,7 @@ void blk_rq_bio_prep(struct request_queue *q, struct request *rq,
2015 rq->hard_cur_sectors = rq->current_nr_sectors; 2016 rq->hard_cur_sectors = rq->current_nr_sectors;
2016 rq->hard_nr_sectors = rq->nr_sectors = bio_sectors(bio); 2017 rq->hard_nr_sectors = rq->nr_sectors = bio_sectors(bio);
2017 rq->buffer = bio_data(bio); 2018 rq->buffer = bio_data(bio);
2019 rq->raw_data_len = bio->bi_size;
2018 rq->data_len = bio->bi_size; 2020 rq->data_len = bio->bi_size;
2019 2021
2020 rq->bio = rq->biotail = bio; 2022 rq->bio = rq->biotail = bio;
diff --git a/block/blk-ioc.c b/block/blk-ioc.c
index 80245dc30c75..e34df7c9fc36 100644
--- a/block/blk-ioc.c
+++ b/block/blk-ioc.c
@@ -17,17 +17,13 @@ static struct kmem_cache *iocontext_cachep;
17 17
18static void cfq_dtor(struct io_context *ioc) 18static void cfq_dtor(struct io_context *ioc)
19{ 19{
20 struct cfq_io_context *cic[1]; 20 if (!hlist_empty(&ioc->cic_list)) {
21 int r; 21 struct cfq_io_context *cic;
22 22
23 /* 23 cic = list_entry(ioc->cic_list.first, struct cfq_io_context,
24 * We don't have a specific key to lookup with, so use the gang 24 cic_list);
25 * lookup to just retrieve the first item stored. The cfq exit 25 cic->dtor(ioc);
26 * function will iterate the full tree, so any member will do. 26 }
27 */
28 r = radix_tree_gang_lookup(&ioc->radix_root, (void **) cic, 0, 1);
29 if (r > 0)
30 cic[0]->dtor(ioc);
31} 27}
32 28
33/* 29/*
@@ -57,18 +53,16 @@ EXPORT_SYMBOL(put_io_context);
57 53
58static void cfq_exit(struct io_context *ioc) 54static void cfq_exit(struct io_context *ioc)
59{ 55{
60 struct cfq_io_context *cic[1];
61 int r;
62
63 rcu_read_lock(); 56 rcu_read_lock();
64 /*
65 * See comment for cfq_dtor()
66 */
67 r = radix_tree_gang_lookup(&ioc->radix_root, (void **) cic, 0, 1);
68 rcu_read_unlock();
69 57
70 if (r > 0) 58 if (!hlist_empty(&ioc->cic_list)) {
71 cic[0]->exit(ioc); 59 struct cfq_io_context *cic;
60
61 cic = list_entry(ioc->cic_list.first, struct cfq_io_context,
62 cic_list);
63 cic->exit(ioc);
64 }
65 rcu_read_unlock();
72} 66}
73 67
74/* Called by the exitting task */ 68/* Called by the exitting task */
@@ -105,6 +99,7 @@ struct io_context *alloc_io_context(gfp_t gfp_flags, int node)
105 ret->nr_batch_requests = 0; /* because this is 0 */ 99 ret->nr_batch_requests = 0; /* because this is 0 */
106 ret->aic = NULL; 100 ret->aic = NULL;
107 INIT_RADIX_TREE(&ret->radix_root, GFP_ATOMIC | __GFP_HIGH); 101 INIT_RADIX_TREE(&ret->radix_root, GFP_ATOMIC | __GFP_HIGH);
102 INIT_HLIST_HEAD(&ret->cic_list);
108 ret->ioc_data = NULL; 103 ret->ioc_data = NULL;
109 } 104 }
110 105
@@ -176,7 +171,7 @@ void copy_io_context(struct io_context **pdst, struct io_context **psrc)
176} 171}
177EXPORT_SYMBOL(copy_io_context); 172EXPORT_SYMBOL(copy_io_context);
178 173
179int __init blk_ioc_init(void) 174static int __init blk_ioc_init(void)
180{ 175{
181 iocontext_cachep = kmem_cache_create("blkdev_ioc", 176 iocontext_cachep = kmem_cache_create("blkdev_ioc",
182 sizeof(struct io_context), 0, SLAB_PANIC, NULL); 177 sizeof(struct io_context), 0, SLAB_PANIC, NULL);
diff --git a/block/blk-map.c b/block/blk-map.c
index 955d75c1a58f..09f7fd0bcb73 100644
--- a/block/blk-map.c
+++ b/block/blk-map.c
@@ -19,6 +19,7 @@ int blk_rq_append_bio(struct request_queue *q, struct request *rq,
19 rq->biotail->bi_next = bio; 19 rq->biotail->bi_next = bio;
20 rq->biotail = bio; 20 rq->biotail = bio;
21 21
22 rq->raw_data_len += bio->bi_size;
22 rq->data_len += bio->bi_size; 23 rq->data_len += bio->bi_size;
23 } 24 }
24 return 0; 25 return 0;
@@ -139,10 +140,29 @@ int blk_rq_map_user(struct request_queue *q, struct request *rq,
139 ubuf += ret; 140 ubuf += ret;
140 } 141 }
141 142
143 /*
144 * __blk_rq_map_user() copies the buffers if starting address
145 * or length isn't aligned. As the copied buffer is always
146 * page aligned, we know that there's enough room for padding.
147 * Extend the last bio and update rq->data_len accordingly.
148 *
149 * On unmap, bio_uncopy_user() will use unmodified
150 * bio_map_data pointed to by bio->bi_private.
151 */
152 if (len & queue_dma_alignment(q)) {
153 unsigned int pad_len = (queue_dma_alignment(q) & ~len) + 1;
154 struct bio *bio = rq->biotail;
155
156 bio->bi_io_vec[bio->bi_vcnt - 1].bv_len += pad_len;
157 bio->bi_size += pad_len;
158 rq->data_len += pad_len;
159 }
160
142 rq->buffer = rq->data = NULL; 161 rq->buffer = rq->data = NULL;
143 return 0; 162 return 0;
144unmap_rq: 163unmap_rq:
145 blk_rq_unmap_user(bio); 164 blk_rq_unmap_user(bio);
165 rq->bio = NULL;
146 return ret; 166 return ret;
147} 167}
148EXPORT_SYMBOL(blk_rq_map_user); 168EXPORT_SYMBOL(blk_rq_map_user);
diff --git a/block/blk-merge.c b/block/blk-merge.c
index d3b84bbb776a..7506c4fe0264 100644
--- a/block/blk-merge.c
+++ b/block/blk-merge.c
@@ -220,7 +220,10 @@ new_segment:
220 bvprv = bvec; 220 bvprv = bvec;
221 } /* segments in rq */ 221 } /* segments in rq */
222 222
223 if (q->dma_drain_size) { 223 if (q->dma_drain_size && q->dma_drain_needed(rq)) {
224 if (rq->cmd_flags & REQ_RW)
225 memset(q->dma_drain_buffer, 0, q->dma_drain_size);
226
224 sg->page_link &= ~0x02; 227 sg->page_link &= ~0x02;
225 sg = sg_next(sg); 228 sg = sg_next(sg);
226 sg_set_page(sg, virt_to_page(q->dma_drain_buffer), 229 sg_set_page(sg, virt_to_page(q->dma_drain_buffer),
@@ -228,6 +231,7 @@ new_segment:
228 ((unsigned long)q->dma_drain_buffer) & 231 ((unsigned long)q->dma_drain_buffer) &
229 (PAGE_SIZE - 1)); 232 (PAGE_SIZE - 1));
230 nsegs++; 233 nsegs++;
234 rq->data_len += q->dma_drain_size;
231 } 235 }
232 236
233 if (sg) 237 if (sg)
diff --git a/block/blk-settings.c b/block/blk-settings.c
index c8d0c5724098..9a8ffdd0ce3d 100644
--- a/block/blk-settings.c
+++ b/block/blk-settings.c
@@ -296,6 +296,7 @@ EXPORT_SYMBOL(blk_queue_stack_limits);
296 * blk_queue_dma_drain - Set up a drain buffer for excess dma. 296 * blk_queue_dma_drain - Set up a drain buffer for excess dma.
297 * 297 *
298 * @q: the request queue for the device 298 * @q: the request queue for the device
299 * @dma_drain_needed: fn which returns non-zero if drain is necessary
299 * @buf: physically contiguous buffer 300 * @buf: physically contiguous buffer
300 * @size: size of the buffer in bytes 301 * @size: size of the buffer in bytes
301 * 302 *
@@ -315,14 +316,16 @@ EXPORT_SYMBOL(blk_queue_stack_limits);
315 * device can support otherwise there won't be room for the drain 316 * device can support otherwise there won't be room for the drain
316 * buffer. 317 * buffer.
317 */ 318 */
318int blk_queue_dma_drain(struct request_queue *q, void *buf, 319extern int blk_queue_dma_drain(struct request_queue *q,
319 unsigned int size) 320 dma_drain_needed_fn *dma_drain_needed,
321 void *buf, unsigned int size)
320{ 322{
321 if (q->max_hw_segments < 2 || q->max_phys_segments < 2) 323 if (q->max_hw_segments < 2 || q->max_phys_segments < 2)
322 return -EINVAL; 324 return -EINVAL;
323 /* make room for appending the drain */ 325 /* make room for appending the drain */
324 --q->max_hw_segments; 326 --q->max_hw_segments;
325 --q->max_phys_segments; 327 --q->max_phys_segments;
328 q->dma_drain_needed = dma_drain_needed;
326 q->dma_drain_buffer = buf; 329 q->dma_drain_buffer = buf;
327 q->dma_drain_size = size; 330 q->dma_drain_size = size;
328 331
@@ -386,7 +389,7 @@ void blk_queue_update_dma_alignment(struct request_queue *q, int mask)
386} 389}
387EXPORT_SYMBOL(blk_queue_update_dma_alignment); 390EXPORT_SYMBOL(blk_queue_update_dma_alignment);
388 391
389int __init blk_settings_init(void) 392static int __init blk_settings_init(void)
390{ 393{
391 blk_max_low_pfn = max_low_pfn - 1; 394 blk_max_low_pfn = max_low_pfn - 1;
392 blk_max_pfn = max_pfn - 1; 395 blk_max_pfn = max_pfn - 1;
diff --git a/block/bsg.c b/block/bsg.c
index 8917c5174dc2..7f3c09549e4b 100644
--- a/block/bsg.c
+++ b/block/bsg.c
@@ -437,14 +437,14 @@ static int blk_complete_sgv4_hdr_rq(struct request *rq, struct sg_io_v4 *hdr,
437 } 437 }
438 438
439 if (rq->next_rq) { 439 if (rq->next_rq) {
440 hdr->dout_resid = rq->data_len; 440 hdr->dout_resid = rq->raw_data_len;
441 hdr->din_resid = rq->next_rq->data_len; 441 hdr->din_resid = rq->next_rq->raw_data_len;
442 blk_rq_unmap_user(bidi_bio); 442 blk_rq_unmap_user(bidi_bio);
443 blk_put_request(rq->next_rq); 443 blk_put_request(rq->next_rq);
444 } else if (rq_data_dir(rq) == READ) 444 } else if (rq_data_dir(rq) == READ)
445 hdr->din_resid = rq->data_len; 445 hdr->din_resid = rq->raw_data_len;
446 else 446 else
447 hdr->dout_resid = rq->data_len; 447 hdr->dout_resid = rq->raw_data_len;
448 448
449 /* 449 /*
450 * If the request generated a negative error number, return it 450 * If the request generated a negative error number, return it
diff --git a/block/cfq-iosched.c b/block/cfq-iosched.c
index ca198e61fa65..0f962ecae91f 100644
--- a/block/cfq-iosched.c
+++ b/block/cfq-iosched.c
@@ -1145,38 +1145,19 @@ static void cfq_put_queue(struct cfq_queue *cfqq)
1145/* 1145/*
1146 * Call func for each cic attached to this ioc. Returns number of cic's seen. 1146 * Call func for each cic attached to this ioc. Returns number of cic's seen.
1147 */ 1147 */
1148#define CIC_GANG_NR 16
1149static unsigned int 1148static unsigned int
1150call_for_each_cic(struct io_context *ioc, 1149call_for_each_cic(struct io_context *ioc,
1151 void (*func)(struct io_context *, struct cfq_io_context *)) 1150 void (*func)(struct io_context *, struct cfq_io_context *))
1152{ 1151{
1153 struct cfq_io_context *cics[CIC_GANG_NR]; 1152 struct cfq_io_context *cic;
1154 unsigned long index = 0; 1153 struct hlist_node *n;
1155 unsigned int called = 0; 1154 int called = 0;
1156 int nr;
1157 1155
1158 rcu_read_lock(); 1156 rcu_read_lock();
1159 1157 hlist_for_each_entry_rcu(cic, n, &ioc->cic_list, cic_list) {
1160 do { 1158 func(ioc, cic);
1161 int i; 1159 called++;
1162 1160 }
1163 /*
1164 * Perhaps there's a better way - this just gang lookups from
1165 * 0 to the end, restarting after each CIC_GANG_NR from the
1166 * last key + 1.
1167 */
1168 nr = radix_tree_gang_lookup(&ioc->radix_root, (void **) cics,
1169 index, CIC_GANG_NR);
1170 if (!nr)
1171 break;
1172
1173 called += nr;
1174 index = 1 + (unsigned long) cics[nr - 1]->key;
1175
1176 for (i = 0; i < nr; i++)
1177 func(ioc, cics[i]);
1178 } while (nr == CIC_GANG_NR);
1179
1180 rcu_read_unlock(); 1161 rcu_read_unlock();
1181 1162
1182 return called; 1163 return called;
@@ -1190,6 +1171,7 @@ static void cic_free_func(struct io_context *ioc, struct cfq_io_context *cic)
1190 1171
1191 spin_lock_irqsave(&ioc->lock, flags); 1172 spin_lock_irqsave(&ioc->lock, flags);
1192 radix_tree_delete(&ioc->radix_root, cic->dead_key); 1173 radix_tree_delete(&ioc->radix_root, cic->dead_key);
1174 hlist_del_rcu(&cic->cic_list);
1193 spin_unlock_irqrestore(&ioc->lock, flags); 1175 spin_unlock_irqrestore(&ioc->lock, flags);
1194 1176
1195 kmem_cache_free(cfq_ioc_pool, cic); 1177 kmem_cache_free(cfq_ioc_pool, cic);
@@ -1280,6 +1262,7 @@ cfq_alloc_io_context(struct cfq_data *cfqd, gfp_t gfp_mask)
1280 if (cic) { 1262 if (cic) {
1281 cic->last_end_request = jiffies; 1263 cic->last_end_request = jiffies;
1282 INIT_LIST_HEAD(&cic->queue_list); 1264 INIT_LIST_HEAD(&cic->queue_list);
1265 INIT_HLIST_NODE(&cic->cic_list);
1283 cic->dtor = cfq_free_io_context; 1266 cic->dtor = cfq_free_io_context;
1284 cic->exit = cfq_exit_io_context; 1267 cic->exit = cfq_exit_io_context;
1285 elv_ioc_count_inc(ioc_count); 1268 elv_ioc_count_inc(ioc_count);
@@ -1501,6 +1484,7 @@ cfq_drop_dead_cic(struct cfq_data *cfqd, struct io_context *ioc,
1501 rcu_assign_pointer(ioc->ioc_data, NULL); 1484 rcu_assign_pointer(ioc->ioc_data, NULL);
1502 1485
1503 radix_tree_delete(&ioc->radix_root, (unsigned long) cfqd); 1486 radix_tree_delete(&ioc->radix_root, (unsigned long) cfqd);
1487 hlist_del_rcu(&cic->cic_list);
1504 spin_unlock_irqrestore(&ioc->lock, flags); 1488 spin_unlock_irqrestore(&ioc->lock, flags);
1505 1489
1506 cfq_cic_free(cic); 1490 cfq_cic_free(cic);
@@ -1561,6 +1545,8 @@ static int cfq_cic_link(struct cfq_data *cfqd, struct io_context *ioc,
1561 spin_lock_irqsave(&ioc->lock, flags); 1545 spin_lock_irqsave(&ioc->lock, flags);
1562 ret = radix_tree_insert(&ioc->radix_root, 1546 ret = radix_tree_insert(&ioc->radix_root,
1563 (unsigned long) cfqd, cic); 1547 (unsigned long) cfqd, cic);
1548 if (!ret)
1549 hlist_add_head_rcu(&cic->cic_list, &ioc->cic_list);
1564 spin_unlock_irqrestore(&ioc->lock, flags); 1550 spin_unlock_irqrestore(&ioc->lock, flags);
1565 1551
1566 radix_tree_preload_end(); 1552 radix_tree_preload_end();
diff --git a/block/elevator.c b/block/elevator.c
index bafbae0344d3..88318c383608 100644
--- a/block/elevator.c
+++ b/block/elevator.c
@@ -134,6 +134,21 @@ static struct elevator_type *elevator_get(const char *name)
134 spin_lock(&elv_list_lock); 134 spin_lock(&elv_list_lock);
135 135
136 e = elevator_find(name); 136 e = elevator_find(name);
137 if (!e) {
138 char elv[ELV_NAME_MAX + strlen("-iosched")];
139
140 spin_unlock(&elv_list_lock);
141
142 if (!strcmp(name, "anticipatory"))
143 sprintf(elv, "as-iosched");
144 else
145 sprintf(elv, "%s-iosched", name);
146
147 request_module(elv);
148 spin_lock(&elv_list_lock);
149 e = elevator_find(name);
150 }
151
137 if (e && !try_module_get(e->elevator_owner)) 152 if (e && !try_module_get(e->elevator_owner))
138 e = NULL; 153 e = NULL;
139 154
diff --git a/block/scsi_ioctl.c b/block/scsi_ioctl.c
index 9675b34638d4..e993cac4911d 100644
--- a/block/scsi_ioctl.c
+++ b/block/scsi_ioctl.c
@@ -266,7 +266,7 @@ static int blk_complete_sghdr_rq(struct request *rq, struct sg_io_hdr *hdr,
266 hdr->info = 0; 266 hdr->info = 0;
267 if (hdr->masked_status || hdr->host_status || hdr->driver_status) 267 if (hdr->masked_status || hdr->host_status || hdr->driver_status)
268 hdr->info |= SG_INFO_CHECK; 268 hdr->info |= SG_INFO_CHECK;
269 hdr->resid = rq->data_len; 269 hdr->resid = rq->raw_data_len;
270 hdr->sb_len_wr = 0; 270 hdr->sb_len_wr = 0;
271 271
272 if (rq->sense_len && hdr->sbp) { 272 if (rq->sense_len && hdr->sbp) {
@@ -528,6 +528,7 @@ static int __blk_send_generic(struct request_queue *q, struct gendisk *bd_disk,
528 rq = blk_get_request(q, WRITE, __GFP_WAIT); 528 rq = blk_get_request(q, WRITE, __GFP_WAIT);
529 rq->cmd_type = REQ_TYPE_BLOCK_PC; 529 rq->cmd_type = REQ_TYPE_BLOCK_PC;
530 rq->data = NULL; 530 rq->data = NULL;
531 rq->raw_data_len = 0;
531 rq->data_len = 0; 532 rq->data_len = 0;
532 rq->timeout = BLK_DEFAULT_SG_TIMEOUT; 533 rq->timeout = BLK_DEFAULT_SG_TIMEOUT;
533 memset(rq->cmd, 0, sizeof(rq->cmd)); 534 memset(rq->cmd, 0, sizeof(rq->cmd));
diff --git a/crypto/Kconfig b/crypto/Kconfig
index c3166a1a5bb6..898acc5c1967 100644
--- a/crypto/Kconfig
+++ b/crypto/Kconfig
@@ -74,6 +74,7 @@ config CRYPTO_XCBC
74config CRYPTO_NULL 74config CRYPTO_NULL
75 tristate "Null algorithms" 75 tristate "Null algorithms"
76 select CRYPTO_ALGAPI 76 select CRYPTO_ALGAPI
77 select CRYPTO_BLKCIPHER
77 help 78 help
78 These are 'Null' algorithms, used by IPsec, which do nothing. 79 These are 'Null' algorithms, used by IPsec, which do nothing.
79 80
@@ -567,6 +568,7 @@ config CRYPTO_TEST
567 depends on m 568 depends on m
568 select CRYPTO_ALGAPI 569 select CRYPTO_ALGAPI
569 select CRYPTO_AEAD 570 select CRYPTO_AEAD
571 select CRYPTO_BLKCIPHER
570 help 572 help
571 Quick & dirty crypto test module. 573 Quick & dirty crypto test module.
572 574
diff --git a/drivers/acpi/ec.c b/drivers/acpi/ec.c
index 7222a18a0319..caf873c14bfb 100644
--- a/drivers/acpi/ec.c
+++ b/drivers/acpi/ec.c
@@ -943,7 +943,11 @@ int __init acpi_ec_ecdt_probe(void)
943 boot_ec->command_addr = ecdt_ptr->control.address; 943 boot_ec->command_addr = ecdt_ptr->control.address;
944 boot_ec->data_addr = ecdt_ptr->data.address; 944 boot_ec->data_addr = ecdt_ptr->data.address;
945 boot_ec->gpe = ecdt_ptr->gpe; 945 boot_ec->gpe = ecdt_ptr->gpe;
946 boot_ec->handle = ACPI_ROOT_OBJECT; 946 if (ACPI_FAILURE(acpi_get_handle(NULL, ecdt_ptr->id,
947 &boot_ec->handle))) {
948 pr_info("Failed to locate handle for boot EC\n");
949 boot_ec->handle = ACPI_ROOT_OBJECT;
950 }
947 } else { 951 } else {
948 /* This workaround is needed only on some broken machines, 952 /* This workaround is needed only on some broken machines,
949 * which require early EC, but fail to provide ECDT */ 953 * which require early EC, but fail to provide ECDT */
diff --git a/drivers/acpi/executer/exregion.c b/drivers/acpi/executer/exregion.c
index 2e9ce94798c7..3f51b7e84a17 100644
--- a/drivers/acpi/executer/exregion.c
+++ b/drivers/acpi/executer/exregion.c
@@ -338,6 +338,7 @@ acpi_ex_pci_config_space_handler(u32 function,
338 acpi_status status = AE_OK; 338 acpi_status status = AE_OK;
339 struct acpi_pci_id *pci_id; 339 struct acpi_pci_id *pci_id;
340 u16 pci_register; 340 u16 pci_register;
341 u32 value32;
341 342
342 ACPI_FUNCTION_TRACE(ex_pci_config_space_handler); 343 ACPI_FUNCTION_TRACE(ex_pci_config_space_handler);
343 344
@@ -364,9 +365,9 @@ acpi_ex_pci_config_space_handler(u32 function,
364 switch (function) { 365 switch (function) {
365 case ACPI_READ: 366 case ACPI_READ:
366 367
367 *value = 0;
368 status = acpi_os_read_pci_configuration(pci_id, pci_register, 368 status = acpi_os_read_pci_configuration(pci_id, pci_register,
369 value, bit_width); 369 &value32, bit_width);
370 *value = value32;
370 break; 371 break;
371 372
372 case ACPI_WRITE: 373 case ACPI_WRITE:
diff --git a/drivers/acpi/fan.c b/drivers/acpi/fan.c
index 48cb705b274a..c8e3cba423ef 100644
--- a/drivers/acpi/fan.c
+++ b/drivers/acpi/fan.c
@@ -256,22 +256,28 @@ static int acpi_fan_add(struct acpi_device *device)
256 256
257 cdev = thermal_cooling_device_register("Fan", device, 257 cdev = thermal_cooling_device_register("Fan", device,
258 &fan_cooling_ops); 258 &fan_cooling_ops);
259 if (cdev) 259 if (IS_ERR(cdev)) {
260 result = PTR_ERR(cdev);
261 goto end;
262 }
263 if (cdev) {
260 printk(KERN_INFO PREFIX 264 printk(KERN_INFO PREFIX
261 "%s is registered as cooling_device%d\n", 265 "%s is registered as cooling_device%d\n",
262 device->dev.bus_id, cdev->id); 266 device->dev.bus_id, cdev->id);
263 else
264 goto end;
265 acpi_driver_data(device) = cdev;
266 result = sysfs_create_link(&device->dev.kobj, &cdev->device.kobj,
267 "thermal_cooling");
268 if (result)
269 return result;
270 267
271 result = sysfs_create_link(&cdev->device.kobj, &device->dev.kobj, 268 acpi_driver_data(device) = cdev;
272 "device"); 269 result = sysfs_create_link(&device->dev.kobj,
273 if (result) 270 &cdev->device.kobj,
274 return result; 271 "thermal_cooling");
272 if (result)
273 return result;
274
275 result = sysfs_create_link(&cdev->device.kobj,
276 &device->dev.kobj,
277 "device");
278 if (result)
279 return result;
280 }
275 281
276 result = acpi_fan_add_fs(device); 282 result = acpi_fan_add_fs(device);
277 if (result) 283 if (result)
diff --git a/drivers/acpi/processor_core.c b/drivers/acpi/processor_core.c
index 75ccf5d18bf4..a3cc8a98255c 100644
--- a/drivers/acpi/processor_core.c
+++ b/drivers/acpi/processor_core.c
@@ -670,21 +670,26 @@ static int __cpuinit acpi_processor_start(struct acpi_device *device)
670 670
671 pr->cdev = thermal_cooling_device_register("Processor", device, 671 pr->cdev = thermal_cooling_device_register("Processor", device,
672 &processor_cooling_ops); 672 &processor_cooling_ops);
673 if (pr->cdev) 673 if (IS_ERR(pr->cdev)) {
674 result = PTR_ERR(pr->cdev);
675 goto end;
676 }
677 if (pr->cdev) {
674 printk(KERN_INFO PREFIX 678 printk(KERN_INFO PREFIX
675 "%s is registered as cooling_device%d\n", 679 "%s is registered as cooling_device%d\n",
676 device->dev.bus_id, pr->cdev->id); 680 device->dev.bus_id, pr->cdev->id);
677 else
678 goto end;
679 681
680 result = sysfs_create_link(&device->dev.kobj, &pr->cdev->device.kobj, 682 result = sysfs_create_link(&device->dev.kobj,
681 "thermal_cooling"); 683 &pr->cdev->device.kobj,
682 if (result) 684 "thermal_cooling");
683 return result; 685 if (result)
684 result = sysfs_create_link(&pr->cdev->device.kobj, &device->dev.kobj, 686 return result;
685 "device"); 687 result = sysfs_create_link(&pr->cdev->device.kobj,
686 if (result) 688 &device->dev.kobj,
687 return result; 689 "device");
690 if (result)
691 return result;
692 }
688 693
689 if (pr->flags.throttling) { 694 if (pr->flags.throttling) {
690 printk(KERN_INFO PREFIX "%s [%s] (supports", 695 printk(KERN_INFO PREFIX "%s [%s] (supports",
@@ -809,10 +814,12 @@ static int acpi_processor_remove(struct acpi_device *device, int type)
809 814
810 acpi_processor_remove_fs(device); 815 acpi_processor_remove_fs(device);
811 816
812 sysfs_remove_link(&device->dev.kobj, "thermal_cooling"); 817 if (pr->cdev) {
813 sysfs_remove_link(&pr->cdev->device.kobj, "device"); 818 sysfs_remove_link(&device->dev.kobj, "thermal_cooling");
814 thermal_cooling_device_unregister(pr->cdev); 819 sysfs_remove_link(&pr->cdev->device.kobj, "device");
815 pr->cdev = NULL; 820 thermal_cooling_device_unregister(pr->cdev);
821 pr->cdev = NULL;
822 }
816 823
817 processors[pr->id] = NULL; 824 processors[pr->id] = NULL;
818 825
@@ -826,8 +833,6 @@ static int acpi_processor_remove(struct acpi_device *device, int type)
826 * Acpi processor hotplug support * 833 * Acpi processor hotplug support *
827 ****************************************************************************/ 834 ****************************************************************************/
828 835
829static int is_processor_present(acpi_handle handle);
830
831static int is_processor_present(acpi_handle handle) 836static int is_processor_present(acpi_handle handle)
832{ 837{
833 acpi_status status; 838 acpi_status status;
diff --git a/drivers/acpi/processor_idle.c b/drivers/acpi/processor_idle.c
index 980e1c33e6c5..6f3b217699e9 100644
--- a/drivers/acpi/processor_idle.c
+++ b/drivers/acpi/processor_idle.c
@@ -364,7 +364,7 @@ int acpi_processor_resume(struct acpi_device * device)
364 return 0; 364 return 0;
365} 365}
366 366
367#if defined (CONFIG_GENERIC_TIME) && defined (CONFIG_X86_TSC) 367#if defined (CONFIG_GENERIC_TIME) && defined (CONFIG_X86)
368static int tsc_halts_in_c(int state) 368static int tsc_halts_in_c(int state)
369{ 369{
370 switch (boot_cpu_data.x86_vendor) { 370 switch (boot_cpu_data.x86_vendor) {
@@ -544,7 +544,7 @@ static void acpi_processor_idle(void)
544 /* Get end time (ticks) */ 544 /* Get end time (ticks) */
545 t2 = inl(acpi_gbl_FADT.xpm_timer_block.address); 545 t2 = inl(acpi_gbl_FADT.xpm_timer_block.address);
546 546
547#if defined (CONFIG_GENERIC_TIME) && defined (CONFIG_X86_TSC) 547#if defined (CONFIG_GENERIC_TIME) && defined (CONFIG_X86)
548 /* TSC halts in C2, so notify users */ 548 /* TSC halts in C2, so notify users */
549 if (tsc_halts_in_c(ACPI_STATE_C2)) 549 if (tsc_halts_in_c(ACPI_STATE_C2))
550 mark_tsc_unstable("possible TSC halt in C2"); 550 mark_tsc_unstable("possible TSC halt in C2");
@@ -609,7 +609,7 @@ static void acpi_processor_idle(void)
609 acpi_set_register(ACPI_BITREG_ARB_DISABLE, 0); 609 acpi_set_register(ACPI_BITREG_ARB_DISABLE, 0);
610 } 610 }
611 611
612#if defined (CONFIG_GENERIC_TIME) && defined (CONFIG_X86_TSC) 612#if defined (CONFIG_GENERIC_TIME) && defined (CONFIG_X86)
613 /* TSC halts in C3, so notify users */ 613 /* TSC halts in C3, so notify users */
614 if (tsc_halts_in_c(ACPI_STATE_C3)) 614 if (tsc_halts_in_c(ACPI_STATE_C3))
615 mark_tsc_unstable("TSC halts in C3"); 615 mark_tsc_unstable("TSC halts in C3");
@@ -1500,7 +1500,7 @@ static int acpi_idle_enter_simple(struct cpuidle_device *dev,
1500 acpi_idle_do_entry(cx); 1500 acpi_idle_do_entry(cx);
1501 t2 = inl(acpi_gbl_FADT.xpm_timer_block.address); 1501 t2 = inl(acpi_gbl_FADT.xpm_timer_block.address);
1502 1502
1503#if defined (CONFIG_GENERIC_TIME) && defined (CONFIG_X86_TSC) 1503#if defined (CONFIG_GENERIC_TIME) && defined (CONFIG_X86)
1504 /* TSC could halt in idle, so notify users */ 1504 /* TSC could halt in idle, so notify users */
1505 if (tsc_halts_in_c(cx->type)) 1505 if (tsc_halts_in_c(cx->type))
1506 mark_tsc_unstable("TSC halts in idle");; 1506 mark_tsc_unstable("TSC halts in idle");;
@@ -1614,7 +1614,7 @@ static int acpi_idle_enter_bm(struct cpuidle_device *dev,
1614 spin_unlock(&c3_lock); 1614 spin_unlock(&c3_lock);
1615 } 1615 }
1616 1616
1617#if defined (CONFIG_GENERIC_TIME) && defined (CONFIG_X86_TSC) 1617#if defined (CONFIG_GENERIC_TIME) && defined (CONFIG_X86)
1618 /* TSC could halt in idle, so notify users */ 1618 /* TSC could halt in idle, so notify users */
1619 if (tsc_halts_in_c(ACPI_STATE_C3)) 1619 if (tsc_halts_in_c(ACPI_STATE_C3))
1620 mark_tsc_unstable("TSC halts in idle"); 1620 mark_tsc_unstable("TSC halts in idle");
diff --git a/drivers/acpi/utils.c b/drivers/acpi/utils.c
index 34f157571080..eba55b7d6c95 100644
--- a/drivers/acpi/utils.c
+++ b/drivers/acpi/utils.c
@@ -36,16 +36,20 @@ ACPI_MODULE_NAME("utils");
36/* -------------------------------------------------------------------------- 36/* --------------------------------------------------------------------------
37 Object Evaluation Helpers 37 Object Evaluation Helpers
38 -------------------------------------------------------------------------- */ 38 -------------------------------------------------------------------------- */
39static void
40acpi_util_eval_error(acpi_handle h, acpi_string p, acpi_status s)
41{
39#ifdef ACPI_DEBUG_OUTPUT 42#ifdef ACPI_DEBUG_OUTPUT
40#define acpi_util_eval_error(h,p,s) {\ 43 char prefix[80] = {'\0'};
41 char prefix[80] = {'\0'};\ 44 struct acpi_buffer buffer = {sizeof(prefix), prefix};
42 struct acpi_buffer buffer = {sizeof(prefix), prefix};\ 45 acpi_get_name(h, ACPI_FULL_PATHNAME, &buffer);
43 acpi_get_name(h, ACPI_FULL_PATHNAME, &buffer);\ 46 ACPI_DEBUG_PRINT((ACPI_DB_INFO, "Evaluate [%s.%s]: %s\n",
44 ACPI_DEBUG_PRINT((ACPI_DB_INFO, "Evaluate [%s.%s]: %s\n",\ 47 (char *) prefix, p, acpi_format_exception(s)));
45 (char *) prefix, p, acpi_format_exception(s))); }
46#else 48#else
47#define acpi_util_eval_error(h,p,s) 49 return;
48#endif 50#endif
51}
52
49acpi_status 53acpi_status
50acpi_extract_package(union acpi_object *package, 54acpi_extract_package(union acpi_object *package,
51 struct acpi_buffer *format, struct acpi_buffer *buffer) 55 struct acpi_buffer *format, struct acpi_buffer *buffer)
diff --git a/drivers/acpi/video.c b/drivers/acpi/video.c
index 7f714fa2a454..12cce69b5441 100644
--- a/drivers/acpi/video.c
+++ b/drivers/acpi/video.c
@@ -731,6 +731,9 @@ static void acpi_video_device_find_cap(struct acpi_video_device *device)
731 731
732 device->cdev = thermal_cooling_device_register("LCD", 732 device->cdev = thermal_cooling_device_register("LCD",
733 device->dev, &video_cooling_ops); 733 device->dev, &video_cooling_ops);
734 if (IS_ERR(device->cdev))
735 return;
736
734 if (device->cdev) { 737 if (device->cdev) {
735 printk(KERN_INFO PREFIX 738 printk(KERN_INFO PREFIX
736 "%s is registered as cooling_device%d\n", 739 "%s is registered as cooling_device%d\n",
diff --git a/drivers/ata/ahci.c b/drivers/ata/ahci.c
index 29e71bddd6ff..1db93b619074 100644
--- a/drivers/ata/ahci.c
+++ b/drivers/ata/ahci.c
@@ -85,6 +85,7 @@ enum {
85 board_ahci_ign_iferr = 2, 85 board_ahci_ign_iferr = 2,
86 board_ahci_sb600 = 3, 86 board_ahci_sb600 = 3,
87 board_ahci_mv = 4, 87 board_ahci_mv = 4,
88 board_ahci_sb700 = 5,
88 89
89 /* global controller registers */ 90 /* global controller registers */
90 HOST_CAP = 0x00, /* host capabilities */ 91 HOST_CAP = 0x00, /* host capabilities */
@@ -442,6 +443,16 @@ static const struct ata_port_info ahci_port_info[] = {
442 .udma_mask = ATA_UDMA6, 443 .udma_mask = ATA_UDMA6,
443 .port_ops = &ahci_ops, 444 .port_ops = &ahci_ops,
444 }, 445 },
446 /* board_ahci_sb700 */
447 {
448 AHCI_HFLAGS (AHCI_HFLAG_IGN_SERR_INTERNAL |
449 AHCI_HFLAG_NO_PMP),
450 .flags = AHCI_FLAG_COMMON,
451 .link_flags = AHCI_LFLAG_COMMON,
452 .pio_mask = 0x1f, /* pio0-4 */
453 .udma_mask = ATA_UDMA6,
454 .port_ops = &ahci_ops,
455 },
445}; 456};
446 457
447static const struct pci_device_id ahci_pci_tbl[] = { 458static const struct pci_device_id ahci_pci_tbl[] = {
@@ -484,12 +495,12 @@ static const struct pci_device_id ahci_pci_tbl[] = {
484 495
485 /* ATI */ 496 /* ATI */
486 { PCI_VDEVICE(ATI, 0x4380), board_ahci_sb600 }, /* ATI SB600 */ 497 { PCI_VDEVICE(ATI, 0x4380), board_ahci_sb600 }, /* ATI SB600 */
487 { PCI_VDEVICE(ATI, 0x4390), board_ahci_sb600 }, /* ATI SB700/800 */ 498 { PCI_VDEVICE(ATI, 0x4390), board_ahci_sb700 }, /* ATI SB700/800 */
488 { PCI_VDEVICE(ATI, 0x4391), board_ahci_sb600 }, /* ATI SB700/800 */ 499 { PCI_VDEVICE(ATI, 0x4391), board_ahci_sb700 }, /* ATI SB700/800 */
489 { PCI_VDEVICE(ATI, 0x4392), board_ahci_sb600 }, /* ATI SB700/800 */ 500 { PCI_VDEVICE(ATI, 0x4392), board_ahci_sb700 }, /* ATI SB700/800 */
490 { PCI_VDEVICE(ATI, 0x4393), board_ahci_sb600 }, /* ATI SB700/800 */ 501 { PCI_VDEVICE(ATI, 0x4393), board_ahci_sb700 }, /* ATI SB700/800 */
491 { PCI_VDEVICE(ATI, 0x4394), board_ahci_sb600 }, /* ATI SB700/800 */ 502 { PCI_VDEVICE(ATI, 0x4394), board_ahci_sb700 }, /* ATI SB700/800 */
492 { PCI_VDEVICE(ATI, 0x4395), board_ahci_sb600 }, /* ATI SB700/800 */ 503 { PCI_VDEVICE(ATI, 0x4395), board_ahci_sb700 }, /* ATI SB700/800 */
493 504
494 /* VIA */ 505 /* VIA */
495 { PCI_VDEVICE(VIA, 0x3349), board_ahci_vt8251 }, /* VIA VT8251 */ 506 { PCI_VDEVICE(VIA, 0x3349), board_ahci_vt8251 }, /* VIA VT8251 */
@@ -1932,7 +1943,7 @@ static int ahci_pci_device_suspend(struct pci_dev *pdev, pm_message_t mesg)
1932 void __iomem *mmio = host->iomap[AHCI_PCI_BAR]; 1943 void __iomem *mmio = host->iomap[AHCI_PCI_BAR];
1933 u32 ctl; 1944 u32 ctl;
1934 1945
1935 if (mesg.event == PM_EVENT_SUSPEND) { 1946 if (mesg.event & PM_EVENT_SLEEP) {
1936 /* AHCI spec rev1.1 section 8.3.3: 1947 /* AHCI spec rev1.1 section 8.3.3:
1937 * Software must disable interrupts prior to requesting a 1948 * Software must disable interrupts prior to requesting a
1938 * transition of the HBA to D3 state. 1949 * transition of the HBA to D3 state.
@@ -1975,16 +1986,11 @@ static int ahci_port_start(struct ata_port *ap)
1975 struct ahci_port_priv *pp; 1986 struct ahci_port_priv *pp;
1976 void *mem; 1987 void *mem;
1977 dma_addr_t mem_dma; 1988 dma_addr_t mem_dma;
1978 int rc;
1979 1989
1980 pp = devm_kzalloc(dev, sizeof(*pp), GFP_KERNEL); 1990 pp = devm_kzalloc(dev, sizeof(*pp), GFP_KERNEL);
1981 if (!pp) 1991 if (!pp)
1982 return -ENOMEM; 1992 return -ENOMEM;
1983 1993
1984 rc = ata_pad_alloc(ap, dev);
1985 if (rc)
1986 return rc;
1987
1988 mem = dmam_alloc_coherent(dev, AHCI_PORT_PRIV_DMA_SZ, &mem_dma, 1994 mem = dmam_alloc_coherent(dev, AHCI_PORT_PRIV_DMA_SZ, &mem_dma,
1989 GFP_KERNEL); 1995 GFP_KERNEL);
1990 if (!mem) 1996 if (!mem)
diff --git a/drivers/ata/ata_piix.c b/drivers/ata/ata_piix.c
index 752e7d2f3b2f..fae8404254c0 100644
--- a/drivers/ata/ata_piix.c
+++ b/drivers/ata/ata_piix.c
@@ -1339,7 +1339,7 @@ static int piix_pci_device_suspend(struct pci_dev *pdev, pm_message_t mesg)
1339 * cycles and power trying to do something to the sleeping 1339 * cycles and power trying to do something to the sleeping
1340 * beauty. 1340 * beauty.
1341 */ 1341 */
1342 if (piix_broken_suspend() && mesg.event == PM_EVENT_SUSPEND) { 1342 if (piix_broken_suspend() && (mesg.event & PM_EVENT_SLEEP)) {
1343 pci_save_state(pdev); 1343 pci_save_state(pdev);
1344 1344
1345 /* mark its power state as "unknown", since we don't 1345 /* mark its power state as "unknown", since we don't
diff --git a/drivers/ata/libata-core.c b/drivers/ata/libata-core.c
index beaa3a9d8b6d..fbc24358ada0 100644
--- a/drivers/ata/libata-core.c
+++ b/drivers/ata/libata-core.c
@@ -87,6 +87,28 @@ static struct workqueue_struct *ata_wq;
87 87
88struct workqueue_struct *ata_aux_wq; 88struct workqueue_struct *ata_aux_wq;
89 89
90struct ata_force_param {
91 const char *name;
92 unsigned int cbl;
93 int spd_limit;
94 unsigned long xfer_mask;
95 unsigned int horkage_on;
96 unsigned int horkage_off;
97};
98
99struct ata_force_ent {
100 int port;
101 int device;
102 struct ata_force_param param;
103};
104
105static struct ata_force_ent *ata_force_tbl;
106static int ata_force_tbl_size;
107
108static char ata_force_param_buf[PAGE_SIZE] __initdata;
109module_param_string(force, ata_force_param_buf, sizeof(ata_force_param_buf), 0444);
110MODULE_PARM_DESC(force, "Force ATA configurations including cable type, link speed and transfer mode (see Documentation/kernel-parameters.txt for details)");
111
90int atapi_enabled = 1; 112int atapi_enabled = 1;
91module_param(atapi_enabled, int, 0444); 113module_param(atapi_enabled, int, 0444);
92MODULE_PARM_DESC(atapi_enabled, "Enable discovery of ATAPI devices (0=off, 1=on)"); 114MODULE_PARM_DESC(atapi_enabled, "Enable discovery of ATAPI devices (0=off, 1=on)");
@@ -130,6 +152,179 @@ MODULE_VERSION(DRV_VERSION);
130 152
131 153
132/** 154/**
155 * ata_force_cbl - force cable type according to libata.force
156 * @ap: ATA port of interest
157 *
158 * Force cable type according to libata.force and whine about it.
159 * The last entry which has matching port number is used, so it
160 * can be specified as part of device force parameters. For
161 * example, both "a:40c,1.00:udma4" and "1.00:40c,udma4" have the
162 * same effect.
163 *
164 * LOCKING:
165 * EH context.
166 */
167void ata_force_cbl(struct ata_port *ap)
168{
169 int i;
170
171 for (i = ata_force_tbl_size - 1; i >= 0; i--) {
172 const struct ata_force_ent *fe = &ata_force_tbl[i];
173
174 if (fe->port != -1 && fe->port != ap->print_id)
175 continue;
176
177 if (fe->param.cbl == ATA_CBL_NONE)
178 continue;
179
180 ap->cbl = fe->param.cbl;
181 ata_port_printk(ap, KERN_NOTICE,
182 "FORCE: cable set to %s\n", fe->param.name);
183 return;
184 }
185}
186
187/**
188 * ata_force_spd_limit - force SATA spd limit according to libata.force
189 * @link: ATA link of interest
190 *
191 * Force SATA spd limit according to libata.force and whine about
192 * it. When only the port part is specified (e.g. 1:), the limit
193 * applies to all links connected to both the host link and all
194 * fan-out ports connected via PMP. If the device part is
195 * specified as 0 (e.g. 1.00:), it specifies the first fan-out
196 * link not the host link. Device number 15 always points to the
197 * host link whether PMP is attached or not.
198 *
199 * LOCKING:
200 * EH context.
201 */
202static void ata_force_spd_limit(struct ata_link *link)
203{
204 int linkno, i;
205
206 if (ata_is_host_link(link))
207 linkno = 15;
208 else
209 linkno = link->pmp;
210
211 for (i = ata_force_tbl_size - 1; i >= 0; i--) {
212 const struct ata_force_ent *fe = &ata_force_tbl[i];
213
214 if (fe->port != -1 && fe->port != link->ap->print_id)
215 continue;
216
217 if (fe->device != -1 && fe->device != linkno)
218 continue;
219
220 if (!fe->param.spd_limit)
221 continue;
222
223 link->hw_sata_spd_limit = (1 << fe->param.spd_limit) - 1;
224 ata_link_printk(link, KERN_NOTICE,
225 "FORCE: PHY spd limit set to %s\n", fe->param.name);
226 return;
227 }
228}
229
230/**
231 * ata_force_xfermask - force xfermask according to libata.force
232 * @dev: ATA device of interest
233 *
234 * Force xfer_mask according to libata.force and whine about it.
235 * For consistency with link selection, device number 15 selects
236 * the first device connected to the host link.
237 *
238 * LOCKING:
239 * EH context.
240 */
241static void ata_force_xfermask(struct ata_device *dev)
242{
243 int devno = dev->link->pmp + dev->devno;
244 int alt_devno = devno;
245 int i;
246
247 /* allow n.15 for the first device attached to host port */
248 if (ata_is_host_link(dev->link) && devno == 0)
249 alt_devno = 15;
250
251 for (i = ata_force_tbl_size - 1; i >= 0; i--) {
252 const struct ata_force_ent *fe = &ata_force_tbl[i];
253 unsigned long pio_mask, mwdma_mask, udma_mask;
254
255 if (fe->port != -1 && fe->port != dev->link->ap->print_id)
256 continue;
257
258 if (fe->device != -1 && fe->device != devno &&
259 fe->device != alt_devno)
260 continue;
261
262 if (!fe->param.xfer_mask)
263 continue;
264
265 ata_unpack_xfermask(fe->param.xfer_mask,
266 &pio_mask, &mwdma_mask, &udma_mask);
267 if (udma_mask)
268 dev->udma_mask = udma_mask;
269 else if (mwdma_mask) {
270 dev->udma_mask = 0;
271 dev->mwdma_mask = mwdma_mask;
272 } else {
273 dev->udma_mask = 0;
274 dev->mwdma_mask = 0;
275 dev->pio_mask = pio_mask;
276 }
277
278 ata_dev_printk(dev, KERN_NOTICE,
279 "FORCE: xfer_mask set to %s\n", fe->param.name);
280 return;
281 }
282}
283
284/**
285 * ata_force_horkage - force horkage according to libata.force
286 * @dev: ATA device of interest
287 *
288 * Force horkage according to libata.force and whine about it.
289 * For consistency with link selection, device number 15 selects
290 * the first device connected to the host link.
291 *
292 * LOCKING:
293 * EH context.
294 */
295static void ata_force_horkage(struct ata_device *dev)
296{
297 int devno = dev->link->pmp + dev->devno;
298 int alt_devno = devno;
299 int i;
300
301 /* allow n.15 for the first device attached to host port */
302 if (ata_is_host_link(dev->link) && devno == 0)
303 alt_devno = 15;
304
305 for (i = 0; i < ata_force_tbl_size; i++) {
306 const struct ata_force_ent *fe = &ata_force_tbl[i];
307
308 if (fe->port != -1 && fe->port != dev->link->ap->print_id)
309 continue;
310
311 if (fe->device != -1 && fe->device != devno &&
312 fe->device != alt_devno)
313 continue;
314
315 if (!(~dev->horkage & fe->param.horkage_on) &&
316 !(dev->horkage & fe->param.horkage_off))
317 continue;
318
319 dev->horkage |= fe->param.horkage_on;
320 dev->horkage &= ~fe->param.horkage_off;
321
322 ata_dev_printk(dev, KERN_NOTICE,
323 "FORCE: horkage modified (%s)\n", fe->param.name);
324 }
325}
326
327/**
133 * ata_tf_to_fis - Convert ATA taskfile to SATA FIS structure 328 * ata_tf_to_fis - Convert ATA taskfile to SATA FIS structure
134 * @tf: Taskfile to convert 329 * @tf: Taskfile to convert
135 * @pmp: Port multiplier port 330 * @pmp: Port multiplier port
@@ -2067,6 +2262,7 @@ int ata_dev_configure(struct ata_device *dev)
2067 2262
2068 /* set horkage */ 2263 /* set horkage */
2069 dev->horkage |= ata_dev_blacklisted(dev); 2264 dev->horkage |= ata_dev_blacklisted(dev);
2265 ata_force_horkage(dev);
2070 2266
2071 /* let ACPI work its magic */ 2267 /* let ACPI work its magic */
2072 rc = ata_acpi_on_devcfg(dev); 2268 rc = ata_acpi_on_devcfg(dev);
@@ -2200,6 +2396,7 @@ int ata_dev_configure(struct ata_device *dev)
2200 else if (dev->class == ATA_DEV_ATAPI) { 2396 else if (dev->class == ATA_DEV_ATAPI) {
2201 const char *cdb_intr_string = ""; 2397 const char *cdb_intr_string = "";
2202 const char *atapi_an_string = ""; 2398 const char *atapi_an_string = "";
2399 const char *dma_dir_string = "";
2203 u32 sntf; 2400 u32 sntf;
2204 2401
2205 rc = atapi_cdb_len(id); 2402 rc = atapi_cdb_len(id);
@@ -2240,13 +2437,19 @@ int ata_dev_configure(struct ata_device *dev)
2240 cdb_intr_string = ", CDB intr"; 2437 cdb_intr_string = ", CDB intr";
2241 } 2438 }
2242 2439
2440 if (atapi_dmadir || atapi_id_dmadir(dev->id)) {
2441 dev->flags |= ATA_DFLAG_DMADIR;
2442 dma_dir_string = ", DMADIR";
2443 }
2444
2243 /* print device info to dmesg */ 2445 /* print device info to dmesg */
2244 if (ata_msg_drv(ap) && print_info) 2446 if (ata_msg_drv(ap) && print_info)
2245 ata_dev_printk(dev, KERN_INFO, 2447 ata_dev_printk(dev, KERN_INFO,
2246 "ATAPI: %s, %s, max %s%s%s\n", 2448 "ATAPI: %s, %s, max %s%s%s%s\n",
2247 modelbuf, fwrevbuf, 2449 modelbuf, fwrevbuf,
2248 ata_mode_string(xfer_mask), 2450 ata_mode_string(xfer_mask),
2249 cdb_intr_string, atapi_an_string); 2451 cdb_intr_string, atapi_an_string,
2452 dma_dir_string);
2250 } 2453 }
2251 2454
2252 /* determine max_sectors */ 2455 /* determine max_sectors */
@@ -3150,6 +3353,7 @@ int ata_do_set_mode(struct ata_link *link, struct ata_device **r_failed_dev)
3150 mode_mask = ATA_DMA_MASK_CFA; 3353 mode_mask = ATA_DMA_MASK_CFA;
3151 3354
3152 ata_dev_xfermask(dev); 3355 ata_dev_xfermask(dev);
3356 ata_force_xfermask(dev);
3153 3357
3154 pio_mask = ata_pack_xfermask(dev->pio_mask, 0, 0); 3358 pio_mask = ata_pack_xfermask(dev->pio_mask, 0, 0);
3155 dma_mask = ata_pack_xfermask(0, dev->mwdma_mask, dev->udma_mask); 3359 dma_mask = ata_pack_xfermask(0, dev->mwdma_mask, dev->udma_mask);
@@ -4190,6 +4394,7 @@ static const struct ata_blacklist_entry ata_device_blacklist [] = {
4190 /* Devices which report 1 sector over size HPA */ 4394 /* Devices which report 1 sector over size HPA */
4191 { "ST340823A", NULL, ATA_HORKAGE_HPA_SIZE, }, 4395 { "ST340823A", NULL, ATA_HORKAGE_HPA_SIZE, },
4192 { "ST320413A", NULL, ATA_HORKAGE_HPA_SIZE, }, 4396 { "ST320413A", NULL, ATA_HORKAGE_HPA_SIZE, },
4397 { "ST310211A", NULL, ATA_HORKAGE_HPA_SIZE, },
4193 4398
4194 /* Devices which get the IVB wrong */ 4399 /* Devices which get the IVB wrong */
4195 { "QUANTUM FIREBALLlct10 05", "A03.0900", ATA_HORKAGE_IVB, }, 4400 { "QUANTUM FIREBALLlct10 05", "A03.0900", ATA_HORKAGE_IVB, },
@@ -4492,30 +4697,13 @@ void ata_sg_clean(struct ata_queued_cmd *qc)
4492 struct ata_port *ap = qc->ap; 4697 struct ata_port *ap = qc->ap;
4493 struct scatterlist *sg = qc->sg; 4698 struct scatterlist *sg = qc->sg;
4494 int dir = qc->dma_dir; 4699 int dir = qc->dma_dir;
4495 void *pad_buf = NULL;
4496 4700
4497 WARN_ON(sg == NULL); 4701 WARN_ON(sg == NULL);
4498 4702
4499 VPRINTK("unmapping %u sg elements\n", qc->mapped_n_elem); 4703 VPRINTK("unmapping %u sg elements\n", qc->n_elem);
4500
4501 /* if we padded the buffer out to 32-bit bound, and data
4502 * xfer direction is from-device, we must copy from the
4503 * pad buffer back into the supplied buffer
4504 */
4505 if (qc->pad_len && !(qc->tf.flags & ATA_TFLAG_WRITE))
4506 pad_buf = ap->pad + (qc->tag * ATA_DMA_PAD_SZ);
4507 4704
4508 if (qc->mapped_n_elem) 4705 if (qc->n_elem)
4509 dma_unmap_sg(ap->dev, sg, qc->mapped_n_elem, dir); 4706 dma_unmap_sg(ap->dev, sg, qc->n_elem, dir);
4510 /* restore last sg */
4511 if (qc->last_sg)
4512 *qc->last_sg = qc->saved_last_sg;
4513 if (pad_buf) {
4514 struct scatterlist *psg = &qc->extra_sg[1];
4515 void *addr = kmap_atomic(sg_page(psg), KM_IRQ0);
4516 memcpy(addr + psg->offset, pad_buf, qc->pad_len);
4517 kunmap_atomic(addr, KM_IRQ0);
4518 }
4519 4707
4520 qc->flags &= ~ATA_QCFLAG_DMAMAP; 4708 qc->flags &= ~ATA_QCFLAG_DMAMAP;
4521 qc->sg = NULL; 4709 qc->sg = NULL;
@@ -4658,43 +4846,6 @@ int ata_check_atapi_dma(struct ata_queued_cmd *qc)
4658} 4846}
4659 4847
4660/** 4848/**
4661 * atapi_qc_may_overflow - Check whether data transfer may overflow
4662 * @qc: ATA command in question
4663 *
4664 * ATAPI commands which transfer variable length data to host
4665 * might overflow due to application error or hardare bug. This
4666 * function checks whether overflow should be drained and ignored
4667 * for @qc.
4668 *
4669 * LOCKING:
4670 * None.
4671 *
4672 * RETURNS:
4673 * 1 if @qc may overflow; otherwise, 0.
4674 */
4675static int atapi_qc_may_overflow(struct ata_queued_cmd *qc)
4676{
4677 if (qc->tf.protocol != ATAPI_PROT_PIO &&
4678 qc->tf.protocol != ATAPI_PROT_DMA)
4679 return 0;
4680
4681 if (qc->tf.flags & ATA_TFLAG_WRITE)
4682 return 0;
4683
4684 switch (qc->cdb[0]) {
4685 case READ_10:
4686 case READ_12:
4687 case WRITE_10:
4688 case WRITE_12:
4689 case GPCMD_READ_CD:
4690 case GPCMD_READ_CD_MSF:
4691 return 0;
4692 }
4693
4694 return 1;
4695}
4696
4697/**
4698 * ata_std_qc_defer - Check whether a qc needs to be deferred 4849 * ata_std_qc_defer - Check whether a qc needs to be deferred
4699 * @qc: ATA command in question 4850 * @qc: ATA command in question
4700 * 4851 *
@@ -4781,97 +4932,6 @@ void ata_sg_init(struct ata_queued_cmd *qc, struct scatterlist *sg,
4781 qc->cursg = qc->sg; 4932 qc->cursg = qc->sg;
4782} 4933}
4783 4934
4784static unsigned int ata_sg_setup_extra(struct ata_queued_cmd *qc,
4785 unsigned int *n_elem_extra,
4786 unsigned int *nbytes_extra)
4787{
4788 struct ata_port *ap = qc->ap;
4789 unsigned int n_elem = qc->n_elem;
4790 struct scatterlist *lsg, *copy_lsg = NULL, *tsg = NULL, *esg = NULL;
4791
4792 *n_elem_extra = 0;
4793 *nbytes_extra = 0;
4794
4795 /* needs padding? */
4796 qc->pad_len = qc->nbytes & 3;
4797
4798 if (likely(!qc->pad_len))
4799 return n_elem;
4800
4801 /* locate last sg and save it */
4802 lsg = sg_last(qc->sg, n_elem);
4803 qc->last_sg = lsg;
4804 qc->saved_last_sg = *lsg;
4805
4806 sg_init_table(qc->extra_sg, ARRAY_SIZE(qc->extra_sg));
4807
4808 if (qc->pad_len) {
4809 struct scatterlist *psg = &qc->extra_sg[1];
4810 void *pad_buf = ap->pad + (qc->tag * ATA_DMA_PAD_SZ);
4811 unsigned int offset;
4812
4813 WARN_ON(qc->dev->class != ATA_DEV_ATAPI);
4814
4815 memset(pad_buf, 0, ATA_DMA_PAD_SZ);
4816
4817 /* psg->page/offset are used to copy to-be-written
4818 * data in this function or read data in ata_sg_clean.
4819 */
4820 offset = lsg->offset + lsg->length - qc->pad_len;
4821 sg_set_page(psg, nth_page(sg_page(lsg), offset >> PAGE_SHIFT),
4822 qc->pad_len, offset_in_page(offset));
4823
4824 if (qc->tf.flags & ATA_TFLAG_WRITE) {
4825 void *addr = kmap_atomic(sg_page(psg), KM_IRQ0);
4826 memcpy(pad_buf, addr + psg->offset, qc->pad_len);
4827 kunmap_atomic(addr, KM_IRQ0);
4828 }
4829
4830 sg_dma_address(psg) = ap->pad_dma + (qc->tag * ATA_DMA_PAD_SZ);
4831 sg_dma_len(psg) = ATA_DMA_PAD_SZ;
4832
4833 /* Trim the last sg entry and chain the original and
4834 * padding sg lists.
4835 *
4836 * Because chaining consumes one sg entry, one extra
4837 * sg entry is allocated and the last sg entry is
4838 * copied to it if the length isn't zero after padded
4839 * amount is removed.
4840 *
4841 * If the last sg entry is completely replaced by
4842 * padding sg entry, the first sg entry is skipped
4843 * while chaining.
4844 */
4845 lsg->length -= qc->pad_len;
4846 if (lsg->length) {
4847 copy_lsg = &qc->extra_sg[0];
4848 tsg = &qc->extra_sg[0];
4849 } else {
4850 n_elem--;
4851 tsg = &qc->extra_sg[1];
4852 }
4853
4854 esg = &qc->extra_sg[1];
4855
4856 (*n_elem_extra)++;
4857 (*nbytes_extra) += 4 - qc->pad_len;
4858 }
4859
4860 if (copy_lsg)
4861 sg_set_page(copy_lsg, sg_page(lsg), lsg->length, lsg->offset);
4862
4863 sg_chain(lsg, 1, tsg);
4864 sg_mark_end(esg);
4865
4866 /* sglist can't start with chaining sg entry, fast forward */
4867 if (qc->sg == lsg) {
4868 qc->sg = tsg;
4869 qc->cursg = tsg;
4870 }
4871
4872 return n_elem;
4873}
4874
4875/** 4935/**
4876 * ata_sg_setup - DMA-map the scatter-gather table associated with a command. 4936 * ata_sg_setup - DMA-map the scatter-gather table associated with a command.
4877 * @qc: Command with scatter-gather table to be mapped. 4937 * @qc: Command with scatter-gather table to be mapped.
@@ -4888,26 +4948,17 @@ static unsigned int ata_sg_setup_extra(struct ata_queued_cmd *qc,
4888static int ata_sg_setup(struct ata_queued_cmd *qc) 4948static int ata_sg_setup(struct ata_queued_cmd *qc)
4889{ 4949{
4890 struct ata_port *ap = qc->ap; 4950 struct ata_port *ap = qc->ap;
4891 unsigned int n_elem, n_elem_extra, nbytes_extra; 4951 unsigned int n_elem;
4892 4952
4893 VPRINTK("ENTER, ata%u\n", ap->print_id); 4953 VPRINTK("ENTER, ata%u\n", ap->print_id);
4894 4954
4895 n_elem = ata_sg_setup_extra(qc, &n_elem_extra, &nbytes_extra); 4955 n_elem = dma_map_sg(ap->dev, qc->sg, qc->n_elem, qc->dma_dir);
4956 if (n_elem < 1)
4957 return -1;
4896 4958
4897 if (n_elem) { 4959 DPRINTK("%d sg elements mapped\n", n_elem);
4898 n_elem = dma_map_sg(ap->dev, qc->sg, n_elem, qc->dma_dir);
4899 if (n_elem < 1) {
4900 /* restore last sg */
4901 if (qc->last_sg)
4902 *qc->last_sg = qc->saved_last_sg;
4903 return -1;
4904 }
4905 DPRINTK("%d sg elements mapped\n", n_elem);
4906 }
4907 4960
4908 qc->n_elem = qc->mapped_n_elem = n_elem; 4961 qc->n_elem = n_elem;
4909 qc->n_elem += n_elem_extra;
4910 qc->nbytes += nbytes_extra;
4911 qc->flags |= ATA_QCFLAG_DMAMAP; 4962 qc->flags |= ATA_QCFLAG_DMAMAP;
4912 4963
4913 return 0; 4964 return 0;
@@ -5145,46 +5196,22 @@ static void atapi_send_cdb(struct ata_port *ap, struct ata_queued_cmd *qc)
5145 */ 5196 */
5146static int __atapi_pio_bytes(struct ata_queued_cmd *qc, unsigned int bytes) 5197static int __atapi_pio_bytes(struct ata_queued_cmd *qc, unsigned int bytes)
5147{ 5198{
5148 int do_write = (qc->tf.flags & ATA_TFLAG_WRITE); 5199 int rw = (qc->tf.flags & ATA_TFLAG_WRITE) ? WRITE : READ;
5149 struct ata_port *ap = qc->ap; 5200 struct ata_port *ap = qc->ap;
5150 struct ata_eh_info *ehi = &qc->dev->link->eh_info; 5201 struct ata_device *dev = qc->dev;
5202 struct ata_eh_info *ehi = &dev->link->eh_info;
5151 struct scatterlist *sg; 5203 struct scatterlist *sg;
5152 struct page *page; 5204 struct page *page;
5153 unsigned char *buf; 5205 unsigned char *buf;
5154 unsigned int offset, count; 5206 unsigned int offset, count, consumed;
5155 5207
5156next_sg: 5208next_sg:
5157 sg = qc->cursg; 5209 sg = qc->cursg;
5158 if (unlikely(!sg)) { 5210 if (unlikely(!sg)) {
5159 /* 5211 ata_ehi_push_desc(ehi, "unexpected or too much trailing data "
5160 * The end of qc->sg is reached and the device expects 5212 "buf=%u cur=%u bytes=%u",
5161 * more data to transfer. In order not to overrun qc->sg 5213 qc->nbytes, qc->curbytes, bytes);
5162 * and fulfill length specified in the byte count register, 5214 return -1;
5163 * - for read case, discard trailing data from the device
5164 * - for write case, padding zero data to the device
5165 */
5166 u16 pad_buf[1] = { 0 };
5167 unsigned int i;
5168
5169 if (bytes > qc->curbytes - qc->nbytes + ATAPI_MAX_DRAIN) {
5170 ata_ehi_push_desc(ehi, "too much trailing data "
5171 "buf=%u cur=%u bytes=%u",
5172 qc->nbytes, qc->curbytes, bytes);
5173 return -1;
5174 }
5175
5176 /* overflow is exptected for misc ATAPI commands */
5177 if (bytes && !atapi_qc_may_overflow(qc))
5178 ata_dev_printk(qc->dev, KERN_WARNING, "ATAPI %u bytes "
5179 "trailing data (cdb=%02x nbytes=%u)\n",
5180 bytes, qc->cdb[0], qc->nbytes);
5181
5182 for (i = 0; i < (bytes + 1) / 2; i++)
5183 ap->ops->data_xfer(qc->dev, (unsigned char *)pad_buf, 2, do_write);
5184
5185 qc->curbytes += bytes;
5186
5187 return 0;
5188 } 5215 }
5189 5216
5190 page = sg_page(sg); 5217 page = sg_page(sg);
@@ -5210,18 +5237,16 @@ next_sg:
5210 buf = kmap_atomic(page, KM_IRQ0); 5237 buf = kmap_atomic(page, KM_IRQ0);
5211 5238
5212 /* do the actual data transfer */ 5239 /* do the actual data transfer */
5213 ap->ops->data_xfer(qc->dev, buf + offset, count, do_write); 5240 consumed = ap->ops->data_xfer(dev, buf + offset, count, rw);
5214 5241
5215 kunmap_atomic(buf, KM_IRQ0); 5242 kunmap_atomic(buf, KM_IRQ0);
5216 local_irq_restore(flags); 5243 local_irq_restore(flags);
5217 } else { 5244 } else {
5218 buf = page_address(page); 5245 buf = page_address(page);
5219 ap->ops->data_xfer(qc->dev, buf + offset, count, do_write); 5246 consumed = ap->ops->data_xfer(dev, buf + offset, count, rw);
5220 } 5247 }
5221 5248
5222 bytes -= count; 5249 bytes -= min(bytes, consumed);
5223 if ((count & 1) && bytes)
5224 bytes--;
5225 qc->curbytes += count; 5250 qc->curbytes += count;
5226 qc->cursg_ofs += count; 5251 qc->cursg_ofs += count;
5227 5252
@@ -5230,9 +5255,11 @@ next_sg:
5230 qc->cursg_ofs = 0; 5255 qc->cursg_ofs = 0;
5231 } 5256 }
5232 5257
5258 /* consumed can be larger than count only for the last transfer */
5259 WARN_ON(qc->cursg && count != consumed);
5260
5233 if (bytes) 5261 if (bytes)
5234 goto next_sg; 5262 goto next_sg;
5235
5236 return 0; 5263 return 0;
5237} 5264}
5238 5265
@@ -5250,6 +5277,7 @@ static void atapi_pio_bytes(struct ata_queued_cmd *qc)
5250{ 5277{
5251 struct ata_port *ap = qc->ap; 5278 struct ata_port *ap = qc->ap;
5252 struct ata_device *dev = qc->dev; 5279 struct ata_device *dev = qc->dev;
5280 struct ata_eh_info *ehi = &dev->link->eh_info;
5253 unsigned int ireason, bc_lo, bc_hi, bytes; 5281 unsigned int ireason, bc_lo, bc_hi, bytes;
5254 int i_write, do_write = (qc->tf.flags & ATA_TFLAG_WRITE) ? 1 : 0; 5282 int i_write, do_write = (qc->tf.flags & ATA_TFLAG_WRITE) ? 1 : 0;
5255 5283
@@ -5267,26 +5295,28 @@ static void atapi_pio_bytes(struct ata_queued_cmd *qc)
5267 5295
5268 /* shall be cleared to zero, indicating xfer of data */ 5296 /* shall be cleared to zero, indicating xfer of data */
5269 if (unlikely(ireason & (1 << 0))) 5297 if (unlikely(ireason & (1 << 0)))
5270 goto err_out; 5298 goto atapi_check;
5271 5299
5272 /* make sure transfer direction matches expected */ 5300 /* make sure transfer direction matches expected */
5273 i_write = ((ireason & (1 << 1)) == 0) ? 1 : 0; 5301 i_write = ((ireason & (1 << 1)) == 0) ? 1 : 0;
5274 if (unlikely(do_write != i_write)) 5302 if (unlikely(do_write != i_write))
5275 goto err_out; 5303 goto atapi_check;
5276 5304
5277 if (unlikely(!bytes)) 5305 if (unlikely(!bytes))
5278 goto err_out; 5306 goto atapi_check;
5279 5307
5280 VPRINTK("ata%u: xfering %d bytes\n", ap->print_id, bytes); 5308 VPRINTK("ata%u: xfering %d bytes\n", ap->print_id, bytes);
5281 5309
5282 if (__atapi_pio_bytes(qc, bytes)) 5310 if (unlikely(__atapi_pio_bytes(qc, bytes)))
5283 goto err_out; 5311 goto err_out;
5284 ata_altstatus(ap); /* flush */ 5312 ata_altstatus(ap); /* flush */
5285 5313
5286 return; 5314 return;
5287 5315
5288err_out: 5316 atapi_check:
5289 ata_dev_printk(dev, KERN_INFO, "ATAPI check failed\n"); 5317 ata_ehi_push_desc(ehi, "ATAPI check failed (ireason=0x%x bytes=%u)",
5318 ireason, bytes);
5319 err_out:
5290 qc->err_mask |= AC_ERR_HSM; 5320 qc->err_mask |= AC_ERR_HSM;
5291 ap->hsm_task_state = HSM_ST_ERR; 5321 ap->hsm_task_state = HSM_ST_ERR;
5292} 5322}
@@ -5971,9 +6001,6 @@ void ata_qc_issue(struct ata_queued_cmd *qc)
5971 */ 6001 */
5972 BUG_ON(ata_is_data(prot) && (!qc->sg || !qc->n_elem || !qc->nbytes)); 6002 BUG_ON(ata_is_data(prot) && (!qc->sg || !qc->n_elem || !qc->nbytes));
5973 6003
5974 /* ata_sg_setup() may update nbytes */
5975 qc->raw_nbytes = qc->nbytes;
5976
5977 if (ata_is_dma(prot) || (ata_is_pio(prot) && 6004 if (ata_is_dma(prot) || (ata_is_pio(prot) &&
5978 (ap->flags & ATA_FLAG_PIO_DMA))) 6005 (ap->flags & ATA_FLAG_PIO_DMA)))
5979 if (ata_sg_setup(qc)) 6006 if (ata_sg_setup(qc))
@@ -6540,8 +6567,6 @@ int ata_host_suspend(struct ata_host *host, pm_message_t mesg)
6540 ata_lpm_enable(host); 6567 ata_lpm_enable(host);
6541 6568
6542 rc = ata_host_request_pm(host, mesg, 0, ATA_EHI_QUIET, 1); 6569 rc = ata_host_request_pm(host, mesg, 0, ATA_EHI_QUIET, 1);
6543 if (rc == 0)
6544 host->dev->power.power_state = mesg;
6545 return rc; 6570 return rc;
6546} 6571}
6547 6572
@@ -6560,7 +6585,6 @@ void ata_host_resume(struct ata_host *host)
6560{ 6585{
6561 ata_host_request_pm(host, PMSG_ON, ATA_EH_SOFTRESET, 6586 ata_host_request_pm(host, PMSG_ON, ATA_EH_SOFTRESET,
6562 ATA_EHI_NO_AUTOPSY | ATA_EHI_QUIET, 0); 6587 ATA_EHI_NO_AUTOPSY | ATA_EHI_QUIET, 0);
6563 host->dev->power.power_state = PMSG_ON;
6564 6588
6565 /* reenable link pm */ 6589 /* reenable link pm */
6566 ata_lpm_disable(host); 6590 ata_lpm_disable(host);
@@ -6582,19 +6606,12 @@ void ata_host_resume(struct ata_host *host)
6582int ata_port_start(struct ata_port *ap) 6606int ata_port_start(struct ata_port *ap)
6583{ 6607{
6584 struct device *dev = ap->dev; 6608 struct device *dev = ap->dev;
6585 int rc;
6586 6609
6587 ap->prd = dmam_alloc_coherent(dev, ATA_PRD_TBL_SZ, &ap->prd_dma, 6610 ap->prd = dmam_alloc_coherent(dev, ATA_PRD_TBL_SZ, &ap->prd_dma,
6588 GFP_KERNEL); 6611 GFP_KERNEL);
6589 if (!ap->prd) 6612 if (!ap->prd)
6590 return -ENOMEM; 6613 return -ENOMEM;
6591 6614
6592 rc = ata_pad_alloc(ap, dev);
6593 if (rc)
6594 return rc;
6595
6596 DPRINTK("prd alloc, virt %p, dma %llx\n", ap->prd,
6597 (unsigned long long)ap->prd_dma);
6598 return 0; 6615 return 0;
6599} 6616}
6600 6617
@@ -6681,7 +6698,8 @@ void ata_link_init(struct ata_port *ap, struct ata_link *link, int pmp)
6681 */ 6698 */
6682int sata_link_init_spd(struct ata_link *link) 6699int sata_link_init_spd(struct ata_link *link)
6683{ 6700{
6684 u32 scontrol, spd; 6701 u32 scontrol;
6702 u8 spd;
6685 int rc; 6703 int rc;
6686 6704
6687 rc = sata_scr_read(link, SCR_CONTROL, &scontrol); 6705 rc = sata_scr_read(link, SCR_CONTROL, &scontrol);
@@ -6692,6 +6710,8 @@ int sata_link_init_spd(struct ata_link *link)
6692 if (spd) 6710 if (spd)
6693 link->hw_sata_spd_limit &= (1 << spd) - 1; 6711 link->hw_sata_spd_limit &= (1 << spd) - 1;
6694 6712
6713 ata_force_spd_limit(link);
6714
6695 link->sata_spd_limit = link->hw_sata_spd_limit; 6715 link->sata_spd_limit = link->hw_sata_spd_limit;
6696 6716
6697 return 0; 6717 return 0;
@@ -7352,7 +7372,7 @@ void ata_pci_device_do_suspend(struct pci_dev *pdev, pm_message_t mesg)
7352 pci_save_state(pdev); 7372 pci_save_state(pdev);
7353 pci_disable_device(pdev); 7373 pci_disable_device(pdev);
7354 7374
7355 if (mesg.event == PM_EVENT_SUSPEND) 7375 if (mesg.event & PM_EVENT_SLEEP)
7356 pci_set_power_state(pdev, PCI_D3hot); 7376 pci_set_power_state(pdev, PCI_D3hot);
7357} 7377}
7358 7378
@@ -7402,10 +7422,187 @@ int ata_pci_device_resume(struct pci_dev *pdev)
7402 7422
7403#endif /* CONFIG_PCI */ 7423#endif /* CONFIG_PCI */
7404 7424
7425static int __init ata_parse_force_one(char **cur,
7426 struct ata_force_ent *force_ent,
7427 const char **reason)
7428{
7429 /* FIXME: Currently, there's no way to tag init const data and
7430 * using __initdata causes build failure on some versions of
7431 * gcc. Once __initdataconst is implemented, add const to the
7432 * following structure.
7433 */
7434 static struct ata_force_param force_tbl[] __initdata = {
7435 { "40c", .cbl = ATA_CBL_PATA40 },
7436 { "80c", .cbl = ATA_CBL_PATA80 },
7437 { "short40c", .cbl = ATA_CBL_PATA40_SHORT },
7438 { "unk", .cbl = ATA_CBL_PATA_UNK },
7439 { "ign", .cbl = ATA_CBL_PATA_IGN },
7440 { "sata", .cbl = ATA_CBL_SATA },
7441 { "1.5Gbps", .spd_limit = 1 },
7442 { "3.0Gbps", .spd_limit = 2 },
7443 { "noncq", .horkage_on = ATA_HORKAGE_NONCQ },
7444 { "ncq", .horkage_off = ATA_HORKAGE_NONCQ },
7445 { "pio0", .xfer_mask = 1 << (ATA_SHIFT_PIO + 0) },
7446 { "pio1", .xfer_mask = 1 << (ATA_SHIFT_PIO + 1) },
7447 { "pio2", .xfer_mask = 1 << (ATA_SHIFT_PIO + 2) },
7448 { "pio3", .xfer_mask = 1 << (ATA_SHIFT_PIO + 3) },
7449 { "pio4", .xfer_mask = 1 << (ATA_SHIFT_PIO + 4) },
7450 { "pio5", .xfer_mask = 1 << (ATA_SHIFT_PIO + 5) },
7451 { "pio6", .xfer_mask = 1 << (ATA_SHIFT_PIO + 6) },
7452 { "mwdma0", .xfer_mask = 1 << (ATA_SHIFT_MWDMA + 0) },
7453 { "mwdma1", .xfer_mask = 1 << (ATA_SHIFT_MWDMA + 1) },
7454 { "mwdma2", .xfer_mask = 1 << (ATA_SHIFT_MWDMA + 2) },
7455 { "mwdma3", .xfer_mask = 1 << (ATA_SHIFT_MWDMA + 3) },
7456 { "mwdma4", .xfer_mask = 1 << (ATA_SHIFT_MWDMA + 4) },
7457 { "udma0", .xfer_mask = 1 << (ATA_SHIFT_UDMA + 0) },
7458 { "udma16", .xfer_mask = 1 << (ATA_SHIFT_UDMA + 0) },
7459 { "udma/16", .xfer_mask = 1 << (ATA_SHIFT_UDMA + 0) },
7460 { "udma1", .xfer_mask = 1 << (ATA_SHIFT_UDMA + 1) },
7461 { "udma25", .xfer_mask = 1 << (ATA_SHIFT_UDMA + 1) },
7462 { "udma/25", .xfer_mask = 1 << (ATA_SHIFT_UDMA + 1) },
7463 { "udma2", .xfer_mask = 1 << (ATA_SHIFT_UDMA + 2) },
7464 { "udma33", .xfer_mask = 1 << (ATA_SHIFT_UDMA + 2) },
7465 { "udma/33", .xfer_mask = 1 << (ATA_SHIFT_UDMA + 2) },
7466 { "udma3", .xfer_mask = 1 << (ATA_SHIFT_UDMA + 3) },
7467 { "udma44", .xfer_mask = 1 << (ATA_SHIFT_UDMA + 3) },
7468 { "udma/44", .xfer_mask = 1 << (ATA_SHIFT_UDMA + 3) },
7469 { "udma4", .xfer_mask = 1 << (ATA_SHIFT_UDMA + 4) },
7470 { "udma66", .xfer_mask = 1 << (ATA_SHIFT_UDMA + 4) },
7471 { "udma/66", .xfer_mask = 1 << (ATA_SHIFT_UDMA + 4) },
7472 { "udma5", .xfer_mask = 1 << (ATA_SHIFT_UDMA + 5) },
7473 { "udma100", .xfer_mask = 1 << (ATA_SHIFT_UDMA + 5) },
7474 { "udma/100", .xfer_mask = 1 << (ATA_SHIFT_UDMA + 5) },
7475 { "udma6", .xfer_mask = 1 << (ATA_SHIFT_UDMA + 6) },
7476 { "udma133", .xfer_mask = 1 << (ATA_SHIFT_UDMA + 6) },
7477 { "udma/133", .xfer_mask = 1 << (ATA_SHIFT_UDMA + 6) },
7478 { "udma7", .xfer_mask = 1 << (ATA_SHIFT_UDMA + 7) },
7479 };
7480 char *start = *cur, *p = *cur;
7481 char *id, *val, *endp;
7482 const struct ata_force_param *match_fp = NULL;
7483 int nr_matches = 0, i;
7484
7485 /* find where this param ends and update *cur */
7486 while (*p != '\0' && *p != ',')
7487 p++;
7488
7489 if (*p == '\0')
7490 *cur = p;
7491 else
7492 *cur = p + 1;
7493
7494 *p = '\0';
7495
7496 /* parse */
7497 p = strchr(start, ':');
7498 if (!p) {
7499 val = strstrip(start);
7500 goto parse_val;
7501 }
7502 *p = '\0';
7503
7504 id = strstrip(start);
7505 val = strstrip(p + 1);
7506
7507 /* parse id */
7508 p = strchr(id, '.');
7509 if (p) {
7510 *p++ = '\0';
7511 force_ent->device = simple_strtoul(p, &endp, 10);
7512 if (p == endp || *endp != '\0') {
7513 *reason = "invalid device";
7514 return -EINVAL;
7515 }
7516 }
7517
7518 force_ent->port = simple_strtoul(id, &endp, 10);
7519 if (p == endp || *endp != '\0') {
7520 *reason = "invalid port/link";
7521 return -EINVAL;
7522 }
7523
7524 parse_val:
7525 /* parse val, allow shortcuts so that both 1.5 and 1.5Gbps work */
7526 for (i = 0; i < ARRAY_SIZE(force_tbl); i++) {
7527 const struct ata_force_param *fp = &force_tbl[i];
7528
7529 if (strncasecmp(val, fp->name, strlen(val)))
7530 continue;
7531
7532 nr_matches++;
7533 match_fp = fp;
7534
7535 if (strcasecmp(val, fp->name) == 0) {
7536 nr_matches = 1;
7537 break;
7538 }
7539 }
7540
7541 if (!nr_matches) {
7542 *reason = "unknown value";
7543 return -EINVAL;
7544 }
7545 if (nr_matches > 1) {
7546 *reason = "ambigious value";
7547 return -EINVAL;
7548 }
7549
7550 force_ent->param = *match_fp;
7551
7552 return 0;
7553}
7554
7555static void __init ata_parse_force_param(void)
7556{
7557 int idx = 0, size = 1;
7558 int last_port = -1, last_device = -1;
7559 char *p, *cur, *next;
7560
7561 /* calculate maximum number of params and allocate force_tbl */
7562 for (p = ata_force_param_buf; *p; p++)
7563 if (*p == ',')
7564 size++;
7565
7566 ata_force_tbl = kzalloc(sizeof(ata_force_tbl[0]) * size, GFP_KERNEL);
7567 if (!ata_force_tbl) {
7568 printk(KERN_WARNING "ata: failed to extend force table, "
7569 "libata.force ignored\n");
7570 return;
7571 }
7572
7573 /* parse and populate the table */
7574 for (cur = ata_force_param_buf; *cur != '\0'; cur = next) {
7575 const char *reason = "";
7576 struct ata_force_ent te = { .port = -1, .device = -1 };
7577
7578 next = cur;
7579 if (ata_parse_force_one(&next, &te, &reason)) {
7580 printk(KERN_WARNING "ata: failed to parse force "
7581 "parameter \"%s\" (%s)\n",
7582 cur, reason);
7583 continue;
7584 }
7585
7586 if (te.port == -1) {
7587 te.port = last_port;
7588 te.device = last_device;
7589 }
7590
7591 ata_force_tbl[idx++] = te;
7592
7593 last_port = te.port;
7594 last_device = te.device;
7595 }
7596
7597 ata_force_tbl_size = idx;
7598}
7405 7599
7406static int __init ata_init(void) 7600static int __init ata_init(void)
7407{ 7601{
7408 ata_probe_timeout *= HZ; 7602 ata_probe_timeout *= HZ;
7603
7604 ata_parse_force_param();
7605
7409 ata_wq = create_workqueue("ata"); 7606 ata_wq = create_workqueue("ata");
7410 if (!ata_wq) 7607 if (!ata_wq)
7411 return -ENOMEM; 7608 return -ENOMEM;
@@ -7422,6 +7619,7 @@ static int __init ata_init(void)
7422 7619
7423static void __exit ata_exit(void) 7620static void __exit ata_exit(void)
7424{ 7621{
7622 kfree(ata_force_tbl);
7425 destroy_workqueue(ata_wq); 7623 destroy_workqueue(ata_wq);
7426 destroy_workqueue(ata_aux_wq); 7624 destroy_workqueue(ata_aux_wq);
7427} 7625}
diff --git a/drivers/ata/libata-eh.c b/drivers/ata/libata-eh.c
index 4e31071acc02..698ce2cea52c 100644
--- a/drivers/ata/libata-eh.c
+++ b/drivers/ata/libata-eh.c
@@ -2393,9 +2393,11 @@ static int ata_eh_revalidate_and_attach(struct ata_link *link,
2393 } 2393 }
2394 2394
2395 /* PDIAG- should have been released, ask cable type if post-reset */ 2395 /* PDIAG- should have been released, ask cable type if post-reset */
2396 if (ata_is_host_link(link) && ap->ops->cable_detect && 2396 if ((ehc->i.flags & ATA_EHI_DID_RESET) && ata_is_host_link(link)) {
2397 (ehc->i.flags & ATA_EHI_DID_RESET)) 2397 if (ap->ops->cable_detect)
2398 ap->cbl = ap->ops->cable_detect(ap); 2398 ap->cbl = ap->ops->cable_detect(ap);
2399 ata_force_cbl(ap);
2400 }
2399 2401
2400 /* Configure new devices forward such that user doesn't see 2402 /* Configure new devices forward such that user doesn't see
2401 * device detection messages backwards. 2403 * device detection messages backwards.
diff --git a/drivers/ata/libata-pmp.c b/drivers/ata/libata-pmp.c
index caef2bbd4a8a..d91f5090ba9d 100644
--- a/drivers/ata/libata-pmp.c
+++ b/drivers/ata/libata-pmp.c
@@ -35,7 +35,7 @@ static unsigned int sata_pmp_read(struct ata_link *link, int reg, u32 *r_val)
35 ata_tf_init(pmp_dev, &tf); 35 ata_tf_init(pmp_dev, &tf);
36 tf.command = ATA_CMD_PMP_READ; 36 tf.command = ATA_CMD_PMP_READ;
37 tf.protocol = ATA_PROT_NODATA; 37 tf.protocol = ATA_PROT_NODATA;
38 tf.flags |= ATA_TFLAG_ISADDR | ATA_TFLAG_DEVICE; 38 tf.flags |= ATA_TFLAG_ISADDR | ATA_TFLAG_DEVICE | ATA_TFLAG_LBA48;
39 tf.feature = reg; 39 tf.feature = reg;
40 tf.device = link->pmp; 40 tf.device = link->pmp;
41 41
@@ -71,7 +71,7 @@ static unsigned int sata_pmp_write(struct ata_link *link, int reg, u32 val)
71 ata_tf_init(pmp_dev, &tf); 71 ata_tf_init(pmp_dev, &tf);
72 tf.command = ATA_CMD_PMP_WRITE; 72 tf.command = ATA_CMD_PMP_WRITE;
73 tf.protocol = ATA_PROT_NODATA; 73 tf.protocol = ATA_PROT_NODATA;
74 tf.flags |= ATA_TFLAG_ISADDR | ATA_TFLAG_DEVICE; 74 tf.flags |= ATA_TFLAG_ISADDR | ATA_TFLAG_DEVICE | ATA_TFLAG_LBA48;
75 tf.feature = reg; 75 tf.feature = reg;
76 tf.device = link->pmp; 76 tf.device = link->pmp;
77 tf.nsect = val & 0xff; 77 tf.nsect = val & 0xff;
diff --git a/drivers/ata/libata-scsi.c b/drivers/ata/libata-scsi.c
index 1cea18f62abc..0562b0a49f3b 100644
--- a/drivers/ata/libata-scsi.c
+++ b/drivers/ata/libata-scsi.c
@@ -826,30 +826,61 @@ static void ata_scsi_sdev_config(struct scsi_device *sdev)
826 sdev->max_device_blocked = 1; 826 sdev->max_device_blocked = 1;
827} 827}
828 828
829static void ata_scsi_dev_config(struct scsi_device *sdev, 829/**
830 struct ata_device *dev) 830 * atapi_drain_needed - Check whether data transfer may overflow
831 * @rq: request to be checked
832 *
833 * ATAPI commands which transfer variable length data to host
834 * might overflow due to application error or hardare bug. This
835 * function checks whether overflow should be drained and ignored
836 * for @request.
837 *
838 * LOCKING:
839 * None.
840 *
841 * RETURNS:
842 * 1 if ; otherwise, 0.
843 */
844static int atapi_drain_needed(struct request *rq)
845{
846 if (likely(!blk_pc_request(rq)))
847 return 0;
848
849 if (!rq->data_len || (rq->cmd_flags & REQ_RW))
850 return 0;
851
852 return atapi_cmd_type(rq->cmd[0]) == ATAPI_MISC;
853}
854
855static int ata_scsi_dev_config(struct scsi_device *sdev,
856 struct ata_device *dev)
831{ 857{
832 /* configure max sectors */ 858 /* configure max sectors */
833 blk_queue_max_sectors(sdev->request_queue, dev->max_sectors); 859 blk_queue_max_sectors(sdev->request_queue, dev->max_sectors);
834 860
835 /* SATA DMA transfers must be multiples of 4 byte, so
836 * we need to pad ATAPI transfers using an extra sg.
837 * Decrement max hw segments accordingly.
838 */
839 if (dev->class == ATA_DEV_ATAPI) { 861 if (dev->class == ATA_DEV_ATAPI) {
840 struct request_queue *q = sdev->request_queue; 862 struct request_queue *q = sdev->request_queue;
841 blk_queue_max_hw_segments(q, q->max_hw_segments - 1); 863 void *buf;
842 864
843 /* set the min alignment */ 865 /* set the min alignment */
844 blk_queue_update_dma_alignment(sdev->request_queue, 866 blk_queue_update_dma_alignment(sdev->request_queue,
845 ATA_DMA_PAD_SZ - 1); 867 ATA_DMA_PAD_SZ - 1);
846 } else 868
869 /* configure draining */
870 buf = kmalloc(ATAPI_MAX_DRAIN, q->bounce_gfp | GFP_KERNEL);
871 if (!buf) {
872 ata_dev_printk(dev, KERN_ERR,
873 "drain buffer allocation failed\n");
874 return -ENOMEM;
875 }
876
877 blk_queue_dma_drain(q, atapi_drain_needed, buf, ATAPI_MAX_DRAIN);
878 } else {
847 /* ATA devices must be sector aligned */ 879 /* ATA devices must be sector aligned */
848 blk_queue_update_dma_alignment(sdev->request_queue, 880 blk_queue_update_dma_alignment(sdev->request_queue,
849 ATA_SECT_SIZE - 1); 881 ATA_SECT_SIZE - 1);
850
851 if (dev->class == ATA_DEV_ATA)
852 sdev->manage_start_stop = 1; 882 sdev->manage_start_stop = 1;
883 }
853 884
854 if (dev->flags & ATA_DFLAG_AN) 885 if (dev->flags & ATA_DFLAG_AN)
855 set_bit(SDEV_EVT_MEDIA_CHANGE, sdev->supported_events); 886 set_bit(SDEV_EVT_MEDIA_CHANGE, sdev->supported_events);
@@ -861,6 +892,8 @@ static void ata_scsi_dev_config(struct scsi_device *sdev,
861 depth = min(ATA_MAX_QUEUE - 1, depth); 892 depth = min(ATA_MAX_QUEUE - 1, depth);
862 scsi_adjust_queue_depth(sdev, MSG_SIMPLE_TAG, depth); 893 scsi_adjust_queue_depth(sdev, MSG_SIMPLE_TAG, depth);
863 } 894 }
895
896 return 0;
864} 897}
865 898
866/** 899/**
@@ -879,13 +912,14 @@ int ata_scsi_slave_config(struct scsi_device *sdev)
879{ 912{
880 struct ata_port *ap = ata_shost_to_port(sdev->host); 913 struct ata_port *ap = ata_shost_to_port(sdev->host);
881 struct ata_device *dev = __ata_scsi_find_dev(ap, sdev); 914 struct ata_device *dev = __ata_scsi_find_dev(ap, sdev);
915 int rc = 0;
882 916
883 ata_scsi_sdev_config(sdev); 917 ata_scsi_sdev_config(sdev);
884 918
885 if (dev) 919 if (dev)
886 ata_scsi_dev_config(sdev, dev); 920 rc = ata_scsi_dev_config(sdev, dev);
887 921
888 return 0; 922 return rc;
889} 923}
890 924
891/** 925/**
@@ -905,6 +939,7 @@ int ata_scsi_slave_config(struct scsi_device *sdev)
905void ata_scsi_slave_destroy(struct scsi_device *sdev) 939void ata_scsi_slave_destroy(struct scsi_device *sdev)
906{ 940{
907 struct ata_port *ap = ata_shost_to_port(sdev->host); 941 struct ata_port *ap = ata_shost_to_port(sdev->host);
942 struct request_queue *q = sdev->request_queue;
908 unsigned long flags; 943 unsigned long flags;
909 struct ata_device *dev; 944 struct ata_device *dev;
910 945
@@ -920,6 +955,10 @@ void ata_scsi_slave_destroy(struct scsi_device *sdev)
920 ata_port_schedule_eh(ap); 955 ata_port_schedule_eh(ap);
921 } 956 }
922 spin_unlock_irqrestore(ap->lock, flags); 957 spin_unlock_irqrestore(ap->lock, flags);
958
959 kfree(q->dma_drain_buffer);
960 q->dma_drain_buffer = NULL;
961 q->dma_drain_size = 0;
923} 962}
924 963
925/** 964/**
@@ -2500,7 +2539,7 @@ static unsigned int atapi_xlat(struct ata_queued_cmd *qc)
2500 * want to set it properly, and for DMA where it is 2539 * want to set it properly, and for DMA where it is
2501 * effectively meaningless. 2540 * effectively meaningless.
2502 */ 2541 */
2503 nbytes = min(qc->nbytes, (unsigned int)63 * 1024); 2542 nbytes = min(scmd->request->raw_data_len, (unsigned int)63 * 1024);
2504 2543
2505 /* Most ATAPI devices which honor transfer chunk size don't 2544 /* Most ATAPI devices which honor transfer chunk size don't
2506 * behave according to the spec when odd chunk size which 2545 * behave according to the spec when odd chunk size which
@@ -2543,7 +2582,8 @@ static unsigned int atapi_xlat(struct ata_queued_cmd *qc)
2543 qc->tf.protocol = ATAPI_PROT_DMA; 2582 qc->tf.protocol = ATAPI_PROT_DMA;
2544 qc->tf.feature |= ATAPI_PKT_DMA; 2583 qc->tf.feature |= ATAPI_PKT_DMA;
2545 2584
2546 if (atapi_dmadir && (scmd->sc_data_direction != DMA_TO_DEVICE)) 2585 if ((dev->flags & ATA_DFLAG_DMADIR) &&
2586 (scmd->sc_data_direction != DMA_TO_DEVICE))
2547 /* some SATA bridges need us to indicate data xfer direction */ 2587 /* some SATA bridges need us to indicate data xfer direction */
2548 qc->tf.feature |= ATAPI_DMADIR; 2588 qc->tf.feature |= ATAPI_DMADIR;
2549 } 2589 }
@@ -3555,7 +3595,7 @@ EXPORT_SYMBOL_GPL(ata_sas_port_alloc);
3555 * @ap: Port to initialize 3595 * @ap: Port to initialize
3556 * 3596 *
3557 * Called just after data structures for each port are 3597 * Called just after data structures for each port are
3558 * initialized. Allocates DMA pad. 3598 * initialized.
3559 * 3599 *
3560 * May be used as the port_start() entry in ata_port_operations. 3600 * May be used as the port_start() entry in ata_port_operations.
3561 * 3601 *
@@ -3564,7 +3604,7 @@ EXPORT_SYMBOL_GPL(ata_sas_port_alloc);
3564 */ 3604 */
3565int ata_sas_port_start(struct ata_port *ap) 3605int ata_sas_port_start(struct ata_port *ap)
3566{ 3606{
3567 return ata_pad_alloc(ap, ap->dev); 3607 return 0;
3568} 3608}
3569EXPORT_SYMBOL_GPL(ata_sas_port_start); 3609EXPORT_SYMBOL_GPL(ata_sas_port_start);
3570 3610
@@ -3572,8 +3612,6 @@ EXPORT_SYMBOL_GPL(ata_sas_port_start);
3572 * ata_port_stop - Undo ata_sas_port_start() 3612 * ata_port_stop - Undo ata_sas_port_start()
3573 * @ap: Port to shut down 3613 * @ap: Port to shut down
3574 * 3614 *
3575 * Frees the DMA pad.
3576 *
3577 * May be used as the port_stop() entry in ata_port_operations. 3615 * May be used as the port_stop() entry in ata_port_operations.
3578 * 3616 *
3579 * LOCKING: 3617 * LOCKING:
@@ -3582,7 +3620,6 @@ EXPORT_SYMBOL_GPL(ata_sas_port_start);
3582 3620
3583void ata_sas_port_stop(struct ata_port *ap) 3621void ata_sas_port_stop(struct ata_port *ap)
3584{ 3622{
3585 ata_pad_free(ap, ap->dev);
3586} 3623}
3587EXPORT_SYMBOL_GPL(ata_sas_port_stop); 3624EXPORT_SYMBOL_GPL(ata_sas_port_stop);
3588 3625
diff --git a/drivers/ata/libata.h b/drivers/ata/libata.h
index 409ffb9af163..6036dedfe377 100644
--- a/drivers/ata/libata.h
+++ b/drivers/ata/libata.h
@@ -61,6 +61,7 @@ extern int atapi_passthru16;
61extern int libata_fua; 61extern int libata_fua;
62extern int libata_noacpi; 62extern int libata_noacpi;
63extern int libata_allow_tpm; 63extern int libata_allow_tpm;
64extern void ata_force_cbl(struct ata_port *ap);
64extern struct ata_queued_cmd *ata_qc_new_init(struct ata_device *dev); 65extern struct ata_queued_cmd *ata_qc_new_init(struct ata_device *dev);
65extern int ata_build_rw_tf(struct ata_taskfile *tf, struct ata_device *dev, 66extern int ata_build_rw_tf(struct ata_taskfile *tf, struct ata_device *dev,
66 u64 block, u32 n_block, unsigned int tf_flags, 67 u64 block, u32 n_block, unsigned int tf_flags,
diff --git a/drivers/ata/pata_atiixp.c b/drivers/ata/pata_atiixp.c
index 9623f5295530..408bdc1a9776 100644
--- a/drivers/ata/pata_atiixp.c
+++ b/drivers/ata/pata_atiixp.c
@@ -227,7 +227,7 @@ static struct scsi_host_template atiixp_sht = {
227 .queuecommand = ata_scsi_queuecmd, 227 .queuecommand = ata_scsi_queuecmd,
228 .can_queue = ATA_DEF_QUEUE, 228 .can_queue = ATA_DEF_QUEUE,
229 .this_id = ATA_SHT_THIS_ID, 229 .this_id = ATA_SHT_THIS_ID,
230 .sg_tablesize = LIBATA_MAX_PRD, 230 .sg_tablesize = LIBATA_DUMB_MAX_PRD,
231 .cmd_per_lun = ATA_SHT_CMD_PER_LUN, 231 .cmd_per_lun = ATA_SHT_CMD_PER_LUN,
232 .emulated = ATA_SHT_EMULATED, 232 .emulated = ATA_SHT_EMULATED,
233 .use_clustering = ATA_SHT_USE_CLUSTERING, 233 .use_clustering = ATA_SHT_USE_CLUSTERING,
@@ -259,7 +259,7 @@ static struct ata_port_operations atiixp_port_ops = {
259 .bmdma_stop = atiixp_bmdma_stop, 259 .bmdma_stop = atiixp_bmdma_stop,
260 .bmdma_status = ata_bmdma_status, 260 .bmdma_status = ata_bmdma_status,
261 261
262 .qc_prep = ata_qc_prep, 262 .qc_prep = ata_dumb_qc_prep,
263 .qc_issue = ata_qc_issue_prot, 263 .qc_issue = ata_qc_issue_prot,
264 264
265 .data_xfer = ata_data_xfer, 265 .data_xfer = ata_data_xfer,
diff --git a/drivers/ata/pata_icside.c b/drivers/ata/pata_icside.c
index 5b8586dac63b..f97068be2d79 100644
--- a/drivers/ata/pata_icside.c
+++ b/drivers/ata/pata_icside.c
@@ -304,12 +304,6 @@ static int icside_dma_init(struct pata_icside_info *info)
304} 304}
305 305
306 306
307static int pata_icside_port_start(struct ata_port *ap)
308{
309 /* No PRD to alloc */
310 return ata_pad_alloc(ap, ap->dev);
311}
312
313static struct scsi_host_template pata_icside_sht = { 307static struct scsi_host_template pata_icside_sht = {
314 .module = THIS_MODULE, 308 .module = THIS_MODULE,
315 .name = DRV_NAME, 309 .name = DRV_NAME,
@@ -389,8 +383,6 @@ static struct ata_port_operations pata_icside_port_ops = {
389 .irq_clear = ata_dummy_noret, 383 .irq_clear = ata_dummy_noret,
390 .irq_on = ata_irq_on, 384 .irq_on = ata_irq_on,
391 385
392 .port_start = pata_icside_port_start,
393
394 .bmdma_stop = pata_icside_bmdma_stop, 386 .bmdma_stop = pata_icside_bmdma_stop,
395 .bmdma_status = pata_icside_bmdma_status, 387 .bmdma_status = pata_icside_bmdma_status,
396}; 388};
diff --git a/drivers/ata/pata_legacy.c b/drivers/ata/pata_legacy.c
index d2177f75078a..50fe08ebe23c 100644
--- a/drivers/ata/pata_legacy.c
+++ b/drivers/ata/pata_legacy.c
@@ -774,14 +774,14 @@ static struct ata_port_operations opti82c46x_port_ops = {
774static void qdi6500_set_piomode(struct ata_port *ap, struct ata_device *adev) 774static void qdi6500_set_piomode(struct ata_port *ap, struct ata_device *adev)
775{ 775{
776 struct ata_timing t; 776 struct ata_timing t;
777 struct legacy_data *qdi = ap->host->private_data; 777 struct legacy_data *ld_qdi = ap->host->private_data;
778 int active, recovery; 778 int active, recovery;
779 u8 timing; 779 u8 timing;
780 780
781 /* Get the timing data in cycles */ 781 /* Get the timing data in cycles */
782 ata_timing_compute(adev, adev->pio_mode, &t, 30303, 1000); 782 ata_timing_compute(adev, adev->pio_mode, &t, 30303, 1000);
783 783
784 if (qdi->fast) { 784 if (ld_qdi->fast) {
785 active = 8 - FIT(t.active, 1, 8); 785 active = 8 - FIT(t.active, 1, 8);
786 recovery = 18 - FIT(t.recover, 3, 18); 786 recovery = 18 - FIT(t.recover, 3, 18);
787 } else { 787 } else {
@@ -790,9 +790,9 @@ static void qdi6500_set_piomode(struct ata_port *ap, struct ata_device *adev)
790 } 790 }
791 timing = (recovery << 4) | active | 0x08; 791 timing = (recovery << 4) | active | 0x08;
792 792
793 qdi->clock[adev->devno] = timing; 793 ld_qdi->clock[adev->devno] = timing;
794 794
795 outb(timing, qdi->timing); 795 outb(timing, ld_qdi->timing);
796} 796}
797 797
798/** 798/**
@@ -808,14 +808,14 @@ static void qdi6500_set_piomode(struct ata_port *ap, struct ata_device *adev)
808static void qdi6580dp_set_piomode(struct ata_port *ap, struct ata_device *adev) 808static void qdi6580dp_set_piomode(struct ata_port *ap, struct ata_device *adev)
809{ 809{
810 struct ata_timing t; 810 struct ata_timing t;
811 struct legacy_data *qdi = ap->host->private_data; 811 struct legacy_data *ld_qdi = ap->host->private_data;
812 int active, recovery; 812 int active, recovery;
813 u8 timing; 813 u8 timing;
814 814
815 /* Get the timing data in cycles */ 815 /* Get the timing data in cycles */
816 ata_timing_compute(adev, adev->pio_mode, &t, 30303, 1000); 816 ata_timing_compute(adev, adev->pio_mode, &t, 30303, 1000);
817 817
818 if (qdi->fast) { 818 if (ld_qdi->fast) {
819 active = 8 - FIT(t.active, 1, 8); 819 active = 8 - FIT(t.active, 1, 8);
820 recovery = 18 - FIT(t.recover, 3, 18); 820 recovery = 18 - FIT(t.recover, 3, 18);
821 } else { 821 } else {
@@ -824,12 +824,12 @@ static void qdi6580dp_set_piomode(struct ata_port *ap, struct ata_device *adev)
824 } 824 }
825 timing = (recovery << 4) | active | 0x08; 825 timing = (recovery << 4) | active | 0x08;
826 826
827 qdi->clock[adev->devno] = timing; 827 ld_qdi->clock[adev->devno] = timing;
828 828
829 outb(timing, qdi->timing + 2 * ap->port_no); 829 outb(timing, ld_qdi->timing + 2 * ap->port_no);
830 /* Clear the FIFO */ 830 /* Clear the FIFO */
831 if (adev->class != ATA_DEV_ATA) 831 if (adev->class != ATA_DEV_ATA)
832 outb(0x5F, qdi->timing + 3); 832 outb(0x5F, ld_qdi->timing + 3);
833} 833}
834 834
835/** 835/**
@@ -845,14 +845,14 @@ static void qdi6580dp_set_piomode(struct ata_port *ap, struct ata_device *adev)
845static void qdi6580_set_piomode(struct ata_port *ap, struct ata_device *adev) 845static void qdi6580_set_piomode(struct ata_port *ap, struct ata_device *adev)
846{ 846{
847 struct ata_timing t; 847 struct ata_timing t;
848 struct legacy_data *qdi = ap->host->private_data; 848 struct legacy_data *ld_qdi = ap->host->private_data;
849 int active, recovery; 849 int active, recovery;
850 u8 timing; 850 u8 timing;
851 851
852 /* Get the timing data in cycles */ 852 /* Get the timing data in cycles */
853 ata_timing_compute(adev, adev->pio_mode, &t, 30303, 1000); 853 ata_timing_compute(adev, adev->pio_mode, &t, 30303, 1000);
854 854
855 if (qdi->fast) { 855 if (ld_qdi->fast) {
856 active = 8 - FIT(t.active, 1, 8); 856 active = 8 - FIT(t.active, 1, 8);
857 recovery = 18 - FIT(t.recover, 3, 18); 857 recovery = 18 - FIT(t.recover, 3, 18);
858 } else { 858 } else {
@@ -860,11 +860,11 @@ static void qdi6580_set_piomode(struct ata_port *ap, struct ata_device *adev)
860 recovery = 15 - FIT(t.recover, 0, 15); 860 recovery = 15 - FIT(t.recover, 0, 15);
861 } 861 }
862 timing = (recovery << 4) | active | 0x08; 862 timing = (recovery << 4) | active | 0x08;
863 qdi->clock[adev->devno] = timing; 863 ld_qdi->clock[adev->devno] = timing;
864 outb(timing, qdi->timing + 2 * adev->devno); 864 outb(timing, ld_qdi->timing + 2 * adev->devno);
865 /* Clear the FIFO */ 865 /* Clear the FIFO */
866 if (adev->class != ATA_DEV_ATA) 866 if (adev->class != ATA_DEV_ATA)
867 outb(0x5F, qdi->timing + 3); 867 outb(0x5F, ld_qdi->timing + 3);
868} 868}
869 869
870/** 870/**
@@ -879,12 +879,12 @@ static unsigned int qdi_qc_issue_prot(struct ata_queued_cmd *qc)
879{ 879{
880 struct ata_port *ap = qc->ap; 880 struct ata_port *ap = qc->ap;
881 struct ata_device *adev = qc->dev; 881 struct ata_device *adev = qc->dev;
882 struct legacy_data *qdi = ap->host->private_data; 882 struct legacy_data *ld_qdi = ap->host->private_data;
883 883
884 if (qdi->clock[adev->devno] != qdi->last) { 884 if (ld_qdi->clock[adev->devno] != ld_qdi->last) {
885 if (adev->pio_mode) { 885 if (adev->pio_mode) {
886 qdi->last = qdi->clock[adev->devno]; 886 ld_qdi->last = ld_qdi->clock[adev->devno];
887 outb(qdi->clock[adev->devno], qdi->timing + 887 outb(ld_qdi->clock[adev->devno], ld_qdi->timing +
888 2 * ap->port_no); 888 2 * ap->port_no);
889 } 889 }
890 } 890 }
@@ -1037,12 +1037,12 @@ static u8 winbond_readcfg(unsigned long port, u8 reg)
1037static void winbond_set_piomode(struct ata_port *ap, struct ata_device *adev) 1037static void winbond_set_piomode(struct ata_port *ap, struct ata_device *adev)
1038{ 1038{
1039 struct ata_timing t; 1039 struct ata_timing t;
1040 struct legacy_data *winbond = ap->host->private_data; 1040 struct legacy_data *ld_winbond = ap->host->private_data;
1041 int active, recovery; 1041 int active, recovery;
1042 u8 reg; 1042 u8 reg;
1043 int timing = 0x88 + (ap->port_no * 4) + (adev->devno * 2); 1043 int timing = 0x88 + (ap->port_no * 4) + (adev->devno * 2);
1044 1044
1045 reg = winbond_readcfg(winbond->timing, 0x81); 1045 reg = winbond_readcfg(ld_winbond->timing, 0x81);
1046 1046
1047 /* Get the timing data in cycles */ 1047 /* Get the timing data in cycles */
1048 if (reg & 0x40) /* Fast VLB bus, assume 50MHz */ 1048 if (reg & 0x40) /* Fast VLB bus, assume 50MHz */
@@ -1053,7 +1053,7 @@ static void winbond_set_piomode(struct ata_port *ap, struct ata_device *adev)
1053 active = (FIT(t.active, 3, 17) - 1) & 0x0F; 1053 active = (FIT(t.active, 3, 17) - 1) & 0x0F;
1054 recovery = (FIT(t.recover, 1, 15) + 1) & 0x0F; 1054 recovery = (FIT(t.recover, 1, 15) + 1) & 0x0F;
1055 timing = (active << 4) | recovery; 1055 timing = (active << 4) | recovery;
1056 winbond_writecfg(winbond->timing, timing, reg); 1056 winbond_writecfg(ld_winbond->timing, timing, reg);
1057 1057
1058 /* Load the setup timing */ 1058 /* Load the setup timing */
1059 1059
@@ -1063,7 +1063,7 @@ static void winbond_set_piomode(struct ata_port *ap, struct ata_device *adev)
1063 if (!ata_pio_need_iordy(adev)) 1063 if (!ata_pio_need_iordy(adev))
1064 reg |= 0x02; /* IORDY off */ 1064 reg |= 0x02; /* IORDY off */
1065 reg |= (FIT(t.setup, 0, 3) << 6); 1065 reg |= (FIT(t.setup, 0, 3) << 6);
1066 winbond_writecfg(winbond->timing, timing + 1, reg); 1066 winbond_writecfg(ld_winbond->timing, timing + 1, reg);
1067} 1067}
1068 1068
1069static int winbond_port(struct platform_device *dev, 1069static int winbond_port(struct platform_device *dev,
diff --git a/drivers/ata/sata_fsl.c b/drivers/ata/sata_fsl.c
index efcb66b6ccef..07791a7a48a5 100644
--- a/drivers/ata/sata_fsl.c
+++ b/drivers/ata/sata_fsl.c
@@ -335,7 +335,7 @@ static unsigned int sata_fsl_fill_sg(struct ata_queued_cmd *qc, void *cmd_desc,
335 dma_addr_t indirect_ext_segment_paddr; 335 dma_addr_t indirect_ext_segment_paddr;
336 unsigned int si; 336 unsigned int si;
337 337
338 VPRINTK("SATA FSL : cd = 0x%x, prd = 0x%x\n", cmd_desc, prd); 338 VPRINTK("SATA FSL : cd = 0x%p, prd = 0x%p\n", cmd_desc, prd);
339 339
340 indirect_ext_segment_paddr = cmd_desc_paddr + 340 indirect_ext_segment_paddr = cmd_desc_paddr +
341 SATA_FSL_CMD_DESC_OFFSET_TO_PRDT + SATA_FSL_MAX_PRD_DIRECT * 16; 341 SATA_FSL_CMD_DESC_OFFSET_TO_PRDT + SATA_FSL_MAX_PRD_DIRECT * 16;
@@ -459,7 +459,8 @@ static unsigned int sata_fsl_qc_issue(struct ata_queued_cmd *qc)
459 VPRINTK("CE=0x%x, DE=0x%x, CC=0x%x, CmdStat = 0x%x\n", 459 VPRINTK("CE=0x%x, DE=0x%x, CC=0x%x, CmdStat = 0x%x\n",
460 ioread32(CE + hcr_base), 460 ioread32(CE + hcr_base),
461 ioread32(DE + hcr_base), 461 ioread32(DE + hcr_base),
462 ioread32(CC + hcr_base), ioread32(COMMANDSTAT + csr_base)); 462 ioread32(CC + hcr_base),
463 ioread32(COMMANDSTAT + host_priv->csr_base));
463 464
464 return 0; 465 return 0;
465} 466}
@@ -522,7 +523,8 @@ static void sata_fsl_freeze(struct ata_port *ap)
522 ioread32(CQ + hcr_base), 523 ioread32(CQ + hcr_base),
523 ioread32(CA + hcr_base), 524 ioread32(CA + hcr_base),
524 ioread32(CE + hcr_base), ioread32(DE + hcr_base)); 525 ioread32(CE + hcr_base), ioread32(DE + hcr_base));
525 VPRINTK("CmdStat = 0x%x\n", ioread32(csr_base + COMMANDSTAT)); 526 VPRINTK("CmdStat = 0x%x\n",
527 ioread32(host_priv->csr_base + COMMANDSTAT));
526 528
527 /* disable interrupts on the controller/port */ 529 /* disable interrupts on the controller/port */
528 temp = ioread32(hcr_base + HCONTROL); 530 temp = ioread32(hcr_base + HCONTROL);
@@ -601,21 +603,9 @@ static int sata_fsl_port_start(struct ata_port *ap)
601 if (!pp) 603 if (!pp)
602 return -ENOMEM; 604 return -ENOMEM;
603 605
604 /*
605 * allocate per command dma alignment pad buffer, which is used
606 * internally by libATA to ensure that all transfers ending on
607 * unaligned boundaries are padded, to align on Dword boundaries
608 */
609 retval = ata_pad_alloc(ap, dev);
610 if (retval) {
611 kfree(pp);
612 return retval;
613 }
614
615 mem = dma_alloc_coherent(dev, SATA_FSL_PORT_PRIV_DMA_SZ, &mem_dma, 606 mem = dma_alloc_coherent(dev, SATA_FSL_PORT_PRIV_DMA_SZ, &mem_dma,
616 GFP_KERNEL); 607 GFP_KERNEL);
617 if (!mem) { 608 if (!mem) {
618 ata_pad_free(ap, dev);
619 kfree(pp); 609 kfree(pp);
620 return -ENOMEM; 610 return -ENOMEM;
621 } 611 }
@@ -694,7 +684,6 @@ static void sata_fsl_port_stop(struct ata_port *ap)
694 dma_free_coherent(dev, SATA_FSL_PORT_PRIV_DMA_SZ, 684 dma_free_coherent(dev, SATA_FSL_PORT_PRIV_DMA_SZ,
695 pp->cmdslot, pp->cmdslot_paddr); 685 pp->cmdslot, pp->cmdslot_paddr);
696 686
697 ata_pad_free(ap, dev);
698 kfree(pp); 687 kfree(pp);
699} 688}
700 689
diff --git a/drivers/ata/sata_mv.c b/drivers/ata/sata_mv.c
index 2ecd44db4142..6ebebde8454a 100644
--- a/drivers/ata/sata_mv.c
+++ b/drivers/ata/sata_mv.c
@@ -870,7 +870,7 @@ static void mv_start_dma(struct ata_port *ap, void __iomem *port_mmio,
870 struct mv_host_priv *hpriv = ap->host->private_data; 870 struct mv_host_priv *hpriv = ap->host->private_data;
871 int hard_port = mv_hardport_from_port(ap->port_no); 871 int hard_port = mv_hardport_from_port(ap->port_no);
872 void __iomem *hc_mmio = mv_hc_base_from_port( 872 void __iomem *hc_mmio = mv_hc_base_from_port(
873 ap->host->iomap[MV_PRIMARY_BAR], hard_port); 873 mv_host_base(ap->host), hard_port);
874 u32 hc_irq_cause, ipending; 874 u32 hc_irq_cause, ipending;
875 875
876 /* clear EDMA event indicators, if any */ 876 /* clear EDMA event indicators, if any */
@@ -1158,17 +1158,13 @@ static int mv_port_start(struct ata_port *ap)
1158 struct mv_port_priv *pp; 1158 struct mv_port_priv *pp;
1159 void __iomem *port_mmio = mv_ap_base(ap); 1159 void __iomem *port_mmio = mv_ap_base(ap);
1160 unsigned long flags; 1160 unsigned long flags;
1161 int tag, rc; 1161 int tag;
1162 1162
1163 pp = devm_kzalloc(dev, sizeof(*pp), GFP_KERNEL); 1163 pp = devm_kzalloc(dev, sizeof(*pp), GFP_KERNEL);
1164 if (!pp) 1164 if (!pp)
1165 return -ENOMEM; 1165 return -ENOMEM;
1166 ap->private_data = pp; 1166 ap->private_data = pp;
1167 1167
1168 rc = ata_pad_alloc(ap, dev);
1169 if (rc)
1170 return rc;
1171
1172 pp->crqb = dma_pool_alloc(hpriv->crqb_pool, GFP_KERNEL, &pp->crqb_dma); 1168 pp->crqb = dma_pool_alloc(hpriv->crqb_pool, GFP_KERNEL, &pp->crqb_dma);
1173 if (!pp->crqb) 1169 if (!pp->crqb)
1174 return -ENOMEM; 1170 return -ENOMEM;
@@ -2951,7 +2947,8 @@ static int mv_platform_probe(struct platform_device *pdev)
2951 hpriv->n_ports = n_ports; 2947 hpriv->n_ports = n_ports;
2952 2948
2953 host->iomap = NULL; 2949 host->iomap = NULL;
2954 hpriv->base = ioremap(res->start, res->end - res->start + 1); 2950 hpriv->base = devm_ioremap(&pdev->dev, res->start,
2951 res->end - res->start + 1);
2955 hpriv->base -= MV_SATAHC0_REG_BASE; 2952 hpriv->base -= MV_SATAHC0_REG_BASE;
2956 2953
2957 rc = mv_create_dma_pools(hpriv, &pdev->dev); 2954 rc = mv_create_dma_pools(hpriv, &pdev->dev);
@@ -2983,11 +2980,8 @@ static int __devexit mv_platform_remove(struct platform_device *pdev)
2983{ 2980{
2984 struct device *dev = &pdev->dev; 2981 struct device *dev = &pdev->dev;
2985 struct ata_host *host = dev_get_drvdata(dev); 2982 struct ata_host *host = dev_get_drvdata(dev);
2986 struct mv_host_priv *hpriv = host->private_data;
2987 void __iomem *base = hpriv->base;
2988 2983
2989 ata_host_detach(host); 2984 ata_host_detach(host);
2990 iounmap(base);
2991 return 0; 2985 return 0;
2992} 2986}
2993 2987
@@ -3198,6 +3192,7 @@ MODULE_DESCRIPTION("SCSI low-level driver for Marvell SATA controllers");
3198MODULE_LICENSE("GPL"); 3192MODULE_LICENSE("GPL");
3199MODULE_DEVICE_TABLE(pci, mv_pci_tbl); 3193MODULE_DEVICE_TABLE(pci, mv_pci_tbl);
3200MODULE_VERSION(DRV_VERSION); 3194MODULE_VERSION(DRV_VERSION);
3195MODULE_ALIAS("platform:sata_mv");
3201 3196
3202#ifdef CONFIG_PCI 3197#ifdef CONFIG_PCI
3203module_param(msi, int, 0444); 3198module_param(msi, int, 0444);
diff --git a/drivers/ata/sata_sil24.c b/drivers/ata/sata_sil24.c
index b4b1f91ea693..df7988df7908 100644
--- a/drivers/ata/sata_sil24.c
+++ b/drivers/ata/sata_sil24.c
@@ -1234,7 +1234,6 @@ static int sil24_port_start(struct ata_port *ap)
1234 union sil24_cmd_block *cb; 1234 union sil24_cmd_block *cb;
1235 size_t cb_size = sizeof(*cb) * SIL24_MAX_CMDS; 1235 size_t cb_size = sizeof(*cb) * SIL24_MAX_CMDS;
1236 dma_addr_t cb_dma; 1236 dma_addr_t cb_dma;
1237 int rc;
1238 1237
1239 pp = devm_kzalloc(dev, sizeof(*pp), GFP_KERNEL); 1238 pp = devm_kzalloc(dev, sizeof(*pp), GFP_KERNEL);
1240 if (!pp) 1239 if (!pp)
@@ -1247,10 +1246,6 @@ static int sil24_port_start(struct ata_port *ap)
1247 return -ENOMEM; 1246 return -ENOMEM;
1248 memset(cb, 0, cb_size); 1247 memset(cb, 0, cb_size);
1249 1248
1250 rc = ata_pad_alloc(ap, dev);
1251 if (rc)
1252 return rc;
1253
1254 pp->cmd_block = cb; 1249 pp->cmd_block = cb;
1255 pp->cmd_block_dma = cb_dma; 1250 pp->cmd_block_dma = cb_dma;
1256 1251
diff --git a/drivers/base/bus.c b/drivers/base/bus.c
index 055989e94799..2d207ad30336 100644
--- a/drivers/base/bus.c
+++ b/drivers/base/bus.c
@@ -658,9 +658,10 @@ int bus_add_driver(struct device_driver *drv)
658 pr_debug("bus: '%s': add driver %s\n", bus->name, drv->name); 658 pr_debug("bus: '%s': add driver %s\n", bus->name, drv->name);
659 659
660 priv = kzalloc(sizeof(*priv), GFP_KERNEL); 660 priv = kzalloc(sizeof(*priv), GFP_KERNEL);
661 if (!priv) 661 if (!priv) {
662 return -ENOMEM; 662 error = -ENOMEM;
663 663 goto out_put_bus;
664 }
664 klist_init(&priv->klist_devices, NULL, NULL); 665 klist_init(&priv->klist_devices, NULL, NULL);
665 priv->driver = drv; 666 priv->driver = drv;
666 drv->p = priv; 667 drv->p = priv;
@@ -668,7 +669,7 @@ int bus_add_driver(struct device_driver *drv)
668 error = kobject_init_and_add(&priv->kobj, &driver_ktype, NULL, 669 error = kobject_init_and_add(&priv->kobj, &driver_ktype, NULL,
669 "%s", drv->name); 670 "%s", drv->name);
670 if (error) 671 if (error)
671 goto out_put_bus; 672 goto out_unregister;
672 673
673 if (drv->bus->p->drivers_autoprobe) { 674 if (drv->bus->p->drivers_autoprobe) {
674 error = driver_attach(drv); 675 error = driver_attach(drv);
diff --git a/drivers/base/driver.c b/drivers/base/driver.c
index ba75184c653c..bf31a0170a48 100644
--- a/drivers/base/driver.c
+++ b/drivers/base/driver.c
@@ -120,6 +120,9 @@ EXPORT_SYMBOL_GPL(driver_remove_file);
120 120
121/** 121/**
122 * driver_add_kobj - add a kobject below the specified driver 122 * driver_add_kobj - add a kobject below the specified driver
123 * @drv: requesting device driver
124 * @kobj: kobject to add below this driver
125 * @fmt: format string that names the kobject
123 * 126 *
124 * You really don't want to do this, this is only here due to one looney 127 * You really don't want to do this, this is only here due to one looney
125 * iseries driver, go poke those developers if you are annoyed about 128 * iseries driver, go poke those developers if you are annoyed about
diff --git a/drivers/base/power/main.c b/drivers/base/power/main.c
index bdc03f7e8424..ee9d1c8db0d6 100644
--- a/drivers/base/power/main.c
+++ b/drivers/base/power/main.c
@@ -415,7 +415,7 @@ EXPORT_SYMBOL_GPL(device_power_down);
415 * @dev: Device. 415 * @dev: Device.
416 * @state: Power state device is entering. 416 * @state: Power state device is entering.
417 */ 417 */
418int suspend_device(struct device *dev, pm_message_t state) 418static int suspend_device(struct device *dev, pm_message_t state)
419{ 419{
420 int error = 0; 420 int error = 0;
421 421
@@ -479,7 +479,6 @@ static int dpm_suspend(pm_message_t state)
479 mutex_lock(&dpm_list_mtx); 479 mutex_lock(&dpm_list_mtx);
480 if (list_empty(&dev->power.entry)) 480 if (list_empty(&dev->power.entry))
481 list_add(&dev->power.entry, &dpm_locked); 481 list_add(&dev->power.entry, &dpm_locked);
482 mutex_unlock(&dpm_list_mtx);
483 break; 482 break;
484 } 483 }
485 mutex_lock(&dpm_list_mtx); 484 mutex_lock(&dpm_list_mtx);
@@ -523,6 +522,7 @@ static void lock_all_devices(void)
523 522
524/** 523/**
525 * device_suspend - Save state and stop all devices in system. 524 * device_suspend - Save state and stop all devices in system.
525 * @state: new power management state
526 * 526 *
527 * Prevent new devices from being registered, then lock all devices 527 * Prevent new devices from being registered, then lock all devices
528 * and suspend them. 528 * and suspend them.
diff --git a/drivers/block/nbd.c b/drivers/block/nbd.c
index 018753c59b8e..b53fdb0a282c 100644
--- a/drivers/block/nbd.c
+++ b/drivers/block/nbd.c
@@ -655,6 +655,7 @@ static int __init nbd_init(void)
655 655
656 for (i = 0; i < nbds_max; i++) { 656 for (i = 0; i < nbds_max; i++) {
657 struct gendisk *disk = alloc_disk(1); 657 struct gendisk *disk = alloc_disk(1);
658 elevator_t *old_e;
658 if (!disk) 659 if (!disk)
659 goto out; 660 goto out;
660 nbd_dev[i].disk = disk; 661 nbd_dev[i].disk = disk;
@@ -668,6 +669,11 @@ static int __init nbd_init(void)
668 put_disk(disk); 669 put_disk(disk);
669 goto out; 670 goto out;
670 } 671 }
672 old_e = disk->queue->elevator;
673 if (elevator_init(disk->queue, "deadline") == 0 ||
674 elevator_init(disk->queue, "noop") == 0) {
675 elevator_exit(old_e);
676 }
671 } 677 }
672 678
673 if (register_blkdev(NBD_MAJOR, "nbd")) { 679 if (register_blkdev(NBD_MAJOR, "nbd")) {
diff --git a/drivers/block/xen-blkfront.c b/drivers/block/xen-blkfront.c
index 8afce67c0aa5..9c6f3f99208d 100644
--- a/drivers/block/xen-blkfront.c
+++ b/drivers/block/xen-blkfront.c
@@ -37,6 +37,7 @@
37 37
38#include <linux/interrupt.h> 38#include <linux/interrupt.h>
39#include <linux/blkdev.h> 39#include <linux/blkdev.h>
40#include <linux/hdreg.h>
40#include <linux/module.h> 41#include <linux/module.h>
41 42
42#include <xen/xenbus.h> 43#include <xen/xenbus.h>
@@ -135,6 +136,22 @@ static void blkif_restart_queue_callback(void *arg)
135 schedule_work(&info->work); 136 schedule_work(&info->work);
136} 137}
137 138
139int blkif_getgeo(struct block_device *bd, struct hd_geometry *hg)
140{
141 /* We don't have real geometry info, but let's at least return
142 values consistent with the size of the device */
143 sector_t nsect = get_capacity(bd->bd_disk);
144 sector_t cylinders = nsect;
145
146 hg->heads = 0xff;
147 hg->sectors = 0x3f;
148 sector_div(cylinders, hg->heads * hg->sectors);
149 hg->cylinders = cylinders;
150 if ((sector_t)(hg->cylinders + 1) * hg->heads * hg->sectors < nsect)
151 hg->cylinders = 0xffff;
152 return 0;
153}
154
138/* 155/*
139 * blkif_queue_request 156 * blkif_queue_request
140 * 157 *
@@ -937,6 +954,7 @@ static struct block_device_operations xlvbd_block_fops =
937 .owner = THIS_MODULE, 954 .owner = THIS_MODULE,
938 .open = blkif_open, 955 .open = blkif_open,
939 .release = blkif_release, 956 .release = blkif_release,
957 .getgeo = blkif_getgeo,
940}; 958};
941 959
942 960
diff --git a/drivers/char/agp/amd-k7-agp.c b/drivers/char/agp/amd-k7-agp.c
index 87be46406daf..d28669992147 100644
--- a/drivers/char/agp/amd-k7-agp.c
+++ b/drivers/char/agp/amd-k7-agp.c
@@ -41,6 +41,7 @@ static int amd_create_page_map(struct amd_page_map *page_map)
41 if (page_map->real == NULL) 41 if (page_map->real == NULL)
42 return -ENOMEM; 42 return -ENOMEM;
43 43
44#ifndef CONFIG_X86
44 SetPageReserved(virt_to_page(page_map->real)); 45 SetPageReserved(virt_to_page(page_map->real));
45 global_cache_flush(); 46 global_cache_flush();
46 page_map->remapped = ioremap_nocache(virt_to_gart(page_map->real), 47 page_map->remapped = ioremap_nocache(virt_to_gart(page_map->real),
@@ -52,6 +53,10 @@ static int amd_create_page_map(struct amd_page_map *page_map)
52 return -ENOMEM; 53 return -ENOMEM;
53 } 54 }
54 global_cache_flush(); 55 global_cache_flush();
56#else
57 set_memory_uc((unsigned long)page_map->real, 1);
58 page_map->remapped = page_map->real;
59#endif
55 60
56 for (i = 0; i < PAGE_SIZE / sizeof(unsigned long); i++) { 61 for (i = 0; i < PAGE_SIZE / sizeof(unsigned long); i++) {
57 writel(agp_bridge->scratch_page, page_map->remapped+i); 62 writel(agp_bridge->scratch_page, page_map->remapped+i);
@@ -63,8 +68,12 @@ static int amd_create_page_map(struct amd_page_map *page_map)
63 68
64static void amd_free_page_map(struct amd_page_map *page_map) 69static void amd_free_page_map(struct amd_page_map *page_map)
65{ 70{
71#ifndef CONFIG_X86
66 iounmap(page_map->remapped); 72 iounmap(page_map->remapped);
67 ClearPageReserved(virt_to_page(page_map->real)); 73 ClearPageReserved(virt_to_page(page_map->real));
74#else
75 set_memory_wb((unsigned long)page_map->real, 1);
76#endif
68 free_page((unsigned long) page_map->real); 77 free_page((unsigned long) page_map->real);
69} 78}
70 79
diff --git a/drivers/char/agp/ati-agp.c b/drivers/char/agp/ati-agp.c
index 2d46b713c8f2..55c97f623242 100644
--- a/drivers/char/agp/ati-agp.c
+++ b/drivers/char/agp/ati-agp.c
@@ -60,18 +60,9 @@ static int ati_create_page_map(struct ati_page_map *page_map)
60 if (page_map->real == NULL) 60 if (page_map->real == NULL)
61 return -ENOMEM; 61 return -ENOMEM;
62 62
63 SetPageReserved(virt_to_page(page_map->real)); 63 set_memory_uc((unsigned long)page_map->real, 1);
64 err = map_page_into_agp(virt_to_page(page_map->real)); 64 err = map_page_into_agp(virt_to_page(page_map->real));
65 page_map->remapped = ioremap_nocache(virt_to_gart(page_map->real), 65 page_map->remapped = page_map->real;
66 PAGE_SIZE);
67 if (page_map->remapped == NULL || err) {
68 ClearPageReserved(virt_to_page(page_map->real));
69 free_page((unsigned long) page_map->real);
70 page_map->real = NULL;
71 return -ENOMEM;
72 }
73 /*CACHE_FLUSH();*/
74 global_cache_flush();
75 66
76 for (i = 0; i < PAGE_SIZE / sizeof(unsigned long); i++) { 67 for (i = 0; i < PAGE_SIZE / sizeof(unsigned long); i++) {
77 writel(agp_bridge->scratch_page, page_map->remapped+i); 68 writel(agp_bridge->scratch_page, page_map->remapped+i);
@@ -85,8 +76,7 @@ static int ati_create_page_map(struct ati_page_map *page_map)
85static void ati_free_page_map(struct ati_page_map *page_map) 76static void ati_free_page_map(struct ati_page_map *page_map)
86{ 77{
87 unmap_page_from_agp(virt_to_page(page_map->real)); 78 unmap_page_from_agp(virt_to_page(page_map->real));
88 iounmap(page_map->remapped); 79 set_memory_wb((unsigned long)page_map->real, 1);
89 ClearPageReserved(virt_to_page(page_map->real));
90 free_page((unsigned long) page_map->real); 80 free_page((unsigned long) page_map->real);
91} 81}
92 82
diff --git a/drivers/char/agp/generic.c b/drivers/char/agp/generic.c
index 7484bc759c4c..7fc0c99a3a58 100644
--- a/drivers/char/agp/generic.c
+++ b/drivers/char/agp/generic.c
@@ -932,9 +932,14 @@ int agp_generic_create_gatt_table(struct agp_bridge_data *bridge)
932 agp_gatt_table = (void *)table; 932 agp_gatt_table = (void *)table;
933 933
934 bridge->driver->cache_flush(); 934 bridge->driver->cache_flush();
935#ifdef CONFIG_X86
936 set_memory_uc((unsigned long)table, 1 << page_order);
937 bridge->gatt_table = (void *)table;
938#else
935 bridge->gatt_table = ioremap_nocache(virt_to_gart(table), 939 bridge->gatt_table = ioremap_nocache(virt_to_gart(table),
936 (PAGE_SIZE * (1 << page_order))); 940 (PAGE_SIZE * (1 << page_order)));
937 bridge->driver->cache_flush(); 941 bridge->driver->cache_flush();
942#endif
938 943
939 if (bridge->gatt_table == NULL) { 944 if (bridge->gatt_table == NULL) {
940 for (page = virt_to_page(table); page <= virt_to_page(table_end); page++) 945 for (page = virt_to_page(table); page <= virt_to_page(table_end); page++)
@@ -991,7 +996,11 @@ int agp_generic_free_gatt_table(struct agp_bridge_data *bridge)
991 * called, then all agp memory is deallocated and removed 996 * called, then all agp memory is deallocated and removed
992 * from the table. */ 997 * from the table. */
993 998
999#ifdef CONFIG_X86
1000 set_memory_wb((unsigned long)bridge->gatt_table, 1 << page_order);
1001#else
994 iounmap(bridge->gatt_table); 1002 iounmap(bridge->gatt_table);
1003#endif
995 table = (char *) bridge->gatt_table_real; 1004 table = (char *) bridge->gatt_table_real;
996 table_end = table + ((PAGE_SIZE * (1 << page_order)) - 1); 1005 table_end = table + ((PAGE_SIZE * (1 << page_order)) - 1);
997 1006
diff --git a/drivers/char/agp/sis-agp.c b/drivers/char/agp/sis-agp.c
index eb1a1c738190..b6791846809f 100644
--- a/drivers/char/agp/sis-agp.c
+++ b/drivers/char/agp/sis-agp.c
@@ -14,6 +14,9 @@
14#define SIS_TLBCNTRL 0x97 14#define SIS_TLBCNTRL 0x97
15#define SIS_TLBFLUSH 0x98 15#define SIS_TLBFLUSH 0x98
16 16
17#define PCI_DEVICE_ID_SI_662 0x0662
18#define PCI_DEVICE_ID_SI_671 0x0671
19
17static int __devinitdata agp_sis_force_delay = 0; 20static int __devinitdata agp_sis_force_delay = 0;
18static int __devinitdata agp_sis_agp_spec = -1; 21static int __devinitdata agp_sis_agp_spec = -1;
19 22
@@ -27,8 +30,8 @@ static int sis_fetch_size(void)
27 values = A_SIZE_8(agp_bridge->driver->aperture_sizes); 30 values = A_SIZE_8(agp_bridge->driver->aperture_sizes);
28 for (i = 0; i < agp_bridge->driver->num_aperture_sizes; i++) { 31 for (i = 0; i < agp_bridge->driver->num_aperture_sizes; i++) {
29 if ((temp_size == values[i].size_value) || 32 if ((temp_size == values[i].size_value) ||
30 ((temp_size & ~(0x03)) == 33 ((temp_size & ~(0x07)) ==
31 (values[i].size_value & ~(0x03)))) { 34 (values[i].size_value & ~(0x07)))) {
32 agp_bridge->previous_size = 35 agp_bridge->previous_size =
33 agp_bridge->current_size = (void *) (values + i); 36 agp_bridge->current_size = (void *) (values + i);
34 37
@@ -214,6 +217,26 @@ static void __devexit agp_sis_remove(struct pci_dev *pdev)
214 agp_put_bridge(bridge); 217 agp_put_bridge(bridge);
215} 218}
216 219
220#ifdef CONFIG_PM
221
222static int agp_sis_suspend(struct pci_dev *pdev, pm_message_t state)
223{
224 pci_save_state(pdev);
225 pci_set_power_state(pdev, pci_choose_state(pdev, state));
226
227 return 0;
228}
229
230static int agp_sis_resume(struct pci_dev *pdev)
231{
232 pci_set_power_state(pdev, PCI_D0);
233 pci_restore_state(pdev);
234
235 return sis_driver.configure();
236}
237
238#endif /* CONFIG_PM */
239
217static struct pci_device_id agp_sis_pci_table[] = { 240static struct pci_device_id agp_sis_pci_table[] = {
218 { 241 {
219 .class = (PCI_CLASS_BRIDGE_HOST << 8), 242 .class = (PCI_CLASS_BRIDGE_HOST << 8),
@@ -331,6 +354,22 @@ static struct pci_device_id agp_sis_pci_table[] = {
331 .class = (PCI_CLASS_BRIDGE_HOST << 8), 354 .class = (PCI_CLASS_BRIDGE_HOST << 8),
332 .class_mask = ~0, 355 .class_mask = ~0,
333 .vendor = PCI_VENDOR_ID_SI, 356 .vendor = PCI_VENDOR_ID_SI,
357 .device = PCI_DEVICE_ID_SI_662,
358 .subvendor = PCI_ANY_ID,
359 .subdevice = PCI_ANY_ID,
360 },
361 {
362 .class = (PCI_CLASS_BRIDGE_HOST << 8),
363 .class_mask = ~0,
364 .vendor = PCI_VENDOR_ID_SI,
365 .device = PCI_DEVICE_ID_SI_671,
366 .subvendor = PCI_ANY_ID,
367 .subdevice = PCI_ANY_ID,
368 },
369 {
370 .class = (PCI_CLASS_BRIDGE_HOST << 8),
371 .class_mask = ~0,
372 .vendor = PCI_VENDOR_ID_SI,
334 .device = PCI_DEVICE_ID_SI_730, 373 .device = PCI_DEVICE_ID_SI_730,
335 .subvendor = PCI_ANY_ID, 374 .subvendor = PCI_ANY_ID,
336 .subdevice = PCI_ANY_ID, 375 .subdevice = PCI_ANY_ID,
@@ -393,6 +432,10 @@ static struct pci_driver agp_sis_pci_driver = {
393 .id_table = agp_sis_pci_table, 432 .id_table = agp_sis_pci_table,
394 .probe = agp_sis_probe, 433 .probe = agp_sis_probe,
395 .remove = agp_sis_remove, 434 .remove = agp_sis_remove,
435#ifdef CONFIG_PM
436 .suspend = agp_sis_suspend,
437 .resume = agp_sis_resume,
438#endif
396}; 439};
397 440
398static int __init agp_sis_init(void) 441static int __init agp_sis_init(void)
diff --git a/drivers/char/agp/sworks-agp.c b/drivers/char/agp/sworks-agp.c
index 551ef25063ef..e08934e58f32 100644
--- a/drivers/char/agp/sworks-agp.c
+++ b/drivers/char/agp/sworks-agp.c
@@ -52,28 +52,20 @@ static int serverworks_create_page_map(struct serverworks_page_map *page_map)
52 if (page_map->real == NULL) { 52 if (page_map->real == NULL) {
53 return -ENOMEM; 53 return -ENOMEM;
54 } 54 }
55 SetPageReserved(virt_to_page(page_map->real)); 55
56 global_cache_flush(); 56 set_memory_uc((unsigned long)page_map->real, 1);
57 page_map->remapped = ioremap_nocache(virt_to_gart(page_map->real), 57 page_map->remapped = page_map->real;
58 PAGE_SIZE);
59 if (page_map->remapped == NULL) {
60 ClearPageReserved(virt_to_page(page_map->real));
61 free_page((unsigned long) page_map->real);
62 page_map->real = NULL;
63 return -ENOMEM;
64 }
65 global_cache_flush();
66 58
67 for (i = 0; i < PAGE_SIZE / sizeof(unsigned long); i++) 59 for (i = 0; i < PAGE_SIZE / sizeof(unsigned long); i++)
68 writel(agp_bridge->scratch_page, page_map->remapped+i); 60 writel(agp_bridge->scratch_page, page_map->remapped+i);
61 /* Red Pen: Everyone else does pci posting flush here */
69 62
70 return 0; 63 return 0;
71} 64}
72 65
73static void serverworks_free_page_map(struct serverworks_page_map *page_map) 66static void serverworks_free_page_map(struct serverworks_page_map *page_map)
74{ 67{
75 iounmap(page_map->remapped); 68 set_memory_wb((unsigned long)page_map->real, 1);
76 ClearPageReserved(virt_to_page(page_map->real));
77 free_page((unsigned long) page_map->real); 69 free_page((unsigned long) page_map->real);
78} 70}
79 71
diff --git a/drivers/char/drm/drmP.h b/drivers/char/drm/drmP.h
index 19d3be5c4b2d..a6789f25009b 100644
--- a/drivers/char/drm/drmP.h
+++ b/drivers/char/drm/drmP.h
@@ -568,7 +568,7 @@ struct drm_driver {
568 void (*postclose) (struct drm_device *, struct drm_file *); 568 void (*postclose) (struct drm_device *, struct drm_file *);
569 void (*lastclose) (struct drm_device *); 569 void (*lastclose) (struct drm_device *);
570 int (*unload) (struct drm_device *); 570 int (*unload) (struct drm_device *);
571 int (*suspend) (struct drm_device *); 571 int (*suspend) (struct drm_device *, pm_message_t state);
572 int (*resume) (struct drm_device *); 572 int (*resume) (struct drm_device *);
573 int (*dma_ioctl) (struct drm_device *dev, void *data, struct drm_file *file_priv); 573 int (*dma_ioctl) (struct drm_device *dev, void *data, struct drm_file *file_priv);
574 void (*dma_ready) (struct drm_device *); 574 void (*dma_ready) (struct drm_device *);
diff --git a/drivers/char/drm/drm_pciids.h b/drivers/char/drm/drm_pciids.h
index f52468843678..715b361f0c2b 100644
--- a/drivers/char/drm/drm_pciids.h
+++ b/drivers/char/drm/drm_pciids.h
@@ -83,6 +83,7 @@
83 {0x1002, 0x5460, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_RV380|RADEON_IS_MOBILITY}, \ 83 {0x1002, 0x5460, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_RV380|RADEON_IS_MOBILITY}, \
84 {0x1002, 0x5462, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_RV380|RADEON_IS_MOBILITY}, \ 84 {0x1002, 0x5462, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_RV380|RADEON_IS_MOBILITY}, \
85 {0x1002, 0x5464, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_RV380|RADEON_IS_MOBILITY}, \ 85 {0x1002, 0x5464, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_RV380|RADEON_IS_MOBILITY}, \
86 {0x1002, 0x5657, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_RV380|RADEON_NEW_MEMMAP}, \
86 {0x1002, 0x5548, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_R420|RADEON_NEW_MEMMAP}, \ 87 {0x1002, 0x5548, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_R420|RADEON_NEW_MEMMAP}, \
87 {0x1002, 0x5549, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_R420|RADEON_NEW_MEMMAP}, \ 88 {0x1002, 0x5549, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_R420|RADEON_NEW_MEMMAP}, \
88 {0x1002, 0x554A, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_R420|RADEON_NEW_MEMMAP}, \ 89 {0x1002, 0x554A, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_R420|RADEON_NEW_MEMMAP}, \
@@ -236,6 +237,7 @@
236 {0x1002, 0x7297, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_RV560|RADEON_NEW_MEMMAP}, \ 237 {0x1002, 0x7297, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_RV560|RADEON_NEW_MEMMAP}, \
237 {0x1002, 0x7834, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_RS300|RADEON_IS_IGP|RADEON_NEW_MEMMAP}, \ 238 {0x1002, 0x7834, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_RS300|RADEON_IS_IGP|RADEON_NEW_MEMMAP}, \
238 {0x1002, 0x7835, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_RS300|RADEON_IS_IGP|RADEON_IS_MOBILITY|RADEON_NEW_MEMMAP}, \ 239 {0x1002, 0x7835, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_RS300|RADEON_IS_IGP|RADEON_IS_MOBILITY|RADEON_NEW_MEMMAP}, \
240 {0x1002, 0x791e, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_RS690|RADEON_IS_IGP|RADEON_NEW_MEMMAP|RADEON_IS_IGPGART}, \
239 {0, 0, 0} 241 {0, 0, 0}
240 242
241#define r128_PCI_IDS \ 243#define r128_PCI_IDS \
@@ -313,6 +315,7 @@
313 {0x1039, 0x5300, PCI_ANY_ID, PCI_ANY_ID, 0, 0, 0}, \ 315 {0x1039, 0x5300, PCI_ANY_ID, PCI_ANY_ID, 0, 0, 0}, \
314 {0x1039, 0x6300, PCI_ANY_ID, PCI_ANY_ID, 0, 0, 0}, \ 316 {0x1039, 0x6300, PCI_ANY_ID, PCI_ANY_ID, 0, 0, 0}, \
315 {0x1039, 0x6330, PCI_ANY_ID, PCI_ANY_ID, 0, 0, SIS_CHIP_315}, \ 317 {0x1039, 0x6330, PCI_ANY_ID, PCI_ANY_ID, 0, 0, SIS_CHIP_315}, \
318 {0x1039, 0x6351, PCI_ANY_ID, PCI_ANY_ID, 0, 0, 0}, \
316 {0x1039, 0x7300, PCI_ANY_ID, PCI_ANY_ID, 0, 0, 0}, \ 319 {0x1039, 0x7300, PCI_ANY_ID, PCI_ANY_ID, 0, 0, 0}, \
317 {0x18CA, 0x0040, PCI_ANY_ID, PCI_ANY_ID, 0, 0, SIS_CHIP_315}, \ 320 {0x18CA, 0x0040, PCI_ANY_ID, PCI_ANY_ID, 0, 0, SIS_CHIP_315}, \
318 {0x18CA, 0x0042, PCI_ANY_ID, PCI_ANY_ID, 0, 0, SIS_CHIP_315}, \ 321 {0x18CA, 0x0042, PCI_ANY_ID, PCI_ANY_ID, 0, 0, SIS_CHIP_315}, \
diff --git a/drivers/char/drm/drm_sysfs.c b/drivers/char/drm/drm_sysfs.c
index fa36153619e8..05ed5043254f 100644
--- a/drivers/char/drm/drm_sysfs.c
+++ b/drivers/char/drm/drm_sysfs.c
@@ -36,7 +36,7 @@ static int drm_sysfs_suspend(struct device *dev, pm_message_t state)
36 printk(KERN_ERR "%s\n", __FUNCTION__); 36 printk(KERN_ERR "%s\n", __FUNCTION__);
37 37
38 if (drm_dev->driver->suspend) 38 if (drm_dev->driver->suspend)
39 return drm_dev->driver->suspend(drm_dev); 39 return drm_dev->driver->suspend(drm_dev, state);
40 40
41 return 0; 41 return 0;
42} 42}
diff --git a/drivers/char/drm/drm_vm.c b/drivers/char/drm/drm_vm.c
index cea4105374b2..3d65c4dcd0c6 100644
--- a/drivers/char/drm/drm_vm.c
+++ b/drivers/char/drm/drm_vm.c
@@ -66,7 +66,7 @@ static pgprot_t drm_io_prot(uint32_t map_type, struct vm_area_struct *vma)
66} 66}
67 67
68/** 68/**
69 * \c nopage method for AGP virtual memory. 69 * \c fault method for AGP virtual memory.
70 * 70 *
71 * \param vma virtual memory area. 71 * \param vma virtual memory area.
72 * \param address access address. 72 * \param address access address.
@@ -76,8 +76,7 @@ static pgprot_t drm_io_prot(uint32_t map_type, struct vm_area_struct *vma)
76 * map, get the page, increment the use count and return it. 76 * map, get the page, increment the use count and return it.
77 */ 77 */
78#if __OS_HAS_AGP 78#if __OS_HAS_AGP
79static __inline__ struct page *drm_do_vm_nopage(struct vm_area_struct *vma, 79static int drm_do_vm_fault(struct vm_area_struct *vma, struct vm_fault *vmf)
80 unsigned long address)
81{ 80{
82 struct drm_file *priv = vma->vm_file->private_data; 81 struct drm_file *priv = vma->vm_file->private_data;
83 struct drm_device *dev = priv->head->dev; 82 struct drm_device *dev = priv->head->dev;
@@ -89,19 +88,24 @@ static __inline__ struct page *drm_do_vm_nopage(struct vm_area_struct *vma,
89 * Find the right map 88 * Find the right map
90 */ 89 */
91 if (!drm_core_has_AGP(dev)) 90 if (!drm_core_has_AGP(dev))
92 goto vm_nopage_error; 91 goto vm_fault_error;
93 92
94 if (!dev->agp || !dev->agp->cant_use_aperture) 93 if (!dev->agp || !dev->agp->cant_use_aperture)
95 goto vm_nopage_error; 94 goto vm_fault_error;
96 95
97 if (drm_ht_find_item(&dev->map_hash, vma->vm_pgoff, &hash)) 96 if (drm_ht_find_item(&dev->map_hash, vma->vm_pgoff, &hash))
98 goto vm_nopage_error; 97 goto vm_fault_error;
99 98
100 r_list = drm_hash_entry(hash, struct drm_map_list, hash); 99 r_list = drm_hash_entry(hash, struct drm_map_list, hash);
101 map = r_list->map; 100 map = r_list->map;
102 101
103 if (map && map->type == _DRM_AGP) { 102 if (map && map->type == _DRM_AGP) {
104 unsigned long offset = address - vma->vm_start; 103 /*
104 * Using vm_pgoff as a selector forces us to use this unusual
105 * addressing scheme.
106 */
107 unsigned long offset = (unsigned long)vmf->virtual_address -
108 vma->vm_start;
105 unsigned long baddr = map->offset + offset; 109 unsigned long baddr = map->offset + offset;
106 struct drm_agp_mem *agpmem; 110 struct drm_agp_mem *agpmem;
107 struct page *page; 111 struct page *page;
@@ -123,7 +127,7 @@ static __inline__ struct page *drm_do_vm_nopage(struct vm_area_struct *vma,
123 } 127 }
124 128
125 if (!agpmem) 129 if (!agpmem)
126 goto vm_nopage_error; 130 goto vm_fault_error;
127 131
128 /* 132 /*
129 * Get the page, inc the use count, and return it 133 * Get the page, inc the use count, and return it
@@ -131,22 +135,21 @@ static __inline__ struct page *drm_do_vm_nopage(struct vm_area_struct *vma,
131 offset = (baddr - agpmem->bound) >> PAGE_SHIFT; 135 offset = (baddr - agpmem->bound) >> PAGE_SHIFT;
132 page = virt_to_page(__va(agpmem->memory->memory[offset])); 136 page = virt_to_page(__va(agpmem->memory->memory[offset]));
133 get_page(page); 137 get_page(page);
138 vmf->page = page;
134 139
135 DRM_DEBUG 140 DRM_DEBUG
136 ("baddr = 0x%lx page = 0x%p, offset = 0x%lx, count=%d\n", 141 ("baddr = 0x%lx page = 0x%p, offset = 0x%lx, count=%d\n",
137 baddr, __va(agpmem->memory->memory[offset]), offset, 142 baddr, __va(agpmem->memory->memory[offset]), offset,
138 page_count(page)); 143 page_count(page));
139 144 return 0;
140 return page;
141 } 145 }
142 vm_nopage_error: 146vm_fault_error:
143 return NOPAGE_SIGBUS; /* Disallow mremap */ 147 return VM_FAULT_SIGBUS; /* Disallow mremap */
144} 148}
145#else /* __OS_HAS_AGP */ 149#else /* __OS_HAS_AGP */
146static __inline__ struct page *drm_do_vm_nopage(struct vm_area_struct *vma, 150static int drm_do_vm_fault(struct vm_area_struct *vma, struct vm_fault *vmf)
147 unsigned long address)
148{ 151{
149 return NOPAGE_SIGBUS; 152 return VM_FAULT_SIGBUS;
150} 153}
151#endif /* __OS_HAS_AGP */ 154#endif /* __OS_HAS_AGP */
152 155
@@ -160,28 +163,26 @@ static __inline__ struct page *drm_do_vm_nopage(struct vm_area_struct *vma,
160 * Get the mapping, find the real physical page to map, get the page, and 163 * Get the mapping, find the real physical page to map, get the page, and
161 * return it. 164 * return it.
162 */ 165 */
163static __inline__ struct page *drm_do_vm_shm_nopage(struct vm_area_struct *vma, 166static int drm_do_vm_shm_fault(struct vm_area_struct *vma, struct vm_fault *vmf)
164 unsigned long address)
165{ 167{
166 struct drm_map *map = (struct drm_map *) vma->vm_private_data; 168 struct drm_map *map = (struct drm_map *) vma->vm_private_data;
167 unsigned long offset; 169 unsigned long offset;
168 unsigned long i; 170 unsigned long i;
169 struct page *page; 171 struct page *page;
170 172
171 if (address > vma->vm_end)
172 return NOPAGE_SIGBUS; /* Disallow mremap */
173 if (!map) 173 if (!map)
174 return NOPAGE_SIGBUS; /* Nothing allocated */ 174 return VM_FAULT_SIGBUS; /* Nothing allocated */
175 175
176 offset = address - vma->vm_start; 176 offset = (unsigned long)vmf->virtual_address - vma->vm_start;
177 i = (unsigned long)map->handle + offset; 177 i = (unsigned long)map->handle + offset;
178 page = vmalloc_to_page((void *)i); 178 page = vmalloc_to_page((void *)i);
179 if (!page) 179 if (!page)
180 return NOPAGE_SIGBUS; 180 return VM_FAULT_SIGBUS;
181 get_page(page); 181 get_page(page);
182 vmf->page = page;
182 183
183 DRM_DEBUG("0x%lx\n", address); 184 DRM_DEBUG("shm_fault 0x%lx\n", offset);
184 return page; 185 return 0;
185} 186}
186 187
187/** 188/**
@@ -263,7 +264,7 @@ static void drm_vm_shm_close(struct vm_area_struct *vma)
263} 264}
264 265
265/** 266/**
266 * \c nopage method for DMA virtual memory. 267 * \c fault method for DMA virtual memory.
267 * 268 *
268 * \param vma virtual memory area. 269 * \param vma virtual memory area.
269 * \param address access address. 270 * \param address access address.
@@ -271,8 +272,7 @@ static void drm_vm_shm_close(struct vm_area_struct *vma)
271 * 272 *
272 * Determine the page number from the page offset and get it from drm_device_dma::pagelist. 273 * Determine the page number from the page offset and get it from drm_device_dma::pagelist.
273 */ 274 */
274static __inline__ struct page *drm_do_vm_dma_nopage(struct vm_area_struct *vma, 275static int drm_do_vm_dma_fault(struct vm_area_struct *vma, struct vm_fault *vmf)
275 unsigned long address)
276{ 276{
277 struct drm_file *priv = vma->vm_file->private_data; 277 struct drm_file *priv = vma->vm_file->private_data;
278 struct drm_device *dev = priv->head->dev; 278 struct drm_device *dev = priv->head->dev;
@@ -282,24 +282,23 @@ static __inline__ struct page *drm_do_vm_dma_nopage(struct vm_area_struct *vma,
282 struct page *page; 282 struct page *page;
283 283
284 if (!dma) 284 if (!dma)
285 return NOPAGE_SIGBUS; /* Error */ 285 return VM_FAULT_SIGBUS; /* Error */
286 if (address > vma->vm_end)
287 return NOPAGE_SIGBUS; /* Disallow mremap */
288 if (!dma->pagelist) 286 if (!dma->pagelist)
289 return NOPAGE_SIGBUS; /* Nothing allocated */ 287 return VM_FAULT_SIGBUS; /* Nothing allocated */
290 288
291 offset = address - vma->vm_start; /* vm_[pg]off[set] should be 0 */ 289 offset = (unsigned long)vmf->virtual_address - vma->vm_start; /* vm_[pg]off[set] should be 0 */
292 page_nr = offset >> PAGE_SHIFT; 290 page_nr = offset >> PAGE_SHIFT; /* page_nr could just be vmf->pgoff */
293 page = virt_to_page((dma->pagelist[page_nr] + (offset & (~PAGE_MASK)))); 291 page = virt_to_page((dma->pagelist[page_nr] + (offset & (~PAGE_MASK))));
294 292
295 get_page(page); 293 get_page(page);
294 vmf->page = page;
296 295
297 DRM_DEBUG("0x%lx (page %lu)\n", address, page_nr); 296 DRM_DEBUG("dma_fault 0x%lx (page %lu)\n", offset, page_nr);
298 return page; 297 return 0;
299} 298}
300 299
301/** 300/**
302 * \c nopage method for scatter-gather virtual memory. 301 * \c fault method for scatter-gather virtual memory.
303 * 302 *
304 * \param vma virtual memory area. 303 * \param vma virtual memory area.
305 * \param address access address. 304 * \param address access address.
@@ -307,8 +306,7 @@ static __inline__ struct page *drm_do_vm_dma_nopage(struct vm_area_struct *vma,
307 * 306 *
308 * Determine the map offset from the page offset and get it from drm_sg_mem::pagelist. 307 * Determine the map offset from the page offset and get it from drm_sg_mem::pagelist.
309 */ 308 */
310static __inline__ struct page *drm_do_vm_sg_nopage(struct vm_area_struct *vma, 309static int drm_do_vm_sg_fault(struct vm_area_struct *vma, struct vm_fault *vmf)
311 unsigned long address)
312{ 310{
313 struct drm_map *map = (struct drm_map *) vma->vm_private_data; 311 struct drm_map *map = (struct drm_map *) vma->vm_private_data;
314 struct drm_file *priv = vma->vm_file->private_data; 312 struct drm_file *priv = vma->vm_file->private_data;
@@ -320,77 +318,64 @@ static __inline__ struct page *drm_do_vm_sg_nopage(struct vm_area_struct *vma,
320 struct page *page; 318 struct page *page;
321 319
322 if (!entry) 320 if (!entry)
323 return NOPAGE_SIGBUS; /* Error */ 321 return VM_FAULT_SIGBUS; /* Error */
324 if (address > vma->vm_end)
325 return NOPAGE_SIGBUS; /* Disallow mremap */
326 if (!entry->pagelist) 322 if (!entry->pagelist)
327 return NOPAGE_SIGBUS; /* Nothing allocated */ 323 return VM_FAULT_SIGBUS; /* Nothing allocated */
328 324
329 offset = address - vma->vm_start; 325 offset = (unsigned long)vmf->virtual_address - vma->vm_start;
330 map_offset = map->offset - (unsigned long)dev->sg->virtual; 326 map_offset = map->offset - (unsigned long)dev->sg->virtual;
331 page_offset = (offset >> PAGE_SHIFT) + (map_offset >> PAGE_SHIFT); 327 page_offset = (offset >> PAGE_SHIFT) + (map_offset >> PAGE_SHIFT);
332 page = entry->pagelist[page_offset]; 328 page = entry->pagelist[page_offset];
333 get_page(page); 329 get_page(page);
330 vmf->page = page;
334 331
335 return page; 332 return 0;
336} 333}
337 334
338static struct page *drm_vm_nopage(struct vm_area_struct *vma, 335static int drm_vm_fault(struct vm_area_struct *vma, struct vm_fault *vmf)
339 unsigned long address, int *type)
340{ 336{
341 if (type) 337 return drm_do_vm_fault(vma, vmf);
342 *type = VM_FAULT_MINOR;
343 return drm_do_vm_nopage(vma, address);
344} 338}
345 339
346static struct page *drm_vm_shm_nopage(struct vm_area_struct *vma, 340static int drm_vm_shm_fault(struct vm_area_struct *vma, struct vm_fault *vmf)
347 unsigned long address, int *type)
348{ 341{
349 if (type) 342 return drm_do_vm_shm_fault(vma, vmf);
350 *type = VM_FAULT_MINOR;
351 return drm_do_vm_shm_nopage(vma, address);
352} 343}
353 344
354static struct page *drm_vm_dma_nopage(struct vm_area_struct *vma, 345static int drm_vm_dma_fault(struct vm_area_struct *vma, struct vm_fault *vmf)
355 unsigned long address, int *type)
356{ 346{
357 if (type) 347 return drm_do_vm_dma_fault(vma, vmf);
358 *type = VM_FAULT_MINOR;
359 return drm_do_vm_dma_nopage(vma, address);
360} 348}
361 349
362static struct page *drm_vm_sg_nopage(struct vm_area_struct *vma, 350static int drm_vm_sg_fault(struct vm_area_struct *vma, struct vm_fault *vmf)
363 unsigned long address, int *type)
364{ 351{
365 if (type) 352 return drm_do_vm_sg_fault(vma, vmf);
366 *type = VM_FAULT_MINOR;
367 return drm_do_vm_sg_nopage(vma, address);
368} 353}
369 354
370/** AGP virtual memory operations */ 355/** AGP virtual memory operations */
371static struct vm_operations_struct drm_vm_ops = { 356static struct vm_operations_struct drm_vm_ops = {
372 .nopage = drm_vm_nopage, 357 .fault = drm_vm_fault,
373 .open = drm_vm_open, 358 .open = drm_vm_open,
374 .close = drm_vm_close, 359 .close = drm_vm_close,
375}; 360};
376 361
377/** Shared virtual memory operations */ 362/** Shared virtual memory operations */
378static struct vm_operations_struct drm_vm_shm_ops = { 363static struct vm_operations_struct drm_vm_shm_ops = {
379 .nopage = drm_vm_shm_nopage, 364 .fault = drm_vm_shm_fault,
380 .open = drm_vm_open, 365 .open = drm_vm_open,
381 .close = drm_vm_shm_close, 366 .close = drm_vm_shm_close,
382}; 367};
383 368
384/** DMA virtual memory operations */ 369/** DMA virtual memory operations */
385static struct vm_operations_struct drm_vm_dma_ops = { 370static struct vm_operations_struct drm_vm_dma_ops = {
386 .nopage = drm_vm_dma_nopage, 371 .fault = drm_vm_dma_fault,
387 .open = drm_vm_open, 372 .open = drm_vm_open,
388 .close = drm_vm_close, 373 .close = drm_vm_close,
389}; 374};
390 375
391/** Scatter-gather virtual memory operations */ 376/** Scatter-gather virtual memory operations */
392static struct vm_operations_struct drm_vm_sg_ops = { 377static struct vm_operations_struct drm_vm_sg_ops = {
393 .nopage = drm_vm_sg_nopage, 378 .fault = drm_vm_sg_fault,
394 .open = drm_vm_open, 379 .open = drm_vm_open,
395 .close = drm_vm_close, 380 .close = drm_vm_close,
396}; 381};
@@ -604,7 +589,7 @@ static int drm_mmap_locked(struct file *filp, struct vm_area_struct *vma)
604 /* 589 /*
605 * On some platforms we can't talk to bus dma address from the CPU, so for 590 * On some platforms we can't talk to bus dma address from the CPU, so for
606 * memory of type DRM_AGP, we'll deal with sorting out the real physical 591 * memory of type DRM_AGP, we'll deal with sorting out the real physical
607 * pages and mappings in nopage() 592 * pages and mappings in fault()
608 */ 593 */
609#if defined(__powerpc__) 594#if defined(__powerpc__)
610 pgprot_val(vma->vm_page_prot) |= _PAGE_NO_CACHE; 595 pgprot_val(vma->vm_page_prot) |= _PAGE_NO_CACHE;
@@ -634,7 +619,7 @@ static int drm_mmap_locked(struct file *filp, struct vm_area_struct *vma)
634 break; 619 break;
635 case _DRM_CONSISTENT: 620 case _DRM_CONSISTENT:
636 /* Consistent memory is really like shared memory. But 621 /* Consistent memory is really like shared memory. But
637 * it's allocated in a different way, so avoid nopage */ 622 * it's allocated in a different way, so avoid fault */
638 if (remap_pfn_range(vma, vma->vm_start, 623 if (remap_pfn_range(vma, vma->vm_start,
639 page_to_pfn(virt_to_page(map->handle)), 624 page_to_pfn(virt_to_page(map->handle)),
640 vma->vm_end - vma->vm_start, vma->vm_page_prot)) 625 vma->vm_end - vma->vm_start, vma->vm_page_prot))
diff --git a/drivers/char/drm/i915_dma.c b/drivers/char/drm/i915_dma.c
index 43986d81ae34..e9d6663bec73 100644
--- a/drivers/char/drm/i915_dma.c
+++ b/drivers/char/drm/i915_dma.c
@@ -171,7 +171,7 @@ static int i915_initialize(struct drm_device * dev, drm_i915_init_t * init)
171 dev_priv->allow_batchbuffer = 1; 171 dev_priv->allow_batchbuffer = 1;
172 172
173 /* Program Hardware Status Page */ 173 /* Program Hardware Status Page */
174 if (!IS_G33(dev)) { 174 if (!I915_NEED_GFX_HWS(dev)) {
175 dev_priv->status_page_dmah = 175 dev_priv->status_page_dmah =
176 drm_pci_alloc(dev, PAGE_SIZE, PAGE_SIZE, 0xffffffff); 176 drm_pci_alloc(dev, PAGE_SIZE, PAGE_SIZE, 0xffffffff);
177 177
@@ -720,6 +720,9 @@ static int i915_set_status_page(struct drm_device *dev, void *data,
720 drm_i915_private_t *dev_priv = dev->dev_private; 720 drm_i915_private_t *dev_priv = dev->dev_private;
721 drm_i915_hws_addr_t *hws = data; 721 drm_i915_hws_addr_t *hws = data;
722 722
723 if (!I915_NEED_GFX_HWS(dev))
724 return -EINVAL;
725
723 if (!dev_priv) { 726 if (!dev_priv) {
724 DRM_ERROR("called with no initialization\n"); 727 DRM_ERROR("called with no initialization\n");
725 return -EINVAL; 728 return -EINVAL;
diff --git a/drivers/char/drm/i915_drv.c b/drivers/char/drm/i915_drv.c
index 52e51033d32c..b2b451dc4460 100644
--- a/drivers/char/drm/i915_drv.c
+++ b/drivers/char/drm/i915_drv.c
@@ -160,6 +160,7 @@ static void i915_save_vga(struct drm_device *dev)
160 dev_priv->saveAR[i] = i915_read_ar(st01, i, 0); 160 dev_priv->saveAR[i] = i915_read_ar(st01, i, 0);
161 inb(st01); 161 inb(st01);
162 outb(dev_priv->saveAR_INDEX, VGA_AR_INDEX); 162 outb(dev_priv->saveAR_INDEX, VGA_AR_INDEX);
163 inb(st01);
163 164
164 /* Graphics controller registers */ 165 /* Graphics controller registers */
165 for (i = 0; i < 9; i++) 166 for (i = 0; i < 9; i++)
@@ -221,10 +222,12 @@ static void i915_restore_vga(struct drm_device *dev)
221 dev_priv->saveGR[0x18]); 222 dev_priv->saveGR[0x18]);
222 223
223 /* Attribute controller registers */ 224 /* Attribute controller registers */
225 inb(st01);
224 for (i = 0; i < 20; i++) 226 for (i = 0; i < 20; i++)
225 i915_write_ar(st01, i, dev_priv->saveAR[i], 0); 227 i915_write_ar(st01, i, dev_priv->saveAR[i], 0);
226 inb(st01); /* switch back to index mode */ 228 inb(st01); /* switch back to index mode */
227 outb(dev_priv->saveAR_INDEX | 0x20, VGA_AR_INDEX); 229 outb(dev_priv->saveAR_INDEX | 0x20, VGA_AR_INDEX);
230 inb(st01);
228 231
229 /* VGA color palette registers */ 232 /* VGA color palette registers */
230 outb(dev_priv->saveDACMASK, VGA_DACMASK); 233 outb(dev_priv->saveDACMASK, VGA_DACMASK);
@@ -236,7 +239,7 @@ static void i915_restore_vga(struct drm_device *dev)
236 239
237} 240}
238 241
239static int i915_suspend(struct drm_device *dev) 242static int i915_suspend(struct drm_device *dev, pm_message_t state)
240{ 243{
241 struct drm_i915_private *dev_priv = dev->dev_private; 244 struct drm_i915_private *dev_priv = dev->dev_private;
242 int i; 245 int i;
@@ -247,6 +250,9 @@ static int i915_suspend(struct drm_device *dev)
247 return -ENODEV; 250 return -ENODEV;
248 } 251 }
249 252
253 if (state.event == PM_EVENT_PRETHAW)
254 return 0;
255
250 pci_save_state(dev->pdev); 256 pci_save_state(dev->pdev);
251 pci_read_config_byte(dev->pdev, LBB, &dev_priv->saveLBB); 257 pci_read_config_byte(dev->pdev, LBB, &dev_priv->saveLBB);
252 258
@@ -276,6 +282,7 @@ static int i915_suspend(struct drm_device *dev)
276 dev_priv->saveDSPATILEOFF = I915_READ(DSPATILEOFF); 282 dev_priv->saveDSPATILEOFF = I915_READ(DSPATILEOFF);
277 } 283 }
278 i915_save_palette(dev, PIPE_A); 284 i915_save_palette(dev, PIPE_A);
285 dev_priv->savePIPEASTAT = I915_READ(I915REG_PIPEASTAT);
279 286
280 /* Pipe & plane B info */ 287 /* Pipe & plane B info */
281 dev_priv->savePIPEBCONF = I915_READ(PIPEBCONF); 288 dev_priv->savePIPEBCONF = I915_READ(PIPEBCONF);
@@ -303,6 +310,7 @@ static int i915_suspend(struct drm_device *dev)
303 dev_priv->saveDSPBTILEOFF = I915_READ(DSPBTILEOFF); 310 dev_priv->saveDSPBTILEOFF = I915_READ(DSPBTILEOFF);
304 } 311 }
305 i915_save_palette(dev, PIPE_B); 312 i915_save_palette(dev, PIPE_B);
313 dev_priv->savePIPEBSTAT = I915_READ(I915REG_PIPEBSTAT);
306 314
307 /* CRT state */ 315 /* CRT state */
308 dev_priv->saveADPA = I915_READ(ADPA); 316 dev_priv->saveADPA = I915_READ(ADPA);
@@ -329,12 +337,26 @@ static int i915_suspend(struct drm_device *dev)
329 dev_priv->saveFBC_CONTROL2 = I915_READ(FBC_CONTROL2); 337 dev_priv->saveFBC_CONTROL2 = I915_READ(FBC_CONTROL2);
330 dev_priv->saveFBC_CONTROL = I915_READ(FBC_CONTROL); 338 dev_priv->saveFBC_CONTROL = I915_READ(FBC_CONTROL);
331 339
340 /* Interrupt state */
341 dev_priv->saveIIR = I915_READ(I915REG_INT_IDENTITY_R);
342 dev_priv->saveIER = I915_READ(I915REG_INT_ENABLE_R);
343 dev_priv->saveIMR = I915_READ(I915REG_INT_MASK_R);
344
332 /* VGA state */ 345 /* VGA state */
333 dev_priv->saveVCLK_DIVISOR_VGA0 = I915_READ(VCLK_DIVISOR_VGA0); 346 dev_priv->saveVCLK_DIVISOR_VGA0 = I915_READ(VCLK_DIVISOR_VGA0);
334 dev_priv->saveVCLK_DIVISOR_VGA1 = I915_READ(VCLK_DIVISOR_VGA1); 347 dev_priv->saveVCLK_DIVISOR_VGA1 = I915_READ(VCLK_DIVISOR_VGA1);
335 dev_priv->saveVCLK_POST_DIV = I915_READ(VCLK_POST_DIV); 348 dev_priv->saveVCLK_POST_DIV = I915_READ(VCLK_POST_DIV);
336 dev_priv->saveVGACNTRL = I915_READ(VGACNTRL); 349 dev_priv->saveVGACNTRL = I915_READ(VGACNTRL);
337 350
351 /* Clock gating state */
352 dev_priv->saveDSPCLK_GATE_D = I915_READ(DSPCLK_GATE_D);
353
354 /* Cache mode state */
355 dev_priv->saveCACHE_MODE_0 = I915_READ(CACHE_MODE_0);
356
357 /* Memory Arbitration state */
358 dev_priv->saveMI_ARB_STATE = I915_READ(MI_ARB_STATE);
359
338 /* Scratch space */ 360 /* Scratch space */
339 for (i = 0; i < 16; i++) { 361 for (i = 0; i < 16; i++) {
340 dev_priv->saveSWF0[i] = I915_READ(SWF0 + (i << 2)); 362 dev_priv->saveSWF0[i] = I915_READ(SWF0 + (i << 2));
@@ -345,9 +367,11 @@ static int i915_suspend(struct drm_device *dev)
345 367
346 i915_save_vga(dev); 368 i915_save_vga(dev);
347 369
348 /* Shut down the device */ 370 if (state.event == PM_EVENT_SUSPEND) {
349 pci_disable_device(dev->pdev); 371 /* Shut down the device */
350 pci_set_power_state(dev->pdev, PCI_D3hot); 372 pci_disable_device(dev->pdev);
373 pci_set_power_state(dev->pdev, PCI_D3hot);
374 }
351 375
352 return 0; 376 return 0;
353} 377}
@@ -400,9 +424,7 @@ static int i915_resume(struct drm_device *dev)
400 I915_WRITE(DSPATILEOFF, dev_priv->saveDSPATILEOFF); 424 I915_WRITE(DSPATILEOFF, dev_priv->saveDSPATILEOFF);
401 } 425 }
402 426
403 if ((dev_priv->saveDPLL_A & DPLL_VCO_ENABLE) && 427 I915_WRITE(PIPEACONF, dev_priv->savePIPEACONF);
404 (dev_priv->saveDPLL_A & DPLL_VGA_MODE_DIS))
405 I915_WRITE(PIPEACONF, dev_priv->savePIPEACONF);
406 428
407 i915_restore_palette(dev, PIPE_A); 429 i915_restore_palette(dev, PIPE_A);
408 /* Enable the plane */ 430 /* Enable the plane */
@@ -444,10 +466,9 @@ static int i915_resume(struct drm_device *dev)
444 I915_WRITE(DSPBTILEOFF, dev_priv->saveDSPBTILEOFF); 466 I915_WRITE(DSPBTILEOFF, dev_priv->saveDSPBTILEOFF);
445 } 467 }
446 468
447 if ((dev_priv->saveDPLL_B & DPLL_VCO_ENABLE) && 469 I915_WRITE(PIPEBCONF, dev_priv->savePIPEBCONF);
448 (dev_priv->saveDPLL_B & DPLL_VGA_MODE_DIS)) 470
449 I915_WRITE(PIPEBCONF, dev_priv->savePIPEBCONF); 471 i915_restore_palette(dev, PIPE_B);
450 i915_restore_palette(dev, PIPE_A);
451 /* Enable the plane */ 472 /* Enable the plane */
452 I915_WRITE(DSPBCNTR, dev_priv->saveDSPBCNTR); 473 I915_WRITE(DSPBCNTR, dev_priv->saveDSPBCNTR);
453 I915_WRITE(DSPBBASE, I915_READ(DSPBBASE)); 474 I915_WRITE(DSPBBASE, I915_READ(DSPBBASE));
@@ -485,6 +506,15 @@ static int i915_resume(struct drm_device *dev)
485 I915_WRITE(VCLK_POST_DIV, dev_priv->saveVCLK_POST_DIV); 506 I915_WRITE(VCLK_POST_DIV, dev_priv->saveVCLK_POST_DIV);
486 udelay(150); 507 udelay(150);
487 508
509 /* Clock gating state */
510 I915_WRITE (DSPCLK_GATE_D, dev_priv->saveDSPCLK_GATE_D);
511
512 /* Cache mode state */
513 I915_WRITE (CACHE_MODE_0, dev_priv->saveCACHE_MODE_0 | 0xffff0000);
514
515 /* Memory arbitration state */
516 I915_WRITE (MI_ARB_STATE, dev_priv->saveMI_ARB_STATE | 0xffff0000);
517
488 for (i = 0; i < 16; i++) { 518 for (i = 0; i < 16; i++) {
489 I915_WRITE(SWF0 + (i << 2), dev_priv->saveSWF0[i]); 519 I915_WRITE(SWF0 + (i << 2), dev_priv->saveSWF0[i]);
490 I915_WRITE(SWF10 + (i << 2), dev_priv->saveSWF1[i+7]); 520 I915_WRITE(SWF10 + (i << 2), dev_priv->saveSWF1[i+7]);
diff --git a/drivers/char/drm/i915_drv.h b/drivers/char/drm/i915_drv.h
index f8308bfb2613..c10d128e34db 100644
--- a/drivers/char/drm/i915_drv.h
+++ b/drivers/char/drm/i915_drv.h
@@ -134,6 +134,7 @@ typedef struct drm_i915_private {
134 u32 saveVBLANK_A; 134 u32 saveVBLANK_A;
135 u32 saveVSYNC_A; 135 u32 saveVSYNC_A;
136 u32 saveBCLRPAT_A; 136 u32 saveBCLRPAT_A;
137 u32 savePIPEASTAT;
137 u32 saveDSPASTRIDE; 138 u32 saveDSPASTRIDE;
138 u32 saveDSPASIZE; 139 u32 saveDSPASIZE;
139 u32 saveDSPAPOS; 140 u32 saveDSPAPOS;
@@ -154,6 +155,7 @@ typedef struct drm_i915_private {
154 u32 saveVBLANK_B; 155 u32 saveVBLANK_B;
155 u32 saveVSYNC_B; 156 u32 saveVSYNC_B;
156 u32 saveBCLRPAT_B; 157 u32 saveBCLRPAT_B;
158 u32 savePIPEBSTAT;
157 u32 saveDSPBSTRIDE; 159 u32 saveDSPBSTRIDE;
158 u32 saveDSPBSIZE; 160 u32 saveDSPBSIZE;
159 u32 saveDSPBPOS; 161 u32 saveDSPBPOS;
@@ -182,6 +184,12 @@ typedef struct drm_i915_private {
182 u32 saveFBC_LL_BASE; 184 u32 saveFBC_LL_BASE;
183 u32 saveFBC_CONTROL; 185 u32 saveFBC_CONTROL;
184 u32 saveFBC_CONTROL2; 186 u32 saveFBC_CONTROL2;
187 u32 saveIER;
188 u32 saveIIR;
189 u32 saveIMR;
190 u32 saveCACHE_MODE_0;
191 u32 saveDSPCLK_GATE_D;
192 u32 saveMI_ARB_STATE;
185 u32 saveSWF0[16]; 193 u32 saveSWF0[16];
186 u32 saveSWF1[16]; 194 u32 saveSWF1[16];
187 u32 saveSWF2[3]; 195 u32 saveSWF2[3];
@@ -450,6 +458,10 @@ extern int i915_wait_ring(struct drm_device * dev, int n, const char *caller);
450 */ 458 */
451#define DMA_FADD_S 0x20d4 459#define DMA_FADD_S 0x20d4
452 460
461/* Memory Interface Arbitration State
462 */
463#define MI_ARB_STATE 0x20e4
464
453/* Cache mode 0 reg. 465/* Cache mode 0 reg.
454 * - Manipulating render cache behaviour is central 466 * - Manipulating render cache behaviour is central
455 * to the concept of zone rendering, tuning this reg can help avoid 467 * to the concept of zone rendering, tuning this reg can help avoid
@@ -460,6 +472,7 @@ extern int i915_wait_ring(struct drm_device * dev, int n, const char *caller);
460 * bit of interest either set or cleared. EG: (BIT<<16) | BIT to set. 472 * bit of interest either set or cleared. EG: (BIT<<16) | BIT to set.
461 */ 473 */
462#define Cache_Mode_0 0x2120 474#define Cache_Mode_0 0x2120
475#define CACHE_MODE_0 0x2120
463#define CM0_MASK_SHIFT 16 476#define CM0_MASK_SHIFT 16
464#define CM0_IZ_OPT_DISABLE (1<<6) 477#define CM0_IZ_OPT_DISABLE (1<<6)
465#define CM0_ZR_OPT_DISABLE (1<<5) 478#define CM0_ZR_OPT_DISABLE (1<<5)
@@ -655,6 +668,8 @@ extern int i915_wait_ring(struct drm_device * dev, int n, const char *caller);
655/** P1 value is 2 greater than this field */ 668/** P1 value is 2 greater than this field */
656# define VGA0_PD_P1_MASK (0x1f << 0) 669# define VGA0_PD_P1_MASK (0x1f << 0)
657 670
671#define DSPCLK_GATE_D 0x6200
672
658/* I830 CRTC registers */ 673/* I830 CRTC registers */
659#define HTOTAL_A 0x60000 674#define HTOTAL_A 0x60000
660#define HBLANK_A 0x60004 675#define HBLANK_A 0x60004
@@ -1101,6 +1116,8 @@ extern int i915_wait_ring(struct drm_device * dev, int n, const char *caller);
1101#define IS_MOBILE(dev) (IS_I830(dev) || IS_I85X(dev) || IS_I915GM(dev) || \ 1116#define IS_MOBILE(dev) (IS_I830(dev) || IS_I85X(dev) || IS_I915GM(dev) || \
1102 IS_I945GM(dev) || IS_I965GM(dev) || IS_IGD_GM(dev)) 1117 IS_I945GM(dev) || IS_I965GM(dev) || IS_IGD_GM(dev))
1103 1118
1119#define I915_NEED_GFX_HWS(dev) (IS_G33(dev) || IS_IGD_GM(dev))
1120
1104#define PRIMARY_RINGBUFFER_SIZE (128*1024) 1121#define PRIMARY_RINGBUFFER_SIZE (128*1024)
1105 1122
1106#endif 1123#endif
diff --git a/drivers/char/drm/radeon_cp.c b/drivers/char/drm/radeon_cp.c
index 5dc799ab86b8..833abc7e55fb 100644
--- a/drivers/char/drm/radeon_cp.c
+++ b/drivers/char/drm/radeon_cp.c
@@ -825,11 +825,19 @@ static u32 RADEON_READ_MCIND(drm_radeon_private_t *dev_priv, int addr)
825 return ret; 825 return ret;
826} 826}
827 827
828static u32 RS690_READ_MCIND(drm_radeon_private_t *dev_priv, int addr)
829{
830 RADEON_WRITE(RS690_MC_INDEX, (addr & RS690_MC_INDEX_MASK));
831 return RADEON_READ(RS690_MC_DATA);
832}
833
828u32 radeon_read_fb_location(drm_radeon_private_t *dev_priv) 834u32 radeon_read_fb_location(drm_radeon_private_t *dev_priv)
829{ 835{
830 836
831 if ((dev_priv->flags & RADEON_FAMILY_MASK) == CHIP_RV515) 837 if ((dev_priv->flags & RADEON_FAMILY_MASK) == CHIP_RV515)
832 return RADEON_READ_MCIND(dev_priv, RV515_MC_FB_LOCATION); 838 return RADEON_READ_MCIND(dev_priv, RV515_MC_FB_LOCATION);
839 else if ((dev_priv->flags & RADEON_FAMILY_MASK) == CHIP_RS690)
840 return RS690_READ_MCIND(dev_priv, RS690_MC_FB_LOCATION);
833 else if ((dev_priv->flags & RADEON_FAMILY_MASK) > CHIP_RV515) 841 else if ((dev_priv->flags & RADEON_FAMILY_MASK) > CHIP_RV515)
834 return RADEON_READ_MCIND(dev_priv, R520_MC_FB_LOCATION); 842 return RADEON_READ_MCIND(dev_priv, R520_MC_FB_LOCATION);
835 else 843 else
@@ -840,6 +848,8 @@ static void radeon_write_fb_location(drm_radeon_private_t *dev_priv, u32 fb_loc)
840{ 848{
841 if ((dev_priv->flags & RADEON_FAMILY_MASK) == CHIP_RV515) 849 if ((dev_priv->flags & RADEON_FAMILY_MASK) == CHIP_RV515)
842 RADEON_WRITE_MCIND(RV515_MC_FB_LOCATION, fb_loc); 850 RADEON_WRITE_MCIND(RV515_MC_FB_LOCATION, fb_loc);
851 else if ((dev_priv->flags & RADEON_FAMILY_MASK) == CHIP_RS690)
852 RS690_WRITE_MCIND(RS690_MC_FB_LOCATION, fb_loc);
843 else if ((dev_priv->flags & RADEON_FAMILY_MASK) > CHIP_RV515) 853 else if ((dev_priv->flags & RADEON_FAMILY_MASK) > CHIP_RV515)
844 RADEON_WRITE_MCIND(R520_MC_FB_LOCATION, fb_loc); 854 RADEON_WRITE_MCIND(R520_MC_FB_LOCATION, fb_loc);
845 else 855 else
@@ -850,6 +860,8 @@ static void radeon_write_agp_location(drm_radeon_private_t *dev_priv, u32 agp_lo
850{ 860{
851 if ((dev_priv->flags & RADEON_FAMILY_MASK) == CHIP_RV515) 861 if ((dev_priv->flags & RADEON_FAMILY_MASK) == CHIP_RV515)
852 RADEON_WRITE_MCIND(RV515_MC_AGP_LOCATION, agp_loc); 862 RADEON_WRITE_MCIND(RV515_MC_AGP_LOCATION, agp_loc);
863 else if ((dev_priv->flags & RADEON_FAMILY_MASK) == CHIP_RS690)
864 RS690_WRITE_MCIND(RS690_MC_AGP_LOCATION, agp_loc);
853 else if ((dev_priv->flags & RADEON_FAMILY_MASK) > CHIP_RV515) 865 else if ((dev_priv->flags & RADEON_FAMILY_MASK) > CHIP_RV515)
854 RADEON_WRITE_MCIND(R520_MC_AGP_LOCATION, agp_loc); 866 RADEON_WRITE_MCIND(R520_MC_AGP_LOCATION, agp_loc);
855 else 867 else
@@ -1362,6 +1374,70 @@ static void radeon_set_igpgart(drm_radeon_private_t * dev_priv, int on)
1362 } 1374 }
1363} 1375}
1364 1376
1377/* Enable or disable RS690 GART on the chip */
1378static void radeon_set_rs690gart(drm_radeon_private_t *dev_priv, int on)
1379{
1380 u32 temp;
1381
1382 if (on) {
1383 DRM_DEBUG("programming rs690 gart %08X %08lX %08X\n",
1384 dev_priv->gart_vm_start,
1385 (long)dev_priv->gart_info.bus_addr,
1386 dev_priv->gart_size);
1387
1388 temp = RS690_READ_MCIND(dev_priv, RS690_MC_MISC_CNTL);
1389 RS690_WRITE_MCIND(RS690_MC_MISC_CNTL, 0x5000);
1390
1391 RS690_WRITE_MCIND(RS690_MC_AGP_SIZE,
1392 RS690_MC_GART_EN | RS690_MC_AGP_SIZE_32MB);
1393
1394 temp = RS690_READ_MCIND(dev_priv, RS690_MC_GART_FEATURE_ID);
1395 RS690_WRITE_MCIND(RS690_MC_GART_FEATURE_ID, 0x42040800);
1396
1397 RS690_WRITE_MCIND(RS690_MC_GART_BASE,
1398 dev_priv->gart_info.bus_addr);
1399
1400 temp = RS690_READ_MCIND(dev_priv, RS690_MC_AGP_MODE_CONTROL);
1401 RS690_WRITE_MCIND(RS690_MC_AGP_MODE_CONTROL, 0x01400000);
1402
1403 RS690_WRITE_MCIND(RS690_MC_AGP_BASE,
1404 (unsigned int)dev_priv->gart_vm_start);
1405
1406 dev_priv->gart_size = 32*1024*1024;
1407 temp = (((dev_priv->gart_vm_start - 1 + dev_priv->gart_size) &
1408 0xffff0000) | (dev_priv->gart_vm_start >> 16));
1409
1410 RS690_WRITE_MCIND(RS690_MC_AGP_LOCATION, temp);
1411
1412 temp = RS690_READ_MCIND(dev_priv, RS690_MC_AGP_SIZE);
1413 RS690_WRITE_MCIND(RS690_MC_AGP_SIZE,
1414 RS690_MC_GART_EN | RS690_MC_AGP_SIZE_32MB);
1415
1416 do {
1417 temp = RS690_READ_MCIND(dev_priv, RS690_MC_GART_CACHE_CNTL);
1418 if ((temp & RS690_MC_GART_CLEAR_STATUS) ==
1419 RS690_MC_GART_CLEAR_DONE)
1420 break;
1421 DRM_UDELAY(1);
1422 } while (1);
1423
1424 RS690_WRITE_MCIND(RS690_MC_GART_CACHE_CNTL,
1425 RS690_MC_GART_CC_CLEAR);
1426 do {
1427 temp = RS690_READ_MCIND(dev_priv, RS690_MC_GART_CACHE_CNTL);
1428 if ((temp & RS690_MC_GART_CLEAR_STATUS) ==
1429 RS690_MC_GART_CLEAR_DONE)
1430 break;
1431 DRM_UDELAY(1);
1432 } while (1);
1433
1434 RS690_WRITE_MCIND(RS690_MC_GART_CACHE_CNTL,
1435 RS690_MC_GART_CC_NO_CHANGE);
1436 } else {
1437 RS690_WRITE_MCIND(RS690_MC_AGP_SIZE, RS690_MC_GART_DIS);
1438 }
1439}
1440
1365static void radeon_set_pciegart(drm_radeon_private_t * dev_priv, int on) 1441static void radeon_set_pciegart(drm_radeon_private_t * dev_priv, int on)
1366{ 1442{
1367 u32 tmp = RADEON_READ_PCIE(dev_priv, RADEON_PCIE_TX_GART_CNTL); 1443 u32 tmp = RADEON_READ_PCIE(dev_priv, RADEON_PCIE_TX_GART_CNTL);
@@ -1396,6 +1472,11 @@ static void radeon_set_pcigart(drm_radeon_private_t * dev_priv, int on)
1396{ 1472{
1397 u32 tmp; 1473 u32 tmp;
1398 1474
1475 if ((dev_priv->flags & RADEON_FAMILY_MASK) == CHIP_RS690) {
1476 radeon_set_rs690gart(dev_priv, on);
1477 return;
1478 }
1479
1399 if (dev_priv->flags & RADEON_IS_IGPGART) { 1480 if (dev_priv->flags & RADEON_IS_IGPGART) {
1400 radeon_set_igpgart(dev_priv, on); 1481 radeon_set_igpgart(dev_priv, on);
1401 return; 1482 return;
diff --git a/drivers/char/drm/radeon_drv.h b/drivers/char/drm/radeon_drv.h
index 4434332c79bc..173ae620223a 100644
--- a/drivers/char/drm/radeon_drv.h
+++ b/drivers/char/drm/radeon_drv.h
@@ -123,6 +123,7 @@ enum radeon_family {
123 CHIP_R420, 123 CHIP_R420,
124 CHIP_RV410, 124 CHIP_RV410,
125 CHIP_RS400, 125 CHIP_RS400,
126 CHIP_RS690,
126 CHIP_RV515, 127 CHIP_RV515,
127 CHIP_R520, 128 CHIP_R520,
128 CHIP_RV530, 129 CHIP_RV530,
@@ -467,6 +468,36 @@ extern int r300_do_cp_cmdbuf(struct drm_device * dev,
467#define RADEON_IGPGART_ENABLE 0x38 468#define RADEON_IGPGART_ENABLE 0x38
468#define RADEON_IGPGART_UNK_39 0x39 469#define RADEON_IGPGART_UNK_39 0x39
469 470
471#define RS690_MC_INDEX 0x78
472# define RS690_MC_INDEX_MASK 0x1ff
473# define RS690_MC_INDEX_WR_EN (1 << 9)
474# define RS690_MC_INDEX_WR_ACK 0x7f
475#define RS690_MC_DATA 0x7c
476
477#define RS690_MC_MISC_CNTL 0x18
478#define RS690_MC_GART_FEATURE_ID 0x2b
479#define RS690_MC_GART_BASE 0x2c
480#define RS690_MC_GART_CACHE_CNTL 0x2e
481# define RS690_MC_GART_CC_NO_CHANGE 0x0
482# define RS690_MC_GART_CC_CLEAR 0x1
483# define RS690_MC_GART_CLEAR_STATUS (1 << 1)
484# define RS690_MC_GART_CLEAR_DONE (0 << 1)
485# define RS690_MC_GART_CLEAR_PENDING (1 << 1)
486#define RS690_MC_AGP_SIZE 0x38
487# define RS690_MC_GART_DIS 0x0
488# define RS690_MC_GART_EN 0x1
489# define RS690_MC_AGP_SIZE_32MB (0 << 1)
490# define RS690_MC_AGP_SIZE_64MB (1 << 1)
491# define RS690_MC_AGP_SIZE_128MB (2 << 1)
492# define RS690_MC_AGP_SIZE_256MB (3 << 1)
493# define RS690_MC_AGP_SIZE_512MB (4 << 1)
494# define RS690_MC_AGP_SIZE_1GB (5 << 1)
495# define RS690_MC_AGP_SIZE_2GB (6 << 1)
496#define RS690_MC_AGP_MODE_CONTROL 0x39
497#define RS690_MC_FB_LOCATION 0x100
498#define RS690_MC_AGP_LOCATION 0x101
499#define RS690_MC_AGP_BASE 0x102
500
470#define R520_MC_IND_INDEX 0x70 501#define R520_MC_IND_INDEX 0x70
471#define R520_MC_IND_WR_EN (1<<24) 502#define R520_MC_IND_WR_EN (1<<24)
472#define R520_MC_IND_DATA 0x74 503#define R520_MC_IND_DATA 0x74
@@ -1076,6 +1107,13 @@ do { \
1076 RADEON_WRITE(R520_MC_IND_INDEX, 0); \ 1107 RADEON_WRITE(R520_MC_IND_INDEX, 0); \
1077 } while (0) 1108 } while (0)
1078 1109
1110#define RS690_WRITE_MCIND( addr, val ) \
1111do { \
1112 RADEON_WRITE(RS690_MC_INDEX, RS690_MC_INDEX_WR_EN | ((addr) & RS690_MC_INDEX_MASK)); \
1113 RADEON_WRITE(RS690_MC_DATA, val); \
1114 RADEON_WRITE(RS690_MC_INDEX, RS690_MC_INDEX_WR_ACK); \
1115} while (0)
1116
1079#define CP_PACKET0( reg, n ) \ 1117#define CP_PACKET0( reg, n ) \
1080 (RADEON_CP_PACKET0 | ((n) << 16) | ((reg) >> 2)) 1118 (RADEON_CP_PACKET0 | ((n) << 16) | ((reg) >> 2))
1081#define CP_PACKET0_TABLE( reg, n ) \ 1119#define CP_PACKET0_TABLE( reg, n ) \
diff --git a/drivers/cpufreq/cpufreq.c b/drivers/cpufreq/cpufreq.c
index 64926aa990db..89a29cd93783 100644
--- a/drivers/cpufreq/cpufreq.c
+++ b/drivers/cpufreq/cpufreq.c
@@ -1006,14 +1006,6 @@ static int __cpufreq_remove_dev (struct sys_device * sys_dev)
1006 } 1006 }
1007#endif 1007#endif
1008 1008
1009
1010 if (!kobject_get(&data->kobj)) {
1011 spin_unlock_irqrestore(&cpufreq_driver_lock, flags);
1012 cpufreq_debug_enable_ratelimit();
1013 unlock_policy_rwsem_write(cpu);
1014 return -EFAULT;
1015 }
1016
1017#ifdef CONFIG_SMP 1009#ifdef CONFIG_SMP
1018 1010
1019#ifdef CONFIG_HOTPLUG_CPU 1011#ifdef CONFIG_HOTPLUG_CPU
diff --git a/drivers/crypto/hifn_795x.c b/drivers/crypto/hifn_795x.c
index dfbf24c4033c..3110bf7014f7 100644
--- a/drivers/crypto/hifn_795x.c
+++ b/drivers/crypto/hifn_795x.c
@@ -463,7 +463,7 @@ struct hifn_device
463 463
464 unsigned int pk_clk_freq; 464 unsigned int pk_clk_freq;
465 465
466#ifdef CRYPTO_DEV_HIFN_795X_RNG 466#ifdef CONFIG_CRYPTO_DEV_HIFN_795X_RNG
467 unsigned int rng_wait_time; 467 unsigned int rng_wait_time;
468 ktime_t rngtime; 468 ktime_t rngtime;
469 struct hwrng rng; 469 struct hwrng rng;
@@ -795,7 +795,7 @@ static struct pci2id {
795 } 795 }
796}; 796};
797 797
798#ifdef CRYPTO_DEV_HIFN_795X_RNG 798#ifdef CONFIG_CRYPTO_DEV_HIFN_795X_RNG
799static int hifn_rng_data_present(struct hwrng *rng, int wait) 799static int hifn_rng_data_present(struct hwrng *rng, int wait)
800{ 800{
801 struct hifn_device *dev = (struct hifn_device *)rng->priv; 801 struct hifn_device *dev = (struct hifn_device *)rng->priv;
@@ -880,7 +880,7 @@ static int hifn_init_pubrng(struct hifn_device *dev)
880 dprintk("Chip %s: RNG engine has been successfully initialised.\n", 880 dprintk("Chip %s: RNG engine has been successfully initialised.\n",
881 dev->name); 881 dev->name);
882 882
883#ifdef CRYPTO_DEV_HIFN_795X_RNG 883#ifdef CONFIG_CRYPTO_DEV_HIFN_795X_RNG
884 /* First value must be discarded */ 884 /* First value must be discarded */
885 hifn_read_1(dev, HIFN_1_RNG_DATA); 885 hifn_read_1(dev, HIFN_1_RNG_DATA);
886 dev->rngtime = ktime_get(); 886 dev->rngtime = ktime_get();
diff --git a/drivers/firmware/dmi_scan.c b/drivers/firmware/dmi_scan.c
index 653265a40b7f..4072449ad1cd 100644
--- a/drivers/firmware/dmi_scan.c
+++ b/drivers/firmware/dmi_scan.c
@@ -10,10 +10,9 @@
10 10
11static char dmi_empty_string[] = " "; 11static char dmi_empty_string[] = " ";
12 12
13static char * __init dmi_string(const struct dmi_header *dm, u8 s) 13static const char * __init dmi_string_nosave(const struct dmi_header *dm, u8 s)
14{ 14{
15 const u8 *bp = ((u8 *) dm) + dm->length; 15 const u8 *bp = ((u8 *) dm) + dm->length;
16 char *str = "";
17 16
18 if (s) { 17 if (s) {
19 s--; 18 s--;
@@ -28,14 +27,29 @@ static char * __init dmi_string(const struct dmi_header *dm, u8 s)
28 27
29 if (!memcmp(bp, dmi_empty_string, cmp_len)) 28 if (!memcmp(bp, dmi_empty_string, cmp_len))
30 return dmi_empty_string; 29 return dmi_empty_string;
31 str = dmi_alloc(len); 30 return bp;
32 if (str != NULL)
33 strcpy(str, bp);
34 else
35 printk(KERN_ERR "dmi_string: cannot allocate %Zu bytes.\n", len);
36 } 31 }
37 } 32 }
38 33
34 return "";
35}
36
37static char * __init dmi_string(const struct dmi_header *dm, u8 s)
38{
39 const char *bp = dmi_string_nosave(dm, s);
40 char *str;
41 size_t len;
42
43 if (bp == dmi_empty_string)
44 return dmi_empty_string;
45
46 len = strlen(bp) + 1;
47 str = dmi_alloc(len);
48 if (str != NULL)
49 strcpy(str, bp);
50 else
51 printk(KERN_ERR "dmi_string: cannot allocate %Zu bytes.\n", len);
52
39 return str; 53 return str;
40} 54}
41 55
@@ -167,10 +181,30 @@ static void __init dmi_save_type(const struct dmi_header *dm, int slot, int inde
167 dmi_ident[slot] = s; 181 dmi_ident[slot] = s;
168} 182}
169 183
184static void __init dmi_save_one_device(int type, const char *name)
185{
186 struct dmi_device *dev;
187
188 /* No duplicate device */
189 if (dmi_find_device(type, name, NULL))
190 return;
191
192 dev = dmi_alloc(sizeof(*dev) + strlen(name) + 1);
193 if (!dev) {
194 printk(KERN_ERR "dmi_save_one_device: out of memory.\n");
195 return;
196 }
197
198 dev->type = type;
199 strcpy((char *)(dev + 1), name);
200 dev->name = (char *)(dev + 1);
201 dev->device_data = NULL;
202 list_add(&dev->list, &dmi_devices);
203}
204
170static void __init dmi_save_devices(const struct dmi_header *dm) 205static void __init dmi_save_devices(const struct dmi_header *dm)
171{ 206{
172 int i, count = (dm->length - sizeof(struct dmi_header)) / 2; 207 int i, count = (dm->length - sizeof(struct dmi_header)) / 2;
173 struct dmi_device *dev;
174 208
175 for (i = 0; i < count; i++) { 209 for (i = 0; i < count; i++) {
176 const char *d = (char *)(dm + 1) + (i * 2); 210 const char *d = (char *)(dm + 1) + (i * 2);
@@ -179,23 +213,10 @@ static void __init dmi_save_devices(const struct dmi_header *dm)
179 if ((*d & 0x80) == 0) 213 if ((*d & 0x80) == 0)
180 continue; 214 continue;
181 215
182 dev = dmi_alloc(sizeof(*dev)); 216 dmi_save_one_device(*d & 0x7f, dmi_string_nosave(dm, *(d + 1)));
183 if (!dev) {
184 printk(KERN_ERR "dmi_save_devices: out of memory.\n");
185 break;
186 }
187
188 dev->type = *d++ & 0x7f;
189 dev->name = dmi_string(dm, *d);
190 dev->device_data = NULL;
191 list_add(&dev->list, &dmi_devices);
192 } 217 }
193} 218}
194 219
195static struct dmi_device empty_oem_string_dev = {
196 .name = dmi_empty_string,
197};
198
199static void __init dmi_save_oem_strings_devices(const struct dmi_header *dm) 220static void __init dmi_save_oem_strings_devices(const struct dmi_header *dm)
200{ 221{
201 int i, count = *(u8 *)(dm + 1); 222 int i, count = *(u8 *)(dm + 1);
@@ -204,10 +225,8 @@ static void __init dmi_save_oem_strings_devices(const struct dmi_header *dm)
204 for (i = 1; i <= count; i++) { 225 for (i = 1; i <= count; i++) {
205 char *devname = dmi_string(dm, i); 226 char *devname = dmi_string(dm, i);
206 227
207 if (!strcmp(devname, dmi_empty_string)) { 228 if (devname == dmi_empty_string)
208 list_add(&empty_oem_string_dev.list, &dmi_devices);
209 continue; 229 continue;
210 }
211 230
212 dev = dmi_alloc(sizeof(*dev)); 231 dev = dmi_alloc(sizeof(*dev));
213 if (!dev) { 232 if (!dev) {
@@ -253,23 +272,12 @@ static void __init dmi_save_ipmi_device(const struct dmi_header *dm)
253static void __init dmi_save_extended_devices(const struct dmi_header *dm) 272static void __init dmi_save_extended_devices(const struct dmi_header *dm)
254{ 273{
255 const u8 *d = (u8*) dm + 5; 274 const u8 *d = (u8*) dm + 5;
256 struct dmi_device *dev;
257 275
258 /* Skip disabled device */ 276 /* Skip disabled device */
259 if ((*d & 0x80) == 0) 277 if ((*d & 0x80) == 0)
260 return; 278 return;
261 279
262 dev = dmi_alloc(sizeof(*dev)); 280 dmi_save_one_device(*d & 0x7f, dmi_string_nosave(dm, *(d - 1)));
263 if (!dev) {
264 printk(KERN_ERR "dmi_save_extended_devices: out of memory.\n");
265 return;
266 }
267
268 dev->type = *d-- & 0x7f;
269 dev->name = dmi_string(dm, *d);
270 dev->device_data = NULL;
271
272 list_add(&dev->list, &dmi_devices);
273} 281}
274 282
275/* 283/*
diff --git a/drivers/hwmon/Kconfig b/drivers/hwmon/Kconfig
index 410ffe4e9d80..368879ff5d8c 100644
--- a/drivers/hwmon/Kconfig
+++ b/drivers/hwmon/Kconfig
@@ -143,6 +143,16 @@ config SENSORS_ADT7470
143 This driver can also be built as a module. If so, the module 143 This driver can also be built as a module. If so, the module
144 will be called adt7470. 144 will be called adt7470.
145 145
146config SENSORS_ADT7473
147 tristate "Analog Devices ADT7473"
148 depends on I2C && EXPERIMENTAL
149 help
150 If you say yes here you get support for the Analog Devices
151 ADT7473 temperature monitoring chips.
152
153 This driver can also be built as a module. If so, the module
154 will be called adt7473.
155
146config SENSORS_K8TEMP 156config SENSORS_K8TEMP
147 tristate "AMD Athlon64/FX or Opteron temperature sensor" 157 tristate "AMD Athlon64/FX or Opteron temperature sensor"
148 depends on X86 && PCI && EXPERIMENTAL 158 depends on X86 && PCI && EXPERIMENTAL
diff --git a/drivers/hwmon/Makefile b/drivers/hwmon/Makefile
index 824161337f1c..3bdb05a5cbd7 100644
--- a/drivers/hwmon/Makefile
+++ b/drivers/hwmon/Makefile
@@ -24,6 +24,7 @@ obj-$(CONFIG_SENSORS_ADM1031) += adm1031.o
24obj-$(CONFIG_SENSORS_ADM9240) += adm9240.o 24obj-$(CONFIG_SENSORS_ADM9240) += adm9240.o
25obj-$(CONFIG_SENSORS_ADS7828) += ads7828.o 25obj-$(CONFIG_SENSORS_ADS7828) += ads7828.o
26obj-$(CONFIG_SENSORS_ADT7470) += adt7470.o 26obj-$(CONFIG_SENSORS_ADT7470) += adt7470.o
27obj-$(CONFIG_SENSORS_ADT7473) += adt7473.o
27obj-$(CONFIG_SENSORS_APPLESMC) += applesmc.o 28obj-$(CONFIG_SENSORS_APPLESMC) += applesmc.o
28obj-$(CONFIG_SENSORS_AMS) += ams/ 29obj-$(CONFIG_SENSORS_AMS) += ams/
29obj-$(CONFIG_SENSORS_ATXP1) += atxp1.o 30obj-$(CONFIG_SENSORS_ATXP1) += atxp1.o
diff --git a/drivers/hwmon/ad7418.c b/drivers/hwmon/ad7418.c
index fcd7fe78f3f9..466b9ee92797 100644
--- a/drivers/hwmon/ad7418.c
+++ b/drivers/hwmon/ad7418.c
@@ -26,7 +26,7 @@
26#define DRV_VERSION "0.3" 26#define DRV_VERSION "0.3"
27 27
28/* Addresses to scan */ 28/* Addresses to scan */
29static unsigned short normal_i2c[] = { 0x28, I2C_CLIENT_END }; 29static const unsigned short normal_i2c[] = { 0x28, I2C_CLIENT_END };
30/* Insmod parameters */ 30/* Insmod parameters */
31I2C_CLIENT_INSMOD_3(ad7416, ad7417, ad7418); 31I2C_CLIENT_INSMOD_3(ad7416, ad7417, ad7418);
32 32
diff --git a/drivers/hwmon/adm1021.c b/drivers/hwmon/adm1021.c
index b96be772e498..ecbf69484bf5 100644
--- a/drivers/hwmon/adm1021.c
+++ b/drivers/hwmon/adm1021.c
@@ -31,10 +31,8 @@
31 31
32 32
33/* Addresses to scan */ 33/* Addresses to scan */
34static unsigned short normal_i2c[] = { 0x18, 0x19, 0x1a, 34static const unsigned short normal_i2c[] = {
35 0x29, 0x2a, 0x2b, 35 0x18, 0x19, 0x1a, 0x29, 0x2a, 0x2b, 0x4c, 0x4d, 0x4e, I2C_CLIENT_END };
36 0x4c, 0x4d, 0x4e,
37 I2C_CLIENT_END };
38 36
39/* Insmod parameters */ 37/* Insmod parameters */
40I2C_CLIENT_INSMOD_8(adm1021, adm1023, max1617, max1617a, thmc10, lm84, gl523sm, 38I2C_CLIENT_INSMOD_8(adm1021, adm1023, max1617, max1617a, thmc10, lm84, gl523sm,
diff --git a/drivers/hwmon/adm1025.c b/drivers/hwmon/adm1025.c
index e96c3725203d..1d76de7d75c7 100644
--- a/drivers/hwmon/adm1025.c
+++ b/drivers/hwmon/adm1025.c
@@ -62,7 +62,7 @@
62 * NE1619 has two possible addresses: 0x2c and 0x2d. 62 * NE1619 has two possible addresses: 0x2c and 0x2d.
63 */ 63 */
64 64
65static unsigned short normal_i2c[] = { 0x2c, 0x2d, 0x2e, I2C_CLIENT_END }; 65static const unsigned short normal_i2c[] = { 0x2c, 0x2d, 0x2e, I2C_CLIENT_END };
66 66
67/* 67/*
68 * Insmod parameters 68 * Insmod parameters
diff --git a/drivers/hwmon/adm1026.c b/drivers/hwmon/adm1026.c
index 8002f68240c4..904c6ce9d83f 100644
--- a/drivers/hwmon/adm1026.c
+++ b/drivers/hwmon/adm1026.c
@@ -35,7 +35,7 @@
35#include <linux/mutex.h> 35#include <linux/mutex.h>
36 36
37/* Addresses to scan */ 37/* Addresses to scan */
38static unsigned short normal_i2c[] = { 0x2c, 0x2d, 0x2e, I2C_CLIENT_END }; 38static const unsigned short normal_i2c[] = { 0x2c, 0x2d, 0x2e, I2C_CLIENT_END };
39 39
40/* Insmod parameters */ 40/* Insmod parameters */
41I2C_CLIENT_INSMOD_1(adm1026); 41I2C_CLIENT_INSMOD_1(adm1026);
@@ -1624,6 +1624,7 @@ static struct attribute *adm1026_attributes_temp3[] = {
1624 &dev_attr_temp3_crit_enable.attr, 1624 &dev_attr_temp3_crit_enable.attr,
1625 &dev_attr_temp3_auto_point1_pwm.attr, 1625 &dev_attr_temp3_auto_point1_pwm.attr,
1626 &dev_attr_temp3_auto_point2_pwm.attr, 1626 &dev_attr_temp3_auto_point2_pwm.attr,
1627 NULL
1627}; 1628};
1628 1629
1629static const struct attribute_group adm1026_group_temp3 = { 1630static const struct attribute_group adm1026_group_temp3 = {
@@ -1639,6 +1640,7 @@ static struct attribute *adm1026_attributes_in8_9[] = {
1639 &sensor_dev_attr_in9_max.dev_attr.attr, 1640 &sensor_dev_attr_in9_max.dev_attr.attr,
1640 &sensor_dev_attr_in9_min.dev_attr.attr, 1641 &sensor_dev_attr_in9_min.dev_attr.attr,
1641 &sensor_dev_attr_in9_alarm.dev_attr.attr, 1642 &sensor_dev_attr_in9_alarm.dev_attr.attr,
1643 NULL
1642}; 1644};
1643 1645
1644static const struct attribute_group adm1026_group_in8_9 = { 1646static const struct attribute_group adm1026_group_in8_9 = {
diff --git a/drivers/hwmon/adm1029.c b/drivers/hwmon/adm1029.c
index 0bc897dffa27..2c6608d453c2 100644
--- a/drivers/hwmon/adm1029.c
+++ b/drivers/hwmon/adm1029.c
@@ -39,10 +39,8 @@
39 * Addresses to scan 39 * Addresses to scan
40 */ 40 */
41 41
42static unsigned short normal_i2c[] = { 42static const unsigned short normal_i2c[] = { 0x28, 0x29, 0x2a, 0x2b, 0x2c, 0x2d,
43 0x28, 0x29, 0x2a, 43 0x2e, 0x2f, I2C_CLIENT_END
44 0x2b, 0x2c, 0x2d,
45 0x2e, 0x2f, I2C_CLIENT_END
46}; 44};
47 45
48/* 46/*
diff --git a/drivers/hwmon/adm1031.c b/drivers/hwmon/adm1031.c
index 5aaad3636c98..2bffcab7dc9f 100644
--- a/drivers/hwmon/adm1031.c
+++ b/drivers/hwmon/adm1031.c
@@ -61,7 +61,7 @@
61#define ADM1031_CONF2_TEMP_ENABLE(chan) (0x10 << (chan)) 61#define ADM1031_CONF2_TEMP_ENABLE(chan) (0x10 << (chan))
62 62
63/* Addresses to scan */ 63/* Addresses to scan */
64static unsigned short normal_i2c[] = { 0x2c, 0x2d, 0x2e, I2C_CLIENT_END }; 64static const unsigned short normal_i2c[] = { 0x2c, 0x2d, 0x2e, I2C_CLIENT_END };
65 65
66/* Insmod parameters */ 66/* Insmod parameters */
67I2C_CLIENT_INSMOD_2(adm1030, adm1031); 67I2C_CLIENT_INSMOD_2(adm1030, adm1031);
diff --git a/drivers/hwmon/adm9240.c b/drivers/hwmon/adm9240.c
index 7671d2bf7800..149ef25252e7 100644
--- a/drivers/hwmon/adm9240.c
+++ b/drivers/hwmon/adm9240.c
@@ -52,7 +52,7 @@
52#include <linux/mutex.h> 52#include <linux/mutex.h>
53 53
54/* Addresses to scan */ 54/* Addresses to scan */
55static unsigned short normal_i2c[] = { 0x2c, 0x2d, 0x2e, 0x2f, 55static const unsigned short normal_i2c[] = { 0x2c, 0x2d, 0x2e, 0x2f,
56 I2C_CLIENT_END }; 56 I2C_CLIENT_END };
57 57
58/* Insmod parameters */ 58/* Insmod parameters */
diff --git a/drivers/hwmon/ads7828.c b/drivers/hwmon/ads7828.c
index 6b8a73ef404c..ed71a8bc70dc 100644
--- a/drivers/hwmon/ads7828.c
+++ b/drivers/hwmon/ads7828.c
@@ -44,7 +44,7 @@
44#define ADS7828_INT_VREF_MV 2500 /* Internal vref is 2.5V, 2500mV */ 44#define ADS7828_INT_VREF_MV 2500 /* Internal vref is 2.5V, 2500mV */
45 45
46/* Addresses to scan */ 46/* Addresses to scan */
47static unsigned short normal_i2c[] = { 0x48, 0x49, 0x4a, 0x4b, 47static const unsigned short normal_i2c[] = { 0x48, 0x49, 0x4a, 0x4b,
48 I2C_CLIENT_END }; 48 I2C_CLIENT_END };
49 49
50/* Insmod parameters */ 50/* Insmod parameters */
diff --git a/drivers/hwmon/adt7470.c b/drivers/hwmon/adt7470.c
index 747693ab2ff1..6b5325f33a2c 100644
--- a/drivers/hwmon/adt7470.c
+++ b/drivers/hwmon/adt7470.c
@@ -30,7 +30,7 @@
30#include <linux/log2.h> 30#include <linux/log2.h>
31 31
32/* Addresses to scan */ 32/* Addresses to scan */
33static unsigned short normal_i2c[] = { 0x2C, 0x2E, 0x2F, I2C_CLIENT_END }; 33static const unsigned short normal_i2c[] = { 0x2C, 0x2E, 0x2F, I2C_CLIENT_END };
34 34
35/* Insmod parameters */ 35/* Insmod parameters */
36I2C_CLIENT_INSMOD_1(adt7470); 36I2C_CLIENT_INSMOD_1(adt7470);
diff --git a/drivers/hwmon/adt7473.c b/drivers/hwmon/adt7473.c
new file mode 100644
index 000000000000..9587869bdba0
--- /dev/null
+++ b/drivers/hwmon/adt7473.c
@@ -0,0 +1,1157 @@
1/*
2 * A hwmon driver for the Analog Devices ADT7473
3 * Copyright (C) 2007 IBM
4 *
5 * Author: Darrick J. Wong <djwong@us.ibm.com>
6 *
7 * This program is free software; you can redistribute it and/or modify
8 * it under the terms of the GNU General Public License as published by
9 * the Free Software Foundation; either version 2 of the License, or
10 * (at your option) any later version.
11 *
12 * This program is distributed in the hope that it will be useful,
13 * but WITHOUT ANY WARRANTY; without even the implied warranty of
14 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
15 * GNU General Public License for more details.
16 *
17 * You should have received a copy of the GNU General Public License
18 * along with this program; if not, write to the Free Software
19 * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
20 */
21
22#include <linux/module.h>
23#include <linux/jiffies.h>
24#include <linux/i2c.h>
25#include <linux/hwmon.h>
26#include <linux/hwmon-sysfs.h>
27#include <linux/err.h>
28#include <linux/mutex.h>
29#include <linux/delay.h>
30#include <linux/log2.h>
31
32/* Addresses to scan */
33static const unsigned short normal_i2c[] = { 0x2C, 0x2D, 0x2E, I2C_CLIENT_END };
34
35/* Insmod parameters */
36I2C_CLIENT_INSMOD_1(adt7473);
37
38/* ADT7473 registers */
39#define ADT7473_REG_BASE_ADDR 0x20
40
41#define ADT7473_REG_VOLT_BASE_ADDR 0x21
42#define ADT7473_REG_VOLT_MAX_ADDR 0x22
43#define ADT7473_REG_VOLT_MIN_BASE_ADDR 0x46
44#define ADT7473_REG_VOLT_MIN_MAX_ADDR 0x49
45
46#define ADT7473_REG_TEMP_BASE_ADDR 0x25
47#define ADT7473_REG_TEMP_MAX_ADDR 0x27
48#define ADT7473_REG_TEMP_LIMITS_BASE_ADDR 0x4E
49#define ADT7473_REG_TEMP_LIMITS_MAX_ADDR 0x53
50#define ADT7473_REG_TEMP_TMIN_BASE_ADDR 0x67
51#define ADT7473_REG_TEMP_TMIN_MAX_ADDR 0x69
52#define ADT7473_REG_TEMP_TMAX_BASE_ADDR 0x6A
53#define ADT7473_REG_TEMP_TMAX_MAX_ADDR 0x6C
54
55#define ADT7473_REG_FAN_BASE_ADDR 0x28
56#define ADT7473_REG_FAN_MAX_ADDR 0x2F
57#define ADT7473_REG_FAN_MIN_BASE_ADDR 0x54
58#define ADT7473_REG_FAN_MIN_MAX_ADDR 0x5B
59
60#define ADT7473_REG_PWM_BASE_ADDR 0x30
61#define ADT7473_REG_PWM_MAX_ADDR 0x32
62#define ADT7473_REG_PWM_MIN_BASE_ADDR 0x64
63#define ADT7473_REG_PWM_MIN_MAX_ADDR 0x66
64#define ADT7473_REG_PWM_MAX_BASE_ADDR 0x38
65#define ADT7473_REG_PWM_MAX_MAX_ADDR 0x3A
66#define ADT7473_REG_PWM_BHVR_BASE_ADDR 0x5C
67#define ADT7473_REG_PWM_BHVR_MAX_ADDR 0x5E
68#define ADT7473_PWM_BHVR_MASK 0xE0
69#define ADT7473_PWM_BHVR_SHIFT 5
70
71#define ADT7473_REG_CFG1 0x40
72#define ADT7473_CFG1_START 0x01
73#define ADT7473_CFG1_READY 0x04
74#define ADT7473_REG_CFG2 0x73
75#define ADT7473_REG_CFG3 0x78
76#define ADT7473_REG_CFG4 0x7D
77#define ADT7473_CFG4_MAX_DUTY_AT_OVT 0x08
78#define ADT7473_REG_CFG5 0x7C
79#define ADT7473_CFG5_TEMP_TWOS 0x01
80#define ADT7473_CFG5_TEMP_OFFSET 0x02
81
82#define ADT7473_REG_DEVICE 0x3D
83#define ADT7473_VENDOR 0x41
84#define ADT7473_REG_VENDOR 0x3E
85#define ADT7473_DEVICE 0x73
86#define ADT7473_REG_REVISION 0x3F
87#define ADT7473_REV_68 0x68
88#define ADT7473_REV_69 0x69
89
90#define ADT7473_REG_ALARM1 0x41
91#define ADT7473_VCCP_ALARM 0x02
92#define ADT7473_VCC_ALARM 0x04
93#define ADT7473_R1T_ALARM 0x10
94#define ADT7473_LT_ALARM 0x20
95#define ADT7473_R2T_ALARM 0x40
96#define ADT7473_OOL 0x80
97#define ADT7473_REG_ALARM2 0x42
98#define ADT7473_OVT_ALARM 0x02
99#define ADT7473_FAN1_ALARM 0x04
100#define ADT7473_FAN2_ALARM 0x08
101#define ADT7473_FAN3_ALARM 0x10
102#define ADT7473_FAN4_ALARM 0x20
103#define ADT7473_R1T_SHORT 0x40
104#define ADT7473_R2T_SHORT 0x80
105#define ADT7473_REG_MAX_ADDR 0x80
106
107#define ALARM2(x) ((x) << 8)
108
109#define ADT7473_VOLT_COUNT 2
110#define ADT7473_REG_VOLT(x) (ADT7473_REG_VOLT_BASE_ADDR + (x))
111#define ADT7473_REG_VOLT_MIN(x) (ADT7473_REG_VOLT_MIN_BASE_ADDR + ((x) * 2))
112#define ADT7473_REG_VOLT_MAX(x) (ADT7473_REG_VOLT_MIN_BASE_ADDR + \
113 ((x) * 2) + 1)
114
115#define ADT7473_TEMP_COUNT 3
116#define ADT7473_REG_TEMP(x) (ADT7473_REG_TEMP_BASE_ADDR + (x))
117#define ADT7473_REG_TEMP_MIN(x) (ADT7473_REG_TEMP_LIMITS_BASE_ADDR + ((x) * 2))
118#define ADT7473_REG_TEMP_MAX(x) (ADT7473_REG_TEMP_LIMITS_BASE_ADDR + \
119 ((x) * 2) + 1)
120#define ADT7473_REG_TEMP_TMIN(x) (ADT7473_REG_TEMP_TMIN_BASE_ADDR + (x))
121#define ADT7473_REG_TEMP_TMAX(x) (ADT7473_REG_TEMP_TMAX_BASE_ADDR + (x))
122
123#define ADT7473_FAN_COUNT 4
124#define ADT7473_REG_FAN(x) (ADT7473_REG_FAN_BASE_ADDR + ((x) * 2))
125#define ADT7473_REG_FAN_MIN(x) (ADT7473_REG_FAN_MIN_BASE_ADDR + ((x) * 2))
126
127#define ADT7473_PWM_COUNT 3
128#define ADT7473_REG_PWM(x) (ADT7473_REG_PWM_BASE_ADDR + (x))
129#define ADT7473_REG_PWM_MAX(x) (ADT7473_REG_PWM_MAX_BASE_ADDR + (x))
130#define ADT7473_REG_PWM_MIN(x) (ADT7473_REG_PWM_MIN_BASE_ADDR + (x))
131#define ADT7473_REG_PWM_BHVR(x) (ADT7473_REG_PWM_BHVR_BASE_ADDR + (x))
132
133/* How often do we reread sensors values? (In jiffies) */
134#define SENSOR_REFRESH_INTERVAL (2 * HZ)
135
136/* How often do we reread sensor limit values? (In jiffies) */
137#define LIMIT_REFRESH_INTERVAL (60 * HZ)
138
139/* datasheet says to divide this number by the fan reading to get fan rpm */
140#define FAN_PERIOD_TO_RPM(x) ((90000 * 60) / (x))
141#define FAN_RPM_TO_PERIOD FAN_PERIOD_TO_RPM
142#define FAN_PERIOD_INVALID 65535
143#define FAN_DATA_VALID(x) ((x) && (x) != FAN_PERIOD_INVALID)
144
145struct adt7473_data {
146 struct i2c_client client;
147 struct device *hwmon_dev;
148 struct attribute_group attrs;
149 struct mutex lock;
150 char sensors_valid;
151 char limits_valid;
152 unsigned long sensors_last_updated; /* In jiffies */
153 unsigned long limits_last_updated; /* In jiffies */
154
155 u8 volt[ADT7473_VOLT_COUNT];
156 s8 volt_min[ADT7473_VOLT_COUNT];
157 s8 volt_max[ADT7473_VOLT_COUNT];
158
159 s8 temp[ADT7473_TEMP_COUNT];
160 s8 temp_min[ADT7473_TEMP_COUNT];
161 s8 temp_max[ADT7473_TEMP_COUNT];
162 s8 temp_tmin[ADT7473_TEMP_COUNT];
163 /* This is called the !THERM limit in the datasheet */
164 s8 temp_tmax[ADT7473_TEMP_COUNT];
165
166 u16 fan[ADT7473_FAN_COUNT];
167 u16 fan_min[ADT7473_FAN_COUNT];
168
169 u8 pwm[ADT7473_PWM_COUNT];
170 u8 pwm_max[ADT7473_PWM_COUNT];
171 u8 pwm_min[ADT7473_PWM_COUNT];
172 u8 pwm_behavior[ADT7473_PWM_COUNT];
173
174 u8 temp_twos_complement;
175 u8 temp_offset;
176
177 u16 alarm;
178 u8 max_duty_at_overheat;
179};
180
181static int adt7473_attach_adapter(struct i2c_adapter *adapter);
182static int adt7473_detect(struct i2c_adapter *adapter, int address, int kind);
183static int adt7473_detach_client(struct i2c_client *client);
184
185static struct i2c_driver adt7473_driver = {
186 .driver = {
187 .name = "adt7473",
188 },
189 .attach_adapter = adt7473_attach_adapter,
190 .detach_client = adt7473_detach_client,
191};
192
193/*
194 * 16-bit registers on the ADT7473 are low-byte first. The data sheet says
195 * that the low byte must be read before the high byte.
196 */
197static inline int adt7473_read_word_data(struct i2c_client *client, u8 reg)
198{
199 u16 foo;
200 foo = i2c_smbus_read_byte_data(client, reg);
201 foo |= ((u16)i2c_smbus_read_byte_data(client, reg + 1) << 8);
202 return foo;
203}
204
205static inline int adt7473_write_word_data(struct i2c_client *client, u8 reg,
206 u16 value)
207{
208 return i2c_smbus_write_byte_data(client, reg, value & 0xFF)
209 && i2c_smbus_write_byte_data(client, reg + 1, value >> 8);
210}
211
212static void adt7473_init_client(struct i2c_client *client)
213{
214 int reg = i2c_smbus_read_byte_data(client, ADT7473_REG_CFG1);
215
216 if (!(reg & ADT7473_CFG1_READY)) {
217 dev_err(&client->dev, "Chip not ready.\n");
218 } else {
219 /* start monitoring */
220 i2c_smbus_write_byte_data(client, ADT7473_REG_CFG1,
221 reg | ADT7473_CFG1_START);
222 }
223}
224
225static struct adt7473_data *adt7473_update_device(struct device *dev)
226{
227 struct i2c_client *client = to_i2c_client(dev);
228 struct adt7473_data *data = i2c_get_clientdata(client);
229 unsigned long local_jiffies = jiffies;
230 u8 cfg;
231 int i;
232
233 mutex_lock(&data->lock);
234 if (time_before(local_jiffies, data->sensors_last_updated +
235 SENSOR_REFRESH_INTERVAL)
236 && data->sensors_valid)
237 goto no_sensor_update;
238
239 for (i = 0; i < ADT7473_VOLT_COUNT; i++)
240 data->volt[i] = i2c_smbus_read_byte_data(client,
241 ADT7473_REG_VOLT(i));
242
243 /* Determine temperature encoding */
244 cfg = i2c_smbus_read_byte_data(client, ADT7473_REG_CFG5);
245 data->temp_twos_complement = (cfg & ADT7473_CFG5_TEMP_TWOS);
246
247 /*
248 * What does this do? it implies a variable temperature sensor
249 * offset, but the datasheet doesn't say anything about this bit
250 * and other parts of the datasheet imply that "offset64" mode
251 * means that you shift temp values by -64 if the above bit was set.
252 */
253 data->temp_offset = (cfg & ADT7473_CFG5_TEMP_OFFSET);
254
255 for (i = 0; i < ADT7473_TEMP_COUNT; i++)
256 data->temp[i] = i2c_smbus_read_byte_data(client,
257 ADT7473_REG_TEMP(i));
258
259 for (i = 0; i < ADT7473_FAN_COUNT; i++)
260 data->fan[i] = adt7473_read_word_data(client,
261 ADT7473_REG_FAN(i));
262
263 for (i = 0; i < ADT7473_PWM_COUNT; i++)
264 data->pwm[i] = i2c_smbus_read_byte_data(client,
265 ADT7473_REG_PWM(i));
266
267 data->alarm = i2c_smbus_read_byte_data(client, ADT7473_REG_ALARM1);
268 if (data->alarm & ADT7473_OOL)
269 data->alarm |= ALARM2(i2c_smbus_read_byte_data(client,
270 ADT7473_REG_ALARM2));
271
272 data->sensors_last_updated = local_jiffies;
273 data->sensors_valid = 1;
274
275no_sensor_update:
276 if (time_before(local_jiffies, data->limits_last_updated +
277 LIMIT_REFRESH_INTERVAL)
278 && data->limits_valid)
279 goto out;
280
281 for (i = 0; i < ADT7473_VOLT_COUNT; i++) {
282 data->volt_min[i] = i2c_smbus_read_byte_data(client,
283 ADT7473_REG_VOLT_MIN(i));
284 data->volt_max[i] = i2c_smbus_read_byte_data(client,
285 ADT7473_REG_VOLT_MAX(i));
286 }
287
288 for (i = 0; i < ADT7473_TEMP_COUNT; i++) {
289 data->temp_min[i] = i2c_smbus_read_byte_data(client,
290 ADT7473_REG_TEMP_MIN(i));
291 data->temp_max[i] = i2c_smbus_read_byte_data(client,
292 ADT7473_REG_TEMP_MAX(i));
293 data->temp_tmin[i] = i2c_smbus_read_byte_data(client,
294 ADT7473_REG_TEMP_TMIN(i));
295 data->temp_tmax[i] = i2c_smbus_read_byte_data(client,
296 ADT7473_REG_TEMP_TMAX(i));
297 }
298
299 for (i = 0; i < ADT7473_FAN_COUNT; i++)
300 data->fan_min[i] = adt7473_read_word_data(client,
301 ADT7473_REG_FAN_MIN(i));
302
303 for (i = 0; i < ADT7473_PWM_COUNT; i++) {
304 data->pwm_max[i] = i2c_smbus_read_byte_data(client,
305 ADT7473_REG_PWM_MAX(i));
306 data->pwm_min[i] = i2c_smbus_read_byte_data(client,
307 ADT7473_REG_PWM_MIN(i));
308 data->pwm_behavior[i] = i2c_smbus_read_byte_data(client,
309 ADT7473_REG_PWM_BHVR(i));
310 }
311
312 data->limits_last_updated = local_jiffies;
313 data->limits_valid = 1;
314
315out:
316 mutex_unlock(&data->lock);
317 return data;
318}
319
320/*
321 * On this chip, voltages are given as a count of steps between a minimum
322 * and maximum voltage, not a direct voltage.
323 */
324static const int volt_convert_table[][2] = {
325 {2997, 3},
326 {4395, 4},
327};
328
329static int decode_volt(int volt_index, u8 raw)
330{
331 int cmax = volt_convert_table[volt_index][0];
332 int cmin = volt_convert_table[volt_index][1];
333 return ((raw * (cmax - cmin)) / 255) + cmin;
334}
335
336static u8 encode_volt(int volt_index, int cooked)
337{
338 int cmax = volt_convert_table[volt_index][0];
339 int cmin = volt_convert_table[volt_index][1];
340 u8 x;
341
342 if (cooked > cmax)
343 cooked = cmax;
344 else if (cooked < cmin)
345 cooked = cmin;
346
347 x = ((cooked - cmin) * 255) / (cmax - cmin);
348
349 return x;
350}
351
352static ssize_t show_volt_min(struct device *dev,
353 struct device_attribute *devattr,
354 char *buf)
355{
356 struct sensor_device_attribute *attr = to_sensor_dev_attr(devattr);
357 struct adt7473_data *data = adt7473_update_device(dev);
358 return sprintf(buf, "%d\n",
359 decode_volt(attr->index, data->volt_min[attr->index]));
360}
361
362static ssize_t set_volt_min(struct device *dev,
363 struct device_attribute *devattr,
364 const char *buf,
365 size_t count)
366{
367 struct sensor_device_attribute *attr = to_sensor_dev_attr(devattr);
368 struct i2c_client *client = to_i2c_client(dev);
369 struct adt7473_data *data = i2c_get_clientdata(client);
370 int volt = encode_volt(attr->index, simple_strtol(buf, NULL, 10));
371
372 mutex_lock(&data->lock);
373 data->volt_min[attr->index] = volt;
374 i2c_smbus_write_byte_data(client, ADT7473_REG_VOLT_MIN(attr->index),
375 volt);
376 mutex_unlock(&data->lock);
377
378 return count;
379}
380
381static ssize_t show_volt_max(struct device *dev,
382 struct device_attribute *devattr,
383 char *buf)
384{
385 struct sensor_device_attribute *attr = to_sensor_dev_attr(devattr);
386 struct adt7473_data *data = adt7473_update_device(dev);
387 return sprintf(buf, "%d\n",
388 decode_volt(attr->index, data->volt_max[attr->index]));
389}
390
391static ssize_t set_volt_max(struct device *dev,
392 struct device_attribute *devattr,
393 const char *buf,
394 size_t count)
395{
396 struct sensor_device_attribute *attr = to_sensor_dev_attr(devattr);
397 struct i2c_client *client = to_i2c_client(dev);
398 struct adt7473_data *data = i2c_get_clientdata(client);
399 int volt = encode_volt(attr->index, simple_strtol(buf, NULL, 10));
400
401 mutex_lock(&data->lock);
402 data->volt_max[attr->index] = volt;
403 i2c_smbus_write_byte_data(client, ADT7473_REG_VOLT_MAX(attr->index),
404 volt);
405 mutex_unlock(&data->lock);
406
407 return count;
408}
409
410static ssize_t show_volt(struct device *dev, struct device_attribute *devattr,
411 char *buf)
412{
413 struct sensor_device_attribute *attr = to_sensor_dev_attr(devattr);
414 struct adt7473_data *data = adt7473_update_device(dev);
415
416 return sprintf(buf, "%d\n",
417 decode_volt(attr->index, data->volt[attr->index]));
418}
419
420/*
421 * This chip can report temperature data either as a two's complement
422 * number in the range -128 to 127, or as an unsigned number that must
423 * be offset by 64.
424 */
425static int decode_temp(struct adt7473_data *data, u8 raw)
426{
427 if (data->temp_twos_complement)
428 return (s8)raw;
429 return raw - 64;
430}
431
432static u8 encode_temp(struct adt7473_data *data, int cooked)
433{
434 if (data->temp_twos_complement)
435 return (cooked & 0xFF);
436 return cooked + 64;
437}
438
439static ssize_t show_temp_min(struct device *dev,
440 struct device_attribute *devattr,
441 char *buf)
442{
443 struct sensor_device_attribute *attr = to_sensor_dev_attr(devattr);
444 struct adt7473_data *data = adt7473_update_device(dev);
445 return sprintf(buf, "%d\n",
446 1000 * decode_temp(data, data->temp_min[attr->index]));
447}
448
449static ssize_t set_temp_min(struct device *dev,
450 struct device_attribute *devattr,
451 const char *buf,
452 size_t count)
453{
454 struct sensor_device_attribute *attr = to_sensor_dev_attr(devattr);
455 struct i2c_client *client = to_i2c_client(dev);
456 struct adt7473_data *data = i2c_get_clientdata(client);
457 int temp = simple_strtol(buf, NULL, 10) / 1000;
458 temp = encode_temp(data, temp);
459
460 mutex_lock(&data->lock);
461 data->temp_min[attr->index] = temp;
462 i2c_smbus_write_byte_data(client, ADT7473_REG_TEMP_MIN(attr->index),
463 temp);
464 mutex_unlock(&data->lock);
465
466 return count;
467}
468
469static ssize_t show_temp_max(struct device *dev,
470 struct device_attribute *devattr,
471 char *buf)
472{
473 struct sensor_device_attribute *attr = to_sensor_dev_attr(devattr);
474 struct adt7473_data *data = adt7473_update_device(dev);
475 return sprintf(buf, "%d\n",
476 1000 * decode_temp(data, data->temp_max[attr->index]));
477}
478
479static ssize_t set_temp_max(struct device *dev,
480 struct device_attribute *devattr,
481 const char *buf,
482 size_t count)
483{
484 struct sensor_device_attribute *attr = to_sensor_dev_attr(devattr);
485 struct i2c_client *client = to_i2c_client(dev);
486 struct adt7473_data *data = i2c_get_clientdata(client);
487 int temp = simple_strtol(buf, NULL, 10) / 1000;
488 temp = encode_temp(data, temp);
489
490 mutex_lock(&data->lock);
491 data->temp_max[attr->index] = temp;
492 i2c_smbus_write_byte_data(client, ADT7473_REG_TEMP_MAX(attr->index),
493 temp);
494 mutex_unlock(&data->lock);
495
496 return count;
497}
498
499static ssize_t show_temp(struct device *dev, struct device_attribute *devattr,
500 char *buf)
501{
502 struct sensor_device_attribute *attr = to_sensor_dev_attr(devattr);
503 struct adt7473_data *data = adt7473_update_device(dev);
504 return sprintf(buf, "%d\n",
505 1000 * decode_temp(data, data->temp[attr->index]));
506}
507
508static ssize_t show_fan_min(struct device *dev,
509 struct device_attribute *devattr,
510 char *buf)
511{
512 struct sensor_device_attribute *attr = to_sensor_dev_attr(devattr);
513 struct adt7473_data *data = adt7473_update_device(dev);
514
515 if (FAN_DATA_VALID(data->fan_min[attr->index]))
516 return sprintf(buf, "%d\n",
517 FAN_PERIOD_TO_RPM(data->fan_min[attr->index]));
518 else
519 return sprintf(buf, "0\n");
520}
521
522static ssize_t set_fan_min(struct device *dev,
523 struct device_attribute *devattr,
524 const char *buf, size_t count)
525{
526 struct sensor_device_attribute *attr = to_sensor_dev_attr(devattr);
527 struct i2c_client *client = to_i2c_client(dev);
528 struct adt7473_data *data = i2c_get_clientdata(client);
529 int temp = simple_strtol(buf, NULL, 10);
530
531 if (!temp)
532 return -EINVAL;
533 temp = FAN_RPM_TO_PERIOD(temp);
534
535 mutex_lock(&data->lock);
536 data->fan_min[attr->index] = temp;
537 adt7473_write_word_data(client, ADT7473_REG_FAN_MIN(attr->index), temp);
538 mutex_unlock(&data->lock);
539
540 return count;
541}
542
543static ssize_t show_fan(struct device *dev, struct device_attribute *devattr,
544 char *buf)
545{
546 struct sensor_device_attribute *attr = to_sensor_dev_attr(devattr);
547 struct adt7473_data *data = adt7473_update_device(dev);
548
549 if (FAN_DATA_VALID(data->fan[attr->index]))
550 return sprintf(buf, "%d\n",
551 FAN_PERIOD_TO_RPM(data->fan[attr->index]));
552 else
553 return sprintf(buf, "0\n");
554}
555
556static ssize_t show_max_duty_at_crit(struct device *dev,
557 struct device_attribute *devattr,
558 char *buf)
559{
560 struct adt7473_data *data = adt7473_update_device(dev);
561 return sprintf(buf, "%d\n", data->max_duty_at_overheat);
562}
563
564static ssize_t set_max_duty_at_crit(struct device *dev,
565 struct device_attribute *devattr,
566 const char *buf,
567 size_t count)
568{
569 u8 reg;
570 struct i2c_client *client = to_i2c_client(dev);
571 struct adt7473_data *data = i2c_get_clientdata(client);
572 int temp = simple_strtol(buf, NULL, 10);
573 temp = temp && 0xFF;
574
575 mutex_lock(&data->lock);
576 data->max_duty_at_overheat = temp;
577 reg = i2c_smbus_read_byte_data(client, ADT7473_REG_CFG4);
578 if (temp)
579 reg |= ADT7473_CFG4_MAX_DUTY_AT_OVT;
580 else
581 reg &= ~ADT7473_CFG4_MAX_DUTY_AT_OVT;
582 i2c_smbus_write_byte_data(client, ADT7473_REG_CFG4, reg);
583 mutex_unlock(&data->lock);
584
585 return count;
586}
587
588static ssize_t show_pwm(struct device *dev, struct device_attribute *devattr,
589 char *buf)
590{
591 struct sensor_device_attribute *attr = to_sensor_dev_attr(devattr);
592 struct adt7473_data *data = adt7473_update_device(dev);
593 return sprintf(buf, "%d\n", data->pwm[attr->index]);
594}
595
596static ssize_t set_pwm(struct device *dev, struct device_attribute *devattr,
597 const char *buf, size_t count)
598{
599 struct sensor_device_attribute *attr = to_sensor_dev_attr(devattr);
600 struct i2c_client *client = to_i2c_client(dev);
601 struct adt7473_data *data = i2c_get_clientdata(client);
602 int temp = simple_strtol(buf, NULL, 10);
603
604 mutex_lock(&data->lock);
605 data->pwm[attr->index] = temp;
606 i2c_smbus_write_byte_data(client, ADT7473_REG_PWM(attr->index), temp);
607 mutex_unlock(&data->lock);
608
609 return count;
610}
611
612static ssize_t show_pwm_max(struct device *dev,
613 struct device_attribute *devattr,
614 char *buf)
615{
616 struct sensor_device_attribute *attr = to_sensor_dev_attr(devattr);
617 struct adt7473_data *data = adt7473_update_device(dev);
618 return sprintf(buf, "%d\n", data->pwm_max[attr->index]);
619}
620
621static ssize_t set_pwm_max(struct device *dev,
622 struct device_attribute *devattr,
623 const char *buf,
624 size_t count)
625{
626 struct sensor_device_attribute *attr = to_sensor_dev_attr(devattr);
627 struct i2c_client *client = to_i2c_client(dev);
628 struct adt7473_data *data = i2c_get_clientdata(client);
629 int temp = simple_strtol(buf, NULL, 10);
630
631 mutex_lock(&data->lock);
632 data->pwm_max[attr->index] = temp;
633 i2c_smbus_write_byte_data(client, ADT7473_REG_PWM_MAX(attr->index),
634 temp);
635 mutex_unlock(&data->lock);
636
637 return count;
638}
639
640static ssize_t show_pwm_min(struct device *dev,
641 struct device_attribute *devattr,
642 char *buf)
643{
644 struct sensor_device_attribute *attr = to_sensor_dev_attr(devattr);
645 struct adt7473_data *data = adt7473_update_device(dev);
646 return sprintf(buf, "%d\n", data->pwm_min[attr->index]);
647}
648
649static ssize_t set_pwm_min(struct device *dev,
650 struct device_attribute *devattr,
651 const char *buf,
652 size_t count)
653{
654 struct sensor_device_attribute *attr = to_sensor_dev_attr(devattr);
655 struct i2c_client *client = to_i2c_client(dev);
656 struct adt7473_data *data = i2c_get_clientdata(client);
657 int temp = simple_strtol(buf, NULL, 10);
658
659 mutex_lock(&data->lock);
660 data->pwm_min[attr->index] = temp;
661 i2c_smbus_write_byte_data(client, ADT7473_REG_PWM_MIN(attr->index),
662 temp);
663 mutex_unlock(&data->lock);
664
665 return count;
666}
667
668static ssize_t show_temp_tmax(struct device *dev,
669 struct device_attribute *devattr,
670 char *buf)
671{
672 struct sensor_device_attribute *attr = to_sensor_dev_attr(devattr);
673 struct adt7473_data *data = adt7473_update_device(dev);
674 return sprintf(buf, "%d\n",
675 1000 * decode_temp(data, data->temp_tmax[attr->index]));
676}
677
678static ssize_t set_temp_tmax(struct device *dev,
679 struct device_attribute *devattr,
680 const char *buf,
681 size_t count)
682{
683 struct sensor_device_attribute *attr = to_sensor_dev_attr(devattr);
684 struct i2c_client *client = to_i2c_client(dev);
685 struct adt7473_data *data = i2c_get_clientdata(client);
686 int temp = simple_strtol(buf, NULL, 10) / 1000;
687 temp = encode_temp(data, temp);
688
689 mutex_lock(&data->lock);
690 data->temp_tmax[attr->index] = temp;
691 i2c_smbus_write_byte_data(client, ADT7473_REG_TEMP_TMAX(attr->index),
692 temp);
693 mutex_unlock(&data->lock);
694
695 return count;
696}
697
698static ssize_t show_temp_tmin(struct device *dev,
699 struct device_attribute *devattr,
700 char *buf)
701{
702 struct sensor_device_attribute *attr = to_sensor_dev_attr(devattr);
703 struct adt7473_data *data = adt7473_update_device(dev);
704 return sprintf(buf, "%d\n",
705 1000 * decode_temp(data, data->temp_tmin[attr->index]));
706}
707
708static ssize_t set_temp_tmin(struct device *dev,
709 struct device_attribute *devattr,
710 const char *buf,
711 size_t count)
712{
713 struct sensor_device_attribute *attr = to_sensor_dev_attr(devattr);
714 struct i2c_client *client = to_i2c_client(dev);
715 struct adt7473_data *data = i2c_get_clientdata(client);
716 int temp = simple_strtol(buf, NULL, 10) / 1000;
717 temp = encode_temp(data, temp);
718
719 mutex_lock(&data->lock);
720 data->temp_tmin[attr->index] = temp;
721 i2c_smbus_write_byte_data(client, ADT7473_REG_TEMP_TMIN(attr->index),
722 temp);
723 mutex_unlock(&data->lock);
724
725 return count;
726}
727
728static ssize_t show_pwm_enable(struct device *dev,
729 struct device_attribute *devattr,
730 char *buf)
731{
732 struct sensor_device_attribute *attr = to_sensor_dev_attr(devattr);
733 struct adt7473_data *data = adt7473_update_device(dev);
734
735 switch (data->pwm_behavior[attr->index] >> ADT7473_PWM_BHVR_SHIFT) {
736 case 3:
737 return sprintf(buf, "0\n");
738 case 7:
739 return sprintf(buf, "1\n");
740 default:
741 return sprintf(buf, "2\n");
742 }
743}
744
745static ssize_t set_pwm_enable(struct device *dev,
746 struct device_attribute *devattr,
747 const char *buf,
748 size_t count)
749{
750 u8 reg;
751 struct sensor_device_attribute *attr = to_sensor_dev_attr(devattr);
752 struct i2c_client *client = to_i2c_client(dev);
753 struct adt7473_data *data = i2c_get_clientdata(client);
754 int temp = simple_strtol(buf, NULL, 10);
755
756 switch (temp) {
757 case 0:
758 temp = 3;
759 break;
760 case 1:
761 temp = 7;
762 break;
763 case 2:
764 /* Enter automatic mode with fans off */
765 temp = 4;
766 break;
767 default:
768 return -EINVAL;
769 }
770
771 mutex_lock(&data->lock);
772 reg = i2c_smbus_read_byte_data(client,
773 ADT7473_REG_PWM_BHVR(attr->index));
774 reg = (temp << ADT7473_PWM_BHVR_SHIFT) |
775 (reg & ~ADT7473_PWM_BHVR_MASK);
776 i2c_smbus_write_byte_data(client, ADT7473_REG_PWM_BHVR(attr->index),
777 reg);
778 data->pwm_behavior[attr->index] = reg;
779 mutex_unlock(&data->lock);
780
781 return count;
782}
783
784static ssize_t show_pwm_auto_temp(struct device *dev,
785 struct device_attribute *devattr,
786 char *buf)
787{
788 struct sensor_device_attribute *attr = to_sensor_dev_attr(devattr);
789 struct adt7473_data *data = adt7473_update_device(dev);
790 int bhvr = data->pwm_behavior[attr->index] >> ADT7473_PWM_BHVR_SHIFT;
791
792 switch (bhvr) {
793 case 3:
794 case 4:
795 case 7:
796 return sprintf(buf, "0\n");
797 case 0:
798 case 1:
799 case 5:
800 case 6:
801 return sprintf(buf, "%d\n", bhvr + 1);
802 case 2:
803 return sprintf(buf, "4\n");
804 }
805 /* shouldn't ever get here */
806 BUG();
807}
808
809static ssize_t set_pwm_auto_temp(struct device *dev,
810 struct device_attribute *devattr,
811 const char *buf,
812 size_t count)
813{
814 u8 reg;
815 struct sensor_device_attribute *attr = to_sensor_dev_attr(devattr);
816 struct i2c_client *client = to_i2c_client(dev);
817 struct adt7473_data *data = i2c_get_clientdata(client);
818 int temp = simple_strtol(buf, NULL, 10);
819
820 switch (temp) {
821 case 1:
822 case 2:
823 case 6:
824 case 7:
825 temp--;
826 break;
827 case 0:
828 temp = 4;
829 break;
830 default:
831 return -EINVAL;
832 }
833
834 mutex_lock(&data->lock);
835 reg = i2c_smbus_read_byte_data(client,
836 ADT7473_REG_PWM_BHVR(attr->index));
837 reg = (temp << ADT7473_PWM_BHVR_SHIFT) |
838 (reg & ~ADT7473_PWM_BHVR_MASK);
839 i2c_smbus_write_byte_data(client, ADT7473_REG_PWM_BHVR(attr->index),
840 reg);
841 data->pwm_behavior[attr->index] = reg;
842 mutex_unlock(&data->lock);
843
844 return count;
845}
846
847static ssize_t show_alarm(struct device *dev,
848 struct device_attribute *devattr,
849 char *buf)
850{
851 struct sensor_device_attribute *attr = to_sensor_dev_attr(devattr);
852 struct adt7473_data *data = adt7473_update_device(dev);
853
854 if (data->alarm & attr->index)
855 return sprintf(buf, "1\n");
856 else
857 return sprintf(buf, "0\n");
858}
859
860
861static SENSOR_DEVICE_ATTR(in1_max, S_IWUSR | S_IRUGO, show_volt_max,
862 set_volt_max, 0);
863static SENSOR_DEVICE_ATTR(in2_max, S_IWUSR | S_IRUGO, show_volt_max,
864 set_volt_max, 1);
865
866static SENSOR_DEVICE_ATTR(in1_min, S_IWUSR | S_IRUGO, show_volt_min,
867 set_volt_min, 0);
868static SENSOR_DEVICE_ATTR(in2_min, S_IWUSR | S_IRUGO, show_volt_min,
869 set_volt_min, 1);
870
871static SENSOR_DEVICE_ATTR(in1_input, S_IRUGO, show_volt, NULL, 0);
872static SENSOR_DEVICE_ATTR(in2_input, S_IRUGO, show_volt, NULL, 1);
873
874static SENSOR_DEVICE_ATTR(in1_alarm, S_IRUGO, show_alarm, NULL,
875 ADT7473_VCCP_ALARM);
876static SENSOR_DEVICE_ATTR(in2_alarm, S_IRUGO, show_alarm, NULL,
877 ADT7473_VCC_ALARM);
878
879static SENSOR_DEVICE_ATTR(temp1_max, S_IWUSR | S_IRUGO, show_temp_max,
880 set_temp_max, 0);
881static SENSOR_DEVICE_ATTR(temp2_max, S_IWUSR | S_IRUGO, show_temp_max,
882 set_temp_max, 1);
883static SENSOR_DEVICE_ATTR(temp3_max, S_IWUSR | S_IRUGO, show_temp_max,
884 set_temp_max, 2);
885
886static SENSOR_DEVICE_ATTR(temp1_min, S_IWUSR | S_IRUGO, show_temp_min,
887 set_temp_min, 0);
888static SENSOR_DEVICE_ATTR(temp2_min, S_IWUSR | S_IRUGO, show_temp_min,
889 set_temp_min, 1);
890static SENSOR_DEVICE_ATTR(temp3_min, S_IWUSR | S_IRUGO, show_temp_min,
891 set_temp_min, 2);
892
893static SENSOR_DEVICE_ATTR(temp1_input, S_IRUGO, show_temp, NULL, 0);
894static SENSOR_DEVICE_ATTR(temp2_input, S_IRUGO, show_temp, NULL, 1);
895static SENSOR_DEVICE_ATTR(temp3_input, S_IRUGO, show_temp, NULL, 2);
896
897static SENSOR_DEVICE_ATTR(temp1_alarm, S_IRUGO, show_alarm, NULL,
898 ADT7473_R1T_ALARM | ALARM2(ADT7473_R1T_SHORT));
899static SENSOR_DEVICE_ATTR(temp2_alarm, S_IRUGO, show_alarm, NULL,
900 ADT7473_LT_ALARM);
901static SENSOR_DEVICE_ATTR(temp3_alarm, S_IRUGO, show_alarm, NULL,
902 ADT7473_R2T_ALARM | ALARM2(ADT7473_R2T_SHORT));
903
904static SENSOR_DEVICE_ATTR(fan1_min, S_IWUSR | S_IRUGO, show_fan_min,
905 set_fan_min, 0);
906static SENSOR_DEVICE_ATTR(fan2_min, S_IWUSR | S_IRUGO, show_fan_min,
907 set_fan_min, 1);
908static SENSOR_DEVICE_ATTR(fan3_min, S_IWUSR | S_IRUGO, show_fan_min,
909 set_fan_min, 2);
910static SENSOR_DEVICE_ATTR(fan4_min, S_IWUSR | S_IRUGO, show_fan_min,
911 set_fan_min, 3);
912
913static SENSOR_DEVICE_ATTR(fan1_input, S_IRUGO, show_fan, NULL, 0);
914static SENSOR_DEVICE_ATTR(fan2_input, S_IRUGO, show_fan, NULL, 1);
915static SENSOR_DEVICE_ATTR(fan3_input, S_IRUGO, show_fan, NULL, 2);
916static SENSOR_DEVICE_ATTR(fan4_input, S_IRUGO, show_fan, NULL, 3);
917
918static SENSOR_DEVICE_ATTR(fan1_alarm, S_IRUGO, show_alarm, NULL,
919 ALARM2(ADT7473_FAN1_ALARM));
920static SENSOR_DEVICE_ATTR(fan2_alarm, S_IRUGO, show_alarm, NULL,
921 ALARM2(ADT7473_FAN2_ALARM));
922static SENSOR_DEVICE_ATTR(fan3_alarm, S_IRUGO, show_alarm, NULL,
923 ALARM2(ADT7473_FAN3_ALARM));
924static SENSOR_DEVICE_ATTR(fan4_alarm, S_IRUGO, show_alarm, NULL,
925 ALARM2(ADT7473_FAN4_ALARM));
926
927static SENSOR_DEVICE_ATTR(pwm_use_point2_pwm_at_crit, S_IWUSR | S_IRUGO,
928 show_max_duty_at_crit, set_max_duty_at_crit, 0);
929
930static SENSOR_DEVICE_ATTR(pwm1, S_IWUSR | S_IRUGO, show_pwm, set_pwm, 0);
931static SENSOR_DEVICE_ATTR(pwm2, S_IWUSR | S_IRUGO, show_pwm, set_pwm, 1);
932static SENSOR_DEVICE_ATTR(pwm3, S_IWUSR | S_IRUGO, show_pwm, set_pwm, 2);
933
934static SENSOR_DEVICE_ATTR(pwm1_auto_point1_pwm, S_IWUSR | S_IRUGO,
935 show_pwm_min, set_pwm_min, 0);
936static SENSOR_DEVICE_ATTR(pwm2_auto_point1_pwm, S_IWUSR | S_IRUGO,
937 show_pwm_min, set_pwm_min, 1);
938static SENSOR_DEVICE_ATTR(pwm3_auto_point1_pwm, S_IWUSR | S_IRUGO,
939 show_pwm_min, set_pwm_min, 2);
940
941static SENSOR_DEVICE_ATTR(pwm1_auto_point2_pwm, S_IWUSR | S_IRUGO,
942 show_pwm_max, set_pwm_max, 0);
943static SENSOR_DEVICE_ATTR(pwm2_auto_point2_pwm, S_IWUSR | S_IRUGO,
944 show_pwm_max, set_pwm_max, 1);
945static SENSOR_DEVICE_ATTR(pwm3_auto_point2_pwm, S_IWUSR | S_IRUGO,
946 show_pwm_max, set_pwm_max, 2);
947
948static SENSOR_DEVICE_ATTR(temp1_auto_point1_temp, S_IWUSR | S_IRUGO,
949 show_temp_tmin, set_temp_tmin, 0);
950static SENSOR_DEVICE_ATTR(temp2_auto_point1_temp, S_IWUSR | S_IRUGO,
951 show_temp_tmin, set_temp_tmin, 1);
952static SENSOR_DEVICE_ATTR(temp3_auto_point1_temp, S_IWUSR | S_IRUGO,
953 show_temp_tmin, set_temp_tmin, 2);
954
955static SENSOR_DEVICE_ATTR(temp1_auto_point2_temp, S_IWUSR | S_IRUGO,
956 show_temp_tmax, set_temp_tmax, 0);
957static SENSOR_DEVICE_ATTR(temp2_auto_point2_temp, S_IWUSR | S_IRUGO,
958 show_temp_tmax, set_temp_tmax, 1);
959static SENSOR_DEVICE_ATTR(temp3_auto_point2_temp, S_IWUSR | S_IRUGO,
960 show_temp_tmax, set_temp_tmax, 2);
961
962static SENSOR_DEVICE_ATTR(pwm1_enable, S_IWUSR | S_IRUGO, show_pwm_enable,
963 set_pwm_enable, 0);
964static SENSOR_DEVICE_ATTR(pwm2_enable, S_IWUSR | S_IRUGO, show_pwm_enable,
965 set_pwm_enable, 1);
966static SENSOR_DEVICE_ATTR(pwm3_enable, S_IWUSR | S_IRUGO, show_pwm_enable,
967 set_pwm_enable, 2);
968
969static SENSOR_DEVICE_ATTR(pwm1_auto_channels_temp, S_IWUSR | S_IRUGO,
970 show_pwm_auto_temp, set_pwm_auto_temp, 0);
971static SENSOR_DEVICE_ATTR(pwm2_auto_channels_temp, S_IWUSR | S_IRUGO,
972 show_pwm_auto_temp, set_pwm_auto_temp, 1);
973static SENSOR_DEVICE_ATTR(pwm3_auto_channels_temp, S_IWUSR | S_IRUGO,
974 show_pwm_auto_temp, set_pwm_auto_temp, 2);
975
976static struct attribute *adt7473_attr[] =
977{
978 &sensor_dev_attr_in1_max.dev_attr.attr,
979 &sensor_dev_attr_in2_max.dev_attr.attr,
980 &sensor_dev_attr_in1_min.dev_attr.attr,
981 &sensor_dev_attr_in2_min.dev_attr.attr,
982 &sensor_dev_attr_in1_input.dev_attr.attr,
983 &sensor_dev_attr_in2_input.dev_attr.attr,
984 &sensor_dev_attr_in1_alarm.dev_attr.attr,
985 &sensor_dev_attr_in2_alarm.dev_attr.attr,
986
987 &sensor_dev_attr_temp1_max.dev_attr.attr,
988 &sensor_dev_attr_temp2_max.dev_attr.attr,
989 &sensor_dev_attr_temp3_max.dev_attr.attr,
990 &sensor_dev_attr_temp1_min.dev_attr.attr,
991 &sensor_dev_attr_temp2_min.dev_attr.attr,
992 &sensor_dev_attr_temp3_min.dev_attr.attr,
993 &sensor_dev_attr_temp1_input.dev_attr.attr,
994 &sensor_dev_attr_temp2_input.dev_attr.attr,
995 &sensor_dev_attr_temp3_input.dev_attr.attr,
996 &sensor_dev_attr_temp1_alarm.dev_attr.attr,
997 &sensor_dev_attr_temp2_alarm.dev_attr.attr,
998 &sensor_dev_attr_temp3_alarm.dev_attr.attr,
999 &sensor_dev_attr_temp1_auto_point1_temp.dev_attr.attr,
1000 &sensor_dev_attr_temp2_auto_point1_temp.dev_attr.attr,
1001 &sensor_dev_attr_temp3_auto_point1_temp.dev_attr.attr,
1002 &sensor_dev_attr_temp1_auto_point2_temp.dev_attr.attr,
1003 &sensor_dev_attr_temp2_auto_point2_temp.dev_attr.attr,
1004 &sensor_dev_attr_temp3_auto_point2_temp.dev_attr.attr,
1005
1006 &sensor_dev_attr_fan1_min.dev_attr.attr,
1007 &sensor_dev_attr_fan2_min.dev_attr.attr,
1008 &sensor_dev_attr_fan3_min.dev_attr.attr,
1009 &sensor_dev_attr_fan4_min.dev_attr.attr,
1010 &sensor_dev_attr_fan1_input.dev_attr.attr,
1011 &sensor_dev_attr_fan2_input.dev_attr.attr,
1012 &sensor_dev_attr_fan3_input.dev_attr.attr,
1013 &sensor_dev_attr_fan4_input.dev_attr.attr,
1014 &sensor_dev_attr_fan1_alarm.dev_attr.attr,
1015 &sensor_dev_attr_fan2_alarm.dev_attr.attr,
1016 &sensor_dev_attr_fan3_alarm.dev_attr.attr,
1017 &sensor_dev_attr_fan4_alarm.dev_attr.attr,
1018
1019 &sensor_dev_attr_pwm_use_point2_pwm_at_crit.dev_attr.attr,
1020
1021 &sensor_dev_attr_pwm1.dev_attr.attr,
1022 &sensor_dev_attr_pwm2.dev_attr.attr,
1023 &sensor_dev_attr_pwm3.dev_attr.attr,
1024 &sensor_dev_attr_pwm1_auto_point1_pwm.dev_attr.attr,
1025 &sensor_dev_attr_pwm2_auto_point1_pwm.dev_attr.attr,
1026 &sensor_dev_attr_pwm3_auto_point1_pwm.dev_attr.attr,
1027 &sensor_dev_attr_pwm1_auto_point2_pwm.dev_attr.attr,
1028 &sensor_dev_attr_pwm2_auto_point2_pwm.dev_attr.attr,
1029 &sensor_dev_attr_pwm3_auto_point2_pwm.dev_attr.attr,
1030
1031 &sensor_dev_attr_pwm1_enable.dev_attr.attr,
1032 &sensor_dev_attr_pwm2_enable.dev_attr.attr,
1033 &sensor_dev_attr_pwm3_enable.dev_attr.attr,
1034 &sensor_dev_attr_pwm1_auto_channels_temp.dev_attr.attr,
1035 &sensor_dev_attr_pwm2_auto_channels_temp.dev_attr.attr,
1036 &sensor_dev_attr_pwm3_auto_channels_temp.dev_attr.attr,
1037
1038 NULL
1039};
1040
1041static int adt7473_attach_adapter(struct i2c_adapter *adapter)
1042{
1043 if (!(adapter->class & I2C_CLASS_HWMON))
1044 return 0;
1045 return i2c_probe(adapter, &addr_data, adt7473_detect);
1046}
1047
1048static int adt7473_detect(struct i2c_adapter *adapter, int address, int kind)
1049{
1050 struct i2c_client *client;
1051 struct adt7473_data *data;
1052 int err = 0;
1053
1054 if (!i2c_check_functionality(adapter, I2C_FUNC_SMBUS_BYTE_DATA))
1055 goto exit;
1056
1057 data = kzalloc(sizeof(struct adt7473_data), GFP_KERNEL);
1058 if (!data) {
1059 err = -ENOMEM;
1060 goto exit;
1061 }
1062
1063 client = &data->client;
1064 client->addr = address;
1065 client->adapter = adapter;
1066 client->driver = &adt7473_driver;
1067
1068 i2c_set_clientdata(client, data);
1069
1070 mutex_init(&data->lock);
1071
1072 if (kind <= 0) {
1073 int vendor, device, revision;
1074
1075 vendor = i2c_smbus_read_byte_data(client, ADT7473_REG_VENDOR);
1076 if (vendor != ADT7473_VENDOR) {
1077 err = -ENODEV;
1078 goto exit_free;
1079 }
1080
1081 device = i2c_smbus_read_byte_data(client, ADT7473_REG_DEVICE);
1082 if (device != ADT7473_DEVICE) {
1083 err = -ENODEV;
1084 goto exit_free;
1085 }
1086
1087 revision = i2c_smbus_read_byte_data(client,
1088 ADT7473_REG_REVISION);
1089 if (revision != ADT7473_REV_68 && revision != ADT7473_REV_69) {
1090 err = -ENODEV;
1091 goto exit_free;
1092 }
1093 } else
1094 dev_dbg(&adapter->dev, "detection forced\n");
1095
1096 strlcpy(client->name, "adt7473", I2C_NAME_SIZE);
1097
1098 err = i2c_attach_client(client);
1099 if (err)
1100 goto exit_free;
1101
1102 dev_info(&client->dev, "%s chip found\n", client->name);
1103
1104 /* Initialize the ADT7473 chip */
1105 adt7473_init_client(client);
1106
1107 /* Register sysfs hooks */
1108 data->attrs.attrs = adt7473_attr;
1109 err = sysfs_create_group(&client->dev.kobj, &data->attrs);
1110 if (err)
1111 goto exit_detach;
1112
1113 data->hwmon_dev = hwmon_device_register(&client->dev);
1114 if (IS_ERR(data->hwmon_dev)) {
1115 err = PTR_ERR(data->hwmon_dev);
1116 goto exit_remove;
1117 }
1118
1119 return 0;
1120
1121exit_remove:
1122 sysfs_remove_group(&client->dev.kobj, &data->attrs);
1123exit_detach:
1124 i2c_detach_client(client);
1125exit_free:
1126 kfree(data);
1127exit:
1128 return err;
1129}
1130
1131static int adt7473_detach_client(struct i2c_client *client)
1132{
1133 struct adt7473_data *data = i2c_get_clientdata(client);
1134
1135 hwmon_device_unregister(data->hwmon_dev);
1136 sysfs_remove_group(&client->dev.kobj, &data->attrs);
1137 i2c_detach_client(client);
1138 kfree(data);
1139 return 0;
1140}
1141
1142static int __init adt7473_init(void)
1143{
1144 return i2c_add_driver(&adt7473_driver);
1145}
1146
1147static void __exit adt7473_exit(void)
1148{
1149 i2c_del_driver(&adt7473_driver);
1150}
1151
1152MODULE_AUTHOR("Darrick J. Wong <djwong@us.ibm.com>");
1153MODULE_DESCRIPTION("ADT7473 driver");
1154MODULE_LICENSE("GPL");
1155
1156module_init(adt7473_init);
1157module_exit(adt7473_exit);
diff --git a/drivers/hwmon/applesmc.c b/drivers/hwmon/applesmc.c
index 0c94770b7f83..aacc0c4b809c 100644
--- a/drivers/hwmon/applesmc.c
+++ b/drivers/hwmon/applesmc.c
@@ -84,12 +84,15 @@ static const char* temperature_sensors_sets[][36] = {
84/* Set 0: Macbook Pro */ 84/* Set 0: Macbook Pro */
85 { "TA0P", "TB0T", "TC0D", "TC0P", "TG0H", "TG0P", "TG0T", "Th0H", 85 { "TA0P", "TB0T", "TC0D", "TC0P", "TG0H", "TG0P", "TG0T", "Th0H",
86 "Th1H", "Tm0P", "Ts0P", "Ts1P", NULL }, 86 "Th1H", "Tm0P", "Ts0P", "Ts1P", NULL },
87/* Set 1: Macbook set */ 87/* Set 1: Macbook2 set */
88 { "TB0T", "TC0D", "TC0P", "TM0P", "TN0P", "TN1P", "TTF0", "Th0H",
89 "Th0S", "Th1H", NULL },
90/* Set 2: Macbook set */
88 { "TB0T", "TC0D", "TC0P", "TM0P", "TN0P", "TN1P", "Th0H", "Th0S", 91 { "TB0T", "TC0D", "TC0P", "TM0P", "TN0P", "TN1P", "Th0H", "Th0S",
89 "Th1H", "Ts0P", NULL }, 92 "Th1H", "Ts0P", NULL },
90/* Set 2: Macmini set */ 93/* Set 3: Macmini set */
91 { "TC0D", "TC0P", NULL }, 94 { "TC0D", "TC0P", NULL },
92/* Set 3: Mac Pro (2 x Quad-Core) */ 95/* Set 4: Mac Pro (2 x Quad-Core) */
93 { "TA0P", "TCAG", "TCAH", "TCBG", "TCBH", "TC0C", "TC0D", "TC0P", 96 { "TA0P", "TCAG", "TCAH", "TCBG", "TCBH", "TC0C", "TC0D", "TC0P",
94 "TC1C", "TC1D", "TC2C", "TC2D", "TC3C", "TC3D", "THTG", "TH0P", 97 "TC1C", "TC1D", "TC2C", "TC2D", "TC3C", "TC3D", "THTG", "TH0P",
95 "TH1P", "TH2P", "TH3P", "TMAP", "TMAS", "TMBS", "TM0P", "TM0S", 98 "TH1P", "TH2P", "TH3P", "TMAP", "TMAS", "TMBS", "TM0P", "TM0S",
@@ -1212,12 +1215,14 @@ static void applesmc_release_accelerometer(void)
1212static __initdata struct dmi_match_data applesmc_dmi_data[] = { 1215static __initdata struct dmi_match_data applesmc_dmi_data[] = {
1213/* MacBook Pro: accelerometer, backlight and temperature set 0 */ 1216/* MacBook Pro: accelerometer, backlight and temperature set 0 */
1214 { .accelerometer = 1, .light = 1, .temperature_set = 0 }, 1217 { .accelerometer = 1, .light = 1, .temperature_set = 0 },
1215/* MacBook: accelerometer and temperature set 1 */ 1218/* MacBook2: accelerometer and temperature set 1 */
1216 { .accelerometer = 1, .light = 0, .temperature_set = 1 }, 1219 { .accelerometer = 1, .light = 0, .temperature_set = 1 },
1217/* MacMini: temperature set 2 */ 1220/* MacBook: accelerometer and temperature set 2 */
1218 { .accelerometer = 0, .light = 0, .temperature_set = 2 }, 1221 { .accelerometer = 1, .light = 0, .temperature_set = 2 },
1219/* MacPro: temperature set 3 */ 1222/* MacMini: temperature set 3 */
1220 { .accelerometer = 0, .light = 0, .temperature_set = 3 }, 1223 { .accelerometer = 0, .light = 0, .temperature_set = 3 },
1224/* MacPro: temperature set 4 */
1225 { .accelerometer = 0, .light = 0, .temperature_set = 4 },
1221}; 1226};
1222 1227
1223/* Note that DMI_MATCH(...,"MacBook") will match "MacBookPro1,1". 1228/* Note that DMI_MATCH(...,"MacBook") will match "MacBookPro1,1".
@@ -1229,16 +1234,20 @@ static __initdata struct dmi_system_id applesmc_whitelist[] = {
1229 (void*)&applesmc_dmi_data[0]}, 1234 (void*)&applesmc_dmi_data[0]},
1230 { applesmc_dmi_match, "Apple MacBook", { 1235 { applesmc_dmi_match, "Apple MacBook", {
1231 DMI_MATCH(DMI_BOARD_VENDOR,"Apple"), 1236 DMI_MATCH(DMI_BOARD_VENDOR,"Apple"),
1232 DMI_MATCH(DMI_PRODUCT_NAME,"MacBook") }, 1237 DMI_MATCH(DMI_PRODUCT_NAME,"MacBook2") },
1233 (void*)&applesmc_dmi_data[1]}, 1238 (void*)&applesmc_dmi_data[1]},
1239 { applesmc_dmi_match, "Apple MacBook", {
1240 DMI_MATCH(DMI_BOARD_VENDOR,"Apple"),
1241 DMI_MATCH(DMI_PRODUCT_NAME,"MacBook") },
1242 (void*)&applesmc_dmi_data[2]},
1234 { applesmc_dmi_match, "Apple Macmini", { 1243 { applesmc_dmi_match, "Apple Macmini", {
1235 DMI_MATCH(DMI_BOARD_VENDOR,"Apple"), 1244 DMI_MATCH(DMI_BOARD_VENDOR,"Apple"),
1236 DMI_MATCH(DMI_PRODUCT_NAME,"Macmini") }, 1245 DMI_MATCH(DMI_PRODUCT_NAME,"Macmini") },
1237 (void*)&applesmc_dmi_data[2]}, 1246 (void*)&applesmc_dmi_data[3]},
1238 { applesmc_dmi_match, "Apple MacPro2", { 1247 { applesmc_dmi_match, "Apple MacPro2", {
1239 DMI_MATCH(DMI_BOARD_VENDOR,"Apple"), 1248 DMI_MATCH(DMI_BOARD_VENDOR,"Apple"),
1240 DMI_MATCH(DMI_PRODUCT_NAME,"MacPro2") }, 1249 DMI_MATCH(DMI_PRODUCT_NAME,"MacPro2") },
1241 (void*)&applesmc_dmi_data[3]}, 1250 (void*)&applesmc_dmi_data[4]},
1242 { .ident = NULL } 1251 { .ident = NULL }
1243}; 1252};
1244 1253
diff --git a/drivers/hwmon/asb100.c b/drivers/hwmon/asb100.c
index 950cea8d1d65..84712a22acea 100644
--- a/drivers/hwmon/asb100.c
+++ b/drivers/hwmon/asb100.c
@@ -49,7 +49,7 @@
49#include "lm75.h" 49#include "lm75.h"
50 50
51/* I2C addresses to scan */ 51/* I2C addresses to scan */
52static unsigned short normal_i2c[] = { 0x2d, I2C_CLIENT_END }; 52static const unsigned short normal_i2c[] = { 0x2d, I2C_CLIENT_END };
53 53
54/* Insmod parameters */ 54/* Insmod parameters */
55I2C_CLIENT_INSMOD_1(asb100); 55I2C_CLIENT_INSMOD_1(asb100);
diff --git a/drivers/hwmon/atxp1.c b/drivers/hwmon/atxp1.c
index cce3350e539e..01c17e387f03 100644
--- a/drivers/hwmon/atxp1.c
+++ b/drivers/hwmon/atxp1.c
@@ -42,7 +42,7 @@ MODULE_AUTHOR("Sebastian Witt <se.witt@gmx.net>");
42#define ATXP1_VIDMASK 0x1f 42#define ATXP1_VIDMASK 0x1f
43#define ATXP1_GPIO1MASK 0x0f 43#define ATXP1_GPIO1MASK 0x0f
44 44
45static unsigned short normal_i2c[] = { 0x37, 0x4e, I2C_CLIENT_END }; 45static const unsigned short normal_i2c[] = { 0x37, 0x4e, I2C_CLIENT_END };
46 46
47I2C_CLIENT_INSMOD_1(atxp1); 47I2C_CLIENT_INSMOD_1(atxp1);
48 48
diff --git a/drivers/hwmon/coretemp.c b/drivers/hwmon/coretemp.c
index 3ee60d26e3a2..70239acecc8e 100644
--- a/drivers/hwmon/coretemp.c
+++ b/drivers/hwmon/coretemp.c
@@ -38,7 +38,8 @@
38 38
39#define DRVNAME "coretemp" 39#define DRVNAME "coretemp"
40 40
41typedef enum { SHOW_TEMP, SHOW_TJMAX, SHOW_LABEL, SHOW_NAME } SHOW; 41typedef enum { SHOW_TEMP, SHOW_TJMAX, SHOW_TTARGET, SHOW_LABEL,
42 SHOW_NAME } SHOW;
42 43
43/* 44/*
44 * Functions declaration 45 * Functions declaration
@@ -55,6 +56,7 @@ struct coretemp_data {
55 unsigned long last_updated; /* in jiffies */ 56 unsigned long last_updated; /* in jiffies */
56 int temp; 57 int temp;
57 int tjmax; 58 int tjmax;
59 int ttarget;
58 u8 alarm; 60 u8 alarm;
59}; 61};
60 62
@@ -93,9 +95,10 @@ static ssize_t show_temp(struct device *dev,
93 95
94 if (attr->index == SHOW_TEMP) 96 if (attr->index == SHOW_TEMP)
95 err = data->valid ? sprintf(buf, "%d\n", data->temp) : -EAGAIN; 97 err = data->valid ? sprintf(buf, "%d\n", data->temp) : -EAGAIN;
96 else 98 else if (attr->index == SHOW_TJMAX)
97 err = sprintf(buf, "%d\n", data->tjmax); 99 err = sprintf(buf, "%d\n", data->tjmax);
98 100 else
101 err = sprintf(buf, "%d\n", data->ttarget);
99 return err; 102 return err;
100} 103}
101 104
@@ -103,6 +106,8 @@ static SENSOR_DEVICE_ATTR(temp1_input, S_IRUGO, show_temp, NULL,
103 SHOW_TEMP); 106 SHOW_TEMP);
104static SENSOR_DEVICE_ATTR(temp1_crit, S_IRUGO, show_temp, NULL, 107static SENSOR_DEVICE_ATTR(temp1_crit, S_IRUGO, show_temp, NULL,
105 SHOW_TJMAX); 108 SHOW_TJMAX);
109static SENSOR_DEVICE_ATTR(temp1_max, S_IRUGO, show_temp, NULL,
110 SHOW_TTARGET);
106static DEVICE_ATTR(temp1_crit_alarm, S_IRUGO, show_alarm, NULL); 111static DEVICE_ATTR(temp1_crit_alarm, S_IRUGO, show_alarm, NULL);
107static SENSOR_DEVICE_ATTR(temp1_label, S_IRUGO, show_name, NULL, SHOW_LABEL); 112static SENSOR_DEVICE_ATTR(temp1_label, S_IRUGO, show_name, NULL, SHOW_LABEL);
108static SENSOR_DEVICE_ATTR(name, S_IRUGO, show_name, NULL, SHOW_NAME); 113static SENSOR_DEVICE_ATTR(name, S_IRUGO, show_name, NULL, SHOW_NAME);
@@ -147,6 +152,56 @@ static struct coretemp_data *coretemp_update_device(struct device *dev)
147 return data; 152 return data;
148} 153}
149 154
155static int __devinit adjust_tjmax(struct cpuinfo_x86 *c, u32 id, struct device *dev)
156{
157 /* The 100C is default for both mobile and non mobile CPUs */
158
159 int tjmax = 100000;
160 int ismobile = 1;
161 int err;
162 u32 eax, edx;
163
164 /* Early chips have no MSR for TjMax */
165
166 if ((c->x86_model == 0xf) && (c->x86_mask < 4)) {
167 ismobile = 0;
168 }
169
170 if ((c->x86_model > 0xe) && (ismobile)) {
171
172 /* Now we can detect the mobile CPU using Intel provided table
173 http://softwarecommunity.intel.com/Wiki/Mobility/720.htm
174 For Core2 cores, check MSR 0x17, bit 28 1 = Mobile CPU
175 */
176
177 err = rdmsr_safe_on_cpu(id, 0x17, &eax, &edx);
178 if (err) {
179 dev_warn(dev,
180 "Unable to access MSR 0x17, assuming desktop"
181 " CPU\n");
182 ismobile = 0;
183 } else if (!(eax & 0x10000000)) {
184 ismobile = 0;
185 }
186 }
187
188 if (ismobile) {
189
190 err = rdmsr_safe_on_cpu(id, 0xee, &eax, &edx);
191 if (err) {
192 dev_warn(dev,
193 "Unable to access MSR 0xEE, for Tjmax, left"
194 " at default");
195 } else if (eax & 0x40000000) {
196 tjmax = 85000;
197 }
198 } else {
199 dev_warn(dev, "Using relative temperature scale!\n");
200 }
201
202 return tjmax;
203}
204
150static int __devinit coretemp_probe(struct platform_device *pdev) 205static int __devinit coretemp_probe(struct platform_device *pdev)
151{ 206{
152 struct coretemp_data *data; 207 struct coretemp_data *data;
@@ -163,8 +218,6 @@ static int __devinit coretemp_probe(struct platform_device *pdev)
163 data->id = pdev->id; 218 data->id = pdev->id;
164 data->name = "coretemp"; 219 data->name = "coretemp";
165 mutex_init(&data->update_lock); 220 mutex_init(&data->update_lock);
166 /* Tjmax default is 100 degrees C */
167 data->tjmax = 100000;
168 221
169 /* test if we can access the THERM_STATUS MSR */ 222 /* test if we can access the THERM_STATUS MSR */
170 err = rdmsr_safe_on_cpu(data->id, MSR_IA32_THERM_STATUS, &eax, &edx); 223 err = rdmsr_safe_on_cpu(data->id, MSR_IA32_THERM_STATUS, &eax, &edx);
@@ -191,40 +244,29 @@ static int __devinit coretemp_probe(struct platform_device *pdev)
191 } 244 }
192 } 245 }
193 246
194 /* Some processors have Tjmax 85 following magic should detect it 247 data->tjmax = adjust_tjmax(c, data->id, &pdev->dev);
195 Intel won't disclose the information without signed NDA, but 248 platform_set_drvdata(pdev, data);
196 individuals cannot sign it. Catch(ed) 22.
197 */
198 249
199 if (((c->x86_model == 0xf) && (c->x86_mask > 3)) || 250 /* read the still undocumented IA32_TEMPERATURE_TARGET it exists
200 (c->x86_model == 0xe)) { 251 on older CPUs but not in this register */
201 err = rdmsr_safe_on_cpu(data->id, 0xee, &eax, &edx); 252
253 if (c->x86_model > 0xe) {
254 err = rdmsr_safe_on_cpu(data->id, 0x1a2, &eax, &edx);
202 if (err) { 255 if (err) {
203 dev_warn(&pdev->dev, 256 dev_warn(&pdev->dev, "Unable to read"
204 "Unable to access MSR 0xEE, Tjmax left at %d " 257 " IA32_TEMPERATURE_TARGET MSR\n");
205 "degrees C\n", data->tjmax/1000); 258 } else {
206 } else if (eax & 0x40000000) { 259 data->ttarget = data->tjmax -
207 data->tjmax = 85000; 260 (((eax >> 8) & 0xff) * 1000);
261 err = device_create_file(&pdev->dev,
262 &sensor_dev_attr_temp1_max.dev_attr);
263 if (err)
264 goto exit_free;
208 } 265 }
209 } 266 }
210 267
211 /* Intel says that above should not work for desktop Core2 processors,
212 but it seems to work. There is no other way how get the absolute
213 readings. Warn the user about this. First check if are desktop,
214 bit 50 of MSR_IA32_PLATFORM_ID should be 0.
215 */
216
217 rdmsr_safe_on_cpu(data->id, MSR_IA32_PLATFORM_ID, &eax, &edx);
218
219 if ((c->x86_model == 0xf) && (!(edx & 0x00040000))) {
220 dev_warn(&pdev->dev, "Using undocumented features, absolute "
221 "temperature might be wrong!\n");
222 }
223
224 platform_set_drvdata(pdev, data);
225
226 if ((err = sysfs_create_group(&pdev->dev.kobj, &coretemp_group))) 268 if ((err = sysfs_create_group(&pdev->dev.kobj, &coretemp_group)))
227 goto exit_free; 269 goto exit_dev;
228 270
229 data->hwmon_dev = hwmon_device_register(&pdev->dev); 271 data->hwmon_dev = hwmon_device_register(&pdev->dev);
230 if (IS_ERR(data->hwmon_dev)) { 272 if (IS_ERR(data->hwmon_dev)) {
@@ -238,6 +280,8 @@ static int __devinit coretemp_probe(struct platform_device *pdev)
238 280
239exit_class: 281exit_class:
240 sysfs_remove_group(&pdev->dev.kobj, &coretemp_group); 282 sysfs_remove_group(&pdev->dev.kobj, &coretemp_group);
283exit_dev:
284 device_remove_file(&pdev->dev, &sensor_dev_attr_temp1_max.dev_attr);
241exit_free: 285exit_free:
242 kfree(data); 286 kfree(data);
243exit: 287exit:
@@ -250,6 +294,7 @@ static int __devexit coretemp_remove(struct platform_device *pdev)
250 294
251 hwmon_device_unregister(data->hwmon_dev); 295 hwmon_device_unregister(data->hwmon_dev);
252 sysfs_remove_group(&pdev->dev.kobj, &coretemp_group); 296 sysfs_remove_group(&pdev->dev.kobj, &coretemp_group);
297 device_remove_file(&pdev->dev, &sensor_dev_attr_temp1_max.dev_attr);
253 platform_set_drvdata(pdev, NULL); 298 platform_set_drvdata(pdev, NULL);
254 kfree(data); 299 kfree(data);
255 return 0; 300 return 0;
@@ -330,7 +375,7 @@ static void coretemp_device_remove(unsigned int cpu)
330 mutex_unlock(&pdev_list_mutex); 375 mutex_unlock(&pdev_list_mutex);
331} 376}
332 377
333static int coretemp_cpu_callback(struct notifier_block *nfb, 378static int __cpuinit coretemp_cpu_callback(struct notifier_block *nfb,
334 unsigned long action, void *hcpu) 379 unsigned long action, void *hcpu)
335{ 380{
336 unsigned int cpu = (unsigned long) hcpu; 381 unsigned int cpu = (unsigned long) hcpu;
@@ -347,7 +392,7 @@ static int coretemp_cpu_callback(struct notifier_block *nfb,
347 return NOTIFY_OK; 392 return NOTIFY_OK;
348} 393}
349 394
350static struct notifier_block coretemp_cpu_notifier = { 395static struct notifier_block coretemp_cpu_notifier __refdata = {
351 .notifier_call = coretemp_cpu_callback, 396 .notifier_call = coretemp_cpu_callback,
352}; 397};
353#endif /* !CONFIG_HOTPLUG_CPU */ 398#endif /* !CONFIG_HOTPLUG_CPU */
@@ -368,10 +413,10 @@ static int __init coretemp_init(void)
368 for_each_online_cpu(i) { 413 for_each_online_cpu(i) {
369 struct cpuinfo_x86 *c = &cpu_data(i); 414 struct cpuinfo_x86 *c = &cpu_data(i);
370 415
371 /* check if family 6, models e, f, 16 */ 416 /* check if family 6, models 0xe, 0xf, 0x16, 0x17 */
372 if ((c->cpuid_level < 0) || (c->x86 != 0x6) || 417 if ((c->cpuid_level < 0) || (c->x86 != 0x6) ||
373 !((c->x86_model == 0xe) || (c->x86_model == 0xf) || 418 !((c->x86_model == 0xe) || (c->x86_model == 0xf) ||
374 (c->x86_model == 0x16))) { 419 (c->x86_model == 0x16) || (c->x86_model == 0x17))) {
375 420
376 /* supported CPU not found, but report the unknown 421 /* supported CPU not found, but report the unknown
377 family 6 CPU */ 422 family 6 CPU */
diff --git a/drivers/hwmon/dme1737.c b/drivers/hwmon/dme1737.c
index ddddd9f34c19..7673f65877e1 100644
--- a/drivers/hwmon/dme1737.c
+++ b/drivers/hwmon/dme1737.c
@@ -49,7 +49,7 @@ module_param(force_id, ushort, 0);
49MODULE_PARM_DESC(force_id, "Override the detected device ID"); 49MODULE_PARM_DESC(force_id, "Override the detected device ID");
50 50
51/* Addresses to scan */ 51/* Addresses to scan */
52static unsigned short normal_i2c[] = {0x2c, 0x2d, 0x2e, I2C_CLIENT_END}; 52static const unsigned short normal_i2c[] = {0x2c, 0x2d, 0x2e, I2C_CLIENT_END};
53 53
54/* Insmod parameters */ 54/* Insmod parameters */
55I2C_CLIENT_INSMOD_1(dme1737); 55I2C_CLIENT_INSMOD_1(dme1737);
diff --git a/drivers/hwmon/ds1621.c b/drivers/hwmon/ds1621.c
index 3f5163de13c1..5f300ffed657 100644
--- a/drivers/hwmon/ds1621.c
+++ b/drivers/hwmon/ds1621.c
@@ -34,7 +34,7 @@
34#include "lm75.h" 34#include "lm75.h"
35 35
36/* Addresses to scan */ 36/* Addresses to scan */
37static unsigned short normal_i2c[] = { 0x48, 0x49, 0x4a, 0x4b, 0x4c, 37static const unsigned short normal_i2c[] = { 0x48, 0x49, 0x4a, 0x4b, 0x4c,
38 0x4d, 0x4e, 0x4f, I2C_CLIENT_END }; 38 0x4d, 0x4e, 0x4f, I2C_CLIENT_END };
39 39
40/* Insmod parameters */ 40/* Insmod parameters */
diff --git a/drivers/hwmon/f75375s.c b/drivers/hwmon/f75375s.c
index 6892f76fc18a..1464338e4e11 100644
--- a/drivers/hwmon/f75375s.c
+++ b/drivers/hwmon/f75375s.c
@@ -37,7 +37,7 @@
37#include <linux/f75375s.h> 37#include <linux/f75375s.h>
38 38
39/* Addresses to scan */ 39/* Addresses to scan */
40static unsigned short normal_i2c[] = { 0x2d, 0x2e, I2C_CLIENT_END }; 40static const unsigned short normal_i2c[] = { 0x2d, 0x2e, I2C_CLIENT_END };
41 41
42/* Insmod parameters */ 42/* Insmod parameters */
43I2C_CLIENT_INSMOD_2(f75373, f75375); 43I2C_CLIENT_INSMOD_2(f75373, f75375);
diff --git a/drivers/hwmon/fscher.c b/drivers/hwmon/fscher.c
index 721c70177b17..ed26b66e0831 100644
--- a/drivers/hwmon/fscher.c
+++ b/drivers/hwmon/fscher.c
@@ -40,7 +40,7 @@
40 * Addresses to scan 40 * Addresses to scan
41 */ 41 */
42 42
43static unsigned short normal_i2c[] = { 0x73, I2C_CLIENT_END }; 43static const unsigned short normal_i2c[] = { 0x73, I2C_CLIENT_END };
44 44
45/* 45/*
46 * Insmod parameters 46 * Insmod parameters
diff --git a/drivers/hwmon/fschmd.c b/drivers/hwmon/fschmd.c
index b7c9eef0f928..bd89d270a5ed 100644
--- a/drivers/hwmon/fschmd.c
+++ b/drivers/hwmon/fschmd.c
@@ -44,7 +44,7 @@
44#include <linux/dmi.h> 44#include <linux/dmi.h>
45 45
46/* Addresses to scan */ 46/* Addresses to scan */
47static unsigned short normal_i2c[] = { 0x73, I2C_CLIENT_END }; 47static const unsigned short normal_i2c[] = { 0x73, I2C_CLIENT_END };
48 48
49/* Insmod parameters */ 49/* Insmod parameters */
50I2C_CLIENT_INSMOD_5(fscpos, fscher, fscscy, fschrc, fschmd); 50I2C_CLIENT_INSMOD_5(fscpos, fscher, fscscy, fschrc, fschmd);
diff --git a/drivers/hwmon/fscpos.c b/drivers/hwmon/fscpos.c
index 2f1075323a1e..00f48484e54b 100644
--- a/drivers/hwmon/fscpos.c
+++ b/drivers/hwmon/fscpos.c
@@ -43,7 +43,7 @@
43/* 43/*
44 * Addresses to scan 44 * Addresses to scan
45 */ 45 */
46static unsigned short normal_i2c[] = { 0x73, I2C_CLIENT_END }; 46static const unsigned short normal_i2c[] = { 0x73, I2C_CLIENT_END };
47 47
48/* 48/*
49 * Insmod parameters 49 * Insmod parameters
diff --git a/drivers/hwmon/gl518sm.c b/drivers/hwmon/gl518sm.c
index 3b1ac48fce23..33e9e8a8d1ce 100644
--- a/drivers/hwmon/gl518sm.c
+++ b/drivers/hwmon/gl518sm.c
@@ -44,7 +44,7 @@
44#include <linux/sysfs.h> 44#include <linux/sysfs.h>
45 45
46/* Addresses to scan */ 46/* Addresses to scan */
47static unsigned short normal_i2c[] = { 0x2c, 0x2d, I2C_CLIENT_END }; 47static const unsigned short normal_i2c[] = { 0x2c, 0x2d, I2C_CLIENT_END };
48 48
49/* Insmod parameters */ 49/* Insmod parameters */
50I2C_CLIENT_INSMOD_2(gl518sm_r00, gl518sm_r80); 50I2C_CLIENT_INSMOD_2(gl518sm_r00, gl518sm_r80);
diff --git a/drivers/hwmon/gl520sm.c b/drivers/hwmon/gl520sm.c
index 03ecdc334764..8984ef141627 100644
--- a/drivers/hwmon/gl520sm.c
+++ b/drivers/hwmon/gl520sm.c
@@ -39,7 +39,7 @@ module_param(extra_sensor_type, ushort, 0);
39MODULE_PARM_DESC(extra_sensor_type, "Type of extra sensor (0=autodetect, 1=temperature, 2=voltage)"); 39MODULE_PARM_DESC(extra_sensor_type, "Type of extra sensor (0=autodetect, 1=temperature, 2=voltage)");
40 40
41/* Addresses to scan */ 41/* Addresses to scan */
42static unsigned short normal_i2c[] = { 0x2c, 0x2d, I2C_CLIENT_END }; 42static const unsigned short normal_i2c[] = { 0x2c, 0x2d, I2C_CLIENT_END };
43 43
44/* Insmod parameters */ 44/* Insmod parameters */
45I2C_CLIENT_INSMOD_1(gl520sm); 45I2C_CLIENT_INSMOD_1(gl520sm);
diff --git a/drivers/hwmon/lm63.c b/drivers/hwmon/lm63.c
index 650b07d5b902..116287008083 100644
--- a/drivers/hwmon/lm63.c
+++ b/drivers/hwmon/lm63.c
@@ -53,7 +53,7 @@
53 * Address is fully defined internally and cannot be changed. 53 * Address is fully defined internally and cannot be changed.
54 */ 54 */
55 55
56static unsigned short normal_i2c[] = { 0x4c, I2C_CLIENT_END }; 56static const unsigned short normal_i2c[] = { 0x4c, I2C_CLIENT_END };
57 57
58/* 58/*
59 * Insmod parameters 59 * Insmod parameters
diff --git a/drivers/hwmon/lm75.c b/drivers/hwmon/lm75.c
index e5c35a355a57..115f4090b98e 100644
--- a/drivers/hwmon/lm75.c
+++ b/drivers/hwmon/lm75.c
@@ -31,7 +31,7 @@
31 31
32 32
33/* Addresses to scan */ 33/* Addresses to scan */
34static unsigned short normal_i2c[] = { 0x48, 0x49, 0x4a, 0x4b, 0x4c, 34static const unsigned short normal_i2c[] = { 0x48, 0x49, 0x4a, 0x4b, 0x4c,
35 0x4d, 0x4e, 0x4f, I2C_CLIENT_END }; 35 0x4d, 0x4e, 0x4f, I2C_CLIENT_END };
36 36
37/* Insmod parameters */ 37/* Insmod parameters */
diff --git a/drivers/hwmon/lm77.c b/drivers/hwmon/lm77.c
index 459b70ad6bee..36d5a8c3ad8c 100644
--- a/drivers/hwmon/lm77.c
+++ b/drivers/hwmon/lm77.c
@@ -36,7 +36,8 @@
36#include <linux/mutex.h> 36#include <linux/mutex.h>
37 37
38/* Addresses to scan */ 38/* Addresses to scan */
39static unsigned short normal_i2c[] = { 0x48, 0x49, 0x4a, 0x4b, I2C_CLIENT_END }; 39static const unsigned short normal_i2c[] = { 0x48, 0x49, 0x4a, 0x4b,
40 I2C_CLIENT_END };
40 41
41/* Insmod parameters */ 42/* Insmod parameters */
42I2C_CLIENT_INSMOD_1(lm77); 43I2C_CLIENT_INSMOD_1(lm77);
diff --git a/drivers/hwmon/lm78.c b/drivers/hwmon/lm78.c
index 0a9eb1f6f4e4..ed7859f0e16a 100644
--- a/drivers/hwmon/lm78.c
+++ b/drivers/hwmon/lm78.c
@@ -37,8 +37,8 @@
37static struct platform_device *pdev; 37static struct platform_device *pdev;
38 38
39/* Addresses to scan */ 39/* Addresses to scan */
40static unsigned short normal_i2c[] = { 0x28, 0x29, 0x2a, 0x2b, 0x2c, 0x2d, 40static const unsigned short normal_i2c[] = { 0x28, 0x29, 0x2a, 0x2b, 0x2c, 0x2d,
41 0x2e, 0x2f, I2C_CLIENT_END }; 41 0x2e, 0x2f, I2C_CLIENT_END };
42static unsigned short isa_address = 0x290; 42static unsigned short isa_address = 0x290;
43 43
44/* Insmod parameters */ 44/* Insmod parameters */
diff --git a/drivers/hwmon/lm80.c b/drivers/hwmon/lm80.c
index a2ca055f3922..26c91c9d4769 100644
--- a/drivers/hwmon/lm80.c
+++ b/drivers/hwmon/lm80.c
@@ -32,8 +32,8 @@
32#include <linux/mutex.h> 32#include <linux/mutex.h>
33 33
34/* Addresses to scan */ 34/* Addresses to scan */
35static unsigned short normal_i2c[] = { 0x28, 0x29, 0x2a, 0x2b, 0x2c, 35static const unsigned short normal_i2c[] = { 0x28, 0x29, 0x2a, 0x2b, 0x2c, 0x2d,
36 0x2d, 0x2e, 0x2f, I2C_CLIENT_END }; 36 0x2e, 0x2f, I2C_CLIENT_END };
37 37
38/* Insmod parameters */ 38/* Insmod parameters */
39I2C_CLIENT_INSMOD_1(lm80); 39I2C_CLIENT_INSMOD_1(lm80);
diff --git a/drivers/hwmon/lm83.c b/drivers/hwmon/lm83.c
index 6e8903a6e902..6a8642fa25fb 100644
--- a/drivers/hwmon/lm83.c
+++ b/drivers/hwmon/lm83.c
@@ -48,10 +48,8 @@
48 * addresses. 48 * addresses.
49 */ 49 */
50 50
51static unsigned short normal_i2c[] = { 0x18, 0x19, 0x1a, 51static const unsigned short normal_i2c[] = {
52 0x29, 0x2a, 0x2b, 52 0x18, 0x19, 0x1a, 0x29, 0x2a, 0x2b, 0x4c, 0x4d, 0x4e, I2C_CLIENT_END };
53 0x4c, 0x4d, 0x4e,
54 I2C_CLIENT_END };
55 53
56/* 54/*
57 * Insmod parameters 55 * Insmod parameters
diff --git a/drivers/hwmon/lm85.c b/drivers/hwmon/lm85.c
index 4bb0f291a6b8..182fe6a5605f 100644
--- a/drivers/hwmon/lm85.c
+++ b/drivers/hwmon/lm85.c
@@ -35,7 +35,7 @@
35#include <linux/mutex.h> 35#include <linux/mutex.h>
36 36
37/* Addresses to scan */ 37/* Addresses to scan */
38static unsigned short normal_i2c[] = { 0x2c, 0x2d, 0x2e, I2C_CLIENT_END }; 38static const unsigned short normal_i2c[] = { 0x2c, 0x2d, 0x2e, I2C_CLIENT_END };
39 39
40/* Insmod parameters */ 40/* Insmod parameters */
41I2C_CLIENT_INSMOD_6(lm85b, lm85c, adm1027, adt7463, emc6d100, emc6d102); 41I2C_CLIENT_INSMOD_6(lm85b, lm85c, adm1027, adt7463, emc6d100, emc6d102);
diff --git a/drivers/hwmon/lm87.c b/drivers/hwmon/lm87.c
index 8ee07c5c97a1..e1c183f0aae0 100644
--- a/drivers/hwmon/lm87.c
+++ b/drivers/hwmon/lm87.c
@@ -73,7 +73,7 @@
73 * LM87 has three possible addresses: 0x2c, 0x2d and 0x2e. 73 * LM87 has three possible addresses: 0x2c, 0x2d and 0x2e.
74 */ 74 */
75 75
76static unsigned short normal_i2c[] = { 0x2c, 0x2d, 0x2e, I2C_CLIENT_END }; 76static const unsigned short normal_i2c[] = { 0x2c, 0x2d, 0x2e, I2C_CLIENT_END };
77 77
78/* 78/*
79 * Insmod parameters 79 * Insmod parameters
diff --git a/drivers/hwmon/lm90.c b/drivers/hwmon/lm90.c
index f7ec95bedbf6..d1a3da3dd8e0 100644
--- a/drivers/hwmon/lm90.c
+++ b/drivers/hwmon/lm90.c
@@ -101,10 +101,8 @@
101 * 0x4c, 0x4d or 0x4e. 101 * 0x4c, 0x4d or 0x4e.
102 */ 102 */
103 103
104static unsigned short normal_i2c[] = { 0x18, 0x19, 0x1a, 104static const unsigned short normal_i2c[] = {
105 0x29, 0x2a, 0x2b, 105 0x18, 0x19, 0x1a, 0x29, 0x2a, 0x2b, 0x4c, 0x4d, 0x4e, I2C_CLIENT_END };
106 0x4c, 0x4d, 0x4e,
107 I2C_CLIENT_END };
108 106
109/* 107/*
110 * Insmod parameters 108 * Insmod parameters
diff --git a/drivers/hwmon/lm92.c b/drivers/hwmon/lm92.c
index af5c77d568fe..c31942e08246 100644
--- a/drivers/hwmon/lm92.c
+++ b/drivers/hwmon/lm92.c
@@ -45,13 +45,14 @@
45#include <linux/slab.h> 45#include <linux/slab.h>
46#include <linux/i2c.h> 46#include <linux/i2c.h>
47#include <linux/hwmon.h> 47#include <linux/hwmon.h>
48#include <linux/hwmon-sysfs.h>
48#include <linux/err.h> 49#include <linux/err.h>
49#include <linux/mutex.h> 50#include <linux/mutex.h>
50 51
51/* The LM92 and MAX6635 have 2 two-state pins for address selection, 52/* The LM92 and MAX6635 have 2 two-state pins for address selection,
52 resulting in 4 possible addresses. */ 53 resulting in 4 possible addresses. */
53static unsigned short normal_i2c[] = { 0x48, 0x49, 0x4a, 0x4b, 54static const unsigned short normal_i2c[] = { 0x48, 0x49, 0x4a, 0x4b,
54 I2C_CLIENT_END }; 55 I2C_CLIENT_END };
55 56
56/* Insmod parameters */ 57/* Insmod parameters */
57I2C_CLIENT_INSMOD_1(lm92); 58I2C_CLIENT_INSMOD_1(lm92);
@@ -209,6 +210,14 @@ static ssize_t show_alarms(struct device *dev, struct device_attribute *attr, ch
209 return sprintf(buf, "%d\n", ALARMS_FROM_REG(data->temp1_input)); 210 return sprintf(buf, "%d\n", ALARMS_FROM_REG(data->temp1_input));
210} 211}
211 212
213static ssize_t show_alarm(struct device *dev, struct device_attribute *attr,
214 char *buf)
215{
216 int bitnr = to_sensor_dev_attr(attr)->index;
217 struct lm92_data *data = lm92_update_device(dev);
218 return sprintf(buf, "%d\n", (data->temp1_input >> bitnr) & 1);
219}
220
212static DEVICE_ATTR(temp1_input, S_IRUGO, show_temp1_input, NULL); 221static DEVICE_ATTR(temp1_input, S_IRUGO, show_temp1_input, NULL);
213static DEVICE_ATTR(temp1_crit, S_IWUSR | S_IRUGO, show_temp1_crit, 222static DEVICE_ATTR(temp1_crit, S_IWUSR | S_IRUGO, show_temp1_crit,
214 set_temp1_crit); 223 set_temp1_crit);
@@ -221,6 +230,9 @@ static DEVICE_ATTR(temp1_max, S_IWUSR | S_IRUGO, show_temp1_max,
221 set_temp1_max); 230 set_temp1_max);
222static DEVICE_ATTR(temp1_max_hyst, S_IRUGO, show_temp1_max_hyst, NULL); 231static DEVICE_ATTR(temp1_max_hyst, S_IRUGO, show_temp1_max_hyst, NULL);
223static DEVICE_ATTR(alarms, S_IRUGO, show_alarms, NULL); 232static DEVICE_ATTR(alarms, S_IRUGO, show_alarms, NULL);
233static SENSOR_DEVICE_ATTR(temp1_crit_alarm, S_IRUGO, show_alarm, NULL, 2);
234static SENSOR_DEVICE_ATTR(temp1_min_alarm, S_IRUGO, show_alarm, NULL, 0);
235static SENSOR_DEVICE_ATTR(temp1_max_alarm, S_IRUGO, show_alarm, NULL, 1);
224 236
225 237
226/* 238/*
@@ -297,7 +309,9 @@ static struct attribute *lm92_attributes[] = {
297 &dev_attr_temp1_max.attr, 309 &dev_attr_temp1_max.attr,
298 &dev_attr_temp1_max_hyst.attr, 310 &dev_attr_temp1_max_hyst.attr,
299 &dev_attr_alarms.attr, 311 &dev_attr_alarms.attr,
300 312 &sensor_dev_attr_temp1_crit_alarm.dev_attr.attr,
313 &sensor_dev_attr_temp1_min_alarm.dev_attr.attr,
314 &sensor_dev_attr_temp1_max_alarm.dev_attr.attr,
301 NULL 315 NULL
302}; 316};
303 317
diff --git a/drivers/hwmon/lm93.c b/drivers/hwmon/lm93.c
index ea61946a4bf7..5e678f5c883d 100644
--- a/drivers/hwmon/lm93.c
+++ b/drivers/hwmon/lm93.c
@@ -142,7 +142,7 @@
142 I2C_FUNC_SMBUS_WORD_DATA) 142 I2C_FUNC_SMBUS_WORD_DATA)
143 143
144/* Addresses to scan */ 144/* Addresses to scan */
145static unsigned short normal_i2c[] = { 0x2c, 0x2d, 0x2e, I2C_CLIENT_END }; 145static const unsigned short normal_i2c[] = { 0x2c, 0x2d, 0x2e, I2C_CLIENT_END };
146 146
147/* Insmod parameters */ 147/* Insmod parameters */
148I2C_CLIENT_INSMOD_1(lm93); 148I2C_CLIENT_INSMOD_1(lm93);
diff --git a/drivers/hwmon/max1619.c b/drivers/hwmon/max1619.c
index 38a44c3d6cee..7e7267a04544 100644
--- a/drivers/hwmon/max1619.c
+++ b/drivers/hwmon/max1619.c
@@ -32,14 +32,13 @@
32#include <linux/jiffies.h> 32#include <linux/jiffies.h>
33#include <linux/i2c.h> 33#include <linux/i2c.h>
34#include <linux/hwmon.h> 34#include <linux/hwmon.h>
35#include <linux/hwmon-sysfs.h>
35#include <linux/err.h> 36#include <linux/err.h>
36#include <linux/mutex.h> 37#include <linux/mutex.h>
37#include <linux/sysfs.h> 38#include <linux/sysfs.h>
38 39
39static unsigned short normal_i2c[] = { 0x18, 0x19, 0x1a, 40static const unsigned short normal_i2c[] = {
40 0x29, 0x2a, 0x2b, 41 0x18, 0x19, 0x1a, 0x29, 0x2a, 0x2b, 0x4c, 0x4d, 0x4e, I2C_CLIENT_END };
41 0x4c, 0x4d, 0x4e,
42 I2C_CLIENT_END };
43 42
44/* 43/*
45 * Insmod parameters 44 * Insmod parameters
@@ -161,6 +160,14 @@ static ssize_t show_alarms(struct device *dev, struct device_attribute *attr, ch
161 return sprintf(buf, "%d\n", data->alarms); 160 return sprintf(buf, "%d\n", data->alarms);
162} 161}
163 162
163static ssize_t show_alarm(struct device *dev, struct device_attribute *attr,
164 char *buf)
165{
166 int bitnr = to_sensor_dev_attr(attr)->index;
167 struct max1619_data *data = max1619_update_device(dev);
168 return sprintf(buf, "%d\n", (data->alarms >> bitnr) & 1);
169}
170
164static DEVICE_ATTR(temp1_input, S_IRUGO, show_temp_input1, NULL); 171static DEVICE_ATTR(temp1_input, S_IRUGO, show_temp_input1, NULL);
165static DEVICE_ATTR(temp2_input, S_IRUGO, show_temp_input2, NULL); 172static DEVICE_ATTR(temp2_input, S_IRUGO, show_temp_input2, NULL);
166static DEVICE_ATTR(temp2_min, S_IWUSR | S_IRUGO, show_temp_low2, 173static DEVICE_ATTR(temp2_min, S_IWUSR | S_IRUGO, show_temp_low2,
@@ -172,6 +179,10 @@ static DEVICE_ATTR(temp2_crit, S_IWUSR | S_IRUGO, show_temp_crit2,
172static DEVICE_ATTR(temp2_crit_hyst, S_IWUSR | S_IRUGO, show_temp_hyst2, 179static DEVICE_ATTR(temp2_crit_hyst, S_IWUSR | S_IRUGO, show_temp_hyst2,
173 set_temp_hyst2); 180 set_temp_hyst2);
174static DEVICE_ATTR(alarms, S_IRUGO, show_alarms, NULL); 181static DEVICE_ATTR(alarms, S_IRUGO, show_alarms, NULL);
182static SENSOR_DEVICE_ATTR(temp2_crit_alarm, S_IRUGO, show_alarm, NULL, 1);
183static SENSOR_DEVICE_ATTR(temp2_fault, S_IRUGO, show_alarm, NULL, 2);
184static SENSOR_DEVICE_ATTR(temp2_min_alarm, S_IRUGO, show_alarm, NULL, 3);
185static SENSOR_DEVICE_ATTR(temp2_max_alarm, S_IRUGO, show_alarm, NULL, 4);
175 186
176static struct attribute *max1619_attributes[] = { 187static struct attribute *max1619_attributes[] = {
177 &dev_attr_temp1_input.attr, 188 &dev_attr_temp1_input.attr,
@@ -182,6 +193,10 @@ static struct attribute *max1619_attributes[] = {
182 &dev_attr_temp2_crit_hyst.attr, 193 &dev_attr_temp2_crit_hyst.attr,
183 194
184 &dev_attr_alarms.attr, 195 &dev_attr_alarms.attr,
196 &sensor_dev_attr_temp2_crit_alarm.dev_attr.attr,
197 &sensor_dev_attr_temp2_fault.dev_attr.attr,
198 &sensor_dev_attr_temp2_min_alarm.dev_attr.attr,
199 &sensor_dev_attr_temp2_max_alarm.dev_attr.attr,
185 NULL 200 NULL
186}; 201};
187 202
diff --git a/drivers/hwmon/max6650.c b/drivers/hwmon/max6650.c
index 755570c1f4eb..52d528b76cc3 100644
--- a/drivers/hwmon/max6650.c
+++ b/drivers/hwmon/max6650.c
@@ -44,7 +44,8 @@
44 * Addresses to scan. There are four disjoint possibilities, by pin config. 44 * Addresses to scan. There are four disjoint possibilities, by pin config.
45 */ 45 */
46 46
47static unsigned short normal_i2c[] = {0x1b, 0x1f, 0x48, 0x4b, I2C_CLIENT_END}; 47static const unsigned short normal_i2c[] = {0x1b, 0x1f, 0x48, 0x4b,
48 I2C_CLIENT_END};
48 49
49/* 50/*
50 * Insmod parameters 51 * Insmod parameters
diff --git a/drivers/hwmon/smsc47m1.c b/drivers/hwmon/smsc47m1.c
index 0d7f0c4d06bb..d1b498548736 100644
--- a/drivers/hwmon/smsc47m1.c
+++ b/drivers/hwmon/smsc47m1.c
@@ -198,6 +198,14 @@ static ssize_t get_fan_div(struct device *dev, struct device_attribute
198 return sprintf(buf, "%d\n", DIV_FROM_REG(data->fan_div[attr->index])); 198 return sprintf(buf, "%d\n", DIV_FROM_REG(data->fan_div[attr->index]));
199} 199}
200 200
201static ssize_t get_fan_alarm(struct device *dev, struct device_attribute
202 *devattr, char *buf)
203{
204 int bitnr = to_sensor_dev_attr(devattr)->index;
205 struct smsc47m1_data *data = smsc47m1_update_device(dev, 0);
206 return sprintf(buf, "%u\n", (data->alarms >> bitnr) & 1);
207}
208
201static ssize_t get_pwm(struct device *dev, struct device_attribute 209static ssize_t get_pwm(struct device *dev, struct device_attribute
202 *devattr, char *buf) 210 *devattr, char *buf)
203{ 211{
@@ -347,6 +355,8 @@ static SENSOR_DEVICE_ATTR(fan##offset##_min, S_IRUGO | S_IWUSR, \
347 get_fan_min, set_fan_min, offset - 1); \ 355 get_fan_min, set_fan_min, offset - 1); \
348static SENSOR_DEVICE_ATTR(fan##offset##_div, S_IRUGO | S_IWUSR, \ 356static SENSOR_DEVICE_ATTR(fan##offset##_div, S_IRUGO | S_IWUSR, \
349 get_fan_div, set_fan_div, offset - 1); \ 357 get_fan_div, set_fan_div, offset - 1); \
358static SENSOR_DEVICE_ATTR(fan##offset##_alarm, S_IRUGO, get_fan_alarm, \
359 NULL, offset - 1); \
350static SENSOR_DEVICE_ATTR(pwm##offset, S_IRUGO | S_IWUSR, \ 360static SENSOR_DEVICE_ATTR(pwm##offset, S_IRUGO | S_IWUSR, \
351 get_pwm, set_pwm, offset - 1); \ 361 get_pwm, set_pwm, offset - 1); \
352static SENSOR_DEVICE_ATTR(pwm##offset##_enable, S_IRUGO | S_IWUSR, \ 362static SENSOR_DEVICE_ATTR(pwm##offset##_enable, S_IRUGO | S_IWUSR, \
@@ -374,12 +384,15 @@ static struct attribute *smsc47m1_attributes[] = {
374 &sensor_dev_attr_fan1_input.dev_attr.attr, 384 &sensor_dev_attr_fan1_input.dev_attr.attr,
375 &sensor_dev_attr_fan1_min.dev_attr.attr, 385 &sensor_dev_attr_fan1_min.dev_attr.attr,
376 &sensor_dev_attr_fan1_div.dev_attr.attr, 386 &sensor_dev_attr_fan1_div.dev_attr.attr,
387 &sensor_dev_attr_fan1_alarm.dev_attr.attr,
377 &sensor_dev_attr_fan2_input.dev_attr.attr, 388 &sensor_dev_attr_fan2_input.dev_attr.attr,
378 &sensor_dev_attr_fan2_min.dev_attr.attr, 389 &sensor_dev_attr_fan2_min.dev_attr.attr,
379 &sensor_dev_attr_fan2_div.dev_attr.attr, 390 &sensor_dev_attr_fan2_div.dev_attr.attr,
391 &sensor_dev_attr_fan2_alarm.dev_attr.attr,
380 &sensor_dev_attr_fan3_input.dev_attr.attr, 392 &sensor_dev_attr_fan3_input.dev_attr.attr,
381 &sensor_dev_attr_fan3_min.dev_attr.attr, 393 &sensor_dev_attr_fan3_min.dev_attr.attr,
382 &sensor_dev_attr_fan3_div.dev_attr.attr, 394 &sensor_dev_attr_fan3_div.dev_attr.attr,
395 &sensor_dev_attr_fan3_alarm.dev_attr.attr,
383 396
384 &sensor_dev_attr_pwm1.dev_attr.attr, 397 &sensor_dev_attr_pwm1.dev_attr.attr,
385 &sensor_dev_attr_pwm1_enable.dev_attr.attr, 398 &sensor_dev_attr_pwm1_enable.dev_attr.attr,
@@ -533,7 +546,9 @@ static int __devinit smsc47m1_probe(struct platform_device *pdev)
533 || (err = device_create_file(dev, 546 || (err = device_create_file(dev,
534 &sensor_dev_attr_fan1_min.dev_attr)) 547 &sensor_dev_attr_fan1_min.dev_attr))
535 || (err = device_create_file(dev, 548 || (err = device_create_file(dev,
536 &sensor_dev_attr_fan1_div.dev_attr))) 549 &sensor_dev_attr_fan1_div.dev_attr))
550 || (err = device_create_file(dev,
551 &sensor_dev_attr_fan1_alarm.dev_attr)))
537 goto error_remove_files; 552 goto error_remove_files;
538 } else 553 } else
539 dev_dbg(dev, "Fan 1 not enabled by hardware, skipping\n"); 554 dev_dbg(dev, "Fan 1 not enabled by hardware, skipping\n");
@@ -544,7 +559,9 @@ static int __devinit smsc47m1_probe(struct platform_device *pdev)
544 || (err = device_create_file(dev, 559 || (err = device_create_file(dev,
545 &sensor_dev_attr_fan2_min.dev_attr)) 560 &sensor_dev_attr_fan2_min.dev_attr))
546 || (err = device_create_file(dev, 561 || (err = device_create_file(dev,
547 &sensor_dev_attr_fan2_div.dev_attr))) 562 &sensor_dev_attr_fan2_div.dev_attr))
563 || (err = device_create_file(dev,
564 &sensor_dev_attr_fan2_alarm.dev_attr)))
548 goto error_remove_files; 565 goto error_remove_files;
549 } else 566 } else
550 dev_dbg(dev, "Fan 2 not enabled by hardware, skipping\n"); 567 dev_dbg(dev, "Fan 2 not enabled by hardware, skipping\n");
@@ -555,7 +572,9 @@ static int __devinit smsc47m1_probe(struct platform_device *pdev)
555 || (err = device_create_file(dev, 572 || (err = device_create_file(dev,
556 &sensor_dev_attr_fan3_min.dev_attr)) 573 &sensor_dev_attr_fan3_min.dev_attr))
557 || (err = device_create_file(dev, 574 || (err = device_create_file(dev,
558 &sensor_dev_attr_fan3_div.dev_attr))) 575 &sensor_dev_attr_fan3_div.dev_attr))
576 || (err = device_create_file(dev,
577 &sensor_dev_attr_fan3_alarm.dev_attr)))
559 goto error_remove_files; 578 goto error_remove_files;
560 } else if (data->type == smsc47m2) 579 } else if (data->type == smsc47m2)
561 dev_dbg(dev, "Fan 3 not enabled by hardware, skipping\n"); 580 dev_dbg(dev, "Fan 3 not enabled by hardware, skipping\n");
diff --git a/drivers/hwmon/smsc47m192.c b/drivers/hwmon/smsc47m192.c
index 8b0c188e60f6..3c9db6598ba7 100644
--- a/drivers/hwmon/smsc47m192.c
+++ b/drivers/hwmon/smsc47m192.c
@@ -34,7 +34,7 @@
34#include <linux/mutex.h> 34#include <linux/mutex.h>
35 35
36/* Addresses to scan */ 36/* Addresses to scan */
37static unsigned short normal_i2c[] = { 0x2c, 0x2d, I2C_CLIENT_END }; 37static const unsigned short normal_i2c[] = { 0x2c, 0x2d, I2C_CLIENT_END };
38 38
39/* Insmod parameters */ 39/* Insmod parameters */
40I2C_CLIENT_INSMOD_1(smsc47m192); 40I2C_CLIENT_INSMOD_1(smsc47m192);
diff --git a/drivers/hwmon/thmc50.c b/drivers/hwmon/thmc50.c
index 04dd7699b3ac..76a3859c3fbe 100644
--- a/drivers/hwmon/thmc50.c
+++ b/drivers/hwmon/thmc50.c
@@ -32,7 +32,7 @@
32MODULE_LICENSE("GPL"); 32MODULE_LICENSE("GPL");
33 33
34/* Addresses to scan */ 34/* Addresses to scan */
35static unsigned short normal_i2c[] = { 0x2c, 0x2d, 0x2e, I2C_CLIENT_END }; 35static const unsigned short normal_i2c[] = { 0x2c, 0x2d, 0x2e, I2C_CLIENT_END };
36 36
37/* Insmod parameters */ 37/* Insmod parameters */
38I2C_CLIENT_INSMOD_2(thmc50, adm1022); 38I2C_CLIENT_INSMOD_2(thmc50, adm1022);
@@ -52,9 +52,9 @@ I2C_CLIENT_MODULE_PARM(adm1022_temp3, "List of adapter,address pairs "
52 */ 52 */
53#define THMC50_REG_INTR 0x41 53#define THMC50_REG_INTR 0x41
54 54
55const static u8 THMC50_REG_TEMP[] = { 0x27, 0x26, 0x20 }; 55static const u8 THMC50_REG_TEMP[] = { 0x27, 0x26, 0x20 };
56const static u8 THMC50_REG_TEMP_MIN[] = { 0x3A, 0x38, 0x2C }; 56static const u8 THMC50_REG_TEMP_MIN[] = { 0x3A, 0x38, 0x2C };
57const static u8 THMC50_REG_TEMP_MAX[] = { 0x39, 0x37, 0x2B }; 57static const u8 THMC50_REG_TEMP_MAX[] = { 0x39, 0x37, 0x2B };
58 58
59#define THMC50_REG_CONF_nFANOFF 0x20 59#define THMC50_REG_CONF_nFANOFF 0x20
60 60
diff --git a/drivers/hwmon/via686a.c b/drivers/hwmon/via686a.c
index 2635bba1e3fc..f1ee5e731968 100644
--- a/drivers/hwmon/via686a.c
+++ b/drivers/hwmon/via686a.c
@@ -533,6 +533,24 @@ static ssize_t show_alarms(struct device *dev, struct device_attribute *attr, ch
533} 533}
534static DEVICE_ATTR(alarms, S_IRUGO, show_alarms, NULL); 534static DEVICE_ATTR(alarms, S_IRUGO, show_alarms, NULL);
535 535
536static ssize_t show_alarm(struct device *dev, struct device_attribute *attr,
537 char *buf)
538{
539 int bitnr = to_sensor_dev_attr(attr)->index;
540 struct via686a_data *data = via686a_update_device(dev);
541 return sprintf(buf, "%u\n", (data->alarms >> bitnr) & 1);
542}
543static SENSOR_DEVICE_ATTR(in0_alarm, S_IRUGO, show_alarm, NULL, 0);
544static SENSOR_DEVICE_ATTR(in1_alarm, S_IRUGO, show_alarm, NULL, 1);
545static SENSOR_DEVICE_ATTR(in2_alarm, S_IRUGO, show_alarm, NULL, 2);
546static SENSOR_DEVICE_ATTR(in3_alarm, S_IRUGO, show_alarm, NULL, 3);
547static SENSOR_DEVICE_ATTR(in4_alarm, S_IRUGO, show_alarm, NULL, 8);
548static SENSOR_DEVICE_ATTR(temp1_alarm, S_IRUGO, show_alarm, NULL, 4);
549static SENSOR_DEVICE_ATTR(temp2_alarm, S_IRUGO, show_alarm, NULL, 11);
550static SENSOR_DEVICE_ATTR(temp3_alarm, S_IRUGO, show_alarm, NULL, 15);
551static SENSOR_DEVICE_ATTR(fan1_alarm, S_IRUGO, show_alarm, NULL, 6);
552static SENSOR_DEVICE_ATTR(fan2_alarm, S_IRUGO, show_alarm, NULL, 7);
553
536static ssize_t show_name(struct device *dev, struct device_attribute 554static ssize_t show_name(struct device *dev, struct device_attribute
537 *devattr, char *buf) 555 *devattr, char *buf)
538{ 556{
@@ -557,6 +575,11 @@ static struct attribute *via686a_attributes[] = {
557 &sensor_dev_attr_in2_max.dev_attr.attr, 575 &sensor_dev_attr_in2_max.dev_attr.attr,
558 &sensor_dev_attr_in3_max.dev_attr.attr, 576 &sensor_dev_attr_in3_max.dev_attr.attr,
559 &sensor_dev_attr_in4_max.dev_attr.attr, 577 &sensor_dev_attr_in4_max.dev_attr.attr,
578 &sensor_dev_attr_in0_alarm.dev_attr.attr,
579 &sensor_dev_attr_in1_alarm.dev_attr.attr,
580 &sensor_dev_attr_in2_alarm.dev_attr.attr,
581 &sensor_dev_attr_in3_alarm.dev_attr.attr,
582 &sensor_dev_attr_in4_alarm.dev_attr.attr,
560 583
561 &sensor_dev_attr_temp1_input.dev_attr.attr, 584 &sensor_dev_attr_temp1_input.dev_attr.attr,
562 &sensor_dev_attr_temp2_input.dev_attr.attr, 585 &sensor_dev_attr_temp2_input.dev_attr.attr,
@@ -567,6 +590,9 @@ static struct attribute *via686a_attributes[] = {
567 &sensor_dev_attr_temp1_max_hyst.dev_attr.attr, 590 &sensor_dev_attr_temp1_max_hyst.dev_attr.attr,
568 &sensor_dev_attr_temp2_max_hyst.dev_attr.attr, 591 &sensor_dev_attr_temp2_max_hyst.dev_attr.attr,
569 &sensor_dev_attr_temp3_max_hyst.dev_attr.attr, 592 &sensor_dev_attr_temp3_max_hyst.dev_attr.attr,
593 &sensor_dev_attr_temp1_alarm.dev_attr.attr,
594 &sensor_dev_attr_temp2_alarm.dev_attr.attr,
595 &sensor_dev_attr_temp3_alarm.dev_attr.attr,
570 596
571 &sensor_dev_attr_fan1_input.dev_attr.attr, 597 &sensor_dev_attr_fan1_input.dev_attr.attr,
572 &sensor_dev_attr_fan2_input.dev_attr.attr, 598 &sensor_dev_attr_fan2_input.dev_attr.attr,
@@ -574,6 +600,8 @@ static struct attribute *via686a_attributes[] = {
574 &sensor_dev_attr_fan2_min.dev_attr.attr, 600 &sensor_dev_attr_fan2_min.dev_attr.attr,
575 &sensor_dev_attr_fan1_div.dev_attr.attr, 601 &sensor_dev_attr_fan1_div.dev_attr.attr,
576 &sensor_dev_attr_fan2_div.dev_attr.attr, 602 &sensor_dev_attr_fan2_div.dev_attr.attr,
603 &sensor_dev_attr_fan1_alarm.dev_attr.attr,
604 &sensor_dev_attr_fan2_alarm.dev_attr.attr,
577 605
578 &dev_attr_alarms.attr, 606 &dev_attr_alarms.attr,
579 &dev_attr_name.attr, 607 &dev_attr_name.attr,
diff --git a/drivers/hwmon/vt8231.c b/drivers/hwmon/vt8231.c
index f87661775fe0..5bc57275cae8 100644
--- a/drivers/hwmon/vt8231.c
+++ b/drivers/hwmon/vt8231.c
@@ -2,7 +2,7 @@
2 vt8231.c - Part of lm_sensors, Linux kernel modules 2 vt8231.c - Part of lm_sensors, Linux kernel modules
3 for hardware monitoring 3 for hardware monitoring
4 4
5 Copyright (c) 2005 Roger Lucas <roger@planbit.co.uk> 5 Copyright (c) 2005 Roger Lucas <vt8231@hiddenengine.co.uk>
6 Copyright (c) 2002 Mark D. Studebaker <mdsxyz123@yahoo.com> 6 Copyright (c) 2002 Mark D. Studebaker <mdsxyz123@yahoo.com>
7 Aaron M. Marsh <amarsh@sdf.lonestar.org> 7 Aaron M. Marsh <amarsh@sdf.lonestar.org>
8 8
@@ -541,6 +541,28 @@ static ssize_t show_alarms(struct device *dev, struct device_attribute *attr,
541} 541}
542static DEVICE_ATTR(alarms, S_IRUGO, show_alarms, NULL); 542static DEVICE_ATTR(alarms, S_IRUGO, show_alarms, NULL);
543 543
544static ssize_t show_alarm(struct device *dev, struct device_attribute *attr,
545 char *buf)
546{
547 int bitnr = to_sensor_dev_attr(attr)->index;
548 struct vt8231_data *data = vt8231_update_device(dev);
549 return sprintf(buf, "%u\n", (data->alarms >> bitnr) & 1);
550}
551static SENSOR_DEVICE_ATTR(temp1_alarm, S_IRUGO, show_alarm, NULL, 4);
552static SENSOR_DEVICE_ATTR(temp2_alarm, S_IRUGO, show_alarm, NULL, 11);
553static SENSOR_DEVICE_ATTR(temp3_alarm, S_IRUGO, show_alarm, NULL, 0);
554static SENSOR_DEVICE_ATTR(temp4_alarm, S_IRUGO, show_alarm, NULL, 1);
555static SENSOR_DEVICE_ATTR(temp5_alarm, S_IRUGO, show_alarm, NULL, 3);
556static SENSOR_DEVICE_ATTR(temp6_alarm, S_IRUGO, show_alarm, NULL, 8);
557static SENSOR_DEVICE_ATTR(in0_alarm, S_IRUGO, show_alarm, NULL, 11);
558static SENSOR_DEVICE_ATTR(in1_alarm, S_IRUGO, show_alarm, NULL, 0);
559static SENSOR_DEVICE_ATTR(in2_alarm, S_IRUGO, show_alarm, NULL, 1);
560static SENSOR_DEVICE_ATTR(in3_alarm, S_IRUGO, show_alarm, NULL, 3);
561static SENSOR_DEVICE_ATTR(in4_alarm, S_IRUGO, show_alarm, NULL, 8);
562static SENSOR_DEVICE_ATTR(in5_alarm, S_IRUGO, show_alarm, NULL, 2);
563static SENSOR_DEVICE_ATTR(fan1_alarm, S_IRUGO, show_alarm, NULL, 6);
564static SENSOR_DEVICE_ATTR(fan2_alarm, S_IRUGO, show_alarm, NULL, 7);
565
544static ssize_t show_name(struct device *dev, struct device_attribute 566static ssize_t show_name(struct device *dev, struct device_attribute
545 *devattr, char *buf) 567 *devattr, char *buf)
546{ 568{
@@ -549,36 +571,42 @@ static ssize_t show_name(struct device *dev, struct device_attribute
549} 571}
550static DEVICE_ATTR(name, S_IRUGO, show_name, NULL); 572static DEVICE_ATTR(name, S_IRUGO, show_name, NULL);
551 573
552static struct attribute *vt8231_attributes_temps[6][4] = { 574static struct attribute *vt8231_attributes_temps[6][5] = {
553 { 575 {
554 &dev_attr_temp1_input.attr, 576 &dev_attr_temp1_input.attr,
555 &dev_attr_temp1_max_hyst.attr, 577 &dev_attr_temp1_max_hyst.attr,
556 &dev_attr_temp1_max.attr, 578 &dev_attr_temp1_max.attr,
579 &sensor_dev_attr_temp1_alarm.dev_attr.attr,
557 NULL 580 NULL
558 }, { 581 }, {
559 &sensor_dev_attr_temp2_input.dev_attr.attr, 582 &sensor_dev_attr_temp2_input.dev_attr.attr,
560 &sensor_dev_attr_temp2_max_hyst.dev_attr.attr, 583 &sensor_dev_attr_temp2_max_hyst.dev_attr.attr,
561 &sensor_dev_attr_temp2_max.dev_attr.attr, 584 &sensor_dev_attr_temp2_max.dev_attr.attr,
585 &sensor_dev_attr_temp2_alarm.dev_attr.attr,
562 NULL 586 NULL
563 }, { 587 }, {
564 &sensor_dev_attr_temp3_input.dev_attr.attr, 588 &sensor_dev_attr_temp3_input.dev_attr.attr,
565 &sensor_dev_attr_temp3_max_hyst.dev_attr.attr, 589 &sensor_dev_attr_temp3_max_hyst.dev_attr.attr,
566 &sensor_dev_attr_temp3_max.dev_attr.attr, 590 &sensor_dev_attr_temp3_max.dev_attr.attr,
591 &sensor_dev_attr_temp3_alarm.dev_attr.attr,
567 NULL 592 NULL
568 }, { 593 }, {
569 &sensor_dev_attr_temp4_input.dev_attr.attr, 594 &sensor_dev_attr_temp4_input.dev_attr.attr,
570 &sensor_dev_attr_temp4_max_hyst.dev_attr.attr, 595 &sensor_dev_attr_temp4_max_hyst.dev_attr.attr,
571 &sensor_dev_attr_temp4_max.dev_attr.attr, 596 &sensor_dev_attr_temp4_max.dev_attr.attr,
597 &sensor_dev_attr_temp4_alarm.dev_attr.attr,
572 NULL 598 NULL
573 }, { 599 }, {
574 &sensor_dev_attr_temp5_input.dev_attr.attr, 600 &sensor_dev_attr_temp5_input.dev_attr.attr,
575 &sensor_dev_attr_temp5_max_hyst.dev_attr.attr, 601 &sensor_dev_attr_temp5_max_hyst.dev_attr.attr,
576 &sensor_dev_attr_temp5_max.dev_attr.attr, 602 &sensor_dev_attr_temp5_max.dev_attr.attr,
603 &sensor_dev_attr_temp5_alarm.dev_attr.attr,
577 NULL 604 NULL
578 }, { 605 }, {
579 &sensor_dev_attr_temp6_input.dev_attr.attr, 606 &sensor_dev_attr_temp6_input.dev_attr.attr,
580 &sensor_dev_attr_temp6_max_hyst.dev_attr.attr, 607 &sensor_dev_attr_temp6_max_hyst.dev_attr.attr,
581 &sensor_dev_attr_temp6_max.dev_attr.attr, 608 &sensor_dev_attr_temp6_max.dev_attr.attr,
609 &sensor_dev_attr_temp6_alarm.dev_attr.attr,
582 NULL 610 NULL
583 } 611 }
584}; 612};
@@ -592,36 +620,42 @@ static const struct attribute_group vt8231_group_temps[6] = {
592 { .attrs = vt8231_attributes_temps[5] }, 620 { .attrs = vt8231_attributes_temps[5] },
593}; 621};
594 622
595static struct attribute *vt8231_attributes_volts[6][4] = { 623static struct attribute *vt8231_attributes_volts[6][5] = {
596 { 624 {
597 &sensor_dev_attr_in0_input.dev_attr.attr, 625 &sensor_dev_attr_in0_input.dev_attr.attr,
598 &sensor_dev_attr_in0_min.dev_attr.attr, 626 &sensor_dev_attr_in0_min.dev_attr.attr,
599 &sensor_dev_attr_in0_max.dev_attr.attr, 627 &sensor_dev_attr_in0_max.dev_attr.attr,
628 &sensor_dev_attr_in0_alarm.dev_attr.attr,
600 NULL 629 NULL
601 }, { 630 }, {
602 &sensor_dev_attr_in1_input.dev_attr.attr, 631 &sensor_dev_attr_in1_input.dev_attr.attr,
603 &sensor_dev_attr_in1_min.dev_attr.attr, 632 &sensor_dev_attr_in1_min.dev_attr.attr,
604 &sensor_dev_attr_in1_max.dev_attr.attr, 633 &sensor_dev_attr_in1_max.dev_attr.attr,
634 &sensor_dev_attr_in1_alarm.dev_attr.attr,
605 NULL 635 NULL
606 }, { 636 }, {
607 &sensor_dev_attr_in2_input.dev_attr.attr, 637 &sensor_dev_attr_in2_input.dev_attr.attr,
608 &sensor_dev_attr_in2_min.dev_attr.attr, 638 &sensor_dev_attr_in2_min.dev_attr.attr,
609 &sensor_dev_attr_in2_max.dev_attr.attr, 639 &sensor_dev_attr_in2_max.dev_attr.attr,
640 &sensor_dev_attr_in2_alarm.dev_attr.attr,
610 NULL 641 NULL
611 }, { 642 }, {
612 &sensor_dev_attr_in3_input.dev_attr.attr, 643 &sensor_dev_attr_in3_input.dev_attr.attr,
613 &sensor_dev_attr_in3_min.dev_attr.attr, 644 &sensor_dev_attr_in3_min.dev_attr.attr,
614 &sensor_dev_attr_in3_max.dev_attr.attr, 645 &sensor_dev_attr_in3_max.dev_attr.attr,
646 &sensor_dev_attr_in3_alarm.dev_attr.attr,
615 NULL 647 NULL
616 }, { 648 }, {
617 &sensor_dev_attr_in4_input.dev_attr.attr, 649 &sensor_dev_attr_in4_input.dev_attr.attr,
618 &sensor_dev_attr_in4_min.dev_attr.attr, 650 &sensor_dev_attr_in4_min.dev_attr.attr,
619 &sensor_dev_attr_in4_max.dev_attr.attr, 651 &sensor_dev_attr_in4_max.dev_attr.attr,
652 &sensor_dev_attr_in4_alarm.dev_attr.attr,
620 NULL 653 NULL
621 }, { 654 }, {
622 &dev_attr_in5_input.attr, 655 &dev_attr_in5_input.attr,
623 &dev_attr_in5_min.attr, 656 &dev_attr_in5_min.attr,
624 &dev_attr_in5_max.attr, 657 &dev_attr_in5_max.attr,
658 &sensor_dev_attr_in5_alarm.dev_attr.attr,
625 NULL 659 NULL
626 } 660 }
627}; 661};
@@ -642,6 +676,8 @@ static struct attribute *vt8231_attributes[] = {
642 &sensor_dev_attr_fan2_min.dev_attr.attr, 676 &sensor_dev_attr_fan2_min.dev_attr.attr,
643 &sensor_dev_attr_fan1_div.dev_attr.attr, 677 &sensor_dev_attr_fan1_div.dev_attr.attr,
644 &sensor_dev_attr_fan2_div.dev_attr.attr, 678 &sensor_dev_attr_fan2_div.dev_attr.attr,
679 &sensor_dev_attr_fan1_alarm.dev_attr.attr,
680 &sensor_dev_attr_fan2_alarm.dev_attr.attr,
645 &dev_attr_alarms.attr, 681 &dev_attr_alarms.attr,
646 &dev_attr_name.attr, 682 &dev_attr_name.attr,
647 NULL 683 NULL
@@ -963,7 +999,7 @@ static void __exit sm_vt8231_exit(void)
963 } 999 }
964} 1000}
965 1001
966MODULE_AUTHOR("Roger Lucas <roger@planbit.co.uk>"); 1002MODULE_AUTHOR("Roger Lucas <vt8231@hiddenengine.co.uk>");
967MODULE_DESCRIPTION("VT8231 sensors"); 1003MODULE_DESCRIPTION("VT8231 sensors");
968MODULE_LICENSE("GPL"); 1004MODULE_LICENSE("GPL");
969 1005
diff --git a/drivers/hwmon/w83781d.c b/drivers/hwmon/w83781d.c
index 7421f6ea53e1..5c85670e2d16 100644
--- a/drivers/hwmon/w83781d.c
+++ b/drivers/hwmon/w83781d.c
@@ -53,8 +53,8 @@
53static struct platform_device *pdev; 53static struct platform_device *pdev;
54 54
55/* Addresses to scan */ 55/* Addresses to scan */
56static unsigned short normal_i2c[] = { 0x28, 0x29, 0x2a, 0x2b, 0x2c, 0x2d, 56static const unsigned short normal_i2c[] = { 0x28, 0x29, 0x2a, 0x2b, 0x2c, 0x2d,
57 0x2e, 0x2f, I2C_CLIENT_END }; 57 0x2e, 0x2f, I2C_CLIENT_END };
58static unsigned short isa_address = 0x290; 58static unsigned short isa_address = 0x290;
59 59
60/* Insmod parameters */ 60/* Insmod parameters */
diff --git a/drivers/hwmon/w83791d.c b/drivers/hwmon/w83791d.c
index 85bd21ee3298..85077c4c8039 100644
--- a/drivers/hwmon/w83791d.c
+++ b/drivers/hwmon/w83791d.c
@@ -47,7 +47,8 @@
47#define NUMBER_OF_TEMPIN 3 47#define NUMBER_OF_TEMPIN 3
48 48
49/* Addresses to scan */ 49/* Addresses to scan */
50static unsigned short normal_i2c[] = { 0x2c, 0x2d, 0x2e, 0x2f, I2C_CLIENT_END }; 50static const unsigned short normal_i2c[] = { 0x2c, 0x2d, 0x2e, 0x2f,
51 I2C_CLIENT_END };
51 52
52/* Insmod parameters */ 53/* Insmod parameters */
53I2C_CLIENT_INSMOD_1(w83791d); 54I2C_CLIENT_INSMOD_1(w83791d);
diff --git a/drivers/hwmon/w83792d.c b/drivers/hwmon/w83792d.c
index 007449d3e16e..299629d47ed6 100644
--- a/drivers/hwmon/w83792d.c
+++ b/drivers/hwmon/w83792d.c
@@ -46,7 +46,8 @@
46#include <linux/sysfs.h> 46#include <linux/sysfs.h>
47 47
48/* Addresses to scan */ 48/* Addresses to scan */
49static unsigned short normal_i2c[] = { 0x2c, 0x2d, 0x2e, 0x2f, I2C_CLIENT_END }; 49static const unsigned short normal_i2c[] = { 0x2c, 0x2d, 0x2e, 0x2f,
50 I2C_CLIENT_END };
50 51
51/* Insmod parameters */ 52/* Insmod parameters */
52I2C_CLIENT_INSMOD_1(w83792d); 53I2C_CLIENT_INSMOD_1(w83792d);
diff --git a/drivers/hwmon/w83793.c b/drivers/hwmon/w83793.c
index 3ba1d6b33473..ee35af93b574 100644
--- a/drivers/hwmon/w83793.c
+++ b/drivers/hwmon/w83793.c
@@ -37,7 +37,8 @@
37#include <linux/mutex.h> 37#include <linux/mutex.h>
38 38
39/* Addresses to scan */ 39/* Addresses to scan */
40static unsigned short normal_i2c[] = { 0x2c, 0x2d, 0x2e, 0x2f, I2C_CLIENT_END }; 40static const unsigned short normal_i2c[] = { 0x2c, 0x2d, 0x2e, 0x2f,
41 I2C_CLIENT_END };
41 42
42/* Insmod parameters */ 43/* Insmod parameters */
43I2C_CLIENT_INSMOD_1(w83793); 44I2C_CLIENT_INSMOD_1(w83793);
diff --git a/drivers/hwmon/w83l785ts.c b/drivers/hwmon/w83l785ts.c
index 1d6259d29e74..77f2d482888b 100644
--- a/drivers/hwmon/w83l785ts.c
+++ b/drivers/hwmon/w83l785ts.c
@@ -49,7 +49,7 @@
49 * Address is fully defined internally and cannot be changed. 49 * Address is fully defined internally and cannot be changed.
50 */ 50 */
51 51
52static unsigned short normal_i2c[] = { 0x2e, I2C_CLIENT_END }; 52static const unsigned short normal_i2c[] = { 0x2e, I2C_CLIENT_END };
53 53
54/* 54/*
55 * Insmod parameters 55 * Insmod parameters
diff --git a/drivers/hwmon/w83l786ng.c b/drivers/hwmon/w83l786ng.c
index 1dbee4fa23ad..41e22ddb568a 100644
--- a/drivers/hwmon/w83l786ng.c
+++ b/drivers/hwmon/w83l786ng.c
@@ -35,7 +35,7 @@
35#include <linux/mutex.h> 35#include <linux/mutex.h>
36 36
37/* Addresses to scan */ 37/* Addresses to scan */
38static unsigned short normal_i2c[] = { 0x2e, 0x2f, I2C_CLIENT_END }; 38static const unsigned short normal_i2c[] = { 0x2e, 0x2f, I2C_CLIENT_END };
39 39
40/* Insmod parameters */ 40/* Insmod parameters */
41I2C_CLIENT_INSMOD_1(w83l786ng); 41I2C_CLIENT_INSMOD_1(w83l786ng);
diff --git a/drivers/i2c/busses/Kconfig b/drivers/i2c/busses/Kconfig
index b61f56b6f311..476b0bb72d6c 100644
--- a/drivers/i2c/busses/Kconfig
+++ b/drivers/i2c/busses/Kconfig
@@ -177,6 +177,8 @@ config I2C_I801
177 ESB2 177 ESB2
178 ICH8 178 ICH8
179 ICH9 179 ICH9
180 Tolapai
181 ICH10
180 182
181 This driver can also be built as a module. If so, the module 183 This driver can also be built as a module. If so, the module
182 will be called i2c-i801. 184 will be called i2c-i801.
diff --git a/drivers/i2c/busses/i2c-i801.c b/drivers/i2c/busses/i2c-i801.c
index aa9157913b9a..b0f771fe4326 100644
--- a/drivers/i2c/busses/i2c-i801.c
+++ b/drivers/i2c/busses/i2c-i801.c
@@ -40,7 +40,9 @@
40 82801G (ICH7) 0x27da 32 hard yes yes yes 40 82801G (ICH7) 0x27da 32 hard yes yes yes
41 82801H (ICH8) 0x283e 32 hard yes yes yes 41 82801H (ICH8) 0x283e 32 hard yes yes yes
42 82801I (ICH9) 0x2930 32 hard yes yes yes 42 82801I (ICH9) 0x2930 32 hard yes yes yes
43 Tolapai 0x5032 32 hard yes ? ? 43 Tolapai 0x5032 32 hard yes yes yes
44 ICH10 0x3a30 32 hard yes yes yes
45 ICH10 0x3a60 32 hard yes yes yes
44 46
45 Features supported by this driver: 47 Features supported by this driver:
46 Software PEC no 48 Software PEC no
@@ -588,6 +590,8 @@ static struct pci_device_id i801_ids[] = {
588 { PCI_DEVICE(PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_INTEL_ICH8_5) }, 590 { PCI_DEVICE(PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_INTEL_ICH8_5) },
589 { PCI_DEVICE(PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_INTEL_ICH9_6) }, 591 { PCI_DEVICE(PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_INTEL_ICH9_6) },
590 { PCI_DEVICE(PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_INTEL_TOLAPAI_1) }, 592 { PCI_DEVICE(PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_INTEL_TOLAPAI_1) },
593 { PCI_DEVICE(PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_INTEL_ICH10_4) },
594 { PCI_DEVICE(PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_INTEL_ICH10_5) },
591 { 0, } 595 { 0, }
592}; 596};
593 597
@@ -608,10 +612,12 @@ static int __devinit i801_probe(struct pci_dev *dev, const struct pci_device_id
608 case PCI_DEVICE_ID_INTEL_ESB2_17: 612 case PCI_DEVICE_ID_INTEL_ESB2_17:
609 case PCI_DEVICE_ID_INTEL_ICH8_5: 613 case PCI_DEVICE_ID_INTEL_ICH8_5:
610 case PCI_DEVICE_ID_INTEL_ICH9_6: 614 case PCI_DEVICE_ID_INTEL_ICH9_6:
615 case PCI_DEVICE_ID_INTEL_TOLAPAI_1:
616 case PCI_DEVICE_ID_INTEL_ICH10_4:
617 case PCI_DEVICE_ID_INTEL_ICH10_5:
611 i801_features |= FEATURE_I2C_BLOCK_READ; 618 i801_features |= FEATURE_I2C_BLOCK_READ;
612 /* fall through */ 619 /* fall through */
613 case PCI_DEVICE_ID_INTEL_82801DB_3: 620 case PCI_DEVICE_ID_INTEL_82801DB_3:
614 case PCI_DEVICE_ID_INTEL_TOLAPAI_1:
615 i801_features |= FEATURE_SMBUS_PEC; 621 i801_features |= FEATURE_SMBUS_PEC;
616 i801_features |= FEATURE_BLOCK_BUFFER; 622 i801_features |= FEATURE_BLOCK_BUFFER;
617 break; 623 break;
diff --git a/drivers/i2c/busses/i2c-pca-isa.c b/drivers/i2c/busses/i2c-pca-isa.c
index 5161aaf9341b..496ee875eb4f 100644
--- a/drivers/i2c/busses/i2c-pca-isa.c
+++ b/drivers/i2c/busses/i2c-pca-isa.c
@@ -125,6 +125,13 @@ static int __devinit pca_isa_probe(struct device *dev, unsigned int id)
125 125
126 dev_info(dev, "i/o base %#08lx. irq %d\n", base, irq); 126 dev_info(dev, "i/o base %#08lx. irq %d\n", base, irq);
127 127
128#ifdef CONFIG_PPC_MERGE
129 if (check_legacy_ioport(base)) {
130 dev_err(dev, "I/O address %#08lx is not available\n", base);
131 goto out;
132 }
133#endif
134
128 if (!request_region(base, IO_SIZE, "i2c-pca-isa")) { 135 if (!request_region(base, IO_SIZE, "i2c-pca-isa")) {
129 dev_err(dev, "I/O address %#08lx is in use\n", base); 136 dev_err(dev, "I/O address %#08lx is in use\n", base);
130 goto out; 137 goto out;
diff --git a/drivers/i2c/busses/i2c-pmcmsp.c b/drivers/i2c/busses/i2c-pmcmsp.c
index be99c02ecac5..b03af5653c65 100644
--- a/drivers/i2c/busses/i2c-pmcmsp.c
+++ b/drivers/i2c/busses/i2c-pmcmsp.c
@@ -122,7 +122,7 @@ struct pmcmsptwi_data {
122}; 122};
123 123
124/* The default settings */ 124/* The default settings */
125const static struct pmcmsptwi_clockcfg pmcmsptwi_defclockcfg = { 125static const struct pmcmsptwi_clockcfg pmcmsptwi_defclockcfg = {
126 .standard = { 126 .standard = {
127 .filter = 0x3, 127 .filter = 0x3,
128 .clock = 0x1f, 128 .clock = 0x1f,
@@ -133,7 +133,7 @@ const static struct pmcmsptwi_clockcfg pmcmsptwi_defclockcfg = {
133 }, 133 },
134}; 134};
135 135
136const static struct pmcmsptwi_cfg pmcmsptwi_defcfg = { 136static const struct pmcmsptwi_cfg pmcmsptwi_defcfg = {
137 .arbf = 0x03, 137 .arbf = 0x03,
138 .nak = 0x03, 138 .nak = 0x03,
139 .add10 = 0x00, 139 .add10 = 0x00,
diff --git a/drivers/i2c/busses/i2c-pxa.c b/drivers/i2c/busses/i2c-pxa.c
index 2598d29fd7a4..2d2087ad708f 100644
--- a/drivers/i2c/busses/i2c-pxa.c
+++ b/drivers/i2c/busses/i2c-pxa.c
@@ -138,11 +138,13 @@ static const struct bits icr_bits[] = {
138 PXA_BIT(ICR_UR, "UR", "ur"), 138 PXA_BIT(ICR_UR, "UR", "ur"),
139}; 139};
140 140
141#ifdef CONFIG_I2C_PXA_SLAVE
141static void decode_ICR(unsigned int val) 142static void decode_ICR(unsigned int val)
142{ 143{
143 decode_bits(KERN_DEBUG "ICR", icr_bits, ARRAY_SIZE(icr_bits), val); 144 decode_bits(KERN_DEBUG "ICR", icr_bits, ARRAY_SIZE(icr_bits), val);
144 printk("\n"); 145 printk("\n");
145} 146}
147#endif
146 148
147static unsigned int i2c_debug = DEBUG; 149static unsigned int i2c_debug = DEBUG;
148 150
@@ -997,7 +999,14 @@ static int i2c_pxa_probe(struct platform_device *dev)
997 spin_lock_init(&i2c->lock); 999 spin_lock_init(&i2c->lock);
998 init_waitqueue_head(&i2c->wait); 1000 init_waitqueue_head(&i2c->wait);
999 1001
1000 sprintf(i2c->adap.name, "pxa_i2c-i2c.%u", dev->id); 1002 /*
1003 * If "dev->id" is negative we consider it as zero.
1004 * The reason to do so is to avoid sysfs names that only make
1005 * sense when there are multiple adapters.
1006 */
1007 i2c->adap.nr = dev->id != -1 ? dev->id : 0;
1008 snprintf(i2c->adap.name, sizeof(i2c->adap.name), "pxa_i2c-i2c.%u",
1009 i2c->adap.nr);
1001 1010
1002 i2c->clk = clk_get(&dev->dev, "I2CCLK"); 1011 i2c->clk = clk_get(&dev->dev, "I2CCLK");
1003 if (IS_ERR(i2c->clk)) { 1012 if (IS_ERR(i2c->clk)) {
@@ -1048,13 +1057,6 @@ static int i2c_pxa_probe(struct platform_device *dev)
1048 i2c->adap.algo_data = i2c; 1057 i2c->adap.algo_data = i2c;
1049 i2c->adap.dev.parent = &dev->dev; 1058 i2c->adap.dev.parent = &dev->dev;
1050 1059
1051 /*
1052 * If "dev->id" is negative we consider it as zero.
1053 * The reason to do so is to avoid sysfs names that only make
1054 * sense when there are multiple adapters.
1055 */
1056 i2c->adap.nr = dev->id != -1 ? dev->id : 0;
1057
1058 ret = i2c_add_numbered_adapter(&i2c->adap); 1060 ret = i2c_add_numbered_adapter(&i2c->adap);
1059 if (ret < 0) { 1061 if (ret < 0) {
1060 printk(KERN_INFO "I2C: Failed to add bus\n"); 1062 printk(KERN_INFO "I2C: Failed to add bus\n");
@@ -1078,6 +1080,7 @@ eadapt:
1078ereqirq: 1080ereqirq:
1079 clk_disable(i2c->clk); 1081 clk_disable(i2c->clk);
1080 i2c_pxa_disable(dev); 1082 i2c_pxa_disable(dev);
1083 iounmap(i2c->reg_base);
1081eremap: 1084eremap:
1082 clk_put(i2c->clk); 1085 clk_put(i2c->clk);
1083eclk: 1086eclk:
@@ -1087,7 +1090,7 @@ emalloc:
1087 return ret; 1090 return ret;
1088} 1091}
1089 1092
1090static int i2c_pxa_remove(struct platform_device *dev) 1093static int __exit i2c_pxa_remove(struct platform_device *dev)
1091{ 1094{
1092 struct pxa_i2c *i2c = platform_get_drvdata(dev); 1095 struct pxa_i2c *i2c = platform_get_drvdata(dev);
1093 1096
@@ -1101,6 +1104,7 @@ static int i2c_pxa_remove(struct platform_device *dev)
1101 clk_put(i2c->clk); 1104 clk_put(i2c->clk);
1102 i2c_pxa_disable(dev); 1105 i2c_pxa_disable(dev);
1103 1106
1107 iounmap(i2c->reg_base);
1104 release_mem_region(i2c->iobase, i2c->iosize); 1108 release_mem_region(i2c->iobase, i2c->iosize);
1105 kfree(i2c); 1109 kfree(i2c);
1106 1110
@@ -1109,9 +1113,10 @@ static int i2c_pxa_remove(struct platform_device *dev)
1109 1113
1110static struct platform_driver i2c_pxa_driver = { 1114static struct platform_driver i2c_pxa_driver = {
1111 .probe = i2c_pxa_probe, 1115 .probe = i2c_pxa_probe,
1112 .remove = i2c_pxa_remove, 1116 .remove = __exit_p(i2c_pxa_remove),
1113 .driver = { 1117 .driver = {
1114 .name = "pxa2xx-i2c", 1118 .name = "pxa2xx-i2c",
1119 .owner = THIS_MODULE,
1115 }, 1120 },
1116}; 1121};
1117 1122
@@ -1120,9 +1125,9 @@ static int __init i2c_adap_pxa_init(void)
1120 return platform_driver_register(&i2c_pxa_driver); 1125 return platform_driver_register(&i2c_pxa_driver);
1121} 1126}
1122 1127
1123static void i2c_adap_pxa_exit(void) 1128static void __exit i2c_adap_pxa_exit(void)
1124{ 1129{
1125 return platform_driver_unregister(&i2c_pxa_driver); 1130 platform_driver_unregister(&i2c_pxa_driver);
1126} 1131}
1127 1132
1128MODULE_LICENSE("GPL"); 1133MODULE_LICENSE("GPL");
diff --git a/drivers/ide/ide-cd.c b/drivers/ide/ide-cd.c
index 354c91d06a6d..310e497b5838 100644
--- a/drivers/ide/ide-cd.c
+++ b/drivers/ide/ide-cd.c
@@ -1207,9 +1207,13 @@ static ide_startstop_t cdrom_newpc_intr(ide_drive_t *drive)
1207end_request: 1207end_request:
1208 if (blk_pc_request(rq)) { 1208 if (blk_pc_request(rq)) {
1209 unsigned long flags; 1209 unsigned long flags;
1210 unsigned int dlen = rq->data_len;
1211
1212 if (dma)
1213 rq->data_len = 0;
1210 1214
1211 spin_lock_irqsave(&ide_lock, flags); 1215 spin_lock_irqsave(&ide_lock, flags);
1212 if (__blk_end_request(rq, 0, rq->data_len)) 1216 if (__blk_end_request(rq, 0, dlen))
1213 BUG(); 1217 BUG();
1214 HWGROUP(drive)->rq = NULL; 1218 HWGROUP(drive)->rq = NULL;
1215 spin_unlock_irqrestore(&ide_lock, flags); 1219 spin_unlock_irqrestore(&ide_lock, flags);
diff --git a/drivers/ide/ide-disk.c b/drivers/ide/ide-disk.c
index aed8b31ca561..8f5bed471050 100644
--- a/drivers/ide/ide-disk.c
+++ b/drivers/ide/ide-disk.c
@@ -397,6 +397,7 @@ static inline int idedisk_supports_lba48(const struct hd_driveid *id)
397static const struct drive_list_entry hpa_list[] = { 397static const struct drive_list_entry hpa_list[] = {
398 { "ST340823A", NULL }, 398 { "ST340823A", NULL },
399 { "ST320413A", NULL }, 399 { "ST320413A", NULL },
400 { "ST310211A", NULL },
400 { NULL, NULL } 401 { NULL, NULL }
401}; 402};
402 403
diff --git a/drivers/ide/ide-generic.c b/drivers/ide/ide-generic.c
index 709b9e4d2871..9ebec08eefd9 100644
--- a/drivers/ide/ide-generic.c
+++ b/drivers/ide/ide-generic.c
@@ -17,9 +17,6 @@ static int __init ide_generic_init(void)
17 u8 idx[MAX_HWIFS]; 17 u8 idx[MAX_HWIFS];
18 int i; 18 int i;
19 19
20 if (ide_hwifs[0].io_ports[IDE_DATA_OFFSET])
21 ide_get_lock(NULL, NULL); /* for atari only */
22
23 for (i = 0; i < MAX_HWIFS; i++) { 20 for (i = 0; i < MAX_HWIFS; i++) {
24 ide_hwif_t *hwif = &ide_hwifs[i]; 21 ide_hwif_t *hwif = &ide_hwifs[i];
25 22
@@ -31,9 +28,6 @@ static int __init ide_generic_init(void)
31 28
32 ide_device_add_all(idx, NULL); 29 ide_device_add_all(idx, NULL);
33 30
34 if (ide_hwifs[0].io_ports[IDE_DATA_OFFSET])
35 ide_release_lock(); /* for atari only */
36
37 return 0; 31 return 0;
38} 32}
39 33
diff --git a/drivers/ide/ide.c b/drivers/ide/ide.c
index 4a8952a6c3da..477833f0daf5 100644
--- a/drivers/ide/ide.c
+++ b/drivers/ide/ide.c
@@ -1229,7 +1229,7 @@ static int __init ide_setup(char *s)
1229 if (!strcmp(s, "ide=reverse")) { 1229 if (!strcmp(s, "ide=reverse")) {
1230 ide_scan_direction = 1; 1230 ide_scan_direction = 1;
1231 printk(" : Enabled support for IDE inverse scan order.\n"); 1231 printk(" : Enabled support for IDE inverse scan order.\n");
1232 return 1; 1232 goto obsolete_option;
1233 } 1233 }
1234#endif 1234#endif
1235 1235
diff --git a/drivers/ide/legacy/falconide.c b/drivers/ide/legacy/falconide.c
index f044048903b3..8949ce71bddc 100644
--- a/drivers/ide/legacy/falconide.c
+++ b/drivers/ide/legacy/falconide.c
@@ -54,7 +54,7 @@ static void __init falconide_setup_ports(hw_regs_t *hw)
54 for (i = 1; i < 8; i++) 54 for (i = 1; i < 8; i++)
55 hw->io_ports[i] = ATA_HD_BASE + 1 + i * 4; 55 hw->io_ports[i] = ATA_HD_BASE + 1 + i * 4;
56 56
57 hw->io_ports[IDE_CONTROL_OFFSET] = ATA_HD_CONTROL; 57 hw->io_ports[IDE_CONTROL_OFFSET] = ATA_HD_BASE + ATA_HD_CONTROL;
58 58
59 hw->irq = IRQ_MFP_IDE; 59 hw->irq = IRQ_MFP_IDE;
60 hw->ack_intr = NULL; 60 hw->ack_intr = NULL;
@@ -84,7 +84,9 @@ static int __init falconide_init(void)
84 ide_init_port_data(hwif, index); 84 ide_init_port_data(hwif, index);
85 ide_init_port_hw(hwif, &hw); 85 ide_init_port_hw(hwif, &hw);
86 86
87 ide_get_lock(NULL, NULL);
87 ide_device_add(idx, NULL); 88 ide_device_add(idx, NULL);
89 ide_release_lock();
88 } 90 }
89 91
90 return 0; 92 return 0;
diff --git a/drivers/ide/legacy/ht6560b.c b/drivers/ide/legacy/ht6560b.c
index 02d12c74764a..78ca68e60f97 100644
--- a/drivers/ide/legacy/ht6560b.c
+++ b/drivers/ide/legacy/ht6560b.c
@@ -21,18 +21,21 @@
21 * "Prefetch" mode bit OFF for ide disks and 21 * "Prefetch" mode bit OFF for ide disks and
22 * ON for anything else. 22 * ON for anything else.
23 * 23 *
24 * Version 0.08 Need to force prefetch for CDs and other non-disk
25 * devices. (not sure which devices exactly need
26 * prefetch)
24 * 27 *
25 * HT-6560B EIDE-controller support 28 * HT-6560B EIDE-controller support
26 * To activate controller support use kernel parameter "ide0=ht6560b". 29 * To activate controller support use kernel parameter "ide0=ht6560b".
27 * Use hdparm utility to enable PIO mode support. 30 * Use hdparm utility to enable PIO mode support.
28 * 31 *
29 * Author: Mikko Ala-Fossi <maf@iki.fi> 32 * Author: Mikko Ala-Fossi <maf@iki.fi>
30 * Jan Evert van Grootheest <janevert@iae.nl> 33 * Jan Evert van Grootheest <janevert@caiway.nl>
31 * 34 *
32 * Try: http://www.maf.iki.fi/~maf/ht6560b/ 35 * Try: http://www.maf.iki.fi/~maf/ht6560b/
33 */ 36 */
34 37
35#define HT6560B_VERSION "v0.07" 38#define HT6560B_VERSION "v0.08"
36 39
37#include <linux/module.h> 40#include <linux/module.h>
38#include <linux/types.h> 41#include <linux/types.h>
@@ -130,15 +133,20 @@ static void ht6560b_selectproc (ide_drive_t *drive)
130 u8 select, timing; 133 u8 select, timing;
131 134
132 local_irq_save(flags); 135 local_irq_save(flags);
133 136
134 select = HT_CONFIG(drive); 137 select = HT_CONFIG(drive);
135 timing = HT_TIMING(drive); 138 timing = HT_TIMING(drive);
136 139
140 /*
141 * Need to enforce prefetch sometimes because otherwise
142 * it'll hang (hard).
143 */
144 if (drive->media != ide_disk || !drive->present)
145 select |= HT_PREFETCH_MODE;
146
137 if (select != current_select || timing != current_timing) { 147 if (select != current_select || timing != current_timing) {
138 current_select = select; 148 current_select = select;
139 current_timing = timing; 149 current_timing = timing;
140 if (drive->media != ide_disk || !drive->present)
141 select |= HT_PREFETCH_MODE;
142 (void)inb(HT_CONFIG_PORT); 150 (void)inb(HT_CONFIG_PORT);
143 (void)inb(HT_CONFIG_PORT); 151 (void)inb(HT_CONFIG_PORT);
144 (void)inb(HT_CONFIG_PORT); 152 (void)inb(HT_CONFIG_PORT);
@@ -188,11 +196,12 @@ static int __init try_to_init_ht6560b(void)
188 outb(HT_TIMING_DEFAULT, 0x1f6); /* IDE_SELECT_REG */ 196 outb(HT_TIMING_DEFAULT, 0x1f6); /* IDE_SELECT_REG */
189 (void) inb(0x1f7); /* IDE_STATUS_REG */ 197 (void) inb(0x1f7); /* IDE_STATUS_REG */
190 198
191 printk("\nht6560b " HT6560B_VERSION 199 printk("ht6560b " HT6560B_VERSION
192 ": chipset detected and initialized" 200 ": chipset detected and initialized"
193#ifdef DEBUG 201#ifdef DEBUG
194 " with debug enabled" 202 " with debug enabled"
195#endif 203#endif
204 "\n"
196 ); 205 );
197 return 1; 206 return 1;
198} 207}
@@ -323,7 +332,7 @@ static const struct ide_port_info ht6560b_port_info __initdata = {
323 IDE_HFLAG_NO_DMA | 332 IDE_HFLAG_NO_DMA |
324 IDE_HFLAG_NO_AUTOTUNE | 333 IDE_HFLAG_NO_AUTOTUNE |
325 IDE_HFLAG_ABUSE_PREFETCH, 334 IDE_HFLAG_ABUSE_PREFETCH,
326 .pio_mask = ATA_PIO5, 335 .pio_mask = ATA_PIO4,
327}; 336};
328 337
329static int __init ht6560b_init(void) 338static int __init ht6560b_init(void)
diff --git a/drivers/ide/legacy/macide.c b/drivers/ide/legacy/macide.c
index a61e60737dc7..9a79098d9eb4 100644
--- a/drivers/ide/legacy/macide.c
+++ b/drivers/ide/legacy/macide.c
@@ -74,7 +74,7 @@ static void __init macide_setup_ports(hw_regs_t *hw, unsigned long base,
74 for (i = 0; i < 8; i++) 74 for (i = 0; i < 8; i++)
75 hw->io_ports[i] = base + i * 4; 75 hw->io_ports[i] = base + i * 4;
76 76
77 hw->io_ports[IDE_CONTROL_OFFSET] = IDE_CONTROL; 77 hw->io_ports[IDE_CONTROL_OFFSET] = base + IDE_CONTROL;
78 78
79 hw->irq = irq; 79 hw->irq = irq;
80 hw->ack_intr = ack_intr; 80 hw->ack_intr = ack_intr;
diff --git a/drivers/ide/pci/via82cxxx.c b/drivers/ide/pci/via82cxxx.c
index f3f79f805813..9004e7521889 100644
--- a/drivers/ide/pci/via82cxxx.c
+++ b/drivers/ide/pci/via82cxxx.c
@@ -479,6 +479,7 @@ static int __devinit via_init_one(struct pci_dev *dev, const struct pci_device_i
479static const struct pci_device_id via_pci_tbl[] = { 479static const struct pci_device_id via_pci_tbl[] = {
480 { PCI_VDEVICE(VIA, PCI_DEVICE_ID_VIA_82C576_1), 0 }, 480 { PCI_VDEVICE(VIA, PCI_DEVICE_ID_VIA_82C576_1), 0 },
481 { PCI_VDEVICE(VIA, PCI_DEVICE_ID_VIA_82C586_1), 0 }, 481 { PCI_VDEVICE(VIA, PCI_DEVICE_ID_VIA_82C586_1), 0 },
482 { PCI_VDEVICE(VIA, PCI_DEVICE_ID_VIA_CX700_IDE), 0 },
482 { PCI_VDEVICE(VIA, PCI_DEVICE_ID_VIA_6410), 1 }, 483 { PCI_VDEVICE(VIA, PCI_DEVICE_ID_VIA_6410), 1 },
483 { PCI_VDEVICE(VIA, PCI_DEVICE_ID_VIA_SATA_EIDE), 1 }, 484 { PCI_VDEVICE(VIA, PCI_DEVICE_ID_VIA_SATA_EIDE), 1 },
484 { 0, }, 485 { 0, },
diff --git a/drivers/ide/ppc/pmac.c b/drivers/ide/ppc/pmac.c
index 12ac3bfb4f9a..78c9eeb85634 100644
--- a/drivers/ide/ppc/pmac.c
+++ b/drivers/ide/ppc/pmac.c
@@ -1254,7 +1254,7 @@ pmac_ide_macio_suspend(struct macio_dev *mdev, pm_message_t mesg)
1254 int rc = 0; 1254 int rc = 0;
1255 1255
1256 if (mesg.event != mdev->ofdev.dev.power.power_state.event 1256 if (mesg.event != mdev->ofdev.dev.power.power_state.event
1257 && mesg.event == PM_EVENT_SUSPEND) { 1257 && (mesg.event & PM_EVENT_SLEEP)) {
1258 rc = pmac_ide_do_suspend(hwif); 1258 rc = pmac_ide_do_suspend(hwif);
1259 if (rc == 0) 1259 if (rc == 0)
1260 mdev->ofdev.dev.power.power_state = mesg; 1260 mdev->ofdev.dev.power.power_state = mesg;
@@ -1364,7 +1364,7 @@ pmac_ide_pci_suspend(struct pci_dev *pdev, pm_message_t mesg)
1364 int rc = 0; 1364 int rc = 0;
1365 1365
1366 if (mesg.event != pdev->dev.power.power_state.event 1366 if (mesg.event != pdev->dev.power.power_state.event
1367 && mesg.event == PM_EVENT_SUSPEND) { 1367 && (mesg.event & PM_EVENT_SLEEP)) {
1368 rc = pmac_ide_do_suspend(hwif); 1368 rc = pmac_ide_do_suspend(hwif);
1369 if (rc == 0) 1369 if (rc == 0)
1370 pdev->dev.power.power_state = mesg; 1370 pdev->dev.power.power_state = mesg;
diff --git a/drivers/infiniband/core/sysfs.c b/drivers/infiniband/core/sysfs.c
index c864ef70fdf9..5a4b2e65534b 100644
--- a/drivers/infiniband/core/sysfs.c
+++ b/drivers/infiniband/core/sysfs.c
@@ -686,8 +686,10 @@ int ib_device_register_sysfs(struct ib_device *device)
686 686
687 device->ports_parent = kobject_create_and_add("ports", 687 device->ports_parent = kobject_create_and_add("ports",
688 kobject_get(&class_dev->kobj)); 688 kobject_get(&class_dev->kobj));
689 if (!device->ports_parent) 689 if (!device->ports_parent) {
690 ret = -ENOMEM;
690 goto err_put; 691 goto err_put;
692 }
691 693
692 if (device->node_type == RDMA_NODE_IB_SWITCH) { 694 if (device->node_type == RDMA_NODE_IB_SWITCH) {
693 ret = add_port(device, 0); 695 ret = add_port(device, 0);
diff --git a/drivers/infiniband/hw/mthca/mthca_mr.c b/drivers/infiniband/hw/mthca/mthca_mr.c
index 3b6985557cb2..3538da16e3fe 100644
--- a/drivers/infiniband/hw/mthca/mthca_mr.c
+++ b/drivers/infiniband/hw/mthca/mthca_mr.c
@@ -686,7 +686,7 @@ err_out_table:
686 mthca_table_put(dev, dev->mr_table.mpt_table, key); 686 mthca_table_put(dev, dev->mr_table.mpt_table, key);
687 687
688err_out_mpt_free: 688err_out_mpt_free:
689 mthca_free(&dev->mr_table.mpt_alloc, mr->ibmr.lkey); 689 mthca_free(&dev->mr_table.mpt_alloc, key);
690 return err; 690 return err;
691} 691}
692 692
diff --git a/drivers/infiniband/hw/nes/nes_nic.c b/drivers/infiniband/hw/nes/nes_nic.c
index b6cc265aa9a4..eee77da61935 100644
--- a/drivers/infiniband/hw/nes/nes_nic.c
+++ b/drivers/infiniband/hw/nes/nes_nic.c
@@ -148,14 +148,15 @@ static int nes_netdev_open(struct net_device *netdev)
148 struct nes_device *nesdev = nesvnic->nesdev; 148 struct nes_device *nesdev = nesvnic->nesdev;
149 int ret; 149 int ret;
150 int i; 150 int i;
151 struct nes_vnic *first_nesvnic; 151 struct nes_vnic *first_nesvnic = NULL;
152 u32 nic_active_bit; 152 u32 nic_active_bit;
153 u32 nic_active; 153 u32 nic_active;
154 struct list_head *list_pos, *list_temp;
154 155
155 assert(nesdev != NULL); 156 assert(nesdev != NULL);
156 157
157 first_nesvnic = list_entry(nesdev->nesadapter->nesvnic_list[nesdev->mac_index].next, 158 if (nesvnic->netdev_open == 1)
158 struct nes_vnic, list); 159 return 0;
159 160
160 if (netif_msg_ifup(nesvnic)) 161 if (netif_msg_ifup(nesvnic))
161 printk(KERN_INFO PFX "%s: enabling interface\n", netdev->name); 162 printk(KERN_INFO PFX "%s: enabling interface\n", netdev->name);
@@ -225,7 +226,18 @@ static int nes_netdev_open(struct net_device *netdev)
225 nes_write32(nesdev->regs+NES_CQE_ALLOC, NES_CQE_ALLOC_NOTIFY_NEXT | 226 nes_write32(nesdev->regs+NES_CQE_ALLOC, NES_CQE_ALLOC_NOTIFY_NEXT |
226 nesvnic->nic_cq.cq_number); 227 nesvnic->nic_cq.cq_number);
227 nes_read32(nesdev->regs+NES_CQE_ALLOC); 228 nes_read32(nesdev->regs+NES_CQE_ALLOC);
228 229 list_for_each_safe(list_pos, list_temp, &nesdev->nesadapter->nesvnic_list[nesdev->mac_index]) {
230 first_nesvnic = container_of(list_pos, struct nes_vnic, list);
231 if (first_nesvnic->netdev_open == 1)
232 break;
233 }
234 if (first_nesvnic->netdev_open == 0) {
235 nes_debug(NES_DBG_INIT, "Setting up MAC interrupt mask.\n");
236 nes_write_indexed(nesdev, NES_IDX_MAC_INT_MASK + (0x200 * nesdev->mac_index),
237 ~(NES_MAC_INT_LINK_STAT_CHG | NES_MAC_INT_XGMII_EXT |
238 NES_MAC_INT_TX_UNDERFLOW | NES_MAC_INT_TX_ERROR));
239 first_nesvnic = nesvnic;
240 }
229 if (first_nesvnic->linkup) { 241 if (first_nesvnic->linkup) {
230 /* Enable network packets */ 242 /* Enable network packets */
231 nesvnic->linkup = 1; 243 nesvnic->linkup = 1;
@@ -248,6 +260,8 @@ static int nes_netdev_stop(struct net_device *netdev)
248 struct nes_device *nesdev = nesvnic->nesdev; 260 struct nes_device *nesdev = nesvnic->nesdev;
249 u32 nic_active_mask; 261 u32 nic_active_mask;
250 u32 nic_active; 262 u32 nic_active;
263 struct nes_vnic *first_nesvnic = NULL;
264 struct list_head *list_pos, *list_temp;
251 265
252 nes_debug(NES_DBG_SHUTDOWN, "nesvnic=%p, nesdev=%p, netdev=%p %s\n", 266 nes_debug(NES_DBG_SHUTDOWN, "nesvnic=%p, nesdev=%p, netdev=%p %s\n",
253 nesvnic, nesdev, netdev, netdev->name); 267 nesvnic, nesdev, netdev, netdev->name);
@@ -260,9 +274,20 @@ static int nes_netdev_stop(struct net_device *netdev)
260 /* Disable network packets */ 274 /* Disable network packets */
261 napi_disable(&nesvnic->napi); 275 napi_disable(&nesvnic->napi);
262 netif_stop_queue(netdev); 276 netif_stop_queue(netdev);
263 if ((nesdev->netdev[0] == netdev) & (nesvnic->logical_port == nesdev->mac_index)) { 277 list_for_each_safe(list_pos, list_temp, &nesdev->nesadapter->nesvnic_list[nesdev->mac_index]) {
264 nes_write_indexed(nesdev, 278 first_nesvnic = container_of(list_pos, struct nes_vnic, list);
265 NES_IDX_MAC_INT_MASK+(0x200*nesdev->mac_index), 0xffffffff); 279 if ((first_nesvnic->netdev_open == 1) && (first_nesvnic != nesvnic))
280 break;
281 }
282
283 if (first_nesvnic->netdev_open == 0)
284 nes_write_indexed(nesdev, NES_IDX_MAC_INT_MASK+(0x200*nesdev->mac_index), 0xffffffff);
285 else if ((first_nesvnic != nesvnic) &&
286 (PCI_FUNC(first_nesvnic->nesdev->pcidev->devfn) != PCI_FUNC(nesvnic->nesdev->pcidev->devfn))) {
287 nes_write_indexed(nesdev, NES_IDX_MAC_INT_MASK + (0x200 * nesdev->mac_index), 0xffffffff);
288 nes_write_indexed(first_nesvnic->nesdev, NES_IDX_MAC_INT_MASK + (0x200 * first_nesvnic->nesdev->mac_index),
289 ~(NES_MAC_INT_LINK_STAT_CHG | NES_MAC_INT_XGMII_EXT |
290 NES_MAC_INT_TX_UNDERFLOW | NES_MAC_INT_TX_ERROR));
266 } 291 }
267 292
268 nic_active_mask = ~((u32)(1 << nesvnic->nic_index)); 293 nic_active_mask = ~((u32)(1 << nesvnic->nic_index));
@@ -859,7 +884,6 @@ void nes_netdev_set_multicast_list(struct net_device *netdev)
859 for (mc_index=0; mc_index < NES_MULTICAST_PF_MAX; mc_index++) { 884 for (mc_index=0; mc_index < NES_MULTICAST_PF_MAX; mc_index++) {
860 while (multicast_addr && nesvnic->mcrq_mcast_filter && ((mc_nic_index = nesvnic->mcrq_mcast_filter(nesvnic, multicast_addr->dmi_addr)) == 0)) 885 while (multicast_addr && nesvnic->mcrq_mcast_filter && ((mc_nic_index = nesvnic->mcrq_mcast_filter(nesvnic, multicast_addr->dmi_addr)) == 0))
861 multicast_addr = multicast_addr->next; 886 multicast_addr = multicast_addr->next;
862
863 if (mc_nic_index < 0) 887 if (mc_nic_index < 0)
864 mc_nic_index = nesvnic->nic_index; 888 mc_nic_index = nesvnic->nic_index;
865 if (multicast_addr) { 889 if (multicast_addr) {
@@ -908,7 +932,7 @@ static int nes_netdev_change_mtu(struct net_device *netdev, int new_mtu)
908 return -EINVAL; 932 return -EINVAL;
909 933
910 netdev->mtu = new_mtu; 934 netdev->mtu = new_mtu;
911 nesvnic->max_frame_size = new_mtu+ETH_HLEN; 935 nesvnic->max_frame_size = new_mtu + VLAN_ETH_HLEN;
912 936
913 if (netdev->mtu > 1500) { 937 if (netdev->mtu > 1500) {
914 jumbomode=1; 938 jumbomode=1;
@@ -1470,10 +1494,15 @@ static void nes_netdev_vlan_rx_register(struct net_device *netdev, struct vlan_g
1470{ 1494{
1471 struct nes_vnic *nesvnic = netdev_priv(netdev); 1495 struct nes_vnic *nesvnic = netdev_priv(netdev);
1472 struct nes_device *nesdev = nesvnic->nesdev; 1496 struct nes_device *nesdev = nesvnic->nesdev;
1497 struct nes_adapter *nesadapter = nesdev->nesadapter;
1473 u32 u32temp; 1498 u32 u32temp;
1499 unsigned long flags;
1474 1500
1501 spin_lock_irqsave(&nesadapter->phy_lock, flags);
1475 nesvnic->vlan_grp = grp; 1502 nesvnic->vlan_grp = grp;
1476 1503
1504 nes_debug(NES_DBG_NETDEV, "%s: %s\n", __func__, netdev->name);
1505
1477 /* Enable/Disable VLAN Stripping */ 1506 /* Enable/Disable VLAN Stripping */
1478 u32temp = nes_read_indexed(nesdev, NES_IDX_PCIX_DIAG); 1507 u32temp = nes_read_indexed(nesdev, NES_IDX_PCIX_DIAG);
1479 if (grp) 1508 if (grp)
@@ -1482,6 +1511,7 @@ static void nes_netdev_vlan_rx_register(struct net_device *netdev, struct vlan_g
1482 u32temp |= 0x02000000; 1511 u32temp |= 0x02000000;
1483 1512
1484 nes_write_indexed(nesdev, NES_IDX_PCIX_DIAG, u32temp); 1513 nes_write_indexed(nesdev, NES_IDX_PCIX_DIAG, u32temp);
1514 spin_unlock_irqrestore(&nesadapter->phy_lock, flags);
1485} 1515}
1486 1516
1487 1517
@@ -1540,7 +1570,7 @@ struct net_device *nes_netdev_init(struct nes_device *nesdev,
1540 nesvnic->msg_enable = netif_msg_init(debug, default_msg); 1570 nesvnic->msg_enable = netif_msg_init(debug, default_msg);
1541 nesvnic->netdev_index = nesdev->netdev_count; 1571 nesvnic->netdev_index = nesdev->netdev_count;
1542 nesvnic->perfect_filter_index = nesdev->nesadapter->netdev_count; 1572 nesvnic->perfect_filter_index = nesdev->nesadapter->netdev_count;
1543 nesvnic->max_frame_size = netdev->mtu+netdev->hard_header_len; 1573 nesvnic->max_frame_size = netdev->mtu + netdev->hard_header_len + VLAN_HLEN;
1544 1574
1545 curr_qp_map = nic_qp_mapping_per_function[PCI_FUNC(nesdev->pcidev->devfn)]; 1575 curr_qp_map = nic_qp_mapping_per_function[PCI_FUNC(nesdev->pcidev->devfn)];
1546 nesvnic->nic.qp_id = curr_qp_map[nesdev->netdev_count].qpid; 1576 nesvnic->nic.qp_id = curr_qp_map[nesdev->netdev_count].qpid;
@@ -1610,7 +1640,7 @@ struct net_device *nes_netdev_init(struct nes_device *nesdev,
1610 list_add_tail(&nesvnic->list, &nesdev->nesadapter->nesvnic_list[nesdev->mac_index]); 1640 list_add_tail(&nesvnic->list, &nesdev->nesadapter->nesvnic_list[nesdev->mac_index]);
1611 1641
1612 if ((nesdev->netdev_count == 0) && 1642 if ((nesdev->netdev_count == 0) &&
1613 (PCI_FUNC(nesdev->pcidev->devfn) == nesdev->mac_index)) { 1643 (PCI_FUNC(nesdev->pcidev->devfn) == nesdev->mac_index)) {
1614 nes_debug(NES_DBG_INIT, "Setting up PHY interrupt mask. Using register index 0x%04X\n", 1644 nes_debug(NES_DBG_INIT, "Setting up PHY interrupt mask. Using register index 0x%04X\n",
1615 NES_IDX_PHY_PCS_CONTROL_STATUS0+(0x200*(nesvnic->logical_port&1))); 1645 NES_IDX_PHY_PCS_CONTROL_STATUS0+(0x200*(nesvnic->logical_port&1)));
1616 u32temp = nes_read_indexed(nesdev, NES_IDX_PHY_PCS_CONTROL_STATUS0 + 1646 u32temp = nes_read_indexed(nesdev, NES_IDX_PHY_PCS_CONTROL_STATUS0 +
@@ -1648,18 +1678,14 @@ struct net_device *nes_netdev_init(struct nes_device *nesdev,
1648 nesvnic->linkup = 1; 1678 nesvnic->linkup = 1;
1649 } 1679 }
1650 } 1680 }
1651 nes_debug(NES_DBG_INIT, "Setting up MAC interrupt mask.\n");
1652 /* clear the MAC interrupt status, assumes direct logical to physical mapping */ 1681 /* clear the MAC interrupt status, assumes direct logical to physical mapping */
1653 u32temp = nes_read_indexed(nesdev, NES_IDX_MAC_INT_STATUS+(0x200*nesvnic->logical_port)); 1682 u32temp = nes_read_indexed(nesdev, NES_IDX_MAC_INT_STATUS + (0x200 * nesdev->mac_index));
1654 nes_debug(NES_DBG_INIT, "Phy interrupt status = 0x%X.\n", u32temp); 1683 nes_debug(NES_DBG_INIT, "Phy interrupt status = 0x%X.\n", u32temp);
1655 nes_write_indexed(nesdev, NES_IDX_MAC_INT_STATUS+(0x200*nesvnic->logical_port), u32temp); 1684 nes_write_indexed(nesdev, NES_IDX_MAC_INT_STATUS + (0x200 * nesdev->mac_index), u32temp);
1656 1685
1657 if (nesdev->nesadapter->phy_type[nesvnic->logical_port] != NES_PHY_TYPE_IRIS) 1686 if (nesdev->nesadapter->phy_type[nesdev->mac_index] != NES_PHY_TYPE_IRIS)
1658 nes_init_phy(nesdev); 1687 nes_init_phy(nesdev);
1659 1688
1660 nes_write_indexed(nesdev, NES_IDX_MAC_INT_MASK+(0x200*nesvnic->logical_port),
1661 ~(NES_MAC_INT_LINK_STAT_CHG | NES_MAC_INT_XGMII_EXT |
1662 NES_MAC_INT_TX_UNDERFLOW | NES_MAC_INT_TX_ERROR));
1663 } 1689 }
1664 1690
1665 return netdev; 1691 return netdev;
diff --git a/drivers/infiniband/hw/nes/nes_verbs.c b/drivers/infiniband/hw/nes/nes_verbs.c
index ffd4b425567f..4dafbe16e82a 100644
--- a/drivers/infiniband/hw/nes/nes_verbs.c
+++ b/drivers/infiniband/hw/nes/nes_verbs.c
@@ -1337,7 +1337,7 @@ static struct ib_qp *nes_create_qp(struct ib_pd *ibpd,
1337 NES_MAX_USER_WQ_REGIONS, nes_ucontext->first_free_wq); 1337 NES_MAX_USER_WQ_REGIONS, nes_ucontext->first_free_wq);
1338 /* nes_debug(NES_DBG_QP, "find_first_zero_biton wqs returned %u\n", 1338 /* nes_debug(NES_DBG_QP, "find_first_zero_biton wqs returned %u\n",
1339 nespd->mmap_db_index); */ 1339 nespd->mmap_db_index); */
1340 if (nesqp->mmap_sq_db_index > NES_MAX_USER_WQ_REGIONS) { 1340 if (nesqp->mmap_sq_db_index >= NES_MAX_USER_WQ_REGIONS) {
1341 nes_debug(NES_DBG_QP, 1341 nes_debug(NES_DBG_QP,
1342 "db index > max user regions, failing create QP\n"); 1342 "db index > max user regions, failing create QP\n");
1343 nes_free_resource(nesadapter, nesadapter->allocated_qps, qp_num); 1343 nes_free_resource(nesadapter, nesadapter->allocated_qps, qp_num);
diff --git a/drivers/infiniband/ulp/ipoib/ipoib_cm.c b/drivers/infiniband/ulp/ipoib/ipoib_cm.c
index 7dd2ec473d24..52b1bebfa744 100644
--- a/drivers/infiniband/ulp/ipoib/ipoib_cm.c
+++ b/drivers/infiniband/ulp/ipoib/ipoib_cm.c
@@ -824,7 +824,6 @@ void ipoib_cm_dev_stop(struct net_device *dev)
824 struct ipoib_dev_priv *priv = netdev_priv(dev); 824 struct ipoib_dev_priv *priv = netdev_priv(dev);
825 struct ipoib_cm_rx *p; 825 struct ipoib_cm_rx *p;
826 unsigned long begin; 826 unsigned long begin;
827 LIST_HEAD(list);
828 int ret; 827 int ret;
829 828
830 if (!IPOIB_CM_SUPPORTED(dev->dev_addr) || !priv->cm.id) 829 if (!IPOIB_CM_SUPPORTED(dev->dev_addr) || !priv->cm.id)
@@ -857,9 +856,12 @@ void ipoib_cm_dev_stop(struct net_device *dev)
857 /* 856 /*
858 * assume the HW is wedged and just free up everything. 857 * assume the HW is wedged and just free up everything.
859 */ 858 */
860 list_splice_init(&priv->cm.rx_flush_list, &list); 859 list_splice_init(&priv->cm.rx_flush_list,
861 list_splice_init(&priv->cm.rx_error_list, &list); 860 &priv->cm.rx_reap_list);
862 list_splice_init(&priv->cm.rx_drain_list, &list); 861 list_splice_init(&priv->cm.rx_error_list,
862 &priv->cm.rx_reap_list);
863 list_splice_init(&priv->cm.rx_drain_list,
864 &priv->cm.rx_reap_list);
863 break; 865 break;
864 } 866 }
865 spin_unlock_irq(&priv->lock); 867 spin_unlock_irq(&priv->lock);
diff --git a/drivers/macintosh/mediabay.c b/drivers/macintosh/mediabay.c
index 51a112815f46..bd8a1d14b45d 100644
--- a/drivers/macintosh/mediabay.c
+++ b/drivers/macintosh/mediabay.c
@@ -698,7 +698,8 @@ static int media_bay_suspend(struct macio_dev *mdev, pm_message_t state)
698{ 698{
699 struct media_bay_info *bay = macio_get_drvdata(mdev); 699 struct media_bay_info *bay = macio_get_drvdata(mdev);
700 700
701 if (state.event != mdev->ofdev.dev.power.power_state.event && state.event == PM_EVENT_SUSPEND) { 701 if (state.event != mdev->ofdev.dev.power.power_state.event
702 && (state.event & PM_EVENT_SLEEP)) {
702 down(&bay->lock); 703 down(&bay->lock);
703 bay->sleeping = 1; 704 bay->sleeping = 1;
704 set_mb_power(bay, 0); 705 set_mb_power(bay, 0);
diff --git a/drivers/md/dm-raid1.c b/drivers/md/dm-raid1.c
index 2928ef228101..51605870f898 100644
--- a/drivers/md/dm-raid1.c
+++ b/drivers/md/dm-raid1.c
@@ -1695,14 +1695,15 @@ static int mirror_end_io(struct dm_target *ti, struct bio *bio,
1695 * information for a retry or there was no other 1695 * information for a retry or there was no other
1696 * mirror in-sync. 1696 * mirror in-sync.
1697 */ 1697 */
1698 DMERR_LIMIT("Mirror read failed from %s.", 1698 DMERR_LIMIT("Mirror read failed.");
1699 m->dev->name);
1700 return -EIO; 1699 return -EIO;
1701 } 1700 }
1701
1702 m = read_record->m;
1703
1702 DMERR("Mirror read failed from %s. Trying alternative device.", 1704 DMERR("Mirror read failed from %s. Trying alternative device.",
1703 m->dev->name); 1705 m->dev->name);
1704 1706
1705 m = read_record->m;
1706 fail_mirror(m, DM_RAID1_READ_ERROR); 1707 fail_mirror(m, DM_RAID1_READ_ERROR);
1707 1708
1708 /* 1709 /*
diff --git a/drivers/media/Kconfig b/drivers/media/Kconfig
index 8f4a45346de7..11950698a2e7 100644
--- a/drivers/media/Kconfig
+++ b/drivers/media/Kconfig
@@ -25,11 +25,16 @@ config VIDEO_DEV
25 To compile this driver as a module, choose M here: the 25 To compile this driver as a module, choose M here: the
26 module will be called videodev. 26 module will be called videodev.
27 27
28config VIDEO_V4L2_COMMON
29 tristate
30 depends on (I2C || I2C=n) && VIDEO_DEV
31 default (I2C || I2C=n) && VIDEO_DEV
32
28config VIDEO_V4L1 33config VIDEO_V4L1
29 bool "Enable Video For Linux API 1 (DEPRECATED)" 34 bool "Enable Video For Linux API 1 (DEPRECATED)"
30 depends on VIDEO_DEV 35 depends on VIDEO_DEV && VIDEO_V4L2_COMMON
36 default VIDEO_DEV && VIDEO_V4L2_COMMON
31 select VIDEO_V4L1_COMPAT 37 select VIDEO_V4L1_COMPAT
32 default y
33 ---help--- 38 ---help---
34 Enables a compatibility API used by most V4L2 devices to allow 39 Enables a compatibility API used by most V4L2 devices to allow
35 its usage with legacy applications that supports only V4L1 api. 40 its usage with legacy applications that supports only V4L1 api.
@@ -39,7 +44,7 @@ config VIDEO_V4L1
39config VIDEO_V4L1_COMPAT 44config VIDEO_V4L1_COMPAT
40 bool "Enable Video For Linux API 1 compatible Layer" 45 bool "Enable Video For Linux API 1 compatible Layer"
41 depends on VIDEO_DEV 46 depends on VIDEO_DEV
42 default y 47 default VIDEO_DEV
43 ---help--- 48 ---help---
44 This api were developed to be used at Kernel 2.2 and 2.4, but 49 This api were developed to be used at Kernel 2.2 and 2.4, but
45 lacks support for several video standards. There are several 50 lacks support for several video standards. There are several
@@ -55,8 +60,8 @@ config VIDEO_V4L1_COMPAT
55 60
56config VIDEO_V4L2 61config VIDEO_V4L2
57 bool 62 bool
58 depends on VIDEO_DEV 63 depends on VIDEO_DEV && VIDEO_V4L2_COMMON
59 default y 64 default VIDEO_DEV && VIDEO_V4L2_COMMON
60 65
61source "drivers/media/video/Kconfig" 66source "drivers/media/video/Kconfig"
62 67
@@ -93,7 +98,7 @@ if VIDEO_TUNER_CUSTOMIZE
93 98
94config TUNER_XC2028 99config TUNER_XC2028
95 tristate "XCeive xc2028/xc3028 tuners" 100 tristate "XCeive xc2028/xc3028 tuners"
96 depends on I2C 101 depends on I2C && FW_LOADER
97 default m if VIDEO_TUNER_CUSTOMIZE 102 default m if VIDEO_TUNER_CUSTOMIZE
98 help 103 help
99 Say Y here to include support for the xc2028/xc3028 tuners. 104 Say Y here to include support for the xc2028/xc3028 tuners.
@@ -180,7 +185,6 @@ config VIDEO_TVEEPROM
180 185
181config DAB 186config DAB
182 boolean "DAB adapters" 187 boolean "DAB adapters"
183 default y
184 ---help--- 188 ---help---
185 Allow selecting support for for Digital Audio Broadcasting (DAB) 189 Allow selecting support for for Digital Audio Broadcasting (DAB)
186 Receiver adapters. 190 Receiver adapters.
diff --git a/drivers/media/common/Kconfig b/drivers/media/common/Kconfig
index 06ca75911b7f..769c6f8142d2 100644
--- a/drivers/media/common/Kconfig
+++ b/drivers/media/common/Kconfig
@@ -4,6 +4,6 @@ config VIDEO_SAA7146
4 4
5config VIDEO_SAA7146_VV 5config VIDEO_SAA7146_VV
6 tristate 6 tristate
7 depends on VIDEO_DEV 7 depends on VIDEO_V4L2
8 select VIDEOBUF_DMA_SG 8 select VIDEOBUF_DMA_SG
9 select VIDEO_SAA7146 9 select VIDEO_SAA7146
diff --git a/drivers/media/common/ir-keymaps.c b/drivers/media/common/ir-keymaps.c
index a4a937c90534..2ab5a120470d 100644
--- a/drivers/media/common/ir-keymaps.c
+++ b/drivers/media/common/ir-keymaps.c
@@ -1987,3 +1987,49 @@ IR_KEYTAB_TYPE ir_codes_behold[IR_KEYTAB_SIZE] = {
1987}; 1987};
1988 1988
1989EXPORT_SYMBOL_GPL(ir_codes_behold); 1989EXPORT_SYMBOL_GPL(ir_codes_behold);
1990
1991/*
1992 * Remote control for the Genius TVGO A11MCE
1993 * Adrian Pardini <pardo.bsso@gmail.com>
1994 */
1995IR_KEYTAB_TYPE ir_codes_genius_tvgo_a11mce[IR_KEYTAB_SIZE] = {
1996 /* Keys 0 to 9 */
1997 [0x48] = KEY_0,
1998 [0x09] = KEY_1,
1999 [0x1d] = KEY_2,
2000 [0x1f] = KEY_3,
2001 [0x19] = KEY_4,
2002 [0x1b] = KEY_5,
2003 [0x11] = KEY_6,
2004 [0x17] = KEY_7,
2005 [0x12] = KEY_8,
2006 [0x16] = KEY_9,
2007
2008 [0x54] = KEY_RECORD, /* recording */
2009 [0x06] = KEY_MUTE, /* mute */
2010 [0x10] = KEY_POWER,
2011 [0x40] = KEY_LAST, /* recall */
2012 [0x4c] = KEY_CHANNELUP, /* channel / program + */
2013 [0x00] = KEY_CHANNELDOWN, /* channel / program - */
2014 [0x0d] = KEY_VOLUMEUP,
2015 [0x15] = KEY_VOLUMEDOWN,
2016 [0x4d] = KEY_OK, /* also labeled as Pause */
2017 [0x1c] = KEY_ZOOM, /* full screen and Stop*/
2018 [0x02] = KEY_MODE, /* AV Source or Rewind*/
2019 [0x04] = KEY_LIST, /* -/-- */
2020 /* small arrows above numbers */
2021 [0x1a] = KEY_NEXT, /* also Fast Forward */
2022 [0x0e] = KEY_PREVIOUS, /* also Rewind */
2023 /* these are in a rather non standard layout and have
2024 an alternate name written */
2025 [0x1e] = KEY_UP, /* Video Setting */
2026 [0x0a] = KEY_DOWN, /* Video Default */
2027 [0x05] = KEY_LEFT, /* Snapshot */
2028 [0x0c] = KEY_RIGHT, /* Hide Panel */
2029 /* Four buttons without label */
2030 [0x49] = KEY_RED,
2031 [0x0b] = KEY_GREEN,
2032 [0x13] = KEY_YELLOW,
2033 [0x50] = KEY_BLUE,
2034};
2035EXPORT_SYMBOL_GPL(ir_codes_genius_tvgo_a11mce);
diff --git a/drivers/media/common/saa7146_vbi.c b/drivers/media/common/saa7146_vbi.c
index c32dda973e92..bfbd5a841ebf 100644
--- a/drivers/media/common/saa7146_vbi.c
+++ b/drivers/media/common/saa7146_vbi.c
@@ -413,7 +413,6 @@ static int vbi_open(struct saa7146_dev *dev, struct file *file)
413 V4L2_FIELD_SEQ_TB, // FIXME: does this really work? 413 V4L2_FIELD_SEQ_TB, // FIXME: does this really work?
414 sizeof(struct saa7146_buf), 414 sizeof(struct saa7146_buf),
415 file); 415 file);
416 mutex_init(&fh->vbi_q.lock);
417 416
418 init_timer(&fh->vbi_read_timeout); 417 init_timer(&fh->vbi_read_timeout);
419 fh->vbi_read_timeout.function = vbi_read_timeout; 418 fh->vbi_read_timeout.function = vbi_read_timeout;
diff --git a/drivers/media/common/saa7146_video.c b/drivers/media/common/saa7146_video.c
index c31ab480d8e1..66fdbd0e6a6d 100644
--- a/drivers/media/common/saa7146_video.c
+++ b/drivers/media/common/saa7146_video.c
@@ -1417,8 +1417,6 @@ static int video_open(struct saa7146_dev *dev, struct file *file)
1417 sizeof(struct saa7146_buf), 1417 sizeof(struct saa7146_buf),
1418 file); 1418 file);
1419 1419
1420 mutex_init(&fh->video_q.lock);
1421
1422 return 0; 1420 return 0;
1423} 1421}
1424 1422
diff --git a/drivers/media/dvb/bt8xx/bt878.c b/drivers/media/dvb/bt8xx/bt878.c
index c7bbb40223f5..56d8fab688bb 100644
--- a/drivers/media/dvb/bt8xx/bt878.c
+++ b/drivers/media/dvb/bt8xx/bt878.c
@@ -75,7 +75,11 @@ EXPORT_SYMBOL(bt878);
75#if defined(dprintk) 75#if defined(dprintk)
76#undef dprintk 76#undef dprintk
77#endif 77#endif
78#define dprintk if(bt878_debug) printk 78#define dprintk(fmt, arg...) \
79 do { \
80 if (bt878_debug) \
81 printk(KERN_DEBUG fmt, ##arg); \
82 } while (0)
79 83
80static void bt878_mem_free(struct bt878 *bt) 84static void bt878_mem_free(struct bt878 *bt)
81{ 85{
@@ -154,7 +158,7 @@ static int bt878_make_risc(struct bt878 *bt)
154 } 158 }
155 159
156 if (bt->line_count > 255) { 160 if (bt->line_count > 255) {
157 printk("bt878: buffer size error!\n"); 161 printk(KERN_ERR "bt878: buffer size error!\n");
158 return -EINVAL; 162 return -EINVAL;
159 } 163 }
160 return 0; 164 return 0;
@@ -285,7 +289,8 @@ static irqreturn_t bt878_irq(int irq, void *dev_id)
285 289
286 if (astat & (BT878_ASCERR | BT878_AOCERR)) { 290 if (astat & (BT878_ASCERR | BT878_AOCERR)) {
287 if (bt878_verbose) { 291 if (bt878_verbose) {
288 printk("bt878(%d): irq%s%s risc_pc=%08x\n", 292 printk(KERN_INFO
293 "bt878(%d): irq%s%s risc_pc=%08x\n",
289 bt->nr, 294 bt->nr,
290 (astat & BT878_ASCERR) ? " SCERR" : 295 (astat & BT878_ASCERR) ? " SCERR" :
291 "", 296 "",
@@ -295,8 +300,8 @@ static irqreturn_t bt878_irq(int irq, void *dev_id)
295 } 300 }
296 if (astat & (BT878_APABORT | BT878_ARIPERR | BT878_APPERR)) { 301 if (astat & (BT878_APABORT | BT878_ARIPERR | BT878_APPERR)) {
297 if (bt878_verbose) { 302 if (bt878_verbose) {
298 printk 303 printk(KERN_INFO
299 ("bt878(%d): irq%s%s%s risc_pc=%08x\n", 304 "bt878(%d): irq%s%s%s risc_pc=%08x\n",
300 bt->nr, 305 bt->nr,
301 (astat & BT878_APABORT) ? " PABORT" : 306 (astat & BT878_APABORT) ? " PABORT" :
302 "", 307 "",
@@ -308,8 +313,8 @@ static irqreturn_t bt878_irq(int irq, void *dev_id)
308 } 313 }
309 if (astat & (BT878_AFDSR | BT878_AFTRGT | BT878_AFBUS)) { 314 if (astat & (BT878_AFDSR | BT878_AFTRGT | BT878_AFBUS)) {
310 if (bt878_verbose) { 315 if (bt878_verbose) {
311 printk 316 printk(KERN_INFO
312 ("bt878(%d): irq%s%s%s risc_pc=%08x\n", 317 "bt878(%d): irq%s%s%s risc_pc=%08x\n",
313 bt->nr, 318 bt->nr,
314 (astat & BT878_AFDSR) ? " FDSR" : "", 319 (astat & BT878_AFDSR) ? " FDSR" : "",
315 (astat & BT878_AFTRGT) ? " FTRGT" : 320 (astat & BT878_AFTRGT) ? " FTRGT" :
@@ -510,7 +515,7 @@ static int __devinit bt878_probe(struct pci_dev *dev,
510*/ 515*/
511 516
512 if ((result = bt878_mem_alloc(bt))) { 517 if ((result = bt878_mem_alloc(bt))) {
513 printk("bt878: failed to allocate memory!\n"); 518 printk(KERN_ERR "bt878: failed to allocate memory!\n");
514 goto fail2; 519 goto fail2;
515 } 520 }
516 521
@@ -536,7 +541,7 @@ static void __devexit bt878_remove(struct pci_dev *pci_dev)
536 struct bt878 *bt = pci_get_drvdata(pci_dev); 541 struct bt878 *bt = pci_get_drvdata(pci_dev);
537 542
538 if (bt878_verbose) 543 if (bt878_verbose)
539 printk("bt878(%d): unloading\n", bt->nr); 544 printk(KERN_INFO "bt878(%d): unloading\n", bt->nr);
540 545
541 /* turn off all capturing, DMA and IRQs */ 546 /* turn off all capturing, DMA and IRQs */
542 btand(~0x13, BT878_AGPIO_DMA_CTL); 547 btand(~0x13, BT878_AGPIO_DMA_CTL);
diff --git a/drivers/media/dvb/dvb-usb/ttusb2.c b/drivers/media/dvb/dvb-usb/ttusb2.c
index 88dc4367a2e3..3b9da9c25c6e 100644
--- a/drivers/media/dvb/dvb-usb/ttusb2.c
+++ b/drivers/media/dvb/dvb-usb/ttusb2.c
@@ -144,6 +144,7 @@ static int ttusb2_power_ctrl(struct dvb_usb_device *d, int onoff)
144static struct tda10086_config tda10086_config = { 144static struct tda10086_config tda10086_config = {
145 .demod_address = 0x0e, 145 .demod_address = 0x0e,
146 .invert = 0, 146 .invert = 0,
147 .diseqc_tone = 1,
147}; 148};
148 149
149static int ttusb2_frontend_attach(struct dvb_usb_adapter *adap) 150static int ttusb2_frontend_attach(struct dvb_usb_adapter *adap)
diff --git a/drivers/media/dvb/frontends/tda10086.c b/drivers/media/dvb/frontends/tda10086.c
index 9d26ace65151..0d2b69a99ad4 100644
--- a/drivers/media/dvb/frontends/tda10086.c
+++ b/drivers/media/dvb/frontends/tda10086.c
@@ -106,9 +106,12 @@ static int tda10086_write_mask(struct tda10086_state *state, int reg, int mask,
106static int tda10086_init(struct dvb_frontend* fe) 106static int tda10086_init(struct dvb_frontend* fe)
107{ 107{
108 struct tda10086_state* state = fe->demodulator_priv; 108 struct tda10086_state* state = fe->demodulator_priv;
109 u8 t22k_off = 0x80;
109 110
110 dprintk ("%s\n", __FUNCTION__); 111 dprintk ("%s\n", __FUNCTION__);
111 112
113 if (state->config->diseqc_tone)
114 t22k_off = 0;
112 // reset 115 // reset
113 tda10086_write_byte(state, 0x00, 0x00); 116 tda10086_write_byte(state, 0x00, 0x00);
114 msleep(10); 117 msleep(10);
@@ -158,7 +161,7 @@ static int tda10086_init(struct dvb_frontend* fe)
158 tda10086_write_byte(state, 0x3d, 0x80); 161 tda10086_write_byte(state, 0x3d, 0x80);
159 162
160 // setup SEC 163 // setup SEC
161 tda10086_write_byte(state, 0x36, 0x80); // all SEC off, no 22k tone 164 tda10086_write_byte(state, 0x36, t22k_off); // all SEC off, 22k tone
162 tda10086_write_byte(state, 0x34, (((1<<19) * (22000/1000)) / (SACLK/1000))); // } tone frequency 165 tda10086_write_byte(state, 0x34, (((1<<19) * (22000/1000)) / (SACLK/1000))); // } tone frequency
163 tda10086_write_byte(state, 0x35, (((1<<19) * (22000/1000)) / (SACLK/1000)) >> 8); // } 166 tda10086_write_byte(state, 0x35, (((1<<19) * (22000/1000)) / (SACLK/1000)) >> 8); // }
164 167
@@ -180,16 +183,20 @@ static void tda10086_diseqc_wait(struct tda10086_state *state)
180static int tda10086_set_tone (struct dvb_frontend* fe, fe_sec_tone_mode_t tone) 183static int tda10086_set_tone (struct dvb_frontend* fe, fe_sec_tone_mode_t tone)
181{ 184{
182 struct tda10086_state* state = fe->demodulator_priv; 185 struct tda10086_state* state = fe->demodulator_priv;
186 u8 t22k_off = 0x80;
183 187
184 dprintk ("%s\n", __FUNCTION__); 188 dprintk ("%s\n", __FUNCTION__);
185 189
190 if (state->config->diseqc_tone)
191 t22k_off = 0;
192
186 switch (tone) { 193 switch (tone) {
187 case SEC_TONE_OFF: 194 case SEC_TONE_OFF:
188 tda10086_write_byte(state, 0x36, 0x80); 195 tda10086_write_byte(state, 0x36, t22k_off);
189 break; 196 break;
190 197
191 case SEC_TONE_ON: 198 case SEC_TONE_ON:
192 tda10086_write_byte(state, 0x36, 0x81); 199 tda10086_write_byte(state, 0x36, 0x01 + t22k_off);
193 break; 200 break;
194 } 201 }
195 202
@@ -202,9 +209,13 @@ static int tda10086_send_master_cmd (struct dvb_frontend* fe,
202 struct tda10086_state* state = fe->demodulator_priv; 209 struct tda10086_state* state = fe->demodulator_priv;
203 int i; 210 int i;
204 u8 oldval; 211 u8 oldval;
212 u8 t22k_off = 0x80;
205 213
206 dprintk ("%s\n", __FUNCTION__); 214 dprintk ("%s\n", __FUNCTION__);
207 215
216 if (state->config->diseqc_tone)
217 t22k_off = 0;
218
208 if (cmd->msg_len > 6) 219 if (cmd->msg_len > 6)
209 return -EINVAL; 220 return -EINVAL;
210 oldval = tda10086_read_byte(state, 0x36); 221 oldval = tda10086_read_byte(state, 0x36);
@@ -212,7 +223,8 @@ static int tda10086_send_master_cmd (struct dvb_frontend* fe,
212 for(i=0; i< cmd->msg_len; i++) { 223 for(i=0; i< cmd->msg_len; i++) {
213 tda10086_write_byte(state, 0x48+i, cmd->msg[i]); 224 tda10086_write_byte(state, 0x48+i, cmd->msg[i]);
214 } 225 }
215 tda10086_write_byte(state, 0x36, 0x88 | ((cmd->msg_len - 1) << 4)); 226 tda10086_write_byte(state, 0x36, (0x08 + t22k_off)
227 | ((cmd->msg_len - 1) << 4));
216 228
217 tda10086_diseqc_wait(state); 229 tda10086_diseqc_wait(state);
218 230
@@ -225,16 +237,20 @@ static int tda10086_send_burst (struct dvb_frontend* fe, fe_sec_mini_cmd_t minic
225{ 237{
226 struct tda10086_state* state = fe->demodulator_priv; 238 struct tda10086_state* state = fe->demodulator_priv;
227 u8 oldval = tda10086_read_byte(state, 0x36); 239 u8 oldval = tda10086_read_byte(state, 0x36);
240 u8 t22k_off = 0x80;
228 241
229 dprintk ("%s\n", __FUNCTION__); 242 dprintk ("%s\n", __FUNCTION__);
230 243
244 if (state->config->diseqc_tone)
245 t22k_off = 0;
246
231 switch(minicmd) { 247 switch(minicmd) {
232 case SEC_MINI_A: 248 case SEC_MINI_A:
233 tda10086_write_byte(state, 0x36, 0x84); 249 tda10086_write_byte(state, 0x36, 0x04 + t22k_off);
234 break; 250 break;
235 251
236 case SEC_MINI_B: 252 case SEC_MINI_B:
237 tda10086_write_byte(state, 0x36, 0x86); 253 tda10086_write_byte(state, 0x36, 0x06 + t22k_off);
238 break; 254 break;
239 } 255 }
240 256
diff --git a/drivers/media/dvb/frontends/tda10086.h b/drivers/media/dvb/frontends/tda10086.h
index ed584a8f4a89..eeceaeee78ff 100644
--- a/drivers/media/dvb/frontends/tda10086.h
+++ b/drivers/media/dvb/frontends/tda10086.h
@@ -33,6 +33,9 @@ struct tda10086_config
33 33
34 /* does the "inversion" need inverted? */ 34 /* does the "inversion" need inverted? */
35 u8 invert; 35 u8 invert;
36
37 /* do we need the diseqc signal with carrier? */
38 u8 diseqc_tone;
36}; 39};
37 40
38#if defined(CONFIG_DVB_TDA10086) || (defined(CONFIG_DVB_TDA10086_MODULE) && defined(MODULE)) 41#if defined(CONFIG_DVB_TDA10086) || (defined(CONFIG_DVB_TDA10086_MODULE) && defined(MODULE))
diff --git a/drivers/media/dvb/frontends/tda18271-common.c b/drivers/media/dvb/frontends/tda18271-common.c
index cebb6b90b7e0..bca570990613 100644
--- a/drivers/media/dvb/frontends/tda18271-common.c
+++ b/drivers/media/dvb/frontends/tda18271-common.c
@@ -171,7 +171,7 @@ int tda18271_read_extended(struct dvb_frontend *fe)
171 if (ret != 2) 171 if (ret != 2)
172 tda_err("ERROR: i2c_transfer returned: %d\n", ret); 172 tda_err("ERROR: i2c_transfer returned: %d\n", ret);
173 173
174 for (i = 0; i <= TDA18271_NUM_REGS; i++) { 174 for (i = 0; i < TDA18271_NUM_REGS; i++) {
175 /* don't update write-only registers */ 175 /* don't update write-only registers */
176 if ((i != R_EB9) && 176 if ((i != R_EB9) &&
177 (i != R_EB16) && 177 (i != R_EB16) &&
diff --git a/drivers/media/dvb/frontends/xc5000.h b/drivers/media/dvb/frontends/xc5000.h
index e0e84562aed1..32a5f1c86a16 100644
--- a/drivers/media/dvb/frontends/xc5000.h
+++ b/drivers/media/dvb/frontends/xc5000.h
@@ -45,7 +45,8 @@ struct xc5000_config {
45/* xc5000 callback command */ 45/* xc5000 callback command */
46#define XC5000_TUNER_RESET 0 46#define XC5000_TUNER_RESET 0
47 47
48#if defined(CONFIG_DVB_TUNER_XC5000) || defined(CONFIG_DVB_TUNER_XC5000_MODULE) 48#if defined(CONFIG_DVB_TUNER_XC5000) || \
49 (defined(CONFIG_DVB_TUNER_XC5000_MODULE) && defined(MODULE))
49extern struct dvb_frontend* xc5000_attach(struct dvb_frontend *fe, 50extern struct dvb_frontend* xc5000_attach(struct dvb_frontend *fe,
50 struct i2c_adapter *i2c, 51 struct i2c_adapter *i2c,
51 struct xc5000_config *cfg); 52 struct xc5000_config *cfg);
diff --git a/drivers/media/dvb/ttpci/av7110_av.c b/drivers/media/dvb/ttpci/av7110_av.c
index aef6e36d7c5c..3e6b650fbb81 100644
--- a/drivers/media/dvb/ttpci/av7110_av.c
+++ b/drivers/media/dvb/ttpci/av7110_av.c
@@ -966,6 +966,7 @@ static u8 iframe_header[] = { 0x00, 0x00, 0x01, 0xe0, 0x00, 0x00, 0x80, 0x00, 0x
966static int play_iframe(struct av7110 *av7110, char __user *buf, unsigned int len, int nonblock) 966static int play_iframe(struct av7110 *av7110, char __user *buf, unsigned int len, int nonblock)
967{ 967{
968 int i, n; 968 int i, n;
969 int progressive = 0;
969 970
970 dprintk(2, "av7110:%p, \n", av7110); 971 dprintk(2, "av7110:%p, \n", av7110);
971 972
@@ -974,6 +975,14 @@ static int play_iframe(struct av7110 *av7110, char __user *buf, unsigned int len
974 return -EBUSY; 975 return -EBUSY;
975 } 976 }
976 977
978 for (i = 0; i < len - 5; i++) {
979 /* get progressive flag from picture extension */
980 if (buf[i] == 0x00 && buf[i+1] == 0x00 &&
981 buf[i+2] == 0x01 && (unsigned char)buf[i+3] == 0xb5 &&
982 (buf[i+4] & 0xf0) == 0x10)
983 progressive = buf[i+5] & 0x08;
984 }
985
977 /* setting n always > 1, fixes problems when playing stillframes 986 /* setting n always > 1, fixes problems when playing stillframes
978 consisting of I- and P-Frames */ 987 consisting of I- and P-Frames */
979 n = MIN_IFRAME / len + 1; 988 n = MIN_IFRAME / len + 1;
@@ -985,7 +994,11 @@ static int play_iframe(struct av7110 *av7110, char __user *buf, unsigned int len
985 dvb_play(av7110, buf, len, 0, 1); 994 dvb_play(av7110, buf, len, 0, 1);
986 995
987 av7110_ipack_flush(&av7110->ipack[1]); 996 av7110_ipack_flush(&av7110->ipack[1]);
988 return 0; 997
998 if (progressive)
999 return vidcom(av7110, AV_VIDEO_CMD_FREEZE, 1);
1000 else
1001 return 0;
989} 1002}
990 1003
991 1004
diff --git a/drivers/media/dvb/ttpci/budget-av.c b/drivers/media/dvb/ttpci/budget-av.c
index 3439c9864f67..2d64d557b977 100644
--- a/drivers/media/dvb/ttpci/budget-av.c
+++ b/drivers/media/dvb/ttpci/budget-av.c
@@ -896,6 +896,7 @@ static u8 read_pwm(struct budget_av *budget_av)
896#define SUBID_DVBS_CINERGY1200 0x1154 896#define SUBID_DVBS_CINERGY1200 0x1154
897#define SUBID_DVBS_CYNERGY1200N 0x1155 897#define SUBID_DVBS_CYNERGY1200N 0x1155
898#define SUBID_DVBS_TV_STAR 0x0014 898#define SUBID_DVBS_TV_STAR 0x0014
899#define SUBID_DVBS_TV_STAR_PLUS_X4 0x0015
899#define SUBID_DVBS_TV_STAR_CI 0x0016 900#define SUBID_DVBS_TV_STAR_CI 0x0016
900#define SUBID_DVBS_EASYWATCH_1 0x001a 901#define SUBID_DVBS_EASYWATCH_1 0x001a
901#define SUBID_DVBS_EASYWATCH_2 0x001b 902#define SUBID_DVBS_EASYWATCH_2 0x001b
@@ -910,6 +911,7 @@ static u8 read_pwm(struct budget_av *budget_av)
910#define SUBID_DVBC_CINERGY1200 0x1156 911#define SUBID_DVBC_CINERGY1200 0x1156
911#define SUBID_DVBC_CINERGY1200_MK3 0x1176 912#define SUBID_DVBC_CINERGY1200_MK3 0x1176
912 913
914#define SUBID_DVBT_EASYWATCH 0x003a
913#define SUBID_DVBT_KNC1_PLUS 0x0031 915#define SUBID_DVBT_KNC1_PLUS 0x0031
914#define SUBID_DVBT_KNC1 0x0030 916#define SUBID_DVBT_KNC1 0x0030
915#define SUBID_DVBT_CINERGY1200 0x1157 917#define SUBID_DVBT_CINERGY1200 0x1157
@@ -957,6 +959,7 @@ static void frontend_init(struct budget_av *budget_av)
957 break; 959 break;
958 960
959 case SUBID_DVBS_TV_STAR: 961 case SUBID_DVBS_TV_STAR:
962 case SUBID_DVBS_TV_STAR_PLUS_X4:
960 case SUBID_DVBS_TV_STAR_CI: 963 case SUBID_DVBS_TV_STAR_CI:
961 case SUBID_DVBS_CYNERGY1200N: 964 case SUBID_DVBS_CYNERGY1200N:
962 case SUBID_DVBS_EASYWATCH: 965 case SUBID_DVBS_EASYWATCH:
@@ -1018,6 +1021,7 @@ static void frontend_init(struct budget_av *budget_av)
1018 } 1021 }
1019 break; 1022 break;
1020 1023
1024 case SUBID_DVBT_EASYWATCH:
1021 case SUBID_DVBT_KNC1: 1025 case SUBID_DVBT_KNC1:
1022 case SUBID_DVBT_KNC1_PLUS: 1026 case SUBID_DVBT_KNC1_PLUS:
1023 case SUBID_DVBT_CINERGY1200: 1027 case SUBID_DVBT_CINERGY1200:
@@ -1248,7 +1252,9 @@ MAKE_BUDGET_INFO(satewpls1, "Satelco EasyWatch DVB-S light", BUDGET_KNC1S);
1248MAKE_BUDGET_INFO(satewps, "Satelco EasyWatch DVB-S", BUDGET_KNC1S); 1252MAKE_BUDGET_INFO(satewps, "Satelco EasyWatch DVB-S", BUDGET_KNC1S);
1249MAKE_BUDGET_INFO(satewplc, "Satelco EasyWatch DVB-C", BUDGET_KNC1CP); 1253MAKE_BUDGET_INFO(satewplc, "Satelco EasyWatch DVB-C", BUDGET_KNC1CP);
1250MAKE_BUDGET_INFO(satewcmk3, "Satelco EasyWatch DVB-C MK3", BUDGET_KNC1C_MK3); 1254MAKE_BUDGET_INFO(satewcmk3, "Satelco EasyWatch DVB-C MK3", BUDGET_KNC1C_MK3);
1255MAKE_BUDGET_INFO(satewt, "Satelco EasyWatch DVB-T", BUDGET_KNC1T);
1251MAKE_BUDGET_INFO(knc1sp, "KNC1 DVB-S Plus", BUDGET_KNC1SP); 1256MAKE_BUDGET_INFO(knc1sp, "KNC1 DVB-S Plus", BUDGET_KNC1SP);
1257MAKE_BUDGET_INFO(knc1spx4, "KNC1 DVB-S Plus X4", BUDGET_KNC1SP);
1252MAKE_BUDGET_INFO(knc1cp, "KNC1 DVB-C Plus", BUDGET_KNC1CP); 1258MAKE_BUDGET_INFO(knc1cp, "KNC1 DVB-C Plus", BUDGET_KNC1CP);
1253MAKE_BUDGET_INFO(knc1cmk3, "KNC1 DVB-C MK3", BUDGET_KNC1C_MK3); 1259MAKE_BUDGET_INFO(knc1cmk3, "KNC1 DVB-C MK3", BUDGET_KNC1C_MK3);
1254MAKE_BUDGET_INFO(knc1cpmk3, "KNC1 DVB-C Plus MK3", BUDGET_KNC1CP_MK3); 1260MAKE_BUDGET_INFO(knc1cpmk3, "KNC1 DVB-C Plus MK3", BUDGET_KNC1CP_MK3);
@@ -1266,12 +1272,14 @@ static struct pci_device_id pci_tbl[] = {
1266 MAKE_EXTENSION_PCI(knc1sp, 0x1131, 0x0011), 1272 MAKE_EXTENSION_PCI(knc1sp, 0x1131, 0x0011),
1267 MAKE_EXTENSION_PCI(knc1sp, 0x1894, 0x0011), 1273 MAKE_EXTENSION_PCI(knc1sp, 0x1894, 0x0011),
1268 MAKE_EXTENSION_PCI(kncxs, 0x1894, 0x0014), 1274 MAKE_EXTENSION_PCI(kncxs, 0x1894, 0x0014),
1275 MAKE_EXTENSION_PCI(knc1spx4, 0x1894, 0x0015),
1269 MAKE_EXTENSION_PCI(kncxs, 0x1894, 0x0016), 1276 MAKE_EXTENSION_PCI(kncxs, 0x1894, 0x0016),
1270 MAKE_EXTENSION_PCI(satewpls, 0x1894, 0x001e), 1277 MAKE_EXTENSION_PCI(satewpls, 0x1894, 0x001e),
1271 MAKE_EXTENSION_PCI(satewpls1, 0x1894, 0x001a), 1278 MAKE_EXTENSION_PCI(satewpls1, 0x1894, 0x001a),
1272 MAKE_EXTENSION_PCI(satewps, 0x1894, 0x001b), 1279 MAKE_EXTENSION_PCI(satewps, 0x1894, 0x001b),
1273 MAKE_EXTENSION_PCI(satewplc, 0x1894, 0x002a), 1280 MAKE_EXTENSION_PCI(satewplc, 0x1894, 0x002a),
1274 MAKE_EXTENSION_PCI(satewcmk3, 0x1894, 0x002c), 1281 MAKE_EXTENSION_PCI(satewcmk3, 0x1894, 0x002c),
1282 MAKE_EXTENSION_PCI(satewt, 0x1894, 0x003a),
1275 MAKE_EXTENSION_PCI(knc1c, 0x1894, 0x0020), 1283 MAKE_EXTENSION_PCI(knc1c, 0x1894, 0x0020),
1276 MAKE_EXTENSION_PCI(knc1cp, 0x1894, 0x0021), 1284 MAKE_EXTENSION_PCI(knc1cp, 0x1894, 0x0021),
1277 MAKE_EXTENSION_PCI(knc1cmk3, 0x1894, 0x0022), 1285 MAKE_EXTENSION_PCI(knc1cmk3, 0x1894, 0x0022),
diff --git a/drivers/media/dvb/ttpci/budget.c b/drivers/media/dvb/ttpci/budget.c
index 9268a82bada6..14b00f57b5de 100644
--- a/drivers/media/dvb/ttpci/budget.c
+++ b/drivers/media/dvb/ttpci/budget.c
@@ -351,6 +351,7 @@ static struct s5h1420_config s5h1420_config = {
351static struct tda10086_config tda10086_config = { 351static struct tda10086_config tda10086_config = {
352 .demod_address = 0x0e, 352 .demod_address = 0x0e,
353 .invert = 0, 353 .invert = 0,
354 .diseqc_tone = 1,
354}; 355};
355 356
356static u8 read_pwm(struct budget* budget) 357static u8 read_pwm(struct budget* budget)
diff --git a/drivers/media/radio/Kconfig b/drivers/media/radio/Kconfig
index 8d5214f18cf0..1b41b3f77cf9 100644
--- a/drivers/media/radio/Kconfig
+++ b/drivers/media/radio/Kconfig
@@ -4,12 +4,12 @@
4 4
5menuconfig RADIO_ADAPTERS 5menuconfig RADIO_ADAPTERS
6 bool "Radio Adapters" 6 bool "Radio Adapters"
7 depends on VIDEO_DEV 7 depends on VIDEO_V4L2
8 default y 8 default y
9 ---help--- 9 ---help---
10 Say Y here to enable selecting AM/FM radio adapters. 10 Say Y here to enable selecting AM/FM radio adapters.
11 11
12if RADIO_ADAPTERS && VIDEO_DEV 12if RADIO_ADAPTERS && VIDEO_V4L2
13 13
14config RADIO_CADET 14config RADIO_CADET
15 tristate "ADS Cadet AM/FM Tuner" 15 tristate "ADS Cadet AM/FM Tuner"
diff --git a/drivers/media/radio/radio-sf16fmi.c b/drivers/media/radio/radio-sf16fmi.c
index 3118bdab3183..53e114857377 100644
--- a/drivers/media/radio/radio-sf16fmi.c
+++ b/drivers/media/radio/radio-sf16fmi.c
@@ -361,6 +361,7 @@ static int __init fmi_init(void)
361 } 361 }
362 if (!request_region(io, 2, "radio-sf16fmi")) { 362 if (!request_region(io, 2, "radio-sf16fmi")) {
363 printk(KERN_ERR "radio-sf16fmi: port 0x%x already in use\n", io); 363 printk(KERN_ERR "radio-sf16fmi: port 0x%x already in use\n", io);
364 pnp_device_detach(dev);
364 return -EBUSY; 365 return -EBUSY;
365 } 366 }
366 367
diff --git a/drivers/media/radio/radio-sf16fmr2.c b/drivers/media/radio/radio-sf16fmr2.c
index f7c8b000404f..ebc5fbbc38bb 100644
--- a/drivers/media/radio/radio-sf16fmr2.c
+++ b/drivers/media/radio/radio-sf16fmr2.c
@@ -470,9 +470,8 @@ static int __init fmr2_init(void)
470 470
471 mutex_init(&lock); 471 mutex_init(&lock);
472 472
473 if (request_region(io, 2, "sf16fmr2")) 473 if (!request_region(io, 2, "sf16fmr2")) {
474 { 474 printk(KERN_ERR "radio-sf16fmr2: request_region failed!\n");
475 printk(KERN_ERR "fmr2: port 0x%x already in use\n", io);
476 return -EBUSY; 475 return -EBUSY;
477 } 476 }
478 477
diff --git a/drivers/media/radio/radio-si470x.c b/drivers/media/radio/radio-si470x.c
index 8e4bd4769048..649f14d2c013 100644
--- a/drivers/media/radio/radio-si470x.c
+++ b/drivers/media/radio/radio-si470x.c
@@ -62,6 +62,29 @@
62 * - code cleaned of unnecessary rds_commands 62 * - code cleaned of unnecessary rds_commands
63 * - USB Vendor/Product ID for ADS/Tech FM Radio Receiver verified 63 * - USB Vendor/Product ID for ADS/Tech FM Radio Receiver verified
64 * (thanks to Guillaume RAMOUSSE) 64 * (thanks to Guillaume RAMOUSSE)
65 * 2008-01-27 Tobias Lorenz <tobias.lorenz@gmx.net>
66 * Version 1.0.5
67 * - number of seek_retries changed to tune_timeout
68 * - fixed problem with incomplete tune operations by own buffers
69 * - optimization of variables and printf types
70 * - improved error logging
71 * 2008-01-31 Tobias Lorenz <tobias.lorenz@gmx.net>
72 * Oliver Neukum <oliver@neukum.org>
73 * Version 1.0.6
74 * - fixed coverity checker warnings in *_usb_driver_disconnect
75 * - probe()/open() race by correct ordering in probe()
76 * - DMA coherency rules by separate allocation of all buffers
77 * - use of endianness macros
78 * - abuse of spinlock, replaced by mutex
79 * - racy handling of timer in disconnect,
80 * replaced by delayed_work
81 * - racy interruptible_sleep_on(),
82 * replaced with wait_event_interruptible()
83 * - handle signals in read()
84 * 2008-02-08 Tobias Lorenz <tobias.lorenz@gmx.net>
85 * Oliver Neukum <oliver@neukum.org>
86 * Version 1.0.7
87 * - usb autosuspend support
65 * 88 *
66 * ToDo: 89 * ToDo:
67 * - add seeking support 90 * - add seeking support
@@ -74,9 +97,10 @@
74/* driver definitions */ 97/* driver definitions */
75#define DRIVER_AUTHOR "Tobias Lorenz <tobias.lorenz@gmx.net>" 98#define DRIVER_AUTHOR "Tobias Lorenz <tobias.lorenz@gmx.net>"
76#define DRIVER_NAME "radio-si470x" 99#define DRIVER_NAME "radio-si470x"
77#define DRIVER_VERSION KERNEL_VERSION(1, 0, 4) 100#define DRIVER_KERNEL_VERSION KERNEL_VERSION(1, 0, 6)
78#define DRIVER_CARD "Silicon Labs Si470x FM Radio Receiver" 101#define DRIVER_CARD "Silicon Labs Si470x FM Radio Receiver"
79#define DRIVER_DESC "USB radio driver for Si470x FM Radio Receivers" 102#define DRIVER_DESC "USB radio driver for Si470x FM Radio Receivers"
103#define DRIVER_VERSION "1.0.6"
80 104
81 105
82/* kernel includes */ 106/* kernel includes */
@@ -89,8 +113,10 @@
89#include <linux/hid.h> 113#include <linux/hid.h>
90#include <linux/version.h> 114#include <linux/version.h>
91#include <linux/videodev2.h> 115#include <linux/videodev2.h>
116#include <linux/mutex.h>
92#include <media/v4l2-common.h> 117#include <media/v4l2-common.h>
93#include <media/rds.h> 118#include <media/rds.h>
119#include <asm/unaligned.h>
94 120
95 121
96/* USB Device ID List */ 122/* USB Device ID List */
@@ -119,56 +145,56 @@ MODULE_PARM_DESC(radio_nr, "Radio Nr");
119/* 0: 200 kHz (USA, Australia) */ 145/* 0: 200 kHz (USA, Australia) */
120/* 1: 100 kHz (Europe, Japan) */ 146/* 1: 100 kHz (Europe, Japan) */
121/* 2: 50 kHz */ 147/* 2: 50 kHz */
122static int space = 2; 148static unsigned short space = 2;
123module_param(space, int, 0); 149module_param(space, ushort, 0);
124MODULE_PARM_DESC(radio_nr, "Spacing: 0=200kHz 1=100kHz *2=50kHz*"); 150MODULE_PARM_DESC(radio_nr, "Spacing: 0=200kHz 1=100kHz *2=50kHz*");
125 151
126/* Bottom of Band (MHz) */ 152/* Bottom of Band (MHz) */
127/* 0: 87.5 - 108 MHz (USA, Europe)*/ 153/* 0: 87.5 - 108 MHz (USA, Europe)*/
128/* 1: 76 - 108 MHz (Japan wide band) */ 154/* 1: 76 - 108 MHz (Japan wide band) */
129/* 2: 76 - 90 MHz (Japan) */ 155/* 2: 76 - 90 MHz (Japan) */
130static int band = 1; 156static unsigned short band = 1;
131module_param(band, int, 0); 157module_param(band, ushort, 0);
132MODULE_PARM_DESC(radio_nr, "Band: 0=87.5..108MHz *1=76..108MHz* 2=76..90MHz"); 158MODULE_PARM_DESC(radio_nr, "Band: 0=87.5..108MHz *1=76..108MHz* 2=76..90MHz");
133 159
134/* De-emphasis */ 160/* De-emphasis */
135/* 0: 75 us (USA) */ 161/* 0: 75 us (USA) */
136/* 1: 50 us (Europe, Australia, Japan) */ 162/* 1: 50 us (Europe, Australia, Japan) */
137static int de = 1; 163static unsigned short de = 1;
138module_param(de, int, 0); 164module_param(de, ushort, 0);
139MODULE_PARM_DESC(radio_nr, "De-emphasis: 0=75us *1=50us*"); 165MODULE_PARM_DESC(radio_nr, "De-emphasis: 0=75us *1=50us*");
140 166
141/* USB timeout */ 167/* USB timeout */
142static int usb_timeout = 500; 168static unsigned int usb_timeout = 500;
143module_param(usb_timeout, int, 0); 169module_param(usb_timeout, uint, 0);
144MODULE_PARM_DESC(usb_timeout, "USB timeout (ms): *500*"); 170MODULE_PARM_DESC(usb_timeout, "USB timeout (ms): *500*");
145 171
146/* Seek retries */ 172/* Tune timeout */
147static int seek_retries = 100; 173static unsigned int tune_timeout = 3000;
148module_param(seek_retries, int, 0); 174module_param(tune_timeout, uint, 0);
149MODULE_PARM_DESC(seek_retries, "Seek retries: *100*"); 175MODULE_PARM_DESC(tune_timeout, "Tune timeout: *3000*");
150 176
151/* RDS buffer blocks */ 177/* RDS buffer blocks */
152static int rds_buf = 100; 178static unsigned int rds_buf = 100;
153module_param(rds_buf, int, 0); 179module_param(rds_buf, uint, 0);
154MODULE_PARM_DESC(rds_buf, "RDS buffer entries: *100*"); 180MODULE_PARM_DESC(rds_buf, "RDS buffer entries: *100*");
155 181
156/* RDS maximum block errors */ 182/* RDS maximum block errors */
157static int max_rds_errors = 1; 183static unsigned short max_rds_errors = 1;
158/* 0 means 0 errors requiring correction */ 184/* 0 means 0 errors requiring correction */
159/* 1 means 1-2 errors requiring correction (used by original USBRadio.exe) */ 185/* 1 means 1-2 errors requiring correction (used by original USBRadio.exe) */
160/* 2 means 3-5 errors requiring correction */ 186/* 2 means 3-5 errors requiring correction */
161/* 3 means 6+ errors or errors in checkword, correction not possible */ 187/* 3 means 6+ errors or errors in checkword, correction not possible */
162module_param(max_rds_errors, int, 0); 188module_param(max_rds_errors, ushort, 0);
163MODULE_PARM_DESC(max_rds_errors, "RDS maximum block errors: *1*"); 189MODULE_PARM_DESC(max_rds_errors, "RDS maximum block errors: *1*");
164 190
165/* RDS poll frequency */ 191/* RDS poll frequency */
166static int rds_poll_time = 40; 192static unsigned int rds_poll_time = 40;
167/* 40 is used by the original USBRadio.exe */ 193/* 40 is used by the original USBRadio.exe */
168/* 50 is used by radio-cadet */ 194/* 50 is used by radio-cadet */
169/* 75 should be okay */ 195/* 75 should be okay */
170/* 80 is the usual RDS receive interval */ 196/* 80 is the usual RDS receive interval */
171module_param(rds_poll_time, int, 0); 197module_param(rds_poll_time, uint, 0);
172MODULE_PARM_DESC(rds_poll_time, "RDS poll time (ms): *40*"); 198MODULE_PARM_DESC(rds_poll_time, "RDS poll time (ms): *40*");
173 199
174 200
@@ -393,22 +419,19 @@ MODULE_PARM_DESC(rds_poll_time, "RDS poll time (ms): *40*");
393struct si470x_device { 419struct si470x_device {
394 /* reference to USB and video device */ 420 /* reference to USB and video device */
395 struct usb_device *usbdev; 421 struct usb_device *usbdev;
422 struct usb_interface *intf;
396 struct video_device *videodev; 423 struct video_device *videodev;
397 424
398 /* are these really necessary ? */ 425 /* driver management */
399 int users; 426 unsigned int users;
400
401 /* report buffer (maximum 64 bytes) */
402 unsigned char buf[64];
403 427
404 /* Silabs internal registers (0..15) */ 428 /* Silabs internal registers (0..15) */
405 unsigned short registers[RADIO_REGISTER_NUM]; 429 unsigned short registers[RADIO_REGISTER_NUM];
406 430
407 /* RDS receive buffer */ 431 /* RDS receive buffer */
408 struct work_struct work; 432 struct delayed_work work;
409 wait_queue_head_t read_queue; 433 wait_queue_head_t read_queue;
410 struct timer_list timer; 434 struct mutex lock; /* buffer locking */
411 spinlock_t lock; /* buffer locking */
412 unsigned char *buffer; /* size is always multiple of three */ 435 unsigned char *buffer; /* size is always multiple of three */
413 unsigned int buf_size; 436 unsigned int buf_size;
414 unsigned int rd_index; 437 unsigned int rd_index;
@@ -434,28 +457,46 @@ struct si470x_device {
434/* 457/*
435 * si470x_get_report - receive a HID report 458 * si470x_get_report - receive a HID report
436 */ 459 */
437static int si470x_get_report(struct si470x_device *radio, int size) 460static int si470x_get_report(struct si470x_device *radio, void *buf, int size)
438{ 461{
439 return usb_control_msg(radio->usbdev, 462 unsigned char *report = (unsigned char *) buf;
463 int retval;
464
465 retval = usb_control_msg(radio->usbdev,
440 usb_rcvctrlpipe(radio->usbdev, 0), 466 usb_rcvctrlpipe(radio->usbdev, 0),
441 HID_REQ_GET_REPORT, 467 HID_REQ_GET_REPORT,
442 USB_TYPE_CLASS | USB_RECIP_INTERFACE | USB_DIR_IN, 468 USB_TYPE_CLASS | USB_RECIP_INTERFACE | USB_DIR_IN,
443 radio->buf[0], 2, 469 report[0], 2,
444 radio->buf, size, usb_timeout); 470 buf, size, usb_timeout);
471 if (retval < 0)
472 printk(KERN_WARNING DRIVER_NAME
473 ": si470x_get_report: usb_control_msg returned %d\n",
474 retval);
475
476 return retval;
445} 477}
446 478
447 479
448/* 480/*
449 * si470x_set_report - send a HID report 481 * si470x_set_report - send a HID report
450 */ 482 */
451static int si470x_set_report(struct si470x_device *radio, int size) 483static int si470x_set_report(struct si470x_device *radio, void *buf, int size)
452{ 484{
453 return usb_control_msg(radio->usbdev, 485 unsigned char *report = (unsigned char *) buf;
486 int retval;
487
488 retval = usb_control_msg(radio->usbdev,
454 usb_sndctrlpipe(radio->usbdev, 0), 489 usb_sndctrlpipe(radio->usbdev, 0),
455 HID_REQ_SET_REPORT, 490 HID_REQ_SET_REPORT,
456 USB_TYPE_CLASS | USB_RECIP_INTERFACE | USB_DIR_OUT, 491 USB_TYPE_CLASS | USB_RECIP_INTERFACE | USB_DIR_OUT,
457 radio->buf[0], 2, 492 report[0], 2,
458 radio->buf, size, usb_timeout); 493 buf, size, usb_timeout);
494 if (retval < 0)
495 printk(KERN_WARNING DRIVER_NAME
496 ": si470x_set_report: usb_control_msg returned %d\n",
497 retval);
498
499 return retval;
459} 500}
460 501
461 502
@@ -464,13 +505,16 @@ static int si470x_set_report(struct si470x_device *radio, int size)
464 */ 505 */
465static int si470x_get_register(struct si470x_device *radio, int regnr) 506static int si470x_get_register(struct si470x_device *radio, int regnr)
466{ 507{
508 unsigned char buf[REGISTER_REPORT_SIZE];
467 int retval; 509 int retval;
468 510
469 radio->buf[0] = REGISTER_REPORT(regnr); 511 buf[0] = REGISTER_REPORT(regnr);
512
513 retval = si470x_get_report(radio, (void *) &buf, sizeof(buf));
470 514
471 retval = si470x_get_report(radio, REGISTER_REPORT_SIZE);
472 if (retval >= 0) 515 if (retval >= 0)
473 radio->registers[regnr] = (radio->buf[1] << 8) | radio->buf[2]; 516 radio->registers[regnr] = be16_to_cpu(get_unaligned(
517 (unsigned short *) &buf[1]));
474 518
475 return (retval < 0) ? -EINVAL : 0; 519 return (retval < 0) ? -EINVAL : 0;
476} 520}
@@ -481,13 +525,14 @@ static int si470x_get_register(struct si470x_device *radio, int regnr)
481 */ 525 */
482static int si470x_set_register(struct si470x_device *radio, int regnr) 526static int si470x_set_register(struct si470x_device *radio, int regnr)
483{ 527{
528 unsigned char buf[REGISTER_REPORT_SIZE];
484 int retval; 529 int retval;
485 530
486 radio->buf[0] = REGISTER_REPORT(regnr); 531 buf[0] = REGISTER_REPORT(regnr);
487 radio->buf[1] = (radio->registers[regnr] & 0xff00) >> 8; 532 put_unaligned(cpu_to_be16(radio->registers[regnr]),
488 radio->buf[2] = (radio->registers[regnr] & 0x00ff); 533 (unsigned short *) &buf[1]);
489 534
490 retval = si470x_set_report(radio, REGISTER_REPORT_SIZE); 535 retval = si470x_set_report(radio, (void *) &buf, sizeof(buf));
491 536
492 return (retval < 0) ? -EINVAL : 0; 537 return (retval < 0) ? -EINVAL : 0;
493} 538}
@@ -498,18 +543,19 @@ static int si470x_set_register(struct si470x_device *radio, int regnr)
498 */ 543 */
499static int si470x_get_all_registers(struct si470x_device *radio) 544static int si470x_get_all_registers(struct si470x_device *radio)
500{ 545{
546 unsigned char buf[ENTIRE_REPORT_SIZE];
501 int retval; 547 int retval;
502 int regnr; 548 unsigned char regnr;
503 549
504 radio->buf[0] = ENTIRE_REPORT; 550 buf[0] = ENTIRE_REPORT;
505 551
506 retval = si470x_get_report(radio, ENTIRE_REPORT_SIZE); 552 retval = si470x_get_report(radio, (void *) &buf, sizeof(buf));
507 553
508 if (retval >= 0) 554 if (retval >= 0)
509 for (regnr = 0; regnr < RADIO_REGISTER_NUM; regnr++) 555 for (regnr = 0; regnr < RADIO_REGISTER_NUM; regnr++)
510 radio->registers[regnr] = 556 radio->registers[regnr] = be16_to_cpu(get_unaligned(
511 (radio->buf[regnr * RADIO_REGISTER_SIZE + 1] << 8) | 557 (unsigned short *)
512 radio->buf[regnr * RADIO_REGISTER_SIZE + 2]; 558 &buf[regnr * RADIO_REGISTER_SIZE + 1]));
513 559
514 return (retval < 0) ? -EINVAL : 0; 560 return (retval < 0) ? -EINVAL : 0;
515} 561}
@@ -520,21 +566,28 @@ static int si470x_get_all_registers(struct si470x_device *radio)
520 */ 566 */
521static int si470x_get_rds_registers(struct si470x_device *radio) 567static int si470x_get_rds_registers(struct si470x_device *radio)
522{ 568{
569 unsigned char buf[RDS_REPORT_SIZE];
523 int retval; 570 int retval;
524 int regnr;
525 int size; 571 int size;
572 unsigned char regnr;
526 573
527 radio->buf[0] = RDS_REPORT; 574 buf[0] = RDS_REPORT;
528 575
529 retval = usb_interrupt_msg(radio->usbdev, 576 retval = usb_interrupt_msg(radio->usbdev,
530 usb_rcvctrlpipe(radio->usbdev, 1), 577 usb_rcvintpipe(radio->usbdev, 1),
531 radio->buf, RDS_REPORT_SIZE, &size, usb_timeout); 578 (void *) &buf, sizeof(buf), &size, usb_timeout);
579 if (size != sizeof(buf))
580 printk(KERN_WARNING DRIVER_NAME ": si470x_get_rds_register: "
581 "return size differs: %d != %zu\n", size, sizeof(buf));
582 if (retval < 0)
583 printk(KERN_WARNING DRIVER_NAME ": si470x_get_rds_registers: "
584 "usb_interrupt_msg returned %d\n", retval);
532 585
533 if (retval >= 0) 586 if (retval >= 0)
534 for (regnr = 0; regnr < RDS_REGISTER_NUM; regnr++) 587 for (regnr = 0; regnr < RDS_REGISTER_NUM; regnr++)
535 radio->registers[STATUSRSSI + regnr] = 588 radio->registers[STATUSRSSI + regnr] =
536 (radio->buf[regnr * RADIO_REGISTER_SIZE + 1] << 8) | 589 be16_to_cpu(get_unaligned((unsigned short *)
537 radio->buf[regnr * RADIO_REGISTER_SIZE + 2]; 590 &buf[regnr * RADIO_REGISTER_SIZE + 1]));
538 591
539 return (retval < 0) ? -EINVAL : 0; 592 return (retval < 0) ? -EINVAL : 0;
540} 593}
@@ -543,9 +596,11 @@ static int si470x_get_rds_registers(struct si470x_device *radio)
543/* 596/*
544 * si470x_set_chan - set the channel 597 * si470x_set_chan - set the channel
545 */ 598 */
546static int si470x_set_chan(struct si470x_device *radio, int chan) 599static int si470x_set_chan(struct si470x_device *radio, unsigned short chan)
547{ 600{
548 int retval, i; 601 int retval;
602 unsigned long timeout;
603 bool timed_out = 0;
549 604
550 /* start tuning */ 605 /* start tuning */
551 radio->registers[CHANNEL] &= ~CHANNEL_CHAN; 606 radio->registers[CHANNEL] &= ~CHANNEL_CHAN;
@@ -555,16 +610,17 @@ static int si470x_set_chan(struct si470x_device *radio, int chan)
555 return retval; 610 return retval;
556 611
557 /* wait till seek operation has completed */ 612 /* wait till seek operation has completed */
558 i = 0; 613 timeout = jiffies + msecs_to_jiffies(tune_timeout);
559 do { 614 do {
560 retval = si470x_get_register(radio, STATUSRSSI); 615 retval = si470x_get_register(radio, STATUSRSSI);
561 if (retval < 0) 616 if (retval < 0)
562 return retval; 617 return retval;
563 } while ((radio->registers[STATUSRSSI] & STATUSRSSI_STC) && 618 timed_out = time_after(jiffies, timeout);
564 (++i < seek_retries)); 619 } while (((radio->registers[STATUSRSSI] & STATUSRSSI_STC) == 0) &&
565 if (i >= seek_retries) 620 (!timed_out));
621 if (timed_out)
566 printk(KERN_WARNING DRIVER_NAME 622 printk(KERN_WARNING DRIVER_NAME
567 ": seek does not finish after %d tries\n", i); 623 ": seek does not finish after %u ms\n", tune_timeout);
568 624
569 /* stop tuning */ 625 /* stop tuning */
570 radio->registers[CHANNEL] &= ~CHANNEL_TUNE; 626 radio->registers[CHANNEL] &= ~CHANNEL_TUNE;
@@ -575,9 +631,10 @@ static int si470x_set_chan(struct si470x_device *radio, int chan)
575/* 631/*
576 * si470x_get_freq - get the frequency 632 * si470x_get_freq - get the frequency
577 */ 633 */
578static int si470x_get_freq(struct si470x_device *radio) 634static unsigned int si470x_get_freq(struct si470x_device *radio)
579{ 635{
580 int spacing, band_bottom, chan, freq; 636 unsigned int spacing, band_bottom, freq;
637 unsigned short chan;
581 int retval; 638 int retval;
582 639
583 /* Spacing (kHz) */ 640 /* Spacing (kHz) */
@@ -616,9 +673,10 @@ static int si470x_get_freq(struct si470x_device *radio)
616/* 673/*
617 * si470x_set_freq - set the frequency 674 * si470x_set_freq - set the frequency
618 */ 675 */
619static int si470x_set_freq(struct si470x_device *radio, int freq) 676static int si470x_set_freq(struct si470x_device *radio, unsigned int freq)
620{ 677{
621 int spacing, band_bottom, chan; 678 unsigned int spacing, band_bottom;
679 unsigned short chan;
622 680
623 /* Spacing (kHz) */ 681 /* Spacing (kHz) */
624 switch (space) { 682 switch (space) {
@@ -709,9 +767,17 @@ static int si470x_stop(struct si470x_device *radio)
709 */ 767 */
710static int si470x_rds_on(struct si470x_device *radio) 768static int si470x_rds_on(struct si470x_device *radio)
711{ 769{
770 int retval;
771
712 /* sysconfig 1 */ 772 /* sysconfig 1 */
773 mutex_lock(&radio->lock);
713 radio->registers[SYSCONFIG1] |= SYSCONFIG1_RDS; 774 radio->registers[SYSCONFIG1] |= SYSCONFIG1_RDS;
714 return si470x_set_register(radio, SYSCONFIG1); 775 retval = si470x_set_register(radio, SYSCONFIG1);
776 if (retval < 0)
777 radio->registers[SYSCONFIG1] &= ~SYSCONFIG1_RDS;
778 mutex_unlock(&radio->lock);
779
780 return retval;
715} 781}
716 782
717 783
@@ -725,11 +791,10 @@ static int si470x_rds_on(struct si470x_device *radio)
725 */ 791 */
726static void si470x_rds(struct si470x_device *radio) 792static void si470x_rds(struct si470x_device *radio)
727{ 793{
728 unsigned char tmpbuf[3];
729 unsigned char blocknum; 794 unsigned char blocknum;
730 unsigned char bler; /* rds block errors */ 795 unsigned short bler; /* rds block errors */
731 unsigned short rds; 796 unsigned short rds;
732 unsigned int i; 797 unsigned char tmpbuf[3];
733 798
734 /* get rds blocks */ 799 /* get rds blocks */
735 if (si470x_get_rds_registers(radio) < 0) 800 if (si470x_get_rds_registers(radio) < 0)
@@ -743,63 +808,58 @@ static void si470x_rds(struct si470x_device *radio)
743 return; 808 return;
744 } 809 }
745 810
746 /* copy four RDS blocks to internal buffer */ 811 /* copy all four RDS blocks to internal buffer */
747 if (spin_trylock(&radio->lock)) { 812 mutex_lock(&radio->lock);
748 /* process each rds block */ 813 for (blocknum = 0; blocknum < 4; blocknum++) {
749 for (blocknum = 0; blocknum < 4; blocknum++) { 814 switch (blocknum) {
750 switch (blocknum) { 815 default:
751 default: 816 bler = (radio->registers[STATUSRSSI] &
752 bler = (radio->registers[STATUSRSSI] & 817 STATUSRSSI_BLERA) >> 9;
753 STATUSRSSI_BLERA) >> 9; 818 rds = radio->registers[RDSA];
754 rds = radio->registers[RDSA]; 819 break;
755 break; 820 case 1:
756 case 1: 821 bler = (radio->registers[READCHAN] &
757 bler = (radio->registers[READCHAN] & 822 READCHAN_BLERB) >> 14;
758 READCHAN_BLERB) >> 14; 823 rds = radio->registers[RDSB];
759 rds = radio->registers[RDSB]; 824 break;
760 break; 825 case 2:
761 case 2: 826 bler = (radio->registers[READCHAN] &
762 bler = (radio->registers[READCHAN] & 827 READCHAN_BLERC) >> 12;
763 READCHAN_BLERC) >> 12; 828 rds = radio->registers[RDSC];
764 rds = radio->registers[RDSC]; 829 break;
765 break; 830 case 3:
766 case 3: 831 bler = (radio->registers[READCHAN] &
767 bler = (radio->registers[READCHAN] & 832 READCHAN_BLERD) >> 10;
768 READCHAN_BLERD) >> 10; 833 rds = radio->registers[RDSD];
769 rds = radio->registers[RDSD]; 834 break;
770 break; 835 };
771 }; 836
772 837 /* Fill the V4L2 RDS buffer */
773 /* Fill the V4L2 RDS buffer */ 838 put_unaligned(cpu_to_le16(rds), (unsigned short *) &tmpbuf);
774 tmpbuf[0] = rds & 0x00ff; /* LSB */ 839 tmpbuf[2] = blocknum; /* offset name */
775 tmpbuf[1] = (rds & 0xff00) >> 8;/* MSB */ 840 tmpbuf[2] |= blocknum << 3; /* received offset */
776 tmpbuf[2] = blocknum; /* offset name */ 841 if (bler > max_rds_errors)
777 tmpbuf[2] |= blocknum << 3; /* received offset */ 842 tmpbuf[2] |= 0x80; /* uncorrectable errors */
778 if (bler > max_rds_errors) 843 else if (bler > 0)
779 tmpbuf[2] |= 0x80; /* uncorrectable errors */ 844 tmpbuf[2] |= 0x40; /* corrected error(s) */
780 else if (bler > 0) 845
781 tmpbuf[2] |= 0x40; /* corrected error(s) */ 846 /* copy RDS block to internal buffer */
782 847 memcpy(&radio->buffer[radio->wr_index], &tmpbuf, 3);
783 /* copy RDS block to internal buffer */ 848 radio->wr_index += 3;
784 for (i = 0; i < 3; i++) { 849
785 radio->buffer[radio->wr_index] = tmpbuf[i]; 850 /* wrap write pointer */
786 radio->wr_index++; 851 if (radio->wr_index >= radio->buf_size)
787 } 852 radio->wr_index = 0;
788 853
789 /* wrap write pointer */ 854 /* check for overflow */
790 if (radio->wr_index >= radio->buf_size) 855 if (radio->wr_index == radio->rd_index) {
791 radio->wr_index = 0; 856 /* increment and wrap read pointer */
792 857 radio->rd_index += 3;
793 /* check for overflow */ 858 if (radio->rd_index >= radio->buf_size)
794 if (radio->wr_index == radio->rd_index) { 859 radio->rd_index = 0;
795 /* increment and wrap read pointer */
796 radio->rd_index += 3;
797 if (radio->rd_index >= radio->buf_size)
798 radio->rd_index = 0;
799 }
800 } 860 }
801 spin_unlock(&radio->lock);
802 } 861 }
862 mutex_unlock(&radio->lock);
803 863
804 /* wake up read queue */ 864 /* wake up read queue */
805 if (radio->wr_index != radio->rd_index) 865 if (radio->wr_index != radio->rd_index)
@@ -808,29 +868,18 @@ static void si470x_rds(struct si470x_device *radio)
808 868
809 869
810/* 870/*
811 * si470x_timer - rds timer function
812 */
813static void si470x_timer(unsigned long data)
814{
815 struct si470x_device *radio = (struct si470x_device *) data;
816
817 schedule_work(&radio->work);
818}
819
820
821/*
822 * si470x_work - rds work function 871 * si470x_work - rds work function
823 */ 872 */
824static void si470x_work(struct work_struct *work) 873static void si470x_work(struct work_struct *work)
825{ 874{
826 struct si470x_device *radio = container_of(work, struct si470x_device, 875 struct si470x_device *radio = container_of(work, struct si470x_device,
827 work); 876 work.work);
828 877
829 if ((radio->registers[SYSCONFIG1] & SYSCONFIG1_RDS) == 0) 878 if ((radio->registers[SYSCONFIG1] & SYSCONFIG1_RDS) == 0)
830 return; 879 return;
831 880
832 si470x_rds(radio); 881 si470x_rds(radio);
833 mod_timer(&radio->timer, jiffies + msecs_to_jiffies(rds_poll_time)); 882 schedule_delayed_work(&radio->work, msecs_to_jiffies(rds_poll_time));
834} 883}
835 884
836 885
@@ -852,44 +901,44 @@ static ssize_t si470x_fops_read(struct file *file, char __user *buf,
852 /* switch on rds reception */ 901 /* switch on rds reception */
853 if ((radio->registers[SYSCONFIG1] & SYSCONFIG1_RDS) == 0) { 902 if ((radio->registers[SYSCONFIG1] & SYSCONFIG1_RDS) == 0) {
854 si470x_rds_on(radio); 903 si470x_rds_on(radio);
855 schedule_work(&radio->work); 904 schedule_delayed_work(&radio->work,
905 msecs_to_jiffies(rds_poll_time));
856 } 906 }
857 907
858 /* block if no new data available */ 908 /* block if no new data available */
859 while (radio->wr_index == radio->rd_index) { 909 while (radio->wr_index == radio->rd_index) {
860 if (file->f_flags & O_NONBLOCK) 910 if (file->f_flags & O_NONBLOCK)
861 return -EWOULDBLOCK; 911 return -EWOULDBLOCK;
862 interruptible_sleep_on(&radio->read_queue); 912 if (wait_event_interruptible(radio->read_queue,
913 radio->wr_index != radio->rd_index) < 0)
914 return -EINTR;
863 } 915 }
864 916
865 /* calculate block count from byte count */ 917 /* calculate block count from byte count */
866 count /= 3; 918 count /= 3;
867 919
868 /* copy RDS block out of internal buffer and to user buffer */ 920 /* copy RDS block out of internal buffer and to user buffer */
869 if (spin_trylock(&radio->lock)) { 921 mutex_lock(&radio->lock);
870 while (block_count < count) { 922 while (block_count < count) {
871 if (radio->rd_index == radio->wr_index) 923 if (radio->rd_index == radio->wr_index)
872 break; 924 break;
873 925
874 /* always transfer rds complete blocks */ 926 /* always transfer rds complete blocks */
875 if (copy_to_user(buf, 927 if (copy_to_user(buf, &radio->buffer[radio->rd_index], 3))
876 &radio->buffer[radio->rd_index], 3)) 928 /* retval = -EFAULT; */
877 /* retval = -EFAULT; */ 929 break;
878 break; 930
879 931 /* increment and wrap read pointer */
880 /* increment and wrap read pointer */ 932 radio->rd_index += 3;
881 radio->rd_index += 3; 933 if (radio->rd_index >= radio->buf_size)
882 if (radio->rd_index >= radio->buf_size) 934 radio->rd_index = 0;
883 radio->rd_index = 0; 935
884 936 /* increment counters */
885 /* increment counters */ 937 block_count++;
886 block_count++; 938 buf += 3;
887 buf += 3; 939 retval += 3;
888 retval += 3;
889 }
890
891 spin_unlock(&radio->lock);
892 } 940 }
941 mutex_unlock(&radio->lock);
893 942
894 return retval; 943 return retval;
895} 944}
@@ -906,7 +955,8 @@ static unsigned int si470x_fops_poll(struct file *file,
906 /* switch on rds reception */ 955 /* switch on rds reception */
907 if ((radio->registers[SYSCONFIG1] & SYSCONFIG1_RDS) == 0) { 956 if ((radio->registers[SYSCONFIG1] & SYSCONFIG1_RDS) == 0) {
908 si470x_rds_on(radio); 957 si470x_rds_on(radio);
909 schedule_work(&radio->work); 958 schedule_delayed_work(&radio->work,
959 msecs_to_jiffies(rds_poll_time));
910 } 960 }
911 961
912 poll_wait(file, &radio->read_queue, pts); 962 poll_wait(file, &radio->read_queue, pts);
@@ -924,10 +974,22 @@ static unsigned int si470x_fops_poll(struct file *file,
924static int si470x_fops_open(struct inode *inode, struct file *file) 974static int si470x_fops_open(struct inode *inode, struct file *file)
925{ 975{
926 struct si470x_device *radio = video_get_drvdata(video_devdata(file)); 976 struct si470x_device *radio = video_get_drvdata(video_devdata(file));
977 int retval;
927 978
928 radio->users++; 979 radio->users++;
929 if (radio->users == 1) 980
930 return si470x_start(radio); 981 retval = usb_autopm_get_interface(radio->intf);
982 if (retval < 0) {
983 radio->users--;
984 return -EIO;
985 }
986
987 if (radio->users == 1) {
988 retval = si470x_start(radio);
989 if (retval < 0)
990 usb_autopm_put_interface(radio->intf);
991 return retval;
992 }
931 993
932 return 0; 994 return 0;
933} 995}
@@ -939,6 +1001,7 @@ static int si470x_fops_open(struct inode *inode, struct file *file)
939static int si470x_fops_release(struct inode *inode, struct file *file) 1001static int si470x_fops_release(struct inode *inode, struct file *file)
940{ 1002{
941 struct si470x_device *radio = video_get_drvdata(video_devdata(file)); 1003 struct si470x_device *radio = video_get_drvdata(video_devdata(file));
1004 int retval;
942 1005
943 if (!radio) 1006 if (!radio)
944 return -ENODEV; 1007 return -ENODEV;
@@ -946,13 +1009,14 @@ static int si470x_fops_release(struct inode *inode, struct file *file)
946 radio->users--; 1009 radio->users--;
947 if (radio->users == 0) { 1010 if (radio->users == 0) {
948 /* stop rds reception */ 1011 /* stop rds reception */
949 del_timer_sync(&radio->timer); 1012 cancel_delayed_work_sync(&radio->work);
950 flush_scheduled_work();
951 1013
952 /* cancel read processes */ 1014 /* cancel read processes */
953 wake_up_interruptible(&radio->read_queue); 1015 wake_up_interruptible(&radio->read_queue);
954 1016
955 return si470x_stop(radio); 1017 retval = si470x_stop(radio);
1018 usb_autopm_put_interface(radio->intf);
1019 return retval;
956 } 1020 }
957 1021
958 return 0; 1022 return 0;
@@ -1030,7 +1094,7 @@ static int si470x_vidioc_querycap(struct file *file, void *priv,
1030 strlcpy(capability->driver, DRIVER_NAME, sizeof(capability->driver)); 1094 strlcpy(capability->driver, DRIVER_NAME, sizeof(capability->driver));
1031 strlcpy(capability->card, DRIVER_CARD, sizeof(capability->card)); 1095 strlcpy(capability->card, DRIVER_CARD, sizeof(capability->card));
1032 sprintf(capability->bus_info, "USB"); 1096 sprintf(capability->bus_info, "USB");
1033 capability->version = DRIVER_VERSION; 1097 capability->version = DRIVER_KERNEL_VERSION;
1034 capability->capabilities = V4L2_CAP_TUNER | V4L2_CAP_RADIO; 1098 capability->capabilities = V4L2_CAP_TUNER | V4L2_CAP_RADIO;
1035 1099
1036 return 0; 1100 return 0;
@@ -1067,16 +1131,21 @@ static int si470x_vidioc_s_input(struct file *filp, void *priv, unsigned int i)
1067static int si470x_vidioc_queryctrl(struct file *file, void *priv, 1131static int si470x_vidioc_queryctrl(struct file *file, void *priv,
1068 struct v4l2_queryctrl *qc) 1132 struct v4l2_queryctrl *qc)
1069{ 1133{
1070 int i; 1134 unsigned char i;
1135 int retval = -EINVAL;
1071 1136
1072 for (i = 0; i < ARRAY_SIZE(si470x_v4l2_queryctrl); i++) { 1137 for (i = 0; i < ARRAY_SIZE(si470x_v4l2_queryctrl); i++) {
1073 if (qc->id && qc->id == si470x_v4l2_queryctrl[i].id) { 1138 if (qc->id && qc->id == si470x_v4l2_queryctrl[i].id) {
1074 memcpy(qc, &(si470x_v4l2_queryctrl[i]), sizeof(*qc)); 1139 memcpy(qc, &(si470x_v4l2_queryctrl[i]), sizeof(*qc));
1075 return 0; 1140 retval = 0;
1141 break;
1076 } 1142 }
1077 } 1143 }
1144 if (retval < 0)
1145 printk(KERN_WARNING DRIVER_NAME
1146 ": query control failed with %d\n", retval);
1078 1147
1079 return -EINVAL; 1148 return retval;
1080} 1149}
1081 1150
1082 1151
@@ -1110,21 +1179,29 @@ static int si470x_vidioc_s_ctrl(struct file *file, void *priv,
1110 struct v4l2_control *ctrl) 1179 struct v4l2_control *ctrl)
1111{ 1180{
1112 struct si470x_device *radio = video_get_drvdata(video_devdata(file)); 1181 struct si470x_device *radio = video_get_drvdata(video_devdata(file));
1182 int retval;
1113 1183
1114 switch (ctrl->id) { 1184 switch (ctrl->id) {
1115 case V4L2_CID_AUDIO_VOLUME: 1185 case V4L2_CID_AUDIO_VOLUME:
1116 radio->registers[SYSCONFIG2] &= ~SYSCONFIG2_VOLUME; 1186 radio->registers[SYSCONFIG2] &= ~SYSCONFIG2_VOLUME;
1117 radio->registers[SYSCONFIG2] |= ctrl->value; 1187 radio->registers[SYSCONFIG2] |= ctrl->value;
1118 return si470x_set_register(radio, SYSCONFIG2); 1188 retval = si470x_set_register(radio, SYSCONFIG2);
1189 break;
1119 case V4L2_CID_AUDIO_MUTE: 1190 case V4L2_CID_AUDIO_MUTE:
1120 if (ctrl->value == 1) 1191 if (ctrl->value == 1)
1121 radio->registers[POWERCFG] &= ~POWERCFG_DMUTE; 1192 radio->registers[POWERCFG] &= ~POWERCFG_DMUTE;
1122 else 1193 else
1123 radio->registers[POWERCFG] |= POWERCFG_DMUTE; 1194 radio->registers[POWERCFG] |= POWERCFG_DMUTE;
1124 return si470x_set_register(radio, POWERCFG); 1195 retval = si470x_set_register(radio, POWERCFG);
1196 break;
1197 default:
1198 retval = -EINVAL;
1125 } 1199 }
1200 if (retval < 0)
1201 printk(KERN_WARNING DRIVER_NAME
1202 ": set control failed with %d\n", retval);
1126 1203
1127 return -EINVAL; 1204 return retval;
1128} 1205}
1129 1206
1130 1207
@@ -1163,8 +1240,8 @@ static int si470x_vidioc_s_audio(struct file *file, void *priv,
1163static int si470x_vidioc_g_tuner(struct file *file, void *priv, 1240static int si470x_vidioc_g_tuner(struct file *file, void *priv,
1164 struct v4l2_tuner *tuner) 1241 struct v4l2_tuner *tuner)
1165{ 1242{
1166 int retval;
1167 struct si470x_device *radio = video_get_drvdata(video_devdata(file)); 1243 struct si470x_device *radio = video_get_drvdata(video_devdata(file));
1244 int retval;
1168 1245
1169 if (tuner->index > 0) 1246 if (tuner->index > 0)
1170 return -EINVAL; 1247 return -EINVAL;
@@ -1220,6 +1297,7 @@ static int si470x_vidioc_s_tuner(struct file *file, void *priv,
1220 struct v4l2_tuner *tuner) 1297 struct v4l2_tuner *tuner)
1221{ 1298{
1222 struct si470x_device *radio = video_get_drvdata(video_devdata(file)); 1299 struct si470x_device *radio = video_get_drvdata(video_devdata(file));
1300 int retval;
1223 1301
1224 if (tuner->index > 0) 1302 if (tuner->index > 0)
1225 return -EINVAL; 1303 return -EINVAL;
@@ -1229,7 +1307,12 @@ static int si470x_vidioc_s_tuner(struct file *file, void *priv,
1229 else 1307 else
1230 radio->registers[POWERCFG] &= ~POWERCFG_MONO; /* try stereo */ 1308 radio->registers[POWERCFG] &= ~POWERCFG_MONO; /* try stereo */
1231 1309
1232 return si470x_set_register(radio, POWERCFG); 1310 retval = si470x_set_register(radio, POWERCFG);
1311 if (retval < 0)
1312 printk(KERN_WARNING DRIVER_NAME
1313 ": set tuner failed with %d\n", retval);
1314
1315 return retval;
1233} 1316}
1234 1317
1235 1318
@@ -1255,11 +1338,17 @@ static int si470x_vidioc_s_frequency(struct file *file, void *priv,
1255 struct v4l2_frequency *freq) 1338 struct v4l2_frequency *freq)
1256{ 1339{
1257 struct si470x_device *radio = video_get_drvdata(video_devdata(file)); 1340 struct si470x_device *radio = video_get_drvdata(video_devdata(file));
1341 int retval;
1258 1342
1259 if (freq->type != V4L2_TUNER_RADIO) 1343 if (freq->type != V4L2_TUNER_RADIO)
1260 return -EINVAL; 1344 return -EINVAL;
1261 1345
1262 return si470x_set_freq(radio, freq->frequency); 1346 retval = si470x_set_freq(radio, freq->frequency);
1347 if (retval < 0)
1348 printk(KERN_WARNING DRIVER_NAME
1349 ": set frequency failed with %d\n", retval);
1350
1351 return 0;
1263} 1352}
1264 1353
1265 1354
@@ -1299,71 +1388,116 @@ static int si470x_usb_driver_probe(struct usb_interface *intf,
1299 const struct usb_device_id *id) 1388 const struct usb_device_id *id)
1300{ 1389{
1301 struct si470x_device *radio; 1390 struct si470x_device *radio;
1391 int retval = -ENOMEM;
1302 1392
1303 /* memory and interface allocations */ 1393 /* private data allocation */
1304 radio = kmalloc(sizeof(struct si470x_device), GFP_KERNEL); 1394 radio = kzalloc(sizeof(struct si470x_device), GFP_KERNEL);
1305 if (!radio) 1395 if (!radio)
1306 return -ENOMEM; 1396 goto err_initial;
1397
1398 /* video device allocation */
1307 radio->videodev = video_device_alloc(); 1399 radio->videodev = video_device_alloc();
1308 if (!radio->videodev) { 1400 if (!radio->videodev)
1309 kfree(radio); 1401 goto err_radio;
1310 return -ENOMEM; 1402
1311 } 1403 /* initial configuration */
1312 memcpy(radio->videodev, &si470x_viddev_template, 1404 memcpy(radio->videodev, &si470x_viddev_template,
1313 sizeof(si470x_viddev_template)); 1405 sizeof(si470x_viddev_template));
1314 radio->users = 0; 1406 radio->users = 0;
1315 radio->usbdev = interface_to_usbdev(intf); 1407 radio->usbdev = interface_to_usbdev(intf);
1408 radio->intf = intf;
1409 mutex_init(&radio->lock);
1316 video_set_drvdata(radio->videodev, radio); 1410 video_set_drvdata(radio->videodev, radio);
1317 if (video_register_device(radio->videodev, VFL_TYPE_RADIO, radio_nr)) {
1318 printk(KERN_WARNING DRIVER_NAME
1319 ": Could not register video device\n");
1320 video_device_release(radio->videodev);
1321 kfree(radio);
1322 return -EIO;
1323 }
1324 usb_set_intfdata(intf, radio);
1325 1411
1326 /* show some infos about the specific device */ 1412 /* show some infos about the specific device */
1327 if (si470x_get_all_registers(radio) < 0) { 1413 retval = -EIO;
1328 video_device_release(radio->videodev); 1414 if (si470x_get_all_registers(radio) < 0)
1329 kfree(radio); 1415 goto err_all;
1330 return -EIO; 1416 printk(KERN_INFO DRIVER_NAME ": DeviceID=0x%4.4hx ChipID=0x%4.4hx\n",
1331 }
1332 printk(KERN_INFO DRIVER_NAME ": DeviceID=0x%4.4x ChipID=0x%4.4x\n",
1333 radio->registers[DEVICEID], radio->registers[CHIPID]); 1417 radio->registers[DEVICEID], radio->registers[CHIPID]);
1334 1418
1335 /* check if firmware is current */ 1419 /* check if firmware is current */
1336 if ((radio->registers[CHIPID] & CHIPID_FIRMWARE) 1420 if ((radio->registers[CHIPID] & CHIPID_FIRMWARE)
1337 < RADIO_SW_VERSION_CURRENT) 1421 < RADIO_SW_VERSION_CURRENT) {
1422 printk(KERN_WARNING DRIVER_NAME
1423 ": This driver is known to work with "
1424 "firmware version %hu,\n", RADIO_SW_VERSION_CURRENT);
1425 printk(KERN_WARNING DRIVER_NAME
1426 ": but the device has firmware version %hu.\n",
1427 radio->registers[CHIPID] & CHIPID_FIRMWARE);
1428 printk(KERN_WARNING DRIVER_NAME
1429 ": If you have some trouble using this driver,\n");
1338 printk(KERN_WARNING DRIVER_NAME 1430 printk(KERN_WARNING DRIVER_NAME
1339 ": This driver is known to work with chip version %d, " 1431 ": please report to V4L ML at "
1340 "but the device has firmware %d.\n" 1432 "video4linux-list@redhat.com\n");
1341 DRIVER_NAME 1433 }
1342 "If you have some trouble using this driver, please "
1343 "report to V4L ML at video4linux-list@redhat.com\n",
1344 radio->registers[CHIPID] & CHIPID_FIRMWARE,
1345 RADIO_SW_VERSION_CURRENT);
1346 1434
1347 /* set initial frequency */ 1435 /* set initial frequency */
1348 si470x_set_freq(radio, 87.5 * FREQ_MUL); /* available in all regions */ 1436 si470x_set_freq(radio, 87.5 * FREQ_MUL); /* available in all regions */
1349 1437
1350 /* rds initialization */ 1438 /* rds buffer allocation */
1351 radio->buf_size = rds_buf * 3; 1439 radio->buf_size = rds_buf * 3;
1352 radio->buffer = kmalloc(radio->buf_size, GFP_KERNEL); 1440 radio->buffer = kmalloc(radio->buf_size, GFP_KERNEL);
1353 if (!radio->buffer) { 1441 if (!radio->buffer)
1354 video_device_release(radio->videodev); 1442 goto err_all;
1355 kfree(radio); 1443
1356 return -ENOMEM; 1444 /* rds buffer configuration */
1357 }
1358 radio->wr_index = 0; 1445 radio->wr_index = 0;
1359 radio->rd_index = 0; 1446 radio->rd_index = 0;
1360 init_waitqueue_head(&radio->read_queue); 1447 init_waitqueue_head(&radio->read_queue);
1361 1448
1362 /* prepare polling via eventd */ 1449 /* prepare rds work function */
1363 INIT_WORK(&radio->work, si470x_work); 1450 INIT_DELAYED_WORK(&radio->work, si470x_work);
1364 init_timer(&radio->timer); 1451
1365 radio->timer.function = si470x_timer; 1452 /* register video device */
1366 radio->timer.data = (unsigned long) radio; 1453 if (video_register_device(radio->videodev, VFL_TYPE_RADIO, radio_nr)) {
1454 printk(KERN_WARNING DRIVER_NAME
1455 ": Could not register video device\n");
1456 goto err_all;
1457 }
1458 usb_set_intfdata(intf, radio);
1459
1460 return 0;
1461err_all:
1462 video_device_release(radio->videodev);
1463 kfree(radio->buffer);
1464err_radio:
1465 kfree(radio);
1466err_initial:
1467 return retval;
1468}
1469
1470
1471/*
1472 * si470x_usb_driver_suspend - suspend the device
1473 */
1474static int si470x_usb_driver_suspend(struct usb_interface *intf,
1475 pm_message_t message)
1476{
1477 struct si470x_device *radio = usb_get_intfdata(intf);
1478
1479 printk(KERN_INFO DRIVER_NAME ": suspending now...\n");
1480
1481 cancel_delayed_work_sync(&radio->work);
1482
1483 return 0;
1484}
1485
1486
1487/*
1488 * si470x_usb_driver_resume - resume the device
1489 */
1490static int si470x_usb_driver_resume(struct usb_interface *intf)
1491{
1492 struct si470x_device *radio = usb_get_intfdata(intf);
1493
1494 printk(KERN_INFO DRIVER_NAME ": resuming now...\n");
1495
1496 mutex_lock(&radio->lock);
1497 if (radio->users && radio->registers[SYSCONFIG1] & SYSCONFIG1_RDS)
1498 schedule_delayed_work(&radio->work,
1499 msecs_to_jiffies(rds_poll_time));
1500 mutex_unlock(&radio->lock);
1367 1501
1368 return 0; 1502 return 0;
1369} 1503}
@@ -1376,15 +1510,11 @@ static void si470x_usb_driver_disconnect(struct usb_interface *intf)
1376{ 1510{
1377 struct si470x_device *radio = usb_get_intfdata(intf); 1511 struct si470x_device *radio = usb_get_intfdata(intf);
1378 1512
1379 del_timer_sync(&radio->timer); 1513 cancel_delayed_work_sync(&radio->work);
1380 flush_scheduled_work();
1381
1382 usb_set_intfdata(intf, NULL); 1514 usb_set_intfdata(intf, NULL);
1383 if (radio) { 1515 video_unregister_device(radio->videodev);
1384 video_unregister_device(radio->videodev); 1516 kfree(radio->buffer);
1385 kfree(radio->buffer); 1517 kfree(radio);
1386 kfree(radio);
1387 }
1388} 1518}
1389 1519
1390 1520
@@ -1392,10 +1522,13 @@ static void si470x_usb_driver_disconnect(struct usb_interface *intf)
1392 * si470x_usb_driver - usb driver interface 1522 * si470x_usb_driver - usb driver interface
1393 */ 1523 */
1394static struct usb_driver si470x_usb_driver = { 1524static struct usb_driver si470x_usb_driver = {
1395 .name = DRIVER_NAME, 1525 .name = DRIVER_NAME,
1396 .probe = si470x_usb_driver_probe, 1526 .probe = si470x_usb_driver_probe,
1397 .disconnect = si470x_usb_driver_disconnect, 1527 .disconnect = si470x_usb_driver_disconnect,
1398 .id_table = si470x_usb_driver_id_table, 1528 .suspend = si470x_usb_driver_suspend,
1529 .resume = si470x_usb_driver_resume,
1530 .id_table = si470x_usb_driver_id_table,
1531 .supports_autosuspend = 1,
1399}; 1532};
1400 1533
1401 1534
@@ -1409,7 +1542,7 @@ static struct usb_driver si470x_usb_driver = {
1409 */ 1542 */
1410static int __init si470x_module_init(void) 1543static int __init si470x_module_init(void)
1411{ 1544{
1412 printk(KERN_INFO DRIVER_DESC "\n"); 1545 printk(KERN_INFO DRIVER_DESC ", Version " DRIVER_VERSION "\n");
1413 return usb_register(&si470x_usb_driver); 1546 return usb_register(&si470x_usb_driver);
1414} 1547}
1415 1548
@@ -1429,4 +1562,4 @@ module_exit(si470x_module_exit);
1429MODULE_LICENSE("GPL"); 1562MODULE_LICENSE("GPL");
1430MODULE_AUTHOR(DRIVER_AUTHOR); 1563MODULE_AUTHOR(DRIVER_AUTHOR);
1431MODULE_DESCRIPTION(DRIVER_DESC); 1564MODULE_DESCRIPTION(DRIVER_DESC);
1432MODULE_VERSION("1.0.4"); 1565MODULE_VERSION(DRIVER_VERSION);
diff --git a/drivers/media/video/Kconfig b/drivers/media/video/Kconfig
index a2e8987a6195..37072a21d8c9 100644
--- a/drivers/media/video/Kconfig
+++ b/drivers/media/video/Kconfig
@@ -4,14 +4,14 @@
4 4
5menuconfig VIDEO_CAPTURE_DRIVERS 5menuconfig VIDEO_CAPTURE_DRIVERS
6 bool "Video capture adapters" 6 bool "Video capture adapters"
7 depends on VIDEO_DEV 7 depends on VIDEO_V4L2
8 default y 8 default y
9 ---help--- 9 ---help---
10 Say Y here to enable selecting the video adapters for 10 Say Y here to enable selecting the video adapters for
11 webcams, analog TV, and hybrid analog/digital TV. 11 webcams, analog TV, and hybrid analog/digital TV.
12 Some of those devices also supports FM radio. 12 Some of those devices also supports FM radio.
13 13
14if VIDEO_CAPTURE_DRIVERS && VIDEO_DEV 14if VIDEO_CAPTURE_DRIVERS && VIDEO_V4L2
15 15
16config VIDEO_ADV_DEBUG 16config VIDEO_ADV_DEBUG
17 bool "Enable advanced debug functionality" 17 bool "Enable advanced debug functionality"
diff --git a/drivers/media/video/Makefile b/drivers/media/video/Makefile
index 850b8c6f4577..3f209b32eeac 100644
--- a/drivers/media/video/Makefile
+++ b/drivers/media/video/Makefile
@@ -10,8 +10,9 @@ msp3400-objs := msp3400-driver.o msp3400-kthreads.o
10 10
11stkwebcam-objs := stk-webcam.o stk-sensor.o 11stkwebcam-objs := stk-webcam.o stk-sensor.o
12 12
13obj-$(CONFIG_VIDEO_DEV) += videodev.o v4l2-common.o compat_ioctl32.o \ 13obj-$(CONFIG_VIDEO_DEV) += videodev.o compat_ioctl32.o v4l2-int-device.o
14 v4l2-int-device.o 14
15obj-$(CONFIG_VIDEO_V4L2_COMMON) += v4l2-common.o
15 16
16ifeq ($(CONFIG_VIDEO_V4L1_COMPAT),y) 17ifeq ($(CONFIG_VIDEO_V4L1_COMPAT),y)
17 obj-$(CONFIG_VIDEO_DEV) += v4l1-compat.o 18 obj-$(CONFIG_VIDEO_DEV) += v4l1-compat.o
diff --git a/drivers/media/video/bt8xx/bttv-driver.c b/drivers/media/video/bt8xx/bttv-driver.c
index 907dc62c1783..5404fcc5276d 100644
--- a/drivers/media/video/bt8xx/bttv-driver.c
+++ b/drivers/media/video/bt8xx/bttv-driver.c
@@ -2354,8 +2354,8 @@ static int setup_window(struct bttv_fh *fh, struct bttv *btv,
2354 BUG(); 2354 BUG();
2355 } 2355 }
2356 2356
2357 mutex_lock(&fh->cap.lock); 2357 mutex_lock(&fh->cap.vb_lock);
2358 kfree(fh->ov.clips); 2358 kfree(fh->ov.clips);
2359 fh->ov.clips = clips; 2359 fh->ov.clips = clips;
2360 fh->ov.nclips = n; 2360 fh->ov.nclips = n;
2361 2361
@@ -2376,7 +2376,7 @@ static int setup_window(struct bttv_fh *fh, struct bttv *btv,
2376 bttv_overlay_risc(btv, &fh->ov, fh->ovfmt, new); 2376 bttv_overlay_risc(btv, &fh->ov, fh->ovfmt, new);
2377 retval = bttv_switch_overlay(btv,fh,new); 2377 retval = bttv_switch_overlay(btv,fh,new);
2378 } 2378 }
2379 mutex_unlock(&fh->cap.lock); 2379 mutex_unlock(&fh->cap.vb_lock);
2380 return retval; 2380 return retval;
2381} 2381}
2382 2382
@@ -2576,7 +2576,7 @@ static int bttv_s_fmt_cap(struct file *file, void *priv,
2576 fmt = format_by_fourcc(f->fmt.pix.pixelformat); 2576 fmt = format_by_fourcc(f->fmt.pix.pixelformat);
2577 2577
2578 /* update our state informations */ 2578 /* update our state informations */
2579 mutex_lock(&fh->cap.lock); 2579 mutex_lock(&fh->cap.vb_lock);
2580 fh->fmt = fmt; 2580 fh->fmt = fmt;
2581 fh->cap.field = f->fmt.pix.field; 2581 fh->cap.field = f->fmt.pix.field;
2582 fh->cap.last = V4L2_FIELD_NONE; 2582 fh->cap.last = V4L2_FIELD_NONE;
@@ -2585,7 +2585,7 @@ static int bttv_s_fmt_cap(struct file *file, void *priv,
2585 btv->init.fmt = fmt; 2585 btv->init.fmt = fmt;
2586 btv->init.width = f->fmt.pix.width; 2586 btv->init.width = f->fmt.pix.width;
2587 btv->init.height = f->fmt.pix.height; 2587 btv->init.height = f->fmt.pix.height;
2588 mutex_unlock(&fh->cap.lock); 2588 mutex_unlock(&fh->cap.vb_lock);
2589 2589
2590 return 0; 2590 return 0;
2591} 2591}
@@ -2611,11 +2611,11 @@ static int vidiocgmbuf(struct file *file, void *priv, struct video_mbuf *mbuf)
2611 unsigned int i; 2611 unsigned int i;
2612 struct bttv_fh *fh = priv; 2612 struct bttv_fh *fh = priv;
2613 2613
2614 mutex_lock(&fh->cap.lock); 2614 mutex_lock(&fh->cap.vb_lock);
2615 retval = videobuf_mmap_setup(&fh->cap, gbuffers, gbufsize, 2615 retval = videobuf_mmap_setup(&fh->cap, gbuffers, gbufsize,
2616 V4L2_MEMORY_MMAP); 2616 V4L2_MEMORY_MMAP);
2617 if (retval < 0) { 2617 if (retval < 0) {
2618 mutex_unlock(&fh->cap.lock); 2618 mutex_unlock(&fh->cap.vb_lock);
2619 return retval; 2619 return retval;
2620 } 2620 }
2621 2621
@@ -2627,7 +2627,7 @@ static int vidiocgmbuf(struct file *file, void *priv, struct video_mbuf *mbuf)
2627 for (i = 0; i < gbuffers; i++) 2627 for (i = 0; i < gbuffers; i++)
2628 mbuf->offsets[i] = i * gbufsize; 2628 mbuf->offsets[i] = i * gbufsize;
2629 2629
2630 mutex_unlock(&fh->cap.lock); 2630 mutex_unlock(&fh->cap.vb_lock);
2631 return 0; 2631 return 0;
2632} 2632}
2633#endif 2633#endif
@@ -2756,10 +2756,11 @@ static int bttv_overlay(struct file *file, void *f, unsigned int on)
2756 if (!check_alloc_btres(btv, fh, RESOURCE_OVERLAY)) 2756 if (!check_alloc_btres(btv, fh, RESOURCE_OVERLAY))
2757 return -EBUSY; 2757 return -EBUSY;
2758 2758
2759 mutex_lock(&fh->cap.lock); 2759 mutex_lock(&fh->cap.vb_lock);
2760 if (on) { 2760 if (on) {
2761 fh->ov.tvnorm = btv->tvnorm; 2761 fh->ov.tvnorm = btv->tvnorm;
2762 new = videobuf_pci_alloc(sizeof(*new)); 2762 new = videobuf_pci_alloc(sizeof(*new));
2763 new->crop = btv->crop[!!fh->do_crop].rect;
2763 bttv_overlay_risc(btv, &fh->ov, fh->ovfmt, new); 2764 bttv_overlay_risc(btv, &fh->ov, fh->ovfmt, new);
2764 } else { 2765 } else {
2765 new = NULL; 2766 new = NULL;
@@ -2767,7 +2768,7 @@ static int bttv_overlay(struct file *file, void *f, unsigned int on)
2767 2768
2768 /* switch over */ 2769 /* switch over */
2769 retval = bttv_switch_overlay(btv, fh, new); 2770 retval = bttv_switch_overlay(btv, fh, new);
2770 mutex_unlock(&fh->cap.lock); 2771 mutex_unlock(&fh->cap.vb_lock);
2771 return retval; 2772 return retval;
2772} 2773}
2773 2774
@@ -2806,7 +2807,7 @@ static int bttv_s_fbuf(struct file *file, void *f,
2806 } 2807 }
2807 2808
2808 /* ok, accept it */ 2809 /* ok, accept it */
2809 mutex_lock(&fh->cap.lock); 2810 mutex_lock(&fh->cap.vb_lock);
2810 btv->fbuf.base = fb->base; 2811 btv->fbuf.base = fb->base;
2811 btv->fbuf.fmt.width = fb->fmt.width; 2812 btv->fbuf.fmt.width = fb->fmt.width;
2812 btv->fbuf.fmt.height = fb->fmt.height; 2813 btv->fbuf.fmt.height = fb->fmt.height;
@@ -2838,7 +2839,7 @@ static int bttv_s_fbuf(struct file *file, void *f,
2838 retval = bttv_switch_overlay(btv, fh, new); 2839 retval = bttv_switch_overlay(btv, fh, new);
2839 } 2840 }
2840 } 2841 }
2841 mutex_unlock(&fh->cap.lock); 2842 mutex_unlock(&fh->cap.vb_lock);
2842 return retval; 2843 return retval;
2843} 2844}
2844 2845
@@ -3090,7 +3091,7 @@ static int bttv_s_crop(struct file *file, void *f, struct v4l2_crop *crop)
3090 3091
3091 fh->do_crop = 1; 3092 fh->do_crop = 1;
3092 3093
3093 mutex_lock(&fh->cap.lock); 3094 mutex_lock(&fh->cap.vb_lock);
3094 3095
3095 if (fh->width < c.min_scaled_width) { 3096 if (fh->width < c.min_scaled_width) {
3096 fh->width = c.min_scaled_width; 3097 fh->width = c.min_scaled_width;
@@ -3108,7 +3109,7 @@ static int bttv_s_crop(struct file *file, void *f, struct v4l2_crop *crop)
3108 btv->init.height = c.max_scaled_height; 3109 btv->init.height = c.max_scaled_height;
3109 } 3110 }
3110 3111
3111 mutex_unlock(&fh->cap.lock); 3112 mutex_unlock(&fh->cap.vb_lock);
3112 3113
3113 return 0; 3114 return 0;
3114} 3115}
@@ -3177,30 +3178,25 @@ static unsigned int bttv_poll(struct file *file, poll_table *wait)
3177 buf = list_entry(fh->cap.stream.next,struct bttv_buffer,vb.stream); 3178 buf = list_entry(fh->cap.stream.next,struct bttv_buffer,vb.stream);
3178 } else { 3179 } else {
3179 /* read() capture */ 3180 /* read() capture */
3180 mutex_lock(&fh->cap.lock); 3181 mutex_lock(&fh->cap.vb_lock);
3181 if (NULL == fh->cap.read_buf) { 3182 if (NULL == fh->cap.read_buf) {
3182 /* need to capture a new frame */ 3183 /* need to capture a new frame */
3183 if (locked_btres(fh->btv,RESOURCE_VIDEO_STREAM)) { 3184 if (locked_btres(fh->btv,RESOURCE_VIDEO_STREAM))
3184 mutex_unlock(&fh->cap.lock); 3185 goto err;
3185 return POLLERR;
3186 }
3187 fh->cap.read_buf = videobuf_pci_alloc(fh->cap.msize); 3186 fh->cap.read_buf = videobuf_pci_alloc(fh->cap.msize);
3188 if (NULL == fh->cap.read_buf) { 3187 if (NULL == fh->cap.read_buf)
3189 mutex_unlock(&fh->cap.lock); 3188 goto err;
3190 return POLLERR;
3191 }
3192 fh->cap.read_buf->memory = V4L2_MEMORY_USERPTR; 3189 fh->cap.read_buf->memory = V4L2_MEMORY_USERPTR;
3193 field = videobuf_next_field(&fh->cap); 3190 field = videobuf_next_field(&fh->cap);
3194 if (0 != fh->cap.ops->buf_prepare(&fh->cap,fh->cap.read_buf,field)) { 3191 if (0 != fh->cap.ops->buf_prepare(&fh->cap,fh->cap.read_buf,field)) {
3195 kfree (fh->cap.read_buf); 3192 kfree (fh->cap.read_buf);
3196 fh->cap.read_buf = NULL; 3193 fh->cap.read_buf = NULL;
3197 mutex_unlock(&fh->cap.lock); 3194 goto err;
3198 return POLLERR;
3199 } 3195 }
3200 fh->cap.ops->buf_queue(&fh->cap,fh->cap.read_buf); 3196 fh->cap.ops->buf_queue(&fh->cap,fh->cap.read_buf);
3201 fh->cap.read_off = 0; 3197 fh->cap.read_off = 0;
3202 } 3198 }
3203 mutex_unlock(&fh->cap.lock); 3199 mutex_unlock(&fh->cap.vb_lock);
3204 buf = (struct bttv_buffer*)fh->cap.read_buf; 3200 buf = (struct bttv_buffer*)fh->cap.read_buf;
3205 } 3201 }
3206 3202
@@ -3209,6 +3205,9 @@ static unsigned int bttv_poll(struct file *file, poll_table *wait)
3209 buf->vb.state == VIDEOBUF_ERROR) 3205 buf->vb.state == VIDEOBUF_ERROR)
3210 return POLLIN|POLLRDNORM; 3206 return POLLIN|POLLRDNORM;
3211 return 0; 3207 return 0;
3208err:
3209 mutex_unlock(&fh->cap.vb_lock);
3210 return POLLERR;
3212} 3211}
3213 3212
3214static int bttv_open(struct inode *inode, struct file *file) 3213static int bttv_open(struct inode *inode, struct file *file)
diff --git a/drivers/media/video/bt8xx/bttv-vbi.c b/drivers/media/video/bt8xx/bttv-vbi.c
index 1f0cc79e2a33..75fa82c7c735 100644
--- a/drivers/media/video/bt8xx/bttv-vbi.c
+++ b/drivers/media/video/bt8xx/bttv-vbi.c
@@ -352,13 +352,13 @@ int bttv_s_fmt_vbi(struct file *file, void *f, struct v4l2_format *frt)
352 because vbi_fmt.end counts field lines times two. */ 352 because vbi_fmt.end counts field lines times two. */
353 end = max(frt->fmt.vbi.start[0], start1) * 2 + 2; 353 end = max(frt->fmt.vbi.start[0], start1) * 2 + 2;
354 354
355 mutex_lock(&fh->vbi.lock); 355 mutex_lock(&fh->vbi.vb_lock);
356 356
357 fh->vbi_fmt.fmt = frt->fmt.vbi; 357 fh->vbi_fmt.fmt = frt->fmt.vbi;
358 fh->vbi_fmt.tvnorm = tvnorm; 358 fh->vbi_fmt.tvnorm = tvnorm;
359 fh->vbi_fmt.end = end; 359 fh->vbi_fmt.end = end;
360 360
361 mutex_unlock(&fh->vbi.lock); 361 mutex_unlock(&fh->vbi.vb_lock);
362 362
363 rc = 0; 363 rc = 0;
364 364
diff --git a/drivers/media/video/cx88/cx88-mpeg.c b/drivers/media/video/cx88/cx88-mpeg.c
index 0aedbeaf94cd..e357f415db06 100644
--- a/drivers/media/video/cx88/cx88-mpeg.c
+++ b/drivers/media/video/cx88/cx88-mpeg.c
@@ -609,13 +609,19 @@ static int cx8802_request_acquire(struct cx8802_driver *drv)
609 struct cx88_core *core = drv->core; 609 struct cx88_core *core = drv->core;
610 610
611 /* Fail a request for hardware if the device is busy. */ 611 /* Fail a request for hardware if the device is busy. */
612 if (core->active_type_id != CX88_BOARD_NONE) 612 if (core->active_type_id != CX88_BOARD_NONE &&
613 core->active_type_id != drv->type_id)
613 return -EBUSY; 614 return -EBUSY;
614 615
615 if (drv->advise_acquire) 616 if (drv->advise_acquire)
616 { 617 {
617 core->active_type_id = drv->type_id; 618 mutex_lock(&drv->core->lock);
618 drv->advise_acquire(drv); 619 core->active_ref++;
620 if (core->active_type_id == CX88_BOARD_NONE) {
621 core->active_type_id = drv->type_id;
622 drv->advise_acquire(drv);
623 }
624 mutex_unlock(&drv->core->lock);
619 625
620 mpeg_dbg(1,"%s() Post acquire GPIO=%x\n", __FUNCTION__, cx_read(MO_GP0_IO)); 626 mpeg_dbg(1,"%s() Post acquire GPIO=%x\n", __FUNCTION__, cx_read(MO_GP0_IO));
621 } 627 }
@@ -628,12 +634,14 @@ static int cx8802_request_release(struct cx8802_driver *drv)
628{ 634{
629 struct cx88_core *core = drv->core; 635 struct cx88_core *core = drv->core;
630 636
631 if (drv->advise_release) 637 mutex_lock(&drv->core->lock);
638 if (drv->advise_release && --core->active_ref == 0)
632 { 639 {
633 drv->advise_release(drv); 640 drv->advise_release(drv);
634 core->active_type_id = CX88_BOARD_NONE; 641 core->active_type_id = CX88_BOARD_NONE;
635 mpeg_dbg(1,"%s() Post release GPIO=%x\n", __FUNCTION__, cx_read(MO_GP0_IO)); 642 mpeg_dbg(1,"%s() Post release GPIO=%x\n", __FUNCTION__, cx_read(MO_GP0_IO));
636 } 643 }
644 mutex_unlock(&drv->core->lock);
637 645
638 return 0; 646 return 0;
639} 647}
diff --git a/drivers/media/video/cx88/cx88.h b/drivers/media/video/cx88/cx88.h
index 4e823f2a539a..37e6d2e4002f 100644
--- a/drivers/media/video/cx88/cx88.h
+++ b/drivers/media/video/cx88/cx88.h
@@ -336,6 +336,7 @@ struct cx88_core {
336 /* cx88-video needs to access cx8802 for hybrid tuner pll access. */ 336 /* cx88-video needs to access cx8802 for hybrid tuner pll access. */
337 struct cx8802_dev *dvbdev; 337 struct cx8802_dev *dvbdev;
338 enum cx88_board_type active_type_id; 338 enum cx88_board_type active_type_id;
339 int active_ref;
339}; 340};
340 341
341struct cx8800_dev; 342struct cx8800_dev;
diff --git a/drivers/media/video/em28xx/em28xx-audio.c b/drivers/media/video/em28xx/em28xx-audio.c
index 941357c4f3f5..8c67f678266a 100644
--- a/drivers/media/video/em28xx/em28xx-audio.c
+++ b/drivers/media/video/em28xx/em28xx-audio.c
@@ -35,7 +35,6 @@
35#include <linux/vmalloc.h> 35#include <linux/vmalloc.h>
36#include <linux/proc_fs.h> 36#include <linux/proc_fs.h>
37#include <linux/module.h> 37#include <linux/module.h>
38#include <sound/driver.h>
39#include <sound/core.h> 38#include <sound/core.h>
40#include <sound/pcm.h> 39#include <sound/pcm.h>
41#include <sound/pcm_params.h> 40#include <sound/pcm_params.h>
@@ -270,8 +269,11 @@ static int snd_em28xx_capture_open(struct snd_pcm_substream *substream)
270 dprintk("opening device and trying to acquire exclusive lock\n"); 269 dprintk("opening device and trying to acquire exclusive lock\n");
271 270
272 /* Sets volume, mute, etc */ 271 /* Sets volume, mute, etc */
272
273 dev->mute = 0; 273 dev->mute = 0;
274 mutex_lock(&dev->lock);
274 ret = em28xx_audio_analog_set(dev); 275 ret = em28xx_audio_analog_set(dev);
276 mutex_unlock(&dev->lock);
275 if (ret < 0) 277 if (ret < 0)
276 goto err; 278 goto err;
277 279
@@ -303,7 +305,9 @@ static int snd_em28xx_pcm_close(struct snd_pcm_substream *substream)
303 dprintk("closing device\n"); 305 dprintk("closing device\n");
304 306
305 dev->mute = 1; 307 dev->mute = 1;
308 mutex_lock(&dev->lock);
306 em28xx_audio_analog_set(dev); 309 em28xx_audio_analog_set(dev);
310 mutex_unlock(&dev->lock);
307 311
308 if (dev->adev->users == 0 && dev->adev->shutdown == 1) { 312 if (dev->adev->users == 0 && dev->adev->shutdown == 1) {
309 dprintk("audio users: %d\n", dev->adev->users); 313 dprintk("audio users: %d\n", dev->adev->users);
diff --git a/drivers/media/video/em28xx/em28xx-cards.c b/drivers/media/video/em28xx/em28xx-cards.c
index 2159d0160df2..aae7753fef11 100644
--- a/drivers/media/video/em28xx/em28xx-cards.c
+++ b/drivers/media/video/em28xx/em28xx-cards.c
@@ -393,15 +393,15 @@ struct em28xx_board em28xx_boards[] = {
393 .input = { { 393 .input = { {
394 .type = EM28XX_VMUX_TELEVISION, 394 .type = EM28XX_VMUX_TELEVISION,
395 .vmux = SAA7115_COMPOSITE2, 395 .vmux = SAA7115_COMPOSITE2,
396 .amux = 1, 396 .amux = EM28XX_AMUX_LINE_IN,
397 }, { 397 }, {
398 .type = EM28XX_VMUX_COMPOSITE1, 398 .type = EM28XX_VMUX_COMPOSITE1,
399 .vmux = SAA7115_COMPOSITE0, 399 .vmux = SAA7115_COMPOSITE0,
400 .amux = 1, 400 .amux = EM28XX_AMUX_LINE_IN,
401 }, { 401 }, {
402 .type = EM28XX_VMUX_SVIDEO, 402 .type = EM28XX_VMUX_SVIDEO,
403 .vmux = SAA7115_SVIDEO3, 403 .vmux = SAA7115_SVIDEO3,
404 .amux = 1, 404 .amux = EM28XX_AMUX_LINE_IN,
405 } }, 405 } },
406 }, 406 },
407}; 407};
@@ -441,6 +441,8 @@ struct usb_device_id em28xx_id_table [] = {
441 .driver_info = EM2820_BOARD_PINNACLE_DVC_90 }, 441 .driver_info = EM2820_BOARD_PINNACLE_DVC_90 },
442 { USB_DEVICE(0x2040, 0x6500), 442 { USB_DEVICE(0x2040, 0x6500),
443 .driver_info = EM2880_BOARD_HAUPPAUGE_WINTV_HVR_900 }, 443 .driver_info = EM2880_BOARD_HAUPPAUGE_WINTV_HVR_900 },
444 { USB_DEVICE(0x2040, 0x6502),
445 .driver_info = EM2880_BOARD_HAUPPAUGE_WINTV_HVR_900 },
444 { USB_DEVICE(0x2040, 0x6513), 446 { USB_DEVICE(0x2040, 0x6513),
445 .driver_info = EM2880_BOARD_HAUPPAUGE_WINTV_HVR_950 }, 447 .driver_info = EM2880_BOARD_HAUPPAUGE_WINTV_HVR_950 },
446 { USB_DEVICE(0x0ccd, 0x0042), 448 { USB_DEVICE(0x0ccd, 0x0042),
diff --git a/drivers/media/video/em28xx/em28xx-core.c b/drivers/media/video/em28xx/em28xx-core.c
index f6b78357f0e5..7d1537cab867 100644
--- a/drivers/media/video/em28xx/em28xx-core.c
+++ b/drivers/media/video/em28xx/em28xx-core.c
@@ -72,7 +72,8 @@ u32 em28xx_request_buffers(struct em28xx *dev, u32 count)
72 const size_t imagesize = PAGE_ALIGN(dev->frame_size); /*needs to be page aligned cause the buffers can be mapped individually! */ 72 const size_t imagesize = PAGE_ALIGN(dev->frame_size); /*needs to be page aligned cause the buffers can be mapped individually! */
73 void *buff = NULL; 73 void *buff = NULL;
74 u32 i; 74 u32 i;
75 em28xx_coredbg("requested %i buffers with size %zi", count, imagesize); 75 em28xx_coredbg("requested %i buffers with size %zi\n",
76 count, imagesize);
76 if (count > EM28XX_NUM_FRAMES) 77 if (count > EM28XX_NUM_FRAMES)
77 count = EM28XX_NUM_FRAMES; 78 count = EM28XX_NUM_FRAMES;
78 79
@@ -150,7 +151,7 @@ int em28xx_read_reg_req_len(struct em28xx *dev, u8 req, u16 reg,
150 if (reg_debug){ 151 if (reg_debug){
151 printk(ret < 0 ? " failed!\n" : "%02x values: ", ret); 152 printk(ret < 0 ? " failed!\n" : "%02x values: ", ret);
152 for (byte = 0; byte < len; byte++) { 153 for (byte = 0; byte < len; byte++) {
153 printk(" %02x", buf[byte]); 154 printk(" %02x", (unsigned char)buf[byte]);
154 } 155 }
155 printk("\n"); 156 printk("\n");
156 } 157 }
@@ -177,7 +178,8 @@ int em28xx_read_reg_req(struct em28xx *dev, u8 req, u16 reg)
177 0x0000, reg, &val, 1, HZ); 178 0x0000, reg, &val, 1, HZ);
178 179
179 if (reg_debug) 180 if (reg_debug)
180 printk(ret < 0 ? " failed!\n" : "%02x\n", val); 181 printk(ret < 0 ? " failed!\n" :
182 "%02x\n", (unsigned char) val);
181 183
182 if (ret < 0) 184 if (ret < 0)
183 return ret; 185 return ret;
@@ -237,7 +239,7 @@ int em28xx_write_regs(struct em28xx *dev, u16 reg, char *buf, int len)
237 * sets only some bits (specified by bitmask) of a register, by first reading 239 * sets only some bits (specified by bitmask) of a register, by first reading
238 * the actual value 240 * the actual value
239 */ 241 */
240int em28xx_write_reg_bits(struct em28xx *dev, u16 reg, u8 val, 242static int em28xx_write_reg_bits(struct em28xx *dev, u16 reg, u8 val,
241 u8 bitmask) 243 u8 bitmask)
242{ 244{
243 int oldval; 245 int oldval;
@@ -254,26 +256,31 @@ int em28xx_write_reg_bits(struct em28xx *dev, u16 reg, u8 val,
254 */ 256 */
255static int em28xx_write_ac97(struct em28xx *dev, u8 reg, u8 *val) 257static int em28xx_write_ac97(struct em28xx *dev, u8 reg, u8 *val)
256{ 258{
257 int ret; 259 int ret, i;
258 u8 addr = reg & 0x7f; 260 u8 addr = reg & 0x7f;
259 if ((ret = em28xx_write_regs(dev, AC97LSB_REG, val, 2)) < 0) 261 if ((ret = em28xx_write_regs(dev, AC97LSB_REG, val, 2)) < 0)
260 return ret; 262 return ret;
261 if ((ret = em28xx_write_regs(dev, AC97ADDR_REG, &addr, 1)) < 0) 263 if ((ret = em28xx_write_regs(dev, AC97ADDR_REG, &addr, 1)) < 0)
262 return ret; 264 return ret;
263 if ((ret = em28xx_read_reg(dev, AC97BUSY_REG)) < 0) 265
264 return ret; 266 /* Wait up to 50 ms for AC97 command to complete */
265 else if (((u8) ret) & 0x01) { 267 for (i = 0; i < 10; i++) {
266 em28xx_warn ("AC97 command still being executed: not handled properly!\n"); 268 if ((ret = em28xx_read_reg(dev, AC97BUSY_REG)) < 0)
269 return ret;
270 if (!((u8) ret) & 0x01)
271 return 0;
272 msleep(5);
267 } 273 }
274 em28xx_warn ("AC97 command still being executed: not handled properly!\n");
268 return 0; 275 return 0;
269} 276}
270 277
271int em28xx_set_audio_source(struct em28xx *dev) 278static int em28xx_set_audio_source(struct em28xx *dev)
272{ 279{
273 static char *enable = "\x08\x08"; 280 static char *enable = "\x08\x08";
274 static char *disable = "\x08\x88"; 281 static char *disable = "\x08\x88";
275 char *video = enable, *line = disable; 282 char *video = enable, *line = disable;
276 int ret, no_ac97; 283 int ret;
277 u8 input; 284 u8 input;
278 285
279 if (dev->is_em2800) { 286 if (dev->is_em2800) {
@@ -293,11 +300,9 @@ int em28xx_set_audio_source(struct em28xx *dev)
293 switch (dev->ctl_ainput) { 300 switch (dev->ctl_ainput) {
294 case EM28XX_AMUX_VIDEO: 301 case EM28XX_AMUX_VIDEO:
295 input = EM28XX_AUDIO_SRC_TUNER; 302 input = EM28XX_AUDIO_SRC_TUNER;
296 no_ac97 = 1;
297 break; 303 break;
298 case EM28XX_AMUX_LINE_IN: 304 case EM28XX_AMUX_LINE_IN:
299 input = EM28XX_AUDIO_SRC_LINE; 305 input = EM28XX_AUDIO_SRC_LINE;
300 no_ac97 = 1;
301 break; 306 break;
302 case EM28XX_AMUX_AC97_VIDEO: 307 case EM28XX_AMUX_AC97_VIDEO:
303 input = EM28XX_AUDIO_SRC_LINE; 308 input = EM28XX_AUDIO_SRC_LINE;
@@ -313,12 +318,11 @@ int em28xx_set_audio_source(struct em28xx *dev)
313 ret = em28xx_write_reg_bits(dev, AUDIOSRC_REG, input, 0xc0); 318 ret = em28xx_write_reg_bits(dev, AUDIOSRC_REG, input, 0xc0);
314 if (ret < 0) 319 if (ret < 0)
315 return ret; 320 return ret;
321 msleep(5);
316 322
317 if (no_ac97) 323 /* Sets AC97 mixer registers
318 return 0; 324 This is seems to be needed, even for non-ac97 configs
319 325 */
320 /* Sets AC97 mixer registers */
321
322 ret = em28xx_write_ac97(dev, VIDEO_AC97, video); 326 ret = em28xx_write_ac97(dev, VIDEO_AC97, video);
323 if (ret < 0) 327 if (ret < 0)
324 return ret; 328 return ret;
@@ -337,9 +341,10 @@ int em28xx_audio_analog_set(struct em28xx *dev)
337 s[0] |= 0x1f - dev->volume; 341 s[0] |= 0x1f - dev->volume;
338 s[1] |= 0x1f - dev->volume; 342 s[1] |= 0x1f - dev->volume;
339 343
340 if (dev->mute) 344 /* Mute */
341 s[1] |= 0x80; 345 s[1] |= 0x80;
342 ret = em28xx_write_ac97(dev, MASTER_AC97, s); 346 ret = em28xx_write_ac97(dev, MASTER_AC97, s);
347
343 if (ret < 0) 348 if (ret < 0)
344 return ret; 349 return ret;
345 350
@@ -357,6 +362,11 @@ int em28xx_audio_analog_set(struct em28xx *dev)
357 /* Selects the proper audio input */ 362 /* Selects the proper audio input */
358 ret = em28xx_set_audio_source(dev); 363 ret = em28xx_set_audio_source(dev);
359 364
365 /* Unmute device */
366 if (!dev->mute)
367 s[1] &= ~0x80;
368 ret = em28xx_write_ac97(dev, MASTER_AC97, s);
369
360 return ret; 370 return ret;
361} 371}
362EXPORT_SYMBOL_GPL(em28xx_audio_analog_set); 372EXPORT_SYMBOL_GPL(em28xx_audio_analog_set);
@@ -667,7 +677,7 @@ static void em28xx_isocIrq(struct urb *urb)
667 continue; 677 continue;
668 } 678 }
669 if (urb->iso_frame_desc[i].actual_length > 679 if (urb->iso_frame_desc[i].actual_length >
670 dev->max_pkt_size) { 680 urb->iso_frame_desc[i].length) {
671 em28xx_isocdbg("packet bigger than packet size"); 681 em28xx_isocdbg("packet bigger than packet size");
672 continue; 682 continue;
673 } 683 }
@@ -713,8 +723,11 @@ void em28xx_uninit_isoc(struct em28xx *dev)
713 for (i = 0; i < EM28XX_NUM_BUFS; i++) { 723 for (i = 0; i < EM28XX_NUM_BUFS; i++) {
714 if (dev->urb[i]) { 724 if (dev->urb[i]) {
715 usb_kill_urb(dev->urb[i]); 725 usb_kill_urb(dev->urb[i]);
716 if (dev->transfer_buffer[i]){ 726 if (dev->transfer_buffer[i]) {
717 usb_buffer_free(dev->udev,(EM28XX_NUM_PACKETS*dev->max_pkt_size),dev->transfer_buffer[i],dev->urb[i]->transfer_dma); 727 usb_buffer_free(dev->udev,
728 dev->urb[i]->transfer_buffer_length,
729 dev->transfer_buffer[i],
730 dev->urb[i]->transfer_dma);
718 } 731 }
719 usb_free_urb(dev->urb[i]); 732 usb_free_urb(dev->urb[i]);
720 } 733 }
@@ -732,7 +745,10 @@ int em28xx_init_isoc(struct em28xx *dev)
732{ 745{
733 /* change interface to 3 which allows the biggest packet sizes */ 746 /* change interface to 3 which allows the biggest packet sizes */
734 int i, errCode; 747 int i, errCode;
735 const int sb_size = EM28XX_NUM_PACKETS * dev->max_pkt_size; 748 int sb_size;
749
750 em28xx_set_alternate(dev);
751 sb_size = EM28XX_NUM_PACKETS * dev->max_pkt_size;
736 752
737 /* reset streaming vars */ 753 /* reset streaming vars */
738 dev->frame_current = NULL; 754 dev->frame_current = NULL;
@@ -741,7 +757,7 @@ int em28xx_init_isoc(struct em28xx *dev)
741 /* allocate urbs */ 757 /* allocate urbs */
742 for (i = 0; i < EM28XX_NUM_BUFS; i++) { 758 for (i = 0; i < EM28XX_NUM_BUFS; i++) {
743 struct urb *urb; 759 struct urb *urb;
744 int j, k; 760 int j;
745 /* allocate transfer buffer */ 761 /* allocate transfer buffer */
746 urb = usb_alloc_urb(EM28XX_NUM_PACKETS, GFP_KERNEL); 762 urb = usb_alloc_urb(EM28XX_NUM_PACKETS, GFP_KERNEL);
747 if (!urb){ 763 if (!urb){
@@ -749,7 +765,9 @@ int em28xx_init_isoc(struct em28xx *dev)
749 em28xx_uninit_isoc(dev); 765 em28xx_uninit_isoc(dev);
750 return -ENOMEM; 766 return -ENOMEM;
751 } 767 }
752 dev->transfer_buffer[i] = usb_buffer_alloc(dev->udev, sb_size, GFP_KERNEL,&urb->transfer_dma); 768 dev->transfer_buffer[i] = usb_buffer_alloc(dev->udev, sb_size,
769 GFP_KERNEL,
770 &urb->transfer_dma);
753 if (!dev->transfer_buffer[i]) { 771 if (!dev->transfer_buffer[i]) {
754 em28xx_errdev 772 em28xx_errdev
755 ("unable to allocate %i bytes for transfer buffer %i\n", 773 ("unable to allocate %i bytes for transfer buffer %i\n",
@@ -762,22 +780,22 @@ int em28xx_init_isoc(struct em28xx *dev)
762 urb->dev = dev->udev; 780 urb->dev = dev->udev;
763 urb->context = dev; 781 urb->context = dev;
764 urb->pipe = usb_rcvisocpipe(dev->udev, 0x82); 782 urb->pipe = usb_rcvisocpipe(dev->udev, 0x82);
765 urb->transfer_flags = URB_ISO_ASAP; 783 urb->transfer_flags = URB_ISO_ASAP | URB_NO_TRANSFER_DMA_MAP;
766 urb->interval = 1; 784 urb->interval = 1;
767 urb->transfer_buffer = dev->transfer_buffer[i]; 785 urb->transfer_buffer = dev->transfer_buffer[i];
768 urb->complete = em28xx_isocIrq; 786 urb->complete = em28xx_isocIrq;
769 urb->number_of_packets = EM28XX_NUM_PACKETS; 787 urb->number_of_packets = EM28XX_NUM_PACKETS;
770 urb->transfer_buffer_length = sb_size; 788 urb->transfer_buffer_length = sb_size;
771 for (j = k = 0; j < EM28XX_NUM_PACKETS; 789 for (j = 0; j < EM28XX_NUM_PACKETS; j++) {
772 j++, k += dev->max_pkt_size) { 790 urb->iso_frame_desc[j].offset = j * dev->max_pkt_size;
773 urb->iso_frame_desc[j].offset = k; 791 urb->iso_frame_desc[j].length = dev->max_pkt_size;
774 urb->iso_frame_desc[j].length =
775 dev->max_pkt_size;
776 } 792 }
777 dev->urb[i] = urb; 793 dev->urb[i] = urb;
778 } 794 }
779 795
780 /* submit urbs */ 796 /* submit urbs */
797 em28xx_coredbg("Submitting %d urbs of %d packets (%d each)\n",
798 EM28XX_NUM_BUFS, EM28XX_NUM_PACKETS, dev->max_pkt_size);
781 for (i = 0; i < EM28XX_NUM_BUFS; i++) { 799 for (i = 0; i < EM28XX_NUM_BUFS; i++) {
782 errCode = usb_submit_urb(dev->urb[i], GFP_KERNEL); 800 errCode = usb_submit_urb(dev->urb[i], GFP_KERNEL);
783 if (errCode) { 801 if (errCode) {
@@ -794,22 +812,31 @@ int em28xx_init_isoc(struct em28xx *dev)
794int em28xx_set_alternate(struct em28xx *dev) 812int em28xx_set_alternate(struct em28xx *dev)
795{ 813{
796 int errCode, prev_alt = dev->alt; 814 int errCode, prev_alt = dev->alt;
797 dev->alt = alt; 815 int i;
798 if (dev->alt == 0) { 816 unsigned int min_pkt_size = dev->bytesperline+4;
799 int i; 817
800 for(i=0;i< dev->num_alt; i++) 818 /* When image size is bigger than a ceirtain value,
801 if(dev->alt_max_pkt_size[i]>dev->alt_max_pkt_size[dev->alt]) 819 the frame size should be increased, otherwise, only
802 dev->alt=i; 820 green screen will be received.
803 } 821 */
822 if (dev->frame_size > 720*240*2)
823 min_pkt_size *= 2;
824
825 for (i = 0; i < dev->num_alt; i++)
826 if (dev->alt_max_pkt_size[i] >= min_pkt_size)
827 break;
828 dev->alt = i;
804 829
805 if (dev->alt != prev_alt) { 830 if (dev->alt != prev_alt) {
831 em28xx_coredbg("minimum isoc packet size: %u (alt=%d)\n",
832 min_pkt_size, dev->alt);
806 dev->max_pkt_size = dev->alt_max_pkt_size[dev->alt]; 833 dev->max_pkt_size = dev->alt_max_pkt_size[dev->alt];
807 em28xx_coredbg("setting alternate %d with wMaxPacketSize=%u\n", dev->alt, 834 em28xx_coredbg("setting alternate %d with wMaxPacketSize=%u\n",
808 dev->max_pkt_size); 835 dev->alt, dev->max_pkt_size);
809 errCode = usb_set_interface(dev->udev, 0, dev->alt); 836 errCode = usb_set_interface(dev->udev, 0, dev->alt);
810 if (errCode < 0) { 837 if (errCode < 0) {
811 em28xx_errdev ("cannot change alternate number to %d (error=%i)\n", 838 em28xx_errdev ("cannot change alternate number to %d (error=%i)\n",
812 dev->alt, errCode); 839 dev->alt, errCode);
813 return errCode; 840 return errCode;
814 } 841 }
815 } 842 }
diff --git a/drivers/media/video/em28xx/em28xx-video.c b/drivers/media/video/em28xx/em28xx-video.c
index a0c334672488..4abe6701a770 100644
--- a/drivers/media/video/em28xx/em28xx-video.c
+++ b/drivers/media/video/em28xx/em28xx-video.c
@@ -189,7 +189,7 @@ static void video_mux(struct em28xx *dev, int index)
189 em28xx_i2c_call_clients(dev, VIDIOC_INT_S_AUDIO_ROUTING, &route); 189 em28xx_i2c_call_clients(dev, VIDIOC_INT_S_AUDIO_ROUTING, &route);
190 } 190 }
191 191
192 em28xx_set_audio_source(dev); 192 em28xx_audio_analog_set(dev);
193} 193}
194 194
195/* Usage lock check functions */ 195/* Usage lock check functions */
@@ -830,6 +830,63 @@ static int vidioc_s_frequency(struct file *file, void *priv,
830 return 0; 830 return 0;
831} 831}
832 832
833#ifdef CONFIG_VIDEO_ADV_DEBUG
834static int em28xx_reg_len(int reg)
835{
836 switch (reg) {
837 case AC97LSB_REG:
838 case HSCALELOW_REG:
839 case VSCALELOW_REG:
840 return 2;
841 default:
842 return 1;
843 }
844}
845
846static int vidioc_g_register(struct file *file, void *priv,
847 struct v4l2_register *reg)
848{
849 struct em28xx_fh *fh = priv;
850 struct em28xx *dev = fh->dev;
851 int ret;
852
853 if (!v4l2_chip_match_host(reg->match_type, reg->match_chip))
854 return -EINVAL;
855
856 if (em28xx_reg_len(reg->reg) == 1) {
857 ret = em28xx_read_reg(dev, reg->reg);
858 if (ret < 0)
859 return ret;
860
861 reg->val = ret;
862 } else {
863 u64 val = 0;
864 ret = em28xx_read_reg_req_len(dev, USB_REQ_GET_STATUS,
865 reg->reg, (char *)&val, 2);
866 if (ret < 0)
867 return ret;
868
869 reg->val = cpu_to_le64((__u64)val);
870 }
871
872 return 0;
873}
874
875static int vidioc_s_register(struct file *file, void *priv,
876 struct v4l2_register *reg)
877{
878 struct em28xx_fh *fh = priv;
879 struct em28xx *dev = fh->dev;
880 u64 buf;
881
882 buf = le64_to_cpu((__u64)reg->val);
883
884 return em28xx_write_regs(dev, reg->reg, (char *)&buf,
885 em28xx_reg_len(reg->reg));
886}
887#endif
888
889
833static int vidioc_cropcap(struct file *file, void *priv, 890static int vidioc_cropcap(struct file *file, void *priv,
834 struct v4l2_cropcap *cc) 891 struct v4l2_cropcap *cc)
835{ 892{
@@ -1295,8 +1352,6 @@ static int em28xx_v4l2_open(struct inode *inode, struct file *filp)
1295 filp->private_data = fh; 1352 filp->private_data = fh;
1296 1353
1297 if (dev->type == V4L2_BUF_TYPE_VIDEO_CAPTURE && dev->users == 0) { 1354 if (dev->type == V4L2_BUF_TYPE_VIDEO_CAPTURE && dev->users == 0) {
1298 em28xx_set_alternate(dev);
1299
1300 dev->width = norm_maxw(dev); 1355 dev->width = norm_maxw(dev);
1301 dev->height = norm_maxh(dev); 1356 dev->height = norm_maxh(dev);
1302 dev->frame_size = dev->width * dev->height * 2; 1357 dev->frame_size = dev->width * dev->height * 2;
@@ -1305,6 +1360,7 @@ static int em28xx_v4l2_open(struct inode *inode, struct file *filp)
1305 dev->hscale = 0; 1360 dev->hscale = 0;
1306 dev->vscale = 0; 1361 dev->vscale = 0;
1307 1362
1363 em28xx_set_alternate(dev);
1308 em28xx_capture_start(dev, 1); 1364 em28xx_capture_start(dev, 1);
1309 em28xx_resolution_set(dev); 1365 em28xx_resolution_set(dev);
1310 1366
@@ -1730,6 +1786,10 @@ static const struct video_device em28xx_video_template = {
1730 .vidioc_s_tuner = vidioc_s_tuner, 1786 .vidioc_s_tuner = vidioc_s_tuner,
1731 .vidioc_g_frequency = vidioc_g_frequency, 1787 .vidioc_g_frequency = vidioc_g_frequency,
1732 .vidioc_s_frequency = vidioc_s_frequency, 1788 .vidioc_s_frequency = vidioc_s_frequency,
1789#ifdef CONFIG_VIDEO_ADV_DEBUG
1790 .vidioc_g_register = vidioc_g_register,
1791 .vidioc_s_register = vidioc_s_register,
1792#endif
1733 1793
1734 .tvnorms = V4L2_STD_ALL, 1794 .tvnorms = V4L2_STD_ALL,
1735 .current_norm = V4L2_STD_PAL, 1795 .current_norm = V4L2_STD_PAL,
@@ -1752,6 +1812,10 @@ static struct video_device em28xx_radio_template = {
1752 .vidioc_s_ctrl = vidioc_s_ctrl, 1812 .vidioc_s_ctrl = vidioc_s_ctrl,
1753 .vidioc_g_frequency = vidioc_g_frequency, 1813 .vidioc_g_frequency = vidioc_g_frequency,
1754 .vidioc_s_frequency = vidioc_s_frequency, 1814 .vidioc_s_frequency = vidioc_s_frequency,
1815#ifdef CONFIG_VIDEO_ADV_DEBUG
1816 .vidioc_g_register = vidioc_g_register,
1817 .vidioc_s_register = vidioc_s_register,
1818#endif
1755}; 1819};
1756 1820
1757/******************************** usb interface *****************************************/ 1821/******************************** usb interface *****************************************/
@@ -1796,10 +1860,10 @@ void em28xx_unregister_extension(struct em28xx_ops *ops)
1796} 1860}
1797EXPORT_SYMBOL(em28xx_unregister_extension); 1861EXPORT_SYMBOL(em28xx_unregister_extension);
1798 1862
1799struct video_device *em28xx_vdev_init(struct em28xx *dev, 1863static struct video_device *em28xx_vdev_init(struct em28xx *dev,
1800 const struct video_device *template, 1864 const struct video_device *template,
1801 const int type, 1865 const int type,
1802 const char *type_name) 1866 const char *type_name)
1803{ 1867{
1804 struct video_device *vfd; 1868 struct video_device *vfd;
1805 1869
@@ -2064,6 +2128,7 @@ static int em28xx_usb_probe(struct usb_interface *interface,
2064 snprintf(dev->name, 29, "em28xx #%d", nr); 2128 snprintf(dev->name, 29, "em28xx #%d", nr);
2065 dev->devno = nr; 2129 dev->devno = nr;
2066 dev->model = id->driver_info; 2130 dev->model = id->driver_info;
2131 dev->alt = -1;
2067 2132
2068 /* Checks if audio is provided by some interface */ 2133 /* Checks if audio is provided by some interface */
2069 for (i = 0; i < udev->config->desc.bNumInterfaces; i++) { 2134 for (i = 0; i < udev->config->desc.bNumInterfaces; i++) {
diff --git a/drivers/media/video/em28xx/em28xx.h b/drivers/media/video/em28xx/em28xx.h
index f3bad0c1c517..04e0e48ecabe 100644
--- a/drivers/media/video/em28xx/em28xx.h
+++ b/drivers/media/video/em28xx/em28xx.h
@@ -33,7 +33,7 @@
33#define UNSET -1 33#define UNSET -1
34 34
35/* maximum number of em28xx boards */ 35/* maximum number of em28xx boards */
36#define EM28XX_MAXBOARDS 1 /*FIXME: should be bigger */ 36#define EM28XX_MAXBOARDS 4 /*FIXME: should be bigger */
37 37
38/* maximum number of frames that can be queued */ 38/* maximum number of frames that can be queued */
39#define EM28XX_NUM_FRAMES 5 39#define EM28XX_NUM_FRAMES 5
@@ -345,9 +345,6 @@ int em28xx_read_reg(struct em28xx *dev, u16 reg);
345int em28xx_write_regs_req(struct em28xx *dev, u8 req, u16 reg, char *buf, 345int em28xx_write_regs_req(struct em28xx *dev, u8 req, u16 reg, char *buf,
346 int len); 346 int len);
347int em28xx_write_regs(struct em28xx *dev, u16 reg, char *buf, int len); 347int em28xx_write_regs(struct em28xx *dev, u16 reg, char *buf, int len);
348int em28xx_write_reg_bits(struct em28xx *dev, u16 reg, u8 val,
349 u8 bitmask);
350int em28xx_set_audio_source(struct em28xx *dev);
351int em28xx_audio_analog_set(struct em28xx *dev); 348int em28xx_audio_analog_set(struct em28xx *dev);
352 349
353int em28xx_colorlevels_set_default(struct em28xx *dev); 350int em28xx_colorlevels_set_default(struct em28xx *dev);
diff --git a/drivers/media/video/saa7134/saa7134-cards.c b/drivers/media/video/saa7134/saa7134-cards.c
index 7d7f383b404f..262830da08c8 100644
--- a/drivers/media/video/saa7134/saa7134-cards.c
+++ b/drivers/media/video/saa7134/saa7134-cards.c
@@ -928,27 +928,38 @@ struct saa7134_board saa7134_boards[] = {
928 .tuner_addr = ADDR_UNSET, 928 .tuner_addr = ADDR_UNSET,
929 .radio_addr = ADDR_UNSET, 929 .radio_addr = ADDR_UNSET,
930 .tda9887_conf = TDA9887_PRESENT, 930 .tda9887_conf = TDA9887_PRESENT,
931 .gpiomask = 0x03,
931 .inputs = {{ 932 .inputs = {{
932 .name = name_tv, 933 .name = name_tv,
933 .vmux = 1, 934 .vmux = 1,
934 .amux = TV, 935 .amux = TV,
935 .tv = 1, 936 .tv = 1,
936 },{ 937 .gpio = 0x00,
938 }, {
937 .name = name_comp1, 939 .name = name_comp1,
938 .vmux = 0,
939 .amux = LINE2,
940 },{
941 .name = name_comp2,
942 .vmux = 3, 940 .vmux = 3,
943 .amux = LINE2, 941 .amux = LINE1,
944 },{ 942 .gpio = 0x02,
943 }, {
944 .name = name_comp2,
945 .vmux = 0,
946 .amux = LINE1,
947 .gpio = 0x02,
948 }, {
945 .name = name_svideo, 949 .name = name_svideo,
946 .vmux = 8, 950 .vmux = 8,
947 .amux = LINE2, 951 .amux = LINE1,
948 }}, 952 .gpio = 0x02,
953 } },
949 .radio = { 954 .radio = {
950 .name = name_radio, 955 .name = name_radio,
951 .amux = LINE2, 956 .amux = LINE1,
957 .gpio = 0x01,
958 },
959 .mute = {
960 .name = name_mute,
961 .amux = TV,
962 .gpio = 0x00,
952 }, 963 },
953 }, 964 },
954 [SAA7134_BOARD_BMK_MPEX_TUNER] = { 965 [SAA7134_BOARD_BMK_MPEX_TUNER] = {
@@ -3912,6 +3923,74 @@ struct saa7134_board saa7134_boards[] = {
3912 }, 3923 },
3913 .mpeg = SAA7134_MPEG_EMPRESS, 3924 .mpeg = SAA7134_MPEG_EMPRESS,
3914 }, 3925 },
3926 [SAA7134_BOARD_TWINHAN_DTV_DVB_3056] = {
3927 .name = "Twinhan Hybrid DTV-DVB 3056 PCI",
3928 .audio_clock = 0x00187de7,
3929 .tuner_type = TUNER_PHILIPS_TDA8290,
3930 .radio_type = UNSET,
3931 .tuner_addr = ADDR_UNSET,
3932 .radio_addr = ADDR_UNSET,
3933 .tuner_config = 2,
3934 .mpeg = SAA7134_MPEG_DVB,
3935 .gpiomask = 0x0200000,
3936 .inputs = {{
3937 .name = name_tv,
3938 .vmux = 1,
3939 .amux = TV,
3940 .tv = 1,
3941 }, {
3942 .name = name_comp1,
3943 .vmux = 3,
3944 .amux = LINE1,
3945 }, {
3946 .name = name_svideo,
3947 .vmux = 8, /* untested */
3948 .amux = LINE1,
3949 } },
3950 .radio = {
3951 .name = name_radio,
3952 .amux = TV,
3953 .gpio = 0x0200000,
3954 },
3955 },
3956 [SAA7134_BOARD_GENIUS_TVGO_A11MCE] = {
3957 /* Adrian Pardini <pardo.bsso@gmail.com> */
3958 .name = "Genius TVGO AM11MCE",
3959 .audio_clock = 0x00200000,
3960 .tuner_type = TUNER_TNF_5335MF,
3961 .radio_type = UNSET,
3962 .tuner_addr = ADDR_UNSET,
3963 .radio_addr = ADDR_UNSET,
3964 .gpiomask = 0xf000,
3965 .inputs = {{
3966 .name = name_tv_mono,
3967 .vmux = 1,
3968 .amux = LINE2,
3969 .gpio = 0x0000,
3970 .tv = 1,
3971 }, {
3972 .name = name_comp1,
3973 .vmux = 3,
3974 .amux = LINE1,
3975 .gpio = 0x2000,
3976 .tv = 1
3977 }, {
3978 .name = name_svideo,
3979 .vmux = 8,
3980 .amux = LINE1,
3981 .gpio = 0x2000,
3982 } },
3983 .radio = {
3984 .name = name_radio,
3985 .amux = LINE2,
3986 .gpio = 0x1000,
3987 },
3988 .mute = {
3989 .name = name_mute,
3990 .amux = LINE2,
3991 .gpio = 0x6000,
3992 },
3993 },
3915}; 3994};
3916 3995
3917const unsigned int saa7134_bcount = ARRAY_SIZE(saa7134_boards); 3996const unsigned int saa7134_bcount = ARRAY_SIZE(saa7134_boards);
@@ -4511,6 +4590,12 @@ struct pci_device_id saa7134_pci_tbl[] = {
4511 },{ 4590 },{
4512 .vendor = PCI_VENDOR_ID_PHILIPS, 4591 .vendor = PCI_VENDOR_ID_PHILIPS,
4513 .device = PCI_DEVICE_ID_PHILIPS_SAA7133, 4592 .device = PCI_DEVICE_ID_PHILIPS_SAA7133,
4593 .subvendor = 0x5168,
4594 .subdevice = 0x3307, /* FlyDVB-T Hybrid Mini PCI */
4595 .driver_data = SAA7134_BOARD_FLYDVBT_HYBRID_CARDBUS,
4596 }, {
4597 .vendor = PCI_VENDOR_ID_PHILIPS,
4598 .device = PCI_DEVICE_ID_PHILIPS_SAA7133,
4514 .subvendor = 0x16be, 4599 .subvendor = 0x16be,
4515 .subdevice = 0x0007, 4600 .subdevice = 0x0007,
4516 .driver_data = SAA7134_BOARD_MEDION_MD8800_QUADRO, 4601 .driver_data = SAA7134_BOARD_MEDION_MD8800_QUADRO,
@@ -4523,6 +4608,12 @@ struct pci_device_id saa7134_pci_tbl[] = {
4523 },{ 4608 },{
4524 .vendor = PCI_VENDOR_ID_PHILIPS, 4609 .vendor = PCI_VENDOR_ID_PHILIPS,
4525 .device = PCI_DEVICE_ID_PHILIPS_SAA7133, 4610 .device = PCI_DEVICE_ID_PHILIPS_SAA7133,
4611 .subvendor = 0x16be,
4612 .subdevice = 0x000d, /* triple CTX948_V1.1.1 */
4613 .driver_data = SAA7134_BOARD_MEDION_MD8800_QUADRO,
4614 }, {
4615 .vendor = PCI_VENDOR_ID_PHILIPS,
4616 .device = PCI_DEVICE_ID_PHILIPS_SAA7133,
4526 .subvendor = 0x1461, 4617 .subvendor = 0x1461,
4527 .subdevice = 0x2c05, 4618 .subdevice = 0x2c05,
4528 .driver_data = SAA7134_BOARD_AVERMEDIA_777, 4619 .driver_data = SAA7134_BOARD_AVERMEDIA_777,
@@ -4843,7 +4934,13 @@ struct pci_device_id saa7134_pci_tbl[] = {
4843 .device = PCI_DEVICE_ID_PHILIPS_SAA7133, 4934 .device = PCI_DEVICE_ID_PHILIPS_SAA7133,
4844 .subvendor = 0x4e42, 4935 .subvendor = 0x4e42,
4845 .subdevice = 0x3502, 4936 .subdevice = 0x3502,
4846 .driver_data = SAA7134_BOARD_FLYDVBT_HYBRID_CARDBUS 4937 .driver_data = SAA7134_BOARD_FLYDVBT_HYBRID_CARDBUS,
4938 }, {
4939 .vendor = PCI_VENDOR_ID_PHILIPS,
4940 .device = PCI_DEVICE_ID_PHILIPS_SAA7133,
4941 .subvendor = 0x1822, /*Twinhan Technology Co. Ltd*/
4942 .subdevice = 0x0022,
4943 .driver_data = SAA7134_BOARD_TWINHAN_DTV_DVB_3056,
4847 },{ 4944 },{
4848 /* --- boards without eeprom + subsystem ID --- */ 4945 /* --- boards without eeprom + subsystem ID --- */
4849 .vendor = PCI_VENDOR_ID_PHILIPS, 4946 .vendor = PCI_VENDOR_ID_PHILIPS,
@@ -4995,6 +5092,7 @@ int saa7134_board_init1(struct saa7134_dev *dev)
4995 case SAA7134_BOARD_BEHOLD_409: 5092 case SAA7134_BOARD_BEHOLD_409:
4996 case SAA7134_BOARD_BEHOLD_505FM: 5093 case SAA7134_BOARD_BEHOLD_505FM:
4997 case SAA7134_BOARD_BEHOLD_507_9FM: 5094 case SAA7134_BOARD_BEHOLD_507_9FM:
5095 case SAA7134_BOARD_GENIUS_TVGO_A11MCE:
4998 dev->has_remote = SAA7134_REMOTE_GPIO; 5096 dev->has_remote = SAA7134_REMOTE_GPIO;
4999 break; 5097 break;
5000 case SAA7134_BOARD_FLYDVBS_LR300: 5098 case SAA7134_BOARD_FLYDVBS_LR300:
@@ -5232,7 +5330,8 @@ int saa7134_board_init2(struct saa7134_dev *dev)
5232 case SAA7134_BOARD_ASUSTeK_P7131_DUAL: 5330 case SAA7134_BOARD_ASUSTeK_P7131_DUAL:
5233 case SAA7134_BOARD_ASUSTeK_P7131_HYBRID_LNA: 5331 case SAA7134_BOARD_ASUSTeK_P7131_HYBRID_LNA:
5234 case SAA7134_BOARD_MEDION_MD8800_QUADRO: 5332 case SAA7134_BOARD_MEDION_MD8800_QUADRO:
5235 case SAA7134_BOARD_AVERMEDIA_SUPER_007: 5333 case SAA7134_BOARD_AVERMEDIA_SUPER_007:
5334 case SAA7134_BOARD_TWINHAN_DTV_DVB_3056:
5236 /* this is a hybrid board, initialize to analog mode 5335 /* this is a hybrid board, initialize to analog mode
5237 * and configure firmware eeprom address 5336 * and configure firmware eeprom address
5238 */ 5337 */
diff --git a/drivers/media/video/saa7134/saa7134-dvb.c b/drivers/media/video/saa7134/saa7134-dvb.c
index a9ca5730826f..ea2be9eceeb8 100644
--- a/drivers/media/video/saa7134/saa7134-dvb.c
+++ b/drivers/media/video/saa7134/saa7134-dvb.c
@@ -779,6 +779,21 @@ static struct tda1004x_config avermedia_super_007_config = {
779 .request_firmware = philips_tda1004x_request_firmware 779 .request_firmware = philips_tda1004x_request_firmware
780}; 780};
781 781
782static struct tda1004x_config twinhan_dtv_dvb_3056_config = {
783 .demod_address = 0x08,
784 .invert = 1,
785 .invert_oclk = 0,
786 .xtal_freq = TDA10046_XTAL_16M,
787 .agc_config = TDA10046_AGC_TDA827X,
788 .gpio_config = TDA10046_GP01_I,
789 .if_freq = TDA10046_FREQ_045,
790 .i2c_gate = 0x42,
791 .tuner_address = 0x61,
792 .tuner_config = 2,
793 .antenna_switch = 1,
794 .request_firmware = philips_tda1004x_request_firmware
795};
796
782/* ------------------------------------------------------------------ 797/* ------------------------------------------------------------------
783 * special case: this card uses saa713x GPIO22 for the mode switch 798 * special case: this card uses saa713x GPIO22 for the mode switch
784 */ 799 */
@@ -826,6 +841,7 @@ static struct tda1004x_config ads_tech_duo_config = {
826static struct tda10086_config flydvbs = { 841static struct tda10086_config flydvbs = {
827 .demod_address = 0x0e, 842 .demod_address = 0x0e,
828 .invert = 0, 843 .invert = 0,
844 .diseqc_tone = 0,
829}; 845};
830 846
831/* ================================================================== 847/* ==================================================================
@@ -940,9 +956,9 @@ static int dvb_init(struct saa7134_dev *dev)
940 configure_tda827x_fe(dev, &tda827x_lifeview_config); 956 configure_tda827x_fe(dev, &tda827x_lifeview_config);
941 break; 957 break;
942 case SAA7134_BOARD_FLYDVB_TRIO: 958 case SAA7134_BOARD_FLYDVB_TRIO:
943 if(! use_frontend) { //terrestrial 959 if(! use_frontend) { /* terrestrial */
944 configure_tda827x_fe(dev, &lifeview_trio_config); 960 configure_tda827x_fe(dev, &lifeview_trio_config);
945 } else { //satellite 961 } else { /* satellite */
946 dev->dvb.frontend = dvb_attach(tda10086_attach, &flydvbs, &dev->i2c_adap); 962 dev->dvb.frontend = dvb_attach(tda10086_attach, &flydvbs, &dev->i2c_adap);
947 if (dev->dvb.frontend) { 963 if (dev->dvb.frontend) {
948 if (dvb_attach(tda826x_attach, dev->dvb.frontend, 0x63, 964 if (dvb_attach(tda826x_attach, dev->dvb.frontend, 0x63,
@@ -1007,8 +1023,9 @@ static int dvb_init(struct saa7134_dev *dev)
1007 } 1023 }
1008 break; 1024 break;
1009 case SAA7134_BOARD_ASUS_EUROPA2_HYBRID: 1025 case SAA7134_BOARD_ASUS_EUROPA2_HYBRID:
1010 dev->dvb.frontend = tda10046_attach(&medion_cardbus, 1026 dev->dvb.frontend = dvb_attach(tda10046_attach,
1011 &dev->i2c_adap); 1027 &medion_cardbus,
1028 &dev->i2c_adap);
1012 if (dev->dvb.frontend) { 1029 if (dev->dvb.frontend) {
1013 dev->original_demod_sleep = dev->dvb.frontend->ops.sleep; 1030 dev->original_demod_sleep = dev->dvb.frontend->ops.sleep;
1014 dev->dvb.frontend->ops.sleep = philips_europa_demod_sleep; 1031 dev->dvb.frontend->ops.sleep = philips_europa_demod_sleep;
@@ -1044,6 +1061,9 @@ static int dvb_init(struct saa7134_dev *dev)
1044 case SAA7134_BOARD_AVERMEDIA_SUPER_007: 1061 case SAA7134_BOARD_AVERMEDIA_SUPER_007:
1045 configure_tda827x_fe(dev, &avermedia_super_007_config); 1062 configure_tda827x_fe(dev, &avermedia_super_007_config);
1046 break; 1063 break;
1064 case SAA7134_BOARD_TWINHAN_DTV_DVB_3056:
1065 configure_tda827x_fe(dev, &twinhan_dtv_dvb_3056_config);
1066 break;
1047 default: 1067 default:
1048 wprintk("Huh? unknown DVB card?\n"); 1068 wprintk("Huh? unknown DVB card?\n");
1049 break; 1069 break;
diff --git a/drivers/media/video/saa7134/saa7134-empress.c b/drivers/media/video/saa7134/saa7134-empress.c
index b1b01fa86720..3d2ec30de227 100644
--- a/drivers/media/video/saa7134/saa7134-empress.c
+++ b/drivers/media/video/saa7134/saa7134-empress.c
@@ -87,7 +87,7 @@ static int ts_open(struct inode *inode, struct file *file)
87 87
88 dprintk("open minor=%d\n",minor); 88 dprintk("open minor=%d\n",minor);
89 err = -EBUSY; 89 err = -EBUSY;
90 if (!mutex_trylock(&dev->empress_tsq.lock)) 90 if (!mutex_trylock(&dev->empress_tsq.vb_lock))
91 goto done; 91 goto done;
92 if (dev->empress_users) 92 if (dev->empress_users)
93 goto done_up; 93 goto done_up;
@@ -101,7 +101,7 @@ static int ts_open(struct inode *inode, struct file *file)
101 err = 0; 101 err = 0;
102 102
103done_up: 103done_up:
104 mutex_unlock(&dev->empress_tsq.lock); 104 mutex_unlock(&dev->empress_tsq.vb_lock);
105done: 105done:
106 return err; 106 return err;
107} 107}
@@ -110,7 +110,6 @@ static int ts_release(struct inode *inode, struct file *file)
110{ 110{
111 struct saa7134_dev *dev = file->private_data; 111 struct saa7134_dev *dev = file->private_data;
112 112
113 mutex_lock(&dev->empress_tsq.lock);
114 videobuf_stop(&dev->empress_tsq); 113 videobuf_stop(&dev->empress_tsq);
115 videobuf_mmap_free(&dev->empress_tsq); 114 videobuf_mmap_free(&dev->empress_tsq);
116 dev->empress_users--; 115 dev->empress_users--;
@@ -122,7 +121,6 @@ static int ts_release(struct inode *inode, struct file *file)
122 saa_writeb(SAA7134_AUDIO_MUTE_CTRL, 121 saa_writeb(SAA7134_AUDIO_MUTE_CTRL,
123 saa_readb(SAA7134_AUDIO_MUTE_CTRL) | (1 << 6)); 122 saa_readb(SAA7134_AUDIO_MUTE_CTRL) | (1 << 6));
124 123
125 mutex_unlock(&dev->empress_tsq.lock);
126 return 0; 124 return 0;
127} 125}
128 126
diff --git a/drivers/media/video/saa7134/saa7134-input.c b/drivers/media/video/saa7134/saa7134-input.c
index 0db955c2d9b9..b4188819782f 100644
--- a/drivers/media/video/saa7134/saa7134-input.c
+++ b/drivers/media/video/saa7134/saa7134-input.c
@@ -406,6 +406,12 @@ int saa7134_input_init1(struct saa7134_dev *dev)
406 mask_keyup = 0x8000000; 406 mask_keyup = 0x8000000;
407 polling = 50; //ms 407 polling = 50; //ms
408 break; 408 break;
409 case SAA7134_BOARD_GENIUS_TVGO_A11MCE:
410 ir_codes = ir_codes_genius_tvgo_a11mce;
411 mask_keycode = 0xff;
412 mask_keydown = 0xf00000;
413 polling = 50; /* ms */
414 break;
409 } 415 }
410 if (NULL == ir_codes) { 416 if (NULL == ir_codes) {
411 printk("%s: Oops: IR config error [card=%d]\n", 417 printk("%s: Oops: IR config error [card=%d]\n",
diff --git a/drivers/media/video/saa7134/saa7134-video.c b/drivers/media/video/saa7134/saa7134-video.c
index 1184d359e848..39c41ad97d0e 100644
--- a/drivers/media/video/saa7134/saa7134-video.c
+++ b/drivers/media/video/saa7134/saa7134-video.c
@@ -1414,21 +1414,17 @@ video_poll(struct file *file, struct poll_table_struct *wait)
1414 if (!list_empty(&fh->cap.stream)) 1414 if (!list_empty(&fh->cap.stream))
1415 buf = list_entry(fh->cap.stream.next, struct videobuf_buffer, stream); 1415 buf = list_entry(fh->cap.stream.next, struct videobuf_buffer, stream);
1416 } else { 1416 } else {
1417 mutex_lock(&fh->cap.lock); 1417 mutex_lock(&fh->cap.vb_lock);
1418 if (UNSET == fh->cap.read_off) { 1418 if (UNSET == fh->cap.read_off) {
1419 /* need to capture a new frame */ 1419 /* need to capture a new frame */
1420 if (res_locked(fh->dev,RESOURCE_VIDEO)) { 1420 if (res_locked(fh->dev,RESOURCE_VIDEO))
1421 mutex_unlock(&fh->cap.lock); 1421 goto err;
1422 return POLLERR; 1422 if (0 != fh->cap.ops->buf_prepare(&fh->cap,fh->cap.read_buf,fh->cap.field))
1423 } 1423 goto err;
1424 if (0 != fh->cap.ops->buf_prepare(&fh->cap,fh->cap.read_buf,fh->cap.field)) {
1425 mutex_unlock(&fh->cap.lock);
1426 return POLLERR;
1427 }
1428 fh->cap.ops->buf_queue(&fh->cap,fh->cap.read_buf); 1424 fh->cap.ops->buf_queue(&fh->cap,fh->cap.read_buf);
1429 fh->cap.read_off = 0; 1425 fh->cap.read_off = 0;
1430 } 1426 }
1431 mutex_unlock(&fh->cap.lock); 1427 mutex_unlock(&fh->cap.vb_lock);
1432 buf = fh->cap.read_buf; 1428 buf = fh->cap.read_buf;
1433 } 1429 }
1434 1430
@@ -1440,6 +1436,10 @@ video_poll(struct file *file, struct poll_table_struct *wait)
1440 buf->state == VIDEOBUF_ERROR) 1436 buf->state == VIDEOBUF_ERROR)
1441 return POLLIN|POLLRDNORM; 1437 return POLLIN|POLLRDNORM;
1442 return 0; 1438 return 0;
1439
1440err:
1441 mutex_unlock(&fh->cap.vb_lock);
1442 return POLLERR;
1443} 1443}
1444 1444
1445static int video_release(struct inode *inode, struct file *file) 1445static int video_release(struct inode *inode, struct file *file)
diff --git a/drivers/media/video/saa7134/saa7134.h b/drivers/media/video/saa7134/saa7134.h
index b88ca995fafb..f940d0254798 100644
--- a/drivers/media/video/saa7134/saa7134.h
+++ b/drivers/media/video/saa7134/saa7134.h
@@ -252,6 +252,8 @@ struct saa7134_format {
252#define SAA7134_BOARD_BEHOLD_COLUMBUS_TVFM 128 252#define SAA7134_BOARD_BEHOLD_COLUMBUS_TVFM 128
253#define SAA7134_BOARD_BEHOLD_607_9FM 129 253#define SAA7134_BOARD_BEHOLD_607_9FM 129
254#define SAA7134_BOARD_BEHOLD_M6 130 254#define SAA7134_BOARD_BEHOLD_M6 130
255#define SAA7134_BOARD_TWINHAN_DTV_DVB_3056 131
256#define SAA7134_BOARD_GENIUS_TVGO_A11MCE 132
255 257
256#define SAA7134_MAXBOARDS 8 258#define SAA7134_MAXBOARDS 8
257#define SAA7134_INPUT_MAX 8 259#define SAA7134_INPUT_MAX 8
diff --git a/drivers/media/video/stk-sensor.c b/drivers/media/video/stk-sensor.c
index 4a9a0b62efa3..e546b014d7ad 100644
--- a/drivers/media/video/stk-sensor.c
+++ b/drivers/media/video/stk-sensor.c
@@ -225,7 +225,7 @@
225 225
226 226
227/* Returns 0 if OK */ 227/* Returns 0 if OK */
228int stk_sensor_outb(struct stk_camera *dev, u8 reg, u8 val) 228static int stk_sensor_outb(struct stk_camera *dev, u8 reg, u8 val)
229{ 229{
230 int i = 0; 230 int i = 0;
231 int tmpval = 0; 231 int tmpval = 0;
@@ -250,7 +250,7 @@ int stk_sensor_outb(struct stk_camera *dev, u8 reg, u8 val)
250 return 0; 250 return 0;
251} 251}
252 252
253int stk_sensor_inb(struct stk_camera *dev, u8 reg, u8 *val) 253static int stk_sensor_inb(struct stk_camera *dev, u8 reg, u8 *val)
254{ 254{
255 int i = 0; 255 int i = 0;
256 int tmpval = 0; 256 int tmpval = 0;
@@ -380,7 +380,7 @@ int stk_sensor_init(struct stk_camera *dev)
380 STK_ERROR("Strange error reading sensor ID\n"); 380 STK_ERROR("Strange error reading sensor ID\n");
381 return -ENODEV; 381 return -ENODEV;
382 } 382 }
383 if (idh != 0x7F || idl != 0xA2) { 383 if (idh != 0x7f || idl != 0xa2) {
384 STK_ERROR("Huh? you don't have a sensor from ovt\n"); 384 STK_ERROR("Huh? you don't have a sensor from ovt\n");
385 return -ENODEV; 385 return -ENODEV;
386 } 386 }
@@ -409,6 +409,19 @@ static struct regval ov_fmt_uyvy[] = {
409 {REG_COM15, COM15_R00FF }, 409 {REG_COM15, COM15_R00FF },
410 {0xff, 0xff}, /* END MARKER */ 410 {0xff, 0xff}, /* END MARKER */
411}; 411};
412/* V4L2_PIX_FMT_YUYV */
413static struct regval ov_fmt_yuyv[] = {
414 {REG_TSLB, 0 },
415 { 0x4f, 0x80 }, /* "matrix coefficient 1" */
416 { 0x50, 0x80 }, /* "matrix coefficient 2" */
417 { 0x51, 0 }, /* vb */
418 { 0x52, 0x22 }, /* "matrix coefficient 4" */
419 { 0x53, 0x5e }, /* "matrix coefficient 5" */
420 { 0x54, 0x80 }, /* "matrix coefficient 6" */
421 {REG_COM13, COM13_UVSAT|COM13_CMATRIX},
422 {REG_COM15, COM15_R00FF },
423 {0xff, 0xff}, /* END MARKER */
424};
412 425
413/* V4L2_PIX_FMT_RGB565X rrrrrggg gggbbbbb */ 426/* V4L2_PIX_FMT_RGB565X rrrrrggg gggbbbbb */
414static struct regval ov_fmt_rgbr[] = { 427static struct regval ov_fmt_rgbr[] = {
@@ -519,6 +532,10 @@ int stk_sensor_configure(struct stk_camera *dev)
519 com7 |= COM7_YUV; 532 com7 |= COM7_YUV;
520 rv = ov_fmt_uyvy; 533 rv = ov_fmt_uyvy;
521 break; 534 break;
535 case V4L2_PIX_FMT_YUYV:
536 com7 |= COM7_YUV;
537 rv = ov_fmt_yuyv;
538 break;
522 case V4L2_PIX_FMT_RGB565: 539 case V4L2_PIX_FMT_RGB565:
523 com7 |= COM7_RGB; 540 com7 |= COM7_RGB;
524 rv = ov_fmt_rgbp; 541 rv = ov_fmt_rgbp;
diff --git a/drivers/media/video/stk-webcam.c b/drivers/media/video/stk-webcam.c
index d37e5e2594b4..ceba45ad0294 100644
--- a/drivers/media/video/stk-webcam.c
+++ b/drivers/media/video/stk-webcam.c
@@ -63,7 +63,7 @@ static struct usb_device_id stkwebcam_table[] = {
63}; 63};
64MODULE_DEVICE_TABLE(usb, stkwebcam_table); 64MODULE_DEVICE_TABLE(usb, stkwebcam_table);
65 65
66void stk_camera_cleanup(struct kref *kref) 66static void stk_camera_cleanup(struct kref *kref)
67{ 67{
68 struct stk_camera *dev = to_stk_camera(kref); 68 struct stk_camera *dev = to_stk_camera(kref);
69 69
@@ -682,6 +682,7 @@ static int v4l_stk_open(struct inode *inode, struct file *fp)
682 return -ENXIO; 682 return -ENXIO;
683 fp->private_data = vdev; 683 fp->private_data = vdev;
684 kref_get(&dev->kref); 684 kref_get(&dev->kref);
685 usb_autopm_get_interface(dev->interface);
685 686
686 return 0; 687 return 0;
687} 688}
@@ -703,6 +704,7 @@ static int v4l_stk_release(struct inode *inode, struct file *fp)
703 } 704 }
704 705
705 if (dev->owner != fp) { 706 if (dev->owner != fp) {
707 usb_autopm_put_interface(dev->interface);
706 kref_put(&dev->kref, stk_camera_cleanup); 708 kref_put(&dev->kref, stk_camera_cleanup);
707 return 0; 709 return 0;
708 } 710 }
@@ -713,6 +715,7 @@ static int v4l_stk_release(struct inode *inode, struct file *fp)
713 715
714 dev->owner = NULL; 716 dev->owner = NULL;
715 717
718 usb_autopm_put_interface(dev->interface);
716 kref_put(&dev->kref, stk_camera_cleanup); 719 kref_put(&dev->kref, stk_camera_cleanup);
717 720
718 return 0; 721 return 0;
@@ -993,6 +996,10 @@ static int stk_vidioc_enum_fmt_cap(struct file *filp,
993 fmtd->pixelformat = V4L2_PIX_FMT_SBGGR8; 996 fmtd->pixelformat = V4L2_PIX_FMT_SBGGR8;
994 strcpy(fmtd->description, "Raw bayer"); 997 strcpy(fmtd->description, "Raw bayer");
995 break; 998 break;
999 case 4:
1000 fmtd->pixelformat = V4L2_PIX_FMT_YUYV;
1001 strcpy(fmtd->description, "yuv4:2:2");
1002 break;
996 default: 1003 default:
997 return -EINVAL; 1004 return -EINVAL;
998 } 1005 }
@@ -1048,6 +1055,7 @@ static int stk_vidioc_try_fmt_cap(struct file *filp,
1048 case V4L2_PIX_FMT_RGB565: 1055 case V4L2_PIX_FMT_RGB565:
1049 case V4L2_PIX_FMT_RGB565X: 1056 case V4L2_PIX_FMT_RGB565X:
1050 case V4L2_PIX_FMT_UYVY: 1057 case V4L2_PIX_FMT_UYVY:
1058 case V4L2_PIX_FMT_YUYV:
1051 case V4L2_PIX_FMT_SBGGR8: 1059 case V4L2_PIX_FMT_SBGGR8:
1052 break; 1060 break;
1053 default: 1061 default:
@@ -1080,6 +1088,42 @@ static int stk_vidioc_try_fmt_cap(struct file *filp,
1080 return 0; 1088 return 0;
1081} 1089}
1082 1090
1091static int stk_setup_format(struct stk_camera *dev)
1092{
1093 int i = 0;
1094 int depth;
1095 if (dev->vsettings.palette == V4L2_PIX_FMT_SBGGR8)
1096 depth = 1;
1097 else
1098 depth = 2;
1099 while (stk_sizes[i].m != dev->vsettings.mode
1100 && i < ARRAY_SIZE(stk_sizes))
1101 i++;
1102 if (i == ARRAY_SIZE(stk_sizes)) {
1103 STK_ERROR("Something is broken in %s\n", __FUNCTION__);
1104 return -EFAULT;
1105 }
1106 /* This registers controls some timings, not sure of what. */
1107 stk_camera_write_reg(dev, 0x001b, 0x0e);
1108 if (dev->vsettings.mode == MODE_SXGA)
1109 stk_camera_write_reg(dev, 0x001c, 0x0e);
1110 else
1111 stk_camera_write_reg(dev, 0x001c, 0x46);
1112 /*
1113 * Registers 0x0115 0x0114 are the size of each line (bytes),
1114 * regs 0x0117 0x0116 are the heigth of the image.
1115 */
1116 stk_camera_write_reg(dev, 0x0115,
1117 ((stk_sizes[i].w * depth) >> 8) & 0xff);
1118 stk_camera_write_reg(dev, 0x0114,
1119 (stk_sizes[i].w * depth) & 0xff);
1120 stk_camera_write_reg(dev, 0x0117,
1121 (stk_sizes[i].h >> 8) & 0xff);
1122 stk_camera_write_reg(dev, 0x0116,
1123 stk_sizes[i].h & 0xff);
1124 return stk_sensor_configure(dev);
1125}
1126
1083static int stk_vidioc_s_fmt_cap(struct file *filp, 1127static int stk_vidioc_s_fmt_cap(struct file *filp,
1084 void *priv, struct v4l2_format *fmtd) 1128 void *priv, struct v4l2_format *fmtd)
1085{ 1129{
@@ -1094,10 +1138,10 @@ static int stk_vidioc_s_fmt_cap(struct file *filp,
1094 return -EBUSY; 1138 return -EBUSY;
1095 if (dev->owner && dev->owner != filp) 1139 if (dev->owner && dev->owner != filp)
1096 return -EBUSY; 1140 return -EBUSY;
1097 dev->owner = filp;
1098 ret = stk_vidioc_try_fmt_cap(filp, priv, fmtd); 1141 ret = stk_vidioc_try_fmt_cap(filp, priv, fmtd);
1099 if (ret) 1142 if (ret)
1100 return ret; 1143 return ret;
1144 dev->owner = filp;
1101 1145
1102 dev->vsettings.palette = fmtd->fmt.pix.pixelformat; 1146 dev->vsettings.palette = fmtd->fmt.pix.pixelformat;
1103 stk_free_buffers(dev); 1147 stk_free_buffers(dev);
@@ -1105,25 +1149,7 @@ static int stk_vidioc_s_fmt_cap(struct file *filp,
1105 dev->vsettings.mode = stk_sizes[fmtd->fmt.pix.priv].m; 1149 dev->vsettings.mode = stk_sizes[fmtd->fmt.pix.priv].m;
1106 1150
1107 stk_initialise(dev); 1151 stk_initialise(dev);
1108 /* This registers controls some timings, not sure of what. */ 1152 return stk_setup_format(dev);
1109 stk_camera_write_reg(dev, 0x001b, 0x0e);
1110 if (dev->vsettings.mode == MODE_SXGA)
1111 stk_camera_write_reg(dev, 0x001c, 0x0e);
1112 else
1113 stk_camera_write_reg(dev, 0x001c, 0x46);
1114 /*
1115 * Registers 0x0115 0x0114 are the size of each line (bytes),
1116 * regs 0x0117 0x0116 are the heigth of the image.
1117 */
1118 stk_camera_write_reg(dev, 0x0115,
1119 (fmtd->fmt.pix.bytesperline >> 8) & 0xff);
1120 stk_camera_write_reg(dev, 0x0114,
1121 fmtd->fmt.pix.bytesperline & 0xff);
1122 stk_camera_write_reg(dev, 0x0117,
1123 (fmtd->fmt.pix.height >> 8) & 0xff);
1124 stk_camera_write_reg(dev, 0x0116,
1125 fmtd->fmt.pix.height & 0xff);
1126 return stk_sensor_configure(dev);
1127} 1153}
1128 1154
1129static int stk_vidioc_reqbufs(struct file *filp, 1155static int stk_vidioc_reqbufs(struct file *filp,
@@ -1288,6 +1314,9 @@ static struct file_operations v4l_stk_fops = {
1288 .poll = v4l_stk_poll, 1314 .poll = v4l_stk_poll,
1289 .mmap = v4l_stk_mmap, 1315 .mmap = v4l_stk_mmap,
1290 .ioctl = video_ioctl2, 1316 .ioctl = video_ioctl2,
1317#ifdef CONFIG_COMPAT
1318 .compat_ioctl = v4l_compat_ioctl32,
1319#endif
1291 .llseek = no_llseek 1320 .llseek = no_llseek
1292}; 1321};
1293 1322
@@ -1403,7 +1432,7 @@ static int stk_camera_probe(struct usb_interface *interface,
1403 dev->vsettings.brightness = 0x7fff; 1432 dev->vsettings.brightness = 0x7fff;
1404 dev->vsettings.palette = V4L2_PIX_FMT_RGB565; 1433 dev->vsettings.palette = V4L2_PIX_FMT_RGB565;
1405 dev->vsettings.mode = MODE_VGA; 1434 dev->vsettings.mode = MODE_VGA;
1406 dev->frame_size = 640*480*2; 1435 dev->frame_size = 640 * 480 * 2;
1407 1436
1408 INIT_LIST_HEAD(&dev->sio_avail); 1437 INIT_LIST_HEAD(&dev->sio_avail);
1409 INIT_LIST_HEAD(&dev->sio_full); 1438 INIT_LIST_HEAD(&dev->sio_full);
@@ -1417,6 +1446,7 @@ static int stk_camera_probe(struct usb_interface *interface,
1417 } 1446 }
1418 1447
1419 stk_create_sysfs_files(&dev->vdev); 1448 stk_create_sysfs_files(&dev->vdev);
1449 usb_autopm_enable(dev->interface);
1420 1450
1421 return 0; 1451 return 0;
1422} 1452}
@@ -1434,11 +1464,41 @@ static void stk_camera_disconnect(struct usb_interface *interface)
1434 kref_put(&dev->kref, stk_camera_cleanup); 1464 kref_put(&dev->kref, stk_camera_cleanup);
1435} 1465}
1436 1466
1467#ifdef CONFIG_PM
1468int stk_camera_suspend(struct usb_interface *intf, pm_message_t message)
1469{
1470 struct stk_camera *dev = usb_get_intfdata(intf);
1471 if (is_streaming(dev)) {
1472 stk_stop_stream(dev);
1473 /* yes, this is ugly */
1474 set_streaming(dev);
1475 }
1476 return 0;
1477}
1478
1479int stk_camera_resume(struct usb_interface *intf)
1480{
1481 struct stk_camera *dev = usb_get_intfdata(intf);
1482 if (!is_initialised(dev))
1483 return 0;
1484 unset_initialised(dev);
1485 stk_initialise(dev);
1486 stk_setup_format(dev);
1487 if (is_streaming(dev))
1488 stk_start_stream(dev);
1489 return 0;
1490}
1491#endif
1492
1437static struct usb_driver stk_camera_driver = { 1493static struct usb_driver stk_camera_driver = {
1438 .name = "stkwebcam", 1494 .name = "stkwebcam",
1439 .probe = stk_camera_probe, 1495 .probe = stk_camera_probe,
1440 .disconnect = stk_camera_disconnect, 1496 .disconnect = stk_camera_disconnect,
1441 .id_table = stkwebcam_table, 1497 .id_table = stkwebcam_table,
1498#ifdef CONFIG_PM
1499 .suspend = stk_camera_suspend,
1500 .resume = stk_camera_resume,
1501#endif
1442}; 1502};
1443 1503
1444 1504
diff --git a/drivers/media/video/stk-webcam.h b/drivers/media/video/stk-webcam.h
index 7e989d1ac1e0..df4dfefc5327 100644
--- a/drivers/media/video/stk-webcam.h
+++ b/drivers/media/video/stk-webcam.h
@@ -79,6 +79,7 @@ enum stk_status {
79#define unset_present(dev) ((dev)->status &= \ 79#define unset_present(dev) ((dev)->status &= \
80 ~(S_PRESENT|S_INITIALISED|S_STREAMING)) 80 ~(S_PRESENT|S_INITIALISED|S_STREAMING))
81#define set_initialised(dev) ((dev)->status |= S_INITIALISED) 81#define set_initialised(dev) ((dev)->status |= S_INITIALISED)
82#define unset_initialised(dev) ((dev)->status &= ~S_INITIALISED)
82#define set_memallocd(dev) ((dev)->status |= S_MEMALLOCD) 83#define set_memallocd(dev) ((dev)->status |= S_MEMALLOCD)
83#define unset_memallocd(dev) ((dev)->status &= ~S_MEMALLOCD) 84#define unset_memallocd(dev) ((dev)->status &= ~S_MEMALLOCD)
84#define set_streaming(dev) ((dev)->status |= S_STREAMING) 85#define set_streaming(dev) ((dev)->status |= S_STREAMING)
@@ -127,8 +128,6 @@ void stk_camera_delete(struct kref *);
127int stk_camera_write_reg(struct stk_camera *, u16, u8); 128int stk_camera_write_reg(struct stk_camera *, u16, u8);
128int stk_camera_read_reg(struct stk_camera *, u16, int *); 129int stk_camera_read_reg(struct stk_camera *, u16, int *);
129 130
130int stk_sensor_outb(struct stk_camera *dev, u8 reg, u8 val);
131int stk_sensor_inb(struct stk_camera *dev, u8 reg, u8 *val);
132int stk_sensor_init(struct stk_camera *); 131int stk_sensor_init(struct stk_camera *);
133int stk_sensor_configure(struct stk_camera *); 132int stk_sensor_configure(struct stk_camera *);
134int stk_sensor_sleep(struct stk_camera *dev); 133int stk_sensor_sleep(struct stk_camera *dev);
diff --git a/drivers/media/video/tcm825x.c b/drivers/media/video/tcm825x.c
index 41cd6a0b0485..fb895f6684a3 100644
--- a/drivers/media/video/tcm825x.c
+++ b/drivers/media/video/tcm825x.c
@@ -851,7 +851,7 @@ static int tcm825x_probe(struct i2c_client *client)
851 sensor->platform_data = client->dev.platform_data; 851 sensor->platform_data = client->dev.platform_data;
852 852
853 if (sensor->platform_data == NULL 853 if (sensor->platform_data == NULL
854 && !sensor->platform_data->is_okay()) 854 || !sensor->platform_data->is_okay())
855 return -ENODEV; 855 return -ENODEV;
856 856
857 sensor->v4l2_int_device = &tcm825x_int_device; 857 sensor->v4l2_int_device = &tcm825x_int_device;
diff --git a/drivers/media/video/tuner-core.c b/drivers/media/video/tuner-core.c
index ba538f6fbcc3..78a09a2a4857 100644
--- a/drivers/media/video/tuner-core.c
+++ b/drivers/media/video/tuner-core.c
@@ -1038,7 +1038,7 @@ static int tuner_resume(struct i2c_client *c)
1038 1038
1039/* ---------------------------------------------------------------------- */ 1039/* ---------------------------------------------------------------------- */
1040 1040
1041LIST_HEAD(tuner_list); 1041static LIST_HEAD(tuner_list);
1042 1042
1043/* Search for existing radio and/or TV tuners on the given I2C adapter. 1043/* Search for existing radio and/or TV tuners on the given I2C adapter.
1044 Note that when this function is called from tuner_probe you can be 1044 Note that when this function is called from tuner_probe you can be
diff --git a/drivers/media/video/tuner-xc2028.c b/drivers/media/video/tuner-xc2028.c
index f191f6a48070..50cf876f020f 100644
--- a/drivers/media/video/tuner-xc2028.c
+++ b/drivers/media/video/tuner-xc2028.c
@@ -754,6 +754,9 @@ skip_std_specific:
754 goto check_device; 754 goto check_device;
755 } 755 }
756 756
757 if (new_fw.type & FM)
758 goto check_device;
759
757 /* Load SCODE firmware, if exists */ 760 /* Load SCODE firmware, if exists */
758 tuner_dbg("Trying to load scode %d\n", new_fw.scode_nr); 761 tuner_dbg("Trying to load scode %d\n", new_fw.scode_nr);
759 762
diff --git a/drivers/media/video/tvaudio.c b/drivers/media/video/tvaudio.c
index a75560540e79..01ebcec040c4 100644
--- a/drivers/media/video/tvaudio.c
+++ b/drivers/media/video/tvaudio.c
@@ -1571,14 +1571,14 @@ static int tvaudio_get_ctrl(struct CHIPSTATE *chip,
1571 ctrl->value=chip->muted; 1571 ctrl->value=chip->muted;
1572 return 0; 1572 return 0;
1573 case V4L2_CID_AUDIO_VOLUME: 1573 case V4L2_CID_AUDIO_VOLUME:
1574 if (!desc->flags & CHIP_HAS_VOLUME) 1574 if (!(desc->flags & CHIP_HAS_VOLUME))
1575 break; 1575 break;
1576 ctrl->value = max(chip->left,chip->right); 1576 ctrl->value = max(chip->left,chip->right);
1577 return 0; 1577 return 0;
1578 case V4L2_CID_AUDIO_BALANCE: 1578 case V4L2_CID_AUDIO_BALANCE:
1579 { 1579 {
1580 int volume; 1580 int volume;
1581 if (!desc->flags & CHIP_HAS_VOLUME) 1581 if (!(desc->flags & CHIP_HAS_VOLUME))
1582 break; 1582 break;
1583 volume = max(chip->left,chip->right); 1583 volume = max(chip->left,chip->right);
1584 if (volume) 1584 if (volume)
@@ -1621,7 +1621,7 @@ static int tvaudio_set_ctrl(struct CHIPSTATE *chip,
1621 { 1621 {
1622 int volume,balance; 1622 int volume,balance;
1623 1623
1624 if (!desc->flags & CHIP_HAS_VOLUME) 1624 if (!(desc->flags & CHIP_HAS_VOLUME))
1625 break; 1625 break;
1626 1626
1627 volume = max(chip->left,chip->right); 1627 volume = max(chip->left,chip->right);
@@ -1642,7 +1642,7 @@ static int tvaudio_set_ctrl(struct CHIPSTATE *chip,
1642 case V4L2_CID_AUDIO_BALANCE: 1642 case V4L2_CID_AUDIO_BALANCE:
1643 { 1643 {
1644 int volume, balance; 1644 int volume, balance;
1645 if (!desc->flags & CHIP_HAS_VOLUME) 1645 if (!(desc->flags & CHIP_HAS_VOLUME))
1646 break; 1646 break;
1647 1647
1648 volume = max(chip->left,chip->right); 1648 volume = max(chip->left,chip->right);
@@ -1702,7 +1702,7 @@ static int chip_command(struct i2c_client *client,
1702 break; 1702 break;
1703 case V4L2_CID_AUDIO_VOLUME: 1703 case V4L2_CID_AUDIO_VOLUME:
1704 case V4L2_CID_AUDIO_BALANCE: 1704 case V4L2_CID_AUDIO_BALANCE:
1705 if (!desc->flags & CHIP_HAS_VOLUME) 1705 if (!(desc->flags & CHIP_HAS_VOLUME))
1706 return -EINVAL; 1706 return -EINVAL;
1707 break; 1707 break;
1708 case V4L2_CID_AUDIO_BASS: 1708 case V4L2_CID_AUDIO_BASS:
diff --git a/drivers/media/video/tveeprom.c b/drivers/media/video/tveeprom.c
index 0b8fbad3c721..dc0da44a5af6 100644
--- a/drivers/media/video/tveeprom.c
+++ b/drivers/media/video/tveeprom.c
@@ -242,7 +242,7 @@ hauppauge_tuner[] =
242 { TUNER_ABSENT, "TCL M2523_3DBH_E"}, 242 { TUNER_ABSENT, "TCL M2523_3DBH_E"},
243 { TUNER_ABSENT, "TCL M2523_3DIH_E"}, 243 { TUNER_ABSENT, "TCL M2523_3DIH_E"},
244 { TUNER_ABSENT, "TCL MFPE05_2_U"}, 244 { TUNER_ABSENT, "TCL MFPE05_2_U"},
245 { TUNER_ABSENT, "Philips FMD1216MEX"}, 245 { TUNER_PHILIPS_FMD1216ME_MK3, "Philips FMD1216MEX"},
246 { TUNER_ABSENT, "Philips FRH2036B"}, 246 { TUNER_ABSENT, "Philips FRH2036B"},
247 { TUNER_ABSENT, "Panasonic ENGF75_01GF"}, 247 { TUNER_ABSENT, "Panasonic ENGF75_01GF"},
248 { TUNER_ABSENT, "MaxLinear MXL5005"}, 248 { TUNER_ABSENT, "MaxLinear MXL5005"},
diff --git a/drivers/media/video/v4l2-common.c b/drivers/media/video/v4l2-common.c
index c056ff6d810c..34deb68ae568 100644
--- a/drivers/media/video/v4l2-common.c
+++ b/drivers/media/video/v4l2-common.c
@@ -56,7 +56,6 @@
56#include <asm/pgtable.h> 56#include <asm/pgtable.h>
57#include <asm/io.h> 57#include <asm/io.h>
58#include <asm/div64.h> 58#include <asm/div64.h>
59#include <linux/video_decoder.h>
60#define __OLD_VIDIOC_ /* To allow fixing old calls*/ 59#define __OLD_VIDIOC_ /* To allow fixing old calls*/
61#include <media/v4l2-common.h> 60#include <media/v4l2-common.h>
62#include <media/v4l2-chip-ident.h> 61#include <media/v4l2-chip-ident.h>
@@ -82,108 +81,6 @@ MODULE_LICENSE("GPL");
82 */ 81 */
83 82
84 83
85char *v4l2_norm_to_name(v4l2_std_id id)
86{
87 char *name;
88 u32 myid = id;
89
90 /* HACK: ppc32 architecture doesn't have __ucmpdi2 function to handle
91 64 bit comparations. So, on that architecture, with some gcc variants,
92 compilation fails. Currently, the max value is 30bit wide.
93 */
94 BUG_ON(myid != id);
95
96 switch (myid) {
97 case V4L2_STD_PAL:
98 name="PAL"; break;
99 case V4L2_STD_PAL_BG:
100 name="PAL-BG"; break;
101 case V4L2_STD_PAL_DK:
102 name="PAL-DK"; break;
103 case V4L2_STD_PAL_B:
104 name="PAL-B"; break;
105 case V4L2_STD_PAL_B1:
106 name="PAL-B1"; break;
107 case V4L2_STD_PAL_G:
108 name="PAL-G"; break;
109 case V4L2_STD_PAL_H:
110 name="PAL-H"; break;
111 case V4L2_STD_PAL_I:
112 name="PAL-I"; break;
113 case V4L2_STD_PAL_D:
114 name="PAL-D"; break;
115 case V4L2_STD_PAL_D1:
116 name="PAL-D1"; break;
117 case V4L2_STD_PAL_K:
118 name="PAL-K"; break;
119 case V4L2_STD_PAL_M:
120 name="PAL-M"; break;
121 case V4L2_STD_PAL_N:
122 name="PAL-N"; break;
123 case V4L2_STD_PAL_Nc:
124 name="PAL-Nc"; break;
125 case V4L2_STD_PAL_60:
126 name="PAL-60"; break;
127 case V4L2_STD_NTSC:
128 name="NTSC"; break;
129 case V4L2_STD_NTSC_M:
130 name="NTSC-M"; break;
131 case V4L2_STD_NTSC_M_JP:
132 name="NTSC-M-JP"; break;
133 case V4L2_STD_NTSC_443:
134 name="NTSC-443"; break;
135 case V4L2_STD_NTSC_M_KR:
136 name="NTSC-M-KR"; break;
137 case V4L2_STD_SECAM:
138 name="SECAM"; break;
139 case V4L2_STD_SECAM_DK:
140 name="SECAM-DK"; break;
141 case V4L2_STD_SECAM_B:
142 name="SECAM-B"; break;
143 case V4L2_STD_SECAM_D:
144 name="SECAM-D"; break;
145 case V4L2_STD_SECAM_G:
146 name="SECAM-G"; break;
147 case V4L2_STD_SECAM_H:
148 name="SECAM-H"; break;
149 case V4L2_STD_SECAM_K:
150 name="SECAM-K"; break;
151 case V4L2_STD_SECAM_K1:
152 name="SECAM-K1"; break;
153 case V4L2_STD_SECAM_L:
154 name="SECAM-L"; break;
155 case V4L2_STD_SECAM_LC:
156 name="SECAM-LC"; break;
157 default:
158 name="Unknown"; break;
159 }
160
161 return name;
162}
163
164/* Fill in the fields of a v4l2_standard structure according to the
165 'id' and 'transmission' parameters. Returns negative on error. */
166int v4l2_video_std_construct(struct v4l2_standard *vs,
167 int id, char *name)
168{
169 u32 index = vs->index;
170
171 memset(vs, 0, sizeof(struct v4l2_standard));
172 vs->index = index;
173 vs->id = id;
174 if (id & V4L2_STD_525_60) {
175 vs->frameperiod.numerator = 1001;
176 vs->frameperiod.denominator = 30000;
177 vs->framelines = 525;
178 } else {
179 vs->frameperiod.numerator = 1;
180 vs->frameperiod.denominator = 25;
181 vs->framelines = 625;
182 }
183 strlcpy(vs->name,name,sizeof(vs->name));
184 return 0;
185}
186
187/* ----------------------------------------------------------------- */ 84/* ----------------------------------------------------------------- */
188/* priority handling */ 85/* priority handling */
189 86
@@ -196,6 +93,7 @@ int v4l2_prio_init(struct v4l2_prio_state *global)
196 memset(global,0,sizeof(*global)); 93 memset(global,0,sizeof(*global));
197 return 0; 94 return 0;
198} 95}
96EXPORT_SYMBOL(v4l2_prio_init);
199 97
200int v4l2_prio_change(struct v4l2_prio_state *global, enum v4l2_priority *local, 98int v4l2_prio_change(struct v4l2_prio_state *global, enum v4l2_priority *local,
201 enum v4l2_priority new) 99 enum v4l2_priority new)
@@ -211,11 +109,13 @@ int v4l2_prio_change(struct v4l2_prio_state *global, enum v4l2_priority *local,
211 *local = new; 109 *local = new;
212 return 0; 110 return 0;
213} 111}
112EXPORT_SYMBOL(v4l2_prio_change);
214 113
215int v4l2_prio_open(struct v4l2_prio_state *global, enum v4l2_priority *local) 114int v4l2_prio_open(struct v4l2_prio_state *global, enum v4l2_priority *local)
216{ 115{
217 return v4l2_prio_change(global,local,V4L2_PRIORITY_DEFAULT); 116 return v4l2_prio_change(global,local,V4L2_PRIORITY_DEFAULT);
218} 117}
118EXPORT_SYMBOL(v4l2_prio_open);
219 119
220int v4l2_prio_close(struct v4l2_prio_state *global, enum v4l2_priority *local) 120int v4l2_prio_close(struct v4l2_prio_state *global, enum v4l2_priority *local)
221{ 121{
@@ -223,6 +123,7 @@ int v4l2_prio_close(struct v4l2_prio_state *global, enum v4l2_priority *local)
223 atomic_dec(&global->prios[*local]); 123 atomic_dec(&global->prios[*local]);
224 return 0; 124 return 0;
225} 125}
126EXPORT_SYMBOL(v4l2_prio_close);
226 127
227enum v4l2_priority v4l2_prio_max(struct v4l2_prio_state *global) 128enum v4l2_priority v4l2_prio_max(struct v4l2_prio_state *global)
228{ 129{
@@ -234,6 +135,7 @@ enum v4l2_priority v4l2_prio_max(struct v4l2_prio_state *global)
234 return V4L2_PRIORITY_BACKGROUND; 135 return V4L2_PRIORITY_BACKGROUND;
235 return V4L2_PRIORITY_UNSET; 136 return V4L2_PRIORITY_UNSET;
236} 137}
138EXPORT_SYMBOL(v4l2_prio_max);
237 139
238int v4l2_prio_check(struct v4l2_prio_state *global, enum v4l2_priority *local) 140int v4l2_prio_check(struct v4l2_prio_state *global, enum v4l2_priority *local)
239{ 141{
@@ -241,225 +143,7 @@ int v4l2_prio_check(struct v4l2_prio_state *global, enum v4l2_priority *local)
241 return -EBUSY; 143 return -EBUSY;
242 return 0; 144 return 0;
243} 145}
244 146EXPORT_SYMBOL(v4l2_prio_check);
245
246/* ----------------------------------------------------------------- */
247/* some arrays for pretty-printing debug messages of enum types */
248
249char *v4l2_field_names[] = {
250 [V4L2_FIELD_ANY] = "any",
251 [V4L2_FIELD_NONE] = "none",
252 [V4L2_FIELD_TOP] = "top",
253 [V4L2_FIELD_BOTTOM] = "bottom",
254 [V4L2_FIELD_INTERLACED] = "interlaced",
255 [V4L2_FIELD_SEQ_TB] = "seq-tb",
256 [V4L2_FIELD_SEQ_BT] = "seq-bt",
257 [V4L2_FIELD_ALTERNATE] = "alternate",
258 [V4L2_FIELD_INTERLACED_TB] = "interlaced-tb",
259 [V4L2_FIELD_INTERLACED_BT] = "interlaced-bt",
260};
261
262char *v4l2_type_names[] = {
263 [V4L2_BUF_TYPE_VIDEO_CAPTURE] = "video-cap",
264 [V4L2_BUF_TYPE_VIDEO_OVERLAY] = "video-over",
265 [V4L2_BUF_TYPE_VIDEO_OUTPUT] = "video-out",
266 [V4L2_BUF_TYPE_VBI_CAPTURE] = "vbi-cap",
267 [V4L2_BUF_TYPE_VBI_OUTPUT] = "vbi-out",
268 [V4L2_BUF_TYPE_SLICED_VBI_CAPTURE] = "sliced-vbi-cap",
269 [V4L2_BUF_TYPE_SLICED_VBI_OUTPUT] = "sliced-vbi-out",
270 [V4L2_BUF_TYPE_VIDEO_OUTPUT_OVERLAY] = "video-out-over",
271};
272
273
274#define prt_names(a,arr) (((a)>=0)&&((a)<ARRAY_SIZE(arr)))?arr[a]:"unknown"
275
276/* ------------------------------------------------------------------ */
277/* debug help functions */
278
279#ifdef CONFIG_VIDEO_V4L1_COMPAT
280static const char *v4l1_ioctls[] = {
281 [_IOC_NR(VIDIOCGCAP)] = "VIDIOCGCAP",
282 [_IOC_NR(VIDIOCGCHAN)] = "VIDIOCGCHAN",
283 [_IOC_NR(VIDIOCSCHAN)] = "VIDIOCSCHAN",
284 [_IOC_NR(VIDIOCGTUNER)] = "VIDIOCGTUNER",
285 [_IOC_NR(VIDIOCSTUNER)] = "VIDIOCSTUNER",
286 [_IOC_NR(VIDIOCGPICT)] = "VIDIOCGPICT",
287 [_IOC_NR(VIDIOCSPICT)] = "VIDIOCSPICT",
288 [_IOC_NR(VIDIOCCAPTURE)] = "VIDIOCCAPTURE",
289 [_IOC_NR(VIDIOCGWIN)] = "VIDIOCGWIN",
290 [_IOC_NR(VIDIOCSWIN)] = "VIDIOCSWIN",
291 [_IOC_NR(VIDIOCGFBUF)] = "VIDIOCGFBUF",
292 [_IOC_NR(VIDIOCSFBUF)] = "VIDIOCSFBUF",
293 [_IOC_NR(VIDIOCKEY)] = "VIDIOCKEY",
294 [_IOC_NR(VIDIOCGFREQ)] = "VIDIOCGFREQ",
295 [_IOC_NR(VIDIOCSFREQ)] = "VIDIOCSFREQ",
296 [_IOC_NR(VIDIOCGAUDIO)] = "VIDIOCGAUDIO",
297 [_IOC_NR(VIDIOCSAUDIO)] = "VIDIOCSAUDIO",
298 [_IOC_NR(VIDIOCSYNC)] = "VIDIOCSYNC",
299 [_IOC_NR(VIDIOCMCAPTURE)] = "VIDIOCMCAPTURE",
300 [_IOC_NR(VIDIOCGMBUF)] = "VIDIOCGMBUF",
301 [_IOC_NR(VIDIOCGUNIT)] = "VIDIOCGUNIT",
302 [_IOC_NR(VIDIOCGCAPTURE)] = "VIDIOCGCAPTURE",
303 [_IOC_NR(VIDIOCSCAPTURE)] = "VIDIOCSCAPTURE",
304 [_IOC_NR(VIDIOCSPLAYMODE)] = "VIDIOCSPLAYMODE",
305 [_IOC_NR(VIDIOCSWRITEMODE)] = "VIDIOCSWRITEMODE",
306 [_IOC_NR(VIDIOCGPLAYINFO)] = "VIDIOCGPLAYINFO",
307 [_IOC_NR(VIDIOCSMICROCODE)] = "VIDIOCSMICROCODE",
308 [_IOC_NR(VIDIOCGVBIFMT)] = "VIDIOCGVBIFMT",
309 [_IOC_NR(VIDIOCSVBIFMT)] = "VIDIOCSVBIFMT"
310};
311#define V4L1_IOCTLS ARRAY_SIZE(v4l1_ioctls)
312#endif
313
314static const char *v4l2_ioctls[] = {
315 [_IOC_NR(VIDIOC_QUERYCAP)] = "VIDIOC_QUERYCAP",
316 [_IOC_NR(VIDIOC_RESERVED)] = "VIDIOC_RESERVED",
317 [_IOC_NR(VIDIOC_ENUM_FMT)] = "VIDIOC_ENUM_FMT",
318 [_IOC_NR(VIDIOC_G_FMT)] = "VIDIOC_G_FMT",
319 [_IOC_NR(VIDIOC_S_FMT)] = "VIDIOC_S_FMT",
320 [_IOC_NR(VIDIOC_REQBUFS)] = "VIDIOC_REQBUFS",
321 [_IOC_NR(VIDIOC_QUERYBUF)] = "VIDIOC_QUERYBUF",
322 [_IOC_NR(VIDIOC_G_FBUF)] = "VIDIOC_G_FBUF",
323 [_IOC_NR(VIDIOC_S_FBUF)] = "VIDIOC_S_FBUF",
324 [_IOC_NR(VIDIOC_OVERLAY)] = "VIDIOC_OVERLAY",
325 [_IOC_NR(VIDIOC_QBUF)] = "VIDIOC_QBUF",
326 [_IOC_NR(VIDIOC_DQBUF)] = "VIDIOC_DQBUF",
327 [_IOC_NR(VIDIOC_STREAMON)] = "VIDIOC_STREAMON",
328 [_IOC_NR(VIDIOC_STREAMOFF)] = "VIDIOC_STREAMOFF",
329 [_IOC_NR(VIDIOC_G_PARM)] = "VIDIOC_G_PARM",
330 [_IOC_NR(VIDIOC_S_PARM)] = "VIDIOC_S_PARM",
331 [_IOC_NR(VIDIOC_G_STD)] = "VIDIOC_G_STD",
332 [_IOC_NR(VIDIOC_S_STD)] = "VIDIOC_S_STD",
333 [_IOC_NR(VIDIOC_ENUMSTD)] = "VIDIOC_ENUMSTD",
334 [_IOC_NR(VIDIOC_ENUMINPUT)] = "VIDIOC_ENUMINPUT",
335 [_IOC_NR(VIDIOC_G_CTRL)] = "VIDIOC_G_CTRL",
336 [_IOC_NR(VIDIOC_S_CTRL)] = "VIDIOC_S_CTRL",
337 [_IOC_NR(VIDIOC_G_TUNER)] = "VIDIOC_G_TUNER",
338 [_IOC_NR(VIDIOC_S_TUNER)] = "VIDIOC_S_TUNER",
339 [_IOC_NR(VIDIOC_G_AUDIO)] = "VIDIOC_G_AUDIO",
340 [_IOC_NR(VIDIOC_S_AUDIO)] = "VIDIOC_S_AUDIO",
341 [_IOC_NR(VIDIOC_QUERYCTRL)] = "VIDIOC_QUERYCTRL",
342 [_IOC_NR(VIDIOC_QUERYMENU)] = "VIDIOC_QUERYMENU",
343 [_IOC_NR(VIDIOC_G_INPUT)] = "VIDIOC_G_INPUT",
344 [_IOC_NR(VIDIOC_S_INPUT)] = "VIDIOC_S_INPUT",
345 [_IOC_NR(VIDIOC_G_OUTPUT)] = "VIDIOC_G_OUTPUT",
346 [_IOC_NR(VIDIOC_S_OUTPUT)] = "VIDIOC_S_OUTPUT",
347 [_IOC_NR(VIDIOC_ENUMOUTPUT)] = "VIDIOC_ENUMOUTPUT",
348 [_IOC_NR(VIDIOC_G_AUDOUT)] = "VIDIOC_G_AUDOUT",
349 [_IOC_NR(VIDIOC_S_AUDOUT)] = "VIDIOC_S_AUDOUT",
350 [_IOC_NR(VIDIOC_G_MODULATOR)] = "VIDIOC_G_MODULATOR",
351 [_IOC_NR(VIDIOC_S_MODULATOR)] = "VIDIOC_S_MODULATOR",
352 [_IOC_NR(VIDIOC_G_FREQUENCY)] = "VIDIOC_G_FREQUENCY",
353 [_IOC_NR(VIDIOC_S_FREQUENCY)] = "VIDIOC_S_FREQUENCY",
354 [_IOC_NR(VIDIOC_CROPCAP)] = "VIDIOC_CROPCAP",
355 [_IOC_NR(VIDIOC_G_CROP)] = "VIDIOC_G_CROP",
356 [_IOC_NR(VIDIOC_S_CROP)] = "VIDIOC_S_CROP",
357 [_IOC_NR(VIDIOC_G_JPEGCOMP)] = "VIDIOC_G_JPEGCOMP",
358 [_IOC_NR(VIDIOC_S_JPEGCOMP)] = "VIDIOC_S_JPEGCOMP",
359 [_IOC_NR(VIDIOC_QUERYSTD)] = "VIDIOC_QUERYSTD",
360 [_IOC_NR(VIDIOC_TRY_FMT)] = "VIDIOC_TRY_FMT",
361 [_IOC_NR(VIDIOC_ENUMAUDIO)] = "VIDIOC_ENUMAUDIO",
362 [_IOC_NR(VIDIOC_ENUMAUDOUT)] = "VIDIOC_ENUMAUDOUT",
363 [_IOC_NR(VIDIOC_G_PRIORITY)] = "VIDIOC_G_PRIORITY",
364 [_IOC_NR(VIDIOC_S_PRIORITY)] = "VIDIOC_S_PRIORITY",
365 [_IOC_NR(VIDIOC_G_SLICED_VBI_CAP)] = "VIDIOC_G_SLICED_VBI_CAP",
366 [_IOC_NR(VIDIOC_LOG_STATUS)] = "VIDIOC_LOG_STATUS",
367 [_IOC_NR(VIDIOC_G_EXT_CTRLS)] = "VIDIOC_G_EXT_CTRLS",
368 [_IOC_NR(VIDIOC_S_EXT_CTRLS)] = "VIDIOC_S_EXT_CTRLS",
369 [_IOC_NR(VIDIOC_TRY_EXT_CTRLS)] = "VIDIOC_TRY_EXT_CTRLS",
370#if 1
371 [_IOC_NR(VIDIOC_ENUM_FRAMESIZES)] = "VIDIOC_ENUM_FRAMESIZES",
372 [_IOC_NR(VIDIOC_ENUM_FRAMEINTERVALS)] = "VIDIOC_ENUM_FRAMEINTERVALS",
373 [_IOC_NR(VIDIOC_G_ENC_INDEX)] = "VIDIOC_G_ENC_INDEX",
374 [_IOC_NR(VIDIOC_ENCODER_CMD)] = "VIDIOC_ENCODER_CMD",
375 [_IOC_NR(VIDIOC_TRY_ENCODER_CMD)] = "VIDIOC_TRY_ENCODER_CMD",
376
377 [_IOC_NR(VIDIOC_DBG_S_REGISTER)] = "VIDIOC_DBG_S_REGISTER",
378 [_IOC_NR(VIDIOC_DBG_G_REGISTER)] = "VIDIOC_DBG_G_REGISTER",
379
380 [_IOC_NR(VIDIOC_G_CHIP_IDENT)] = "VIDIOC_G_CHIP_IDENT",
381#endif
382};
383#define V4L2_IOCTLS ARRAY_SIZE(v4l2_ioctls)
384
385static const char *v4l2_int_ioctls[] = {
386#ifdef CONFIG_VIDEO_V4L1_COMPAT
387 [_IOC_NR(DECODER_GET_CAPABILITIES)] = "DECODER_GET_CAPABILITIES",
388 [_IOC_NR(DECODER_GET_STATUS)] = "DECODER_GET_STATUS",
389 [_IOC_NR(DECODER_SET_NORM)] = "DECODER_SET_NORM",
390 [_IOC_NR(DECODER_SET_INPUT)] = "DECODER_SET_INPUT",
391 [_IOC_NR(DECODER_SET_OUTPUT)] = "DECODER_SET_OUTPUT",
392 [_IOC_NR(DECODER_ENABLE_OUTPUT)] = "DECODER_ENABLE_OUTPUT",
393 [_IOC_NR(DECODER_SET_PICTURE)] = "DECODER_SET_PICTURE",
394 [_IOC_NR(DECODER_SET_GPIO)] = "DECODER_SET_GPIO",
395 [_IOC_NR(DECODER_INIT)] = "DECODER_INIT",
396 [_IOC_NR(DECODER_SET_VBI_BYPASS)] = "DECODER_SET_VBI_BYPASS",
397 [_IOC_NR(DECODER_DUMP)] = "DECODER_DUMP",
398#endif
399 [_IOC_NR(AUDC_SET_RADIO)] = "AUDC_SET_RADIO",
400
401 [_IOC_NR(TUNER_SET_TYPE_ADDR)] = "TUNER_SET_TYPE_ADDR",
402 [_IOC_NR(TUNER_SET_STANDBY)] = "TUNER_SET_STANDBY",
403 [_IOC_NR(TUNER_SET_CONFIG)] = "TUNER_SET_CONFIG",
404
405 [_IOC_NR(VIDIOC_INT_S_TUNER_MODE)] = "VIDIOC_INT_S_TUNER_MODE",
406 [_IOC_NR(VIDIOC_INT_RESET)] = "VIDIOC_INT_RESET",
407 [_IOC_NR(VIDIOC_INT_AUDIO_CLOCK_FREQ)] = "VIDIOC_INT_AUDIO_CLOCK_FREQ",
408 [_IOC_NR(VIDIOC_INT_DECODE_VBI_LINE)] = "VIDIOC_INT_DECODE_VBI_LINE",
409 [_IOC_NR(VIDIOC_INT_S_VBI_DATA)] = "VIDIOC_INT_S_VBI_DATA",
410 [_IOC_NR(VIDIOC_INT_G_VBI_DATA)] = "VIDIOC_INT_G_VBI_DATA",
411 [_IOC_NR(VIDIOC_INT_I2S_CLOCK_FREQ)] = "VIDIOC_INT_I2S_CLOCK_FREQ",
412 [_IOC_NR(VIDIOC_INT_S_STANDBY)] = "VIDIOC_INT_S_STANDBY",
413 [_IOC_NR(VIDIOC_INT_S_AUDIO_ROUTING)] = "VIDIOC_INT_S_AUDIO_ROUTING",
414 [_IOC_NR(VIDIOC_INT_G_AUDIO_ROUTING)] = "VIDIOC_INT_G_AUDIO_ROUTING",
415 [_IOC_NR(VIDIOC_INT_S_VIDEO_ROUTING)] = "VIDIOC_INT_S_VIDEO_ROUTING",
416 [_IOC_NR(VIDIOC_INT_G_VIDEO_ROUTING)] = "VIDIOC_INT_G_VIDEO_ROUTING",
417 [_IOC_NR(VIDIOC_INT_S_CRYSTAL_FREQ)] = "VIDIOC_INT_S_CRYSTAL_FREQ",
418 [_IOC_NR(VIDIOC_INT_INIT)] = "VIDIOC_INT_INIT",
419 [_IOC_NR(VIDIOC_INT_G_STD_OUTPUT)] = "VIDIOC_INT_G_STD_OUTPUT",
420 [_IOC_NR(VIDIOC_INT_S_STD_OUTPUT)] = "VIDIOC_INT_S_STD_OUTPUT",
421};
422#define V4L2_INT_IOCTLS ARRAY_SIZE(v4l2_int_ioctls)
423
424
425/* Common ioctl debug function. This function can be used by
426 external ioctl messages as well as internal V4L ioctl */
427void v4l_printk_ioctl(unsigned int cmd)
428{
429 char *dir;
430
431 switch (_IOC_DIR(cmd)) {
432 case _IOC_NONE: dir = "--"; break;
433 case _IOC_READ: dir = "r-"; break;
434 case _IOC_WRITE: dir = "-w"; break;
435 case _IOC_READ | _IOC_WRITE: dir = "rw"; break;
436 default: dir = "*ERR*"; break;
437 }
438 switch (_IOC_TYPE(cmd)) {
439 case 'd':
440 printk("v4l2_int ioctl %s, dir=%s (0x%08x)\n",
441 (_IOC_NR(cmd) < V4L2_INT_IOCTLS) ?
442 v4l2_int_ioctls[_IOC_NR(cmd)] : "UNKNOWN", dir, cmd);
443 break;
444#ifdef CONFIG_VIDEO_V4L1_COMPAT
445 case 'v':
446 printk("v4l1 ioctl %s, dir=%s (0x%08x)\n",
447 (_IOC_NR(cmd) < V4L1_IOCTLS) ?
448 v4l1_ioctls[_IOC_NR(cmd)] : "UNKNOWN", dir, cmd);
449 break;
450#endif
451 case 'V':
452 printk("v4l2 ioctl %s, dir=%s (0x%08x)\n",
453 (_IOC_NR(cmd) < V4L2_IOCTLS) ?
454 v4l2_ioctls[_IOC_NR(cmd)] : "UNKNOWN", dir, cmd);
455 break;
456
457 default:
458 printk("unknown ioctl '%c', dir=%s, #%d (0x%08x)\n",
459 _IOC_TYPE(cmd), dir, _IOC_NR(cmd), cmd);
460 }
461}
462
463 147
464/* ----------------------------------------------------------------- */ 148/* ----------------------------------------------------------------- */
465 149
@@ -488,6 +172,7 @@ int v4l2_ctrl_check(struct v4l2_ext_control *ctrl, struct v4l2_queryctrl *qctrl,
488 } 172 }
489 return 0; 173 return 0;
490} 174}
175EXPORT_SYMBOL(v4l2_ctrl_check);
491 176
492/* Returns NULL or a character pointer array containing the menu for 177/* Returns NULL or a character pointer array containing the menu for
493 the given control ID. The pointer array ends with a NULL pointer. 178 the given control ID. The pointer array ends with a NULL pointer.
@@ -648,6 +333,7 @@ const char **v4l2_ctrl_get_menu(u32 id)
648 return NULL; 333 return NULL;
649 } 334 }
650} 335}
336EXPORT_SYMBOL(v4l2_ctrl_get_menu);
651 337
652/* Fill in a struct v4l2_queryctrl */ 338/* Fill in a struct v4l2_queryctrl */
653int v4l2_ctrl_query_fill(struct v4l2_queryctrl *qctrl, s32 min, s32 max, s32 step, s32 def) 339int v4l2_ctrl_query_fill(struct v4l2_queryctrl *qctrl, s32 min, s32 max, s32 step, s32 def)
@@ -770,6 +456,7 @@ int v4l2_ctrl_query_fill(struct v4l2_queryctrl *qctrl, s32 min, s32 max, s32 ste
770 snprintf(qctrl->name, sizeof(qctrl->name), name); 456 snprintf(qctrl->name, sizeof(qctrl->name), name);
771 return 0; 457 return 0;
772} 458}
459EXPORT_SYMBOL(v4l2_ctrl_query_fill);
773 460
774/* Fill in a struct v4l2_queryctrl with standard values based on 461/* Fill in a struct v4l2_queryctrl with standard values based on
775 the control ID. */ 462 the control ID. */
@@ -904,6 +591,7 @@ int v4l2_ctrl_query_fill_std(struct v4l2_queryctrl *qctrl)
904 return -EINVAL; 591 return -EINVAL;
905 } 592 }
906} 593}
594EXPORT_SYMBOL(v4l2_ctrl_query_fill_std);
907 595
908/* Fill in a struct v4l2_querymenu based on the struct v4l2_queryctrl and 596/* Fill in a struct v4l2_querymenu based on the struct v4l2_queryctrl and
909 the menu. The qctrl pointer may be NULL, in which case it is ignored. */ 597 the menu. The qctrl pointer may be NULL, in which case it is ignored. */
@@ -922,6 +610,7 @@ int v4l2_ctrl_query_menu(struct v4l2_querymenu *qmenu, struct v4l2_queryctrl *qc
922 qmenu->reserved = 0; 610 qmenu->reserved = 0;
923 return 0; 611 return 0;
924} 612}
613EXPORT_SYMBOL(v4l2_ctrl_query_menu);
925 614
926/* ctrl_classes points to an array of u32 pointers, the last element is 615/* ctrl_classes points to an array of u32 pointers, the last element is
927 a NULL pointer. Each u32 array is a 0-terminated array of control IDs. 616 a NULL pointer. Each u32 array is a 0-terminated array of control IDs.
@@ -972,7 +661,20 @@ u32 v4l2_ctrl_next(const u32 * const * ctrl_classes, u32 id)
972 return 0; 661 return 0;
973 return **ctrl_classes; 662 return **ctrl_classes;
974} 663}
664EXPORT_SYMBOL(v4l2_ctrl_next);
975 665
666int v4l2_chip_match_host(u32 match_type, u32 match_chip)
667{
668 switch (match_type) {
669 case V4L2_CHIP_MATCH_HOST:
670 return match_chip == 0;
671 default:
672 return 0;
673 }
674}
675EXPORT_SYMBOL(v4l2_chip_match_host);
676
677#if defined(CONFIG_I2C) || (defined(CONFIG_I2C_MODULE) && defined(MODULE))
976int v4l2_chip_match_i2c_client(struct i2c_client *c, u32 match_type, u32 match_chip) 678int v4l2_chip_match_i2c_client(struct i2c_client *c, u32 match_type, u32 match_chip)
977{ 679{
978 switch (match_type) { 680 switch (match_type) {
@@ -984,6 +686,7 @@ int v4l2_chip_match_i2c_client(struct i2c_client *c, u32 match_type, u32 match_c
984 return 0; 686 return 0;
985 } 687 }
986} 688}
689EXPORT_SYMBOL(v4l2_chip_match_i2c_client);
987 690
988int v4l2_chip_ident_i2c_client(struct i2c_client *c, struct v4l2_chip_ident *chip, 691int v4l2_chip_ident_i2c_client(struct i2c_client *c, struct v4l2_chip_ident *chip,
989 u32 ident, u32 revision) 692 u32 ident, u32 revision)
@@ -1000,16 +703,7 @@ int v4l2_chip_ident_i2c_client(struct i2c_client *c, struct v4l2_chip_ident *chi
1000 } 703 }
1001 return 0; 704 return 0;
1002} 705}
1003 706EXPORT_SYMBOL(v4l2_chip_ident_i2c_client);
1004int v4l2_chip_match_host(u32 match_type, u32 match_chip)
1005{
1006 switch (match_type) {
1007 case V4L2_CHIP_MATCH_HOST:
1008 return match_chip == 0;
1009 default:
1010 return 0;
1011 }
1012}
1013 707
1014/* ----------------------------------------------------------------- */ 708/* ----------------------------------------------------------------- */
1015 709
@@ -1038,38 +732,5 @@ int v4l2_i2c_attach(struct i2c_adapter *adapter, int address, struct i2c_driver
1038 } 732 }
1039 return err != -ENOMEM ? 0 : err; 733 return err != -ENOMEM ? 0 : err;
1040} 734}
1041
1042/* ----------------------------------------------------------------- */
1043
1044EXPORT_SYMBOL(v4l2_norm_to_name);
1045EXPORT_SYMBOL(v4l2_video_std_construct);
1046
1047EXPORT_SYMBOL(v4l2_prio_init);
1048EXPORT_SYMBOL(v4l2_prio_change);
1049EXPORT_SYMBOL(v4l2_prio_open);
1050EXPORT_SYMBOL(v4l2_prio_close);
1051EXPORT_SYMBOL(v4l2_prio_max);
1052EXPORT_SYMBOL(v4l2_prio_check);
1053
1054EXPORT_SYMBOL(v4l2_field_names);
1055EXPORT_SYMBOL(v4l2_type_names);
1056EXPORT_SYMBOL(v4l_printk_ioctl);
1057
1058EXPORT_SYMBOL(v4l2_ctrl_next);
1059EXPORT_SYMBOL(v4l2_ctrl_check);
1060EXPORT_SYMBOL(v4l2_ctrl_get_menu);
1061EXPORT_SYMBOL(v4l2_ctrl_query_menu);
1062EXPORT_SYMBOL(v4l2_ctrl_query_fill);
1063EXPORT_SYMBOL(v4l2_ctrl_query_fill_std);
1064
1065EXPORT_SYMBOL(v4l2_chip_match_i2c_client);
1066EXPORT_SYMBOL(v4l2_chip_ident_i2c_client);
1067EXPORT_SYMBOL(v4l2_chip_match_host);
1068
1069EXPORT_SYMBOL(v4l2_i2c_attach); 735EXPORT_SYMBOL(v4l2_i2c_attach);
1070 736#endif
1071/*
1072 * Local variables:
1073 * c-basic-offset: 8
1074 * End:
1075 */
diff --git a/drivers/media/video/videobuf-core.c b/drivers/media/video/videobuf-core.c
index 80a14da9acef..eab79ffdf56a 100644
--- a/drivers/media/video/videobuf-core.c
+++ b/drivers/media/video/videobuf-core.c
@@ -147,7 +147,7 @@ void videobuf_queue_core_init(struct videobuf_queue *q,
147 /* Having implementations for abstract methods are mandatory */ 147 /* Having implementations for abstract methods are mandatory */
148 BUG_ON(!q->int_ops); 148 BUG_ON(!q->int_ops);
149 149
150 mutex_init(&q->lock); 150 mutex_init(&q->vb_lock);
151 INIT_LIST_HEAD(&q->stream); 151 INIT_LIST_HEAD(&q->stream);
152} 152}
153 153
@@ -189,7 +189,7 @@ int videobuf_queue_is_busy(struct videobuf_queue *q)
189 return 0; 189 return 0;
190} 190}
191 191
192/* Locking: Caller holds q->lock */ 192/* Locking: Caller holds q->vb_lock */
193void videobuf_queue_cancel(struct videobuf_queue *q) 193void videobuf_queue_cancel(struct videobuf_queue *q)
194{ 194{
195 unsigned long flags = 0; 195 unsigned long flags = 0;
@@ -220,7 +220,7 @@ void videobuf_queue_cancel(struct videobuf_queue *q)
220 220
221/* --------------------------------------------------------------------- */ 221/* --------------------------------------------------------------------- */
222 222
223/* Locking: Caller holds q->lock */ 223/* Locking: Caller holds q->vb_lock */
224enum v4l2_field videobuf_next_field(struct videobuf_queue *q) 224enum v4l2_field videobuf_next_field(struct videobuf_queue *q)
225{ 225{
226 enum v4l2_field field = q->field; 226 enum v4l2_field field = q->field;
@@ -239,7 +239,7 @@ enum v4l2_field videobuf_next_field(struct videobuf_queue *q)
239 return field; 239 return field;
240} 240}
241 241
242/* Locking: Caller holds q->lock */ 242/* Locking: Caller holds q->vb_lock */
243static void videobuf_status(struct videobuf_queue *q, struct v4l2_buffer *b, 243static void videobuf_status(struct videobuf_queue *q, struct v4l2_buffer *b,
244 struct videobuf_buffer *vb, enum v4l2_buf_type type) 244 struct videobuf_buffer *vb, enum v4l2_buf_type type)
245{ 245{
@@ -295,7 +295,7 @@ static void videobuf_status(struct videobuf_queue *q, struct v4l2_buffer *b,
295 b->sequence = vb->field_count >> 1; 295 b->sequence = vb->field_count >> 1;
296} 296}
297 297
298/* Locking: Caller holds q->lock */ 298/* Locking: Caller holds q->vb_lock */
299static int __videobuf_mmap_free(struct videobuf_queue *q) 299static int __videobuf_mmap_free(struct videobuf_queue *q)
300{ 300{
301 int i; 301 int i;
@@ -328,13 +328,13 @@ static int __videobuf_mmap_free(struct videobuf_queue *q)
328int videobuf_mmap_free(struct videobuf_queue *q) 328int videobuf_mmap_free(struct videobuf_queue *q)
329{ 329{
330 int ret; 330 int ret;
331 mutex_lock(&q->lock); 331 mutex_lock(&q->vb_lock);
332 ret = __videobuf_mmap_free(q); 332 ret = __videobuf_mmap_free(q);
333 mutex_unlock(&q->lock); 333 mutex_unlock(&q->vb_lock);
334 return ret; 334 return ret;
335} 335}
336 336
337/* Locking: Caller holds q->lock */ 337/* Locking: Caller holds q->vb_lock */
338static int __videobuf_mmap_setup(struct videobuf_queue *q, 338static int __videobuf_mmap_setup(struct videobuf_queue *q,
339 unsigned int bcount, unsigned int bsize, 339 unsigned int bcount, unsigned int bsize,
340 enum v4l2_memory memory) 340 enum v4l2_memory memory)
@@ -384,9 +384,9 @@ int videobuf_mmap_setup(struct videobuf_queue *q,
384 enum v4l2_memory memory) 384 enum v4l2_memory memory)
385{ 385{
386 int ret; 386 int ret;
387 mutex_lock(&q->lock); 387 mutex_lock(&q->vb_lock);
388 ret = __videobuf_mmap_setup(q, bcount, bsize, memory); 388 ret = __videobuf_mmap_setup(q, bcount, bsize, memory);
389 mutex_unlock(&q->lock); 389 mutex_unlock(&q->vb_lock);
390 return ret; 390 return ret;
391} 391}
392 392
@@ -408,7 +408,7 @@ int videobuf_reqbufs(struct videobuf_queue *q,
408 return -EINVAL; 408 return -EINVAL;
409 } 409 }
410 410
411 mutex_lock(&q->lock); 411 mutex_lock(&q->vb_lock);
412 if (req->type != q->type) { 412 if (req->type != q->type) {
413 dprintk(1, "reqbufs: queue type invalid\n"); 413 dprintk(1, "reqbufs: queue type invalid\n");
414 retval = -EINVAL; 414 retval = -EINVAL;
@@ -444,7 +444,7 @@ int videobuf_reqbufs(struct videobuf_queue *q,
444 req->count = retval; 444 req->count = retval;
445 445
446 done: 446 done:
447 mutex_unlock(&q->lock); 447 mutex_unlock(&q->vb_lock);
448 return retval; 448 return retval;
449} 449}
450 450
@@ -452,7 +452,7 @@ int videobuf_querybuf(struct videobuf_queue *q, struct v4l2_buffer *b)
452{ 452{
453 int ret = -EINVAL; 453 int ret = -EINVAL;
454 454
455 mutex_lock(&q->lock); 455 mutex_lock(&q->vb_lock);
456 if (unlikely(b->type != q->type)) { 456 if (unlikely(b->type != q->type)) {
457 dprintk(1, "querybuf: Wrong type.\n"); 457 dprintk(1, "querybuf: Wrong type.\n");
458 goto done; 458 goto done;
@@ -470,7 +470,7 @@ int videobuf_querybuf(struct videobuf_queue *q, struct v4l2_buffer *b)
470 470
471 ret = 0; 471 ret = 0;
472done: 472done:
473 mutex_unlock(&q->lock); 473 mutex_unlock(&q->vb_lock);
474 return ret; 474 return ret;
475} 475}
476 476
@@ -487,7 +487,7 @@ int videobuf_qbuf(struct videobuf_queue *q,
487 if (b->memory == V4L2_MEMORY_MMAP) 487 if (b->memory == V4L2_MEMORY_MMAP)
488 down_read(&current->mm->mmap_sem); 488 down_read(&current->mm->mmap_sem);
489 489
490 mutex_lock(&q->lock); 490 mutex_lock(&q->vb_lock);
491 retval = -EBUSY; 491 retval = -EBUSY;
492 if (q->reading) { 492 if (q->reading) {
493 dprintk(1, "qbuf: Reading running...\n"); 493 dprintk(1, "qbuf: Reading running...\n");
@@ -573,7 +573,7 @@ int videobuf_qbuf(struct videobuf_queue *q,
573 retval = 0; 573 retval = 0;
574 574
575 done: 575 done:
576 mutex_unlock(&q->lock); 576 mutex_unlock(&q->vb_lock);
577 577
578 if (b->memory == V4L2_MEMORY_MMAP) 578 if (b->memory == V4L2_MEMORY_MMAP)
579 up_read(&current->mm->mmap_sem); 579 up_read(&current->mm->mmap_sem);
@@ -589,7 +589,7 @@ int videobuf_dqbuf(struct videobuf_queue *q,
589 589
590 MAGIC_CHECK(q->int_ops->magic, MAGIC_QTYPE_OPS); 590 MAGIC_CHECK(q->int_ops->magic, MAGIC_QTYPE_OPS);
591 591
592 mutex_lock(&q->lock); 592 mutex_lock(&q->vb_lock);
593 retval = -EBUSY; 593 retval = -EBUSY;
594 if (q->reading) { 594 if (q->reading) {
595 dprintk(1, "dqbuf: Reading running...\n"); 595 dprintk(1, "dqbuf: Reading running...\n");
@@ -632,7 +632,7 @@ int videobuf_dqbuf(struct videobuf_queue *q,
632 videobuf_status(q, b, buf, q->type); 632 videobuf_status(q, b, buf, q->type);
633 633
634 done: 634 done:
635 mutex_unlock(&q->lock); 635 mutex_unlock(&q->vb_lock);
636 return retval; 636 return retval;
637} 637}
638 638
@@ -642,7 +642,7 @@ int videobuf_streamon(struct videobuf_queue *q)
642 unsigned long flags = 0; 642 unsigned long flags = 0;
643 int retval; 643 int retval;
644 644
645 mutex_lock(&q->lock); 645 mutex_lock(&q->vb_lock);
646 retval = -EBUSY; 646 retval = -EBUSY;
647 if (q->reading) 647 if (q->reading)
648 goto done; 648 goto done;
@@ -659,11 +659,11 @@ int videobuf_streamon(struct videobuf_queue *q)
659 spin_unlock_irqrestore(q->irqlock, flags); 659 spin_unlock_irqrestore(q->irqlock, flags);
660 660
661 done: 661 done:
662 mutex_unlock(&q->lock); 662 mutex_unlock(&q->vb_lock);
663 return retval; 663 return retval;
664} 664}
665 665
666/* Locking: Caller holds q->lock */ 666/* Locking: Caller holds q->vb_lock */
667static int __videobuf_streamoff(struct videobuf_queue *q) 667static int __videobuf_streamoff(struct videobuf_queue *q)
668{ 668{
669 if (!q->streaming) 669 if (!q->streaming)
@@ -679,14 +679,14 @@ int videobuf_streamoff(struct videobuf_queue *q)
679{ 679{
680 int retval; 680 int retval;
681 681
682 mutex_lock(&q->lock); 682 mutex_lock(&q->vb_lock);
683 retval = __videobuf_streamoff(q); 683 retval = __videobuf_streamoff(q);
684 mutex_unlock(&q->lock); 684 mutex_unlock(&q->vb_lock);
685 685
686 return retval; 686 return retval;
687} 687}
688 688
689/* Locking: Caller holds q->lock */ 689/* Locking: Caller holds q->vb_lock */
690static ssize_t videobuf_read_zerocopy(struct videobuf_queue *q, 690static ssize_t videobuf_read_zerocopy(struct videobuf_queue *q,
691 char __user *data, 691 char __user *data,
692 size_t count, loff_t *ppos) 692 size_t count, loff_t *ppos)
@@ -745,7 +745,7 @@ ssize_t videobuf_read_one(struct videobuf_queue *q,
745 745
746 MAGIC_CHECK(q->int_ops->magic, MAGIC_QTYPE_OPS); 746 MAGIC_CHECK(q->int_ops->magic, MAGIC_QTYPE_OPS);
747 747
748 mutex_lock(&q->lock); 748 mutex_lock(&q->vb_lock);
749 749
750 nbufs = 1; size = 0; 750 nbufs = 1; size = 0;
751 q->ops->buf_setup(q, &nbufs, &size); 751 q->ops->buf_setup(q, &nbufs, &size);
@@ -817,11 +817,11 @@ ssize_t videobuf_read_one(struct videobuf_queue *q,
817 } 817 }
818 818
819 done: 819 done:
820 mutex_unlock(&q->lock); 820 mutex_unlock(&q->vb_lock);
821 return retval; 821 return retval;
822} 822}
823 823
824/* Locking: Caller holds q->lock */ 824/* Locking: Caller holds q->vb_lock */
825static int __videobuf_read_start(struct videobuf_queue *q) 825static int __videobuf_read_start(struct videobuf_queue *q)
826{ 826{
827 enum v4l2_field field; 827 enum v4l2_field field;
@@ -882,23 +882,23 @@ int videobuf_read_start(struct videobuf_queue *q)
882{ 882{
883 int rc; 883 int rc;
884 884
885 mutex_lock(&q->lock); 885 mutex_lock(&q->vb_lock);
886 rc = __videobuf_read_start(q); 886 rc = __videobuf_read_start(q);
887 mutex_unlock(&q->lock); 887 mutex_unlock(&q->vb_lock);
888 888
889 return rc; 889 return rc;
890} 890}
891 891
892void videobuf_read_stop(struct videobuf_queue *q) 892void videobuf_read_stop(struct videobuf_queue *q)
893{ 893{
894 mutex_lock(&q->lock); 894 mutex_lock(&q->vb_lock);
895 __videobuf_read_stop(q); 895 __videobuf_read_stop(q);
896 mutex_unlock(&q->lock); 896 mutex_unlock(&q->vb_lock);
897} 897}
898 898
899void videobuf_stop(struct videobuf_queue *q) 899void videobuf_stop(struct videobuf_queue *q)
900{ 900{
901 mutex_lock(&q->lock); 901 mutex_lock(&q->vb_lock);
902 902
903 if (q->streaming) 903 if (q->streaming)
904 __videobuf_streamoff(q); 904 __videobuf_streamoff(q);
@@ -906,7 +906,7 @@ void videobuf_stop(struct videobuf_queue *q)
906 if (q->reading) 906 if (q->reading)
907 __videobuf_read_stop(q); 907 __videobuf_read_stop(q);
908 908
909 mutex_unlock(&q->lock); 909 mutex_unlock(&q->vb_lock);
910} 910}
911 911
912 912
@@ -920,7 +920,7 @@ ssize_t videobuf_read_stream(struct videobuf_queue *q,
920 MAGIC_CHECK(q->int_ops->magic, MAGIC_QTYPE_OPS); 920 MAGIC_CHECK(q->int_ops->magic, MAGIC_QTYPE_OPS);
921 921
922 dprintk(2, "%s\n", __FUNCTION__); 922 dprintk(2, "%s\n", __FUNCTION__);
923 mutex_lock(&q->lock); 923 mutex_lock(&q->vb_lock);
924 retval = -EBUSY; 924 retval = -EBUSY;
925 if (q->streaming) 925 if (q->streaming)
926 goto done; 926 goto done;
@@ -980,7 +980,7 @@ ssize_t videobuf_read_stream(struct videobuf_queue *q,
980 } 980 }
981 981
982 done: 982 done:
983 mutex_unlock(&q->lock); 983 mutex_unlock(&q->vb_lock);
984 return retval; 984 return retval;
985} 985}
986 986
@@ -991,7 +991,7 @@ unsigned int videobuf_poll_stream(struct file *file,
991 struct videobuf_buffer *buf = NULL; 991 struct videobuf_buffer *buf = NULL;
992 unsigned int rc = 0; 992 unsigned int rc = 0;
993 993
994 mutex_lock(&q->lock); 994 mutex_lock(&q->vb_lock);
995 if (q->streaming) { 995 if (q->streaming) {
996 if (!list_empty(&q->stream)) 996 if (!list_empty(&q->stream))
997 buf = list_entry(q->stream.next, 997 buf = list_entry(q->stream.next,
@@ -1019,7 +1019,7 @@ unsigned int videobuf_poll_stream(struct file *file,
1019 buf->state == VIDEOBUF_ERROR) 1019 buf->state == VIDEOBUF_ERROR)
1020 rc = POLLIN|POLLRDNORM; 1020 rc = POLLIN|POLLRDNORM;
1021 } 1021 }
1022 mutex_unlock(&q->lock); 1022 mutex_unlock(&q->vb_lock);
1023 return rc; 1023 return rc;
1024} 1024}
1025 1025
@@ -1030,10 +1030,10 @@ int videobuf_mmap_mapper(struct videobuf_queue *q,
1030 1030
1031 MAGIC_CHECK(q->int_ops->magic, MAGIC_QTYPE_OPS); 1031 MAGIC_CHECK(q->int_ops->magic, MAGIC_QTYPE_OPS);
1032 1032
1033 mutex_lock(&q->lock); 1033 mutex_lock(&q->vb_lock);
1034 retval = CALL(q, mmap_mapper, q, vma); 1034 retval = CALL(q, mmap_mapper, q, vma);
1035 q->is_mmapped = 1; 1035 q->is_mmapped = 1;
1036 mutex_unlock(&q->lock); 1036 mutex_unlock(&q->vb_lock);
1037 1037
1038 return retval; 1038 return retval;
1039} 1039}
diff --git a/drivers/media/video/videobuf-dma-sg.c b/drivers/media/video/videobuf-dma-sg.c
index 98efd7ab1f50..53fed4b74ce9 100644
--- a/drivers/media/video/videobuf-dma-sg.c
+++ b/drivers/media/video/videobuf-dma-sg.c
@@ -356,7 +356,7 @@ videobuf_vm_close(struct vm_area_struct *vma)
356 map->count--; 356 map->count--;
357 if (0 == map->count) { 357 if (0 == map->count) {
358 dprintk(1,"munmap %p q=%p\n",map,q); 358 dprintk(1,"munmap %p q=%p\n",map,q);
359 mutex_lock(&q->lock); 359 mutex_lock(&q->vb_lock);
360 for (i = 0; i < VIDEO_MAX_FRAME; i++) { 360 for (i = 0; i < VIDEO_MAX_FRAME; i++) {
361 if (NULL == q->bufs[i]) 361 if (NULL == q->bufs[i])
362 continue; 362 continue;
@@ -373,7 +373,7 @@ videobuf_vm_close(struct vm_area_struct *vma)
373 q->bufs[i]->baddr = 0; 373 q->bufs[i]->baddr = 0;
374 q->ops->buf_release(q,q->bufs[i]); 374 q->ops->buf_release(q,q->bufs[i]);
375 } 375 }
376 mutex_unlock(&q->lock); 376 mutex_unlock(&q->vb_lock);
377 kfree(map); 377 kfree(map);
378 } 378 }
379 return; 379 return;
diff --git a/drivers/media/video/videobuf-vmalloc.c b/drivers/media/video/videobuf-vmalloc.c
index 9b3898347ca5..5266ecc91dab 100644
--- a/drivers/media/video/videobuf-vmalloc.c
+++ b/drivers/media/video/videobuf-vmalloc.c
@@ -70,7 +70,7 @@ videobuf_vm_close(struct vm_area_struct *vma)
70 map->count--; 70 map->count--;
71 if (0 == map->count) { 71 if (0 == map->count) {
72 dprintk(1,"munmap %p q=%p\n",map,q); 72 dprintk(1,"munmap %p q=%p\n",map,q);
73 mutex_lock(&q->lock); 73 mutex_lock(&q->vb_lock);
74 for (i = 0; i < VIDEO_MAX_FRAME; i++) { 74 for (i = 0; i < VIDEO_MAX_FRAME; i++) {
75 if (NULL == q->bufs[i]) 75 if (NULL == q->bufs[i])
76 continue; 76 continue;
@@ -83,7 +83,7 @@ videobuf_vm_close(struct vm_area_struct *vma)
83 q->bufs[i]->map = NULL; 83 q->bufs[i]->map = NULL;
84 q->bufs[i]->baddr = 0; 84 q->bufs[i]->baddr = 0;
85 } 85 }
86 mutex_unlock(&q->lock); 86 mutex_unlock(&q->vb_lock);
87 kfree(map); 87 kfree(map);
88 } 88 }
89 return; 89 return;
@@ -107,7 +107,7 @@ static struct vm_operations_struct videobuf_vm_ops =
107 107
108static void *__videobuf_alloc(size_t size) 108static void *__videobuf_alloc(size_t size)
109{ 109{
110 struct videbuf_vmalloc_memory *mem; 110 struct videobuf_vmalloc_memory *mem;
111 struct videobuf_buffer *vb; 111 struct videobuf_buffer *vb;
112 112
113 vb = kzalloc(size+sizeof(*mem),GFP_KERNEL); 113 vb = kzalloc(size+sizeof(*mem),GFP_KERNEL);
@@ -127,9 +127,7 @@ static int __videobuf_iolock (struct videobuf_queue* q,
127 struct v4l2_framebuffer *fbuf) 127 struct v4l2_framebuffer *fbuf)
128{ 128{
129 int pages; 129 int pages;
130 130 struct videobuf_vmalloc_memory *mem=vb->priv;
131 struct videbuf_vmalloc_memory *mem=vb->priv;
132
133 131
134 BUG_ON(!mem); 132 BUG_ON(!mem);
135 133
@@ -195,7 +193,7 @@ static int __videobuf_mmap_free(struct videobuf_queue *q)
195static int __videobuf_mmap_mapper(struct videobuf_queue *q, 193static int __videobuf_mmap_mapper(struct videobuf_queue *q,
196 struct vm_area_struct *vma) 194 struct vm_area_struct *vma)
197{ 195{
198 struct videbuf_vmalloc_memory *mem; 196 struct videobuf_vmalloc_memory *mem;
199 struct videobuf_mapping *map; 197 struct videobuf_mapping *map;
200 unsigned int first; 198 unsigned int first;
201 int retval; 199 int retval;
@@ -267,7 +265,7 @@ static int __videobuf_copy_to_user ( struct videobuf_queue *q,
267 char __user *data, size_t count, 265 char __user *data, size_t count,
268 int nonblocking ) 266 int nonblocking )
269{ 267{
270 struct videbuf_vmalloc_memory *mem=q->read_buf->priv; 268 struct videobuf_vmalloc_memory *mem=q->read_buf->priv;
271 BUG_ON (!mem); 269 BUG_ON (!mem);
272 MAGIC_CHECK(mem->magic,MAGIC_VMAL_MEM); 270 MAGIC_CHECK(mem->magic,MAGIC_VMAL_MEM);
273 271
@@ -288,7 +286,7 @@ static int __videobuf_copy_stream ( struct videobuf_queue *q,
288 int vbihack, int nonblocking ) 286 int vbihack, int nonblocking )
289{ 287{
290 unsigned int *fc; 288 unsigned int *fc;
291 struct videbuf_vmalloc_memory *mem=q->read_buf->priv; 289 struct videobuf_vmalloc_memory *mem=q->read_buf->priv;
292 BUG_ON (!mem); 290 BUG_ON (!mem);
293 MAGIC_CHECK(mem->magic,MAGIC_VMAL_MEM); 291 MAGIC_CHECK(mem->magic,MAGIC_VMAL_MEM);
294 292
@@ -341,7 +339,7 @@ EXPORT_SYMBOL_GPL(videobuf_queue_vmalloc_init);
341 339
342void *videobuf_to_vmalloc (struct videobuf_buffer *buf) 340void *videobuf_to_vmalloc (struct videobuf_buffer *buf)
343{ 341{
344 struct videbuf_vmalloc_memory *mem=buf->priv; 342 struct videobuf_vmalloc_memory *mem=buf->priv;
345 BUG_ON (!mem); 343 BUG_ON (!mem);
346 MAGIC_CHECK(mem->magic,MAGIC_VMAL_MEM); 344 MAGIC_CHECK(mem->magic,MAGIC_VMAL_MEM);
347 345
@@ -351,7 +349,7 @@ EXPORT_SYMBOL_GPL(videobuf_to_vmalloc);
351 349
352void videobuf_vmalloc_free (struct videobuf_buffer *buf) 350void videobuf_vmalloc_free (struct videobuf_buffer *buf)
353{ 351{
354 struct videbuf_vmalloc_memory *mem=buf->priv; 352 struct videobuf_vmalloc_memory *mem=buf->priv;
355 BUG_ON (!mem); 353 BUG_ON (!mem);
356 354
357 MAGIC_CHECK(mem->magic,MAGIC_VMAL_MEM); 355 MAGIC_CHECK(mem->magic,MAGIC_VMAL_MEM);
diff --git a/drivers/media/video/videodev.c b/drivers/media/video/videodev.c
index 28655f8983c6..0d9b63762a48 100644
--- a/drivers/media/video/videodev.c
+++ b/drivers/media/video/videodev.c
@@ -46,10 +46,373 @@
46#include <linux/videodev.h> 46#include <linux/videodev.h>
47#endif 47#endif
48#include <media/v4l2-common.h> 48#include <media/v4l2-common.h>
49#include <linux/video_decoder.h>
49 50
50#define VIDEO_NUM_DEVICES 256 51#define VIDEO_NUM_DEVICES 256
51#define VIDEO_NAME "video4linux" 52#define VIDEO_NAME "video4linux"
52 53
54/* video4linux standard ID conversion to standard name
55 */
56char *v4l2_norm_to_name(v4l2_std_id id)
57{
58 char *name;
59 u32 myid = id;
60
61 /* HACK: ppc32 architecture doesn't have __ucmpdi2 function to handle
62 64 bit comparations. So, on that architecture, with some gcc
63 variants, compilation fails. Currently, the max value is 30bit wide.
64 */
65 BUG_ON(myid != id);
66
67 switch (myid) {
68 case V4L2_STD_PAL:
69 name = "PAL";
70 break;
71 case V4L2_STD_PAL_BG:
72 name = "PAL-BG";
73 break;
74 case V4L2_STD_PAL_DK:
75 name = "PAL-DK";
76 break;
77 case V4L2_STD_PAL_B:
78 name = "PAL-B";
79 break;
80 case V4L2_STD_PAL_B1:
81 name = "PAL-B1";
82 break;
83 case V4L2_STD_PAL_G:
84 name = "PAL-G";
85 break;
86 case V4L2_STD_PAL_H:
87 name = "PAL-H";
88 break;
89 case V4L2_STD_PAL_I:
90 name = "PAL-I";
91 break;
92 case V4L2_STD_PAL_D:
93 name = "PAL-D";
94 break;
95 case V4L2_STD_PAL_D1:
96 name = "PAL-D1";
97 break;
98 case V4L2_STD_PAL_K:
99 name = "PAL-K";
100 break;
101 case V4L2_STD_PAL_M:
102 name = "PAL-M";
103 break;
104 case V4L2_STD_PAL_N:
105 name = "PAL-N";
106 break;
107 case V4L2_STD_PAL_Nc:
108 name = "PAL-Nc";
109 break;
110 case V4L2_STD_PAL_60:
111 name = "PAL-60";
112 break;
113 case V4L2_STD_NTSC:
114 name = "NTSC";
115 break;
116 case V4L2_STD_NTSC_M:
117 name = "NTSC-M";
118 break;
119 case V4L2_STD_NTSC_M_JP:
120 name = "NTSC-M-JP";
121 break;
122 case V4L2_STD_NTSC_443:
123 name = "NTSC-443";
124 break;
125 case V4L2_STD_NTSC_M_KR:
126 name = "NTSC-M-KR";
127 break;
128 case V4L2_STD_SECAM:
129 name = "SECAM";
130 break;
131 case V4L2_STD_SECAM_DK:
132 name = "SECAM-DK";
133 break;
134 case V4L2_STD_SECAM_B:
135 name = "SECAM-B";
136 break;
137 case V4L2_STD_SECAM_D:
138 name = "SECAM-D";
139 break;
140 case V4L2_STD_SECAM_G:
141 name = "SECAM-G";
142 break;
143 case V4L2_STD_SECAM_H:
144 name = "SECAM-H";
145 break;
146 case V4L2_STD_SECAM_K:
147 name = "SECAM-K";
148 break;
149 case V4L2_STD_SECAM_K1:
150 name = "SECAM-K1";
151 break;
152 case V4L2_STD_SECAM_L:
153 name = "SECAM-L";
154 break;
155 case V4L2_STD_SECAM_LC:
156 name = "SECAM-LC";
157 break;
158 default:
159 name = "Unknown";
160 break;
161 }
162
163 return name;
164}
165EXPORT_SYMBOL(v4l2_norm_to_name);
166
167/* Fill in the fields of a v4l2_standard structure according to the
168 'id' and 'transmission' parameters. Returns negative on error. */
169int v4l2_video_std_construct(struct v4l2_standard *vs,
170 int id, char *name)
171{
172 u32 index = vs->index;
173
174 memset(vs, 0, sizeof(struct v4l2_standard));
175 vs->index = index;
176 vs->id = id;
177 if (id & V4L2_STD_525_60) {
178 vs->frameperiod.numerator = 1001;
179 vs->frameperiod.denominator = 30000;
180 vs->framelines = 525;
181 } else {
182 vs->frameperiod.numerator = 1;
183 vs->frameperiod.denominator = 25;
184 vs->framelines = 625;
185 }
186 strlcpy(vs->name, name, sizeof(vs->name));
187 return 0;
188}
189EXPORT_SYMBOL(v4l2_video_std_construct);
190
191/* ----------------------------------------------------------------- */
192/* some arrays for pretty-printing debug messages of enum types */
193
194char *v4l2_field_names[] = {
195 [V4L2_FIELD_ANY] = "any",
196 [V4L2_FIELD_NONE] = "none",
197 [V4L2_FIELD_TOP] = "top",
198 [V4L2_FIELD_BOTTOM] = "bottom",
199 [V4L2_FIELD_INTERLACED] = "interlaced",
200 [V4L2_FIELD_SEQ_TB] = "seq-tb",
201 [V4L2_FIELD_SEQ_BT] = "seq-bt",
202 [V4L2_FIELD_ALTERNATE] = "alternate",
203 [V4L2_FIELD_INTERLACED_TB] = "interlaced-tb",
204 [V4L2_FIELD_INTERLACED_BT] = "interlaced-bt",
205};
206EXPORT_SYMBOL(v4l2_field_names);
207
208char *v4l2_type_names[] = {
209 [V4L2_BUF_TYPE_VIDEO_CAPTURE] = "video-cap",
210 [V4L2_BUF_TYPE_VIDEO_OVERLAY] = "video-over",
211 [V4L2_BUF_TYPE_VIDEO_OUTPUT] = "video-out",
212 [V4L2_BUF_TYPE_VBI_CAPTURE] = "vbi-cap",
213 [V4L2_BUF_TYPE_VBI_OUTPUT] = "vbi-out",
214 [V4L2_BUF_TYPE_SLICED_VBI_CAPTURE] = "sliced-vbi-cap",
215 [V4L2_BUF_TYPE_SLICED_VBI_OUTPUT] = "sliced-vbi-out",
216 [V4L2_BUF_TYPE_VIDEO_OUTPUT_OVERLAY] = "video-out-over",
217};
218EXPORT_SYMBOL(v4l2_type_names);
219
220static char *v4l2_memory_names[] = {
221 [V4L2_MEMORY_MMAP] = "mmap",
222 [V4L2_MEMORY_USERPTR] = "userptr",
223 [V4L2_MEMORY_OVERLAY] = "overlay",
224};
225
226#define prt_names(a, arr) ((((a) >= 0) && ((a) < ARRAY_SIZE(arr))) ? \
227 arr[a] : "unknown")
228
229/* ------------------------------------------------------------------ */
230/* debug help functions */
231
232#ifdef CONFIG_VIDEO_V4L1_COMPAT
233static const char *v4l1_ioctls[] = {
234 [_IOC_NR(VIDIOCGCAP)] = "VIDIOCGCAP",
235 [_IOC_NR(VIDIOCGCHAN)] = "VIDIOCGCHAN",
236 [_IOC_NR(VIDIOCSCHAN)] = "VIDIOCSCHAN",
237 [_IOC_NR(VIDIOCGTUNER)] = "VIDIOCGTUNER",
238 [_IOC_NR(VIDIOCSTUNER)] = "VIDIOCSTUNER",
239 [_IOC_NR(VIDIOCGPICT)] = "VIDIOCGPICT",
240 [_IOC_NR(VIDIOCSPICT)] = "VIDIOCSPICT",
241 [_IOC_NR(VIDIOCCAPTURE)] = "VIDIOCCAPTURE",
242 [_IOC_NR(VIDIOCGWIN)] = "VIDIOCGWIN",
243 [_IOC_NR(VIDIOCSWIN)] = "VIDIOCSWIN",
244 [_IOC_NR(VIDIOCGFBUF)] = "VIDIOCGFBUF",
245 [_IOC_NR(VIDIOCSFBUF)] = "VIDIOCSFBUF",
246 [_IOC_NR(VIDIOCKEY)] = "VIDIOCKEY",
247 [_IOC_NR(VIDIOCGFREQ)] = "VIDIOCGFREQ",
248 [_IOC_NR(VIDIOCSFREQ)] = "VIDIOCSFREQ",
249 [_IOC_NR(VIDIOCGAUDIO)] = "VIDIOCGAUDIO",
250 [_IOC_NR(VIDIOCSAUDIO)] = "VIDIOCSAUDIO",
251 [_IOC_NR(VIDIOCSYNC)] = "VIDIOCSYNC",
252 [_IOC_NR(VIDIOCMCAPTURE)] = "VIDIOCMCAPTURE",
253 [_IOC_NR(VIDIOCGMBUF)] = "VIDIOCGMBUF",
254 [_IOC_NR(VIDIOCGUNIT)] = "VIDIOCGUNIT",
255 [_IOC_NR(VIDIOCGCAPTURE)] = "VIDIOCGCAPTURE",
256 [_IOC_NR(VIDIOCSCAPTURE)] = "VIDIOCSCAPTURE",
257 [_IOC_NR(VIDIOCSPLAYMODE)] = "VIDIOCSPLAYMODE",
258 [_IOC_NR(VIDIOCSWRITEMODE)] = "VIDIOCSWRITEMODE",
259 [_IOC_NR(VIDIOCGPLAYINFO)] = "VIDIOCGPLAYINFO",
260 [_IOC_NR(VIDIOCSMICROCODE)] = "VIDIOCSMICROCODE",
261 [_IOC_NR(VIDIOCGVBIFMT)] = "VIDIOCGVBIFMT",
262 [_IOC_NR(VIDIOCSVBIFMT)] = "VIDIOCSVBIFMT"
263};
264#define V4L1_IOCTLS ARRAY_SIZE(v4l1_ioctls)
265#endif
266
267static const char *v4l2_ioctls[] = {
268 [_IOC_NR(VIDIOC_QUERYCAP)] = "VIDIOC_QUERYCAP",
269 [_IOC_NR(VIDIOC_RESERVED)] = "VIDIOC_RESERVED",
270 [_IOC_NR(VIDIOC_ENUM_FMT)] = "VIDIOC_ENUM_FMT",
271 [_IOC_NR(VIDIOC_G_FMT)] = "VIDIOC_G_FMT",
272 [_IOC_NR(VIDIOC_S_FMT)] = "VIDIOC_S_FMT",
273 [_IOC_NR(VIDIOC_REQBUFS)] = "VIDIOC_REQBUFS",
274 [_IOC_NR(VIDIOC_QUERYBUF)] = "VIDIOC_QUERYBUF",
275 [_IOC_NR(VIDIOC_G_FBUF)] = "VIDIOC_G_FBUF",
276 [_IOC_NR(VIDIOC_S_FBUF)] = "VIDIOC_S_FBUF",
277 [_IOC_NR(VIDIOC_OVERLAY)] = "VIDIOC_OVERLAY",
278 [_IOC_NR(VIDIOC_QBUF)] = "VIDIOC_QBUF",
279 [_IOC_NR(VIDIOC_DQBUF)] = "VIDIOC_DQBUF",
280 [_IOC_NR(VIDIOC_STREAMON)] = "VIDIOC_STREAMON",
281 [_IOC_NR(VIDIOC_STREAMOFF)] = "VIDIOC_STREAMOFF",
282 [_IOC_NR(VIDIOC_G_PARM)] = "VIDIOC_G_PARM",
283 [_IOC_NR(VIDIOC_S_PARM)] = "VIDIOC_S_PARM",
284 [_IOC_NR(VIDIOC_G_STD)] = "VIDIOC_G_STD",
285 [_IOC_NR(VIDIOC_S_STD)] = "VIDIOC_S_STD",
286 [_IOC_NR(VIDIOC_ENUMSTD)] = "VIDIOC_ENUMSTD",
287 [_IOC_NR(VIDIOC_ENUMINPUT)] = "VIDIOC_ENUMINPUT",
288 [_IOC_NR(VIDIOC_G_CTRL)] = "VIDIOC_G_CTRL",
289 [_IOC_NR(VIDIOC_S_CTRL)] = "VIDIOC_S_CTRL",
290 [_IOC_NR(VIDIOC_G_TUNER)] = "VIDIOC_G_TUNER",
291 [_IOC_NR(VIDIOC_S_TUNER)] = "VIDIOC_S_TUNER",
292 [_IOC_NR(VIDIOC_G_AUDIO)] = "VIDIOC_G_AUDIO",
293 [_IOC_NR(VIDIOC_S_AUDIO)] = "VIDIOC_S_AUDIO",
294 [_IOC_NR(VIDIOC_QUERYCTRL)] = "VIDIOC_QUERYCTRL",
295 [_IOC_NR(VIDIOC_QUERYMENU)] = "VIDIOC_QUERYMENU",
296 [_IOC_NR(VIDIOC_G_INPUT)] = "VIDIOC_G_INPUT",
297 [_IOC_NR(VIDIOC_S_INPUT)] = "VIDIOC_S_INPUT",
298 [_IOC_NR(VIDIOC_G_OUTPUT)] = "VIDIOC_G_OUTPUT",
299 [_IOC_NR(VIDIOC_S_OUTPUT)] = "VIDIOC_S_OUTPUT",
300 [_IOC_NR(VIDIOC_ENUMOUTPUT)] = "VIDIOC_ENUMOUTPUT",
301 [_IOC_NR(VIDIOC_G_AUDOUT)] = "VIDIOC_G_AUDOUT",
302 [_IOC_NR(VIDIOC_S_AUDOUT)] = "VIDIOC_S_AUDOUT",
303 [_IOC_NR(VIDIOC_G_MODULATOR)] = "VIDIOC_G_MODULATOR",
304 [_IOC_NR(VIDIOC_S_MODULATOR)] = "VIDIOC_S_MODULATOR",
305 [_IOC_NR(VIDIOC_G_FREQUENCY)] = "VIDIOC_G_FREQUENCY",
306 [_IOC_NR(VIDIOC_S_FREQUENCY)] = "VIDIOC_S_FREQUENCY",
307 [_IOC_NR(VIDIOC_CROPCAP)] = "VIDIOC_CROPCAP",
308 [_IOC_NR(VIDIOC_G_CROP)] = "VIDIOC_G_CROP",
309 [_IOC_NR(VIDIOC_S_CROP)] = "VIDIOC_S_CROP",
310 [_IOC_NR(VIDIOC_G_JPEGCOMP)] = "VIDIOC_G_JPEGCOMP",
311 [_IOC_NR(VIDIOC_S_JPEGCOMP)] = "VIDIOC_S_JPEGCOMP",
312 [_IOC_NR(VIDIOC_QUERYSTD)] = "VIDIOC_QUERYSTD",
313 [_IOC_NR(VIDIOC_TRY_FMT)] = "VIDIOC_TRY_FMT",
314 [_IOC_NR(VIDIOC_ENUMAUDIO)] = "VIDIOC_ENUMAUDIO",
315 [_IOC_NR(VIDIOC_ENUMAUDOUT)] = "VIDIOC_ENUMAUDOUT",
316 [_IOC_NR(VIDIOC_G_PRIORITY)] = "VIDIOC_G_PRIORITY",
317 [_IOC_NR(VIDIOC_S_PRIORITY)] = "VIDIOC_S_PRIORITY",
318 [_IOC_NR(VIDIOC_G_SLICED_VBI_CAP)] = "VIDIOC_G_SLICED_VBI_CAP",
319 [_IOC_NR(VIDIOC_LOG_STATUS)] = "VIDIOC_LOG_STATUS",
320 [_IOC_NR(VIDIOC_G_EXT_CTRLS)] = "VIDIOC_G_EXT_CTRLS",
321 [_IOC_NR(VIDIOC_S_EXT_CTRLS)] = "VIDIOC_S_EXT_CTRLS",
322 [_IOC_NR(VIDIOC_TRY_EXT_CTRLS)] = "VIDIOC_TRY_EXT_CTRLS",
323#if 1
324 [_IOC_NR(VIDIOC_ENUM_FRAMESIZES)] = "VIDIOC_ENUM_FRAMESIZES",
325 [_IOC_NR(VIDIOC_ENUM_FRAMEINTERVALS)] = "VIDIOC_ENUM_FRAMEINTERVALS",
326 [_IOC_NR(VIDIOC_G_ENC_INDEX)] = "VIDIOC_G_ENC_INDEX",
327 [_IOC_NR(VIDIOC_ENCODER_CMD)] = "VIDIOC_ENCODER_CMD",
328 [_IOC_NR(VIDIOC_TRY_ENCODER_CMD)] = "VIDIOC_TRY_ENCODER_CMD",
329
330 [_IOC_NR(VIDIOC_DBG_S_REGISTER)] = "VIDIOC_DBG_S_REGISTER",
331 [_IOC_NR(VIDIOC_DBG_G_REGISTER)] = "VIDIOC_DBG_G_REGISTER",
332
333 [_IOC_NR(VIDIOC_G_CHIP_IDENT)] = "VIDIOC_G_CHIP_IDENT",
334#endif
335};
336#define V4L2_IOCTLS ARRAY_SIZE(v4l2_ioctls)
337
338static const char *v4l2_int_ioctls[] = {
339#ifdef CONFIG_VIDEO_V4L1_COMPAT
340 [_IOC_NR(DECODER_GET_CAPABILITIES)] = "DECODER_GET_CAPABILITIES",
341 [_IOC_NR(DECODER_GET_STATUS)] = "DECODER_GET_STATUS",
342 [_IOC_NR(DECODER_SET_NORM)] = "DECODER_SET_NORM",
343 [_IOC_NR(DECODER_SET_INPUT)] = "DECODER_SET_INPUT",
344 [_IOC_NR(DECODER_SET_OUTPUT)] = "DECODER_SET_OUTPUT",
345 [_IOC_NR(DECODER_ENABLE_OUTPUT)] = "DECODER_ENABLE_OUTPUT",
346 [_IOC_NR(DECODER_SET_PICTURE)] = "DECODER_SET_PICTURE",
347 [_IOC_NR(DECODER_SET_GPIO)] = "DECODER_SET_GPIO",
348 [_IOC_NR(DECODER_INIT)] = "DECODER_INIT",
349 [_IOC_NR(DECODER_SET_VBI_BYPASS)] = "DECODER_SET_VBI_BYPASS",
350 [_IOC_NR(DECODER_DUMP)] = "DECODER_DUMP",
351#endif
352 [_IOC_NR(AUDC_SET_RADIO)] = "AUDC_SET_RADIO",
353
354 [_IOC_NR(TUNER_SET_TYPE_ADDR)] = "TUNER_SET_TYPE_ADDR",
355 [_IOC_NR(TUNER_SET_STANDBY)] = "TUNER_SET_STANDBY",
356 [_IOC_NR(TUNER_SET_CONFIG)] = "TUNER_SET_CONFIG",
357
358 [_IOC_NR(VIDIOC_INT_S_TUNER_MODE)] = "VIDIOC_INT_S_TUNER_MODE",
359 [_IOC_NR(VIDIOC_INT_RESET)] = "VIDIOC_INT_RESET",
360 [_IOC_NR(VIDIOC_INT_AUDIO_CLOCK_FREQ)] = "VIDIOC_INT_AUDIO_CLOCK_FREQ",
361 [_IOC_NR(VIDIOC_INT_DECODE_VBI_LINE)] = "VIDIOC_INT_DECODE_VBI_LINE",
362 [_IOC_NR(VIDIOC_INT_S_VBI_DATA)] = "VIDIOC_INT_S_VBI_DATA",
363 [_IOC_NR(VIDIOC_INT_G_VBI_DATA)] = "VIDIOC_INT_G_VBI_DATA",
364 [_IOC_NR(VIDIOC_INT_I2S_CLOCK_FREQ)] = "VIDIOC_INT_I2S_CLOCK_FREQ",
365 [_IOC_NR(VIDIOC_INT_S_STANDBY)] = "VIDIOC_INT_S_STANDBY",
366 [_IOC_NR(VIDIOC_INT_S_AUDIO_ROUTING)] = "VIDIOC_INT_S_AUDIO_ROUTING",
367 [_IOC_NR(VIDIOC_INT_G_AUDIO_ROUTING)] = "VIDIOC_INT_G_AUDIO_ROUTING",
368 [_IOC_NR(VIDIOC_INT_S_VIDEO_ROUTING)] = "VIDIOC_INT_S_VIDEO_ROUTING",
369 [_IOC_NR(VIDIOC_INT_G_VIDEO_ROUTING)] = "VIDIOC_INT_G_VIDEO_ROUTING",
370 [_IOC_NR(VIDIOC_INT_S_CRYSTAL_FREQ)] = "VIDIOC_INT_S_CRYSTAL_FREQ",
371 [_IOC_NR(VIDIOC_INT_INIT)] = "VIDIOC_INT_INIT",
372 [_IOC_NR(VIDIOC_INT_G_STD_OUTPUT)] = "VIDIOC_INT_G_STD_OUTPUT",
373 [_IOC_NR(VIDIOC_INT_S_STD_OUTPUT)] = "VIDIOC_INT_S_STD_OUTPUT",
374};
375#define V4L2_INT_IOCTLS ARRAY_SIZE(v4l2_int_ioctls)
376
377/* Common ioctl debug function. This function can be used by
378 external ioctl messages as well as internal V4L ioctl */
379void v4l_printk_ioctl(unsigned int cmd)
380{
381 char *dir;
382
383 switch (_IOC_DIR(cmd)) {
384 case _IOC_NONE: dir = "--"; break;
385 case _IOC_READ: dir = "r-"; break;
386 case _IOC_WRITE: dir = "-w"; break;
387 case _IOC_READ | _IOC_WRITE: dir = "rw"; break;
388 default: dir = "*ERR*"; break;
389 }
390 switch (_IOC_TYPE(cmd)) {
391 case 'd':
392 printk("v4l2_int ioctl %s, dir=%s (0x%08x)\n",
393 (_IOC_NR(cmd) < V4L2_INT_IOCTLS) ?
394 v4l2_int_ioctls[_IOC_NR(cmd)] : "UNKNOWN", dir, cmd);
395 break;
396#ifdef CONFIG_VIDEO_V4L1_COMPAT
397 case 'v':
398 printk("v4l1 ioctl %s, dir=%s (0x%08x)\n",
399 (_IOC_NR(cmd) < V4L1_IOCTLS) ?
400 v4l1_ioctls[_IOC_NR(cmd)] : "UNKNOWN", dir, cmd);
401 break;
402#endif
403 case 'V':
404 printk("v4l2 ioctl %s, dir=%s (0x%08x)\n",
405 (_IOC_NR(cmd) < V4L2_IOCTLS) ?
406 v4l2_ioctls[_IOC_NR(cmd)] : "UNKNOWN", dir, cmd);
407 break;
408
409 default:
410 printk("unknown ioctl '%c', dir=%s, #%d (0x%08x)\n",
411 _IOC_TYPE(cmd), dir, _IOC_NR(cmd), cmd);
412 }
413}
414EXPORT_SYMBOL(v4l_printk_ioctl);
415
53/* 416/*
54 * sysfs stuff 417 * sysfs stuff
55 */ 418 */
@@ -69,11 +432,13 @@ struct video_device *video_device_alloc(void)
69 vfd = kzalloc(sizeof(*vfd),GFP_KERNEL); 432 vfd = kzalloc(sizeof(*vfd),GFP_KERNEL);
70 return vfd; 433 return vfd;
71} 434}
435EXPORT_SYMBOL(video_device_alloc);
72 436
73void video_device_release(struct video_device *vfd) 437void video_device_release(struct video_device *vfd)
74{ 438{
75 kfree(vfd); 439 kfree(vfd);
76} 440}
441EXPORT_SYMBOL(video_device_release);
77 442
78static void video_release(struct device *cd) 443static void video_release(struct device *cd)
79{ 444{
@@ -110,6 +475,7 @@ struct video_device* video_devdata(struct file *file)
110{ 475{
111 return video_device[iminor(file->f_path.dentry->d_inode)]; 476 return video_device[iminor(file->f_path.dentry->d_inode)];
112} 477}
478EXPORT_SYMBOL(video_devdata);
113 479
114/* 480/*
115 * Open a video device - FIXME: Obsoleted 481 * Open a video device - FIXME: Obsoleted
@@ -278,6 +644,7 @@ out:
278 kfree(mbuf); 644 kfree(mbuf);
279 return err; 645 return err;
280} 646}
647EXPORT_SYMBOL(video_usercopy);
281 648
282/* 649/*
283 * open/release helper functions -- handle exclusive opens 650 * open/release helper functions -- handle exclusive opens
@@ -297,6 +664,7 @@ int video_exclusive_open(struct inode *inode, struct file *file)
297 mutex_unlock(&vfl->lock); 664 mutex_unlock(&vfl->lock);
298 return retval; 665 return retval;
299} 666}
667EXPORT_SYMBOL(video_exclusive_open);
300 668
301int video_exclusive_release(struct inode *inode, struct file *file) 669int video_exclusive_release(struct inode *inode, struct file *file)
302{ 670{
@@ -305,41 +673,7 @@ int video_exclusive_release(struct inode *inode, struct file *file)
305 vfl->users--; 673 vfl->users--;
306 return 0; 674 return 0;
307} 675}
308 676EXPORT_SYMBOL(video_exclusive_release);
309static char *v4l2_memory_names[] = {
310 [V4L2_MEMORY_MMAP] = "mmap",
311 [V4L2_MEMORY_USERPTR] = "userptr",
312 [V4L2_MEMORY_OVERLAY] = "overlay",
313};
314
315
316/* FIXME: Those stuff are replicated also on v4l2-common.c */
317static char *v4l2_type_names_FIXME[] = {
318 [V4L2_BUF_TYPE_VIDEO_CAPTURE] = "video-cap",
319 [V4L2_BUF_TYPE_VIDEO_OVERLAY] = "video-over",
320 [V4L2_BUF_TYPE_VIDEO_OUTPUT] = "video-out",
321 [V4L2_BUF_TYPE_VBI_CAPTURE] = "vbi-cap",
322 [V4L2_BUF_TYPE_VBI_OUTPUT] = "vbi-out",
323 [V4L2_BUF_TYPE_SLICED_VBI_OUTPUT] = "sliced-vbi-out",
324 [V4L2_BUF_TYPE_SLICED_VBI_CAPTURE] = "sliced-vbi-capture",
325 [V4L2_BUF_TYPE_VIDEO_OUTPUT_OVERLAY] = "video-out-over",
326 [V4L2_BUF_TYPE_PRIVATE] = "private",
327};
328
329static char *v4l2_field_names_FIXME[] = {
330 [V4L2_FIELD_ANY] = "any",
331 [V4L2_FIELD_NONE] = "none",
332 [V4L2_FIELD_TOP] = "top",
333 [V4L2_FIELD_BOTTOM] = "bottom",
334 [V4L2_FIELD_INTERLACED] = "interlaced",
335 [V4L2_FIELD_SEQ_TB] = "seq-tb",
336 [V4L2_FIELD_SEQ_BT] = "seq-bt",
337 [V4L2_FIELD_ALTERNATE] = "alternate",
338 [V4L2_FIELD_INTERLACED_TB] = "interlaced-tb",
339 [V4L2_FIELD_INTERLACED_BT] = "interlaced-bt",
340};
341
342#define prt_names(a,arr) (((a)>=0)&&((a)<ARRAY_SIZE(arr)))?arr[a]:"unknown"
343 677
344static void dbgbuf(unsigned int cmd, struct video_device *vfd, 678static void dbgbuf(unsigned int cmd, struct video_device *vfd,
345 struct v4l2_buffer *p) 679 struct v4l2_buffer *p)
@@ -354,10 +688,10 @@ static void dbgbuf(unsigned int cmd, struct video_device *vfd,
354 (int)(p->timestamp.tv_sec%60), 688 (int)(p->timestamp.tv_sec%60),
355 p->timestamp.tv_usec, 689 p->timestamp.tv_usec,
356 p->index, 690 p->index,
357 prt_names(p->type,v4l2_type_names_FIXME), 691 prt_names(p->type, v4l2_type_names),
358 p->bytesused,p->flags, 692 p->bytesused, p->flags,
359 p->field,p->sequence, 693 p->field, p->sequence,
360 prt_names(p->memory,v4l2_memory_names), 694 prt_names(p->memory, v4l2_memory_names),
361 p->m.userptr, p->length); 695 p->m.userptr, p->length);
362 dbgarg2 ("timecode= %02d:%02d:%02d type=%d, " 696 dbgarg2 ("timecode= %02d:%02d:%02d type=%d, "
363 "flags=0x%08d, frames=%d, userbits=0x%08x\n", 697 "flags=0x%08d, frames=%d, userbits=0x%08x\n",
@@ -382,8 +716,8 @@ static inline void v4l_print_pix_fmt (struct video_device *vfd,
382 (fmt->pixelformat >> 8) & 0xff, 716 (fmt->pixelformat >> 8) & 0xff,
383 (fmt->pixelformat >> 16) & 0xff, 717 (fmt->pixelformat >> 16) & 0xff,
384 (fmt->pixelformat >> 24) & 0xff, 718 (fmt->pixelformat >> 24) & 0xff,
385 prt_names(fmt->field,v4l2_field_names_FIXME), 719 prt_names(fmt->field, v4l2_field_names),
386 fmt->bytesperline,fmt->sizeimage,fmt->colorspace); 720 fmt->bytesperline, fmt->sizeimage, fmt->colorspace);
387}; 721};
388 722
389 723
@@ -597,7 +931,7 @@ static int __video_do_ioctl(struct inode *inode, struct file *file,
597 931
598 /* FIXME: Should be one dump per type */ 932 /* FIXME: Should be one dump per type */
599 dbgarg (cmd, "type=%s\n", prt_names(type, 933 dbgarg (cmd, "type=%s\n", prt_names(type,
600 v4l2_type_names_FIXME)); 934 v4l2_type_names));
601 935
602 switch (type) { 936 switch (type) {
603 case V4L2_BUF_TYPE_VIDEO_CAPTURE: 937 case V4L2_BUF_TYPE_VIDEO_CAPTURE:
@@ -650,7 +984,7 @@ static int __video_do_ioctl(struct inode *inode, struct file *file,
650 984
651 /* FIXME: Should be one dump per type */ 985 /* FIXME: Should be one dump per type */
652 dbgarg (cmd, "type=%s\n", prt_names(f->type, 986 dbgarg (cmd, "type=%s\n", prt_names(f->type,
653 v4l2_type_names_FIXME)); 987 v4l2_type_names));
654 988
655 switch (f->type) { 989 switch (f->type) {
656 case V4L2_BUF_TYPE_VIDEO_CAPTURE: 990 case V4L2_BUF_TYPE_VIDEO_CAPTURE:
@@ -702,7 +1036,7 @@ static int __video_do_ioctl(struct inode *inode, struct file *file,
702 1036
703 /* FIXME: Should be one dump per type */ 1037 /* FIXME: Should be one dump per type */
704 dbgarg (cmd, "type=%s\n", prt_names(f->type, 1038 dbgarg (cmd, "type=%s\n", prt_names(f->type,
705 v4l2_type_names_FIXME)); 1039 v4l2_type_names));
706 switch (f->type) { 1040 switch (f->type) {
707 case V4L2_BUF_TYPE_VIDEO_CAPTURE: 1041 case V4L2_BUF_TYPE_VIDEO_CAPTURE:
708 if (vfd->vidioc_try_fmt_cap) 1042 if (vfd->vidioc_try_fmt_cap)
@@ -768,8 +1102,8 @@ static int __video_do_ioctl(struct inode *inode, struct file *file,
768 ret=vfd->vidioc_reqbufs(file, fh, p); 1102 ret=vfd->vidioc_reqbufs(file, fh, p);
769 dbgarg (cmd, "count=%d, type=%s, memory=%s\n", 1103 dbgarg (cmd, "count=%d, type=%s, memory=%s\n",
770 p->count, 1104 p->count,
771 prt_names(p->type,v4l2_type_names_FIXME), 1105 prt_names(p->type, v4l2_type_names),
772 prt_names(p->memory,v4l2_memory_names)); 1106 prt_names(p->memory, v4l2_memory_names));
773 break; 1107 break;
774 } 1108 }
775 case VIDIOC_QUERYBUF: 1109 case VIDIOC_QUERYBUF:
@@ -858,7 +1192,7 @@ static int __video_do_ioctl(struct inode *inode, struct file *file,
858 enum v4l2_buf_type i = *(int *)arg; 1192 enum v4l2_buf_type i = *(int *)arg;
859 if (!vfd->vidioc_streamon) 1193 if (!vfd->vidioc_streamon)
860 break; 1194 break;
861 dbgarg (cmd, "type=%s\n", prt_names(i,v4l2_type_names_FIXME)); 1195 dbgarg(cmd, "type=%s\n", prt_names(i, v4l2_type_names));
862 ret=vfd->vidioc_streamon(file, fh,i); 1196 ret=vfd->vidioc_streamon(file, fh,i);
863 break; 1197 break;
864 } 1198 }
@@ -868,7 +1202,7 @@ static int __video_do_ioctl(struct inode *inode, struct file *file,
868 1202
869 if (!vfd->vidioc_streamoff) 1203 if (!vfd->vidioc_streamoff)
870 break; 1204 break;
871 dbgarg (cmd, "type=%s\n", prt_names(i,v4l2_type_names_FIXME)); 1205 dbgarg(cmd, "type=%s\n", prt_names(i, v4l2_type_names));
872 ret=vfd->vidioc_streamoff(file, fh, i); 1206 ret=vfd->vidioc_streamoff(file, fh, i);
873 break; 1207 break;
874 } 1208 }
@@ -1624,7 +1958,7 @@ out:
1624 kfree(mbuf); 1958 kfree(mbuf);
1625 return err; 1959 return err;
1626} 1960}
1627 1961EXPORT_SYMBOL(video_ioctl2);
1628 1962
1629static const struct file_operations video_fops; 1963static const struct file_operations video_fops;
1630 1964
@@ -1743,6 +2077,7 @@ fail_minor:
1743 mutex_unlock(&videodev_lock); 2077 mutex_unlock(&videodev_lock);
1744 return ret; 2078 return ret;
1745} 2079}
2080EXPORT_SYMBOL(video_register_device);
1746 2081
1747/** 2082/**
1748 * video_unregister_device - unregister a video4linux device 2083 * video_unregister_device - unregister a video4linux device
@@ -1762,6 +2097,7 @@ void video_unregister_device(struct video_device *vfd)
1762 device_unregister(&vfd->class_dev); 2097 device_unregister(&vfd->class_dev);
1763 mutex_unlock(&videodev_lock); 2098 mutex_unlock(&videodev_lock);
1764} 2099}
2100EXPORT_SYMBOL(video_unregister_device);
1765 2101
1766/* 2102/*
1767 * Video fs operations 2103 * Video fs operations
@@ -1806,16 +2142,6 @@ static void __exit videodev_exit(void)
1806module_init(videodev_init) 2142module_init(videodev_init)
1807module_exit(videodev_exit) 2143module_exit(videodev_exit)
1808 2144
1809EXPORT_SYMBOL(video_register_device);
1810EXPORT_SYMBOL(video_unregister_device);
1811EXPORT_SYMBOL(video_devdata);
1812EXPORT_SYMBOL(video_usercopy);
1813EXPORT_SYMBOL(video_exclusive_open);
1814EXPORT_SYMBOL(video_exclusive_release);
1815EXPORT_SYMBOL(video_ioctl2);
1816EXPORT_SYMBOL(video_device_alloc);
1817EXPORT_SYMBOL(video_device_release);
1818
1819MODULE_AUTHOR("Alan Cox, Mauro Carvalho Chehab <mchehab@infradead.org>"); 2145MODULE_AUTHOR("Alan Cox, Mauro Carvalho Chehab <mchehab@infradead.org>");
1820MODULE_DESCRIPTION("Device registrar for Video4Linux drivers v2"); 2146MODULE_DESCRIPTION("Device registrar for Video4Linux drivers v2");
1821MODULE_LICENSE("GPL"); 2147MODULE_LICENSE("GPL");
diff --git a/drivers/media/video/zoran.h b/drivers/media/video/zoran.h
index 937c4a616c0e..498a43c1f2b1 100644
--- a/drivers/media/video/zoran.h
+++ b/drivers/media/video/zoran.h
@@ -221,15 +221,15 @@ enum zoran_map_mode {
221}; 221};
222 222
223enum gpio_type { 223enum gpio_type {
224 GPIO_JPEG_SLEEP = 0, 224 ZR_GPIO_JPEG_SLEEP = 0,
225 GPIO_JPEG_RESET, 225 ZR_GPIO_JPEG_RESET,
226 GPIO_JPEG_FRAME, 226 ZR_GPIO_JPEG_FRAME,
227 GPIO_VID_DIR, 227 ZR_GPIO_VID_DIR,
228 GPIO_VID_EN, 228 ZR_GPIO_VID_EN,
229 GPIO_VID_RESET, 229 ZR_GPIO_VID_RESET,
230 GPIO_CLK_SEL1, 230 ZR_GPIO_CLK_SEL1,
231 GPIO_CLK_SEL2, 231 ZR_GPIO_CLK_SEL2,
232 GPIO_MAX, 232 ZR_GPIO_MAX,
233}; 233};
234 234
235enum gpcs_type { 235enum gpcs_type {
@@ -378,11 +378,11 @@ struct card_info {
378 378
379 u32 jpeg_int; /* JPEG interrupt */ 379 u32 jpeg_int; /* JPEG interrupt */
380 u32 vsync_int; /* VSYNC interrupt */ 380 u32 vsync_int; /* VSYNC interrupt */
381 s8 gpio[GPIO_MAX]; 381 s8 gpio[ZR_GPIO_MAX];
382 u8 gpcs[GPCS_MAX]; 382 u8 gpcs[GPCS_MAX];
383 383
384 struct vfe_polarity vfe_pol; 384 struct vfe_polarity vfe_pol;
385 u8 gpio_pol[GPIO_MAX]; 385 u8 gpio_pol[ZR_GPIO_MAX];
386 386
387 /* is the /GWS line conected? */ 387 /* is the /GWS line conected? */
388 u8 gws_not_connected; 388 u8 gws_not_connected;
diff --git a/drivers/media/video/zoran_device.c b/drivers/media/video/zoran_device.c
index 68c7c505587e..f97c20692057 100644
--- a/drivers/media/video/zoran_device.c
+++ b/drivers/media/video/zoran_device.c
@@ -250,7 +250,7 @@ void
250jpeg_codec_sleep (struct zoran *zr, 250jpeg_codec_sleep (struct zoran *zr,
251 int sleep) 251 int sleep)
252{ 252{
253 GPIO(zr, zr->card.gpio[GPIO_JPEG_SLEEP], !sleep); 253 GPIO(zr, zr->card.gpio[ZR_GPIO_JPEG_SLEEP], !sleep);
254 if (!sleep) { 254 if (!sleep) {
255 dprintk(3, 255 dprintk(3,
256 KERN_DEBUG 256 KERN_DEBUG
@@ -277,9 +277,9 @@ jpeg_codec_reset (struct zoran *zr)
277 0); 277 0);
278 udelay(2); 278 udelay(2);
279 } else { 279 } else {
280 GPIO(zr, zr->card.gpio[GPIO_JPEG_RESET], 0); 280 GPIO(zr, zr->card.gpio[ZR_GPIO_JPEG_RESET], 0);
281 udelay(2); 281 udelay(2);
282 GPIO(zr, zr->card.gpio[GPIO_JPEG_RESET], 1); 282 GPIO(zr, zr->card.gpio[ZR_GPIO_JPEG_RESET], 1);
283 udelay(2); 283 udelay(2);
284 } 284 }
285 285
@@ -688,7 +688,7 @@ static inline void
688set_frame (struct zoran *zr, 688set_frame (struct zoran *zr,
689 int val) 689 int val)
690{ 690{
691 GPIO(zr, zr->card.gpio[GPIO_JPEG_FRAME], val); 691 GPIO(zr, zr->card.gpio[ZR_GPIO_JPEG_FRAME], val);
692} 692}
693 693
694static void 694static void
@@ -704,8 +704,8 @@ set_videobus_dir (struct zoran *zr,
704 GPIO(zr, 5, 1); 704 GPIO(zr, 5, 1);
705 break; 705 break;
706 default: 706 default:
707 GPIO(zr, zr->card.gpio[GPIO_VID_DIR], 707 GPIO(zr, zr->card.gpio[ZR_GPIO_VID_DIR],
708 zr->card.gpio_pol[GPIO_VID_DIR] ? !val : val); 708 zr->card.gpio_pol[ZR_GPIO_VID_DIR] ? !val : val);
709 break; 709 break;
710 } 710 }
711} 711}
diff --git a/drivers/media/video/zr364xx.c b/drivers/media/video/zr364xx.c
index 1fdbb46de7f3..1b44784d0efb 100644
--- a/drivers/media/video/zr364xx.c
+++ b/drivers/media/video/zr364xx.c
@@ -93,6 +93,8 @@ static struct usb_device_id device_table[] = {
93 {USB_DEVICE(0x06d6, 0x0034), .driver_info = METHOD0 }, 93 {USB_DEVICE(0x06d6, 0x0034), .driver_info = METHOD0 },
94 {USB_DEVICE(0x0a17, 0x0062), .driver_info = METHOD2 }, 94 {USB_DEVICE(0x0a17, 0x0062), .driver_info = METHOD2 },
95 {USB_DEVICE(0x06d6, 0x003b), .driver_info = METHOD0 }, 95 {USB_DEVICE(0x06d6, 0x003b), .driver_info = METHOD0 },
96 {USB_DEVICE(0x0a17, 0x004e), .driver_info = METHOD2 },
97 {USB_DEVICE(0x041e, 0x405d), .driver_info = METHOD2 },
96 {} /* Terminating entry */ 98 {} /* Terminating entry */
97}; 99};
98 100
diff --git a/drivers/message/fusion/mptbase.c b/drivers/message/fusion/mptbase.c
index bfda731696f7..0c303c84b37b 100644
--- a/drivers/message/fusion/mptbase.c
+++ b/drivers/message/fusion/mptbase.c
@@ -1481,15 +1481,15 @@ mpt_attach(struct pci_dev *pdev, const struct pci_device_id *id)
1481 1481
1482 ioc->bars = pci_select_bars(pdev, IORESOURCE_MEM); 1482 ioc->bars = pci_select_bars(pdev, IORESOURCE_MEM);
1483 if (pci_enable_device_mem(pdev)) { 1483 if (pci_enable_device_mem(pdev)) {
1484 kfree(ioc);
1485 printk(MYIOC_s_ERR_FMT "pci_enable_device_mem() " 1484 printk(MYIOC_s_ERR_FMT "pci_enable_device_mem() "
1486 "failed\n", ioc->name); 1485 "failed\n", ioc->name);
1486 kfree(ioc);
1487 return r; 1487 return r;
1488 } 1488 }
1489 if (pci_request_selected_regions(pdev, ioc->bars, "mpt")) { 1489 if (pci_request_selected_regions(pdev, ioc->bars, "mpt")) {
1490 kfree(ioc);
1491 printk(MYIOC_s_ERR_FMT "pci_request_selected_regions() with " 1490 printk(MYIOC_s_ERR_FMT "pci_request_selected_regions() with "
1492 "MEM failed\n", ioc->name); 1491 "MEM failed\n", ioc->name);
1492 kfree(ioc);
1493 return r; 1493 return r;
1494 } 1494 }
1495 1495
diff --git a/drivers/message/fusion/mptbase.h b/drivers/message/fusion/mptbase.h
index d83ea96fe135..caadc68c3000 100644
--- a/drivers/message/fusion/mptbase.h
+++ b/drivers/message/fusion/mptbase.h
@@ -923,7 +923,7 @@ extern struct proc_dir_entry *mpt_proc_root_dir;
923/*=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=*/ 923/*=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=*/
924#endif /* } __KERNEL__ */ 924#endif /* } __KERNEL__ */
925 925
926#if defined(__alpha__) || defined(__sparc_v9__) || defined(__ia64__) || defined(__x86_64__) || defined(__powerpc__) 926#ifdef CONFIG_64BIT
927#define CAST_U32_TO_PTR(x) ((void *)(u64)x) 927#define CAST_U32_TO_PTR(x) ((void *)(u64)x)
928#define CAST_PTR_TO_U32(x) ((u32)(u64)x) 928#define CAST_PTR_TO_U32(x) ((u32)(u64)x)
929#else 929#else
diff --git a/drivers/misc/Kconfig b/drivers/misc/Kconfig
index 1abc95ca9dfa..982e27b86d10 100644
--- a/drivers/misc/Kconfig
+++ b/drivers/misc/Kconfig
@@ -258,6 +258,23 @@ config THINKPAD_ACPI_BAY
258 258
259 If you are not sure, say Y here. 259 If you are not sure, say Y here.
260 260
261config THINKPAD_ACPI_VIDEO
262 bool "Video output control support"
263 depends on THINKPAD_ACPI
264 default y
265 ---help---
266 Allows the thinkpad_acpi driver to provide an interface to control
267 the various video output ports.
268
269 This feature often won't work well, depending on ThinkPad model,
270 display state, video output devices in use, whether there is a X
271 server running, phase of the moon, and the current mood of
272 Schroedinger's cat. If you can use X.org's RandR to control
273 your ThinkPad's video output ports instead of this feature,
274 don't think twice: do it and say N here to save some memory.
275
276 If you are not sure, say Y here.
277
261config THINKPAD_ACPI_HOTKEY_POLL 278config THINKPAD_ACPI_HOTKEY_POLL
262 bool "Suport NVRAM polling for hot keys" 279 bool "Suport NVRAM polling for hot keys"
263 depends on THINKPAD_ACPI 280 depends on THINKPAD_ACPI
diff --git a/drivers/misc/acer-wmi.c b/drivers/misc/acer-wmi.c
index d7aea93081f2..74d12b4a3abd 100644
--- a/drivers/misc/acer-wmi.c
+++ b/drivers/misc/acer-wmi.c
@@ -273,6 +273,15 @@ static struct dmi_system_id acer_quirks[] = {
273 }, 273 },
274 { 274 {
275 .callback = dmi_matched, 275 .callback = dmi_matched,
276 .ident = "Acer TravelMate 4200",
277 .matches = {
278 DMI_MATCH(DMI_SYS_VENDOR, "Acer"),
279 DMI_MATCH(DMI_PRODUCT_NAME, "TravelMate 4200"),
280 },
281 .driver_data = &quirk_acer_travelmate_2490,
282 },
283 {
284 .callback = dmi_matched,
276 .ident = "Medion MD 98300", 285 .ident = "Medion MD 98300",
277 .matches = { 286 .matches = {
278 DMI_MATCH(DMI_SYS_VENDOR, "MEDION"), 287 DMI_MATCH(DMI_SYS_VENDOR, "MEDION"),
diff --git a/drivers/misc/intel_menlow.c b/drivers/misc/intel_menlow.c
index f70984ab1e1b..de16e88eb8d3 100644
--- a/drivers/misc/intel_menlow.c
+++ b/drivers/misc/intel_menlow.c
@@ -170,10 +170,13 @@ static int intel_menlow_memory_add(struct acpi_device *device)
170 170
171 cdev = thermal_cooling_device_register("Memory controller", device, 171 cdev = thermal_cooling_device_register("Memory controller", device,
172 &memory_cooling_ops); 172 &memory_cooling_ops);
173 acpi_driver_data(device) = cdev; 173 if (IS_ERR(cdev)) {
174 if (!cdev) 174 result = PTR_ERR(cdev);
175 result = -ENODEV; 175 goto end;
176 else { 176 }
177
178 if (cdev) {
179 acpi_driver_data(device) = cdev;
177 result = sysfs_create_link(&device->dev.kobj, 180 result = sysfs_create_link(&device->dev.kobj,
178 &cdev->device.kobj, "thermal_cooling"); 181 &cdev->device.kobj, "thermal_cooling");
179 if (result) 182 if (result)
diff --git a/drivers/misc/thinkpad_acpi.c b/drivers/misc/thinkpad_acpi.c
index e2c7edd206a6..bb269d0c677e 100644
--- a/drivers/misc/thinkpad_acpi.c
+++ b/drivers/misc/thinkpad_acpi.c
@@ -221,6 +221,7 @@ static struct {
221 u32 hotkey:1; 221 u32 hotkey:1;
222 u32 hotkey_mask:1; 222 u32 hotkey_mask:1;
223 u32 hotkey_wlsw:1; 223 u32 hotkey_wlsw:1;
224 u32 hotkey_tablet:1;
224 u32 light:1; 225 u32 light:1;
225 u32 light_status:1; 226 u32 light_status:1;
226 u32 bright_16levels:1; 227 u32 bright_16levels:1;
@@ -301,6 +302,13 @@ TPACPI_HANDLE(hkey, ec, "\\_SB.HKEY", /* 600e/x, 770e, 770x */
301 "HKEY", /* all others */ 302 "HKEY", /* all others */
302 ); /* 570 */ 303 ); /* 570 */
303 304
305TPACPI_HANDLE(vid, root, "\\_SB.PCI.AGP.VGA", /* 570 */
306 "\\_SB.PCI0.AGP0.VID0", /* 600e/x, 770x */
307 "\\_SB.PCI0.VID0", /* 770e */
308 "\\_SB.PCI0.VID", /* A21e, G4x, R50e, X30, X40 */
309 "\\_SB.PCI0.AGP.VID", /* all others */
310 ); /* R30, R31 */
311
304 312
305/************************************************************************* 313/*************************************************************************
306 * ACPI helpers 314 * ACPI helpers
@@ -1053,6 +1061,9 @@ static struct attribute_set *hotkey_dev_attributes;
1053#define HOTKEY_CONFIG_CRITICAL_END 1061#define HOTKEY_CONFIG_CRITICAL_END
1054#endif /* CONFIG_THINKPAD_ACPI_HOTKEY_POLL */ 1062#endif /* CONFIG_THINKPAD_ACPI_HOTKEY_POLL */
1055 1063
1064/* HKEY.MHKG() return bits */
1065#define TP_HOTKEY_TABLET_MASK (1 << 3)
1066
1056static int hotkey_get_wlsw(int *status) 1067static int hotkey_get_wlsw(int *status)
1057{ 1068{
1058 if (!acpi_evalf(hkey_handle, status, "WLSW", "d")) 1069 if (!acpi_evalf(hkey_handle, status, "WLSW", "d"))
@@ -1060,6 +1071,16 @@ static int hotkey_get_wlsw(int *status)
1060 return 0; 1071 return 0;
1061} 1072}
1062 1073
1074static int hotkey_get_tablet_mode(int *status)
1075{
1076 int s;
1077
1078 if (!acpi_evalf(hkey_handle, &s, "MHKG", "d"))
1079 return -EIO;
1080
1081 return ((s & TP_HOTKEY_TABLET_MASK) != 0);
1082}
1083
1063/* 1084/*
1064 * Call with hotkey_mutex held 1085 * Call with hotkey_mutex held
1065 */ 1086 */
@@ -1154,15 +1175,31 @@ static void tpacpi_input_send_radiosw(void)
1154{ 1175{
1155 int wlsw; 1176 int wlsw;
1156 1177
1157 mutex_lock(&tpacpi_inputdev_send_mutex);
1158
1159 if (tp_features.hotkey_wlsw && !hotkey_get_wlsw(&wlsw)) { 1178 if (tp_features.hotkey_wlsw && !hotkey_get_wlsw(&wlsw)) {
1179 mutex_lock(&tpacpi_inputdev_send_mutex);
1180
1160 input_report_switch(tpacpi_inputdev, 1181 input_report_switch(tpacpi_inputdev,
1161 SW_RADIO, !!wlsw); 1182 SW_RADIO, !!wlsw);
1162 input_sync(tpacpi_inputdev); 1183 input_sync(tpacpi_inputdev);
1184
1185 mutex_unlock(&tpacpi_inputdev_send_mutex);
1163 } 1186 }
1187}
1188
1189static void tpacpi_input_send_tabletsw(void)
1190{
1191 int state;
1192
1193 if (tp_features.hotkey_tablet &&
1194 !hotkey_get_tablet_mode(&state)) {
1195 mutex_lock(&tpacpi_inputdev_send_mutex);
1164 1196
1165 mutex_unlock(&tpacpi_inputdev_send_mutex); 1197 input_report_switch(tpacpi_inputdev,
1198 SW_TABLET_MODE, !!state);
1199 input_sync(tpacpi_inputdev);
1200
1201 mutex_unlock(&tpacpi_inputdev_send_mutex);
1202 }
1166} 1203}
1167 1204
1168static void tpacpi_input_send_key(unsigned int scancode) 1205static void tpacpi_input_send_key(unsigned int scancode)
@@ -1417,6 +1454,14 @@ static void hotkey_poll_setup_safe(int may_warn)
1417 mutex_unlock(&hotkey_mutex); 1454 mutex_unlock(&hotkey_mutex);
1418} 1455}
1419 1456
1457#else /* CONFIG_THINKPAD_ACPI_HOTKEY_POLL */
1458
1459static void hotkey_poll_setup_safe(int __unused)
1460{
1461}
1462
1463#endif /* CONFIG_THINKPAD_ACPI_HOTKEY_POLL */
1464
1420static int hotkey_inputdev_open(struct input_dev *dev) 1465static int hotkey_inputdev_open(struct input_dev *dev)
1421{ 1466{
1422 switch (tpacpi_lifecycle) { 1467 switch (tpacpi_lifecycle) {
@@ -1444,7 +1489,6 @@ static void hotkey_inputdev_close(struct input_dev *dev)
1444 if (tpacpi_lifecycle == TPACPI_LIFE_RUNNING) 1489 if (tpacpi_lifecycle == TPACPI_LIFE_RUNNING)
1445 hotkey_poll_setup_safe(0); 1490 hotkey_poll_setup_safe(0);
1446} 1491}
1447#endif /* CONFIG_THINKPAD_ACPI_HOTKEY_POLL */
1448 1492
1449/* sysfs hotkey enable ------------------------------------------------- */ 1493/* sysfs hotkey enable ------------------------------------------------- */
1450static ssize_t hotkey_enable_show(struct device *dev, 1494static ssize_t hotkey_enable_show(struct device *dev,
@@ -1666,6 +1710,29 @@ static void hotkey_radio_sw_notify_change(void)
1666 "hotkey_radio_sw"); 1710 "hotkey_radio_sw");
1667} 1711}
1668 1712
1713/* sysfs hotkey tablet mode (pollable) --------------------------------- */
1714static ssize_t hotkey_tablet_mode_show(struct device *dev,
1715 struct device_attribute *attr,
1716 char *buf)
1717{
1718 int res, s;
1719 res = hotkey_get_tablet_mode(&s);
1720 if (res < 0)
1721 return res;
1722
1723 return snprintf(buf, PAGE_SIZE, "%d\n", !!s);
1724}
1725
1726static struct device_attribute dev_attr_hotkey_tablet_mode =
1727 __ATTR(hotkey_tablet_mode, S_IRUGO, hotkey_tablet_mode_show, NULL);
1728
1729static void hotkey_tablet_mode_notify_change(void)
1730{
1731 if (tp_features.hotkey_tablet)
1732 sysfs_notify(&tpacpi_pdev->dev.kobj, NULL,
1733 "hotkey_tablet_mode");
1734}
1735
1669/* sysfs hotkey report_mode -------------------------------------------- */ 1736/* sysfs hotkey report_mode -------------------------------------------- */
1670static ssize_t hotkey_report_mode_show(struct device *dev, 1737static ssize_t hotkey_report_mode_show(struct device *dev,
1671 struct device_attribute *attr, 1738 struct device_attribute *attr,
@@ -1878,7 +1945,7 @@ static int __init hotkey_init(struct ibm_init_struct *iibm)
1878 str_supported(tp_features.hotkey)); 1945 str_supported(tp_features.hotkey));
1879 1946
1880 if (tp_features.hotkey) { 1947 if (tp_features.hotkey) {
1881 hotkey_dev_attributes = create_attr_set(12, NULL); 1948 hotkey_dev_attributes = create_attr_set(13, NULL);
1882 if (!hotkey_dev_attributes) 1949 if (!hotkey_dev_attributes)
1883 return -ENOMEM; 1950 return -ENOMEM;
1884 res = add_many_to_attr_set(hotkey_dev_attributes, 1951 res = add_many_to_attr_set(hotkey_dev_attributes,
@@ -1957,6 +2024,18 @@ static int __init hotkey_init(struct ibm_init_struct *iibm)
1957 &dev_attr_hotkey_radio_sw.attr); 2024 &dev_attr_hotkey_radio_sw.attr);
1958 } 2025 }
1959 2026
2027 /* For X41t, X60t, X61t Tablets... */
2028 if (!res && acpi_evalf(hkey_handle, &status, "MHKG", "qd")) {
2029 tp_features.hotkey_tablet = 1;
2030 printk(TPACPI_INFO
2031 "possible tablet mode switch found; "
2032 "ThinkPad in %s mode\n",
2033 (status & TP_HOTKEY_TABLET_MASK)?
2034 "tablet" : "laptop");
2035 res = add_to_attr_set(hotkey_dev_attributes,
2036 &dev_attr_hotkey_tablet_mode.attr);
2037 }
2038
1960 if (!res) 2039 if (!res)
1961 res = register_attr_set_with_sysfs( 2040 res = register_attr_set_with_sysfs(
1962 hotkey_dev_attributes, 2041 hotkey_dev_attributes,
@@ -2006,6 +2085,10 @@ static int __init hotkey_init(struct ibm_init_struct *iibm)
2006 set_bit(EV_SW, tpacpi_inputdev->evbit); 2085 set_bit(EV_SW, tpacpi_inputdev->evbit);
2007 set_bit(SW_RADIO, tpacpi_inputdev->swbit); 2086 set_bit(SW_RADIO, tpacpi_inputdev->swbit);
2008 } 2087 }
2088 if (tp_features.hotkey_tablet) {
2089 set_bit(EV_SW, tpacpi_inputdev->evbit);
2090 set_bit(SW_TABLET_MODE, tpacpi_inputdev->swbit);
2091 }
2009 2092
2010 dbg_printk(TPACPI_DBG_INIT, 2093 dbg_printk(TPACPI_DBG_INIT,
2011 "enabling hot key handling\n"); 2094 "enabling hot key handling\n");
@@ -2023,12 +2106,12 @@ static int __init hotkey_init(struct ibm_init_struct *iibm)
2023 (hotkey_report_mode < 2) ? 2106 (hotkey_report_mode < 2) ?
2024 "enabled" : "disabled"); 2107 "enabled" : "disabled");
2025 2108
2026#ifdef CONFIG_THINKPAD_ACPI_HOTKEY_POLL
2027 tpacpi_inputdev->open = &hotkey_inputdev_open; 2109 tpacpi_inputdev->open = &hotkey_inputdev_open;
2028 tpacpi_inputdev->close = &hotkey_inputdev_close; 2110 tpacpi_inputdev->close = &hotkey_inputdev_close;
2029 2111
2030 hotkey_poll_setup_safe(1); 2112 hotkey_poll_setup_safe(1);
2031#endif 2113 tpacpi_input_send_radiosw();
2114 tpacpi_input_send_tabletsw();
2032 } 2115 }
2033 2116
2034 return (tp_features.hotkey)? 0 : 1; 2117 return (tp_features.hotkey)? 0 : 1;
@@ -2156,11 +2239,15 @@ static void hotkey_notify(struct ibm_struct *ibm, u32 event)
2156 /* 0x5000-0x5FFF: human interface helpers */ 2239 /* 0x5000-0x5FFF: human interface helpers */
2157 switch (hkey) { 2240 switch (hkey) {
2158 case 0x5010: /* Lenovo new BIOS: brightness changed */ 2241 case 0x5010: /* Lenovo new BIOS: brightness changed */
2159 case 0x5009: /* X61t: swivel up (tablet mode) */
2160 case 0x500a: /* X61t: swivel down (normal mode) */
2161 case 0x500b: /* X61t: tablet pen inserted into bay */ 2242 case 0x500b: /* X61t: tablet pen inserted into bay */
2162 case 0x500c: /* X61t: tablet pen removed from bay */ 2243 case 0x500c: /* X61t: tablet pen removed from bay */
2163 break; 2244 break;
2245 case 0x5009: /* X41t-X61t: swivel up (tablet mode) */
2246 case 0x500a: /* X41t-X61t: swivel down (normal mode) */
2247 tpacpi_input_send_tabletsw();
2248 hotkey_tablet_mode_notify_change();
2249 send_acpi_ev = 0;
2250 break;
2164 case 0x5001: 2251 case 0x5001:
2165 case 0x5002: 2252 case 0x5002:
2166 /* LID switch events. Do not propagate */ 2253 /* LID switch events. Do not propagate */
@@ -2219,11 +2306,10 @@ static void hotkey_resume(void)
2219 "from firmware\n"); 2306 "from firmware\n");
2220 tpacpi_input_send_radiosw(); 2307 tpacpi_input_send_radiosw();
2221 hotkey_radio_sw_notify_change(); 2308 hotkey_radio_sw_notify_change();
2309 hotkey_tablet_mode_notify_change();
2222 hotkey_wakeup_reason_notify_change(); 2310 hotkey_wakeup_reason_notify_change();
2223 hotkey_wakeup_hotunplug_complete_notify_change(); 2311 hotkey_wakeup_hotunplug_complete_notify_change();
2224#ifdef CONFIG_THINKPAD_ACPI_HOTKEY_POLL
2225 hotkey_poll_setup_safe(0); 2312 hotkey_poll_setup_safe(0);
2226#endif
2227} 2313}
2228 2314
2229/* procfs -------------------------------------------------------------- */ 2315/* procfs -------------------------------------------------------------- */
@@ -2676,6 +2762,8 @@ static struct ibm_struct wan_driver_data = {
2676 * Video subdriver 2762 * Video subdriver
2677 */ 2763 */
2678 2764
2765#ifdef CONFIG_THINKPAD_ACPI_VIDEO
2766
2679enum video_access_mode { 2767enum video_access_mode {
2680 TPACPI_VIDEO_NONE = 0, 2768 TPACPI_VIDEO_NONE = 0,
2681 TPACPI_VIDEO_570, /* 570 */ 2769 TPACPI_VIDEO_570, /* 570 */
@@ -2703,13 +2791,6 @@ static int video_orig_autosw;
2703static int video_autosw_get(void); 2791static int video_autosw_get(void);
2704static int video_autosw_set(int enable); 2792static int video_autosw_set(int enable);
2705 2793
2706TPACPI_HANDLE(vid, root, "\\_SB.PCI.AGP.VGA", /* 570 */
2707 "\\_SB.PCI0.AGP0.VID0", /* 600e/x, 770x */
2708 "\\_SB.PCI0.VID0", /* 770e */
2709 "\\_SB.PCI0.VID", /* A21e, G4x, R50e, X30, X40 */
2710 "\\_SB.PCI0.AGP.VID", /* all others */
2711 ); /* R30, R31 */
2712
2713TPACPI_HANDLE(vid2, root, "\\_SB.PCI0.AGPB.VID"); /* G41 */ 2794TPACPI_HANDLE(vid2, root, "\\_SB.PCI0.AGPB.VID"); /* G41 */
2714 2795
2715static int __init video_init(struct ibm_init_struct *iibm) 2796static int __init video_init(struct ibm_init_struct *iibm)
@@ -3019,6 +3100,8 @@ static struct ibm_struct video_driver_data = {
3019 .exit = video_exit, 3100 .exit = video_exit,
3020}; 3101};
3021 3102
3103#endif /* CONFIG_THINKPAD_ACPI_VIDEO */
3104
3022/************************************************************************* 3105/*************************************************************************
3023 * Light (thinklight) subdriver 3106 * Light (thinklight) subdriver
3024 */ 3107 */
@@ -5803,10 +5886,12 @@ static struct ibm_init_struct ibms_init[] __initdata = {
5803 .init = wan_init, 5886 .init = wan_init,
5804 .data = &wan_driver_data, 5887 .data = &wan_driver_data,
5805 }, 5888 },
5889#ifdef CONFIG_THINKPAD_ACPI_VIDEO
5806 { 5890 {
5807 .init = video_init, 5891 .init = video_init,
5808 .data = &video_driver_data, 5892 .data = &video_driver_data,
5809 }, 5893 },
5894#endif
5810 { 5895 {
5811 .init = light_init, 5896 .init = light_init,
5812 .data = &light_driver_data, 5897 .data = &light_driver_data,
@@ -5918,7 +6003,7 @@ MODULE_PARM_DESC(hotkey_report_mode,
5918 6003
5919#define TPACPI_PARAM(feature) \ 6004#define TPACPI_PARAM(feature) \
5920 module_param_call(feature, set_ibm_param, NULL, NULL, 0); \ 6005 module_param_call(feature, set_ibm_param, NULL, NULL, 0); \
5921 MODULE_PARM_DESC(feature, "Simulates thinkpad-aci procfs command " \ 6006 MODULE_PARM_DESC(feature, "Simulates thinkpad-acpi procfs command " \
5922 "at module load, see documentation") 6007 "at module load, see documentation")
5923 6008
5924TPACPI_PARAM(hotkey); 6009TPACPI_PARAM(hotkey);
diff --git a/drivers/net/bnx2.c b/drivers/net/bnx2.c
index 471c7f3e8a4a..15853be4680a 100644
--- a/drivers/net/bnx2.c
+++ b/drivers/net/bnx2.c
@@ -56,8 +56,8 @@
56 56
57#define DRV_MODULE_NAME "bnx2" 57#define DRV_MODULE_NAME "bnx2"
58#define PFX DRV_MODULE_NAME ": " 58#define PFX DRV_MODULE_NAME ": "
59#define DRV_MODULE_VERSION "1.7.3" 59#define DRV_MODULE_VERSION "1.7.4"
60#define DRV_MODULE_RELDATE "January 29, 2008" 60#define DRV_MODULE_RELDATE "February 18, 2008"
61 61
62#define RUN_AT(x) (jiffies + (x)) 62#define RUN_AT(x) (jiffies + (x))
63 63
@@ -1273,14 +1273,20 @@ bnx2_set_link(struct bnx2 *bp)
1273 1273
1274 if ((bp->phy_flags & BNX2_PHY_FLAG_SERDES) && 1274 if ((bp->phy_flags & BNX2_PHY_FLAG_SERDES) &&
1275 (CHIP_NUM(bp) == CHIP_NUM_5706)) { 1275 (CHIP_NUM(bp) == CHIP_NUM_5706)) {
1276 u32 val; 1276 u32 val, an_dbg;
1277 1277
1278 if (bp->phy_flags & BNX2_PHY_FLAG_FORCED_DOWN) { 1278 if (bp->phy_flags & BNX2_PHY_FLAG_FORCED_DOWN) {
1279 bnx2_5706s_force_link_dn(bp, 0); 1279 bnx2_5706s_force_link_dn(bp, 0);
1280 bp->phy_flags &= ~BNX2_PHY_FLAG_FORCED_DOWN; 1280 bp->phy_flags &= ~BNX2_PHY_FLAG_FORCED_DOWN;
1281 } 1281 }
1282 val = REG_RD(bp, BNX2_EMAC_STATUS); 1282 val = REG_RD(bp, BNX2_EMAC_STATUS);
1283 if (val & BNX2_EMAC_STATUS_LINK) 1283
1284 bnx2_write_phy(bp, MII_BNX2_MISC_SHADOW, MISC_SHDW_AN_DBG);
1285 bnx2_read_phy(bp, MII_BNX2_MISC_SHADOW, &an_dbg);
1286 bnx2_read_phy(bp, MII_BNX2_MISC_SHADOW, &an_dbg);
1287
1288 if ((val & BNX2_EMAC_STATUS_LINK) &&
1289 !(an_dbg & MISC_SHDW_AN_DBG_NOSYNC))
1284 bmsr |= BMSR_LSTATUS; 1290 bmsr |= BMSR_LSTATUS;
1285 else 1291 else
1286 bmsr &= ~BMSR_LSTATUS; 1292 bmsr &= ~BMSR_LSTATUS;
@@ -5356,11 +5362,15 @@ bnx2_test_intr(struct bnx2 *bp)
5356 return -ENODEV; 5362 return -ENODEV;
5357} 5363}
5358 5364
5365/* Determining link for parallel detection. */
5359static int 5366static int
5360bnx2_5706_serdes_has_link(struct bnx2 *bp) 5367bnx2_5706_serdes_has_link(struct bnx2 *bp)
5361{ 5368{
5362 u32 mode_ctl, an_dbg, exp; 5369 u32 mode_ctl, an_dbg, exp;
5363 5370
5371 if (bp->phy_flags & BNX2_PHY_FLAG_NO_PARALLEL)
5372 return 0;
5373
5364 bnx2_write_phy(bp, MII_BNX2_MISC_SHADOW, MISC_SHDW_MODE_CTL); 5374 bnx2_write_phy(bp, MII_BNX2_MISC_SHADOW, MISC_SHDW_MODE_CTL);
5365 bnx2_read_phy(bp, MII_BNX2_MISC_SHADOW, &mode_ctl); 5375 bnx2_read_phy(bp, MII_BNX2_MISC_SHADOW, &mode_ctl);
5366 5376
@@ -5390,13 +5400,6 @@ bnx2_5706_serdes_timer(struct bnx2 *bp)
5390 int check_link = 1; 5400 int check_link = 1;
5391 5401
5392 spin_lock(&bp->phy_lock); 5402 spin_lock(&bp->phy_lock);
5393 if (bp->phy_flags & BNX2_PHY_FLAG_FORCED_DOWN) {
5394 bnx2_5706s_force_link_dn(bp, 0);
5395 bp->phy_flags &= ~BNX2_PHY_FLAG_FORCED_DOWN;
5396 spin_unlock(&bp->phy_lock);
5397 return;
5398 }
5399
5400 if (bp->serdes_an_pending) { 5403 if (bp->serdes_an_pending) {
5401 bp->serdes_an_pending--; 5404 bp->serdes_an_pending--;
5402 check_link = 0; 5405 check_link = 0;
@@ -5420,7 +5423,6 @@ bnx2_5706_serdes_timer(struct bnx2 *bp)
5420 (bp->phy_flags & BNX2_PHY_FLAG_PARALLEL_DETECT)) { 5423 (bp->phy_flags & BNX2_PHY_FLAG_PARALLEL_DETECT)) {
5421 u32 phy2; 5424 u32 phy2;
5422 5425
5423 check_link = 0;
5424 bnx2_write_phy(bp, 0x17, 0x0f01); 5426 bnx2_write_phy(bp, 0x17, 0x0f01);
5425 bnx2_read_phy(bp, 0x15, &phy2); 5427 bnx2_read_phy(bp, 0x15, &phy2);
5426 if (phy2 & 0x20) { 5428 if (phy2 & 0x20) {
@@ -5435,17 +5437,21 @@ bnx2_5706_serdes_timer(struct bnx2 *bp)
5435 } else 5437 } else
5436 bp->current_interval = bp->timer_interval; 5438 bp->current_interval = bp->timer_interval;
5437 5439
5438 if (bp->link_up && (bp->autoneg & AUTONEG_SPEED) && check_link) { 5440 if (check_link) {
5439 u32 val; 5441 u32 val;
5440 5442
5441 bnx2_write_phy(bp, MII_BNX2_MISC_SHADOW, MISC_SHDW_AN_DBG); 5443 bnx2_write_phy(bp, MII_BNX2_MISC_SHADOW, MISC_SHDW_AN_DBG);
5442 bnx2_read_phy(bp, MII_BNX2_MISC_SHADOW, &val); 5444 bnx2_read_phy(bp, MII_BNX2_MISC_SHADOW, &val);
5443 bnx2_read_phy(bp, MII_BNX2_MISC_SHADOW, &val); 5445 bnx2_read_phy(bp, MII_BNX2_MISC_SHADOW, &val);
5444 5446
5445 if (val & MISC_SHDW_AN_DBG_NOSYNC) { 5447 if (bp->link_up && (val & MISC_SHDW_AN_DBG_NOSYNC)) {
5446 bnx2_5706s_force_link_dn(bp, 1); 5448 if (!(bp->phy_flags & BNX2_PHY_FLAG_FORCED_DOWN)) {
5447 bp->phy_flags |= BNX2_PHY_FLAG_FORCED_DOWN; 5449 bnx2_5706s_force_link_dn(bp, 1);
5448 } 5450 bp->phy_flags |= BNX2_PHY_FLAG_FORCED_DOWN;
5451 } else
5452 bnx2_set_link(bp);
5453 } else if (!bp->link_up && !(val & MISC_SHDW_AN_DBG_NOSYNC))
5454 bnx2_set_link(bp);
5449 } 5455 }
5450 spin_unlock(&bp->phy_lock); 5456 spin_unlock(&bp->phy_lock);
5451} 5457}
@@ -7326,7 +7332,15 @@ bnx2_init_board(struct pci_dev *pdev, struct net_device *dev)
7326 bp->flags |= BNX2_FLAG_NO_WOL; 7332 bp->flags |= BNX2_FLAG_NO_WOL;
7327 bp->wol = 0; 7333 bp->wol = 0;
7328 } 7334 }
7329 if (CHIP_NUM(bp) != CHIP_NUM_5706) { 7335 if (CHIP_NUM(bp) == CHIP_NUM_5706) {
7336 /* Don't do parallel detect on this board because of
7337 * some board problems. The link will not go down
7338 * if we do parallel detect.
7339 */
7340 if (pdev->subsystem_vendor == PCI_VENDOR_ID_HP &&
7341 pdev->subsystem_device == 0x310c)
7342 bp->phy_flags |= BNX2_PHY_FLAG_NO_PARALLEL;
7343 } else {
7330 bp->phy_addr = 2; 7344 bp->phy_addr = 2;
7331 if (reg & BNX2_SHARED_HW_CFG_PHY_2_5G) 7345 if (reg & BNX2_SHARED_HW_CFG_PHY_2_5G)
7332 bp->phy_flags |= BNX2_PHY_FLAG_2_5G_CAPABLE; 7346 bp->phy_flags |= BNX2_PHY_FLAG_2_5G_CAPABLE;
diff --git a/drivers/net/bnx2.h b/drivers/net/bnx2.h
index 3aa0364942e2..1eaf5bb3d9c2 100644
--- a/drivers/net/bnx2.h
+++ b/drivers/net/bnx2.h
@@ -6673,6 +6673,7 @@ struct bnx2 {
6673#define BNX2_PHY_FLAG_DIS_EARLY_DAC 0x00000400 6673#define BNX2_PHY_FLAG_DIS_EARLY_DAC 0x00000400
6674#define BNX2_PHY_FLAG_REMOTE_PHY_CAP 0x00000800 6674#define BNX2_PHY_FLAG_REMOTE_PHY_CAP 0x00000800
6675#define BNX2_PHY_FLAG_FORCED_DOWN 0x00001000 6675#define BNX2_PHY_FLAG_FORCED_DOWN 0x00001000
6676#define BNX2_PHY_FLAG_NO_PARALLEL 0x00002000
6676 6677
6677 u32 mii_bmcr; 6678 u32 mii_bmcr;
6678 u32 mii_bmsr; 6679 u32 mii_bmsr;
diff --git a/drivers/net/e1000/e1000_ethtool.c b/drivers/net/e1000/e1000_ethtool.c
index d876787ce336..85e66f4c7886 100644
--- a/drivers/net/e1000/e1000_ethtool.c
+++ b/drivers/net/e1000/e1000_ethtool.c
@@ -50,7 +50,7 @@ struct e1000_stats {
50 int stat_offset; 50 int stat_offset;
51}; 51};
52 52
53#define E1000_STAT(m) sizeof(((struct e1000_adapter *)0)->m), \ 53#define E1000_STAT(m) FIELD_SIZEOF(struct e1000_adapter, m), \
54 offsetof(struct e1000_adapter, m) 54 offsetof(struct e1000_adapter, m)
55static const struct e1000_stats e1000_gstrings_stats[] = { 55static const struct e1000_stats e1000_gstrings_stats[] = {
56 { "rx_packets", E1000_STAT(stats.gprc) }, 56 { "rx_packets", E1000_STAT(stats.gprc) },
diff --git a/drivers/net/e1000/e1000_main.c b/drivers/net/e1000/e1000_main.c
index d4ee8ec34b56..0991648c53dc 100644
--- a/drivers/net/e1000/e1000_main.c
+++ b/drivers/net/e1000/e1000_main.c
@@ -1195,6 +1195,14 @@ e1000_probe(struct pci_dev *pdev,
1195 1195
1196 printk("%s\n", print_mac(mac, netdev->dev_addr)); 1196 printk("%s\n", print_mac(mac, netdev->dev_addr));
1197 1197
1198 if (adapter->hw.bus_type == e1000_bus_type_pci_express) {
1199 DPRINTK(PROBE, WARNING, "This device (id %04x:%04x) will no "
1200 "longer be supported by this driver in the future.\n",
1201 pdev->vendor, pdev->device);
1202 DPRINTK(PROBE, WARNING, "please use the \"e1000e\" "
1203 "driver instead.\n");
1204 }
1205
1198 /* reset the hardware with the new settings */ 1206 /* reset the hardware with the new settings */
1199 e1000_reset(adapter); 1207 e1000_reset(adapter);
1200 1208
diff --git a/drivers/net/e1000e/netdev.c b/drivers/net/e1000e/netdev.c
index f58f017ee47a..3031d6d16247 100644
--- a/drivers/net/e1000e/netdev.c
+++ b/drivers/net/e1000e/netdev.c
@@ -1055,23 +1055,6 @@ static void e1000_release_hw_control(struct e1000_adapter *adapter)
1055 } 1055 }
1056} 1056}
1057 1057
1058static void e1000_release_manageability(struct e1000_adapter *adapter)
1059{
1060 if (adapter->flags & FLAG_MNG_PT_ENABLED) {
1061 struct e1000_hw *hw = &adapter->hw;
1062
1063 u32 manc = er32(MANC);
1064
1065 /* re-enable hardware interception of ARP */
1066 manc |= E1000_MANC_ARP_EN;
1067 manc &= ~E1000_MANC_EN_MNG2HOST;
1068
1069 /* don't explicitly have to mess with MANC2H since
1070 * MANC has an enable disable that gates MANC2H */
1071 ew32(MANC, manc);
1072 }
1073}
1074
1075/** 1058/**
1076 * @e1000_alloc_ring - allocate memory for a ring structure 1059 * @e1000_alloc_ring - allocate memory for a ring structure
1077 **/ 1060 **/
@@ -1561,9 +1544,6 @@ static void e1000_init_manageability(struct e1000_adapter *adapter)
1561 1544
1562 manc = er32(MANC); 1545 manc = er32(MANC);
1563 1546
1564 /* disable hardware interception of ARP */
1565 manc &= ~(E1000_MANC_ARP_EN);
1566
1567 /* enable receiving management packets to the host. this will probably 1547 /* enable receiving management packets to the host. this will probably
1568 * generate destination unreachable messages from the host OS, but 1548 * generate destination unreachable messages from the host OS, but
1569 * the packets will be handled on SMBUS */ 1549 * the packets will be handled on SMBUS */
@@ -1690,6 +1670,9 @@ static void e1000_setup_rctl(struct e1000_adapter *adapter)
1690 else 1670 else
1691 rctl |= E1000_RCTL_LPE; 1671 rctl |= E1000_RCTL_LPE;
1692 1672
1673 /* Enable hardware CRC frame stripping */
1674 rctl |= E1000_RCTL_SECRC;
1675
1693 /* Setup buffer sizes */ 1676 /* Setup buffer sizes */
1694 rctl &= ~E1000_RCTL_SZ_4096; 1677 rctl &= ~E1000_RCTL_SZ_4096;
1695 rctl |= E1000_RCTL_BSEX; 1678 rctl |= E1000_RCTL_BSEX;
@@ -1755,9 +1738,6 @@ static void e1000_setup_rctl(struct e1000_adapter *adapter)
1755 1738
1756 /* Enable Packet split descriptors */ 1739 /* Enable Packet split descriptors */
1757 rctl |= E1000_RCTL_DTYP_PS; 1740 rctl |= E1000_RCTL_DTYP_PS;
1758
1759 /* Enable hardware CRC frame stripping */
1760 rctl |= E1000_RCTL_SECRC;
1761 1741
1762 psrctl |= adapter->rx_ps_bsize0 >> 1742 psrctl |= adapter->rx_ps_bsize0 >>
1763 E1000_PSRCTL_BSIZE0_SHIFT; 1743 E1000_PSRCTL_BSIZE0_SHIFT;
@@ -2008,7 +1988,7 @@ static void e1000_power_down_phy(struct e1000_adapter *adapter)
2008 u16 mii_reg; 1988 u16 mii_reg;
2009 1989
2010 /* WoL is enabled */ 1990 /* WoL is enabled */
2011 if (!adapter->wol) 1991 if (adapter->wol)
2012 return; 1992 return;
2013 1993
2014 /* non-copper PHY? */ 1994 /* non-copper PHY? */
@@ -2140,8 +2120,6 @@ void e1000e_reset(struct e1000_adapter *adapter)
2140 phy_data &= ~IGP02E1000_PM_SPD; 2120 phy_data &= ~IGP02E1000_PM_SPD;
2141 e1e_wphy(hw, IGP02E1000_PHY_POWER_MGMT, phy_data); 2121 e1e_wphy(hw, IGP02E1000_PHY_POWER_MGMT, phy_data);
2142 } 2122 }
2143
2144 e1000_release_manageability(adapter);
2145} 2123}
2146 2124
2147int e1000e_up(struct e1000_adapter *adapter) 2125int e1000e_up(struct e1000_adapter *adapter)
@@ -3487,8 +3465,6 @@ static int e1000_suspend(struct pci_dev *pdev, pm_message_t state)
3487 pci_enable_wake(pdev, PCI_D3cold, 0); 3465 pci_enable_wake(pdev, PCI_D3cold, 0);
3488 } 3466 }
3489 3467
3490 e1000_release_manageability(adapter);
3491
3492 /* make sure adapter isn't asleep if manageability is enabled */ 3468 /* make sure adapter isn't asleep if manageability is enabled */
3493 if (adapter->flags & FLAG_MNG_PT_ENABLED) { 3469 if (adapter->flags & FLAG_MNG_PT_ENABLED) {
3494 pci_enable_wake(pdev, PCI_D3hot, 1); 3470 pci_enable_wake(pdev, PCI_D3hot, 1);
@@ -4054,8 +4030,6 @@ static void __devexit e1000_remove(struct pci_dev *pdev)
4054 4030
4055 flush_scheduled_work(); 4031 flush_scheduled_work();
4056 4032
4057 e1000_release_manageability(adapter);
4058
4059 /* Release control of h/w to f/w. If f/w is AMT enabled, this 4033 /* Release control of h/w to f/w. If f/w is AMT enabled, this
4060 * would have already happened in close and is redundant. */ 4034 * would have already happened in close and is redundant. */
4061 e1000_release_hw_control(adapter); 4035 e1000_release_hw_control(adapter);
diff --git a/drivers/net/gianfar.c b/drivers/net/gianfar.c
index 0431e9ed0fac..4244fc282f21 100644
--- a/drivers/net/gianfar.c
+++ b/drivers/net/gianfar.c
@@ -130,8 +130,8 @@ static void free_skb_resources(struct gfar_private *priv);
130static void gfar_set_multi(struct net_device *dev); 130static void gfar_set_multi(struct net_device *dev);
131static void gfar_set_hash_for_addr(struct net_device *dev, u8 *addr); 131static void gfar_set_hash_for_addr(struct net_device *dev, u8 *addr);
132static void gfar_configure_serdes(struct net_device *dev); 132static void gfar_configure_serdes(struct net_device *dev);
133extern int gfar_local_mdio_write(struct gfar_mii *regs, int mii_id, int regnum, u16 value); 133extern int gfar_local_mdio_write(struct gfar_mii __iomem *regs, int mii_id, int regnum, u16 value);
134extern int gfar_local_mdio_read(struct gfar_mii *regs, int mii_id, int regnum); 134extern int gfar_local_mdio_read(struct gfar_mii __iomem *regs, int mii_id, int regnum);
135#ifdef CONFIG_GFAR_NAPI 135#ifdef CONFIG_GFAR_NAPI
136static int gfar_poll(struct napi_struct *napi, int budget); 136static int gfar_poll(struct napi_struct *napi, int budget);
137#endif 137#endif
diff --git a/drivers/net/gianfar_mii.c b/drivers/net/gianfar_mii.c
index 6a647d95e6ea..24327629bf03 100644
--- a/drivers/net/gianfar_mii.c
+++ b/drivers/net/gianfar_mii.c
@@ -51,7 +51,7 @@
51 * the local mdio pins, which may not be the same as system mdio bus, used for 51 * the local mdio pins, which may not be the same as system mdio bus, used for
52 * controlling the external PHYs, for example. 52 * controlling the external PHYs, for example.
53 */ 53 */
54int gfar_local_mdio_write(struct gfar_mii *regs, int mii_id, 54int gfar_local_mdio_write(struct gfar_mii __iomem *regs, int mii_id,
55 int regnum, u16 value) 55 int regnum, u16 value)
56{ 56{
57 /* Set the PHY address and the register address we want to write */ 57 /* Set the PHY address and the register address we want to write */
@@ -77,7 +77,7 @@ int gfar_local_mdio_write(struct gfar_mii *regs, int mii_id,
77 * and are always tied to the local mdio pins, which may not be the 77 * and are always tied to the local mdio pins, which may not be the
78 * same as system mdio bus, used for controlling the external PHYs, for eg. 78 * same as system mdio bus, used for controlling the external PHYs, for eg.
79 */ 79 */
80int gfar_local_mdio_read(struct gfar_mii *regs, int mii_id, int regnum) 80int gfar_local_mdio_read(struct gfar_mii __iomem *regs, int mii_id, int regnum)
81 81
82{ 82{
83 u16 value; 83 u16 value;
diff --git a/drivers/net/hamradio/mkiss.c b/drivers/net/hamradio/mkiss.c
index cfcd15af501e..30c9b3b0d131 100644
--- a/drivers/net/hamradio/mkiss.c
+++ b/drivers/net/hamradio/mkiss.c
@@ -289,7 +289,6 @@ static void ax_bump(struct mkiss *ax)
289 *ax->rbuff &= ~0x20; 289 *ax->rbuff &= ~0x20;
290 } 290 }
291 } 291 }
292 spin_unlock_bh(&ax->buflock);
293 292
294 count = ax->rcount; 293 count = ax->rcount;
295 294
@@ -297,17 +296,17 @@ static void ax_bump(struct mkiss *ax)
297 printk(KERN_ERR "mkiss: %s: memory squeeze, dropping packet.\n", 296 printk(KERN_ERR "mkiss: %s: memory squeeze, dropping packet.\n",
298 ax->dev->name); 297 ax->dev->name);
299 ax->stats.rx_dropped++; 298 ax->stats.rx_dropped++;
299 spin_unlock_bh(&ax->buflock);
300 return; 300 return;
301 } 301 }
302 302
303 spin_lock_bh(&ax->buflock);
304 memcpy(skb_put(skb,count), ax->rbuff, count); 303 memcpy(skb_put(skb,count), ax->rbuff, count);
305 spin_unlock_bh(&ax->buflock);
306 skb->protocol = ax25_type_trans(skb, ax->dev); 304 skb->protocol = ax25_type_trans(skb, ax->dev);
307 netif_rx(skb); 305 netif_rx(skb);
308 ax->dev->last_rx = jiffies; 306 ax->dev->last_rx = jiffies;
309 ax->stats.rx_packets++; 307 ax->stats.rx_packets++;
310 ax->stats.rx_bytes += count; 308 ax->stats.rx_bytes += count;
309 spin_unlock_bh(&ax->buflock);
311} 310}
312 311
313static void kiss_unesc(struct mkiss *ax, unsigned char s) 312static void kiss_unesc(struct mkiss *ax, unsigned char s)
diff --git a/drivers/net/ibm_newemac/rgmii.c b/drivers/net/ibm_newemac/rgmii.c
index 9bc1132fa788..5757788227be 100644
--- a/drivers/net/ibm_newemac/rgmii.c
+++ b/drivers/net/ibm_newemac/rgmii.c
@@ -302,7 +302,6 @@ static int __devexit rgmii_remove(struct of_device *ofdev)
302static struct of_device_id rgmii_match[] = 302static struct of_device_id rgmii_match[] =
303{ 303{
304 { 304 {
305 .type = "rgmii-interface",
306 .compatible = "ibm,rgmii", 305 .compatible = "ibm,rgmii",
307 }, 306 },
308 { 307 {
diff --git a/drivers/net/igb/igb_ethtool.c b/drivers/net/igb/igb_ethtool.c
index f69721e4eaa1..0447f9bcd27a 100644
--- a/drivers/net/igb/igb_ethtool.c
+++ b/drivers/net/igb/igb_ethtool.c
@@ -43,7 +43,7 @@ struct igb_stats {
43 int stat_offset; 43 int stat_offset;
44}; 44};
45 45
46#define IGB_STAT(m) sizeof(((struct igb_adapter *)0)->m), \ 46#define IGB_STAT(m) FIELD_SIZEOF(struct igb_adapter, m), \
47 offsetof(struct igb_adapter, m) 47 offsetof(struct igb_adapter, m)
48static const struct igb_stats igb_gstrings_stats[] = { 48static const struct igb_stats igb_gstrings_stats[] = {
49 { "rx_packets", IGB_STAT(stats.gprc) }, 49 { "rx_packets", IGB_STAT(stats.gprc) },
diff --git a/drivers/net/igb/igb_main.c b/drivers/net/igb/igb_main.c
index d4eb8e2d8720..bff280eff5e3 100644
--- a/drivers/net/igb/igb_main.c
+++ b/drivers/net/igb/igb_main.c
@@ -606,9 +606,6 @@ static void igb_init_manageability(struct igb_adapter *adapter)
606 u32 manc2h = rd32(E1000_MANC2H); 606 u32 manc2h = rd32(E1000_MANC2H);
607 u32 manc = rd32(E1000_MANC); 607 u32 manc = rd32(E1000_MANC);
608 608
609 /* disable hardware interception of ARP */
610 manc &= ~(E1000_MANC_ARP_EN);
611
612 /* enable receiving management packets to the host */ 609 /* enable receiving management packets to the host */
613 /* this will probably generate destination unreachable messages 610 /* this will probably generate destination unreachable messages
614 * from the host OS, but the packets will be handled on SMBUS */ 611 * from the host OS, but the packets will be handled on SMBUS */
@@ -623,25 +620,6 @@ static void igb_init_manageability(struct igb_adapter *adapter)
623 } 620 }
624} 621}
625 622
626static void igb_release_manageability(struct igb_adapter *adapter)
627{
628 struct e1000_hw *hw = &adapter->hw;
629
630 if (adapter->en_mng_pt) {
631 u32 manc = rd32(E1000_MANC);
632
633 /* re-enable hardware interception of ARP */
634 manc |= E1000_MANC_ARP_EN;
635 manc &= ~E1000_MANC_EN_MNG2HOST;
636
637 /* don't explicitly have to mess with MANC2H since
638 * MANC has an enable disable that gates MANC2H */
639
640 /* XXX stop the hardware watchdog ? */
641 wr32(E1000_MANC, manc);
642 }
643}
644
645/** 623/**
646 * igb_configure - configure the hardware for RX and TX 624 * igb_configure - configure the hardware for RX and TX
647 * @adapter: private board structure 625 * @adapter: private board structure
@@ -844,7 +822,6 @@ void igb_reset(struct igb_adapter *adapter)
844 822
845 igb_reset_adaptive(&adapter->hw); 823 igb_reset_adaptive(&adapter->hw);
846 adapter->hw.phy.ops.get_phy_info(&adapter->hw); 824 adapter->hw.phy.ops.get_phy_info(&adapter->hw);
847 igb_release_manageability(adapter);
848} 825}
849 826
850/** 827/**
@@ -1178,9 +1155,6 @@ static void __devexit igb_remove(struct pci_dev *pdev)
1178 1155
1179 flush_scheduled_work(); 1156 flush_scheduled_work();
1180 1157
1181
1182 igb_release_manageability(adapter);
1183
1184 /* Release control of h/w to f/w. If f/w is AMT enabled, this 1158 /* Release control of h/w to f/w. If f/w is AMT enabled, this
1185 * would have already happened in close and is redundant. */ 1159 * would have already happened in close and is redundant. */
1186 igb_release_hw_control(adapter); 1160 igb_release_hw_control(adapter);
@@ -3955,8 +3929,6 @@ static int igb_suspend(struct pci_dev *pdev, pm_message_t state)
3955 pci_enable_wake(pdev, PCI_D3cold, 0); 3929 pci_enable_wake(pdev, PCI_D3cold, 0);
3956 } 3930 }
3957 3931
3958 igb_release_manageability(adapter);
3959
3960 /* make sure adapter isn't asleep if manageability is enabled */ 3932 /* make sure adapter isn't asleep if manageability is enabled */
3961 if (adapter->en_mng_pt) { 3933 if (adapter->en_mng_pt) {
3962 pci_enable_wake(pdev, PCI_D3hot, 1); 3934 pci_enable_wake(pdev, PCI_D3hot, 1);
diff --git a/drivers/net/ixgb/ixgb_ethtool.c b/drivers/net/ixgb/ixgb_ethtool.c
index a267dd862520..53a9fd086f96 100644
--- a/drivers/net/ixgb/ixgb_ethtool.c
+++ b/drivers/net/ixgb/ixgb_ethtool.c
@@ -49,7 +49,7 @@ struct ixgb_stats {
49 int stat_offset; 49 int stat_offset;
50}; 50};
51 51
52#define IXGB_STAT(m) sizeof(((struct ixgb_adapter *)0)->m), \ 52#define IXGB_STAT(m) FIELD_SIZEOF(struct ixgb_adapter, m), \
53 offsetof(struct ixgb_adapter, m) 53 offsetof(struct ixgb_adapter, m)
54static struct ixgb_stats ixgb_gstrings_stats[] = { 54static struct ixgb_stats ixgb_gstrings_stats[] = {
55 {"rx_packets", IXGB_STAT(net_stats.rx_packets)}, 55 {"rx_packets", IXGB_STAT(net_stats.rx_packets)},
diff --git a/drivers/net/ixgbe/ixgbe_main.c b/drivers/net/ixgbe/ixgbe_main.c
index ead49e54f31b..23d0a4afe0e1 100644
--- a/drivers/net/ixgbe/ixgbe_main.c
+++ b/drivers/net/ixgbe/ixgbe_main.c
@@ -220,7 +220,6 @@ static bool ixgbe_clean_tx_irq(struct ixgbe_adapter *adapter,
220 tx_ring->stats.bytes += tx_buffer_info->length; 220 tx_ring->stats.bytes += tx_buffer_info->length;
221 if (cleaned) { 221 if (cleaned) {
222 struct sk_buff *skb = tx_buffer_info->skb; 222 struct sk_buff *skb = tx_buffer_info->skb;
223#ifdef NETIF_F_TSO
224 unsigned int segs, bytecount; 223 unsigned int segs, bytecount;
225 segs = skb_shinfo(skb)->gso_segs ?: 1; 224 segs = skb_shinfo(skb)->gso_segs ?: 1;
226 /* multiply data chunks by size of headers */ 225 /* multiply data chunks by size of headers */
@@ -228,10 +227,6 @@ static bool ixgbe_clean_tx_irq(struct ixgbe_adapter *adapter,
228 skb->len; 227 skb->len;
229 total_tx_packets += segs; 228 total_tx_packets += segs;
230 total_tx_bytes += bytecount; 229 total_tx_bytes += bytecount;
231#else
232 total_tx_packets++;
233 total_tx_bytes += skb->len;
234#endif
235 } 230 }
236 ixgbe_unmap_and_free_tx_resource(adapter, 231 ixgbe_unmap_and_free_tx_resource(adapter,
237 tx_buffer_info); 232 tx_buffer_info);
@@ -1942,6 +1937,10 @@ static int ixgbe_open(struct net_device *netdev)
1942 int err; 1937 int err;
1943 u32 num_rx_queues = adapter->num_rx_queues; 1938 u32 num_rx_queues = adapter->num_rx_queues;
1944 1939
1940 /* disallow open during test */
1941 if (test_bit(__IXGBE_TESTING, &adapter->state))
1942 return -EBUSY;
1943
1945try_intr_reinit: 1944try_intr_reinit:
1946 /* allocate transmit descriptors */ 1945 /* allocate transmit descriptors */
1947 err = ixgbe_setup_all_tx_resources(adapter); 1946 err = ixgbe_setup_all_tx_resources(adapter);
@@ -2278,11 +2277,29 @@ static bool ixgbe_tx_csum(struct ixgbe_adapter *adapter,
2278 IXGBE_ADVTXD_DTYP_CTXT); 2277 IXGBE_ADVTXD_DTYP_CTXT);
2279 2278
2280 if (skb->ip_summed == CHECKSUM_PARTIAL) { 2279 if (skb->ip_summed == CHECKSUM_PARTIAL) {
2281 if (skb->protocol == htons(ETH_P_IP)) 2280 switch (skb->protocol) {
2281 case __constant_htons(ETH_P_IP):
2282 type_tucmd_mlhl |= IXGBE_ADVTXD_TUCMD_IPV4; 2282 type_tucmd_mlhl |= IXGBE_ADVTXD_TUCMD_IPV4;
2283 if (ip_hdr(skb)->protocol == IPPROTO_TCP)
2284 type_tucmd_mlhl |=
2285 IXGBE_ADVTXD_TUCMD_L4T_TCP;
2286 break;
2287
2288 case __constant_htons(ETH_P_IPV6):
2289 /* XXX what about other V6 headers?? */
2290 if (ipv6_hdr(skb)->nexthdr == IPPROTO_TCP)
2291 type_tucmd_mlhl |=
2292 IXGBE_ADVTXD_TUCMD_L4T_TCP;
2293 break;
2283 2294
2284 if (skb->sk->sk_protocol == IPPROTO_TCP) 2295 default:
2285 type_tucmd_mlhl |= IXGBE_ADVTXD_TUCMD_L4T_TCP; 2296 if (unlikely(net_ratelimit())) {
2297 DPRINTK(PROBE, WARNING,
2298 "partial checksum but proto=%x!\n",
2299 skb->protocol);
2300 }
2301 break;
2302 }
2286 } 2303 }
2287 2304
2288 context_desc->type_tucmd_mlhl = cpu_to_le32(type_tucmd_mlhl); 2305 context_desc->type_tucmd_mlhl = cpu_to_le32(type_tucmd_mlhl);
@@ -2778,6 +2795,14 @@ static int __devinit ixgbe_probe(struct pci_dev *pdev,
2778 hw->mac.type, hw->phy.type, 2795 hw->mac.type, hw->phy.type,
2779 (part_num >> 8), (part_num & 0xff)); 2796 (part_num >> 8), (part_num & 0xff));
2780 2797
2798 if (link_width <= IXGBE_PCI_LINK_WIDTH_4) {
2799 dev_warn(&pdev->dev, "PCI-Express bandwidth available for "
2800 "this card is not sufficient for optimal "
2801 "performance.\n");
2802 dev_warn(&pdev->dev, "For optimal performance a x8 "
2803 "PCI-Express slot is required.\n");
2804 }
2805
2781 /* reset the hardware with the new settings */ 2806 /* reset the hardware with the new settings */
2782 ixgbe_start_hw(hw); 2807 ixgbe_start_hw(hw);
2783 2808
diff --git a/drivers/net/niu.c b/drivers/net/niu.c
index 2fe14b0c5c67..d11ba61baa4f 100644
--- a/drivers/net/niu.c
+++ b/drivers/net/niu.c
@@ -33,8 +33,8 @@
33 33
34#define DRV_MODULE_NAME "niu" 34#define DRV_MODULE_NAME "niu"
35#define PFX DRV_MODULE_NAME ": " 35#define PFX DRV_MODULE_NAME ": "
36#define DRV_MODULE_VERSION "0.6" 36#define DRV_MODULE_VERSION "0.7"
37#define DRV_MODULE_RELDATE "January 5, 2008" 37#define DRV_MODULE_RELDATE "February 18, 2008"
38 38
39static char version[] __devinitdata = 39static char version[] __devinitdata =
40 DRV_MODULE_NAME ".c:v" DRV_MODULE_VERSION " (" DRV_MODULE_RELDATE ")\n"; 40 DRV_MODULE_NAME ".c:v" DRV_MODULE_VERSION " (" DRV_MODULE_RELDATE ")\n";
@@ -1616,12 +1616,13 @@ static int niu_enable_alt_mac(struct niu *np, int index, int on)
1616 if (index >= niu_num_alt_addr(np)) 1616 if (index >= niu_num_alt_addr(np))
1617 return -EINVAL; 1617 return -EINVAL;
1618 1618
1619 if (np->flags & NIU_FLAGS_XMAC) 1619 if (np->flags & NIU_FLAGS_XMAC) {
1620 reg = XMAC_ADDR_CMPEN; 1620 reg = XMAC_ADDR_CMPEN;
1621 else 1621 mask = 1 << index;
1622 } else {
1622 reg = BMAC_ADDR_CMPEN; 1623 reg = BMAC_ADDR_CMPEN;
1623 1624 mask = 1 << (index + 1);
1624 mask = 1 << index; 1625 }
1625 1626
1626 val = nr64_mac(reg); 1627 val = nr64_mac(reg);
1627 if (on) 1628 if (on)
@@ -5147,7 +5148,12 @@ static void niu_set_rx_mode(struct net_device *dev)
5147 index++; 5148 index++;
5148 } 5149 }
5149 } else { 5150 } else {
5150 for (i = 0; i < niu_num_alt_addr(np); i++) { 5151 int alt_start;
5152 if (np->flags & NIU_FLAGS_XMAC)
5153 alt_start = 0;
5154 else
5155 alt_start = 1;
5156 for (i = alt_start; i < niu_num_alt_addr(np); i++) {
5151 err = niu_enable_alt_mac(np, i, 0); 5157 err = niu_enable_alt_mac(np, i, 0);
5152 if (err) 5158 if (err)
5153 printk(KERN_WARNING PFX "%s: Error %d " 5159 printk(KERN_WARNING PFX "%s: Error %d "
diff --git a/drivers/net/niu.h b/drivers/net/niu.h
index 0e8626adc573..59dc05fcd371 100644
--- a/drivers/net/niu.h
+++ b/drivers/net/niu.h
@@ -499,7 +499,7 @@
499#define BMAC_ADDR2 0x00110UL 499#define BMAC_ADDR2 0x00110UL
500#define BMAC_ADDR2_ADDR2 0x000000000000ffffULL 500#define BMAC_ADDR2_ADDR2 0x000000000000ffffULL
501 501
502#define BMAC_NUM_ALT_ADDR 7 502#define BMAC_NUM_ALT_ADDR 6
503 503
504#define BMAC_ALT_ADDR0(NUM) (0x00118UL + (NUM)*0x18UL) 504#define BMAC_ALT_ADDR0(NUM) (0x00118UL + (NUM)*0x18UL)
505#define BMAC_ALT_ADDR0_ADDR0 0x000000000000ffffULL 505#define BMAC_ALT_ADDR0_ADDR0 0x000000000000ffffULL
diff --git a/drivers/net/pcmcia/smc91c92_cs.c b/drivers/net/pcmcia/smc91c92_cs.c
index f18eca9831e8..250eb1954c34 100644
--- a/drivers/net/pcmcia/smc91c92_cs.c
+++ b/drivers/net/pcmcia/smc91c92_cs.c
@@ -559,8 +559,16 @@ static int mhz_setup(struct pcmcia_device *link)
559 559
560 /* Read the station address from the CIS. It is stored as the last 560 /* Read the station address from the CIS. It is stored as the last
561 (fourth) string in the Version 1 Version/ID tuple. */ 561 (fourth) string in the Version 1 Version/ID tuple. */
562 if (link->prod_id[3]) { 562 tuple->DesiredTuple = CISTPL_VERS_1;
563 station_addr = link->prod_id[3]; 563 if (first_tuple(link, tuple, parse) != CS_SUCCESS) {
564 rc = -1;
565 goto free_cfg_mem;
566 }
567 /* Ugh -- the EM1144 card has two VERS_1 tuples!?! */
568 if (next_tuple(link, tuple, parse) != CS_SUCCESS)
569 first_tuple(link, tuple, parse);
570 if (parse->version_1.ns > 3) {
571 station_addr = parse->version_1.str + parse->version_1.ofs[3];
564 if (cvt_ascii_address(dev, station_addr) == 0) { 572 if (cvt_ascii_address(dev, station_addr) == 0) {
565 rc = 0; 573 rc = 0;
566 goto free_cfg_mem; 574 goto free_cfg_mem;
diff --git a/drivers/net/tg3.c b/drivers/net/tg3.c
index db606b603884..26ffb67f1da2 100644
--- a/drivers/net/tg3.c
+++ b/drivers/net/tg3.c
@@ -8781,7 +8781,7 @@ static int tg3_phys_id(struct net_device *dev, u32 data)
8781 return -EAGAIN; 8781 return -EAGAIN;
8782 8782
8783 if (data == 0) 8783 if (data == 0)
8784 data = 2; 8784 data = UINT_MAX / 2;
8785 8785
8786 for (i = 0; i < (data * 2); i++) { 8786 for (i = 0; i < (data * 2); i++) {
8787 if ((i % 2) == 0) 8787 if ((i % 2) == 0)
diff --git a/drivers/net/tsi108_eth.c b/drivers/net/tsi108_eth.c
index 35d15e850075..6f33f84d37b0 100644
--- a/drivers/net/tsi108_eth.c
+++ b/drivers/net/tsi108_eth.c
@@ -36,6 +36,7 @@
36#include <linux/net.h> 36#include <linux/net.h>
37#include <linux/netdevice.h> 37#include <linux/netdevice.h>
38#include <linux/etherdevice.h> 38#include <linux/etherdevice.h>
39#include <linux/ethtool.h>
39#include <linux/skbuff.h> 40#include <linux/skbuff.h>
40#include <linux/slab.h> 41#include <linux/slab.h>
41#include <linux/spinlock.h> 42#include <linux/spinlock.h>
@@ -297,18 +298,11 @@ static void tsi108_check_phy(struct net_device *dev)
297 u32 speed; 298 u32 speed;
298 unsigned long flags; 299 unsigned long flags;
299 300
300 /* Do a dummy read, as for some reason the first read
301 * after a link becomes up returns link down, even if
302 * it's been a while since the link came up.
303 */
304
305 spin_lock_irqsave(&phy_lock, flags); 301 spin_lock_irqsave(&phy_lock, flags);
306 302
307 if (!data->phy_ok) 303 if (!data->phy_ok)
308 goto out; 304 goto out;
309 305
310 tsi108_read_mii(data, MII_BMSR);
311
312 duplex = mii_check_media(&data->mii_if, netif_msg_link(data), data->init_media); 306 duplex = mii_check_media(&data->mii_if, netif_msg_link(data), data->init_media);
313 data->init_media = 0; 307 data->init_media = 0;
314 308
@@ -345,22 +339,21 @@ static void tsi108_check_phy(struct net_device *dev)
345 339
346 TSI_WRITE(TSI108_MAC_CFG2, mac_cfg2_reg); 340 TSI_WRITE(TSI108_MAC_CFG2, mac_cfg2_reg);
347 TSI_WRITE(TSI108_EC_PORTCTRL, portctrl_reg); 341 TSI_WRITE(TSI108_EC_PORTCTRL, portctrl_reg);
342 }
348 343
349 if (data->link_up == 0) { 344 if (data->link_up == 0) {
350 /* The manual says it can take 3-4 usecs for the speed change 345 /* The manual says it can take 3-4 usecs for the speed change
351 * to take effect. 346 * to take effect.
352 */ 347 */
353 udelay(5); 348 udelay(5);
354 349
355 spin_lock(&data->txlock); 350 spin_lock(&data->txlock);
356 if (is_valid_ether_addr(dev->dev_addr) && data->txfree) 351 if (is_valid_ether_addr(dev->dev_addr) && data->txfree)
357 netif_wake_queue(dev); 352 netif_wake_queue(dev);
358 353
359 data->link_up = 1; 354 data->link_up = 1;
360 spin_unlock(&data->txlock); 355 spin_unlock(&data->txlock);
361 }
362 } 356 }
363
364 } else { 357 } else {
365 if (data->link_up == 1) { 358 if (data->link_up == 1) {
366 netif_stop_queue(dev); 359 netif_stop_queue(dev);
@@ -1274,12 +1267,11 @@ static void tsi108_init_phy(struct net_device *dev)
1274 * PHY_STAT register before the link up status bit is set. 1267 * PHY_STAT register before the link up status bit is set.
1275 */ 1268 */
1276 1269
1277 data->link_up = 1; 1270 data->link_up = 0;
1278 1271
1279 while (!((phyval = tsi108_read_mii(data, MII_BMSR)) & 1272 while (!((phyval = tsi108_read_mii(data, MII_BMSR)) &
1280 BMSR_LSTATUS)) { 1273 BMSR_LSTATUS)) {
1281 if (i++ > (MII_READ_DELAY / 10)) { 1274 if (i++ > (MII_READ_DELAY / 10)) {
1282 data->link_up = 0;
1283 break; 1275 break;
1284 } 1276 }
1285 spin_unlock_irqrestore(&phy_lock, flags); 1277 spin_unlock_irqrestore(&phy_lock, flags);
@@ -1287,6 +1279,7 @@ static void tsi108_init_phy(struct net_device *dev)
1287 spin_lock_irqsave(&phy_lock, flags); 1279 spin_lock_irqsave(&phy_lock, flags);
1288 } 1280 }
1289 1281
1282 data->mii_if.supports_gmii = mii_check_gmii_support(&data->mii_if);
1290 printk(KERN_DEBUG "PHY_STAT reg contains %08x\n", phyval); 1283 printk(KERN_DEBUG "PHY_STAT reg contains %08x\n", phyval);
1291 data->phy_ok = 1; 1284 data->phy_ok = 1;
1292 data->init_media = 1; 1285 data->init_media = 1;
@@ -1527,12 +1520,46 @@ static void tsi108_init_mac(struct net_device *dev)
1527 TSI_WRITE(TSI108_EC_INTMASK, ~0); 1520 TSI_WRITE(TSI108_EC_INTMASK, ~0);
1528} 1521}
1529 1522
1523static int tsi108_get_settings(struct net_device *dev, struct ethtool_cmd *cmd)
1524{
1525 struct tsi108_prv_data *data = netdev_priv(dev);
1526 unsigned long flags;
1527 int rc;
1528
1529 spin_lock_irqsave(&data->txlock, flags);
1530 rc = mii_ethtool_gset(&data->mii_if, cmd);
1531 spin_unlock_irqrestore(&data->txlock, flags);
1532
1533 return rc;
1534}
1535
1536static int tsi108_set_settings(struct net_device *dev, struct ethtool_cmd *cmd)
1537{
1538 struct tsi108_prv_data *data = netdev_priv(dev);
1539 unsigned long flags;
1540 int rc;
1541
1542 spin_lock_irqsave(&data->txlock, flags);
1543 rc = mii_ethtool_sset(&data->mii_if, cmd);
1544 spin_unlock_irqrestore(&data->txlock, flags);
1545
1546 return rc;
1547}
1548
1530static int tsi108_do_ioctl(struct net_device *dev, struct ifreq *rq, int cmd) 1549static int tsi108_do_ioctl(struct net_device *dev, struct ifreq *rq, int cmd)
1531{ 1550{
1532 struct tsi108_prv_data *data = netdev_priv(dev); 1551 struct tsi108_prv_data *data = netdev_priv(dev);
1552 if (!netif_running(dev))
1553 return -EINVAL;
1533 return generic_mii_ioctl(&data->mii_if, if_mii(rq), cmd, NULL); 1554 return generic_mii_ioctl(&data->mii_if, if_mii(rq), cmd, NULL);
1534} 1555}
1535 1556
1557static const struct ethtool_ops tsi108_ethtool_ops = {
1558 .get_link = ethtool_op_get_link,
1559 .get_settings = tsi108_get_settings,
1560 .set_settings = tsi108_set_settings,
1561};
1562
1536static int 1563static int
1537tsi108_init_one(struct platform_device *pdev) 1564tsi108_init_one(struct platform_device *pdev)
1538{ 1565{
@@ -1584,7 +1611,6 @@ tsi108_init_one(struct platform_device *pdev)
1584 data->mii_if.phy_id = einfo->phy; 1611 data->mii_if.phy_id = einfo->phy;
1585 data->mii_if.phy_id_mask = 0x1f; 1612 data->mii_if.phy_id_mask = 0x1f;
1586 data->mii_if.reg_num_mask = 0x1f; 1613 data->mii_if.reg_num_mask = 0x1f;
1587 data->mii_if.supports_gmii = mii_check_gmii_support(&data->mii_if);
1588 1614
1589 data->phy = einfo->phy; 1615 data->phy = einfo->phy;
1590 data->phy_type = einfo->phy_type; 1616 data->phy_type = einfo->phy_type;
@@ -1598,6 +1624,7 @@ tsi108_init_one(struct platform_device *pdev)
1598 dev->get_stats = tsi108_get_stats; 1624 dev->get_stats = tsi108_get_stats;
1599 netif_napi_add(dev, &data->napi, tsi108_poll, 64); 1625 netif_napi_add(dev, &data->napi, tsi108_poll, 64);
1600 dev->do_ioctl = tsi108_do_ioctl; 1626 dev->do_ioctl = tsi108_do_ioctl;
1627 dev->ethtool_ops = &tsi108_ethtool_ops;
1601 1628
1602 /* Apparently, the Linux networking code won't use scatter-gather 1629 /* Apparently, the Linux networking code won't use scatter-gather
1603 * if the hardware doesn't do checksums. However, it's faster 1630 * if the hardware doesn't do checksums. However, it's faster
@@ -1629,6 +1656,7 @@ tsi108_init_one(struct platform_device *pdev)
1629 goto register_fail; 1656 goto register_fail;
1630 } 1657 }
1631 1658
1659 platform_set_drvdata(pdev, dev);
1632 printk(KERN_INFO "%s: Tsi108 Gigabit Ethernet, MAC: %s\n", 1660 printk(KERN_INFO "%s: Tsi108 Gigabit Ethernet, MAC: %s\n",
1633 dev->name, print_mac(mac, dev->dev_addr)); 1661 dev->name, print_mac(mac, dev->dev_addr));
1634#ifdef DEBUG 1662#ifdef DEBUG
diff --git a/drivers/net/veth.c b/drivers/net/veth.c
index 3f67a29593bc..e2ad98bee6e7 100644
--- a/drivers/net/veth.c
+++ b/drivers/net/veth.c
@@ -244,18 +244,6 @@ static int veth_open(struct net_device *dev)
244 return 0; 244 return 0;
245} 245}
246 246
247static int veth_close(struct net_device *dev)
248{
249 struct veth_priv *priv;
250
251 if (netif_carrier_ok(dev)) {
252 priv = netdev_priv(dev);
253 netif_carrier_off(dev);
254 netif_carrier_off(priv->peer);
255 }
256 return 0;
257}
258
259static int veth_dev_init(struct net_device *dev) 247static int veth_dev_init(struct net_device *dev)
260{ 248{
261 struct veth_net_stats *stats; 249 struct veth_net_stats *stats;
@@ -286,13 +274,50 @@ static void veth_setup(struct net_device *dev)
286 dev->hard_start_xmit = veth_xmit; 274 dev->hard_start_xmit = veth_xmit;
287 dev->get_stats = veth_get_stats; 275 dev->get_stats = veth_get_stats;
288 dev->open = veth_open; 276 dev->open = veth_open;
289 dev->stop = veth_close;
290 dev->ethtool_ops = &veth_ethtool_ops; 277 dev->ethtool_ops = &veth_ethtool_ops;
291 dev->features |= NETIF_F_LLTX; 278 dev->features |= NETIF_F_LLTX;
292 dev->init = veth_dev_init; 279 dev->init = veth_dev_init;
293 dev->destructor = veth_dev_free; 280 dev->destructor = veth_dev_free;
294} 281}
295 282
283static void veth_change_state(struct net_device *dev)
284{
285 struct net_device *peer;
286 struct veth_priv *priv;
287
288 priv = netdev_priv(dev);
289 peer = priv->peer;
290
291 if (netif_carrier_ok(peer)) {
292 if (!netif_carrier_ok(dev))
293 netif_carrier_on(dev);
294 } else {
295 if (netif_carrier_ok(dev))
296 netif_carrier_off(dev);
297 }
298}
299
300static int veth_device_event(struct notifier_block *unused,
301 unsigned long event, void *ptr)
302{
303 struct net_device *dev = ptr;
304
305 if (dev->open != veth_open)
306 goto out;
307
308 switch (event) {
309 case NETDEV_CHANGE:
310 veth_change_state(dev);
311 break;
312 }
313out:
314 return NOTIFY_DONE;
315}
316
317static struct notifier_block veth_notifier_block __read_mostly = {
318 .notifier_call = veth_device_event,
319};
320
296/* 321/*
297 * netlink interface 322 * netlink interface
298 */ 323 */
@@ -454,12 +479,14 @@ static struct rtnl_link_ops veth_link_ops = {
454 479
455static __init int veth_init(void) 480static __init int veth_init(void)
456{ 481{
482 register_netdevice_notifier(&veth_notifier_block);
457 return rtnl_link_register(&veth_link_ops); 483 return rtnl_link_register(&veth_link_ops);
458} 484}
459 485
460static __exit void veth_exit(void) 486static __exit void veth_exit(void)
461{ 487{
462 rtnl_link_unregister(&veth_link_ops); 488 rtnl_link_unregister(&veth_link_ops);
489 unregister_netdevice_notifier(&veth_notifier_block);
463} 490}
464 491
465module_init(veth_init); 492module_init(veth_init);
diff --git a/drivers/net/wireless/ath5k/ath5k.h b/drivers/net/wireless/ath5k/ath5k.h
index c79066b38d3b..69dea3392612 100644
--- a/drivers/net/wireless/ath5k/ath5k.h
+++ b/drivers/net/wireless/ath5k/ath5k.h
@@ -1035,7 +1035,7 @@ struct ath5k_hw {
1035 unsigned int, unsigned int, enum ath5k_pkt_type, unsigned int, 1035 unsigned int, unsigned int, enum ath5k_pkt_type, unsigned int,
1036 unsigned int, unsigned int, unsigned int, unsigned int, 1036 unsigned int, unsigned int, unsigned int, unsigned int,
1037 unsigned int, unsigned int, unsigned int); 1037 unsigned int, unsigned int, unsigned int);
1038 bool (*ah_setup_xtx_desc)(struct ath5k_hw *, struct ath5k_desc *, 1038 int (*ah_setup_xtx_desc)(struct ath5k_hw *, struct ath5k_desc *,
1039 unsigned int, unsigned int, unsigned int, unsigned int, 1039 unsigned int, unsigned int, unsigned int, unsigned int,
1040 unsigned int, unsigned int); 1040 unsigned int, unsigned int);
1041 int (*ah_proc_tx_desc)(struct ath5k_hw *, struct ath5k_desc *); 1041 int (*ah_proc_tx_desc)(struct ath5k_hw *, struct ath5k_desc *);
diff --git a/drivers/net/wireless/ath5k/base.c b/drivers/net/wireless/ath5k/base.c
index ddc87149fe31..bef967ce34a6 100644
--- a/drivers/net/wireless/ath5k/base.c
+++ b/drivers/net/wireless/ath5k/base.c
@@ -668,7 +668,10 @@ ath5k_attach(struct pci_dev *pdev, struct ieee80211_hw *hw)
668 * return false w/o doing anything. MAC's that do 668 * return false w/o doing anything. MAC's that do
669 * support it will return true w/o doing anything. 669 * support it will return true w/o doing anything.
670 */ 670 */
671 if (ah->ah_setup_xtx_desc(ah, NULL, 0, 0, 0, 0, 0, 0)) 671 ret = ah->ah_setup_xtx_desc(ah, NULL, 0, 0, 0, 0, 0, 0);
672 if (ret < 0)
673 goto err;
674 if (ret > 0)
672 __set_bit(ATH_STAT_MRRETRY, sc->status); 675 __set_bit(ATH_STAT_MRRETRY, sc->status);
673 676
674 /* 677 /*
@@ -1256,7 +1259,7 @@ ath5k_txbuf_setup(struct ath5k_softc *sc, struct ath5k_buf *bf,
1256 if (ctl->flags & IEEE80211_TXCTL_NO_ACK) 1259 if (ctl->flags & IEEE80211_TXCTL_NO_ACK)
1257 flags |= AR5K_TXDESC_NOACK; 1260 flags |= AR5K_TXDESC_NOACK;
1258 1261
1259 pktlen = skb->len + FCS_LEN; 1262 pktlen = skb->len;
1260 1263
1261 if (!(ctl->flags & IEEE80211_TXCTL_DO_NOT_ENCRYPT)) { 1264 if (!(ctl->flags & IEEE80211_TXCTL_DO_NOT_ENCRYPT)) {
1262 keyidx = ctl->key_idx; 1265 keyidx = ctl->key_idx;
@@ -1715,6 +1718,7 @@ ath5k_tasklet_rx(unsigned long data)
1715 break; 1718 break;
1716 else if (unlikely(ret)) { 1719 else if (unlikely(ret)) {
1717 ATH5K_ERR(sc, "error in processing rx descriptor\n"); 1720 ATH5K_ERR(sc, "error in processing rx descriptor\n");
1721 spin_unlock(&sc->rxbuflock);
1718 return; 1722 return;
1719 } 1723 }
1720 1724
@@ -1952,7 +1956,7 @@ ath5k_beacon_setup(struct ath5k_softc *sc, struct ath5k_buf *bf,
1952 } 1956 }
1953 1957
1954 ds->ds_data = bf->skbaddr; 1958 ds->ds_data = bf->skbaddr;
1955 ret = ah->ah_setup_tx_desc(ah, ds, skb->len + FCS_LEN, 1959 ret = ah->ah_setup_tx_desc(ah, ds, skb->len,
1956 ieee80211_get_hdrlen_from_skb(skb), 1960 ieee80211_get_hdrlen_from_skb(skb),
1957 AR5K_PKT_TYPE_BEACON, (ctl->power_level * 2), ctl->tx_rate, 1, 1961 AR5K_PKT_TYPE_BEACON, (ctl->power_level * 2), ctl->tx_rate, 1,
1958 AR5K_TXKEYIX_INVALID, antenna, flags, 0, 0); 1962 AR5K_TXKEYIX_INVALID, antenna, flags, 0, 0);
@@ -2126,8 +2130,9 @@ ath5k_beacon_update_timers(struct ath5k_softc *sc, u64 bc_tsf)
2126 "updated timers based on beacon TSF\n"); 2130 "updated timers based on beacon TSF\n");
2127 2131
2128 ATH5K_DBG_UNLIMIT(sc, ATH5K_DEBUG_BEACON, 2132 ATH5K_DBG_UNLIMIT(sc, ATH5K_DEBUG_BEACON,
2129 "bc_tsf %llx hw_tsf %llx bc_tu %u hw_tu %u nexttbtt %u\n", 2133 "bc_tsf %llx hw_tsf %llx bc_tu %u hw_tu %u nexttbtt %u\n",
2130 bc_tsf, hw_tsf, bc_tu, hw_tu, nexttbtt); 2134 (unsigned long long) bc_tsf,
2135 (unsigned long long) hw_tsf, bc_tu, hw_tu, nexttbtt);
2131 ATH5K_DBG_UNLIMIT(sc, ATH5K_DEBUG_BEACON, "intval %u %s %s\n", 2136 ATH5K_DBG_UNLIMIT(sc, ATH5K_DEBUG_BEACON, "intval %u %s %s\n",
2132 intval & AR5K_BEACON_PERIOD, 2137 intval & AR5K_BEACON_PERIOD,
2133 intval & AR5K_BEACON_ENA ? "AR5K_BEACON_ENA" : "", 2138 intval & AR5K_BEACON_ENA ? "AR5K_BEACON_ENA" : "",
@@ -2385,10 +2390,11 @@ ath5k_intr(int irq, void *dev_id)
2385 u64 tsf = ath5k_hw_get_tsf64(ah); 2390 u64 tsf = ath5k_hw_get_tsf64(ah);
2386 sc->nexttbtt += sc->bintval; 2391 sc->nexttbtt += sc->bintval;
2387 ATH5K_DBG(sc, ATH5K_DEBUG_BEACON, 2392 ATH5K_DBG(sc, ATH5K_DEBUG_BEACON,
2388 "SWBA nexttbtt: %x hw_tu: %x " 2393 "SWBA nexttbtt: %x hw_tu: %x "
2389 "TSF: %llx\n", 2394 "TSF: %llx\n",
2390 sc->nexttbtt, 2395 sc->nexttbtt,
2391 TSF_TO_TU(tsf), tsf); 2396 TSF_TO_TU(tsf),
2397 (unsigned long long) tsf);
2392 } else { 2398 } else {
2393 ath5k_beacon_send(sc); 2399 ath5k_beacon_send(sc);
2394 } 2400 }
diff --git a/drivers/net/wireless/ath5k/hw.c b/drivers/net/wireless/ath5k/hw.c
index 3a4bf4035a23..c2de2d958e8e 100644
--- a/drivers/net/wireless/ath5k/hw.c
+++ b/drivers/net/wireless/ath5k/hw.c
@@ -45,7 +45,7 @@ static int ath5k_hw_setup_4word_tx_desc(struct ath5k_hw *, struct ath5k_desc *,
45 unsigned int, unsigned int, enum ath5k_pkt_type, unsigned int, 45 unsigned int, unsigned int, enum ath5k_pkt_type, unsigned int,
46 unsigned int, unsigned int, unsigned int, unsigned int, unsigned int, 46 unsigned int, unsigned int, unsigned int, unsigned int, unsigned int,
47 unsigned int, unsigned int); 47 unsigned int, unsigned int);
48static bool ath5k_hw_setup_xr_tx_desc(struct ath5k_hw *, struct ath5k_desc *, 48static int ath5k_hw_setup_xr_tx_desc(struct ath5k_hw *, struct ath5k_desc *,
49 unsigned int, unsigned int, unsigned int, unsigned int, unsigned int, 49 unsigned int, unsigned int, unsigned int, unsigned int, unsigned int,
50 unsigned int); 50 unsigned int);
51static int ath5k_hw_proc_4word_tx_status(struct ath5k_hw *, struct ath5k_desc *); 51static int ath5k_hw_proc_4word_tx_status(struct ath5k_hw *, struct ath5k_desc *);
@@ -3506,7 +3506,7 @@ ath5k_hw_setup_2word_tx_desc(struct ath5k_hw *ah, struct ath5k_desc *desc,
3506{ 3506{
3507 u32 frame_type; 3507 u32 frame_type;
3508 struct ath5k_hw_2w_tx_desc *tx_desc; 3508 struct ath5k_hw_2w_tx_desc *tx_desc;
3509 unsigned int buff_len; 3509 unsigned int frame_len;
3510 3510
3511 tx_desc = (struct ath5k_hw_2w_tx_desc *)&desc->ds_ctl0; 3511 tx_desc = (struct ath5k_hw_2w_tx_desc *)&desc->ds_ctl0;
3512 3512
@@ -3537,22 +3537,25 @@ ath5k_hw_setup_2word_tx_desc(struct ath5k_hw *ah, struct ath5k_desc *desc,
3537 /* Setup control descriptor */ 3537 /* Setup control descriptor */
3538 3538
3539 /* Verify and set frame length */ 3539 /* Verify and set frame length */
3540 if (pkt_len & ~AR5K_2W_TX_DESC_CTL0_FRAME_LEN) 3540
3541 /* remove padding we might have added before */
3542 frame_len = pkt_len - (hdr_len & 3) + FCS_LEN;
3543
3544 if (frame_len & ~AR5K_2W_TX_DESC_CTL0_FRAME_LEN)
3541 return -EINVAL; 3545 return -EINVAL;
3542 3546
3543 tx_desc->tx_control_0 = pkt_len & AR5K_2W_TX_DESC_CTL0_FRAME_LEN; 3547 tx_desc->tx_control_0 = frame_len & AR5K_2W_TX_DESC_CTL0_FRAME_LEN;
3544 3548
3545 /* Verify and set buffer length */ 3549 /* Verify and set buffer length */
3546 buff_len = pkt_len - FCS_LEN;
3547 3550
3548 /* NB: beacon's BufLen must be a multiple of 4 bytes */ 3551 /* NB: beacon's BufLen must be a multiple of 4 bytes */
3549 if(type == AR5K_PKT_TYPE_BEACON) 3552 if(type == AR5K_PKT_TYPE_BEACON)
3550 buff_len = roundup(buff_len, 4); 3553 pkt_len = roundup(pkt_len, 4);
3551 3554
3552 if (buff_len & ~AR5K_2W_TX_DESC_CTL1_BUF_LEN) 3555 if (pkt_len & ~AR5K_2W_TX_DESC_CTL1_BUF_LEN)
3553 return -EINVAL; 3556 return -EINVAL;
3554 3557
3555 tx_desc->tx_control_1 = buff_len & AR5K_2W_TX_DESC_CTL1_BUF_LEN; 3558 tx_desc->tx_control_1 = pkt_len & AR5K_2W_TX_DESC_CTL1_BUF_LEN;
3556 3559
3557 /* 3560 /*
3558 * Verify and set header length 3561 * Verify and set header length
@@ -3634,7 +3637,7 @@ static int ath5k_hw_setup_4word_tx_desc(struct ath5k_hw *ah,
3634{ 3637{
3635 struct ath5k_hw_4w_tx_desc *tx_desc; 3638 struct ath5k_hw_4w_tx_desc *tx_desc;
3636 struct ath5k_hw_tx_status *tx_status; 3639 struct ath5k_hw_tx_status *tx_status;
3637 unsigned int buff_len; 3640 unsigned int frame_len;
3638 3641
3639 ATH5K_TRACE(ah->ah_sc); 3642 ATH5K_TRACE(ah->ah_sc);
3640 tx_desc = (struct ath5k_hw_4w_tx_desc *)&desc->ds_ctl0; 3643 tx_desc = (struct ath5k_hw_4w_tx_desc *)&desc->ds_ctl0;
@@ -3669,22 +3672,25 @@ static int ath5k_hw_setup_4word_tx_desc(struct ath5k_hw *ah,
3669 /* Setup control descriptor */ 3672 /* Setup control descriptor */
3670 3673
3671 /* Verify and set frame length */ 3674 /* Verify and set frame length */
3672 if (pkt_len & ~AR5K_4W_TX_DESC_CTL0_FRAME_LEN) 3675
3676 /* remove padding we might have added before */
3677 frame_len = pkt_len - (hdr_len & 3) + FCS_LEN;
3678
3679 if (frame_len & ~AR5K_4W_TX_DESC_CTL0_FRAME_LEN)
3673 return -EINVAL; 3680 return -EINVAL;
3674 3681
3675 tx_desc->tx_control_0 = pkt_len & AR5K_4W_TX_DESC_CTL0_FRAME_LEN; 3682 tx_desc->tx_control_0 = frame_len & AR5K_4W_TX_DESC_CTL0_FRAME_LEN;
3676 3683
3677 /* Verify and set buffer length */ 3684 /* Verify and set buffer length */
3678 buff_len = pkt_len - FCS_LEN;
3679 3685
3680 /* NB: beacon's BufLen must be a multiple of 4 bytes */ 3686 /* NB: beacon's BufLen must be a multiple of 4 bytes */
3681 if(type == AR5K_PKT_TYPE_BEACON) 3687 if(type == AR5K_PKT_TYPE_BEACON)
3682 buff_len = roundup(buff_len, 4); 3688 pkt_len = roundup(pkt_len, 4);
3683 3689
3684 if (buff_len & ~AR5K_4W_TX_DESC_CTL1_BUF_LEN) 3690 if (pkt_len & ~AR5K_4W_TX_DESC_CTL1_BUF_LEN)
3685 return -EINVAL; 3691 return -EINVAL;
3686 3692
3687 tx_desc->tx_control_1 = buff_len & AR5K_4W_TX_DESC_CTL1_BUF_LEN; 3693 tx_desc->tx_control_1 = pkt_len & AR5K_4W_TX_DESC_CTL1_BUF_LEN;
3688 3694
3689 tx_desc->tx_control_0 |= 3695 tx_desc->tx_control_0 |=
3690 AR5K_REG_SM(tx_power, AR5K_4W_TX_DESC_CTL0_XMIT_POWER) | 3696 AR5K_REG_SM(tx_power, AR5K_4W_TX_DESC_CTL0_XMIT_POWER) |
@@ -3737,7 +3743,7 @@ static int ath5k_hw_setup_4word_tx_desc(struct ath5k_hw *ah,
3737/* 3743/*
3738 * Initialize a 4-word multirate tx descriptor on 5212 3744 * Initialize a 4-word multirate tx descriptor on 5212
3739 */ 3745 */
3740static bool 3746static int
3741ath5k_hw_setup_xr_tx_desc(struct ath5k_hw *ah, struct ath5k_desc *desc, 3747ath5k_hw_setup_xr_tx_desc(struct ath5k_hw *ah, struct ath5k_desc *desc,
3742 unsigned int tx_rate1, u_int tx_tries1, u_int tx_rate2, u_int tx_tries2, 3748 unsigned int tx_rate1, u_int tx_tries1, u_int tx_rate2, u_int tx_tries2,
3743 unsigned int tx_rate3, u_int tx_tries3) 3749 unsigned int tx_rate3, u_int tx_tries3)
@@ -3777,10 +3783,10 @@ ath5k_hw_setup_xr_tx_desc(struct ath5k_hw *ah, struct ath5k_desc *desc,
3777 3783
3778#undef _XTX_TRIES 3784#undef _XTX_TRIES
3779 3785
3780 return true; 3786 return 1;
3781 } 3787 }
3782 3788
3783 return false; 3789 return 0;
3784} 3790}
3785 3791
3786/* 3792/*
diff --git a/drivers/net/wireless/b43/b43.h b/drivers/net/wireless/b43/b43.h
index 08a011f0834a..f13346ba9dd2 100644
--- a/drivers/net/wireless/b43/b43.h
+++ b/drivers/net/wireless/b43/b43.h
@@ -14,6 +14,12 @@
14#include "lo.h" 14#include "lo.h"
15#include "phy.h" 15#include "phy.h"
16 16
17
18/* The unique identifier of the firmware that's officially supported by
19 * this driver version. */
20#define B43_SUPPORTED_FIRMWARE_ID "FW13"
21
22
17#ifdef CONFIG_B43_DEBUG 23#ifdef CONFIG_B43_DEBUG
18# define B43_DEBUG 1 24# define B43_DEBUG 1
19#else 25#else
diff --git a/drivers/net/wireless/b43/main.c b/drivers/net/wireless/b43/main.c
index ef65c41af00f..51dfce16178a 100644
--- a/drivers/net/wireless/b43/main.c
+++ b/drivers/net/wireless/b43/main.c
@@ -58,6 +58,8 @@ MODULE_AUTHOR("Stefano Brivio");
58MODULE_AUTHOR("Michael Buesch"); 58MODULE_AUTHOR("Michael Buesch");
59MODULE_LICENSE("GPL"); 59MODULE_LICENSE("GPL");
60 60
61MODULE_FIRMWARE(B43_SUPPORTED_FIRMWARE_ID);
62
61 63
62static int modparam_bad_frames_preempt; 64static int modparam_bad_frames_preempt;
63module_param_named(bad_frames_preempt, modparam_bad_frames_preempt, int, 0444); 65module_param_named(bad_frames_preempt, modparam_bad_frames_preempt, int, 0444);
@@ -1859,11 +1861,11 @@ static int b43_upload_microcode(struct b43_wldev *dev)
1859 err = -EOPNOTSUPP; 1861 err = -EOPNOTSUPP;
1860 goto error; 1862 goto error;
1861 } 1863 }
1862 b43dbg(dev->wl, "Loading firmware version %u.%u " 1864 b43info(dev->wl, "Loading firmware version %u.%u "
1863 "(20%.2i-%.2i-%.2i %.2i:%.2i:%.2i)\n", 1865 "(20%.2i-%.2i-%.2i %.2i:%.2i:%.2i)\n",
1864 fwrev, fwpatch, 1866 fwrev, fwpatch,
1865 (fwdate >> 12) & 0xF, (fwdate >> 8) & 0xF, fwdate & 0xFF, 1867 (fwdate >> 12) & 0xF, (fwdate >> 8) & 0xF, fwdate & 0xFF,
1866 (fwtime >> 11) & 0x1F, (fwtime >> 5) & 0x3F, fwtime & 0x1F); 1868 (fwtime >> 11) & 0x1F, (fwtime >> 5) & 0x3F, fwtime & 0x1F);
1867 1869
1868 dev->fw.rev = fwrev; 1870 dev->fw.rev = fwrev;
1869 dev->fw.patch = fwpatch; 1871 dev->fw.patch = fwpatch;
@@ -4200,6 +4202,33 @@ static struct ssb_driver b43_ssb_driver = {
4200 .resume = b43_resume, 4202 .resume = b43_resume,
4201}; 4203};
4202 4204
4205static void b43_print_driverinfo(void)
4206{
4207 const char *feat_pci = "", *feat_pcmcia = "", *feat_nphy = "",
4208 *feat_leds = "", *feat_rfkill = "";
4209
4210#ifdef CONFIG_B43_PCI_AUTOSELECT
4211 feat_pci = "P";
4212#endif
4213#ifdef CONFIG_B43_PCMCIA
4214 feat_pcmcia = "M";
4215#endif
4216#ifdef CONFIG_B43_NPHY
4217 feat_nphy = "N";
4218#endif
4219#ifdef CONFIG_B43_LEDS
4220 feat_leds = "L";
4221#endif
4222#ifdef CONFIG_B43_RFKILL
4223 feat_rfkill = "R";
4224#endif
4225 printk(KERN_INFO "Broadcom 43xx driver loaded "
4226 "[ Features: %s%s%s%s%s, Firmware-ID: "
4227 B43_SUPPORTED_FIRMWARE_ID " ]\n",
4228 feat_pci, feat_pcmcia, feat_nphy,
4229 feat_leds, feat_rfkill);
4230}
4231
4203static int __init b43_init(void) 4232static int __init b43_init(void)
4204{ 4233{
4205 int err; 4234 int err;
@@ -4211,6 +4240,7 @@ static int __init b43_init(void)
4211 err = ssb_driver_register(&b43_ssb_driver); 4240 err = ssb_driver_register(&b43_ssb_driver);
4212 if (err) 4241 if (err)
4213 goto err_pcmcia_exit; 4242 goto err_pcmcia_exit;
4243 b43_print_driverinfo();
4214 4244
4215 return err; 4245 return err;
4216 4246
diff --git a/drivers/net/wireless/b43legacy/b43legacy.h b/drivers/net/wireless/b43legacy/b43legacy.h
index c80edd2b9044..93d45b71799a 100644
--- a/drivers/net/wireless/b43legacy/b43legacy.h
+++ b/drivers/net/wireless/b43legacy/b43legacy.h
@@ -23,6 +23,10 @@
23#include "phy.h" 23#include "phy.h"
24 24
25 25
26/* The unique identifier of the firmware that's officially supported by this
27 * driver version. */
28#define B43legacy_SUPPORTED_FIRMWARE_ID "FW10"
29
26#define B43legacy_IRQWAIT_MAX_RETRIES 20 30#define B43legacy_IRQWAIT_MAX_RETRIES 20
27 31
28#define B43legacy_RX_MAX_SSI 60 /* best guess at max ssi */ 32#define B43legacy_RX_MAX_SSI 60 /* best guess at max ssi */
diff --git a/drivers/net/wireless/b43legacy/dma.c b/drivers/net/wireless/b43legacy/dma.c
index 6e08405e8026..e87b427d5e43 100644
--- a/drivers/net/wireless/b43legacy/dma.c
+++ b/drivers/net/wireless/b43legacy/dma.c
@@ -354,7 +354,8 @@ return 0;
354} 354}
355 355
356 356
357u16 b43legacy_dmacontroller_base(int dma64bit, int controller_idx) 357static u16 b43legacy_dmacontroller_base(enum b43legacy_dmatype type,
358 int controller_idx)
358{ 359{
359 static const u16 map64[] = { 360 static const u16 map64[] = {
360 B43legacy_MMIO_DMA64_BASE0, 361 B43legacy_MMIO_DMA64_BASE0,
@@ -373,7 +374,7 @@ u16 b43legacy_dmacontroller_base(int dma64bit, int controller_idx)
373 B43legacy_MMIO_DMA32_BASE5, 374 B43legacy_MMIO_DMA32_BASE5,
374 }; 375 };
375 376
376 if (dma64bit) { 377 if (type == B43legacy_DMA_64BIT) {
377 B43legacy_WARN_ON(!(controller_idx >= 0 && 378 B43legacy_WARN_ON(!(controller_idx >= 0 &&
378 controller_idx < ARRAY_SIZE(map64))); 379 controller_idx < ARRAY_SIZE(map64)));
379 return map64[controller_idx]; 380 return map64[controller_idx];
@@ -480,8 +481,9 @@ static void free_ringmemory(struct b43legacy_dmaring *ring)
480} 481}
481 482
482/* Reset the RX DMA channel */ 483/* Reset the RX DMA channel */
483int b43legacy_dmacontroller_rx_reset(struct b43legacy_wldev *dev, 484static int b43legacy_dmacontroller_rx_reset(struct b43legacy_wldev *dev,
484 u16 mmio_base, int dma64) 485 u16 mmio_base,
486 enum b43legacy_dmatype type)
485{ 487{
486 int i; 488 int i;
487 u32 value; 489 u32 value;
@@ -489,13 +491,14 @@ int b43legacy_dmacontroller_rx_reset(struct b43legacy_wldev *dev,
489 491
490 might_sleep(); 492 might_sleep();
491 493
492 offset = dma64 ? B43legacy_DMA64_RXCTL : B43legacy_DMA32_RXCTL; 494 offset = (type == B43legacy_DMA_64BIT) ?
495 B43legacy_DMA64_RXCTL : B43legacy_DMA32_RXCTL;
493 b43legacy_write32(dev, mmio_base + offset, 0); 496 b43legacy_write32(dev, mmio_base + offset, 0);
494 for (i = 0; i < 10; i++) { 497 for (i = 0; i < 10; i++) {
495 offset = dma64 ? B43legacy_DMA64_RXSTATUS : 498 offset = (type == B43legacy_DMA_64BIT) ?
496 B43legacy_DMA32_RXSTATUS; 499 B43legacy_DMA64_RXSTATUS : B43legacy_DMA32_RXSTATUS;
497 value = b43legacy_read32(dev, mmio_base + offset); 500 value = b43legacy_read32(dev, mmio_base + offset);
498 if (dma64) { 501 if (type == B43legacy_DMA_64BIT) {
499 value &= B43legacy_DMA64_RXSTAT; 502 value &= B43legacy_DMA64_RXSTAT;
500 if (value == B43legacy_DMA64_RXSTAT_DISABLED) { 503 if (value == B43legacy_DMA64_RXSTAT_DISABLED) {
501 i = -1; 504 i = -1;
@@ -519,8 +522,9 @@ int b43legacy_dmacontroller_rx_reset(struct b43legacy_wldev *dev,
519} 522}
520 523
521/* Reset the RX DMA channel */ 524/* Reset the RX DMA channel */
522int b43legacy_dmacontroller_tx_reset(struct b43legacy_wldev *dev, 525static int b43legacy_dmacontroller_tx_reset(struct b43legacy_wldev *dev,
523 u16 mmio_base, int dma64) 526 u16 mmio_base,
527 enum b43legacy_dmatype type)
524{ 528{
525 int i; 529 int i;
526 u32 value; 530 u32 value;
@@ -529,10 +533,10 @@ int b43legacy_dmacontroller_tx_reset(struct b43legacy_wldev *dev,
529 might_sleep(); 533 might_sleep();
530 534
531 for (i = 0; i < 10; i++) { 535 for (i = 0; i < 10; i++) {
532 offset = dma64 ? B43legacy_DMA64_TXSTATUS : 536 offset = (type == B43legacy_DMA_64BIT) ?
533 B43legacy_DMA32_TXSTATUS; 537 B43legacy_DMA64_TXSTATUS : B43legacy_DMA32_TXSTATUS;
534 value = b43legacy_read32(dev, mmio_base + offset); 538 value = b43legacy_read32(dev, mmio_base + offset);
535 if (dma64) { 539 if (type == B43legacy_DMA_64BIT) {
536 value &= B43legacy_DMA64_TXSTAT; 540 value &= B43legacy_DMA64_TXSTAT;
537 if (value == B43legacy_DMA64_TXSTAT_DISABLED || 541 if (value == B43legacy_DMA64_TXSTAT_DISABLED ||
538 value == B43legacy_DMA64_TXSTAT_IDLEWAIT || 542 value == B43legacy_DMA64_TXSTAT_IDLEWAIT ||
@@ -547,13 +551,14 @@ int b43legacy_dmacontroller_tx_reset(struct b43legacy_wldev *dev,
547 } 551 }
548 msleep(1); 552 msleep(1);
549 } 553 }
550 offset = dma64 ? B43legacy_DMA64_TXCTL : B43legacy_DMA32_TXCTL; 554 offset = (type == B43legacy_DMA_64BIT) ? B43legacy_DMA64_TXCTL :
555 B43legacy_DMA32_TXCTL;
551 b43legacy_write32(dev, mmio_base + offset, 0); 556 b43legacy_write32(dev, mmio_base + offset, 0);
552 for (i = 0; i < 10; i++) { 557 for (i = 0; i < 10; i++) {
553 offset = dma64 ? B43legacy_DMA64_TXSTATUS : 558 offset = (type == B43legacy_DMA_64BIT) ?
554 B43legacy_DMA32_TXSTATUS; 559 B43legacy_DMA64_TXSTATUS : B43legacy_DMA32_TXSTATUS;
555 value = b43legacy_read32(dev, mmio_base + offset); 560 value = b43legacy_read32(dev, mmio_base + offset);
556 if (dma64) { 561 if (type == B43legacy_DMA_64BIT) {
557 value &= B43legacy_DMA64_TXSTAT; 562 value &= B43legacy_DMA64_TXSTAT;
558 if (value == B43legacy_DMA64_TXSTAT_DISABLED) { 563 if (value == B43legacy_DMA64_TXSTAT_DISABLED) {
559 i = -1; 564 i = -1;
@@ -578,6 +583,32 @@ int b43legacy_dmacontroller_tx_reset(struct b43legacy_wldev *dev,
578 return 0; 583 return 0;
579} 584}
580 585
586/* Check if a DMA mapping address is invalid. */
587static bool b43legacy_dma_mapping_error(struct b43legacy_dmaring *ring,
588 dma_addr_t addr,
589 size_t buffersize)
590{
591 if (unlikely(dma_mapping_error(addr)))
592 return 1;
593
594 switch (ring->type) {
595 case B43legacy_DMA_30BIT:
596 if ((u64)addr + buffersize > (1ULL << 30))
597 return 1;
598 break;
599 case B43legacy_DMA_32BIT:
600 if ((u64)addr + buffersize > (1ULL << 32))
601 return 1;
602 break;
603 case B43legacy_DMA_64BIT:
604 /* Currently we can't have addresses beyond 64 bits in the kernel. */
605 break;
606 }
607
608 /* The address is OK. */
609 return 0;
610}
611
581static int setup_rx_descbuffer(struct b43legacy_dmaring *ring, 612static int setup_rx_descbuffer(struct b43legacy_dmaring *ring,
582 struct b43legacy_dmadesc_generic *desc, 613 struct b43legacy_dmadesc_generic *desc,
583 struct b43legacy_dmadesc_meta *meta, 614 struct b43legacy_dmadesc_meta *meta,
@@ -595,7 +626,7 @@ static int setup_rx_descbuffer(struct b43legacy_dmaring *ring,
595 return -ENOMEM; 626 return -ENOMEM;
596 dmaaddr = map_descbuffer(ring, skb->data, 627 dmaaddr = map_descbuffer(ring, skb->data,
597 ring->rx_buffersize, 0); 628 ring->rx_buffersize, 0);
598 if (dma_mapping_error(dmaaddr)) { 629 if (b43legacy_dma_mapping_error(ring, dmaaddr, ring->rx_buffersize)) {
599 /* ugh. try to realloc in zone_dma */ 630 /* ugh. try to realloc in zone_dma */
600 gfp_flags |= GFP_DMA; 631 gfp_flags |= GFP_DMA;
601 632
@@ -608,7 +639,7 @@ static int setup_rx_descbuffer(struct b43legacy_dmaring *ring,
608 ring->rx_buffersize, 0); 639 ring->rx_buffersize, 0);
609 } 640 }
610 641
611 if (dma_mapping_error(dmaaddr)) { 642 if (b43legacy_dma_mapping_error(ring, dmaaddr, ring->rx_buffersize)) {
612 dev_kfree_skb_any(skb); 643 dev_kfree_skb_any(skb);
613 return -EIO; 644 return -EIO;
614 } 645 }
@@ -674,7 +705,7 @@ static int dmacontroller_setup(struct b43legacy_dmaring *ring)
674 u32 trans = ssb_dma_translation(ring->dev->dev); 705 u32 trans = ssb_dma_translation(ring->dev->dev);
675 706
676 if (ring->tx) { 707 if (ring->tx) {
677 if (ring->dma64) { 708 if (ring->type == B43legacy_DMA_64BIT) {
678 u64 ringbase = (u64)(ring->dmabase); 709 u64 ringbase = (u64)(ring->dmabase);
679 710
680 addrext = ((ringbase >> 32) & SSB_DMA_TRANSLATION_MASK) 711 addrext = ((ringbase >> 32) & SSB_DMA_TRANSLATION_MASK)
@@ -709,7 +740,7 @@ static int dmacontroller_setup(struct b43legacy_dmaring *ring)
709 err = alloc_initial_descbuffers(ring); 740 err = alloc_initial_descbuffers(ring);
710 if (err) 741 if (err)
711 goto out; 742 goto out;
712 if (ring->dma64) { 743 if (ring->type == B43legacy_DMA_64BIT) {
713 u64 ringbase = (u64)(ring->dmabase); 744 u64 ringbase = (u64)(ring->dmabase);
714 745
715 addrext = ((ringbase >> 32) & SSB_DMA_TRANSLATION_MASK) 746 addrext = ((ringbase >> 32) & SSB_DMA_TRANSLATION_MASK)
@@ -760,16 +791,16 @@ static void dmacontroller_cleanup(struct b43legacy_dmaring *ring)
760{ 791{
761 if (ring->tx) { 792 if (ring->tx) {
762 b43legacy_dmacontroller_tx_reset(ring->dev, ring->mmio_base, 793 b43legacy_dmacontroller_tx_reset(ring->dev, ring->mmio_base,
763 ring->dma64); 794 ring->type);
764 if (ring->dma64) { 795 if (ring->type == B43legacy_DMA_64BIT) {
765 b43legacy_dma_write(ring, B43legacy_DMA64_TXRINGLO, 0); 796 b43legacy_dma_write(ring, B43legacy_DMA64_TXRINGLO, 0);
766 b43legacy_dma_write(ring, B43legacy_DMA64_TXRINGHI, 0); 797 b43legacy_dma_write(ring, B43legacy_DMA64_TXRINGHI, 0);
767 } else 798 } else
768 b43legacy_dma_write(ring, B43legacy_DMA32_TXRING, 0); 799 b43legacy_dma_write(ring, B43legacy_DMA32_TXRING, 0);
769 } else { 800 } else {
770 b43legacy_dmacontroller_rx_reset(ring->dev, ring->mmio_base, 801 b43legacy_dmacontroller_rx_reset(ring->dev, ring->mmio_base,
771 ring->dma64); 802 ring->type);
772 if (ring->dma64) { 803 if (ring->type == B43legacy_DMA_64BIT) {
773 b43legacy_dma_write(ring, B43legacy_DMA64_RXRINGLO, 0); 804 b43legacy_dma_write(ring, B43legacy_DMA64_RXRINGLO, 0);
774 b43legacy_dma_write(ring, B43legacy_DMA64_RXRINGHI, 0); 805 b43legacy_dma_write(ring, B43legacy_DMA64_RXRINGHI, 0);
775 } else 806 } else
@@ -824,11 +855,10 @@ static u64 supported_dma_mask(struct b43legacy_wldev *dev)
824 855
825/* Main initialization function. */ 856/* Main initialization function. */
826static 857static
827struct b43legacy_dmaring *b43legacy_setup_dmaring( 858struct b43legacy_dmaring *b43legacy_setup_dmaring(struct b43legacy_wldev *dev,
828 struct b43legacy_wldev *dev, 859 int controller_index,
829 int controller_index, 860 int for_tx,
830 int for_tx, 861 enum b43legacy_dmatype type)
831 int dma64)
832{ 862{
833 struct b43legacy_dmaring *ring; 863 struct b43legacy_dmaring *ring;
834 int err; 864 int err;
@@ -838,6 +868,7 @@ struct b43legacy_dmaring *b43legacy_setup_dmaring(
838 ring = kzalloc(sizeof(*ring), GFP_KERNEL); 868 ring = kzalloc(sizeof(*ring), GFP_KERNEL);
839 if (!ring) 869 if (!ring)
840 goto out; 870 goto out;
871 ring->type = type;
841 872
842 nr_slots = B43legacy_RXRING_SLOTS; 873 nr_slots = B43legacy_RXRING_SLOTS;
843 if (for_tx) 874 if (for_tx)
@@ -855,12 +886,12 @@ struct b43legacy_dmaring *b43legacy_setup_dmaring(
855 goto err_kfree_meta; 886 goto err_kfree_meta;
856 887
857 /* test for ability to dma to txhdr_cache */ 888 /* test for ability to dma to txhdr_cache */
858 dma_test = dma_map_single(dev->dev->dev, 889 dma_test = dma_map_single(dev->dev->dev, ring->txhdr_cache,
859 ring->txhdr_cache, 890 sizeof(struct b43legacy_txhdr_fw3),
860 sizeof(struct b43legacy_txhdr_fw3), 891 DMA_TO_DEVICE);
861 DMA_TO_DEVICE);
862 892
863 if (dma_mapping_error(dma_test)) { 893 if (b43legacy_dma_mapping_error(ring, dma_test,
894 sizeof(struct b43legacy_txhdr_fw3))) {
864 /* ugh realloc */ 895 /* ugh realloc */
865 kfree(ring->txhdr_cache); 896 kfree(ring->txhdr_cache);
866 ring->txhdr_cache = kcalloc(nr_slots, 897 ring->txhdr_cache = kcalloc(nr_slots,
@@ -874,7 +905,8 @@ struct b43legacy_dmaring *b43legacy_setup_dmaring(
874 sizeof(struct b43legacy_txhdr_fw3), 905 sizeof(struct b43legacy_txhdr_fw3),
875 DMA_TO_DEVICE); 906 DMA_TO_DEVICE);
876 907
877 if (dma_mapping_error(dma_test)) 908 if (b43legacy_dma_mapping_error(ring, dma_test,
909 sizeof(struct b43legacy_txhdr_fw3)))
878 goto err_kfree_txhdr_cache; 910 goto err_kfree_txhdr_cache;
879 } 911 }
880 912
@@ -885,11 +917,9 @@ struct b43legacy_dmaring *b43legacy_setup_dmaring(
885 917
886 ring->dev = dev; 918 ring->dev = dev;
887 ring->nr_slots = nr_slots; 919 ring->nr_slots = nr_slots;
888 ring->mmio_base = b43legacy_dmacontroller_base(dma64, 920 ring->mmio_base = b43legacy_dmacontroller_base(type, controller_index);
889 controller_index);
890 ring->index = controller_index; 921 ring->index = controller_index;
891 ring->dma64 = !!dma64; 922 if (type == B43legacy_DMA_64BIT)
892 if (dma64)
893 ring->ops = &dma64_ops; 923 ring->ops = &dma64_ops;
894 else 924 else
895 ring->ops = &dma32_ops; 925 ring->ops = &dma32_ops;
@@ -939,10 +969,10 @@ static void b43legacy_destroy_dmaring(struct b43legacy_dmaring *ring)
939 if (!ring) 969 if (!ring)
940 return; 970 return;
941 971
942 b43legacydbg(ring->dev->wl, "DMA-%s 0x%04X (%s) max used slots:" 972 b43legacydbg(ring->dev->wl, "DMA-%u 0x%04X (%s) max used slots:"
943 " %d/%d\n", (ring->dma64) ? "64" : "32", ring->mmio_base, 973 " %d/%d\n", (unsigned int)(ring->type), ring->mmio_base,
944 (ring->tx) ? "TX" : "RX", 974 (ring->tx) ? "TX" : "RX", ring->max_used_slots,
945 ring->max_used_slots, ring->nr_slots); 975 ring->nr_slots);
946 /* Device IRQs are disabled prior entering this function, 976 /* Device IRQs are disabled prior entering this function,
947 * so no need to take care of concurrency with rx handler stuff. 977 * so no need to take care of concurrency with rx handler stuff.
948 */ 978 */
@@ -988,11 +1018,22 @@ int b43legacy_dma_init(struct b43legacy_wldev *dev)
988 struct b43legacy_dmaring *ring; 1018 struct b43legacy_dmaring *ring;
989 int err; 1019 int err;
990 u64 dmamask; 1020 u64 dmamask;
991 int dma64 = 0; 1021 enum b43legacy_dmatype type;
992 1022
993 dmamask = supported_dma_mask(dev); 1023 dmamask = supported_dma_mask(dev);
994 if (dmamask == DMA_64BIT_MASK) 1024 switch (dmamask) {
995 dma64 = 1; 1025 default:
1026 B43legacy_WARN_ON(1);
1027 case DMA_30BIT_MASK:
1028 type = B43legacy_DMA_30BIT;
1029 break;
1030 case DMA_32BIT_MASK:
1031 type = B43legacy_DMA_32BIT;
1032 break;
1033 case DMA_64BIT_MASK:
1034 type = B43legacy_DMA_64BIT;
1035 break;
1036 }
996 1037
997 err = ssb_dma_set_mask(dev->dev, dmamask); 1038 err = ssb_dma_set_mask(dev->dev, dmamask);
998 if (err) { 1039 if (err) {
@@ -1010,52 +1051,50 @@ int b43legacy_dma_init(struct b43legacy_wldev *dev)
1010 1051
1011 err = -ENOMEM; 1052 err = -ENOMEM;
1012 /* setup TX DMA channels. */ 1053 /* setup TX DMA channels. */
1013 ring = b43legacy_setup_dmaring(dev, 0, 1, dma64); 1054 ring = b43legacy_setup_dmaring(dev, 0, 1, type);
1014 if (!ring) 1055 if (!ring)
1015 goto out; 1056 goto out;
1016 dma->tx_ring0 = ring; 1057 dma->tx_ring0 = ring;
1017 1058
1018 ring = b43legacy_setup_dmaring(dev, 1, 1, dma64); 1059 ring = b43legacy_setup_dmaring(dev, 1, 1, type);
1019 if (!ring) 1060 if (!ring)
1020 goto err_destroy_tx0; 1061 goto err_destroy_tx0;
1021 dma->tx_ring1 = ring; 1062 dma->tx_ring1 = ring;
1022 1063
1023 ring = b43legacy_setup_dmaring(dev, 2, 1, dma64); 1064 ring = b43legacy_setup_dmaring(dev, 2, 1, type);
1024 if (!ring) 1065 if (!ring)
1025 goto err_destroy_tx1; 1066 goto err_destroy_tx1;
1026 dma->tx_ring2 = ring; 1067 dma->tx_ring2 = ring;
1027 1068
1028 ring = b43legacy_setup_dmaring(dev, 3, 1, dma64); 1069 ring = b43legacy_setup_dmaring(dev, 3, 1, type);
1029 if (!ring) 1070 if (!ring)
1030 goto err_destroy_tx2; 1071 goto err_destroy_tx2;
1031 dma->tx_ring3 = ring; 1072 dma->tx_ring3 = ring;
1032 1073
1033 ring = b43legacy_setup_dmaring(dev, 4, 1, dma64); 1074 ring = b43legacy_setup_dmaring(dev, 4, 1, type);
1034 if (!ring) 1075 if (!ring)
1035 goto err_destroy_tx3; 1076 goto err_destroy_tx3;
1036 dma->tx_ring4 = ring; 1077 dma->tx_ring4 = ring;
1037 1078
1038 ring = b43legacy_setup_dmaring(dev, 5, 1, dma64); 1079 ring = b43legacy_setup_dmaring(dev, 5, 1, type);
1039 if (!ring) 1080 if (!ring)
1040 goto err_destroy_tx4; 1081 goto err_destroy_tx4;
1041 dma->tx_ring5 = ring; 1082 dma->tx_ring5 = ring;
1042 1083
1043 /* setup RX DMA channels. */ 1084 /* setup RX DMA channels. */
1044 ring = b43legacy_setup_dmaring(dev, 0, 0, dma64); 1085 ring = b43legacy_setup_dmaring(dev, 0, 0, type);
1045 if (!ring) 1086 if (!ring)
1046 goto err_destroy_tx5; 1087 goto err_destroy_tx5;
1047 dma->rx_ring0 = ring; 1088 dma->rx_ring0 = ring;
1048 1089
1049 if (dev->dev->id.revision < 5) { 1090 if (dev->dev->id.revision < 5) {
1050 ring = b43legacy_setup_dmaring(dev, 3, 0, dma64); 1091 ring = b43legacy_setup_dmaring(dev, 3, 0, type);
1051 if (!ring) 1092 if (!ring)
1052 goto err_destroy_rx0; 1093 goto err_destroy_rx0;
1053 dma->rx_ring3 = ring; 1094 dma->rx_ring3 = ring;
1054 } 1095 }
1055 1096
1056 b43legacydbg(dev->wl, "%d-bit DMA initialized\n", 1097 b43legacydbg(dev->wl, "%u-bit DMA initialized\n", (unsigned int)type);
1057 (dmamask == DMA_64BIT_MASK) ? 64 :
1058 (dmamask == DMA_32BIT_MASK) ? 32 : 30);
1059 err = 0; 1098 err = 0;
1060out: 1099out:
1061 return err; 1100 return err;
@@ -1194,9 +1233,13 @@ static int dma_tx_fragment(struct b43legacy_dmaring *ring,
1194 } 1233 }
1195 1234
1196 meta_hdr->dmaaddr = map_descbuffer(ring, (unsigned char *)header, 1235 meta_hdr->dmaaddr = map_descbuffer(ring, (unsigned char *)header,
1197 sizeof(struct b43legacy_txhdr_fw3), 1); 1236 sizeof(struct b43legacy_txhdr_fw3), 1);
1198 if (dma_mapping_error(meta_hdr->dmaaddr)) 1237 if (b43legacy_dma_mapping_error(ring, meta_hdr->dmaaddr,
1238 sizeof(struct b43legacy_txhdr_fw3))) {
1239 ring->current_slot = old_top_slot;
1240 ring->used_slots = old_used_slots;
1199 return -EIO; 1241 return -EIO;
1242 }
1200 ops->fill_descriptor(ring, desc, meta_hdr->dmaaddr, 1243 ops->fill_descriptor(ring, desc, meta_hdr->dmaaddr,
1201 sizeof(struct b43legacy_txhdr_fw3), 1, 0, 0); 1244 sizeof(struct b43legacy_txhdr_fw3), 1, 0, 0);
1202 1245
@@ -1211,7 +1254,7 @@ static int dma_tx_fragment(struct b43legacy_dmaring *ring,
1211 1254
1212 meta->dmaaddr = map_descbuffer(ring, skb->data, skb->len, 1); 1255 meta->dmaaddr = map_descbuffer(ring, skb->data, skb->len, 1);
1213 /* create a bounce buffer in zone_dma on mapping failure. */ 1256 /* create a bounce buffer in zone_dma on mapping failure. */
1214 if (dma_mapping_error(meta->dmaaddr)) { 1257 if (b43legacy_dma_mapping_error(ring, meta->dmaaddr, skb->len)) {
1215 bounce_skb = __dev_alloc_skb(skb->len, GFP_ATOMIC | GFP_DMA); 1258 bounce_skb = __dev_alloc_skb(skb->len, GFP_ATOMIC | GFP_DMA);
1216 if (!bounce_skb) { 1259 if (!bounce_skb) {
1217 ring->current_slot = old_top_slot; 1260 ring->current_slot = old_top_slot;
@@ -1225,7 +1268,7 @@ static int dma_tx_fragment(struct b43legacy_dmaring *ring,
1225 skb = bounce_skb; 1268 skb = bounce_skb;
1226 meta->skb = skb; 1269 meta->skb = skb;
1227 meta->dmaaddr = map_descbuffer(ring, skb->data, skb->len, 1); 1270 meta->dmaaddr = map_descbuffer(ring, skb->data, skb->len, 1);
1228 if (dma_mapping_error(meta->dmaaddr)) { 1271 if (b43legacy_dma_mapping_error(ring, meta->dmaaddr, skb->len)) {
1229 ring->current_slot = old_top_slot; 1272 ring->current_slot = old_top_slot;
1230 ring->used_slots = old_used_slots; 1273 ring->used_slots = old_used_slots;
1231 err = -EIO; 1274 err = -EIO;
diff --git a/drivers/net/wireless/b43legacy/dma.h b/drivers/net/wireless/b43legacy/dma.h
index 26f6ab08de75..2dd488c5be2d 100644
--- a/drivers/net/wireless/b43legacy/dma.h
+++ b/drivers/net/wireless/b43legacy/dma.h
@@ -218,6 +218,12 @@ struct b43legacy_dma_ops {
218 void (*set_current_rxslot)(struct b43legacy_dmaring *ring, int slot); 218 void (*set_current_rxslot)(struct b43legacy_dmaring *ring, int slot);
219}; 219};
220 220
221enum b43legacy_dmatype {
222 B43legacy_DMA_30BIT = 30,
223 B43legacy_DMA_32BIT = 32,
224 B43legacy_DMA_64BIT = 64,
225};
226
221struct b43legacy_dmaring { 227struct b43legacy_dmaring {
222 /* Lowlevel DMA ops. */ 228 /* Lowlevel DMA ops. */
223 const struct b43legacy_dma_ops *ops; 229 const struct b43legacy_dma_ops *ops;
@@ -250,8 +256,8 @@ struct b43legacy_dmaring {
250 int index; 256 int index;
251 /* Boolean. Is this a TX ring? */ 257 /* Boolean. Is this a TX ring? */
252 bool tx; 258 bool tx;
253 /* Boolean. 64bit DMA if true, 32bit DMA otherwise. */ 259 /* The type of DMA engine used. */
254 bool dma64; 260 enum b43legacy_dmatype type;
255 /* Boolean. Is this ring stopped at ieee80211 level? */ 261 /* Boolean. Is this ring stopped at ieee80211 level? */
256 bool stopped; 262 bool stopped;
257 /* Lock, only used for TX. */ 263 /* Lock, only used for TX. */
@@ -284,15 +290,6 @@ void b43legacy_dma_write(struct b43legacy_dmaring *ring,
284int b43legacy_dma_init(struct b43legacy_wldev *dev); 290int b43legacy_dma_init(struct b43legacy_wldev *dev);
285void b43legacy_dma_free(struct b43legacy_wldev *dev); 291void b43legacy_dma_free(struct b43legacy_wldev *dev);
286 292
287int b43legacy_dmacontroller_rx_reset(struct b43legacy_wldev *dev,
288 u16 dmacontroller_mmio_base,
289 int dma64);
290int b43legacy_dmacontroller_tx_reset(struct b43legacy_wldev *dev,
291 u16 dmacontroller_mmio_base,
292 int dma64);
293
294u16 b43legacy_dmacontroller_base(int dma64bit, int dmacontroller_idx);
295
296void b43legacy_dma_tx_suspend(struct b43legacy_wldev *dev); 293void b43legacy_dma_tx_suspend(struct b43legacy_wldev *dev);
297void b43legacy_dma_tx_resume(struct b43legacy_wldev *dev); 294void b43legacy_dma_tx_resume(struct b43legacy_wldev *dev);
298 295
@@ -320,20 +317,6 @@ void b43legacy_dma_free(struct b43legacy_wldev *dev)
320{ 317{
321} 318}
322static inline 319static inline
323int b43legacy_dmacontroller_rx_reset(struct b43legacy_wldev *dev,
324 u16 dmacontroller_mmio_base,
325 int dma64)
326{
327 return 0;
328}
329static inline
330int b43legacy_dmacontroller_tx_reset(struct b43legacy_wldev *dev,
331 u16 dmacontroller_mmio_base,
332 int dma64)
333{
334 return 0;
335}
336static inline
337void b43legacy_dma_get_tx_stats(struct b43legacy_wldev *dev, 320void b43legacy_dma_get_tx_stats(struct b43legacy_wldev *dev,
338 struct ieee80211_tx_queue_stats *stats) 321 struct ieee80211_tx_queue_stats *stats)
339{ 322{
diff --git a/drivers/net/wireless/b43legacy/main.c b/drivers/net/wireless/b43legacy/main.c
index 53f7f2e97615..c39de422e220 100644
--- a/drivers/net/wireless/b43legacy/main.c
+++ b/drivers/net/wireless/b43legacy/main.c
@@ -3,7 +3,7 @@
3 * Broadcom B43legacy wireless driver 3 * Broadcom B43legacy wireless driver
4 * 4 *
5 * Copyright (c) 2005 Martin Langer <martin-langer@gmx.de> 5 * Copyright (c) 2005 Martin Langer <martin-langer@gmx.de>
6 * Copyright (c) 2005-2007 Stefano Brivio <stefano.brivio@polimi.it> 6 * Copyright (c) 2005-2008 Stefano Brivio <stefano.brivio@polimi.it>
7 * Copyright (c) 2005, 2006 Michael Buesch <mb@bu3sch.de> 7 * Copyright (c) 2005, 2006 Michael Buesch <mb@bu3sch.de>
8 * Copyright (c) 2005 Danny van Dyk <kugelfang@gentoo.org> 8 * Copyright (c) 2005 Danny van Dyk <kugelfang@gentoo.org>
9 * Copyright (c) 2005 Andreas Jaggi <andreas.jaggi@waterwave.ch> 9 * Copyright (c) 2005 Andreas Jaggi <andreas.jaggi@waterwave.ch>
@@ -60,6 +60,8 @@ MODULE_AUTHOR("Stefano Brivio");
60MODULE_AUTHOR("Michael Buesch"); 60MODULE_AUTHOR("Michael Buesch");
61MODULE_LICENSE("GPL"); 61MODULE_LICENSE("GPL");
62 62
63MODULE_FIRMWARE(B43legacy_SUPPORTED_FIRMWARE_ID);
64
63#if defined(CONFIG_B43LEGACY_DMA) && defined(CONFIG_B43LEGACY_PIO) 65#if defined(CONFIG_B43LEGACY_DMA) && defined(CONFIG_B43LEGACY_PIO)
64static int modparam_pio; 66static int modparam_pio;
65module_param_named(pio, modparam_pio, int, 0444); 67module_param_named(pio, modparam_pio, int, 0444);
@@ -1640,10 +1642,11 @@ static int b43legacy_upload_microcode(struct b43legacy_wldev *dev)
1640 err = -EOPNOTSUPP; 1642 err = -EOPNOTSUPP;
1641 goto error; 1643 goto error;
1642 } 1644 }
1643 b43legacydbg(dev->wl, "Loading firmware version 0x%X, patch level %u " 1645 b43legacyinfo(dev->wl, "Loading firmware version 0x%X, patch level %u "
1644 "(20%.2i-%.2i-%.2i %.2i:%.2i:%.2i)\n", fwrev, fwpatch, 1646 "(20%.2i-%.2i-%.2i %.2i:%.2i:%.2i)\n", fwrev, fwpatch,
1645 (fwdate >> 12) & 0xF, (fwdate >> 8) & 0xF, fwdate & 0xFF, 1647 (fwdate >> 12) & 0xF, (fwdate >> 8) & 0xF, fwdate & 0xFF,
1646 (fwtime >> 11) & 0x1F, (fwtime >> 5) & 0x3F, fwtime & 0x1F); 1648 (fwtime >> 11) & 0x1F, (fwtime >> 5) & 0x3F,
1649 fwtime & 0x1F);
1647 1650
1648 dev->fw.rev = fwrev; 1651 dev->fw.rev = fwrev;
1649 dev->fw.patch = fwpatch; 1652 dev->fw.patch = fwpatch;
@@ -3806,6 +3809,32 @@ static struct ssb_driver b43legacy_ssb_driver = {
3806 .resume = b43legacy_resume, 3809 .resume = b43legacy_resume,
3807}; 3810};
3808 3811
3812static void b43legacy_print_driverinfo(void)
3813{
3814 const char *feat_pci = "", *feat_leds = "", *feat_rfkill = "",
3815 *feat_pio = "", *feat_dma = "";
3816
3817#ifdef CONFIG_B43LEGACY_PCI_AUTOSELECT
3818 feat_pci = "P";
3819#endif
3820#ifdef CONFIG_B43LEGACY_LEDS
3821 feat_leds = "L";
3822#endif
3823#ifdef CONFIG_B43LEGACY_RFKILL
3824 feat_rfkill = "R";
3825#endif
3826#ifdef CONFIG_B43LEGACY_PIO
3827 feat_pio = "I";
3828#endif
3829#ifdef CONFIG_B43LEGACY_DMA
3830 feat_dma = "D";
3831#endif
3832 printk(KERN_INFO "Broadcom 43xx driver loaded "
3833 "[ Features: %s%s%s%s%s, Firmware-ID: "
3834 B43legacy_SUPPORTED_FIRMWARE_ID " ]\n",
3835 feat_pci, feat_leds, feat_rfkill, feat_pio, feat_dma);
3836}
3837
3809static int __init b43legacy_init(void) 3838static int __init b43legacy_init(void)
3810{ 3839{
3811 int err; 3840 int err;
@@ -3816,6 +3845,8 @@ static int __init b43legacy_init(void)
3816 if (err) 3845 if (err)
3817 goto err_dfs_exit; 3846 goto err_dfs_exit;
3818 3847
3848 b43legacy_print_driverinfo();
3849
3819 return err; 3850 return err;
3820 3851
3821err_dfs_exit: 3852err_dfs_exit:
diff --git a/drivers/net/wireless/ipw2200.c b/drivers/net/wireless/ipw2200.c
index 3e6ad7b92c83..a56d9fc6354f 100644
--- a/drivers/net/wireless/ipw2200.c
+++ b/drivers/net/wireless/ipw2200.c
@@ -3365,7 +3365,6 @@ static void ipw_rx_queue_reset(struct ipw_priv *priv,
3365 /* Set us so that we have processed and used all buffers, but have 3365 /* Set us so that we have processed and used all buffers, but have
3366 * not restocked the Rx queue with fresh buffers */ 3366 * not restocked the Rx queue with fresh buffers */
3367 rxq->read = rxq->write = 0; 3367 rxq->read = rxq->write = 0;
3368 rxq->processed = RX_QUEUE_SIZE - 1;
3369 rxq->free_count = 0; 3368 rxq->free_count = 0;
3370 spin_unlock_irqrestore(&rxq->lock, flags); 3369 spin_unlock_irqrestore(&rxq->lock, flags);
3371} 3370}
@@ -3607,7 +3606,22 @@ static int ipw_load(struct ipw_priv *priv)
3607 * Driver allocates buffers of this size for Rx 3606 * Driver allocates buffers of this size for Rx
3608 */ 3607 */
3609 3608
3610static inline int ipw_queue_space(const struct clx2_queue *q) 3609/**
3610 * ipw_rx_queue_space - Return number of free slots available in queue.
3611 */
3612static int ipw_rx_queue_space(const struct ipw_rx_queue *q)
3613{
3614 int s = q->read - q->write;
3615 if (s <= 0)
3616 s += RX_QUEUE_SIZE;
3617 /* keep some buffer to not confuse full and empty queue */
3618 s -= 2;
3619 if (s < 0)
3620 s = 0;
3621 return s;
3622}
3623
3624static inline int ipw_tx_queue_space(const struct clx2_queue *q)
3611{ 3625{
3612 int s = q->last_used - q->first_empty; 3626 int s = q->last_used - q->first_empty;
3613 if (s <= 0) 3627 if (s <= 0)
@@ -4947,7 +4961,7 @@ static int ipw_queue_tx_reclaim(struct ipw_priv *priv,
4947 priv->tx_packets++; 4961 priv->tx_packets++;
4948 } 4962 }
4949 done: 4963 done:
4950 if ((ipw_queue_space(q) > q->low_mark) && 4964 if ((ipw_tx_queue_space(q) > q->low_mark) &&
4951 (qindex >= 0) && 4965 (qindex >= 0) &&
4952 (priv->status & STATUS_ASSOCIATED) && netif_running(priv->net_dev)) 4966 (priv->status & STATUS_ASSOCIATED) && netif_running(priv->net_dev))
4953 netif_wake_queue(priv->net_dev); 4967 netif_wake_queue(priv->net_dev);
@@ -4965,7 +4979,7 @@ static int ipw_queue_tx_hcmd(struct ipw_priv *priv, int hcmd, void *buf,
4965 struct clx2_queue *q = &txq->q; 4979 struct clx2_queue *q = &txq->q;
4966 struct tfd_frame *tfd; 4980 struct tfd_frame *tfd;
4967 4981
4968 if (ipw_queue_space(q) < (sync ? 1 : 2)) { 4982 if (ipw_tx_queue_space(q) < (sync ? 1 : 2)) {
4969 IPW_ERROR("No space for Tx\n"); 4983 IPW_ERROR("No space for Tx\n");
4970 return -EBUSY; 4984 return -EBUSY;
4971 } 4985 }
@@ -5070,7 +5084,7 @@ static void ipw_rx_queue_restock(struct ipw_priv *priv)
5070 5084
5071 spin_lock_irqsave(&rxq->lock, flags); 5085 spin_lock_irqsave(&rxq->lock, flags);
5072 write = rxq->write; 5086 write = rxq->write;
5073 while ((rxq->write != rxq->processed) && (rxq->free_count)) { 5087 while ((ipw_rx_queue_space(rxq) > 0) && (rxq->free_count)) {
5074 element = rxq->rx_free.next; 5088 element = rxq->rx_free.next;
5075 rxb = list_entry(element, struct ipw_rx_mem_buffer, list); 5089 rxb = list_entry(element, struct ipw_rx_mem_buffer, list);
5076 list_del(element); 5090 list_del(element);
@@ -5187,7 +5201,6 @@ static struct ipw_rx_queue *ipw_rx_queue_alloc(struct ipw_priv *priv)
5187 /* Set us so that we have processed and used all buffers, but have 5201 /* Set us so that we have processed and used all buffers, but have
5188 * not restocked the Rx queue with fresh buffers */ 5202 * not restocked the Rx queue with fresh buffers */
5189 rxq->read = rxq->write = 0; 5203 rxq->read = rxq->write = 0;
5190 rxq->processed = RX_QUEUE_SIZE - 1;
5191 rxq->free_count = 0; 5204 rxq->free_count = 0;
5192 5205
5193 return rxq; 5206 return rxq;
@@ -8223,13 +8236,17 @@ static void ipw_rx(struct ipw_priv *priv)
8223 struct ieee80211_hdr_4addr *header; 8236 struct ieee80211_hdr_4addr *header;
8224 u32 r, w, i; 8237 u32 r, w, i;
8225 u8 network_packet; 8238 u8 network_packet;
8239 u8 fill_rx = 0;
8226 DECLARE_MAC_BUF(mac); 8240 DECLARE_MAC_BUF(mac);
8227 DECLARE_MAC_BUF(mac2); 8241 DECLARE_MAC_BUF(mac2);
8228 DECLARE_MAC_BUF(mac3); 8242 DECLARE_MAC_BUF(mac3);
8229 8243
8230 r = ipw_read32(priv, IPW_RX_READ_INDEX); 8244 r = ipw_read32(priv, IPW_RX_READ_INDEX);
8231 w = ipw_read32(priv, IPW_RX_WRITE_INDEX); 8245 w = ipw_read32(priv, IPW_RX_WRITE_INDEX);
8232 i = (priv->rxq->processed + 1) % RX_QUEUE_SIZE; 8246 i = priv->rxq->read;
8247
8248 if (ipw_rx_queue_space (priv->rxq) > (RX_QUEUE_SIZE / 2))
8249 fill_rx = 1;
8233 8250
8234 while (i != r) { 8251 while (i != r) {
8235 rxb = priv->rxq->queue[i]; 8252 rxb = priv->rxq->queue[i];
@@ -8404,11 +8421,17 @@ static void ipw_rx(struct ipw_priv *priv)
8404 list_add_tail(&rxb->list, &priv->rxq->rx_used); 8421 list_add_tail(&rxb->list, &priv->rxq->rx_used);
8405 8422
8406 i = (i + 1) % RX_QUEUE_SIZE; 8423 i = (i + 1) % RX_QUEUE_SIZE;
8424
8425 /* If there are a lot of unsued frames, restock the Rx queue
8426 * so the ucode won't assert */
8427 if (fill_rx) {
8428 priv->rxq->read = i;
8429 ipw_rx_queue_replenish(priv);
8430 }
8407 } 8431 }
8408 8432
8409 /* Backtrack one entry */ 8433 /* Backtrack one entry */
8410 priv->rxq->processed = (i ? i : RX_QUEUE_SIZE) - 1; 8434 priv->rxq->read = i;
8411
8412 ipw_rx_queue_restock(priv); 8435 ipw_rx_queue_restock(priv);
8413} 8436}
8414 8437
@@ -10336,7 +10359,7 @@ static int ipw_tx_skb(struct ipw_priv *priv, struct ieee80211_txb *txb,
10336 q->first_empty = ipw_queue_inc_wrap(q->first_empty, q->n_bd); 10359 q->first_empty = ipw_queue_inc_wrap(q->first_empty, q->n_bd);
10337 ipw_write32(priv, q->reg_w, q->first_empty); 10360 ipw_write32(priv, q->reg_w, q->first_empty);
10338 10361
10339 if (ipw_queue_space(q) < q->high_mark) 10362 if (ipw_tx_queue_space(q) < q->high_mark)
10340 netif_stop_queue(priv->net_dev); 10363 netif_stop_queue(priv->net_dev);
10341 10364
10342 return NETDEV_TX_OK; 10365 return NETDEV_TX_OK;
@@ -10357,7 +10380,7 @@ static int ipw_net_is_queue_full(struct net_device *dev, int pri)
10357 struct clx2_tx_queue *txq = &priv->txq[0]; 10380 struct clx2_tx_queue *txq = &priv->txq[0];
10358#endif /* CONFIG_IPW2200_QOS */ 10381#endif /* CONFIG_IPW2200_QOS */
10359 10382
10360 if (ipw_queue_space(&txq->q) < txq->q.high_mark) 10383 if (ipw_tx_queue_space(&txq->q) < txq->q.high_mark)
10361 return 1; 10384 return 1;
10362 10385
10363 return 0; 10386 return 0;
diff --git a/drivers/net/wireless/iwlwifi/iwl3945-base.c b/drivers/net/wireless/iwlwifi/iwl3945-base.c
index 5ee1ad69898b..40b71bc2c4a4 100644
--- a/drivers/net/wireless/iwlwifi/iwl3945-base.c
+++ b/drivers/net/wireless/iwlwifi/iwl3945-base.c
@@ -687,6 +687,12 @@ static int iwl3945_enqueue_hcmd(struct iwl3945_priv *priv, struct iwl3945_host_c
687 BUG_ON((fix_size > TFD_MAX_PAYLOAD_SIZE) && 687 BUG_ON((fix_size > TFD_MAX_PAYLOAD_SIZE) &&
688 !(cmd->meta.flags & CMD_SIZE_HUGE)); 688 !(cmd->meta.flags & CMD_SIZE_HUGE));
689 689
690
691 if (iwl3945_is_rfkill(priv)) {
692 IWL_DEBUG_INFO("Not sending command - RF KILL");
693 return -EIO;
694 }
695
690 if (iwl3945_queue_space(q) < ((cmd->meta.flags & CMD_ASYNC) ? 2 : 1)) { 696 if (iwl3945_queue_space(q) < ((cmd->meta.flags & CMD_ASYNC) ? 2 : 1)) {
691 IWL_ERROR("No space for Tx\n"); 697 IWL_ERROR("No space for Tx\n");
692 return -ENOSPC; 698 return -ENOSPC;
@@ -1580,7 +1586,7 @@ static inline int iwl3945_eeprom_acquire_semaphore(struct iwl3945_priv *priv)
1580 */ 1586 */
1581int iwl3945_eeprom_init(struct iwl3945_priv *priv) 1587int iwl3945_eeprom_init(struct iwl3945_priv *priv)
1582{ 1588{
1583 __le16 *e = (__le16 *)&priv->eeprom; 1589 u16 *e = (u16 *)&priv->eeprom;
1584 u32 gp = iwl3945_read32(priv, CSR_EEPROM_GP); 1590 u32 gp = iwl3945_read32(priv, CSR_EEPROM_GP);
1585 u32 r; 1591 u32 r;
1586 int sz = sizeof(priv->eeprom); 1592 int sz = sizeof(priv->eeprom);
@@ -1623,7 +1629,7 @@ int iwl3945_eeprom_init(struct iwl3945_priv *priv)
1623 IWL_ERROR("Time out reading EEPROM[%d]", addr); 1629 IWL_ERROR("Time out reading EEPROM[%d]", addr);
1624 return -ETIMEDOUT; 1630 return -ETIMEDOUT;
1625 } 1631 }
1626 e[addr / 2] = cpu_to_le16(r >> 16); 1632 e[addr / 2] = le16_to_cpu((__force __le16)(r >> 16));
1627 } 1633 }
1628 1634
1629 return 0; 1635 return 0;
@@ -2806,7 +2812,8 @@ static int iwl3945_tx_skb(struct iwl3945_priv *priv,
2806#endif 2812#endif
2807 2813
2808 /* drop all data frame if we are not associated */ 2814 /* drop all data frame if we are not associated */
2809 if ((!iwl3945_is_associated(priv) || !priv->assoc_id) && 2815 if ((!iwl3945_is_associated(priv) ||
2816 ((priv->iw_mode == IEEE80211_IF_TYPE_STA) && !priv->assoc_id)) &&
2810 ((fc & IEEE80211_FCTL_FTYPE) == IEEE80211_FTYPE_DATA)) { 2817 ((fc & IEEE80211_FCTL_FTYPE) == IEEE80211_FTYPE_DATA)) {
2811 IWL_DEBUG_DROP("Dropping - !iwl3945_is_associated\n"); 2818 IWL_DEBUG_DROP("Dropping - !iwl3945_is_associated\n");
2812 goto drop_unlock; 2819 goto drop_unlock;
@@ -4281,7 +4288,7 @@ static void iwl3945_rx_handle(struct iwl3945_priv *priv)
4281 int reclaim; 4288 int reclaim;
4282 unsigned long flags; 4289 unsigned long flags;
4283 u8 fill_rx = 0; 4290 u8 fill_rx = 0;
4284 u32 count = 0; 4291 u32 count = 8;
4285 4292
4286 /* uCode's read index (stored in shared DRAM) indicates the last Rx 4293 /* uCode's read index (stored in shared DRAM) indicates the last Rx
4287 * buffer that the driver may process (last buffer filled by ucode). */ 4294 * buffer that the driver may process (last buffer filled by ucode). */
@@ -6256,6 +6263,8 @@ static void __iwl3945_down(struct iwl3945_priv *priv)
6256 STATUS_RF_KILL_HW | 6263 STATUS_RF_KILL_HW |
6257 test_bit(STATUS_RF_KILL_SW, &priv->status) << 6264 test_bit(STATUS_RF_KILL_SW, &priv->status) <<
6258 STATUS_RF_KILL_SW | 6265 STATUS_RF_KILL_SW |
6266 test_bit(STATUS_GEO_CONFIGURED, &priv->status) <<
6267 STATUS_GEO_CONFIGURED |
6259 test_bit(STATUS_IN_SUSPEND, &priv->status) << 6268 test_bit(STATUS_IN_SUSPEND, &priv->status) <<
6260 STATUS_IN_SUSPEND; 6269 STATUS_IN_SUSPEND;
6261 goto exit; 6270 goto exit;
@@ -6267,6 +6276,8 @@ static void __iwl3945_down(struct iwl3945_priv *priv)
6267 STATUS_RF_KILL_HW | 6276 STATUS_RF_KILL_HW |
6268 test_bit(STATUS_RF_KILL_SW, &priv->status) << 6277 test_bit(STATUS_RF_KILL_SW, &priv->status) <<
6269 STATUS_RF_KILL_SW | 6278 STATUS_RF_KILL_SW |
6279 test_bit(STATUS_GEO_CONFIGURED, &priv->status) <<
6280 STATUS_GEO_CONFIGURED |
6270 test_bit(STATUS_IN_SUSPEND, &priv->status) << 6281 test_bit(STATUS_IN_SUSPEND, &priv->status) <<
6271 STATUS_IN_SUSPEND | 6282 STATUS_IN_SUSPEND |
6272 test_bit(STATUS_FW_ERROR, &priv->status) << 6283 test_bit(STATUS_FW_ERROR, &priv->status) <<
diff --git a/drivers/net/wireless/iwlwifi/iwl4965-base.c b/drivers/net/wireless/iwlwifi/iwl4965-base.c
index f423241b9567..a23d4798653b 100644
--- a/drivers/net/wireless/iwlwifi/iwl4965-base.c
+++ b/drivers/net/wireless/iwlwifi/iwl4965-base.c
@@ -692,6 +692,11 @@ static int iwl4965_enqueue_hcmd(struct iwl4965_priv *priv, struct iwl4965_host_c
692 BUG_ON((fix_size > TFD_MAX_PAYLOAD_SIZE) && 692 BUG_ON((fix_size > TFD_MAX_PAYLOAD_SIZE) &&
693 !(cmd->meta.flags & CMD_SIZE_HUGE)); 693 !(cmd->meta.flags & CMD_SIZE_HUGE));
694 694
695 if (iwl4965_is_rfkill(priv)) {
696 IWL_DEBUG_INFO("Not sending command - RF KILL");
697 return -EIO;
698 }
699
695 if (iwl4965_queue_space(q) < ((cmd->meta.flags & CMD_ASYNC) ? 2 : 1)) { 700 if (iwl4965_queue_space(q) < ((cmd->meta.flags & CMD_ASYNC) ? 2 : 1)) {
696 IWL_ERROR("No space for Tx\n"); 701 IWL_ERROR("No space for Tx\n");
697 return -ENOSPC; 702 return -ENOSPC;
@@ -1654,7 +1659,7 @@ static inline void iwl4965_eeprom_release_semaphore(struct iwl4965_priv *priv)
1654 */ 1659 */
1655int iwl4965_eeprom_init(struct iwl4965_priv *priv) 1660int iwl4965_eeprom_init(struct iwl4965_priv *priv)
1656{ 1661{
1657 __le16 *e = (__le16 *)&priv->eeprom; 1662 u16 *e = (u16 *)&priv->eeprom;
1658 u32 gp = iwl4965_read32(priv, CSR_EEPROM_GP); 1663 u32 gp = iwl4965_read32(priv, CSR_EEPROM_GP);
1659 u32 r; 1664 u32 r;
1660 int sz = sizeof(priv->eeprom); 1665 int sz = sizeof(priv->eeprom);
@@ -1698,7 +1703,7 @@ int iwl4965_eeprom_init(struct iwl4965_priv *priv)
1698 rc = -ETIMEDOUT; 1703 rc = -ETIMEDOUT;
1699 goto done; 1704 goto done;
1700 } 1705 }
1701 e[addr / 2] = cpu_to_le16(r >> 16); 1706 e[addr / 2] = le16_to_cpu((__force __le16)(r >> 16));
1702 } 1707 }
1703 rc = 0; 1708 rc = 0;
1704 1709
@@ -2935,7 +2940,7 @@ static int iwl4965_tx_skb(struct iwl4965_priv *priv,
2935 /* drop all data frame if we are not associated */ 2940 /* drop all data frame if we are not associated */
2936 if (((fc & IEEE80211_FCTL_FTYPE) == IEEE80211_FTYPE_DATA) && 2941 if (((fc & IEEE80211_FCTL_FTYPE) == IEEE80211_FTYPE_DATA) &&
2937 (!iwl4965_is_associated(priv) || 2942 (!iwl4965_is_associated(priv) ||
2938 !priv->assoc_id || 2943 ((priv->iw_mode == IEEE80211_IF_TYPE_STA) && !priv->assoc_id) ||
2939 !priv->assoc_station_added)) { 2944 !priv->assoc_station_added)) {
2940 IWL_DEBUG_DROP("Dropping - !iwl4965_is_associated\n"); 2945 IWL_DEBUG_DROP("Dropping - !iwl4965_is_associated\n");
2941 goto drop_unlock; 2946 goto drop_unlock;
@@ -4664,7 +4669,7 @@ static void iwl4965_rx_handle(struct iwl4965_priv *priv)
4664 int reclaim; 4669 int reclaim;
4665 unsigned long flags; 4670 unsigned long flags;
4666 u8 fill_rx = 0; 4671 u8 fill_rx = 0;
4667 u32 count = 0; 4672 u32 count = 8;
4668 4673
4669 /* uCode's read index (stored in shared DRAM) indicates the last Rx 4674 /* uCode's read index (stored in shared DRAM) indicates the last Rx
4670 * buffer that the driver may process (last buffer filled by ucode). */ 4675 * buffer that the driver may process (last buffer filled by ucode). */
@@ -6680,6 +6685,8 @@ static void __iwl4965_down(struct iwl4965_priv *priv)
6680 STATUS_RF_KILL_HW | 6685 STATUS_RF_KILL_HW |
6681 test_bit(STATUS_RF_KILL_SW, &priv->status) << 6686 test_bit(STATUS_RF_KILL_SW, &priv->status) <<
6682 STATUS_RF_KILL_SW | 6687 STATUS_RF_KILL_SW |
6688 test_bit(STATUS_GEO_CONFIGURED, &priv->status) <<
6689 STATUS_GEO_CONFIGURED |
6683 test_bit(STATUS_IN_SUSPEND, &priv->status) << 6690 test_bit(STATUS_IN_SUSPEND, &priv->status) <<
6684 STATUS_IN_SUSPEND; 6691 STATUS_IN_SUSPEND;
6685 goto exit; 6692 goto exit;
@@ -6691,6 +6698,8 @@ static void __iwl4965_down(struct iwl4965_priv *priv)
6691 STATUS_RF_KILL_HW | 6698 STATUS_RF_KILL_HW |
6692 test_bit(STATUS_RF_KILL_SW, &priv->status) << 6699 test_bit(STATUS_RF_KILL_SW, &priv->status) <<
6693 STATUS_RF_KILL_SW | 6700 STATUS_RF_KILL_SW |
6701 test_bit(STATUS_GEO_CONFIGURED, &priv->status) <<
6702 STATUS_GEO_CONFIGURED |
6694 test_bit(STATUS_IN_SUSPEND, &priv->status) << 6703 test_bit(STATUS_IN_SUSPEND, &priv->status) <<
6695 STATUS_IN_SUSPEND | 6704 STATUS_IN_SUSPEND |
6696 test_bit(STATUS_FW_ERROR, &priv->status) << 6705 test_bit(STATUS_FW_ERROR, &priv->status) <<
diff --git a/drivers/net/wireless/p54usb.c b/drivers/net/wireless/p54usb.c
index 60d286eb0b8b..e7d4aee8799e 100644
--- a/drivers/net/wireless/p54usb.c
+++ b/drivers/net/wireless/p54usb.c
@@ -35,6 +35,7 @@ static struct usb_device_id p54u_table[] __devinitdata = {
35 {USB_DEVICE(0x0707, 0xee06)}, /* SMC 2862W-G */ 35 {USB_DEVICE(0x0707, 0xee06)}, /* SMC 2862W-G */
36 {USB_DEVICE(0x083a, 0x4501)}, /* Accton 802.11g WN4501 USB */ 36 {USB_DEVICE(0x083a, 0x4501)}, /* Accton 802.11g WN4501 USB */
37 {USB_DEVICE(0x083a, 0x4502)}, /* Siemens Gigaset USB Adapter */ 37 {USB_DEVICE(0x083a, 0x4502)}, /* Siemens Gigaset USB Adapter */
38 {USB_DEVICE(0x083a, 0x5501)}, /* Phillips CPWUA054 */
38 {USB_DEVICE(0x0846, 0x4200)}, /* Netgear WG121 */ 39 {USB_DEVICE(0x0846, 0x4200)}, /* Netgear WG121 */
39 {USB_DEVICE(0x0846, 0x4210)}, /* Netgear WG121 the second ? */ 40 {USB_DEVICE(0x0846, 0x4210)}, /* Netgear WG121 the second ? */
40 {USB_DEVICE(0x0846, 0x4220)}, /* Netgear WG111 */ 41 {USB_DEVICE(0x0846, 0x4220)}, /* Netgear WG111 */
@@ -62,6 +63,7 @@ static struct usb_device_id p54u_table[] __devinitdata = {
62 {USB_DEVICE(0x0cde, 0x0008)}, /* Sagem XG703A */ 63 {USB_DEVICE(0x0cde, 0x0008)}, /* Sagem XG703A */
63 {USB_DEVICE(0x0d8e, 0x3762)}, /* DLink DWL-G120 Cohiba */ 64 {USB_DEVICE(0x0d8e, 0x3762)}, /* DLink DWL-G120 Cohiba */
64 {USB_DEVICE(0x09aa, 0x1000)}, /* Spinnaker Proto board */ 65 {USB_DEVICE(0x09aa, 0x1000)}, /* Spinnaker Proto board */
66 {USB_DEVICE(0x13b1, 0x000a)}, /* Linksys WUSB54G ver 2 */
65 {USB_DEVICE(0x13B1, 0x000C)}, /* Linksys WUSB54AG */ 67 {USB_DEVICE(0x13B1, 0x000C)}, /* Linksys WUSB54AG */
66 {USB_DEVICE(0x1435, 0x0427)}, /* Inventel UR054G */ 68 {USB_DEVICE(0x1435, 0x0427)}, /* Inventel UR054G */
67 {USB_DEVICE(0x2001, 0x3704)}, /* DLink DWL-G122 rev A2 */ 69 {USB_DEVICE(0x2001, 0x3704)}, /* DLink DWL-G122 rev A2 */
diff --git a/drivers/net/wireless/rndis_wlan.c b/drivers/net/wireless/rndis_wlan.c
index d3ecf89abd93..8ce2ddf8024f 100644
--- a/drivers/net/wireless/rndis_wlan.c
+++ b/drivers/net/wireless/rndis_wlan.c
@@ -2300,7 +2300,7 @@ static void rndis_update_wireless_stats(struct work_struct *work)
2300 struct usbnet *usbdev = priv->usbdev; 2300 struct usbnet *usbdev = priv->usbdev;
2301 struct iw_statistics iwstats; 2301 struct iw_statistics iwstats;
2302 __le32 rssi, tmp; 2302 __le32 rssi, tmp;
2303 int len, ret, bitrate, j; 2303 int len, ret, j;
2304 unsigned long flags; 2304 unsigned long flags;
2305 int update_jiffies = STATS_UPDATE_JIFFIES; 2305 int update_jiffies = STATS_UPDATE_JIFFIES;
2306 void *buf; 2306 void *buf;
@@ -2352,14 +2352,10 @@ static void rndis_update_wireless_stats(struct work_struct *work)
2352 if (ret == 0) 2352 if (ret == 0)
2353 iwstats.discard.misc += le32_to_cpu(tmp); 2353 iwstats.discard.misc += le32_to_cpu(tmp);
2354 2354
2355 /* Workaround transfer stalls on poor quality links. */ 2355 /* Workaround transfer stalls on poor quality links.
2356 len = sizeof(tmp); 2356 * TODO: find right way to fix these stalls (as stalls do not happen
2357 ret = rndis_query_oid(usbdev, OID_GEN_LINK_SPEED, &tmp, &len); 2357 * with ndiswrapper/windows driver). */
2358 if (ret == 0) { 2358 if (iwstats.qual.qual <= 25) {
2359 bitrate = le32_to_cpu(tmp) * 100;
2360 if (bitrate > 11000000)
2361 goto end;
2362
2363 /* Decrease stats worker interval to catch stalls. 2359 /* Decrease stats worker interval to catch stalls.
2364 * faster. Faster than 400-500ms causes packet loss, 2360 * faster. Faster than 400-500ms causes packet loss,
2365 * Slower doesn't catch stalls fast enough. 2361 * Slower doesn't catch stalls fast enough.
diff --git a/drivers/net/wireless/rt2x00/rt2500usb.c b/drivers/net/wireless/rt2x00/rt2500usb.c
index 86ded4066f5b..4ca9730e5e92 100644
--- a/drivers/net/wireless/rt2x00/rt2500usb.c
+++ b/drivers/net/wireless/rt2x00/rt2500usb.c
@@ -1839,11 +1839,11 @@ static struct usb_device_id rt2500usb_device_table[] = {
1839 /* Hercules */ 1839 /* Hercules */
1840 { USB_DEVICE(0x06f8, 0xe000), USB_DEVICE_DATA(&rt2500usb_ops) }, 1840 { USB_DEVICE(0x06f8, 0xe000), USB_DEVICE_DATA(&rt2500usb_ops) },
1841 /* Melco */ 1841 /* Melco */
1842 { USB_DEVICE(0x0411, 0x005e), USB_DEVICE_DATA(&rt2500usb_ops) },
1842 { USB_DEVICE(0x0411, 0x0066), USB_DEVICE_DATA(&rt2500usb_ops) }, 1843 { USB_DEVICE(0x0411, 0x0066), USB_DEVICE_DATA(&rt2500usb_ops) },
1843 { USB_DEVICE(0x0411, 0x0067), USB_DEVICE_DATA(&rt2500usb_ops) }, 1844 { USB_DEVICE(0x0411, 0x0067), USB_DEVICE_DATA(&rt2500usb_ops) },
1844 { USB_DEVICE(0x0411, 0x008b), USB_DEVICE_DATA(&rt2500usb_ops) }, 1845 { USB_DEVICE(0x0411, 0x008b), USB_DEVICE_DATA(&rt2500usb_ops) },
1845 { USB_DEVICE(0x0411, 0x0097), USB_DEVICE_DATA(&rt2500usb_ops) }, 1846 { USB_DEVICE(0x0411, 0x0097), USB_DEVICE_DATA(&rt2500usb_ops) },
1846
1847 /* MSI */ 1847 /* MSI */
1848 { USB_DEVICE(0x0db0, 0x6861), USB_DEVICE_DATA(&rt2500usb_ops) }, 1848 { USB_DEVICE(0x0db0, 0x6861), USB_DEVICE_DATA(&rt2500usb_ops) },
1849 { USB_DEVICE(0x0db0, 0x6865), USB_DEVICE_DATA(&rt2500usb_ops) }, 1849 { USB_DEVICE(0x0db0, 0x6865), USB_DEVICE_DATA(&rt2500usb_ops) },
diff --git a/drivers/net/wireless/rtl8180_dev.c b/drivers/net/wireless/rtl8180_dev.c
index 27ebd689aa21..5e9a8ace0d81 100644
--- a/drivers/net/wireless/rtl8180_dev.c
+++ b/drivers/net/wireless/rtl8180_dev.c
@@ -135,13 +135,15 @@ static void rtl8180_handle_tx(struct ieee80211_hw *dev, unsigned int prio)
135 while (skb_queue_len(&ring->queue)) { 135 while (skb_queue_len(&ring->queue)) {
136 struct rtl8180_tx_desc *entry = &ring->desc[ring->idx]; 136 struct rtl8180_tx_desc *entry = &ring->desc[ring->idx];
137 struct sk_buff *skb; 137 struct sk_buff *skb;
138 struct ieee80211_tx_status status = { {0} }; 138 struct ieee80211_tx_status status;
139 struct ieee80211_tx_control *control; 139 struct ieee80211_tx_control *control;
140 u32 flags = le32_to_cpu(entry->flags); 140 u32 flags = le32_to_cpu(entry->flags);
141 141
142 if (flags & RTL8180_TX_DESC_FLAG_OWN) 142 if (flags & RTL8180_TX_DESC_FLAG_OWN)
143 return; 143 return;
144 144
145 memset(&status, 0, sizeof(status));
146
145 ring->idx = (ring->idx + 1) % ring->entries; 147 ring->idx = (ring->idx + 1) % ring->entries;
146 skb = __skb_dequeue(&ring->queue); 148 skb = __skb_dequeue(&ring->queue);
147 pci_unmap_single(priv->pdev, le32_to_cpu(entry->tx_buf), 149 pci_unmap_single(priv->pdev, le32_to_cpu(entry->tx_buf),
diff --git a/drivers/net/wireless/rtl8187_dev.c b/drivers/net/wireless/rtl8187_dev.c
index 0d71716d750d..f44505994a0e 100644
--- a/drivers/net/wireless/rtl8187_dev.c
+++ b/drivers/net/wireless/rtl8187_dev.c
@@ -113,10 +113,12 @@ void rtl8187_write_phy(struct ieee80211_hw *dev, u8 addr, u32 data)
113 113
114static void rtl8187_tx_cb(struct urb *urb) 114static void rtl8187_tx_cb(struct urb *urb)
115{ 115{
116 struct ieee80211_tx_status status = { {0} }; 116 struct ieee80211_tx_status status;
117 struct sk_buff *skb = (struct sk_buff *)urb->context; 117 struct sk_buff *skb = (struct sk_buff *)urb->context;
118 struct rtl8187_tx_info *info = (struct rtl8187_tx_info *)skb->cb; 118 struct rtl8187_tx_info *info = (struct rtl8187_tx_info *)skb->cb;
119 119
120 memset(&status, 0, sizeof(status));
121
120 usb_free_urb(info->urb); 122 usb_free_urb(info->urb);
121 if (info->control) 123 if (info->control)
122 memcpy(&status.control, info->control, sizeof(status.control)); 124 memcpy(&status.control, info->control, sizeof(status.control));
diff --git a/drivers/net/wireless/wavelan.h b/drivers/net/wireless/wavelan.h
index 27172cde5a39..9ab360558ffd 100644
--- a/drivers/net/wireless/wavelan.h
+++ b/drivers/net/wireless/wavelan.h
@@ -85,7 +85,7 @@ union hacs_u
85#define HASR_MMC_INTR 0x0002 /* Interrupt request from MMC */ 85#define HASR_MMC_INTR 0x0002 /* Interrupt request from MMC */
86#define HASR_MMC_BUSY 0x0004 /* MMC busy indication */ 86#define HASR_MMC_BUSY 0x0004 /* MMC busy indication */
87#define HASR_PSA_BUSY 0x0008 /* LAN parameter storage area busy */ 87#define HASR_PSA_BUSY 0x0008 /* LAN parameter storage area busy */
88}; 88} __attribute__ ((packed));
89 89
90typedef struct ha_t ha_t; 90typedef struct ha_t ha_t;
91struct ha_t 91struct ha_t
@@ -292,7 +292,7 @@ struct mmw_t
292#define MMW_EXT_ANT_INTERNAL 0x00 /* Internal antenna */ 292#define MMW_EXT_ANT_INTERNAL 0x00 /* Internal antenna */
293#define MMW_EXT_ANT_EXTERNAL 0x03 /* External antenna */ 293#define MMW_EXT_ANT_EXTERNAL 0x03 /* External antenna */
294#define MMW_EXT_ANT_IQ_TEST 0x1C /* IQ test pattern (set to 0) */ 294#define MMW_EXT_ANT_IQ_TEST 0x1C /* IQ test pattern (set to 0) */
295}; 295} __attribute__ ((packed));
296 296
297#define MMW_SIZE 37 297#define MMW_SIZE 37
298 298
@@ -347,7 +347,7 @@ struct mmr_t
347 unsigned char mmr_unused4[1]; /* unused */ 347 unsigned char mmr_unused4[1]; /* unused */
348 unsigned char mmr_fee_data_l; /* Read data from EEPROM (low) */ 348 unsigned char mmr_fee_data_l; /* Read data from EEPROM (low) */
349 unsigned char mmr_fee_data_h; /* Read data from EEPROM (high) */ 349 unsigned char mmr_fee_data_h; /* Read data from EEPROM (high) */
350}; 350} __attribute__ ((packed));
351 351
352#define MMR_SIZE 36 352#define MMR_SIZE 36
353 353
diff --git a/drivers/net/wireless/zd1211rw/zd_mac.c b/drivers/net/wireless/zd1211rw/zd_mac.c
index 49127e4b42c2..76ef2d83919d 100644
--- a/drivers/net/wireless/zd1211rw/zd_mac.c
+++ b/drivers/net/wireless/zd1211rw/zd_mac.c
@@ -360,11 +360,14 @@ void zd_mac_tx_failed(struct ieee80211_hw *hw)
360{ 360{
361 struct sk_buff_head *q = &zd_hw_mac(hw)->ack_wait_queue; 361 struct sk_buff_head *q = &zd_hw_mac(hw)->ack_wait_queue;
362 struct sk_buff *skb; 362 struct sk_buff *skb;
363 struct ieee80211_tx_status status = {{0}}; 363 struct ieee80211_tx_status status;
364 364
365 skb = skb_dequeue(q); 365 skb = skb_dequeue(q);
366 if (skb == NULL) 366 if (skb == NULL)
367 return; 367 return;
368
369 memset(&status, 0, sizeof(status));
370
368 tx_status(hw, skb, &status, 0); 371 tx_status(hw, skb, &status, 0);
369} 372}
370 373
@@ -389,7 +392,8 @@ void zd_mac_tx_to_dev(struct sk_buff *skb, int error)
389 if (unlikely(error || 392 if (unlikely(error ||
390 (cb->control->flags & IEEE80211_TXCTL_NO_ACK))) 393 (cb->control->flags & IEEE80211_TXCTL_NO_ACK)))
391 { 394 {
392 struct ieee80211_tx_status status = {{0}}; 395 struct ieee80211_tx_status status;
396 memset(&status, 0, sizeof(status));
393 tx_status(hw, skb, &status, !error); 397 tx_status(hw, skb, &status, !error);
394 } else { 398 } else {
395 struct sk_buff_head *q = 399 struct sk_buff_head *q =
@@ -603,7 +607,9 @@ static int filter_ack(struct ieee80211_hw *hw, struct ieee80211_hdr *rx_hdr,
603 tx_hdr = (struct ieee80211_hdr *)skb->data; 607 tx_hdr = (struct ieee80211_hdr *)skb->data;
604 if (likely(!compare_ether_addr(tx_hdr->addr2, rx_hdr->addr1))) 608 if (likely(!compare_ether_addr(tx_hdr->addr2, rx_hdr->addr1)))
605 { 609 {
606 struct ieee80211_tx_status status = {{0}}; 610 struct ieee80211_tx_status status;
611
612 memset(&status, 0, sizeof(status));
607 status.flags = IEEE80211_TX_STATUS_ACK; 613 status.flags = IEEE80211_TX_STATUS_ACK;
608 status.ack_signal = stats->ssi; 614 status.ack_signal = stats->ssi;
609 __skb_unlink(skb, q); 615 __skb_unlink(skb, q);
diff --git a/drivers/pci/dmar.c b/drivers/pci/dmar.c
index 8ed26480371f..f941f609dbf3 100644
--- a/drivers/pci/dmar.c
+++ b/drivers/pci/dmar.c
@@ -14,11 +14,12 @@
14 * this program; if not, write to the Free Software Foundation, Inc., 59 Temple 14 * this program; if not, write to the Free Software Foundation, Inc., 59 Temple
15 * Place - Suite 330, Boston, MA 02111-1307 USA. 15 * Place - Suite 330, Boston, MA 02111-1307 USA.
16 * 16 *
17 * Copyright (C) Ashok Raj <ashok.raj@intel.com> 17 * Copyright (C) 2006-2008 Intel Corporation
18 * Copyright (C) Shaohua Li <shaohua.li@intel.com> 18 * Author: Ashok Raj <ashok.raj@intel.com>
19 * Copyright (C) Anil S Keshavamurthy <anil.s.keshavamurthy@intel.com> 19 * Author: Shaohua Li <shaohua.li@intel.com>
20 * Author: Anil S Keshavamurthy <anil.s.keshavamurthy@intel.com>
20 * 21 *
21 * This file implements early detection/parsing of DMA Remapping Devices 22 * This file implements early detection/parsing of DMA Remapping Devices
22 * reported to OS through BIOS via DMA remapping reporting (DMAR) ACPI 23 * reported to OS through BIOS via DMA remapping reporting (DMAR) ACPI
23 * tables. 24 * tables.
24 */ 25 */
diff --git a/drivers/pci/hotplug/acpiphp_core.c b/drivers/pci/hotplug/acpiphp_core.c
index c8c263875c21..9279d5ba62e6 100644
--- a/drivers/pci/hotplug/acpiphp_core.c
+++ b/drivers/pci/hotplug/acpiphp_core.c
@@ -392,6 +392,9 @@ static int __init acpiphp_init(void)
392{ 392{
393 info(DRIVER_DESC " version: " DRIVER_VERSION "\n"); 393 info(DRIVER_DESC " version: " DRIVER_VERSION "\n");
394 394
395 if (acpi_pci_disabled)
396 return 0;
397
395 acpiphp_debug = debug; 398 acpiphp_debug = debug;
396 399
397 /* read all the ACPI info from the system */ 400 /* read all the ACPI info from the system */
@@ -401,6 +404,9 @@ static int __init acpiphp_init(void)
401 404
402static void __exit acpiphp_exit(void) 405static void __exit acpiphp_exit(void)
403{ 406{
407 if (acpi_pci_disabled)
408 return;
409
404 /* deallocate internal data structures etc. */ 410 /* deallocate internal data structures etc. */
405 acpiphp_glue_exit(); 411 acpiphp_glue_exit();
406} 412}
diff --git a/drivers/pci/hotplug/acpiphp_ibm.c b/drivers/pci/hotplug/acpiphp_ibm.c
index 750ebd7a4c10..b0a22b92717e 100644
--- a/drivers/pci/hotplug/acpiphp_ibm.c
+++ b/drivers/pci/hotplug/acpiphp_ibm.c
@@ -395,33 +395,34 @@ static acpi_status __init ibm_find_acpi_device(acpi_handle handle,
395{ 395{
396 acpi_handle *phandle = (acpi_handle *)context; 396 acpi_handle *phandle = (acpi_handle *)context;
397 acpi_status status; 397 acpi_status status;
398 struct acpi_device_info info; 398 struct acpi_device_info *info;
399 struct acpi_buffer info_buffer = { 399 struct acpi_buffer info_buffer = { ACPI_ALLOCATE_BUFFER, NULL };
400 .length = sizeof(struct acpi_device_info), 400 int retval = 0;
401 .pointer = &info,
402 };
403 401
404 status = acpi_get_object_info(handle, &info_buffer); 402 status = acpi_get_object_info(handle, &info_buffer);
405 if (ACPI_FAILURE(status)) { 403 if (ACPI_FAILURE(status)) {
406 err("%s: Failed to get device information\n", __FUNCTION__); 404 err("%s: Failed to get device information status=0x%x\n",
407 return 0; 405 __FUNCTION__, status);
406 return retval;
408 } 407 }
409 info.hardware_id.value[sizeof(info.hardware_id.value) - 1] = '\0'; 408 info = info_buffer.pointer;
410 409 info->hardware_id.value[sizeof(info->hardware_id.value) - 1] = '\0';
411 if (info.current_status && (info.valid & ACPI_VALID_HID) && 410
412 (!strcmp(info.hardware_id.value, IBM_HARDWARE_ID1) || 411 if (info->current_status && (info->valid & ACPI_VALID_HID) &&
413 !strcmp(info.hardware_id.value, IBM_HARDWARE_ID2))) { 412 (!strcmp(info->hardware_id.value, IBM_HARDWARE_ID1) ||
414 dbg("found hardware: %s, handle: %p\n", info.hardware_id.value, 413 !strcmp(info->hardware_id.value, IBM_HARDWARE_ID2))) {
415 handle); 414 dbg("found hardware: %s, handle: %p\n",
415 info->hardware_id.value, handle);
416 *phandle = handle; 416 *phandle = handle;
417 /* returning non-zero causes the search to stop 417 /* returning non-zero causes the search to stop
418 * and returns this value to the caller of 418 * and returns this value to the caller of
419 * acpi_walk_namespace, but it also causes some warnings 419 * acpi_walk_namespace, but it also causes some warnings
420 * in the acpi debug code to print... 420 * in the acpi debug code to print...
421 */ 421 */
422 return FOUND_APCI; 422 retval = FOUND_APCI;
423 } 423 }
424 return 0; 424 kfree(info);
425 return retval;
425} 426}
426 427
427static int __init ibm_acpiphp_init(void) 428static int __init ibm_acpiphp_init(void)
diff --git a/drivers/pci/intel-iommu.c b/drivers/pci/intel-iommu.c
index a4c3089f892a..977d29b32295 100644
--- a/drivers/pci/intel-iommu.c
+++ b/drivers/pci/intel-iommu.c
@@ -14,9 +14,10 @@
14 * this program; if not, write to the Free Software Foundation, Inc., 59 Temple 14 * this program; if not, write to the Free Software Foundation, Inc., 59 Temple
15 * Place - Suite 330, Boston, MA 02111-1307 USA. 15 * Place - Suite 330, Boston, MA 02111-1307 USA.
16 * 16 *
17 * Copyright (C) Ashok Raj <ashok.raj@intel.com> 17 * Copyright (C) 2006-2008 Intel Corporation
18 * Copyright (C) Shaohua Li <shaohua.li@intel.com> 18 * Author: Ashok Raj <ashok.raj@intel.com>
19 * Copyright (C) Anil S Keshavamurthy <anil.s.keshavamurthy@intel.com> 19 * Author: Shaohua Li <shaohua.li@intel.com>
20 * Author: Anil S Keshavamurthy <anil.s.keshavamurthy@intel.com>
20 */ 21 */
21 22
22#include <linux/init.h> 23#include <linux/init.h>
diff --git a/drivers/pci/intel-iommu.h b/drivers/pci/intel-iommu.h
index 07f5f6353bda..afc0ad96122e 100644
--- a/drivers/pci/intel-iommu.h
+++ b/drivers/pci/intel-iommu.h
@@ -14,8 +14,9 @@
14 * this program; if not, write to the Free Software Foundation, Inc., 59 Temple 14 * this program; if not, write to the Free Software Foundation, Inc., 59 Temple
15 * Place - Suite 330, Boston, MA 02111-1307 USA. 15 * Place - Suite 330, Boston, MA 02111-1307 USA.
16 * 16 *
17 * Copyright (C) Ashok Raj <ashok.raj@intel.com> 17 * Copyright (C) 2006-2008 Intel Corporation
18 * Copyright (C) Anil S Keshavamurthy <anil.s.keshavamurthy@intel.com> 18 * Author: Ashok Raj <ashok.raj@intel.com>
19 * Author: Anil S Keshavamurthy <anil.s.keshavamurthy@intel.com>
19 */ 20 */
20 21
21#ifndef _INTEL_IOMMU_H_ 22#ifndef _INTEL_IOMMU_H_
diff --git a/drivers/pci/iova.c b/drivers/pci/iova.c
index 8de7ab6c6d0c..dbcdd6bfa63a 100644
--- a/drivers/pci/iova.c
+++ b/drivers/pci/iova.c
@@ -3,7 +3,8 @@
3 * 3 *
4 * This file is released under the GPLv2. 4 * This file is released under the GPLv2.
5 * 5 *
6 * Copyright (C) 2006 Anil S Keshavamurthy <anil.s.keshavamurthy@intel.com> 6 * Copyright (C) 2006-2008 Intel Corporation
7 * Author: Anil S Keshavamurthy <anil.s.keshavamurthy@intel.com>
7 */ 8 */
8 9
9#include "iova.h" 10#include "iova.h"
diff --git a/drivers/pci/iova.h b/drivers/pci/iova.h
index d521b5b7319c..228f6c94b69c 100644
--- a/drivers/pci/iova.h
+++ b/drivers/pci/iova.h
@@ -3,7 +3,8 @@
3 * 3 *
4 * This file is released under the GPLv2. 4 * This file is released under the GPLv2.
5 * 5 *
6 * Copyright (C) 2006 Anil S Keshavamurthy <anil.s.keshavamurthy@intel.com> 6 * Copyright (C) 2006-2008 Intel Corporation
7 * Author: Anil S Keshavamurthy <anil.s.keshavamurthy@intel.com>
7 * 8 *
8 */ 9 */
9 10
diff --git a/drivers/pci/pci-acpi.c b/drivers/pci/pci-acpi.c
index e569645d59e2..4a23654184fc 100644
--- a/drivers/pci/pci-acpi.c
+++ b/drivers/pci/pci-acpi.c
@@ -158,6 +158,7 @@ run_osc_out:
158/** 158/**
159 * __pci_osc_support_set - register OS support to Firmware 159 * __pci_osc_support_set - register OS support to Firmware
160 * @flags: OS support bits 160 * @flags: OS support bits
161 * @hid: hardware ID
161 * 162 *
162 * Update OS support fields and doing a _OSC Query to obtain an update 163 * Update OS support fields and doing a _OSC Query to obtain an update
163 * from Firmware on supported control bits. 164 * from Firmware on supported control bits.
@@ -241,8 +242,6 @@ EXPORT_SYMBOL(pci_osc_control_set);
241 * choose from highest power _SxD to lowest power _SxW 242 * choose from highest power _SxD to lowest power _SxW
242 * else // no _PRW at S-state x 243 * else // no _PRW at S-state x
243 * choose highest power _SxD or any lower power 244 * choose highest power _SxD or any lower power
244 *
245 * currently we simply return _SxD, if present.
246 */ 245 */
247 246
248static pci_power_t acpi_pci_choose_state(struct pci_dev *pdev, 247static pci_power_t acpi_pci_choose_state(struct pci_dev *pdev,
diff --git a/drivers/pci/pci.c b/drivers/pci/pci.c
index ae3df46eaabf..183fddaa38b7 100644
--- a/drivers/pci/pci.c
+++ b/drivers/pci/pci.c
@@ -554,6 +554,7 @@ pci_power_t pci_choose_state(struct pci_dev *dev, pm_message_t state)
554 case PM_EVENT_PRETHAW: 554 case PM_EVENT_PRETHAW:
555 /* REVISIT both freeze and pre-thaw "should" use D0 */ 555 /* REVISIT both freeze and pre-thaw "should" use D0 */
556 case PM_EVENT_SUSPEND: 556 case PM_EVENT_SUSPEND:
557 case PM_EVENT_HIBERNATE:
557 return PCI_D3hot; 558 return PCI_D3hot;
558 default: 559 default:
559 printk("Unrecognized suspend event %d\n", state.event); 560 printk("Unrecognized suspend event %d\n", state.event);
diff --git a/drivers/pci/proc.c b/drivers/pci/proc.c
index 68aeeb7206de..ef18fcd641e2 100644
--- a/drivers/pci/proc.c
+++ b/drivers/pci/proc.c
@@ -422,7 +422,7 @@ int pci_proc_detach_device(struct pci_dev *dev)
422 struct proc_dir_entry *e; 422 struct proc_dir_entry *e;
423 423
424 if ((e = dev->procent)) { 424 if ((e = dev->procent)) {
425 if (atomic_read(&e->count)) 425 if (atomic_read(&e->count) > 1)
426 return -EBUSY; 426 return -EBUSY;
427 remove_proc_entry(e->name, dev->bus->procdir); 427 remove_proc_entry(e->name, dev->bus->procdir);
428 dev->procent = NULL; 428 dev->procent = NULL;
diff --git a/drivers/pci/quirks.c b/drivers/pci/quirks.c
index 0a953d43b9a2..bbad4a9f264f 100644
--- a/drivers/pci/quirks.c
+++ b/drivers/pci/quirks.c
@@ -867,13 +867,13 @@ static void quirk_disable_pxb(struct pci_dev *pdev)
867DECLARE_PCI_FIXUP_FINAL(PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_INTEL_82454NX, quirk_disable_pxb); 867DECLARE_PCI_FIXUP_FINAL(PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_INTEL_82454NX, quirk_disable_pxb);
868DECLARE_PCI_FIXUP_RESUME(PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_INTEL_82454NX, quirk_disable_pxb); 868DECLARE_PCI_FIXUP_RESUME(PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_INTEL_82454NX, quirk_disable_pxb);
869 869
870 870static void __devinit quirk_amd_ide_mode(struct pci_dev *pdev)
871static void __devinit quirk_sb600_sata(struct pci_dev *pdev)
872{ 871{
873 /* set sb600 sata to ahci mode */ 872 /* set sb600/sb700/sb800 sata to ahci mode */
874 if ((pdev->class >> 8) == PCI_CLASS_STORAGE_IDE) { 873 u8 tmp;
875 u8 tmp;
876 874
875 pci_read_config_byte(pdev, PCI_CLASS_DEVICE, &tmp);
876 if (tmp == 0x01) {
877 pci_read_config_byte(pdev, 0x40, &tmp); 877 pci_read_config_byte(pdev, 0x40, &tmp);
878 pci_write_config_byte(pdev, 0x40, tmp|1); 878 pci_write_config_byte(pdev, 0x40, tmp|1);
879 pci_write_config_byte(pdev, 0x9, 1); 879 pci_write_config_byte(pdev, 0x9, 1);
@@ -881,10 +881,13 @@ static void __devinit quirk_sb600_sata(struct pci_dev *pdev)
881 pci_write_config_byte(pdev, 0x40, tmp); 881 pci_write_config_byte(pdev, 0x40, tmp);
882 882
883 pdev->class = PCI_CLASS_STORAGE_SATA_AHCI; 883 pdev->class = PCI_CLASS_STORAGE_SATA_AHCI;
884 dev_info(&pdev->dev, "set SATA to AHCI mode\n");
884 } 885 }
885} 886}
886DECLARE_PCI_FIXUP_HEADER(PCI_VENDOR_ID_ATI, PCI_DEVICE_ID_ATI_IXP600_SATA, quirk_sb600_sata); 887DECLARE_PCI_FIXUP_HEADER(PCI_VENDOR_ID_ATI, PCI_DEVICE_ID_ATI_IXP600_SATA, quirk_amd_ide_mode);
887DECLARE_PCI_FIXUP_HEADER(PCI_VENDOR_ID_ATI, PCI_DEVICE_ID_ATI_IXP700_SATA, quirk_sb600_sata); 888DECLARE_PCI_FIXUP_RESUME(PCI_VENDOR_ID_ATI, PCI_DEVICE_ID_ATI_IXP600_SATA, quirk_amd_ide_mode);
889DECLARE_PCI_FIXUP_HEADER(PCI_VENDOR_ID_ATI, PCI_DEVICE_ID_ATI_IXP700_SATA, quirk_amd_ide_mode);
890DECLARE_PCI_FIXUP_RESUME(PCI_VENDOR_ID_ATI, PCI_DEVICE_ID_ATI_IXP700_SATA, quirk_amd_ide_mode);
888 891
889/* 892/*
890 * Serverworks CSB5 IDE does not fully support native mode 893 * Serverworks CSB5 IDE does not fully support native mode
@@ -1775,6 +1778,68 @@ static void __devinit quirk_nvidia_ck804_msi_ht_cap(struct pci_dev *dev)
1775DECLARE_PCI_FIXUP_FINAL(PCI_VENDOR_ID_NVIDIA, PCI_DEVICE_ID_NVIDIA_CK804_PCIE, 1778DECLARE_PCI_FIXUP_FINAL(PCI_VENDOR_ID_NVIDIA, PCI_DEVICE_ID_NVIDIA_CK804_PCIE,
1776 quirk_nvidia_ck804_msi_ht_cap); 1779 quirk_nvidia_ck804_msi_ht_cap);
1777 1780
1781/*
1782 * Force enable MSI mapping capability on HT bridges */
1783static inline void ht_enable_msi_mapping(struct pci_dev *dev)
1784{
1785 int pos, ttl = 48;
1786
1787 pos = pci_find_ht_capability(dev, HT_CAPTYPE_MSI_MAPPING);
1788 while (pos && ttl--) {
1789 u8 flags;
1790
1791 if (pci_read_config_byte(dev, pos + HT_MSI_FLAGS,
1792 &flags) == 0) {
1793 dev_info(&dev->dev, "Enabling HT MSI Mapping\n");
1794
1795 pci_write_config_byte(dev, pos + HT_MSI_FLAGS,
1796 flags | HT_MSI_FLAGS_ENABLE);
1797 }
1798 pos = pci_find_next_ht_capability(dev, pos,
1799 HT_CAPTYPE_MSI_MAPPING);
1800 }
1801}
1802
1803static void __devinit nv_msi_ht_cap_quirk(struct pci_dev *dev)
1804{
1805 struct pci_dev *host_bridge;
1806 int pos, ttl = 48;
1807
1808 /*
1809 * HT MSI mapping should be disabled on devices that are below
1810 * a non-Hypertransport host bridge. Locate the host bridge...
1811 */
1812 host_bridge = pci_get_bus_and_slot(0, PCI_DEVFN(0, 0));
1813 if (host_bridge == NULL) {
1814 dev_warn(&dev->dev,
1815 "nv_msi_ht_cap_quirk didn't locate host bridge\n");
1816 return;
1817 }
1818
1819 pos = pci_find_ht_capability(host_bridge, HT_CAPTYPE_SLAVE);
1820 if (pos != 0) {
1821 /* Host bridge is to HT */
1822 ht_enable_msi_mapping(dev);
1823 return;
1824 }
1825
1826 /* Host bridge is not to HT, disable HT MSI mapping on this device */
1827 pos = pci_find_ht_capability(dev, HT_CAPTYPE_MSI_MAPPING);
1828 while (pos && ttl--) {
1829 u8 flags;
1830
1831 if (pci_read_config_byte(dev, pos + HT_MSI_FLAGS,
1832 &flags) == 0) {
1833 dev_info(&dev->dev, "Quirk disabling HT MSI mapping");
1834 pci_write_config_byte(dev, pos + HT_MSI_FLAGS,
1835 flags & ~HT_MSI_FLAGS_ENABLE);
1836 }
1837 pos = pci_find_next_ht_capability(dev, pos,
1838 HT_CAPTYPE_MSI_MAPPING);
1839 }
1840}
1841DECLARE_PCI_FIXUP_FINAL(PCI_VENDOR_ID_NVIDIA, PCI_ANY_ID, nv_msi_ht_cap_quirk);
1842
1778static void __devinit quirk_msi_intx_disable_bug(struct pci_dev *dev) 1843static void __devinit quirk_msi_intx_disable_bug(struct pci_dev *dev)
1779{ 1844{
1780 dev->dev_flags |= PCI_DEV_FLAGS_MSI_INTX_DISABLE_BUG; 1845 dev->dev_flags |= PCI_DEV_FLAGS_MSI_INTX_DISABLE_BUG;
diff --git a/drivers/pci/setup-bus.c b/drivers/pci/setup-bus.c
index 262b0439abe9..125e7b7f34ff 100644
--- a/drivers/pci/setup-bus.c
+++ b/drivers/pci/setup-bus.c
@@ -206,10 +206,8 @@ pci_setup_bridge(struct pci_bus *bus)
206 if (bus->resource[2]->flags & IORESOURCE_PREFETCH) { 206 if (bus->resource[2]->flags & IORESOURCE_PREFETCH) {
207 l = (region.start >> 16) & 0xfff0; 207 l = (region.start >> 16) & 0xfff0;
208 l |= region.end & 0xfff00000; 208 l |= region.end & 0xfff00000;
209#ifdef CONFIG_RESOURCES_64BIT 209 bu = upper_32_bits(region.start);
210 bu = region.start >> 32; 210 lu = upper_32_bits(region.end);
211 lu = region.end >> 32;
212#endif
213 DBG(KERN_INFO " PREFETCH window: 0x%016llx-0x%016llx\n", 211 DBG(KERN_INFO " PREFETCH window: 0x%016llx-0x%016llx\n",
214 (unsigned long long)region.start, 212 (unsigned long long)region.start,
215 (unsigned long long)region.end); 213 (unsigned long long)region.end);
diff --git a/drivers/pcmcia/i82092.c b/drivers/pcmcia/i82092.c
index 749515534cc0..e54ecc580d9e 100644
--- a/drivers/pcmcia/i82092.c
+++ b/drivers/pcmcia/i82092.c
@@ -647,7 +647,12 @@ static int i82092aa_set_mem_map(struct pcmcia_socket *socket, struct pccard_mem_
647 if ( (mem->card_start > 0x3ffffff) || (region.start > region.end) || 647 if ( (mem->card_start > 0x3ffffff) || (region.start > region.end) ||
648 (mem->speed > 1000) ) { 648 (mem->speed > 1000) ) {
649 leave("i82092aa_set_mem_map: invalid address / speed"); 649 leave("i82092aa_set_mem_map: invalid address / speed");
650 printk("invalid mem map for socket %i : %lx to %lx with a start of %x \n",sock,region.start, region.end, mem->card_start); 650 printk("invalid mem map for socket %i: %llx to %llx with a "
651 "start of %x\n",
652 sock,
653 (unsigned long long)region.start,
654 (unsigned long long)region.end,
655 mem->card_start);
651 return -EINVAL; 656 return -EINVAL;
652 } 657 }
653 658
diff --git a/drivers/rtc/rtc-cmos.c b/drivers/rtc/rtc-cmos.c
index e059f94c79eb..f3ee2ad566b4 100644
--- a/drivers/rtc/rtc-cmos.c
+++ b/drivers/rtc/rtc-cmos.c
@@ -388,6 +388,7 @@ static int cmos_procfs(struct device *dev, struct seq_file *seq)
388 return seq_printf(seq, 388 return seq_printf(seq,
389 "periodic_IRQ\t: %s\n" 389 "periodic_IRQ\t: %s\n"
390 "update_IRQ\t: %s\n" 390 "update_IRQ\t: %s\n"
391 "HPET_emulated\t: %s\n"
391 // "square_wave\t: %s\n" 392 // "square_wave\t: %s\n"
392 // "BCD\t\t: %s\n" 393 // "BCD\t\t: %s\n"
393 "DST_enable\t: %s\n" 394 "DST_enable\t: %s\n"
@@ -395,6 +396,7 @@ static int cmos_procfs(struct device *dev, struct seq_file *seq)
395 "batt_status\t: %s\n", 396 "batt_status\t: %s\n",
396 (rtc_control & RTC_PIE) ? "yes" : "no", 397 (rtc_control & RTC_PIE) ? "yes" : "no",
397 (rtc_control & RTC_UIE) ? "yes" : "no", 398 (rtc_control & RTC_UIE) ? "yes" : "no",
399 is_hpet_enabled() ? "yes" : "no",
398 // (rtc_control & RTC_SQWE) ? "yes" : "no", 400 // (rtc_control & RTC_SQWE) ? "yes" : "no",
399 // (rtc_control & RTC_DM_BINARY) ? "no" : "yes", 401 // (rtc_control & RTC_DM_BINARY) ? "no" : "yes",
400 (rtc_control & RTC_DST_EN) ? "yes" : "no", 402 (rtc_control & RTC_DST_EN) ? "yes" : "no",
diff --git a/drivers/s390/block/dasd.c b/drivers/s390/block/dasd.c
index d984e0fae630..ccf46c96adb4 100644
--- a/drivers/s390/block/dasd.c
+++ b/drivers/s390/block/dasd.c
@@ -1149,12 +1149,14 @@ static void __dasd_device_process_final_queue(struct dasd_device *device,
1149{ 1149{
1150 struct list_head *l, *n; 1150 struct list_head *l, *n;
1151 struct dasd_ccw_req *cqr; 1151 struct dasd_ccw_req *cqr;
1152 struct dasd_block *block;
1152 1153
1153 list_for_each_safe(l, n, final_queue) { 1154 list_for_each_safe(l, n, final_queue) {
1154 cqr = list_entry(l, struct dasd_ccw_req, devlist); 1155 cqr = list_entry(l, struct dasd_ccw_req, devlist);
1155 list_del_init(&cqr->devlist); 1156 list_del_init(&cqr->devlist);
1156 if (cqr->block) 1157 block = cqr->block;
1157 spin_lock_bh(&cqr->block->queue_lock); 1158 if (block)
1159 spin_lock_bh(&block->queue_lock);
1158 switch (cqr->status) { 1160 switch (cqr->status) {
1159 case DASD_CQR_SUCCESS: 1161 case DASD_CQR_SUCCESS:
1160 cqr->status = DASD_CQR_DONE; 1162 cqr->status = DASD_CQR_DONE;
@@ -1172,15 +1174,13 @@ static void __dasd_device_process_final_queue(struct dasd_device *device,
1172 cqr, cqr->status); 1174 cqr, cqr->status);
1173 BUG(); 1175 BUG();
1174 } 1176 }
1175 if (cqr->block)
1176 spin_unlock_bh(&cqr->block->queue_lock);
1177 if (cqr->callback != NULL) 1177 if (cqr->callback != NULL)
1178 (cqr->callback)(cqr, cqr->callback_data); 1178 (cqr->callback)(cqr, cqr->callback_data);
1179 if (block)
1180 spin_unlock_bh(&block->queue_lock);
1179 } 1181 }
1180} 1182}
1181 1183
1182
1183
1184/* 1184/*
1185 * Take a look at the first request on the ccw queue and check 1185 * Take a look at the first request on the ccw queue and check
1186 * if it reached its expire time. If so, terminate the IO. 1186 * if it reached its expire time. If so, terminate the IO.
diff --git a/drivers/s390/block/dcssblk.c b/drivers/s390/block/dcssblk.c
index 3faf0538b328..e6c94dbfdeaa 100644
--- a/drivers/s390/block/dcssblk.c
+++ b/drivers/s390/block/dcssblk.c
@@ -666,7 +666,7 @@ dcssblk_make_request(struct request_queue *q, struct bio *bio)
666 page_addr = (unsigned long) 666 page_addr = (unsigned long)
667 page_address(bvec->bv_page) + bvec->bv_offset; 667 page_address(bvec->bv_page) + bvec->bv_offset;
668 source_addr = dev_info->start + (index<<12) + bytes_done; 668 source_addr = dev_info->start + (index<<12) + bytes_done;
669 if (unlikely(page_addr & 4095) != 0 || (bvec->bv_len & 4095) != 0) 669 if (unlikely((page_addr & 4095) != 0) || (bvec->bv_len & 4095) != 0)
670 // More paranoia. 670 // More paranoia.
671 goto fail; 671 goto fail;
672 if (bio_data_dir(bio) == READ) { 672 if (bio_data_dir(bio) == READ) {
diff --git a/drivers/s390/char/sclp.c b/drivers/s390/char/sclp.c
index 25629b92dec3..2c7a1ee6b041 100644
--- a/drivers/s390/char/sclp.c
+++ b/drivers/s390/char/sclp.c
@@ -29,10 +29,10 @@ static ext_int_info_t ext_int_info_hwc;
29/* Lock to protect internal data consistency. */ 29/* Lock to protect internal data consistency. */
30static DEFINE_SPINLOCK(sclp_lock); 30static DEFINE_SPINLOCK(sclp_lock);
31 31
32/* Mask of events that we can receive from the sclp interface. */ 32/* Mask of events that we can send to the sclp interface. */
33static sccb_mask_t sclp_receive_mask; 33static sccb_mask_t sclp_receive_mask;
34 34
35/* Mask of events that we can send to the sclp interface. */ 35/* Mask of events that we can receive from the sclp interface. */
36static sccb_mask_t sclp_send_mask; 36static sccb_mask_t sclp_send_mask;
37 37
38/* List of registered event listeners and senders. */ 38/* List of registered event listeners and senders. */
@@ -380,7 +380,7 @@ sclp_interrupt_handler(__u16 code)
380 } 380 }
381 sclp_running_state = sclp_running_state_idle; 381 sclp_running_state = sclp_running_state_idle;
382 } 382 }
383 if (evbuf_pending && sclp_receive_mask != 0 && 383 if (evbuf_pending &&
384 sclp_activation_state == sclp_activation_state_active) 384 sclp_activation_state == sclp_activation_state_active)
385 __sclp_queue_read_req(); 385 __sclp_queue_read_req();
386 spin_unlock(&sclp_lock); 386 spin_unlock(&sclp_lock);
@@ -459,8 +459,8 @@ sclp_dispatch_state_change(void)
459 reg = NULL; 459 reg = NULL;
460 list_for_each(l, &sclp_reg_list) { 460 list_for_each(l, &sclp_reg_list) {
461 reg = list_entry(l, struct sclp_register, list); 461 reg = list_entry(l, struct sclp_register, list);
462 receive_mask = reg->receive_mask & sclp_receive_mask; 462 receive_mask = reg->send_mask & sclp_receive_mask;
463 send_mask = reg->send_mask & sclp_send_mask; 463 send_mask = reg->receive_mask & sclp_send_mask;
464 if (reg->sclp_receive_mask != receive_mask || 464 if (reg->sclp_receive_mask != receive_mask ||
465 reg->sclp_send_mask != send_mask) { 465 reg->sclp_send_mask != send_mask) {
466 reg->sclp_receive_mask = receive_mask; 466 reg->sclp_receive_mask = receive_mask;
@@ -615,8 +615,8 @@ struct init_sccb {
615 u16 mask_length; 615 u16 mask_length;
616 sccb_mask_t receive_mask; 616 sccb_mask_t receive_mask;
617 sccb_mask_t send_mask; 617 sccb_mask_t send_mask;
618 sccb_mask_t sclp_send_mask;
619 sccb_mask_t sclp_receive_mask; 618 sccb_mask_t sclp_receive_mask;
619 sccb_mask_t sclp_send_mask;
620} __attribute__((packed)); 620} __attribute__((packed));
621 621
622/* Prepare init mask request. Called while sclp_lock is locked. */ 622/* Prepare init mask request. Called while sclp_lock is locked. */
diff --git a/drivers/s390/char/sclp.h b/drivers/s390/char/sclp.h
index aa8186d18aee..bac80e856f97 100644
--- a/drivers/s390/char/sclp.h
+++ b/drivers/s390/char/sclp.h
@@ -122,11 +122,13 @@ struct sclp_req {
122/* of some routines it wants to be called from the low level driver */ 122/* of some routines it wants to be called from the low level driver */
123struct sclp_register { 123struct sclp_register {
124 struct list_head list; 124 struct list_head list;
125 /* event masks this user is registered for */ 125 /* User wants to receive: */
126 sccb_mask_t receive_mask; 126 sccb_mask_t receive_mask;
127 /* User wants to send: */
127 sccb_mask_t send_mask; 128 sccb_mask_t send_mask;
128 /* actually present events */ 129 /* H/W can receive: */
129 sccb_mask_t sclp_receive_mask; 130 sccb_mask_t sclp_receive_mask;
131 /* H/W can send: */
130 sccb_mask_t sclp_send_mask; 132 sccb_mask_t sclp_send_mask;
131 /* called if event type availability changes */ 133 /* called if event type availability changes */
132 void (*state_change_fn)(struct sclp_register *); 134 void (*state_change_fn)(struct sclp_register *);
diff --git a/drivers/s390/char/sclp_config.c b/drivers/s390/char/sclp_config.c
index 9dc77f14fa52..b8f35bc52b7b 100644
--- a/drivers/s390/char/sclp_config.c
+++ b/drivers/s390/char/sclp_config.c
@@ -64,7 +64,7 @@ static int __init sclp_conf_init(void)
64 return rc; 64 return rc;
65 } 65 }
66 66
67 if (!(sclp_conf_register.sclp_receive_mask & EVTYP_CONFMGMDATA_MASK)) { 67 if (!(sclp_conf_register.sclp_send_mask & EVTYP_CONFMGMDATA_MASK)) {
68 printk(KERN_WARNING TAG "no configuration management.\n"); 68 printk(KERN_WARNING TAG "no configuration management.\n");
69 sclp_unregister(&sclp_conf_register); 69 sclp_unregister(&sclp_conf_register);
70 rc = -ENOSYS; 70 rc = -ENOSYS;
diff --git a/drivers/s390/char/sclp_cpi_sys.c b/drivers/s390/char/sclp_cpi_sys.c
index 41617032afdc..9f37456222e9 100644
--- a/drivers/s390/char/sclp_cpi_sys.c
+++ b/drivers/s390/char/sclp_cpi_sys.c
@@ -129,7 +129,7 @@ static int cpi_req(void)
129 "to hardware console.\n"); 129 "to hardware console.\n");
130 goto out; 130 goto out;
131 } 131 }
132 if (!(sclp_cpi_event.sclp_send_mask & EVTYP_CTLPROGIDENT_MASK)) { 132 if (!(sclp_cpi_event.sclp_receive_mask & EVTYP_CTLPROGIDENT_MASK)) {
133 printk(KERN_WARNING "cpi: no control program " 133 printk(KERN_WARNING "cpi: no control program "
134 "identification support\n"); 134 "identification support\n");
135 rc = -EOPNOTSUPP; 135 rc = -EOPNOTSUPP;
diff --git a/drivers/s390/char/sclp_rw.c b/drivers/s390/char/sclp_rw.c
index ad7195d3de0c..da09781b32f7 100644
--- a/drivers/s390/char/sclp_rw.c
+++ b/drivers/s390/char/sclp_rw.c
@@ -452,10 +452,10 @@ sclp_emit_buffer(struct sclp_buffer *buffer,
452 return -EIO; 452 return -EIO;
453 453
454 sccb = buffer->sccb; 454 sccb = buffer->sccb;
455 if (sclp_rw_event.sclp_send_mask & EVTYP_MSG_MASK) 455 if (sclp_rw_event.sclp_receive_mask & EVTYP_MSG_MASK)
456 /* Use normal write message */ 456 /* Use normal write message */
457 sccb->msg_buf.header.type = EVTYP_MSG; 457 sccb->msg_buf.header.type = EVTYP_MSG;
458 else if (sclp_rw_event.sclp_send_mask & EVTYP_PMSGCMD_MASK) 458 else if (sclp_rw_event.sclp_receive_mask & EVTYP_PMSGCMD_MASK)
459 /* Use write priority message */ 459 /* Use write priority message */
460 sccb->msg_buf.header.type = EVTYP_PMSGCMD; 460 sccb->msg_buf.header.type = EVTYP_PMSGCMD;
461 else 461 else
diff --git a/drivers/s390/char/sclp_vt220.c b/drivers/s390/char/sclp_vt220.c
index f47f4a768be5..92f527201792 100644
--- a/drivers/s390/char/sclp_vt220.c
+++ b/drivers/s390/char/sclp_vt220.c
@@ -202,7 +202,7 @@ sclp_vt220_callback(struct sclp_req *request, void *data)
202static int 202static int
203__sclp_vt220_emit(struct sclp_vt220_request *request) 203__sclp_vt220_emit(struct sclp_vt220_request *request)
204{ 204{
205 if (!(sclp_vt220_register.sclp_send_mask & EVTYP_VT220MSG_MASK)) { 205 if (!(sclp_vt220_register.sclp_receive_mask & EVTYP_VT220MSG_MASK)) {
206 request->sclp_req.status = SCLP_REQ_FAILED; 206 request->sclp_req.status = SCLP_REQ_FAILED;
207 return -EIO; 207 return -EIO;
208 } 208 }
diff --git a/drivers/s390/cio/device.c b/drivers/s390/cio/device.c
index d35dc3f25d06..fec004f62bcf 100644
--- a/drivers/s390/cio/device.c
+++ b/drivers/s390/cio/device.c
@@ -32,7 +32,7 @@
32#include "io_sch.h" 32#include "io_sch.h"
33 33
34static struct timer_list recovery_timer; 34static struct timer_list recovery_timer;
35static spinlock_t recovery_lock; 35static DEFINE_SPINLOCK(recovery_lock);
36static int recovery_phase; 36static int recovery_phase;
37static const unsigned long recovery_delay[] = { 3, 30, 300 }; 37static const unsigned long recovery_delay[] = { 3, 30, 300 };
38 38
@@ -1535,7 +1535,7 @@ static int recovery_check(struct device *dev, void *data)
1535 return 0; 1535 return 0;
1536} 1536}
1537 1537
1538static void recovery_func(unsigned long data) 1538static void recovery_work_func(struct work_struct *unused)
1539{ 1539{
1540 int redo = 0; 1540 int redo = 0;
1541 1541
@@ -1553,6 +1553,17 @@ static void recovery_func(unsigned long data)
1553 CIO_MSG_EVENT(2, "recovery: end\n"); 1553 CIO_MSG_EVENT(2, "recovery: end\n");
1554} 1554}
1555 1555
1556static DECLARE_WORK(recovery_work, recovery_work_func);
1557
1558static void recovery_func(unsigned long data)
1559{
1560 /*
1561 * We can't do our recovery in softirq context and it's not
1562 * performance critical, so we schedule it.
1563 */
1564 schedule_work(&recovery_work);
1565}
1566
1556void ccw_device_schedule_recovery(void) 1567void ccw_device_schedule_recovery(void)
1557{ 1568{
1558 unsigned long flags; 1569 unsigned long flags;
diff --git a/drivers/s390/cio/qdio.c b/drivers/s390/cio/qdio.c
index 097fc0967e9d..2b5bfb7c69e5 100644
--- a/drivers/s390/cio/qdio.c
+++ b/drivers/s390/cio/qdio.c
@@ -32,7 +32,7 @@
32 32
33#include <linux/module.h> 33#include <linux/module.h>
34#include <linux/init.h> 34#include <linux/init.h>
35 35#include <linux/delay.h>
36#include <linux/slab.h> 36#include <linux/slab.h>
37#include <linux/kernel.h> 37#include <linux/kernel.h>
38#include <linux/proc_fs.h> 38#include <linux/proc_fs.h>
@@ -1215,9 +1215,6 @@ tiqdio_is_inbound_q_done(struct qdio_q *q)
1215 1215
1216 if (!no_used) 1216 if (!no_used)
1217 return 1; 1217 return 1;
1218 if (!q->siga_sync && !irq->is_qebsm)
1219 /* we'll check for more primed buffers in qeth_stop_polling */
1220 return 0;
1221 if (irq->is_qebsm) { 1218 if (irq->is_qebsm) {
1222 count = 1; 1219 count = 1;
1223 start_buf = q->first_to_check; 1220 start_buf = q->first_to_check;
@@ -3332,13 +3329,7 @@ qdio_activate(struct ccw_device *cdev, int flags)
3332 } 3329 }
3333 } 3330 }
3334 3331
3335 wait_event_interruptible_timeout(cdev->private->wait_q, 3332 msleep(QDIO_ACTIVATE_TIMEOUT);
3336 ((irq_ptr->state ==
3337 QDIO_IRQ_STATE_STOPPED) ||
3338 (irq_ptr->state ==
3339 QDIO_IRQ_STATE_ERR)),
3340 QDIO_ACTIVATE_TIMEOUT);
3341
3342 switch (irq_ptr->state) { 3333 switch (irq_ptr->state) {
3343 case QDIO_IRQ_STATE_STOPPED: 3334 case QDIO_IRQ_STATE_STOPPED:
3344 case QDIO_IRQ_STATE_ERR: 3335 case QDIO_IRQ_STATE_ERR:
diff --git a/drivers/s390/cio/qdio.h b/drivers/s390/cio/qdio.h
index 37870e4e938e..da8a272fd75b 100644
--- a/drivers/s390/cio/qdio.h
+++ b/drivers/s390/cio/qdio.h
@@ -57,10 +57,10 @@
57 of the queue to 0 */ 57 of the queue to 0 */
58 58
59#define QDIO_ESTABLISH_TIMEOUT (1*HZ) 59#define QDIO_ESTABLISH_TIMEOUT (1*HZ)
60#define QDIO_ACTIVATE_TIMEOUT (5*HZ)
61#define QDIO_CLEANUP_CLEAR_TIMEOUT (20*HZ) 60#define QDIO_CLEANUP_CLEAR_TIMEOUT (20*HZ)
62#define QDIO_CLEANUP_HALT_TIMEOUT (10*HZ) 61#define QDIO_CLEANUP_HALT_TIMEOUT (10*HZ)
63#define QDIO_FORCE_CHECK_TIMEOUT (10*HZ) 62#define QDIO_FORCE_CHECK_TIMEOUT (10*HZ)
63#define QDIO_ACTIVATE_TIMEOUT (5) /* 5 ms */
64 64
65enum qdio_irq_states { 65enum qdio_irq_states {
66 QDIO_IRQ_STATE_INACTIVE, 66 QDIO_IRQ_STATE_INACTIVE,
diff --git a/drivers/scsi/Kconfig b/drivers/scsi/Kconfig
index a7a0813b24cb..c46666a24809 100644
--- a/drivers/scsi/Kconfig
+++ b/drivers/scsi/Kconfig
@@ -992,6 +992,16 @@ config SCSI_IZIP_SLOW_CTR
992 992
993 Generally, saying N is fine. 993 Generally, saying N is fine.
994 994
995config SCSI_MVSAS
996 tristate "Marvell 88SE6440 SAS/SATA support"
997 depends on PCI && SCSI
998 select SCSI_SAS_LIBSAS
999 help
1000 This driver supports Marvell SAS/SATA PCI devices.
1001
1002 To compiler this driver as a module, choose M here: the module
1003 will be called mvsas.
1004
995config SCSI_NCR53C406A 1005config SCSI_NCR53C406A
996 tristate "NCR53c406a SCSI support" 1006 tristate "NCR53c406a SCSI support"
997 depends on ISA && SCSI 1007 depends on ISA && SCSI
diff --git a/drivers/scsi/Makefile b/drivers/scsi/Makefile
index 925c26b4fff9..23e6ecbd4778 100644
--- a/drivers/scsi/Makefile
+++ b/drivers/scsi/Makefile
@@ -119,6 +119,7 @@ obj-$(CONFIG_SCSI_IBMVSCSI) += ibmvscsi/
119obj-$(CONFIG_SCSI_IBMVSCSIS) += ibmvscsi/ 119obj-$(CONFIG_SCSI_IBMVSCSIS) += ibmvscsi/
120obj-$(CONFIG_SCSI_HPTIOP) += hptiop.o 120obj-$(CONFIG_SCSI_HPTIOP) += hptiop.o
121obj-$(CONFIG_SCSI_STEX) += stex.o 121obj-$(CONFIG_SCSI_STEX) += stex.o
122obj-$(CONFIG_SCSI_MVSAS) += mvsas.o
122obj-$(CONFIG_PS3_ROM) += ps3rom.o 123obj-$(CONFIG_PS3_ROM) += ps3rom.o
123 124
124obj-$(CONFIG_ARM) += arm/ 125obj-$(CONFIG_ARM) += arm/
diff --git a/drivers/scsi/aic7xxx/aic79xx_osm_pci.c b/drivers/scsi/aic7xxx/aic79xx_osm_pci.c
index 4150c8a8fdc2..dfaaae5e73ae 100644
--- a/drivers/scsi/aic7xxx/aic79xx_osm_pci.c
+++ b/drivers/scsi/aic7xxx/aic79xx_osm_pci.c
@@ -89,7 +89,7 @@ ahd_linux_pci_dev_suspend(struct pci_dev *pdev, pm_message_t mesg)
89 pci_save_state(pdev); 89 pci_save_state(pdev);
90 pci_disable_device(pdev); 90 pci_disable_device(pdev);
91 91
92 if (mesg.event == PM_EVENT_SUSPEND) 92 if (mesg.event & PM_EVENT_SLEEP)
93 pci_set_power_state(pdev, PCI_D3hot); 93 pci_set_power_state(pdev, PCI_D3hot);
94 94
95 return rc; 95 return rc;
diff --git a/drivers/scsi/aic7xxx/aic7xxx_core.c b/drivers/scsi/aic7xxx/aic7xxx_core.c
index 6d2ae641273c..64e62ce59c15 100644
--- a/drivers/scsi/aic7xxx/aic7xxx_core.c
+++ b/drivers/scsi/aic7xxx/aic7xxx_core.c
@@ -695,15 +695,16 @@ ahc_handle_seqint(struct ahc_softc *ahc, u_int intstat)
695 scb_index = ahc_inb(ahc, SCB_TAG); 695 scb_index = ahc_inb(ahc, SCB_TAG);
696 scb = ahc_lookup_scb(ahc, scb_index); 696 scb = ahc_lookup_scb(ahc, scb_index);
697 if (devinfo.role == ROLE_INITIATOR) { 697 if (devinfo.role == ROLE_INITIATOR) {
698 if (scb == NULL) 698 if (bus_phase == P_MESGOUT) {
699 panic("HOST_MSG_LOOP with " 699 if (scb == NULL)
700 "invalid SCB %x\n", scb_index); 700 panic("HOST_MSG_LOOP with "
701 "invalid SCB %x\n",
702 scb_index);
701 703
702 if (bus_phase == P_MESGOUT)
703 ahc_setup_initiator_msgout(ahc, 704 ahc_setup_initiator_msgout(ahc,
704 &devinfo, 705 &devinfo,
705 scb); 706 scb);
706 else { 707 } else {
707 ahc->msg_type = 708 ahc->msg_type =
708 MSG_TYPE_INITIATOR_MSGIN; 709 MSG_TYPE_INITIATOR_MSGIN;
709 ahc->msgin_index = 0; 710 ahc->msgin_index = 0;
diff --git a/drivers/scsi/aic7xxx/aic7xxx_osm_pci.c b/drivers/scsi/aic7xxx/aic7xxx_osm_pci.c
index dd6e21d6f1dd..3d3eaef65fb3 100644
--- a/drivers/scsi/aic7xxx/aic7xxx_osm_pci.c
+++ b/drivers/scsi/aic7xxx/aic7xxx_osm_pci.c
@@ -134,7 +134,7 @@ ahc_linux_pci_dev_suspend(struct pci_dev *pdev, pm_message_t mesg)
134 pci_save_state(pdev); 134 pci_save_state(pdev);
135 pci_disable_device(pdev); 135 pci_disable_device(pdev);
136 136
137 if (mesg.event == PM_EVENT_SUSPEND) 137 if (mesg.event & PM_EVENT_SLEEP)
138 pci_set_power_state(pdev, PCI_D3hot); 138 pci_set_power_state(pdev, PCI_D3hot);
139 139
140 return rc; 140 return rc;
diff --git a/drivers/scsi/aic94xx/aic94xx_scb.c b/drivers/scsi/aic94xx/aic94xx_scb.c
index 0febad4dd75f..ab350504ca5a 100644
--- a/drivers/scsi/aic94xx/aic94xx_scb.c
+++ b/drivers/scsi/aic94xx/aic94xx_scb.c
@@ -458,13 +458,19 @@ static void escb_tasklet_complete(struct asd_ascb *ascb,
458 tc_abort = le16_to_cpu(tc_abort); 458 tc_abort = le16_to_cpu(tc_abort);
459 459
460 list_for_each_entry_safe(a, b, &asd_ha->seq.pend_q, list) { 460 list_for_each_entry_safe(a, b, &asd_ha->seq.pend_q, list) {
461 struct sas_task *task = ascb->uldd_task; 461 struct sas_task *task = a->uldd_task;
462
463 if (a->tc_index != tc_abort)
464 continue;
462 465
463 if (task && a->tc_index == tc_abort) { 466 if (task) {
464 failed_dev = task->dev; 467 failed_dev = task->dev;
465 sas_task_abort(task); 468 sas_task_abort(task);
466 break; 469 } else {
470 ASD_DPRINTK("R_T_A for non TASK scb 0x%x\n",
471 a->scb->header.opcode);
467 } 472 }
473 break;
468 } 474 }
469 475
470 if (!failed_dev) { 476 if (!failed_dev) {
@@ -478,7 +484,7 @@ static void escb_tasklet_complete(struct asd_ascb *ascb,
478 * that the EH will wake up and do something. 484 * that the EH will wake up and do something.
479 */ 485 */
480 list_for_each_entry_safe(a, b, &asd_ha->seq.pend_q, list) { 486 list_for_each_entry_safe(a, b, &asd_ha->seq.pend_q, list) {
481 struct sas_task *task = ascb->uldd_task; 487 struct sas_task *task = a->uldd_task;
482 488
483 if (task && 489 if (task &&
484 task->dev == failed_dev && 490 task->dev == failed_dev &&
diff --git a/drivers/scsi/aic94xx/aic94xx_tmf.c b/drivers/scsi/aic94xx/aic94xx_tmf.c
index b52124f3d3ac..144f5ad20453 100644
--- a/drivers/scsi/aic94xx/aic94xx_tmf.c
+++ b/drivers/scsi/aic94xx/aic94xx_tmf.c
@@ -151,8 +151,6 @@ static int asd_clear_nexus_I_T(struct domain_device *dev)
151 CLEAR_NEXUS_PRE; 151 CLEAR_NEXUS_PRE;
152 scb->clear_nexus.nexus = NEXUS_I_T; 152 scb->clear_nexus.nexus = NEXUS_I_T;
153 scb->clear_nexus.flags = SEND_Q | EXEC_Q | NOTINQ; 153 scb->clear_nexus.flags = SEND_Q | EXEC_Q | NOTINQ;
154 if (dev->tproto)
155 scb->clear_nexus.flags |= SUSPEND_TX;
156 scb->clear_nexus.conn_handle = cpu_to_le16((u16)(unsigned long) 154 scb->clear_nexus.conn_handle = cpu_to_le16((u16)(unsigned long)
157 dev->lldd_dev); 155 dev->lldd_dev);
158 CLEAR_NEXUS_POST; 156 CLEAR_NEXUS_POST;
@@ -169,8 +167,6 @@ static int asd_clear_nexus_I_T_L(struct domain_device *dev, u8 *lun)
169 CLEAR_NEXUS_PRE; 167 CLEAR_NEXUS_PRE;
170 scb->clear_nexus.nexus = NEXUS_I_T_L; 168 scb->clear_nexus.nexus = NEXUS_I_T_L;
171 scb->clear_nexus.flags = SEND_Q | EXEC_Q | NOTINQ; 169 scb->clear_nexus.flags = SEND_Q | EXEC_Q | NOTINQ;
172 if (dev->tproto)
173 scb->clear_nexus.flags |= SUSPEND_TX;
174 memcpy(scb->clear_nexus.ssp_task.lun, lun, 8); 170 memcpy(scb->clear_nexus.ssp_task.lun, lun, 8);
175 scb->clear_nexus.conn_handle = cpu_to_le16((u16)(unsigned long) 171 scb->clear_nexus.conn_handle = cpu_to_le16((u16)(unsigned long)
176 dev->lldd_dev); 172 dev->lldd_dev);
diff --git a/drivers/scsi/arcmsr/arcmsr_hba.c b/drivers/scsi/arcmsr/arcmsr_hba.c
index 4f9ff32cfed0..f91f79c8007d 100644
--- a/drivers/scsi/arcmsr/arcmsr_hba.c
+++ b/drivers/scsi/arcmsr/arcmsr_hba.c
@@ -1387,18 +1387,16 @@ static int arcmsr_iop_message_xfer(struct AdapterControlBlock *acb, \
1387 switch(controlcode) { 1387 switch(controlcode) {
1388 1388
1389 case ARCMSR_MESSAGE_READ_RQBUFFER: { 1389 case ARCMSR_MESSAGE_READ_RQBUFFER: {
1390 unsigned long *ver_addr; 1390 unsigned char *ver_addr;
1391 uint8_t *pQbuffer, *ptmpQbuffer; 1391 uint8_t *pQbuffer, *ptmpQbuffer;
1392 int32_t allxfer_len = 0; 1392 int32_t allxfer_len = 0;
1393 void *tmp;
1394 1393
1395 tmp = kmalloc(1032, GFP_KERNEL|GFP_DMA); 1394 ver_addr = kmalloc(1032, GFP_ATOMIC);
1396 ver_addr = (unsigned long *)tmp; 1395 if (!ver_addr) {
1397 if (!tmp) {
1398 retvalue = ARCMSR_MESSAGE_FAIL; 1396 retvalue = ARCMSR_MESSAGE_FAIL;
1399 goto message_out; 1397 goto message_out;
1400 } 1398 }
1401 ptmpQbuffer = (uint8_t *) ver_addr; 1399 ptmpQbuffer = ver_addr;
1402 while ((acb->rqbuf_firstindex != acb->rqbuf_lastindex) 1400 while ((acb->rqbuf_firstindex != acb->rqbuf_lastindex)
1403 && (allxfer_len < 1031)) { 1401 && (allxfer_len < 1031)) {
1404 pQbuffer = &acb->rqbuffer[acb->rqbuf_firstindex]; 1402 pQbuffer = &acb->rqbuffer[acb->rqbuf_firstindex];
@@ -1427,26 +1425,24 @@ static int arcmsr_iop_message_xfer(struct AdapterControlBlock *acb, \
1427 } 1425 }
1428 arcmsr_iop_message_read(acb); 1426 arcmsr_iop_message_read(acb);
1429 } 1427 }
1430 memcpy(pcmdmessagefld->messagedatabuffer, (uint8_t *)ver_addr, allxfer_len); 1428 memcpy(pcmdmessagefld->messagedatabuffer, ver_addr, allxfer_len);
1431 pcmdmessagefld->cmdmessage.Length = allxfer_len; 1429 pcmdmessagefld->cmdmessage.Length = allxfer_len;
1432 pcmdmessagefld->cmdmessage.ReturnCode = ARCMSR_MESSAGE_RETURNCODE_OK; 1430 pcmdmessagefld->cmdmessage.ReturnCode = ARCMSR_MESSAGE_RETURNCODE_OK;
1433 kfree(tmp); 1431 kfree(ver_addr);
1434 } 1432 }
1435 break; 1433 break;
1436 1434
1437 case ARCMSR_MESSAGE_WRITE_WQBUFFER: { 1435 case ARCMSR_MESSAGE_WRITE_WQBUFFER: {
1438 unsigned long *ver_addr; 1436 unsigned char *ver_addr;
1439 int32_t my_empty_len, user_len, wqbuf_firstindex, wqbuf_lastindex; 1437 int32_t my_empty_len, user_len, wqbuf_firstindex, wqbuf_lastindex;
1440 uint8_t *pQbuffer, *ptmpuserbuffer; 1438 uint8_t *pQbuffer, *ptmpuserbuffer;
1441 void *tmp;
1442 1439
1443 tmp = kmalloc(1032, GFP_KERNEL|GFP_DMA); 1440 ver_addr = kmalloc(1032, GFP_ATOMIC);
1444 ver_addr = (unsigned long *)tmp; 1441 if (!ver_addr) {
1445 if (!tmp) {
1446 retvalue = ARCMSR_MESSAGE_FAIL; 1442 retvalue = ARCMSR_MESSAGE_FAIL;
1447 goto message_out; 1443 goto message_out;
1448 } 1444 }
1449 ptmpuserbuffer = (uint8_t *)ver_addr; 1445 ptmpuserbuffer = ver_addr;
1450 user_len = pcmdmessagefld->cmdmessage.Length; 1446 user_len = pcmdmessagefld->cmdmessage.Length;
1451 memcpy(ptmpuserbuffer, pcmdmessagefld->messagedatabuffer, user_len); 1447 memcpy(ptmpuserbuffer, pcmdmessagefld->messagedatabuffer, user_len);
1452 wqbuf_lastindex = acb->wqbuf_lastindex; 1448 wqbuf_lastindex = acb->wqbuf_lastindex;
@@ -1492,7 +1488,7 @@ static int arcmsr_iop_message_xfer(struct AdapterControlBlock *acb, \
1492 retvalue = ARCMSR_MESSAGE_FAIL; 1488 retvalue = ARCMSR_MESSAGE_FAIL;
1493 } 1489 }
1494 } 1490 }
1495 kfree(tmp); 1491 kfree(ver_addr);
1496 } 1492 }
1497 break; 1493 break;
1498 1494
diff --git a/drivers/scsi/arm/fas216.h b/drivers/scsi/arm/fas216.h
index 3e73e264972e..b65f4cf0eec9 100644
--- a/drivers/scsi/arm/fas216.h
+++ b/drivers/scsi/arm/fas216.h
@@ -313,7 +313,7 @@ typedef struct {
313 313
314 /* miscellaneous */ 314 /* miscellaneous */
315 int internal_done; /* flag to indicate request done */ 315 int internal_done; /* flag to indicate request done */
316 struct scsi_eh_save *ses; /* holds request sense restore info */ 316 struct scsi_eh_save ses; /* holds request sense restore info */
317 unsigned long magic_end; 317 unsigned long magic_end;
318} FAS216_Info; 318} FAS216_Info;
319 319
diff --git a/drivers/scsi/gdth_proc.c b/drivers/scsi/gdth_proc.c
index de5773443c62..ce0228e26aec 100644
--- a/drivers/scsi/gdth_proc.c
+++ b/drivers/scsi/gdth_proc.c
@@ -694,15 +694,13 @@ static void gdth_ioctl_free(gdth_ha_str *ha, int size, char *buf, ulong64 paddr)
694{ 694{
695 ulong flags; 695 ulong flags;
696 696
697 spin_lock_irqsave(&ha->smp_lock, flags);
698
699 if (buf == ha->pscratch) { 697 if (buf == ha->pscratch) {
698 spin_lock_irqsave(&ha->smp_lock, flags);
700 ha->scratch_busy = FALSE; 699 ha->scratch_busy = FALSE;
700 spin_unlock_irqrestore(&ha->smp_lock, flags);
701 } else { 701 } else {
702 pci_free_consistent(ha->pdev, size, buf, paddr); 702 pci_free_consistent(ha->pdev, size, buf, paddr);
703 } 703 }
704
705 spin_unlock_irqrestore(&ha->smp_lock, flags);
706} 704}
707 705
708#ifdef GDTH_IOCTL_PROC 706#ifdef GDTH_IOCTL_PROC
diff --git a/drivers/scsi/ipr.c b/drivers/scsi/ipr.c
index 2074701f7e76..c72014a3e7d4 100644
--- a/drivers/scsi/ipr.c
+++ b/drivers/scsi/ipr.c
@@ -5140,7 +5140,7 @@ static void ipr_build_ata_ioadl(struct ipr_cmnd *ipr_cmd,
5140 struct ipr_ioarcb *ioarcb = &ipr_cmd->ioarcb; 5140 struct ipr_ioarcb *ioarcb = &ipr_cmd->ioarcb;
5141 struct ipr_ioadl_desc *ioadl = ipr_cmd->ioadl; 5141 struct ipr_ioadl_desc *ioadl = ipr_cmd->ioadl;
5142 struct ipr_ioadl_desc *last_ioadl = NULL; 5142 struct ipr_ioadl_desc *last_ioadl = NULL;
5143 int len = qc->nbytes + qc->pad_len; 5143 int len = qc->nbytes;
5144 struct scatterlist *sg; 5144 struct scatterlist *sg;
5145 unsigned int si; 5145 unsigned int si;
5146 5146
@@ -5206,7 +5206,7 @@ static unsigned int ipr_qc_issue(struct ata_queued_cmd *qc)
5206 ioarcb->cmd_pkt.request_type = IPR_RQTYPE_ATA_PASSTHRU; 5206 ioarcb->cmd_pkt.request_type = IPR_RQTYPE_ATA_PASSTHRU;
5207 ioarcb->cmd_pkt.flags_hi |= IPR_FLAGS_HI_NO_LINK_DESC; 5207 ioarcb->cmd_pkt.flags_hi |= IPR_FLAGS_HI_NO_LINK_DESC;
5208 ioarcb->cmd_pkt.flags_hi |= IPR_FLAGS_HI_NO_ULEN_CHK; 5208 ioarcb->cmd_pkt.flags_hi |= IPR_FLAGS_HI_NO_ULEN_CHK;
5209 ipr_cmd->dma_use_sg = qc->pad_len ? qc->n_elem + 1 : qc->n_elem; 5209 ipr_cmd->dma_use_sg = qc->n_elem;
5210 5210
5211 ipr_build_ata_ioadl(ipr_cmd, qc); 5211 ipr_build_ata_ioadl(ipr_cmd, qc);
5212 regs->flags |= IPR_ATA_FLAG_STATUS_ON_GOOD_COMPLETION; 5212 regs->flags |= IPR_ATA_FLAG_STATUS_ON_GOOD_COMPLETION;
diff --git a/drivers/scsi/ips.c b/drivers/scsi/ips.c
index bb152fb9fec7..7ed568f180ae 100644
--- a/drivers/scsi/ips.c
+++ b/drivers/scsi/ips.c
@@ -1576,7 +1576,7 @@ ips_make_passthru(ips_ha_t *ha, struct scsi_cmnd *SC, ips_scb_t *scb, int intr)
1576 METHOD_TRACE("ips_make_passthru", 1); 1576 METHOD_TRACE("ips_make_passthru", 1);
1577 1577
1578 scsi_for_each_sg(SC, sg, scsi_sg_count(SC), i) 1578 scsi_for_each_sg(SC, sg, scsi_sg_count(SC), i)
1579 length += sg[i].length; 1579 length += sg->length;
1580 1580
1581 if (length < sizeof (ips_passthru_t)) { 1581 if (length < sizeof (ips_passthru_t)) {
1582 /* wrong size */ 1582 /* wrong size */
diff --git a/drivers/scsi/libsas/sas_ata.c b/drivers/scsi/libsas/sas_ata.c
index 0996f866f14c..7cd05b599a12 100644
--- a/drivers/scsi/libsas/sas_ata.c
+++ b/drivers/scsi/libsas/sas_ata.c
@@ -178,8 +178,8 @@ static unsigned int sas_ata_qc_issue(struct ata_queued_cmd *qc)
178 task->uldd_task = qc; 178 task->uldd_task = qc;
179 if (ata_is_atapi(qc->tf.protocol)) { 179 if (ata_is_atapi(qc->tf.protocol)) {
180 memcpy(task->ata_task.atapi_packet, qc->cdb, qc->dev->cdb_len); 180 memcpy(task->ata_task.atapi_packet, qc->cdb, qc->dev->cdb_len);
181 task->total_xfer_len = qc->nbytes + qc->pad_len; 181 task->total_xfer_len = qc->nbytes;
182 task->num_scatter = qc->pad_len ? qc->n_elem + 1 : qc->n_elem; 182 task->num_scatter = qc->n_elem;
183 } else { 183 } else {
184 for_each_sg(qc->sg, sg, qc->n_elem, si) 184 for_each_sg(qc->sg, sg, qc->n_elem, si)
185 xfer += sg->length; 185 xfer += sg->length;
diff --git a/drivers/scsi/libsas/sas_scsi_host.c b/drivers/scsi/libsas/sas_scsi_host.c
index f869fba86807..704ea06a6e50 100644
--- a/drivers/scsi/libsas/sas_scsi_host.c
+++ b/drivers/scsi/libsas/sas_scsi_host.c
@@ -51,10 +51,14 @@ static void sas_scsi_task_done(struct sas_task *task)
51{ 51{
52 struct task_status_struct *ts = &task->task_status; 52 struct task_status_struct *ts = &task->task_status;
53 struct scsi_cmnd *sc = task->uldd_task; 53 struct scsi_cmnd *sc = task->uldd_task;
54 struct sas_ha_struct *sas_ha = SHOST_TO_SAS_HA(sc->device->host);
55 unsigned ts_flags = task->task_state_flags;
56 int hs = 0, stat = 0; 54 int hs = 0, stat = 0;
57 55
56 if (unlikely(task->task_state_flags & SAS_TASK_STATE_ABORTED)) {
57 /* Aborted tasks will be completed by the error handler */
58 SAS_DPRINTK("task done but aborted\n");
59 return;
60 }
61
58 if (unlikely(!sc)) { 62 if (unlikely(!sc)) {
59 SAS_DPRINTK("task_done called with non existing SCSI cmnd!\n"); 63 SAS_DPRINTK("task_done called with non existing SCSI cmnd!\n");
60 list_del_init(&task->list); 64 list_del_init(&task->list);
@@ -120,11 +124,7 @@ static void sas_scsi_task_done(struct sas_task *task)
120 sc->result = (hs << 16) | stat; 124 sc->result = (hs << 16) | stat;
121 list_del_init(&task->list); 125 list_del_init(&task->list);
122 sas_free_task(task); 126 sas_free_task(task);
123 /* This is very ugly but this is how SCSI Core works. */ 127 sc->scsi_done(sc);
124 if (ts_flags & SAS_TASK_STATE_ABORTED)
125 scsi_eh_finish_cmd(sc, &sas_ha->eh_done_q);
126 else
127 sc->scsi_done(sc);
128} 128}
129 129
130static enum task_attribute sas_scsi_get_task_attr(struct scsi_cmnd *cmd) 130static enum task_attribute sas_scsi_get_task_attr(struct scsi_cmnd *cmd)
@@ -255,13 +255,34 @@ out:
255 return res; 255 return res;
256} 256}
257 257
258static void sas_eh_finish_cmd(struct scsi_cmnd *cmd)
259{
260 struct sas_task *task = TO_SAS_TASK(cmd);
261 struct sas_ha_struct *sas_ha = SHOST_TO_SAS_HA(cmd->device->host);
262
263 /* remove the aborted task flag to allow the task to be
264 * completed now. At this point, we only get called following
265 * an actual abort of the task, so we should be guaranteed not
266 * to be racing with any completions from the LLD (hence we
267 * don't need the task state lock to clear the flag) */
268 task->task_state_flags &= ~SAS_TASK_STATE_ABORTED;
269 /* Now call task_done. However, task will be free'd after
270 * this */
271 task->task_done(task);
272 /* now finish the command and move it on to the error
273 * handler done list, this also takes it off the
274 * error handler pending list */
275 scsi_eh_finish_cmd(cmd, &sas_ha->eh_done_q);
276}
277
258static void sas_scsi_clear_queue_lu(struct list_head *error_q, struct scsi_cmnd *my_cmd) 278static void sas_scsi_clear_queue_lu(struct list_head *error_q, struct scsi_cmnd *my_cmd)
259{ 279{
260 struct scsi_cmnd *cmd, *n; 280 struct scsi_cmnd *cmd, *n;
261 281
262 list_for_each_entry_safe(cmd, n, error_q, eh_entry) { 282 list_for_each_entry_safe(cmd, n, error_q, eh_entry) {
263 if (cmd == my_cmd) 283 if (cmd->device->sdev_target == my_cmd->device->sdev_target &&
264 list_del_init(&cmd->eh_entry); 284 cmd->device->lun == my_cmd->device->lun)
285 sas_eh_finish_cmd(cmd);
265 } 286 }
266} 287}
267 288
@@ -274,7 +295,7 @@ static void sas_scsi_clear_queue_I_T(struct list_head *error_q,
274 struct domain_device *x = cmd_to_domain_dev(cmd); 295 struct domain_device *x = cmd_to_domain_dev(cmd);
275 296
276 if (x == dev) 297 if (x == dev)
277 list_del_init(&cmd->eh_entry); 298 sas_eh_finish_cmd(cmd);
278 } 299 }
279} 300}
280 301
@@ -288,7 +309,7 @@ static void sas_scsi_clear_queue_port(struct list_head *error_q,
288 struct asd_sas_port *x = dev->port; 309 struct asd_sas_port *x = dev->port;
289 310
290 if (x == port) 311 if (x == port)
291 list_del_init(&cmd->eh_entry); 312 sas_eh_finish_cmd(cmd);
292 } 313 }
293} 314}
294 315
@@ -528,14 +549,14 @@ Again:
528 case TASK_IS_DONE: 549 case TASK_IS_DONE:
529 SAS_DPRINTK("%s: task 0x%p is done\n", __FUNCTION__, 550 SAS_DPRINTK("%s: task 0x%p is done\n", __FUNCTION__,
530 task); 551 task);
531 task->task_done(task); 552 sas_eh_finish_cmd(cmd);
532 if (need_reset) 553 if (need_reset)
533 try_to_reset_cmd_device(shost, cmd); 554 try_to_reset_cmd_device(shost, cmd);
534 continue; 555 continue;
535 case TASK_IS_ABORTED: 556 case TASK_IS_ABORTED:
536 SAS_DPRINTK("%s: task 0x%p is aborted\n", 557 SAS_DPRINTK("%s: task 0x%p is aborted\n",
537 __FUNCTION__, task); 558 __FUNCTION__, task);
538 task->task_done(task); 559 sas_eh_finish_cmd(cmd);
539 if (need_reset) 560 if (need_reset)
540 try_to_reset_cmd_device(shost, cmd); 561 try_to_reset_cmd_device(shost, cmd);
541 continue; 562 continue;
@@ -547,7 +568,7 @@ Again:
547 "recovered\n", 568 "recovered\n",
548 SAS_ADDR(task->dev), 569 SAS_ADDR(task->dev),
549 cmd->device->lun); 570 cmd->device->lun);
550 task->task_done(task); 571 sas_eh_finish_cmd(cmd);
551 if (need_reset) 572 if (need_reset)
552 try_to_reset_cmd_device(shost, cmd); 573 try_to_reset_cmd_device(shost, cmd);
553 sas_scsi_clear_queue_lu(work_q, cmd); 574 sas_scsi_clear_queue_lu(work_q, cmd);
@@ -562,7 +583,7 @@ Again:
562 if (tmf_resp == TMF_RESP_FUNC_COMPLETE) { 583 if (tmf_resp == TMF_RESP_FUNC_COMPLETE) {
563 SAS_DPRINTK("I_T %016llx recovered\n", 584 SAS_DPRINTK("I_T %016llx recovered\n",
564 SAS_ADDR(task->dev->sas_addr)); 585 SAS_ADDR(task->dev->sas_addr));
565 task->task_done(task); 586 sas_eh_finish_cmd(cmd);
566 if (need_reset) 587 if (need_reset)
567 try_to_reset_cmd_device(shost, cmd); 588 try_to_reset_cmd_device(shost, cmd);
568 sas_scsi_clear_queue_I_T(work_q, task->dev); 589 sas_scsi_clear_queue_I_T(work_q, task->dev);
@@ -577,7 +598,7 @@ Again:
577 if (res == TMF_RESP_FUNC_COMPLETE) { 598 if (res == TMF_RESP_FUNC_COMPLETE) {
578 SAS_DPRINTK("clear nexus port:%d " 599 SAS_DPRINTK("clear nexus port:%d "
579 "succeeded\n", port->id); 600 "succeeded\n", port->id);
580 task->task_done(task); 601 sas_eh_finish_cmd(cmd);
581 if (need_reset) 602 if (need_reset)
582 try_to_reset_cmd_device(shost, cmd); 603 try_to_reset_cmd_device(shost, cmd);
583 sas_scsi_clear_queue_port(work_q, 604 sas_scsi_clear_queue_port(work_q,
@@ -591,10 +612,10 @@ Again:
591 if (res == TMF_RESP_FUNC_COMPLETE) { 612 if (res == TMF_RESP_FUNC_COMPLETE) {
592 SAS_DPRINTK("clear nexus ha " 613 SAS_DPRINTK("clear nexus ha "
593 "succeeded\n"); 614 "succeeded\n");
594 task->task_done(task); 615 sas_eh_finish_cmd(cmd);
595 if (need_reset) 616 if (need_reset)
596 try_to_reset_cmd_device(shost, cmd); 617 try_to_reset_cmd_device(shost, cmd);
597 goto out; 618 goto clear_q;
598 } 619 }
599 } 620 }
600 /* If we are here -- this means that no amount 621 /* If we are here -- this means that no amount
@@ -606,21 +627,18 @@ Again:
606 SAS_ADDR(task->dev->sas_addr), 627 SAS_ADDR(task->dev->sas_addr),
607 cmd->device->lun); 628 cmd->device->lun);
608 629
609 task->task_done(task); 630 sas_eh_finish_cmd(cmd);
610 if (need_reset) 631 if (need_reset)
611 try_to_reset_cmd_device(shost, cmd); 632 try_to_reset_cmd_device(shost, cmd);
612 goto clear_q; 633 goto clear_q;
613 } 634 }
614 } 635 }
615out:
616 return list_empty(work_q); 636 return list_empty(work_q);
617clear_q: 637clear_q:
618 SAS_DPRINTK("--- Exit %s -- clear_q\n", __FUNCTION__); 638 SAS_DPRINTK("--- Exit %s -- clear_q\n", __FUNCTION__);
619 list_for_each_entry_safe(cmd, n, work_q, eh_entry) { 639 list_for_each_entry_safe(cmd, n, work_q, eh_entry)
620 struct sas_task *task = TO_SAS_TASK(cmd); 640 sas_eh_finish_cmd(cmd);
621 list_del_init(&cmd->eh_entry); 641
622 task->task_done(task);
623 }
624 return list_empty(work_q); 642 return list_empty(work_q);
625} 643}
626 644
diff --git a/drivers/scsi/lpfc/lpfc_crtn.h b/drivers/scsi/lpfc/lpfc_crtn.h
index 848d97744b4d..0819f5f39de5 100644
--- a/drivers/scsi/lpfc/lpfc_crtn.h
+++ b/drivers/scsi/lpfc/lpfc_crtn.h
@@ -55,7 +55,6 @@ void lpfc_mbx_cmpl_ns_reg_login(struct lpfc_hba *, LPFC_MBOXQ_t *);
55void lpfc_mbx_cmpl_fdmi_reg_login(struct lpfc_hba *, LPFC_MBOXQ_t *); 55void lpfc_mbx_cmpl_fdmi_reg_login(struct lpfc_hba *, LPFC_MBOXQ_t *);
56void lpfc_enqueue_node(struct lpfc_vport *, struct lpfc_nodelist *); 56void lpfc_enqueue_node(struct lpfc_vport *, struct lpfc_nodelist *);
57void lpfc_dequeue_node(struct lpfc_vport *, struct lpfc_nodelist *); 57void lpfc_dequeue_node(struct lpfc_vport *, struct lpfc_nodelist *);
58void lpfc_disable_node(struct lpfc_vport *, struct lpfc_nodelist *);
59struct lpfc_nodelist *lpfc_enable_node(struct lpfc_vport *, 58struct lpfc_nodelist *lpfc_enable_node(struct lpfc_vport *,
60 struct lpfc_nodelist *, int); 59 struct lpfc_nodelist *, int);
61void lpfc_nlp_set_state(struct lpfc_vport *, struct lpfc_nodelist *, int); 60void lpfc_nlp_set_state(struct lpfc_vport *, struct lpfc_nodelist *, int);
diff --git a/drivers/scsi/lpfc/lpfc_hbadisc.c b/drivers/scsi/lpfc/lpfc_hbadisc.c
index bd572d6b60af..976653440fba 100644
--- a/drivers/scsi/lpfc/lpfc_hbadisc.c
+++ b/drivers/scsi/lpfc/lpfc_hbadisc.c
@@ -1694,7 +1694,7 @@ lpfc_dequeue_node(struct lpfc_vport *vport, struct lpfc_nodelist *ndlp)
1694 NLP_STE_UNUSED_NODE); 1694 NLP_STE_UNUSED_NODE);
1695} 1695}
1696 1696
1697void 1697static void
1698lpfc_disable_node(struct lpfc_vport *vport, struct lpfc_nodelist *ndlp) 1698lpfc_disable_node(struct lpfc_vport *vport, struct lpfc_nodelist *ndlp)
1699{ 1699{
1700 if ((ndlp->nlp_flag & NLP_DELAY_TMO) != 0) 1700 if ((ndlp->nlp_flag & NLP_DELAY_TMO) != 0)
diff --git a/drivers/scsi/lpfc/lpfc_sli.c b/drivers/scsi/lpfc/lpfc_sli.c
index f53206411cd8..fc0d9501aba6 100644
--- a/drivers/scsi/lpfc/lpfc_sli.c
+++ b/drivers/scsi/lpfc/lpfc_sli.c
@@ -648,28 +648,24 @@ lpfc_sli_hbqbuf_fill_hbqs(struct lpfc_hba *phba, uint32_t hbqno, uint32_t count)
648 unsigned long flags; 648 unsigned long flags;
649 struct hbq_dmabuf *hbq_buffer; 649 struct hbq_dmabuf *hbq_buffer;
650 650
651 if (!phba->hbqs[hbqno].hbq_alloc_buffer) { 651 if (!phba->hbqs[hbqno].hbq_alloc_buffer)
652 return 0; 652 return 0;
653 }
654 653
655 start = phba->hbqs[hbqno].buffer_count; 654 start = phba->hbqs[hbqno].buffer_count;
656 end = count + start; 655 end = count + start;
657 if (end > lpfc_hbq_defs[hbqno]->entry_count) { 656 if (end > lpfc_hbq_defs[hbqno]->entry_count)
658 end = lpfc_hbq_defs[hbqno]->entry_count; 657 end = lpfc_hbq_defs[hbqno]->entry_count;
659 }
660 658
661 /* Check whether HBQ is still in use */ 659 /* Check whether HBQ is still in use */
662 spin_lock_irqsave(&phba->hbalock, flags); 660 spin_lock_irqsave(&phba->hbalock, flags);
663 if (!phba->hbq_in_use) { 661 if (!phba->hbq_in_use)
664 spin_unlock_irqrestore(&phba->hbalock, flags); 662 goto out;
665 return 0;
666 }
667 663
668 /* Populate HBQ entries */ 664 /* Populate HBQ entries */
669 for (i = start; i < end; i++) { 665 for (i = start; i < end; i++) {
670 hbq_buffer = (phba->hbqs[hbqno].hbq_alloc_buffer)(phba); 666 hbq_buffer = (phba->hbqs[hbqno].hbq_alloc_buffer)(phba);
671 if (!hbq_buffer) 667 if (!hbq_buffer)
672 return 1; 668 goto err;
673 hbq_buffer->tag = (i | (hbqno << 16)); 669 hbq_buffer->tag = (i | (hbqno << 16));
674 if (lpfc_sli_hbq_to_firmware(phba, hbqno, hbq_buffer)) 670 if (lpfc_sli_hbq_to_firmware(phba, hbqno, hbq_buffer))
675 phba->hbqs[hbqno].buffer_count++; 671 phba->hbqs[hbqno].buffer_count++;
@@ -677,8 +673,12 @@ lpfc_sli_hbqbuf_fill_hbqs(struct lpfc_hba *phba, uint32_t hbqno, uint32_t count)
677 (phba->hbqs[hbqno].hbq_free_buffer)(phba, hbq_buffer); 673 (phba->hbqs[hbqno].hbq_free_buffer)(phba, hbq_buffer);
678 } 674 }
679 675
676 out:
680 spin_unlock_irqrestore(&phba->hbalock, flags); 677 spin_unlock_irqrestore(&phba->hbalock, flags);
681 return 0; 678 return 0;
679 err:
680 spin_unlock_irqrestore(&phba->hbalock, flags);
681 return 1;
682} 682}
683 683
684int 684int
diff --git a/drivers/scsi/megaraid.c b/drivers/scsi/megaraid.c
index 4d59ae8491a4..b135a1ed4b2c 100644
--- a/drivers/scsi/megaraid.c
+++ b/drivers/scsi/megaraid.c
@@ -151,19 +151,19 @@ mega_setup_mailbox(adapter_t *adapter)
151 */ 151 */
152 if( adapter->flag & BOARD_IOMAP ) { 152 if( adapter->flag & BOARD_IOMAP ) {
153 153
154 outb_p(adapter->mbox_dma & 0xFF, 154 outb(adapter->mbox_dma & 0xFF,
155 adapter->host->io_port + MBOX_PORT0); 155 adapter->host->io_port + MBOX_PORT0);
156 156
157 outb_p((adapter->mbox_dma >> 8) & 0xFF, 157 outb((adapter->mbox_dma >> 8) & 0xFF,
158 adapter->host->io_port + MBOX_PORT1); 158 adapter->host->io_port + MBOX_PORT1);
159 159
160 outb_p((adapter->mbox_dma >> 16) & 0xFF, 160 outb((adapter->mbox_dma >> 16) & 0xFF,
161 adapter->host->io_port + MBOX_PORT2); 161 adapter->host->io_port + MBOX_PORT2);
162 162
163 outb_p((adapter->mbox_dma >> 24) & 0xFF, 163 outb((adapter->mbox_dma >> 24) & 0xFF,
164 adapter->host->io_port + MBOX_PORT3); 164 adapter->host->io_port + MBOX_PORT3);
165 165
166 outb_p(ENABLE_MBOX_BYTE, 166 outb(ENABLE_MBOX_BYTE,
167 adapter->host->io_port + ENABLE_MBOX_REGION); 167 adapter->host->io_port + ENABLE_MBOX_REGION);
168 168
169 irq_ack(adapter); 169 irq_ack(adapter);
diff --git a/drivers/scsi/mesh.c b/drivers/scsi/mesh.c
index 651d09b08f2a..fd63b06d9ef1 100644
--- a/drivers/scsi/mesh.c
+++ b/drivers/scsi/mesh.c
@@ -1759,6 +1759,7 @@ static int mesh_suspend(struct macio_dev *mdev, pm_message_t mesg)
1759 1759
1760 switch (mesg.event) { 1760 switch (mesg.event) {
1761 case PM_EVENT_SUSPEND: 1761 case PM_EVENT_SUSPEND:
1762 case PM_EVENT_HIBERNATE:
1762 case PM_EVENT_FREEZE: 1763 case PM_EVENT_FREEZE:
1763 break; 1764 break;
1764 default: 1765 default:
diff --git a/drivers/scsi/mvsas.c b/drivers/scsi/mvsas.c
new file mode 100644
index 000000000000..d4a6ac3c9c47
--- /dev/null
+++ b/drivers/scsi/mvsas.c
@@ -0,0 +1,2970 @@
1/*
2 mvsas.c - Marvell 88SE6440 SAS/SATA support
3
4 Copyright 2007 Red Hat, Inc.
5 Copyright 2008 Marvell. <kewei@marvell.com>
6
7 This program is free software; you can redistribute it and/or
8 modify it under the terms of the GNU General Public License as
9 published by the Free Software Foundation; either version 2,
10 or (at your option) any later version.
11
12 This program is distributed in the hope that it will be useful,
13 but WITHOUT ANY WARRANTY; without even the implied warranty
14 of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
15 See the GNU General Public License for more details.
16
17 You should have received a copy of the GNU General Public
18 License along with this program; see the file COPYING. If not,
19 write to the Free Software Foundation, 675 Mass Ave, Cambridge,
20 MA 02139, USA.
21
22 ---------------------------------------------------------------
23
24 Random notes:
25 * hardware supports controlling the endian-ness of data
26 structures. this permits elimination of all the le32_to_cpu()
27 and cpu_to_le32() conversions.
28
29 */
30
31#include <linux/kernel.h>
32#include <linux/module.h>
33#include <linux/pci.h>
34#include <linux/interrupt.h>
35#include <linux/spinlock.h>
36#include <linux/delay.h>
37#include <linux/dma-mapping.h>
38#include <linux/ctype.h>
39#include <scsi/libsas.h>
40#include <asm/io.h>
41
42#define DRV_NAME "mvsas"
43#define DRV_VERSION "0.5"
44#define _MV_DUMP 0
45#define MVS_DISABLE_NVRAM
46#define MVS_DISABLE_MSI
47
48#define mr32(reg) readl(regs + MVS_##reg)
49#define mw32(reg,val) writel((val), regs + MVS_##reg)
50#define mw32_f(reg,val) do { \
51 writel((val), regs + MVS_##reg); \
52 readl(regs + MVS_##reg); \
53 } while (0)
54
55#define MVS_ID_NOT_MAPPED 0xff
56#define MVS_CHIP_SLOT_SZ (1U << mvi->chip->slot_width)
57
58/* offset for D2H FIS in the Received FIS List Structure */
59#define SATA_RECEIVED_D2H_FIS(reg_set) \
60 ((void *) mvi->rx_fis + 0x400 + 0x100 * reg_set + 0x40)
61#define SATA_RECEIVED_PIO_FIS(reg_set) \
62 ((void *) mvi->rx_fis + 0x400 + 0x100 * reg_set + 0x20)
63#define UNASSOC_D2H_FIS(id) \
64 ((void *) mvi->rx_fis + 0x100 * id)
65
66#define for_each_phy(__lseq_mask, __mc, __lseq, __rest) \
67 for ((__mc) = (__lseq_mask), (__lseq) = 0; \
68 (__mc) != 0 && __rest; \
69 (++__lseq), (__mc) >>= 1)
70
71/* driver compile-time configuration */
72enum driver_configuration {
73 MVS_TX_RING_SZ = 1024, /* TX ring size (12-bit) */
74 MVS_RX_RING_SZ = 1024, /* RX ring size (12-bit) */
75 /* software requires power-of-2
76 ring size */
77
78 MVS_SLOTS = 512, /* command slots */
79 MVS_SLOT_BUF_SZ = 8192, /* cmd tbl + IU + status + PRD */
80 MVS_SSP_CMD_SZ = 64, /* SSP command table buffer size */
81 MVS_ATA_CMD_SZ = 96, /* SATA command table buffer size */
82 MVS_OAF_SZ = 64, /* Open address frame buffer size */
83
84 MVS_RX_FIS_COUNT = 17, /* Optional rx'd FISs (max 17) */
85
86 MVS_QUEUE_SIZE = 30, /* Support Queue depth */
87};
88
89/* unchangeable hardware details */
90enum hardware_details {
91 MVS_MAX_PHYS = 8, /* max. possible phys */
92 MVS_MAX_PORTS = 8, /* max. possible ports */
93 MVS_RX_FISL_SZ = 0x400 + (MVS_RX_FIS_COUNT * 0x100),
94};
95
96/* peripheral registers (BAR2) */
97enum peripheral_registers {
98 SPI_CTL = 0x10, /* EEPROM control */
99 SPI_CMD = 0x14, /* EEPROM command */
100 SPI_DATA = 0x18, /* EEPROM data */
101};
102
103enum peripheral_register_bits {
104 TWSI_RDY = (1U << 7), /* EEPROM interface ready */
105 TWSI_RD = (1U << 4), /* EEPROM read access */
106
107 SPI_ADDR_MASK = 0x3ffff, /* bits 17:0 */
108};
109
110/* enhanced mode registers (BAR4) */
111enum hw_registers {
112 MVS_GBL_CTL = 0x04, /* global control */
113 MVS_GBL_INT_STAT = 0x08, /* global irq status */
114 MVS_GBL_PI = 0x0C, /* ports implemented bitmask */
115 MVS_GBL_PORT_TYPE = 0xa0, /* port type */
116
117 MVS_CTL = 0x100, /* SAS/SATA port configuration */
118 MVS_PCS = 0x104, /* SAS/SATA port control/status */
119 MVS_CMD_LIST_LO = 0x108, /* cmd list addr */
120 MVS_CMD_LIST_HI = 0x10C,
121 MVS_RX_FIS_LO = 0x110, /* RX FIS list addr */
122 MVS_RX_FIS_HI = 0x114,
123
124 MVS_TX_CFG = 0x120, /* TX configuration */
125 MVS_TX_LO = 0x124, /* TX (delivery) ring addr */
126 MVS_TX_HI = 0x128,
127
128 MVS_TX_PROD_IDX = 0x12C, /* TX producer pointer */
129 MVS_TX_CONS_IDX = 0x130, /* TX consumer pointer (RO) */
130 MVS_RX_CFG = 0x134, /* RX configuration */
131 MVS_RX_LO = 0x138, /* RX (completion) ring addr */
132 MVS_RX_HI = 0x13C,
133 MVS_RX_CONS_IDX = 0x140, /* RX consumer pointer (RO) */
134
135 MVS_INT_COAL = 0x148, /* Int coalescing config */
136 MVS_INT_COAL_TMOUT = 0x14C, /* Int coalescing timeout */
137 MVS_INT_STAT = 0x150, /* Central int status */
138 MVS_INT_MASK = 0x154, /* Central int enable */
139 MVS_INT_STAT_SRS = 0x158, /* SATA register set status */
140 MVS_INT_MASK_SRS = 0x15C,
141
142 /* ports 1-3 follow after this */
143 MVS_P0_INT_STAT = 0x160, /* port0 interrupt status */
144 MVS_P0_INT_MASK = 0x164, /* port0 interrupt mask */
145 MVS_P4_INT_STAT = 0x200, /* Port 4 interrupt status */
146 MVS_P4_INT_MASK = 0x204, /* Port 4 interrupt enable mask */
147
148 /* ports 1-3 follow after this */
149 MVS_P0_SER_CTLSTAT = 0x180, /* port0 serial control/status */
150 MVS_P4_SER_CTLSTAT = 0x220, /* port4 serial control/status */
151
152 MVS_CMD_ADDR = 0x1B8, /* Command register port (addr) */
153 MVS_CMD_DATA = 0x1BC, /* Command register port (data) */
154
155 /* ports 1-3 follow after this */
156 MVS_P0_CFG_ADDR = 0x1C0, /* port0 phy register address */
157 MVS_P0_CFG_DATA = 0x1C4, /* port0 phy register data */
158 MVS_P4_CFG_ADDR = 0x230, /* Port 4 config address */
159 MVS_P4_CFG_DATA = 0x234, /* Port 4 config data */
160
161 /* ports 1-3 follow after this */
162 MVS_P0_VSR_ADDR = 0x1E0, /* port0 VSR address */
163 MVS_P0_VSR_DATA = 0x1E4, /* port0 VSR data */
164 MVS_P4_VSR_ADDR = 0x250, /* port 4 VSR addr */
165 MVS_P4_VSR_DATA = 0x254, /* port 4 VSR data */
166};
167
168enum hw_register_bits {
169 /* MVS_GBL_CTL */
170 INT_EN = (1U << 1), /* Global int enable */
171 HBA_RST = (1U << 0), /* HBA reset */
172
173 /* MVS_GBL_INT_STAT */
174 INT_XOR = (1U << 4), /* XOR engine event */
175 INT_SAS_SATA = (1U << 0), /* SAS/SATA event */
176
177 /* MVS_GBL_PORT_TYPE */ /* shl for ports 1-3 */
178 SATA_TARGET = (1U << 16), /* port0 SATA target enable */
179 MODE_AUTO_DET_PORT7 = (1U << 15), /* port0 SAS/SATA autodetect */
180 MODE_AUTO_DET_PORT6 = (1U << 14),
181 MODE_AUTO_DET_PORT5 = (1U << 13),
182 MODE_AUTO_DET_PORT4 = (1U << 12),
183 MODE_AUTO_DET_PORT3 = (1U << 11),
184 MODE_AUTO_DET_PORT2 = (1U << 10),
185 MODE_AUTO_DET_PORT1 = (1U << 9),
186 MODE_AUTO_DET_PORT0 = (1U << 8),
187 MODE_AUTO_DET_EN = MODE_AUTO_DET_PORT0 | MODE_AUTO_DET_PORT1 |
188 MODE_AUTO_DET_PORT2 | MODE_AUTO_DET_PORT3 |
189 MODE_AUTO_DET_PORT4 | MODE_AUTO_DET_PORT5 |
190 MODE_AUTO_DET_PORT6 | MODE_AUTO_DET_PORT7,
191 MODE_SAS_PORT7_MASK = (1U << 7), /* port0 SAS(1), SATA(0) mode */
192 MODE_SAS_PORT6_MASK = (1U << 6),
193 MODE_SAS_PORT5_MASK = (1U << 5),
194 MODE_SAS_PORT4_MASK = (1U << 4),
195 MODE_SAS_PORT3_MASK = (1U << 3),
196 MODE_SAS_PORT2_MASK = (1U << 2),
197 MODE_SAS_PORT1_MASK = (1U << 1),
198 MODE_SAS_PORT0_MASK = (1U << 0),
199 MODE_SAS_SATA = MODE_SAS_PORT0_MASK | MODE_SAS_PORT1_MASK |
200 MODE_SAS_PORT2_MASK | MODE_SAS_PORT3_MASK |
201 MODE_SAS_PORT4_MASK | MODE_SAS_PORT5_MASK |
202 MODE_SAS_PORT6_MASK | MODE_SAS_PORT7_MASK,
203
204 /* SAS_MODE value may be
205 * dictated (in hw) by values
206 * of SATA_TARGET & AUTO_DET
207 */
208
209 /* MVS_TX_CFG */
210 TX_EN = (1U << 16), /* Enable TX */
211 TX_RING_SZ_MASK = 0xfff, /* TX ring size, bits 11:0 */
212
213 /* MVS_RX_CFG */
214 RX_EN = (1U << 16), /* Enable RX */
215 RX_RING_SZ_MASK = 0xfff, /* RX ring size, bits 11:0 */
216
217 /* MVS_INT_COAL */
218 COAL_EN = (1U << 16), /* Enable int coalescing */
219
220 /* MVS_INT_STAT, MVS_INT_MASK */
221 CINT_I2C = (1U << 31), /* I2C event */
222 CINT_SW0 = (1U << 30), /* software event 0 */
223 CINT_SW1 = (1U << 29), /* software event 1 */
224 CINT_PRD_BC = (1U << 28), /* PRD BC err for read cmd */
225 CINT_DMA_PCIE = (1U << 27), /* DMA to PCIE timeout */
226 CINT_MEM = (1U << 26), /* int mem parity err */
227 CINT_I2C_SLAVE = (1U << 25), /* slave I2C event */
228 CINT_SRS = (1U << 3), /* SRS event */
229 CINT_CI_STOP = (1U << 1), /* cmd issue stopped */
230 CINT_DONE = (1U << 0), /* cmd completion */
231
232 /* shl for ports 1-3 */
233 CINT_PORT_STOPPED = (1U << 16), /* port0 stopped */
234 CINT_PORT = (1U << 8), /* port0 event */
235 CINT_PORT_MASK_OFFSET = 8,
236 CINT_PORT_MASK = (0xFF << CINT_PORT_MASK_OFFSET),
237
238 /* TX (delivery) ring bits */
239 TXQ_CMD_SHIFT = 29,
240 TXQ_CMD_SSP = 1, /* SSP protocol */
241 TXQ_CMD_SMP = 2, /* SMP protocol */
242 TXQ_CMD_STP = 3, /* STP/SATA protocol */
243 TXQ_CMD_SSP_FREE_LIST = 4, /* add to SSP targ free list */
244 TXQ_CMD_SLOT_RESET = 7, /* reset command slot */
245 TXQ_MODE_I = (1U << 28), /* mode: 0=target,1=initiator */
246 TXQ_PRIO_HI = (1U << 27), /* priority: 0=normal, 1=high */
247 TXQ_SRS_SHIFT = 20, /* SATA register set */
248 TXQ_SRS_MASK = 0x7f,
249 TXQ_PHY_SHIFT = 12, /* PHY bitmap */
250 TXQ_PHY_MASK = 0xff,
251 TXQ_SLOT_MASK = 0xfff, /* slot number */
252
253 /* RX (completion) ring bits */
254 RXQ_GOOD = (1U << 23), /* Response good */
255 RXQ_SLOT_RESET = (1U << 21), /* Slot reset complete */
256 RXQ_CMD_RX = (1U << 20), /* target cmd received */
257 RXQ_ATTN = (1U << 19), /* attention */
258 RXQ_RSP = (1U << 18), /* response frame xfer'd */
259 RXQ_ERR = (1U << 17), /* err info rec xfer'd */
260 RXQ_DONE = (1U << 16), /* cmd complete */
261 RXQ_SLOT_MASK = 0xfff, /* slot number */
262
263 /* mvs_cmd_hdr bits */
264 MCH_PRD_LEN_SHIFT = 16, /* 16-bit PRD table len */
265 MCH_SSP_FR_TYPE_SHIFT = 13, /* SSP frame type */
266
267 /* SSP initiator only */
268 MCH_SSP_FR_CMD = 0x0, /* COMMAND frame */
269
270 /* SSP initiator or target */
271 MCH_SSP_FR_TASK = 0x1, /* TASK frame */
272
273 /* SSP target only */
274 MCH_SSP_FR_XFER_RDY = 0x4, /* XFER_RDY frame */
275 MCH_SSP_FR_RESP = 0x5, /* RESPONSE frame */
276 MCH_SSP_FR_READ = 0x6, /* Read DATA frame(s) */
277 MCH_SSP_FR_READ_RESP = 0x7, /* ditto, plus RESPONSE */
278
279 MCH_PASSTHRU = (1U << 12), /* pass-through (SSP) */
280 MCH_FBURST = (1U << 11), /* first burst (SSP) */
281 MCH_CHK_LEN = (1U << 10), /* chk xfer len (SSP) */
282 MCH_RETRY = (1U << 9), /* tport layer retry (SSP) */
283 MCH_PROTECTION = (1U << 8), /* protection info rec (SSP) */
284 MCH_RESET = (1U << 7), /* Reset (STP/SATA) */
285 MCH_FPDMA = (1U << 6), /* First party DMA (STP/SATA) */
286 MCH_ATAPI = (1U << 5), /* ATAPI (STP/SATA) */
287 MCH_BIST = (1U << 4), /* BIST activate (STP/SATA) */
288 MCH_PMP_MASK = 0xf, /* PMP from cmd FIS (STP/SATA)*/
289
290 CCTL_RST = (1U << 5), /* port logic reset */
291
292 /* 0(LSB first), 1(MSB first) */
293 CCTL_ENDIAN_DATA = (1U << 3), /* PRD data */
294 CCTL_ENDIAN_RSP = (1U << 2), /* response frame */
295 CCTL_ENDIAN_OPEN = (1U << 1), /* open address frame */
296 CCTL_ENDIAN_CMD = (1U << 0), /* command table */
297
298 /* MVS_Px_SER_CTLSTAT (per-phy control) */
299 PHY_SSP_RST = (1U << 3), /* reset SSP link layer */
300 PHY_BCAST_CHG = (1U << 2), /* broadcast(change) notif */
301 PHY_RST_HARD = (1U << 1), /* hard reset + phy reset */
302 PHY_RST = (1U << 0), /* phy reset */
303 PHY_MIN_SPP_PHYS_LINK_RATE_MASK = (0xF << 8),
304 PHY_MAX_SPP_PHYS_LINK_RATE_MASK = (0xF << 12),
305 PHY_NEG_SPP_PHYS_LINK_RATE_MASK_OFFSET = (16),
306 PHY_NEG_SPP_PHYS_LINK_RATE_MASK =
307 (0xF << PHY_NEG_SPP_PHYS_LINK_RATE_MASK_OFFSET),
308 PHY_READY_MASK = (1U << 20),
309
310 /* MVS_Px_INT_STAT, MVS_Px_INT_MASK (per-phy events) */
311 PHYEV_DEC_ERR = (1U << 24), /* Phy Decoding Error */
312 PHYEV_UNASSOC_FIS = (1U << 19), /* unassociated FIS rx'd */
313 PHYEV_AN = (1U << 18), /* SATA async notification */
314 PHYEV_BIST_ACT = (1U << 17), /* BIST activate FIS */
315 PHYEV_SIG_FIS = (1U << 16), /* signature FIS */
316 PHYEV_POOF = (1U << 12), /* phy ready from 1 -> 0 */
317 PHYEV_IU_BIG = (1U << 11), /* IU too long err */
318 PHYEV_IU_SMALL = (1U << 10), /* IU too short err */
319 PHYEV_UNK_TAG = (1U << 9), /* unknown tag */
320 PHYEV_BROAD_CH = (1U << 8), /* broadcast(CHANGE) */
321 PHYEV_COMWAKE = (1U << 7), /* COMWAKE rx'd */
322 PHYEV_PORT_SEL = (1U << 6), /* port selector present */
323 PHYEV_HARD_RST = (1U << 5), /* hard reset rx'd */
324 PHYEV_ID_TMOUT = (1U << 4), /* identify timeout */
325 PHYEV_ID_FAIL = (1U << 3), /* identify failed */
326 PHYEV_ID_DONE = (1U << 2), /* identify done */
327 PHYEV_HARD_RST_DONE = (1U << 1), /* hard reset done */
328 PHYEV_RDY_CH = (1U << 0), /* phy ready changed state */
329
330 /* MVS_PCS */
331 PCS_EN_SATA_REG_SHIFT = (16), /* Enable SATA Register Set */
332 PCS_EN_PORT_XMT_SHIFT = (12), /* Enable Port Transmit */
333 PCS_EN_PORT_XMT_SHIFT2 = (8), /* For 6480 */
334 PCS_SATA_RETRY = (1U << 8), /* retry ctl FIS on R_ERR */
335 PCS_RSP_RX_EN = (1U << 7), /* raw response rx */
336 PCS_SELF_CLEAR = (1U << 5), /* self-clearing int mode */
337 PCS_FIS_RX_EN = (1U << 4), /* FIS rx enable */
338 PCS_CMD_STOP_ERR = (1U << 3), /* cmd stop-on-err enable */
339 PCS_CMD_RST = (1U << 1), /* reset cmd issue */
340 PCS_CMD_EN = (1U << 0), /* enable cmd issue */
341
342 /* Port n Attached Device Info */
343 PORT_DEV_SSP_TRGT = (1U << 19),
344 PORT_DEV_SMP_TRGT = (1U << 18),
345 PORT_DEV_STP_TRGT = (1U << 17),
346 PORT_DEV_SSP_INIT = (1U << 11),
347 PORT_DEV_SMP_INIT = (1U << 10),
348 PORT_DEV_STP_INIT = (1U << 9),
349 PORT_PHY_ID_MASK = (0xFFU << 24),
350 PORT_DEV_TRGT_MASK = (0x7U << 17),
351 PORT_DEV_INIT_MASK = (0x7U << 9),
352 PORT_DEV_TYPE_MASK = (0x7U << 0),
353
354 /* Port n PHY Status */
355 PHY_RDY = (1U << 2),
356 PHY_DW_SYNC = (1U << 1),
357 PHY_OOB_DTCTD = (1U << 0),
358
359 /* VSR */
360 /* PHYMODE 6 (CDB) */
361 PHY_MODE6_DTL_SPEED = (1U << 27),
362};
363
364enum mvs_info_flags {
365 MVF_MSI = (1U << 0), /* MSI is enabled */
366 MVF_PHY_PWR_FIX = (1U << 1), /* bug workaround */
367};
368
369enum sas_cmd_port_registers {
370 CMD_CMRST_OOB_DET = 0x100, /* COMRESET OOB detect register */
371 CMD_CMWK_OOB_DET = 0x104, /* COMWAKE OOB detect register */
372 CMD_CMSAS_OOB_DET = 0x108, /* COMSAS OOB detect register */
373 CMD_BRST_OOB_DET = 0x10c, /* burst OOB detect register */
374 CMD_OOB_SPACE = 0x110, /* OOB space control register */
375 CMD_OOB_BURST = 0x114, /* OOB burst control register */
376 CMD_PHY_TIMER = 0x118, /* PHY timer control register */
377 CMD_PHY_CONFIG0 = 0x11c, /* PHY config register 0 */
378 CMD_PHY_CONFIG1 = 0x120, /* PHY config register 1 */
379 CMD_SAS_CTL0 = 0x124, /* SAS control register 0 */
380 CMD_SAS_CTL1 = 0x128, /* SAS control register 1 */
381 CMD_SAS_CTL2 = 0x12c, /* SAS control register 2 */
382 CMD_SAS_CTL3 = 0x130, /* SAS control register 3 */
383 CMD_ID_TEST = 0x134, /* ID test register */
384 CMD_PL_TIMER = 0x138, /* PL timer register */
385 CMD_WD_TIMER = 0x13c, /* WD timer register */
386 CMD_PORT_SEL_COUNT = 0x140, /* port selector count register */
387 CMD_APP_MEM_CTL = 0x144, /* Application Memory Control */
388 CMD_XOR_MEM_CTL = 0x148, /* XOR Block Memory Control */
389 CMD_DMA_MEM_CTL = 0x14c, /* DMA Block Memory Control */
390 CMD_PORT_MEM_CTL0 = 0x150, /* Port Memory Control 0 */
391 CMD_PORT_MEM_CTL1 = 0x154, /* Port Memory Control 1 */
392 CMD_SATA_PORT_MEM_CTL0 = 0x158, /* SATA Port Memory Control 0 */
393 CMD_SATA_PORT_MEM_CTL1 = 0x15c, /* SATA Port Memory Control 1 */
394 CMD_XOR_MEM_BIST_CTL = 0x160, /* XOR Memory BIST Control */
395 CMD_XOR_MEM_BIST_STAT = 0x164, /* XOR Memroy BIST Status */
396 CMD_DMA_MEM_BIST_CTL = 0x168, /* DMA Memory BIST Control */
397 CMD_DMA_MEM_BIST_STAT = 0x16c, /* DMA Memory BIST Status */
398 CMD_PORT_MEM_BIST_CTL = 0x170, /* Port Memory BIST Control */
399 CMD_PORT_MEM_BIST_STAT0 = 0x174, /* Port Memory BIST Status 0 */
400 CMD_PORT_MEM_BIST_STAT1 = 0x178, /* Port Memory BIST Status 1 */
401 CMD_STP_MEM_BIST_CTL = 0x17c, /* STP Memory BIST Control */
402 CMD_STP_MEM_BIST_STAT0 = 0x180, /* STP Memory BIST Status 0 */
403 CMD_STP_MEM_BIST_STAT1 = 0x184, /* STP Memory BIST Status 1 */
404 CMD_RESET_COUNT = 0x188, /* Reset Count */
405 CMD_MONTR_DATA_SEL = 0x18C, /* Monitor Data/Select */
406 CMD_PLL_PHY_CONFIG = 0x190, /* PLL/PHY Configuration */
407 CMD_PHY_CTL = 0x194, /* PHY Control and Status */
408 CMD_PHY_TEST_COUNT0 = 0x198, /* Phy Test Count 0 */
409 CMD_PHY_TEST_COUNT1 = 0x19C, /* Phy Test Count 1 */
410 CMD_PHY_TEST_COUNT2 = 0x1A0, /* Phy Test Count 2 */
411 CMD_APP_ERR_CONFIG = 0x1A4, /* Application Error Configuration */
412 CMD_PND_FIFO_CTL0 = 0x1A8, /* Pending FIFO Control 0 */
413 CMD_HOST_CTL = 0x1AC, /* Host Control Status */
414 CMD_HOST_WR_DATA = 0x1B0, /* Host Write Data */
415 CMD_HOST_RD_DATA = 0x1B4, /* Host Read Data */
416 CMD_PHY_MODE_21 = 0x1B8, /* Phy Mode 21 */
417 CMD_SL_MODE0 = 0x1BC, /* SL Mode 0 */
418 CMD_SL_MODE1 = 0x1C0, /* SL Mode 1 */
419 CMD_PND_FIFO_CTL1 = 0x1C4, /* Pending FIFO Control 1 */
420};
421
422/* SAS/SATA configuration port registers, aka phy registers */
423enum sas_sata_config_port_regs {
424 PHYR_IDENTIFY = 0x00, /* info for IDENTIFY frame */
425 PHYR_ADDR_LO = 0x04, /* my SAS address (low) */
426 PHYR_ADDR_HI = 0x08, /* my SAS address (high) */
427 PHYR_ATT_DEV_INFO = 0x0C, /* attached device info */
428 PHYR_ATT_ADDR_LO = 0x10, /* attached dev SAS addr (low) */
429 PHYR_ATT_ADDR_HI = 0x14, /* attached dev SAS addr (high) */
430 PHYR_SATA_CTL = 0x18, /* SATA control */
431 PHYR_PHY_STAT = 0x1C, /* PHY status */
432 PHYR_SATA_SIG0 = 0x20, /*port SATA signature FIS(Byte 0-3) */
433 PHYR_SATA_SIG1 = 0x24, /*port SATA signature FIS(Byte 4-7) */
434 PHYR_SATA_SIG2 = 0x28, /*port SATA signature FIS(Byte 8-11) */
435 PHYR_SATA_SIG3 = 0x2c, /*port SATA signature FIS(Byte 12-15) */
436 PHYR_R_ERR_COUNT = 0x30, /* port R_ERR count register */
437 PHYR_CRC_ERR_COUNT = 0x34, /* port CRC error count register */
438 PHYR_WIDE_PORT = 0x38, /* wide port participating */
439 PHYR_CURRENT0 = 0x80, /* current connection info 0 */
440 PHYR_CURRENT1 = 0x84, /* current connection info 1 */
441 PHYR_CURRENT2 = 0x88, /* current connection info 2 */
442};
443
444/* SAS/SATA Vendor Specific Port Registers */
445enum sas_sata_vsp_regs {
446 VSR_PHY_STAT = 0x00, /* Phy Status */
447 VSR_PHY_MODE1 = 0x01, /* phy tx */
448 VSR_PHY_MODE2 = 0x02, /* tx scc */
449 VSR_PHY_MODE3 = 0x03, /* pll */
450 VSR_PHY_MODE4 = 0x04, /* VCO */
451 VSR_PHY_MODE5 = 0x05, /* Rx */
452 VSR_PHY_MODE6 = 0x06, /* CDR */
453 VSR_PHY_MODE7 = 0x07, /* Impedance */
454 VSR_PHY_MODE8 = 0x08, /* Voltage */
455 VSR_PHY_MODE9 = 0x09, /* Test */
456 VSR_PHY_MODE10 = 0x0A, /* Power */
457 VSR_PHY_MODE11 = 0x0B, /* Phy Mode */
458 VSR_PHY_VS0 = 0x0C, /* Vednor Specific 0 */
459 VSR_PHY_VS1 = 0x0D, /* Vednor Specific 1 */
460};
461
462enum pci_cfg_registers {
463 PCR_PHY_CTL = 0x40,
464 PCR_PHY_CTL2 = 0x90,
465 PCR_DEV_CTRL = 0xE8,
466};
467
468enum pci_cfg_register_bits {
469 PCTL_PWR_ON = (0xFU << 24),
470 PCTL_OFF = (0xFU << 12),
471 PRD_REQ_SIZE = (0x4000),
472 PRD_REQ_MASK = (0x00007000),
473};
474
475enum nvram_layout_offsets {
476 NVR_SIG = 0x00, /* 0xAA, 0x55 */
477 NVR_SAS_ADDR = 0x02, /* 8-byte SAS address */
478};
479
480enum chip_flavors {
481 chip_6320,
482 chip_6440,
483 chip_6480,
484};
485
486enum port_type {
487 PORT_TYPE_SAS = (1L << 1),
488 PORT_TYPE_SATA = (1L << 0),
489};
490
491/* Command Table Format */
492enum ct_format {
493 /* SSP */
494 SSP_F_H = 0x00,
495 SSP_F_IU = 0x18,
496 SSP_F_MAX = 0x4D,
497 /* STP */
498 STP_CMD_FIS = 0x00,
499 STP_ATAPI_CMD = 0x40,
500 STP_F_MAX = 0x10,
501 /* SMP */
502 SMP_F_T = 0x00,
503 SMP_F_DEP = 0x01,
504 SMP_F_MAX = 0x101,
505};
506
507enum status_buffer {
508 SB_EIR_OFF = 0x00, /* Error Information Record */
509 SB_RFB_OFF = 0x08, /* Response Frame Buffer */
510 SB_RFB_MAX = 0x400, /* RFB size*/
511};
512
513enum error_info_rec {
514 CMD_ISS_STPD = (1U << 31), /* Cmd Issue Stopped */
515};
516
517struct mvs_chip_info {
518 u32 n_phy;
519 u32 srs_sz;
520 u32 slot_width;
521};
522
523struct mvs_err_info {
524 __le32 flags;
525 __le32 flags2;
526};
527
528struct mvs_prd {
529 __le64 addr; /* 64-bit buffer address */
530 __le32 reserved;
531 __le32 len; /* 16-bit length */
532};
533
534struct mvs_cmd_hdr {
535 __le32 flags; /* PRD tbl len; SAS, SATA ctl */
536 __le32 lens; /* cmd, max resp frame len */
537 __le32 tags; /* targ port xfer tag; tag */
538 __le32 data_len; /* data xfer len */
539 __le64 cmd_tbl; /* command table address */
540 __le64 open_frame; /* open addr frame address */
541 __le64 status_buf; /* status buffer address */
542 __le64 prd_tbl; /* PRD tbl address */
543 __le32 reserved[4];
544};
545
546struct mvs_slot_info {
547 struct sas_task *task;
548 u32 n_elem;
549 u32 tx;
550
551 /* DMA buffer for storing cmd tbl, open addr frame, status buffer,
552 * and PRD table
553 */
554 void *buf;
555 dma_addr_t buf_dma;
556#if _MV_DUMP
557 u32 cmd_size;
558#endif
559
560 void *response;
561};
562
563struct mvs_port {
564 struct asd_sas_port sas_port;
565 u8 port_attached;
566 u8 taskfileset;
567 u8 wide_port_phymap;
568};
569
570struct mvs_phy {
571 struct mvs_port *port;
572 struct asd_sas_phy sas_phy;
573 struct sas_identify identify;
574 struct scsi_device *sdev;
575 u64 dev_sas_addr;
576 u64 att_dev_sas_addr;
577 u32 att_dev_info;
578 u32 dev_info;
579 u32 phy_type;
580 u32 phy_status;
581 u32 irq_status;
582 u32 frame_rcvd_size;
583 u8 frame_rcvd[32];
584 u8 phy_attached;
585};
586
587struct mvs_info {
588 unsigned long flags;
589
590 spinlock_t lock; /* host-wide lock */
591 struct pci_dev *pdev; /* our device */
592 void __iomem *regs; /* enhanced mode registers */
593 void __iomem *peri_regs; /* peripheral registers */
594
595 u8 sas_addr[SAS_ADDR_SIZE];
596 struct sas_ha_struct sas; /* SCSI/SAS glue */
597 struct Scsi_Host *shost;
598
599 __le32 *tx; /* TX (delivery) DMA ring */
600 dma_addr_t tx_dma;
601 u32 tx_prod; /* cached next-producer idx */
602
603 __le32 *rx; /* RX (completion) DMA ring */
604 dma_addr_t rx_dma;
605 u32 rx_cons; /* RX consumer idx */
606
607 __le32 *rx_fis; /* RX'd FIS area */
608 dma_addr_t rx_fis_dma;
609
610 struct mvs_cmd_hdr *slot; /* DMA command header slots */
611 dma_addr_t slot_dma;
612
613 const struct mvs_chip_info *chip;
614
615 unsigned long tags[MVS_SLOTS];
616 struct mvs_slot_info slot_info[MVS_SLOTS];
617 /* further per-slot information */
618 struct mvs_phy phy[MVS_MAX_PHYS];
619 struct mvs_port port[MVS_MAX_PHYS];
620
621 u32 can_queue; /* per adapter */
622 u32 tag_out; /*Get*/
623 u32 tag_in; /*Give*/
624};
625
626struct mvs_queue_task {
627 struct list_head list;
628
629 void *uldd_task;
630};
631
632static int mvs_phy_control(struct asd_sas_phy *sas_phy, enum phy_func func,
633 void *funcdata);
634static u32 mvs_read_phy_ctl(struct mvs_info *mvi, u32 port);
635static void mvs_write_phy_ctl(struct mvs_info *mvi, u32 port, u32 val);
636static u32 mvs_read_port_irq_stat(struct mvs_info *mvi, u32 port);
637static void mvs_write_port_irq_stat(struct mvs_info *mvi, u32 port, u32 val);
638static void mvs_write_port_irq_mask(struct mvs_info *mvi, u32 port, u32 val);
639static u32 mvs_read_port_irq_mask(struct mvs_info *mvi, u32 port);
640
641static u32 mvs_is_phy_ready(struct mvs_info *mvi, int i);
642static void mvs_detect_porttype(struct mvs_info *mvi, int i);
643static void mvs_update_phyinfo(struct mvs_info *mvi, int i, int get_st);
644
645static int mvs_scan_finished(struct Scsi_Host *, unsigned long);
646static void mvs_scan_start(struct Scsi_Host *);
647static int mvs_sas_slave_alloc(struct scsi_device *scsi_dev);
648
649static struct scsi_transport_template *mvs_stt;
650
651static const struct mvs_chip_info mvs_chips[] = {
652 [chip_6320] = { 2, 16, 9 },
653 [chip_6440] = { 4, 16, 9 },
654 [chip_6480] = { 8, 32, 10 },
655};
656
657static struct scsi_host_template mvs_sht = {
658 .module = THIS_MODULE,
659 .name = DRV_NAME,
660 .queuecommand = sas_queuecommand,
661 .target_alloc = sas_target_alloc,
662 .slave_configure = sas_slave_configure,
663 .slave_destroy = sas_slave_destroy,
664 .scan_finished = mvs_scan_finished,
665 .scan_start = mvs_scan_start,
666 .change_queue_depth = sas_change_queue_depth,
667 .change_queue_type = sas_change_queue_type,
668 .bios_param = sas_bios_param,
669 .can_queue = 1,
670 .cmd_per_lun = 1,
671 .this_id = -1,
672 .sg_tablesize = SG_ALL,
673 .max_sectors = SCSI_DEFAULT_MAX_SECTORS,
674 .use_clustering = ENABLE_CLUSTERING,
675 .eh_device_reset_handler = sas_eh_device_reset_handler,
676 .eh_bus_reset_handler = sas_eh_bus_reset_handler,
677 .slave_alloc = mvs_sas_slave_alloc,
678 .target_destroy = sas_target_destroy,
679 .ioctl = sas_ioctl,
680};
681
682static void mvs_hexdump(u32 size, u8 *data, u32 baseaddr)
683{
684 u32 i;
685 u32 run;
686 u32 offset;
687
688 offset = 0;
689 while (size) {
690 printk("%08X : ", baseaddr + offset);
691 if (size >= 16)
692 run = 16;
693 else
694 run = size;
695 size -= run;
696 for (i = 0; i < 16; i++) {
697 if (i < run)
698 printk("%02X ", (u32)data[i]);
699 else
700 printk(" ");
701 }
702 printk(": ");
703 for (i = 0; i < run; i++)
704 printk("%c", isalnum(data[i]) ? data[i] : '.');
705 printk("\n");
706 data = &data[16];
707 offset += run;
708 }
709 printk("\n");
710}
711
712static void mvs_hba_sb_dump(struct mvs_info *mvi, u32 tag,
713 enum sas_protocol proto)
714{
715#if _MV_DUMP
716 u32 offset;
717 struct pci_dev *pdev = mvi->pdev;
718 struct mvs_slot_info *slot = &mvi->slot_info[tag];
719
720 offset = slot->cmd_size + MVS_OAF_SZ +
721 sizeof(struct mvs_prd) * slot->n_elem;
722 dev_printk(KERN_DEBUG, &pdev->dev, "+---->Status buffer[%d] :\n",
723 tag);
724 mvs_hexdump(32, (u8 *) slot->response,
725 (u32) slot->buf_dma + offset);
726#endif
727}
728
729static void mvs_hba_memory_dump(struct mvs_info *mvi, u32 tag,
730 enum sas_protocol proto)
731{
732#if _MV_DUMP
733 u32 sz, w_ptr, r_ptr;
734 u64 addr;
735 void __iomem *regs = mvi->regs;
736 struct pci_dev *pdev = mvi->pdev;
737 struct mvs_slot_info *slot = &mvi->slot_info[tag];
738
739 /*Delivery Queue */
740 sz = mr32(TX_CFG) & TX_RING_SZ_MASK;
741 w_ptr = mr32(TX_PROD_IDX) & TX_RING_SZ_MASK;
742 r_ptr = mr32(TX_CONS_IDX) & TX_RING_SZ_MASK;
743 addr = mr32(TX_HI) << 16 << 16 | mr32(TX_LO);
744 dev_printk(KERN_DEBUG, &pdev->dev,
745 "Delivery Queue Size=%04d , WRT_PTR=%04X , RD_PTR=%04X\n",
746 sz, w_ptr, r_ptr);
747 dev_printk(KERN_DEBUG, &pdev->dev,
748 "Delivery Queue Base Address=0x%llX (PA)"
749 "(tx_dma=0x%llX), Entry=%04d\n",
750 addr, mvi->tx_dma, w_ptr);
751 mvs_hexdump(sizeof(u32), (u8 *)(&mvi->tx[mvi->tx_prod]),
752 (u32) mvi->tx_dma + sizeof(u32) * w_ptr);
753 /*Command List */
754 addr = mr32(CMD_LIST_HI) << 16 << 16 | mr32(CMD_LIST_LO);
755 dev_printk(KERN_DEBUG, &pdev->dev,
756 "Command List Base Address=0x%llX (PA)"
757 "(slot_dma=0x%llX), Header=%03d\n",
758 addr, mvi->slot_dma, tag);
759 dev_printk(KERN_DEBUG, &pdev->dev, "Command Header[%03d]:\n", tag);
760 /*mvs_cmd_hdr */
761 mvs_hexdump(sizeof(struct mvs_cmd_hdr), (u8 *)(&mvi->slot[tag]),
762 (u32) mvi->slot_dma + tag * sizeof(struct mvs_cmd_hdr));
763 /*1.command table area */
764 dev_printk(KERN_DEBUG, &pdev->dev, "+---->Command Table :\n");
765 mvs_hexdump(slot->cmd_size, (u8 *) slot->buf, (u32) slot->buf_dma);
766 /*2.open address frame area */
767 dev_printk(KERN_DEBUG, &pdev->dev, "+---->Open Address Frame :\n");
768 mvs_hexdump(MVS_OAF_SZ, (u8 *) slot->buf + slot->cmd_size,
769 (u32) slot->buf_dma + slot->cmd_size);
770 /*3.status buffer */
771 mvs_hba_sb_dump(mvi, tag, proto);
772 /*4.PRD table */
773 dev_printk(KERN_DEBUG, &pdev->dev, "+---->PRD table :\n");
774 mvs_hexdump(sizeof(struct mvs_prd) * slot->n_elem,
775 (u8 *) slot->buf + slot->cmd_size + MVS_OAF_SZ,
776 (u32) slot->buf_dma + slot->cmd_size + MVS_OAF_SZ);
777#endif
778}
779
780static void mvs_hba_cq_dump(struct mvs_info *mvi)
781{
782#if _MV_DUMP
783 u64 addr;
784 void __iomem *regs = mvi->regs;
785 struct pci_dev *pdev = mvi->pdev;
786 u32 entry = mvi->rx_cons + 1;
787 u32 rx_desc = le32_to_cpu(mvi->rx[entry]);
788
789 /*Completion Queue */
790 addr = mr32(RX_HI) << 16 << 16 | mr32(RX_LO);
791 dev_printk(KERN_DEBUG, &pdev->dev, "Completion Task = 0x%08X\n",
792 (u32) mvi->slot_info[rx_desc & RXQ_SLOT_MASK].task);
793 dev_printk(KERN_DEBUG, &pdev->dev,
794 "Completion List Base Address=0x%llX (PA), "
795 "CQ_Entry=%04d, CQ_WP=0x%08X\n",
796 addr, entry - 1, mvi->rx[0]);
797 mvs_hexdump(sizeof(u32), (u8 *)(&rx_desc),
798 mvi->rx_dma + sizeof(u32) * entry);
799#endif
800}
801
802static void mvs_hba_interrupt_enable(struct mvs_info *mvi)
803{
804 void __iomem *regs = mvi->regs;
805 u32 tmp;
806
807 tmp = mr32(GBL_CTL);
808
809 mw32(GBL_CTL, tmp | INT_EN);
810}
811
812static void mvs_hba_interrupt_disable(struct mvs_info *mvi)
813{
814 void __iomem *regs = mvi->regs;
815 u32 tmp;
816
817 tmp = mr32(GBL_CTL);
818
819 mw32(GBL_CTL, tmp & ~INT_EN);
820}
821
822static int mvs_int_rx(struct mvs_info *mvi, bool self_clear);
823
824/* move to PCI layer or libata core? */
825static int pci_go_64(struct pci_dev *pdev)
826{
827 int rc;
828
829 if (!pci_set_dma_mask(pdev, DMA_64BIT_MASK)) {
830 rc = pci_set_consistent_dma_mask(pdev, DMA_64BIT_MASK);
831 if (rc) {
832 rc = pci_set_consistent_dma_mask(pdev, DMA_32BIT_MASK);
833 if (rc) {
834 dev_printk(KERN_ERR, &pdev->dev,
835 "64-bit DMA enable failed\n");
836 return rc;
837 }
838 }
839 } else {
840 rc = pci_set_dma_mask(pdev, DMA_32BIT_MASK);
841 if (rc) {
842 dev_printk(KERN_ERR, &pdev->dev,
843 "32-bit DMA enable failed\n");
844 return rc;
845 }
846 rc = pci_set_consistent_dma_mask(pdev, DMA_32BIT_MASK);
847 if (rc) {
848 dev_printk(KERN_ERR, &pdev->dev,
849 "32-bit consistent DMA enable failed\n");
850 return rc;
851 }
852 }
853
854 return rc;
855}
856
857static void mvs_tag_clear(struct mvs_info *mvi, u32 tag)
858{
859 mvi->tag_in = (mvi->tag_in + 1) & (MVS_SLOTS - 1);
860 mvi->tags[mvi->tag_in] = tag;
861}
862
863static void mvs_tag_free(struct mvs_info *mvi, u32 tag)
864{
865 mvi->tag_out = (mvi->tag_out - 1) & (MVS_SLOTS - 1);
866}
867
868static int mvs_tag_alloc(struct mvs_info *mvi, u32 *tag_out)
869{
870 if (mvi->tag_out != mvi->tag_in) {
871 *tag_out = mvi->tags[mvi->tag_out];
872 mvi->tag_out = (mvi->tag_out + 1) & (MVS_SLOTS - 1);
873 return 0;
874 }
875 return -EBUSY;
876}
877
878static void mvs_tag_init(struct mvs_info *mvi)
879{
880 int i;
881 for (i = 0; i < MVS_SLOTS; ++i)
882 mvi->tags[i] = i;
883 mvi->tag_out = 0;
884 mvi->tag_in = MVS_SLOTS - 1;
885}
886
887#ifndef MVS_DISABLE_NVRAM
888static int mvs_eep_read(void __iomem *regs, u32 addr, u32 *data)
889{
890 int timeout = 1000;
891
892 if (addr & ~SPI_ADDR_MASK)
893 return -EINVAL;
894
895 writel(addr, regs + SPI_CMD);
896 writel(TWSI_RD, regs + SPI_CTL);
897
898 while (timeout-- > 0) {
899 if (readl(regs + SPI_CTL) & TWSI_RDY) {
900 *data = readl(regs + SPI_DATA);
901 return 0;
902 }
903
904 udelay(10);
905 }
906
907 return -EBUSY;
908}
909
910static int mvs_eep_read_buf(void __iomem *regs, u32 addr,
911 void *buf, u32 buflen)
912{
913 u32 addr_end, tmp_addr, i, j;
914 u32 tmp = 0;
915 int rc;
916 u8 *tmp8, *buf8 = buf;
917
918 addr_end = addr + buflen;
919 tmp_addr = ALIGN(addr, 4);
920 if (addr > 0xff)
921 return -EINVAL;
922
923 j = addr & 0x3;
924 if (j) {
925 rc = mvs_eep_read(regs, tmp_addr, &tmp);
926 if (rc)
927 return rc;
928
929 tmp8 = (u8 *)&tmp;
930 for (i = j; i < 4; i++)
931 *buf8++ = tmp8[i];
932
933 tmp_addr += 4;
934 }
935
936 for (j = ALIGN(addr_end, 4); tmp_addr < j; tmp_addr += 4) {
937 rc = mvs_eep_read(regs, tmp_addr, &tmp);
938 if (rc)
939 return rc;
940
941 memcpy(buf8, &tmp, 4);
942 buf8 += 4;
943 }
944
945 if (tmp_addr < addr_end) {
946 rc = mvs_eep_read(regs, tmp_addr, &tmp);
947 if (rc)
948 return rc;
949
950 tmp8 = (u8 *)&tmp;
951 j = addr_end - tmp_addr;
952 for (i = 0; i < j; i++)
953 *buf8++ = tmp8[i];
954
955 tmp_addr += 4;
956 }
957
958 return 0;
959}
960#endif
961
962static int mvs_nvram_read(struct mvs_info *mvi, u32 addr,
963 void *buf, u32 buflen)
964{
965#ifndef MVS_DISABLE_NVRAM
966 void __iomem *regs = mvi->regs;
967 int rc, i;
968 u32 sum;
969 u8 hdr[2], *tmp;
970 const char *msg;
971
972 rc = mvs_eep_read_buf(regs, addr, &hdr, 2);
973 if (rc) {
974 msg = "nvram hdr read failed";
975 goto err_out;
976 }
977 rc = mvs_eep_read_buf(regs, addr + 2, buf, buflen);
978 if (rc) {
979 msg = "nvram read failed";
980 goto err_out;
981 }
982
983 if (hdr[0] != 0x5A) {
984 /* entry id */
985 msg = "invalid nvram entry id";
986 rc = -ENOENT;
987 goto err_out;
988 }
989
990 tmp = buf;
991 sum = ((u32)hdr[0]) + ((u32)hdr[1]);
992 for (i = 0; i < buflen; i++)
993 sum += ((u32)tmp[i]);
994
995 if (sum) {
996 msg = "nvram checksum failure";
997 rc = -EILSEQ;
998 goto err_out;
999 }
1000
1001 return 0;
1002
1003err_out:
1004 dev_printk(KERN_ERR, &mvi->pdev->dev, "%s", msg);
1005 return rc;
1006#else
1007 /* FIXME , For SAS target mode */
1008 memcpy(buf, "\x00\x00\xab\x11\x30\x04\x05\x50", 8);
1009 return 0;
1010#endif
1011}
1012
1013static void mvs_bytes_dmaed(struct mvs_info *mvi, int i)
1014{
1015 struct mvs_phy *phy = &mvi->phy[i];
1016
1017 if (!phy->phy_attached)
1018 return;
1019
1020 if (phy->phy_type & PORT_TYPE_SAS) {
1021 struct sas_identify_frame *id;
1022
1023 id = (struct sas_identify_frame *)phy->frame_rcvd;
1024 id->dev_type = phy->identify.device_type;
1025 id->initiator_bits = SAS_PROTOCOL_ALL;
1026 id->target_bits = phy->identify.target_port_protocols;
1027 } else if (phy->phy_type & PORT_TYPE_SATA) {
1028 /* TODO */
1029 }
1030 mvi->sas.sas_phy[i]->frame_rcvd_size = phy->frame_rcvd_size;
1031 mvi->sas.notify_port_event(mvi->sas.sas_phy[i],
1032 PORTE_BYTES_DMAED);
1033}
1034
1035static int mvs_scan_finished(struct Scsi_Host *shost, unsigned long time)
1036{
1037 /* give the phy enabling interrupt event time to come in (1s
1038 * is empirically about all it takes) */
1039 if (time < HZ)
1040 return 0;
1041 /* Wait for discovery to finish */
1042 scsi_flush_work(shost);
1043 return 1;
1044}
1045
1046static void mvs_scan_start(struct Scsi_Host *shost)
1047{
1048 int i;
1049 struct mvs_info *mvi = SHOST_TO_SAS_HA(shost)->lldd_ha;
1050
1051 for (i = 0; i < mvi->chip->n_phy; ++i) {
1052 mvs_bytes_dmaed(mvi, i);
1053 }
1054}
1055
1056static int mvs_sas_slave_alloc(struct scsi_device *scsi_dev)
1057{
1058 int rc;
1059
1060 rc = sas_slave_alloc(scsi_dev);
1061
1062 return rc;
1063}
1064
1065static void mvs_int_port(struct mvs_info *mvi, int port_no, u32 events)
1066{
1067 struct pci_dev *pdev = mvi->pdev;
1068 struct sas_ha_struct *sas_ha = &mvi->sas;
1069 struct mvs_phy *phy = &mvi->phy[port_no];
1070 struct asd_sas_phy *sas_phy = &phy->sas_phy;
1071
1072 phy->irq_status = mvs_read_port_irq_stat(mvi, port_no);
1073 /*
1074 * events is port event now ,
1075 * we need check the interrupt status which belongs to per port.
1076 */
1077 dev_printk(KERN_DEBUG, &pdev->dev,
1078 "Port %d Event = %X\n",
1079 port_no, phy->irq_status);
1080
1081 if (phy->irq_status & (PHYEV_POOF | PHYEV_DEC_ERR)) {
1082 if (!mvs_is_phy_ready(mvi, port_no)) {
1083 sas_phy_disconnected(sas_phy);
1084 sas_ha->notify_phy_event(sas_phy, PHYE_LOSS_OF_SIGNAL);
1085 } else
1086 mvs_phy_control(sas_phy, PHY_FUNC_LINK_RESET, NULL);
1087 }
1088 if (!(phy->irq_status & PHYEV_DEC_ERR)) {
1089 if (phy->irq_status & PHYEV_COMWAKE) {
1090 u32 tmp = mvs_read_port_irq_mask(mvi, port_no);
1091 mvs_write_port_irq_mask(mvi, port_no,
1092 tmp | PHYEV_SIG_FIS);
1093 }
1094 if (phy->irq_status & (PHYEV_SIG_FIS | PHYEV_ID_DONE)) {
1095 phy->phy_status = mvs_is_phy_ready(mvi, port_no);
1096 if (phy->phy_status) {
1097 mvs_detect_porttype(mvi, port_no);
1098
1099 if (phy->phy_type & PORT_TYPE_SATA) {
1100 u32 tmp = mvs_read_port_irq_mask(mvi,
1101 port_no);
1102 tmp &= ~PHYEV_SIG_FIS;
1103 mvs_write_port_irq_mask(mvi,
1104 port_no, tmp);
1105 }
1106
1107 mvs_update_phyinfo(mvi, port_no, 0);
1108 sas_ha->notify_phy_event(sas_phy,
1109 PHYE_OOB_DONE);
1110 mvs_bytes_dmaed(mvi, port_no);
1111 } else {
1112 dev_printk(KERN_DEBUG, &pdev->dev,
1113 "plugin interrupt but phy is gone\n");
1114 mvs_phy_control(sas_phy, PHY_FUNC_LINK_RESET,
1115 NULL);
1116 }
1117 } else if (phy->irq_status & PHYEV_BROAD_CH)
1118 sas_ha->notify_port_event(sas_phy,
1119 PORTE_BROADCAST_RCVD);
1120 }
1121 mvs_write_port_irq_stat(mvi, port_no, phy->irq_status);
1122}
1123
1124static void mvs_int_sata(struct mvs_info *mvi)
1125{
1126 /* FIXME */
1127}
1128
1129static void mvs_slot_free(struct mvs_info *mvi, struct sas_task *task,
1130 struct mvs_slot_info *slot, u32 slot_idx)
1131{
1132 if (!sas_protocol_ata(task->task_proto))
1133 if (slot->n_elem)
1134 pci_unmap_sg(mvi->pdev, task->scatter,
1135 slot->n_elem, task->data_dir);
1136
1137 switch (task->task_proto) {
1138 case SAS_PROTOCOL_SMP:
1139 pci_unmap_sg(mvi->pdev, &task->smp_task.smp_resp, 1,
1140 PCI_DMA_FROMDEVICE);
1141 pci_unmap_sg(mvi->pdev, &task->smp_task.smp_req, 1,
1142 PCI_DMA_TODEVICE);
1143 break;
1144
1145 case SAS_PROTOCOL_SATA:
1146 case SAS_PROTOCOL_STP:
1147 case SAS_PROTOCOL_SSP:
1148 default:
1149 /* do nothing */
1150 break;
1151 }
1152
1153 slot->task = NULL;
1154 mvs_tag_clear(mvi, slot_idx);
1155}
1156
1157static void mvs_slot_err(struct mvs_info *mvi, struct sas_task *task,
1158 u32 slot_idx)
1159{
1160 struct mvs_slot_info *slot = &mvi->slot_info[slot_idx];
1161 u64 err_dw0 = *(u32 *) slot->response;
1162 void __iomem *regs = mvi->regs;
1163 u32 tmp;
1164
1165 if (err_dw0 & CMD_ISS_STPD)
1166 if (sas_protocol_ata(task->task_proto)) {
1167 tmp = mr32(INT_STAT_SRS);
1168 mw32(INT_STAT_SRS, tmp & 0xFFFF);
1169 }
1170
1171 mvs_hba_sb_dump(mvi, slot_idx, task->task_proto);
1172}
1173
1174static int mvs_slot_complete(struct mvs_info *mvi, u32 rx_desc)
1175{
1176 u32 slot_idx = rx_desc & RXQ_SLOT_MASK;
1177 struct mvs_slot_info *slot = &mvi->slot_info[slot_idx];
1178 struct sas_task *task = slot->task;
1179 struct task_status_struct *tstat = &task->task_status;
1180 struct mvs_port *port = &mvi->port[task->dev->port->id];
1181 bool aborted;
1182 void *to;
1183
1184 spin_lock(&task->task_state_lock);
1185 aborted = task->task_state_flags & SAS_TASK_STATE_ABORTED;
1186 if (!aborted) {
1187 task->task_state_flags &=
1188 ~(SAS_TASK_STATE_PENDING | SAS_TASK_AT_INITIATOR);
1189 task->task_state_flags |= SAS_TASK_STATE_DONE;
1190 }
1191 spin_unlock(&task->task_state_lock);
1192
1193 if (aborted)
1194 return -1;
1195
1196 memset(tstat, 0, sizeof(*tstat));
1197 tstat->resp = SAS_TASK_COMPLETE;
1198
1199
1200 if (unlikely(!port->port_attached)) {
1201 tstat->stat = SAS_PHY_DOWN;
1202 goto out;
1203 }
1204
1205 /* error info record present */
1206 if ((rx_desc & RXQ_ERR) && (*(u64 *) slot->response)) {
1207 tstat->stat = SAM_CHECK_COND;
1208 mvs_slot_err(mvi, task, slot_idx);
1209 goto out;
1210 }
1211
1212 switch (task->task_proto) {
1213 case SAS_PROTOCOL_SSP:
1214 /* hw says status == 0, datapres == 0 */
1215 if (rx_desc & RXQ_GOOD) {
1216 tstat->stat = SAM_GOOD;
1217 tstat->resp = SAS_TASK_COMPLETE;
1218 }
1219 /* response frame present */
1220 else if (rx_desc & RXQ_RSP) {
1221 struct ssp_response_iu *iu =
1222 slot->response + sizeof(struct mvs_err_info);
1223 sas_ssp_task_response(&mvi->pdev->dev, task, iu);
1224 }
1225
1226 /* should never happen? */
1227 else
1228 tstat->stat = SAM_CHECK_COND;
1229 break;
1230
1231 case SAS_PROTOCOL_SMP: {
1232 struct scatterlist *sg_resp = &task->smp_task.smp_resp;
1233 tstat->stat = SAM_GOOD;
1234 to = kmap_atomic(sg_page(sg_resp), KM_IRQ0);
1235 memcpy(to + sg_resp->offset,
1236 slot->response + sizeof(struct mvs_err_info),
1237 sg_dma_len(sg_resp));
1238 kunmap_atomic(to, KM_IRQ0);
1239 break;
1240 }
1241
1242 case SAS_PROTOCOL_SATA:
1243 case SAS_PROTOCOL_STP:
1244 case SAS_PROTOCOL_SATA | SAS_PROTOCOL_STP: {
1245 struct ata_task_resp *resp =
1246 (struct ata_task_resp *)tstat->buf;
1247
1248 if ((rx_desc & (RXQ_DONE | RXQ_ERR | RXQ_ATTN)) ==
1249 RXQ_DONE)
1250 tstat->stat = SAM_GOOD;
1251 else
1252 tstat->stat = SAM_CHECK_COND;
1253
1254 resp->frame_len = sizeof(struct dev_to_host_fis);
1255 memcpy(&resp->ending_fis[0],
1256 SATA_RECEIVED_D2H_FIS(port->taskfileset),
1257 sizeof(struct dev_to_host_fis));
1258 if (resp->ending_fis[2] & ATA_ERR)
1259 mvs_hexdump(16, resp->ending_fis, 0);
1260 break;
1261 }
1262
1263 default:
1264 tstat->stat = SAM_CHECK_COND;
1265 break;
1266 }
1267
1268out:
1269 mvs_slot_free(mvi, task, slot, slot_idx);
1270 task->task_done(task);
1271 return tstat->stat;
1272}
1273
1274static void mvs_int_full(struct mvs_info *mvi)
1275{
1276 void __iomem *regs = mvi->regs;
1277 u32 tmp, stat;
1278 int i;
1279
1280 stat = mr32(INT_STAT);
1281
1282 mvs_int_rx(mvi, false);
1283
1284 for (i = 0; i < MVS_MAX_PORTS; i++) {
1285 tmp = (stat >> i) & (CINT_PORT | CINT_PORT_STOPPED);
1286 if (tmp)
1287 mvs_int_port(mvi, i, tmp);
1288 }
1289
1290 if (stat & CINT_SRS)
1291 mvs_int_sata(mvi);
1292
1293 mw32(INT_STAT, stat);
1294}
1295
1296static int mvs_int_rx(struct mvs_info *mvi, bool self_clear)
1297{
1298 void __iomem *regs = mvi->regs;
1299 u32 rx_prod_idx, rx_desc;
1300 bool attn = false;
1301 struct pci_dev *pdev = mvi->pdev;
1302
1303 /* the first dword in the RX ring is special: it contains
1304 * a mirror of the hardware's RX producer index, so that
1305 * we don't have to stall the CPU reading that register.
1306 * The actual RX ring is offset by one dword, due to this.
1307 */
1308 rx_prod_idx = mr32(RX_CONS_IDX) & RX_RING_SZ_MASK;
1309 if (rx_prod_idx == 0xfff) { /* h/w hasn't touched RX ring yet */
1310 mvi->rx_cons = 0xfff;
1311 return 0;
1312 }
1313
1314 /* The CMPL_Q may come late, read from register and try again
1315 * note: if coalescing is enabled,
1316 * it will need to read from register every time for sure
1317 */
1318 if (mvi->rx_cons == rx_prod_idx)
1319 return 0;
1320
1321 if (mvi->rx_cons == 0xfff)
1322 mvi->rx_cons = MVS_RX_RING_SZ - 1;
1323
1324 while (mvi->rx_cons != rx_prod_idx) {
1325
1326 /* increment our internal RX consumer pointer */
1327 mvi->rx_cons = (mvi->rx_cons + 1) & (MVS_RX_RING_SZ - 1);
1328
1329 rx_desc = le32_to_cpu(mvi->rx[mvi->rx_cons + 1]);
1330
1331 mvs_hba_cq_dump(mvi);
1332
1333 if (unlikely(rx_desc & RXQ_DONE))
1334 mvs_slot_complete(mvi, rx_desc);
1335 if (rx_desc & RXQ_ATTN) {
1336 attn = true;
1337 dev_printk(KERN_DEBUG, &pdev->dev, "ATTN %X\n",
1338 rx_desc);
1339 } else if (rx_desc & RXQ_ERR) {
1340 dev_printk(KERN_DEBUG, &pdev->dev, "RXQ_ERR %X\n",
1341 rx_desc);
1342 }
1343 }
1344
1345 if (attn && self_clear)
1346 mvs_int_full(mvi);
1347
1348 return 0;
1349}
1350
1351static irqreturn_t mvs_interrupt(int irq, void *opaque)
1352{
1353 struct mvs_info *mvi = opaque;
1354 void __iomem *regs = mvi->regs;
1355 u32 stat;
1356
1357 stat = mr32(GBL_INT_STAT);
1358
1359 /* clear CMD_CMPLT ASAP */
1360 mw32_f(INT_STAT, CINT_DONE);
1361
1362 if (stat == 0 || stat == 0xffffffff)
1363 return IRQ_NONE;
1364
1365 spin_lock(&mvi->lock);
1366
1367 mvs_int_full(mvi);
1368
1369 spin_unlock(&mvi->lock);
1370
1371 return IRQ_HANDLED;
1372}
1373
1374#ifndef MVS_DISABLE_MSI
1375static irqreturn_t mvs_msi_interrupt(int irq, void *opaque)
1376{
1377 struct mvs_info *mvi = opaque;
1378
1379 spin_lock(&mvi->lock);
1380
1381 mvs_int_rx(mvi, true);
1382
1383 spin_unlock(&mvi->lock);
1384
1385 return IRQ_HANDLED;
1386}
1387#endif
1388
1389struct mvs_task_exec_info {
1390 struct sas_task *task;
1391 struct mvs_cmd_hdr *hdr;
1392 struct mvs_port *port;
1393 u32 tag;
1394 int n_elem;
1395};
1396
1397static int mvs_task_prep_smp(struct mvs_info *mvi,
1398 struct mvs_task_exec_info *tei)
1399{
1400 int elem, rc, i;
1401 struct sas_task *task = tei->task;
1402 struct mvs_cmd_hdr *hdr = tei->hdr;
1403 struct scatterlist *sg_req, *sg_resp;
1404 u32 req_len, resp_len, tag = tei->tag;
1405 void *buf_tmp;
1406 u8 *buf_oaf;
1407 dma_addr_t buf_tmp_dma;
1408 struct mvs_prd *buf_prd;
1409 struct scatterlist *sg;
1410 struct mvs_slot_info *slot = &mvi->slot_info[tag];
1411 struct asd_sas_port *sas_port = task->dev->port;
1412 u32 flags = (tei->n_elem << MCH_PRD_LEN_SHIFT);
1413#if _MV_DUMP
1414 u8 *buf_cmd;
1415 void *from;
1416#endif
1417 /*
1418 * DMA-map SMP request, response buffers
1419 */
1420 sg_req = &task->smp_task.smp_req;
1421 elem = pci_map_sg(mvi->pdev, sg_req, 1, PCI_DMA_TODEVICE);
1422 if (!elem)
1423 return -ENOMEM;
1424 req_len = sg_dma_len(sg_req);
1425
1426 sg_resp = &task->smp_task.smp_resp;
1427 elem = pci_map_sg(mvi->pdev, sg_resp, 1, PCI_DMA_FROMDEVICE);
1428 if (!elem) {
1429 rc = -ENOMEM;
1430 goto err_out;
1431 }
1432 resp_len = sg_dma_len(sg_resp);
1433
1434 /* must be in dwords */
1435 if ((req_len & 0x3) || (resp_len & 0x3)) {
1436 rc = -EINVAL;
1437 goto err_out_2;
1438 }
1439
1440 /*
1441 * arrange MVS_SLOT_BUF_SZ-sized DMA buffer according to our needs
1442 */
1443
1444 /* region 1: command table area (MVS_SSP_CMD_SZ bytes) ************** */
1445 buf_tmp = slot->buf;
1446 buf_tmp_dma = slot->buf_dma;
1447
1448#if _MV_DUMP
1449 buf_cmd = buf_tmp;
1450 hdr->cmd_tbl = cpu_to_le64(buf_tmp_dma);
1451 buf_tmp += req_len;
1452 buf_tmp_dma += req_len;
1453 slot->cmd_size = req_len;
1454#else
1455 hdr->cmd_tbl = cpu_to_le64(sg_dma_address(sg_req));
1456#endif
1457
1458 /* region 2: open address frame area (MVS_OAF_SZ bytes) ********* */
1459 buf_oaf = buf_tmp;
1460 hdr->open_frame = cpu_to_le64(buf_tmp_dma);
1461
1462 buf_tmp += MVS_OAF_SZ;
1463 buf_tmp_dma += MVS_OAF_SZ;
1464
1465 /* region 3: PRD table ********************************************* */
1466 buf_prd = buf_tmp;
1467 if (tei->n_elem)
1468 hdr->prd_tbl = cpu_to_le64(buf_tmp_dma);
1469 else
1470 hdr->prd_tbl = 0;
1471
1472 i = sizeof(struct mvs_prd) * tei->n_elem;
1473 buf_tmp += i;
1474 buf_tmp_dma += i;
1475
1476 /* region 4: status buffer (larger the PRD, smaller this buf) ****** */
1477 slot->response = buf_tmp;
1478 hdr->status_buf = cpu_to_le64(buf_tmp_dma);
1479
1480 /*
1481 * Fill in TX ring and command slot header
1482 */
1483 slot->tx = mvi->tx_prod;
1484 mvi->tx[mvi->tx_prod] = cpu_to_le32((TXQ_CMD_SMP << TXQ_CMD_SHIFT) |
1485 TXQ_MODE_I | tag |
1486 (sas_port->phy_mask << TXQ_PHY_SHIFT));
1487
1488 hdr->flags |= flags;
1489 hdr->lens = cpu_to_le32(((resp_len / 4) << 16) | ((req_len - 4) / 4));
1490 hdr->tags = cpu_to_le32(tag);
1491 hdr->data_len = 0;
1492
1493 /* generate open address frame hdr (first 12 bytes) */
1494 buf_oaf[0] = (1 << 7) | (0 << 4) | 0x01; /* initiator, SMP, ftype 1h */
1495 buf_oaf[1] = task->dev->linkrate & 0xf;
1496 *(u16 *)(buf_oaf + 2) = 0xFFFF; /* SAS SPEC */
1497 memcpy(buf_oaf + 4, task->dev->sas_addr, SAS_ADDR_SIZE);
1498
1499 /* fill in PRD (scatter/gather) table, if any */
1500 for_each_sg(task->scatter, sg, tei->n_elem, i) {
1501 buf_prd->addr = cpu_to_le64(sg_dma_address(sg));
1502 buf_prd->len = cpu_to_le32(sg_dma_len(sg));
1503 buf_prd++;
1504 }
1505
1506#if _MV_DUMP
1507 /* copy cmd table */
1508 from = kmap_atomic(sg_page(sg_req), KM_IRQ0);
1509 memcpy(buf_cmd, from + sg_req->offset, req_len);
1510 kunmap_atomic(from, KM_IRQ0);
1511#endif
1512 return 0;
1513
1514err_out_2:
1515 pci_unmap_sg(mvi->pdev, &tei->task->smp_task.smp_resp, 1,
1516 PCI_DMA_FROMDEVICE);
1517err_out:
1518 pci_unmap_sg(mvi->pdev, &tei->task->smp_task.smp_req, 1,
1519 PCI_DMA_TODEVICE);
1520 return rc;
1521}
1522
1523static void mvs_free_reg_set(struct mvs_info *mvi, struct mvs_port *port)
1524{
1525 void __iomem *regs = mvi->regs;
1526 u32 tmp, offs;
1527 u8 *tfs = &port->taskfileset;
1528
1529 if (*tfs == MVS_ID_NOT_MAPPED)
1530 return;
1531
1532 offs = 1U << ((*tfs & 0x0f) + PCS_EN_SATA_REG_SHIFT);
1533 if (*tfs < 16) {
1534 tmp = mr32(PCS);
1535 mw32(PCS, tmp & ~offs);
1536 } else {
1537 tmp = mr32(CTL);
1538 mw32(CTL, tmp & ~offs);
1539 }
1540
1541 tmp = mr32(INT_STAT_SRS) & (1U << *tfs);
1542 if (tmp)
1543 mw32(INT_STAT_SRS, tmp);
1544
1545 *tfs = MVS_ID_NOT_MAPPED;
1546}
1547
1548static u8 mvs_assign_reg_set(struct mvs_info *mvi, struct mvs_port *port)
1549{
1550 int i;
1551 u32 tmp, offs;
1552 void __iomem *regs = mvi->regs;
1553
1554 if (port->taskfileset != MVS_ID_NOT_MAPPED)
1555 return 0;
1556
1557 tmp = mr32(PCS);
1558
1559 for (i = 0; i < mvi->chip->srs_sz; i++) {
1560 if (i == 16)
1561 tmp = mr32(CTL);
1562 offs = 1U << ((i & 0x0f) + PCS_EN_SATA_REG_SHIFT);
1563 if (!(tmp & offs)) {
1564 port->taskfileset = i;
1565
1566 if (i < 16)
1567 mw32(PCS, tmp | offs);
1568 else
1569 mw32(CTL, tmp | offs);
1570 tmp = mr32(INT_STAT_SRS) & (1U << i);
1571 if (tmp)
1572 mw32(INT_STAT_SRS, tmp);
1573 return 0;
1574 }
1575 }
1576 return MVS_ID_NOT_MAPPED;
1577}
1578
1579static u32 mvs_get_ncq_tag(struct sas_task *task)
1580{
1581 u32 tag = 0;
1582 struct ata_queued_cmd *qc = task->uldd_task;
1583
1584 if (qc)
1585 tag = qc->tag;
1586
1587 return tag;
1588}
1589
1590static int mvs_task_prep_ata(struct mvs_info *mvi,
1591 struct mvs_task_exec_info *tei)
1592{
1593 struct sas_task *task = tei->task;
1594 struct domain_device *dev = task->dev;
1595 struct mvs_cmd_hdr *hdr = tei->hdr;
1596 struct asd_sas_port *sas_port = dev->port;
1597 struct mvs_slot_info *slot;
1598 struct scatterlist *sg;
1599 struct mvs_prd *buf_prd;
1600 struct mvs_port *port = tei->port;
1601 u32 tag = tei->tag;
1602 u32 flags = (tei->n_elem << MCH_PRD_LEN_SHIFT);
1603 void *buf_tmp;
1604 u8 *buf_cmd, *buf_oaf;
1605 dma_addr_t buf_tmp_dma;
1606 u32 i, req_len, resp_len;
1607 const u32 max_resp_len = SB_RFB_MAX;
1608
1609 if (mvs_assign_reg_set(mvi, port) == MVS_ID_NOT_MAPPED)
1610 return -EBUSY;
1611
1612 slot = &mvi->slot_info[tag];
1613 slot->tx = mvi->tx_prod;
1614 mvi->tx[mvi->tx_prod] = cpu_to_le32(TXQ_MODE_I | tag |
1615 (TXQ_CMD_STP << TXQ_CMD_SHIFT) |
1616 (sas_port->phy_mask << TXQ_PHY_SHIFT) |
1617 (port->taskfileset << TXQ_SRS_SHIFT));
1618
1619 if (task->ata_task.use_ncq)
1620 flags |= MCH_FPDMA;
1621 if (dev->sata_dev.command_set == ATAPI_COMMAND_SET) {
1622 if (task->ata_task.fis.command != ATA_CMD_ID_ATAPI)
1623 flags |= MCH_ATAPI;
1624 }
1625
1626 /* FIXME: fill in port multiplier number */
1627
1628 hdr->flags = cpu_to_le32(flags);
1629
1630 /* FIXME: the low order order 5 bits for the TAG if enable NCQ */
1631 if (task->ata_task.use_ncq) {
1632 hdr->tags = cpu_to_le32(mvs_get_ncq_tag(task));
1633 /*Fill in task file */
1634 task->ata_task.fis.sector_count = hdr->tags << 3;
1635 } else
1636 hdr->tags = cpu_to_le32(tag);
1637 hdr->data_len = cpu_to_le32(task->total_xfer_len);
1638
1639 /*
1640 * arrange MVS_SLOT_BUF_SZ-sized DMA buffer according to our needs
1641 */
1642
1643 /* region 1: command table area (MVS_ATA_CMD_SZ bytes) ************** */
1644 buf_cmd = buf_tmp = slot->buf;
1645 buf_tmp_dma = slot->buf_dma;
1646
1647 hdr->cmd_tbl = cpu_to_le64(buf_tmp_dma);
1648
1649 buf_tmp += MVS_ATA_CMD_SZ;
1650 buf_tmp_dma += MVS_ATA_CMD_SZ;
1651#if _MV_DUMP
1652 slot->cmd_size = MVS_ATA_CMD_SZ;
1653#endif
1654
1655 /* region 2: open address frame area (MVS_OAF_SZ bytes) ********* */
1656 /* used for STP. unused for SATA? */
1657 buf_oaf = buf_tmp;
1658 hdr->open_frame = cpu_to_le64(buf_tmp_dma);
1659
1660 buf_tmp += MVS_OAF_SZ;
1661 buf_tmp_dma += MVS_OAF_SZ;
1662
1663 /* region 3: PRD table ********************************************* */
1664 buf_prd = buf_tmp;
1665 if (tei->n_elem)
1666 hdr->prd_tbl = cpu_to_le64(buf_tmp_dma);
1667 else
1668 hdr->prd_tbl = 0;
1669
1670 i = sizeof(struct mvs_prd) * tei->n_elem;
1671 buf_tmp += i;
1672 buf_tmp_dma += i;
1673
1674 /* region 4: status buffer (larger the PRD, smaller this buf) ****** */
1675 /* FIXME: probably unused, for SATA. kept here just in case
1676 * we get a STP/SATA error information record
1677 */
1678 slot->response = buf_tmp;
1679 hdr->status_buf = cpu_to_le64(buf_tmp_dma);
1680
1681 req_len = sizeof(struct host_to_dev_fis);
1682 resp_len = MVS_SLOT_BUF_SZ - MVS_ATA_CMD_SZ -
1683 sizeof(struct mvs_err_info) - i;
1684
1685 /* request, response lengths */
1686 resp_len = min(resp_len, max_resp_len);
1687 hdr->lens = cpu_to_le32(((resp_len / 4) << 16) | (req_len / 4));
1688
1689 task->ata_task.fis.flags |= 0x80; /* C=1: update ATA cmd reg */
1690 /* fill in command FIS and ATAPI CDB */
1691 memcpy(buf_cmd, &task->ata_task.fis, sizeof(struct host_to_dev_fis));
1692 if (dev->sata_dev.command_set == ATAPI_COMMAND_SET)
1693 memcpy(buf_cmd + STP_ATAPI_CMD,
1694 task->ata_task.atapi_packet, 16);
1695
1696 /* generate open address frame hdr (first 12 bytes) */
1697 buf_oaf[0] = (1 << 7) | (2 << 4) | 0x1; /* initiator, STP, ftype 1h */
1698 buf_oaf[1] = task->dev->linkrate & 0xf;
1699 *(u16 *)(buf_oaf + 2) = cpu_to_be16(tag);
1700 memcpy(buf_oaf + 4, task->dev->sas_addr, SAS_ADDR_SIZE);
1701
1702 /* fill in PRD (scatter/gather) table, if any */
1703 for_each_sg(task->scatter, sg, tei->n_elem, i) {
1704 buf_prd->addr = cpu_to_le64(sg_dma_address(sg));
1705 buf_prd->len = cpu_to_le32(sg_dma_len(sg));
1706 buf_prd++;
1707 }
1708
1709 return 0;
1710}
1711
1712static int mvs_task_prep_ssp(struct mvs_info *mvi,
1713 struct mvs_task_exec_info *tei)
1714{
1715 struct sas_task *task = tei->task;
1716 struct mvs_cmd_hdr *hdr = tei->hdr;
1717 struct mvs_port *port = tei->port;
1718 struct mvs_slot_info *slot;
1719 struct scatterlist *sg;
1720 struct mvs_prd *buf_prd;
1721 struct ssp_frame_hdr *ssp_hdr;
1722 void *buf_tmp;
1723 u8 *buf_cmd, *buf_oaf, fburst = 0;
1724 dma_addr_t buf_tmp_dma;
1725 u32 flags;
1726 u32 resp_len, req_len, i, tag = tei->tag;
1727 const u32 max_resp_len = SB_RFB_MAX;
1728
1729 slot = &mvi->slot_info[tag];
1730
1731 slot->tx = mvi->tx_prod;
1732 mvi->tx[mvi->tx_prod] = cpu_to_le32(TXQ_MODE_I | tag |
1733 (TXQ_CMD_SSP << TXQ_CMD_SHIFT) |
1734 (port->wide_port_phymap << TXQ_PHY_SHIFT));
1735
1736 flags = MCH_RETRY;
1737 if (task->ssp_task.enable_first_burst) {
1738 flags |= MCH_FBURST;
1739 fburst = (1 << 7);
1740 }
1741 hdr->flags = cpu_to_le32(flags |
1742 (tei->n_elem << MCH_PRD_LEN_SHIFT) |
1743 (MCH_SSP_FR_CMD << MCH_SSP_FR_TYPE_SHIFT));
1744
1745 hdr->tags = cpu_to_le32(tag);
1746 hdr->data_len = cpu_to_le32(task->total_xfer_len);
1747
1748 /*
1749 * arrange MVS_SLOT_BUF_SZ-sized DMA buffer according to our needs
1750 */
1751
1752 /* region 1: command table area (MVS_SSP_CMD_SZ bytes) ************** */
1753 buf_cmd = buf_tmp = slot->buf;
1754 buf_tmp_dma = slot->buf_dma;
1755
1756 hdr->cmd_tbl = cpu_to_le64(buf_tmp_dma);
1757
1758 buf_tmp += MVS_SSP_CMD_SZ;
1759 buf_tmp_dma += MVS_SSP_CMD_SZ;
1760#if _MV_DUMP
1761 slot->cmd_size = MVS_SSP_CMD_SZ;
1762#endif
1763
1764 /* region 2: open address frame area (MVS_OAF_SZ bytes) ********* */
1765 buf_oaf = buf_tmp;
1766 hdr->open_frame = cpu_to_le64(buf_tmp_dma);
1767
1768 buf_tmp += MVS_OAF_SZ;
1769 buf_tmp_dma += MVS_OAF_SZ;
1770
1771 /* region 3: PRD table ********************************************* */
1772 buf_prd = buf_tmp;
1773 if (tei->n_elem)
1774 hdr->prd_tbl = cpu_to_le64(buf_tmp_dma);
1775 else
1776 hdr->prd_tbl = 0;
1777
1778 i = sizeof(struct mvs_prd) * tei->n_elem;
1779 buf_tmp += i;
1780 buf_tmp_dma += i;
1781
1782 /* region 4: status buffer (larger the PRD, smaller this buf) ****** */
1783 slot->response = buf_tmp;
1784 hdr->status_buf = cpu_to_le64(buf_tmp_dma);
1785
1786 resp_len = MVS_SLOT_BUF_SZ - MVS_SSP_CMD_SZ - MVS_OAF_SZ -
1787 sizeof(struct mvs_err_info) - i;
1788 resp_len = min(resp_len, max_resp_len);
1789
1790 req_len = sizeof(struct ssp_frame_hdr) + 28;
1791
1792 /* request, response lengths */
1793 hdr->lens = cpu_to_le32(((resp_len / 4) << 16) | (req_len / 4));
1794
1795 /* generate open address frame hdr (first 12 bytes) */
1796 buf_oaf[0] = (1 << 7) | (1 << 4) | 0x1; /* initiator, SSP, ftype 1h */
1797 buf_oaf[1] = task->dev->linkrate & 0xf;
1798 *(u16 *)(buf_oaf + 2) = cpu_to_be16(tag);
1799 memcpy(buf_oaf + 4, task->dev->sas_addr, SAS_ADDR_SIZE);
1800
1801 /* fill in SSP frame header (Command Table.SSP frame header) */
1802 ssp_hdr = (struct ssp_frame_hdr *)buf_cmd;
1803 ssp_hdr->frame_type = SSP_COMMAND;
1804 memcpy(ssp_hdr->hashed_dest_addr, task->dev->hashed_sas_addr,
1805 HASHED_SAS_ADDR_SIZE);
1806 memcpy(ssp_hdr->hashed_src_addr,
1807 task->dev->port->ha->hashed_sas_addr, HASHED_SAS_ADDR_SIZE);
1808 ssp_hdr->tag = cpu_to_be16(tag);
1809
1810 /* fill in command frame IU */
1811 buf_cmd += sizeof(*ssp_hdr);
1812 memcpy(buf_cmd, &task->ssp_task.LUN, 8);
1813 buf_cmd[9] = fburst | task->ssp_task.task_attr |
1814 (task->ssp_task.task_prio << 3);
1815 memcpy(buf_cmd + 12, &task->ssp_task.cdb, 16);
1816
1817 /* fill in PRD (scatter/gather) table, if any */
1818 for_each_sg(task->scatter, sg, tei->n_elem, i) {
1819 buf_prd->addr = cpu_to_le64(sg_dma_address(sg));
1820 buf_prd->len = cpu_to_le32(sg_dma_len(sg));
1821 buf_prd++;
1822 }
1823
1824 return 0;
1825}
1826
1827static int mvs_task_exec(struct sas_task *task, const int num, gfp_t gfp_flags)
1828{
1829 struct domain_device *dev = task->dev;
1830 struct mvs_info *mvi = dev->port->ha->lldd_ha;
1831 struct pci_dev *pdev = mvi->pdev;
1832 void __iomem *regs = mvi->regs;
1833 struct mvs_task_exec_info tei;
1834 struct sas_task *t = task;
1835 u32 tag = 0xdeadbeef, rc, n_elem = 0;
1836 unsigned long flags;
1837 u32 n = num, pass = 0;
1838
1839 spin_lock_irqsave(&mvi->lock, flags);
1840
1841 do {
1842 tei.port = &mvi->port[dev->port->id];
1843
1844 if (!tei.port->port_attached) {
1845 struct task_status_struct *ts = &t->task_status;
1846 ts->stat = SAS_PHY_DOWN;
1847 t->task_done(t);
1848 rc = 0;
1849 goto exec_exit;
1850 }
1851 if (!sas_protocol_ata(t->task_proto)) {
1852 if (t->num_scatter) {
1853 n_elem = pci_map_sg(mvi->pdev, t->scatter,
1854 t->num_scatter,
1855 t->data_dir);
1856 if (!n_elem) {
1857 rc = -ENOMEM;
1858 goto err_out;
1859 }
1860 }
1861 } else {
1862 n_elem = t->num_scatter;
1863 }
1864
1865 rc = mvs_tag_alloc(mvi, &tag);
1866 if (rc)
1867 goto err_out;
1868
1869 mvi->slot_info[tag].task = t;
1870 mvi->slot_info[tag].n_elem = n_elem;
1871 memset(mvi->slot_info[tag].buf, 0, MVS_SLOT_BUF_SZ);
1872 tei.task = t;
1873 tei.hdr = &mvi->slot[tag];
1874 tei.tag = tag;
1875 tei.n_elem = n_elem;
1876
1877 switch (t->task_proto) {
1878 case SAS_PROTOCOL_SMP:
1879 rc = mvs_task_prep_smp(mvi, &tei);
1880 break;
1881 case SAS_PROTOCOL_SSP:
1882 rc = mvs_task_prep_ssp(mvi, &tei);
1883 break;
1884 case SAS_PROTOCOL_SATA:
1885 case SAS_PROTOCOL_STP:
1886 case SAS_PROTOCOL_SATA | SAS_PROTOCOL_STP:
1887 rc = mvs_task_prep_ata(mvi, &tei);
1888 break;
1889 default:
1890 dev_printk(KERN_ERR, &pdev->dev,
1891 "unknown sas_task proto: 0x%x\n",
1892 t->task_proto);
1893 rc = -EINVAL;
1894 break;
1895 }
1896
1897 if (rc)
1898 goto err_out_tag;
1899
1900 /* TODO: select normal or high priority */
1901
1902 spin_lock(&t->task_state_lock);
1903 t->task_state_flags |= SAS_TASK_AT_INITIATOR;
1904 spin_unlock(&t->task_state_lock);
1905
1906 if (n == 1) {
1907 spin_unlock_irqrestore(&mvi->lock, flags);
1908 mw32(TX_PROD_IDX, mvi->tx_prod);
1909 }
1910 mvs_hba_memory_dump(mvi, tag, t->task_proto);
1911
1912 ++pass;
1913 mvi->tx_prod = (mvi->tx_prod + 1) & (MVS_CHIP_SLOT_SZ - 1);
1914
1915 if (n == 1)
1916 break;
1917
1918 t = list_entry(t->list.next, struct sas_task, list);
1919 } while (--n);
1920
1921 return 0;
1922
1923err_out_tag:
1924 mvs_tag_free(mvi, tag);
1925err_out:
1926 dev_printk(KERN_ERR, &pdev->dev, "mvsas exec failed[%d]!\n", rc);
1927 if (!sas_protocol_ata(t->task_proto))
1928 if (n_elem)
1929 pci_unmap_sg(mvi->pdev, t->scatter, n_elem,
1930 t->data_dir);
1931exec_exit:
1932 if (pass)
1933 mw32(TX_PROD_IDX, (mvi->tx_prod - 1) & (MVS_CHIP_SLOT_SZ - 1));
1934 spin_unlock_irqrestore(&mvi->lock, flags);
1935 return rc;
1936}
1937
1938static int mvs_task_abort(struct sas_task *task)
1939{
1940 int rc = 1;
1941 unsigned long flags;
1942 struct mvs_info *mvi = task->dev->port->ha->lldd_ha;
1943 struct pci_dev *pdev = mvi->pdev;
1944
1945 spin_lock_irqsave(&task->task_state_lock, flags);
1946 if (task->task_state_flags & SAS_TASK_STATE_DONE) {
1947 rc = TMF_RESP_FUNC_COMPLETE;
1948 goto out_done;
1949 }
1950 spin_unlock_irqrestore(&task->task_state_lock, flags);
1951
1952 /*FIXME*/
1953 rc = TMF_RESP_FUNC_COMPLETE;
1954
1955 switch (task->task_proto) {
1956 case SAS_PROTOCOL_SMP:
1957 dev_printk(KERN_DEBUG, &pdev->dev, "SMP Abort! ");
1958 break;
1959 case SAS_PROTOCOL_SSP:
1960 dev_printk(KERN_DEBUG, &pdev->dev, "SSP Abort! ");
1961 break;
1962 case SAS_PROTOCOL_SATA:
1963 case SAS_PROTOCOL_STP:
1964 case SAS_PROTOCOL_SATA | SAS_PROTOCOL_STP:{
1965 dev_printk(KERN_DEBUG, &pdev->dev, "STP Abort! "
1966 "Dump D2H FIS: \n");
1967 mvs_hexdump(sizeof(struct host_to_dev_fis),
1968 (void *)&task->ata_task.fis, 0);
1969 dev_printk(KERN_DEBUG, &pdev->dev, "Dump ATAPI Cmd : \n");
1970 mvs_hexdump(16, task->ata_task.atapi_packet, 0);
1971 break;
1972 }
1973 default:
1974 break;
1975 }
1976out_done:
1977 return rc;
1978}
1979
1980static void mvs_free(struct mvs_info *mvi)
1981{
1982 int i;
1983
1984 if (!mvi)
1985 return;
1986
1987 for (i = 0; i < MVS_SLOTS; i++) {
1988 struct mvs_slot_info *slot = &mvi->slot_info[i];
1989
1990 if (slot->buf)
1991 dma_free_coherent(&mvi->pdev->dev, MVS_SLOT_BUF_SZ,
1992 slot->buf, slot->buf_dma);
1993 }
1994
1995 if (mvi->tx)
1996 dma_free_coherent(&mvi->pdev->dev,
1997 sizeof(*mvi->tx) * MVS_CHIP_SLOT_SZ,
1998 mvi->tx, mvi->tx_dma);
1999 if (mvi->rx_fis)
2000 dma_free_coherent(&mvi->pdev->dev, MVS_RX_FISL_SZ,
2001 mvi->rx_fis, mvi->rx_fis_dma);
2002 if (mvi->rx)
2003 dma_free_coherent(&mvi->pdev->dev,
2004 sizeof(*mvi->rx) * MVS_RX_RING_SZ,
2005 mvi->rx, mvi->rx_dma);
2006 if (mvi->slot)
2007 dma_free_coherent(&mvi->pdev->dev,
2008 sizeof(*mvi->slot) * MVS_SLOTS,
2009 mvi->slot, mvi->slot_dma);
2010#ifdef MVS_ENABLE_PERI
2011 if (mvi->peri_regs)
2012 iounmap(mvi->peri_regs);
2013#endif
2014 if (mvi->regs)
2015 iounmap(mvi->regs);
2016 if (mvi->shost)
2017 scsi_host_put(mvi->shost);
2018 kfree(mvi->sas.sas_port);
2019 kfree(mvi->sas.sas_phy);
2020 kfree(mvi);
2021}
2022
2023/* FIXME: locking? */
2024static int mvs_phy_control(struct asd_sas_phy *sas_phy, enum phy_func func,
2025 void *funcdata)
2026{
2027 struct mvs_info *mvi = sas_phy->ha->lldd_ha;
2028 int rc = 0, phy_id = sas_phy->id;
2029 u32 tmp;
2030
2031 tmp = mvs_read_phy_ctl(mvi, phy_id);
2032
2033 switch (func) {
2034 case PHY_FUNC_SET_LINK_RATE:{
2035 struct sas_phy_linkrates *rates = funcdata;
2036 u32 lrmin = 0, lrmax = 0;
2037
2038 lrmin = (rates->minimum_linkrate << 8);
2039 lrmax = (rates->maximum_linkrate << 12);
2040
2041 if (lrmin) {
2042 tmp &= ~(0xf << 8);
2043 tmp |= lrmin;
2044 }
2045 if (lrmax) {
2046 tmp &= ~(0xf << 12);
2047 tmp |= lrmax;
2048 }
2049 mvs_write_phy_ctl(mvi, phy_id, tmp);
2050 break;
2051 }
2052
2053 case PHY_FUNC_HARD_RESET:
2054 if (tmp & PHY_RST_HARD)
2055 break;
2056 mvs_write_phy_ctl(mvi, phy_id, tmp | PHY_RST_HARD);
2057 break;
2058
2059 case PHY_FUNC_LINK_RESET:
2060 mvs_write_phy_ctl(mvi, phy_id, tmp | PHY_RST);
2061 break;
2062
2063 case PHY_FUNC_DISABLE:
2064 case PHY_FUNC_RELEASE_SPINUP_HOLD:
2065 default:
2066 rc = -EOPNOTSUPP;
2067 }
2068
2069 return rc;
2070}
2071
2072static void __devinit mvs_phy_init(struct mvs_info *mvi, int phy_id)
2073{
2074 struct mvs_phy *phy = &mvi->phy[phy_id];
2075 struct asd_sas_phy *sas_phy = &phy->sas_phy;
2076
2077 sas_phy->enabled = (phy_id < mvi->chip->n_phy) ? 1 : 0;
2078 sas_phy->class = SAS;
2079 sas_phy->iproto = SAS_PROTOCOL_ALL;
2080 sas_phy->tproto = 0;
2081 sas_phy->type = PHY_TYPE_PHYSICAL;
2082 sas_phy->role = PHY_ROLE_INITIATOR;
2083 sas_phy->oob_mode = OOB_NOT_CONNECTED;
2084 sas_phy->linkrate = SAS_LINK_RATE_UNKNOWN;
2085
2086 sas_phy->id = phy_id;
2087 sas_phy->sas_addr = &mvi->sas_addr[0];
2088 sas_phy->frame_rcvd = &phy->frame_rcvd[0];
2089 sas_phy->ha = &mvi->sas;
2090 sas_phy->lldd_phy = phy;
2091}
2092
2093static struct mvs_info *__devinit mvs_alloc(struct pci_dev *pdev,
2094 const struct pci_device_id *ent)
2095{
2096 struct mvs_info *mvi;
2097 unsigned long res_start, res_len, res_flag;
2098 struct asd_sas_phy **arr_phy;
2099 struct asd_sas_port **arr_port;
2100 const struct mvs_chip_info *chip = &mvs_chips[ent->driver_data];
2101 int i;
2102
2103 /*
2104 * alloc and init our per-HBA mvs_info struct
2105 */
2106
2107 mvi = kzalloc(sizeof(*mvi), GFP_KERNEL);
2108 if (!mvi)
2109 return NULL;
2110
2111 spin_lock_init(&mvi->lock);
2112 mvi->pdev = pdev;
2113 mvi->chip = chip;
2114
2115 if (pdev->device == 0x6440 && pdev->revision == 0)
2116 mvi->flags |= MVF_PHY_PWR_FIX;
2117
2118 /*
2119 * alloc and init SCSI, SAS glue
2120 */
2121
2122 mvi->shost = scsi_host_alloc(&mvs_sht, sizeof(void *));
2123 if (!mvi->shost)
2124 goto err_out;
2125
2126 arr_phy = kcalloc(MVS_MAX_PHYS, sizeof(void *), GFP_KERNEL);
2127 arr_port = kcalloc(MVS_MAX_PHYS, sizeof(void *), GFP_KERNEL);
2128 if (!arr_phy || !arr_port)
2129 goto err_out;
2130
2131 for (i = 0; i < MVS_MAX_PHYS; i++) {
2132 mvs_phy_init(mvi, i);
2133 arr_phy[i] = &mvi->phy[i].sas_phy;
2134 arr_port[i] = &mvi->port[i].sas_port;
2135 }
2136
2137 SHOST_TO_SAS_HA(mvi->shost) = &mvi->sas;
2138 mvi->shost->transportt = mvs_stt;
2139 mvi->shost->max_id = 21;
2140 mvi->shost->max_lun = ~0;
2141 mvi->shost->max_channel = 0;
2142 mvi->shost->max_cmd_len = 16;
2143
2144 mvi->sas.sas_ha_name = DRV_NAME;
2145 mvi->sas.dev = &pdev->dev;
2146 mvi->sas.lldd_module = THIS_MODULE;
2147 mvi->sas.sas_addr = &mvi->sas_addr[0];
2148 mvi->sas.sas_phy = arr_phy;
2149 mvi->sas.sas_port = arr_port;
2150 mvi->sas.num_phys = chip->n_phy;
2151 mvi->sas.lldd_max_execute_num = MVS_CHIP_SLOT_SZ - 1;
2152 mvi->sas.lldd_queue_size = MVS_QUEUE_SIZE;
2153 mvi->can_queue = (MVS_CHIP_SLOT_SZ >> 1) - 1;
2154 mvi->sas.lldd_ha = mvi;
2155 mvi->sas.core.shost = mvi->shost;
2156
2157 mvs_tag_init(mvi);
2158
2159 /*
2160 * ioremap main and peripheral registers
2161 */
2162
2163#ifdef MVS_ENABLE_PERI
2164 res_start = pci_resource_start(pdev, 2);
2165 res_len = pci_resource_len(pdev, 2);
2166 if (!res_start || !res_len)
2167 goto err_out;
2168
2169 mvi->peri_regs = ioremap_nocache(res_start, res_len);
2170 if (!mvi->peri_regs)
2171 goto err_out;
2172#endif
2173
2174 res_start = pci_resource_start(pdev, 4);
2175 res_len = pci_resource_len(pdev, 4);
2176 if (!res_start || !res_len)
2177 goto err_out;
2178
2179 res_flag = pci_resource_flags(pdev, 4);
2180 if (res_flag & IORESOURCE_CACHEABLE)
2181 mvi->regs = ioremap(res_start, res_len);
2182 else
2183 mvi->regs = ioremap_nocache(res_start, res_len);
2184
2185 if (!mvi->regs)
2186 goto err_out;
2187
2188 /*
2189 * alloc and init our DMA areas
2190 */
2191
2192 mvi->tx = dma_alloc_coherent(&pdev->dev,
2193 sizeof(*mvi->tx) * MVS_CHIP_SLOT_SZ,
2194 &mvi->tx_dma, GFP_KERNEL);
2195 if (!mvi->tx)
2196 goto err_out;
2197 memset(mvi->tx, 0, sizeof(*mvi->tx) * MVS_CHIP_SLOT_SZ);
2198
2199 mvi->rx_fis = dma_alloc_coherent(&pdev->dev, MVS_RX_FISL_SZ,
2200 &mvi->rx_fis_dma, GFP_KERNEL);
2201 if (!mvi->rx_fis)
2202 goto err_out;
2203 memset(mvi->rx_fis, 0, MVS_RX_FISL_SZ);
2204
2205 mvi->rx = dma_alloc_coherent(&pdev->dev,
2206 sizeof(*mvi->rx) * MVS_RX_RING_SZ,
2207 &mvi->rx_dma, GFP_KERNEL);
2208 if (!mvi->rx)
2209 goto err_out;
2210 memset(mvi->rx, 0, sizeof(*mvi->rx) * MVS_RX_RING_SZ);
2211
2212 mvi->rx[0] = cpu_to_le32(0xfff);
2213 mvi->rx_cons = 0xfff;
2214
2215 mvi->slot = dma_alloc_coherent(&pdev->dev,
2216 sizeof(*mvi->slot) * MVS_SLOTS,
2217 &mvi->slot_dma, GFP_KERNEL);
2218 if (!mvi->slot)
2219 goto err_out;
2220 memset(mvi->slot, 0, sizeof(*mvi->slot) * MVS_SLOTS);
2221
2222 for (i = 0; i < MVS_SLOTS; i++) {
2223 struct mvs_slot_info *slot = &mvi->slot_info[i];
2224
2225 slot->buf = dma_alloc_coherent(&pdev->dev, MVS_SLOT_BUF_SZ,
2226 &slot->buf_dma, GFP_KERNEL);
2227 if (!slot->buf)
2228 goto err_out;
2229 memset(slot->buf, 0, MVS_SLOT_BUF_SZ);
2230 }
2231
2232 /* finally, read NVRAM to get our SAS address */
2233 if (mvs_nvram_read(mvi, NVR_SAS_ADDR, &mvi->sas_addr, 8))
2234 goto err_out;
2235 return mvi;
2236
2237err_out:
2238 mvs_free(mvi);
2239 return NULL;
2240}
2241
2242static u32 mvs_cr32(void __iomem *regs, u32 addr)
2243{
2244 mw32(CMD_ADDR, addr);
2245 return mr32(CMD_DATA);
2246}
2247
2248static void mvs_cw32(void __iomem *regs, u32 addr, u32 val)
2249{
2250 mw32(CMD_ADDR, addr);
2251 mw32(CMD_DATA, val);
2252}
2253
2254static u32 mvs_read_phy_ctl(struct mvs_info *mvi, u32 port)
2255{
2256 void __iomem *regs = mvi->regs;
2257 return (port < 4)?mr32(P0_SER_CTLSTAT + port * 4):
2258 mr32(P4_SER_CTLSTAT + (port - 4) * 4);
2259}
2260
2261static void mvs_write_phy_ctl(struct mvs_info *mvi, u32 port, u32 val)
2262{
2263 void __iomem *regs = mvi->regs;
2264 if (port < 4)
2265 mw32(P0_SER_CTLSTAT + port * 4, val);
2266 else
2267 mw32(P4_SER_CTLSTAT + (port - 4) * 4, val);
2268}
2269
2270static u32 mvs_read_port(struct mvs_info *mvi, u32 off, u32 off2, u32 port)
2271{
2272 void __iomem *regs = mvi->regs + off;
2273 void __iomem *regs2 = mvi->regs + off2;
2274 return (port < 4)?readl(regs + port * 8):
2275 readl(regs2 + (port - 4) * 8);
2276}
2277
2278static void mvs_write_port(struct mvs_info *mvi, u32 off, u32 off2,
2279 u32 port, u32 val)
2280{
2281 void __iomem *regs = mvi->regs + off;
2282 void __iomem *regs2 = mvi->regs + off2;
2283 if (port < 4)
2284 writel(val, regs + port * 8);
2285 else
2286 writel(val, regs2 + (port - 4) * 8);
2287}
2288
2289static u32 mvs_read_port_cfg_data(struct mvs_info *mvi, u32 port)
2290{
2291 return mvs_read_port(mvi, MVS_P0_CFG_DATA, MVS_P4_CFG_DATA, port);
2292}
2293
2294static void mvs_write_port_cfg_data(struct mvs_info *mvi, u32 port, u32 val)
2295{
2296 mvs_write_port(mvi, MVS_P0_CFG_DATA, MVS_P4_CFG_DATA, port, val);
2297}
2298
2299static void mvs_write_port_cfg_addr(struct mvs_info *mvi, u32 port, u32 addr)
2300{
2301 mvs_write_port(mvi, MVS_P0_CFG_ADDR, MVS_P4_CFG_ADDR, port, addr);
2302}
2303
2304static u32 mvs_read_port_vsr_data(struct mvs_info *mvi, u32 port)
2305{
2306 return mvs_read_port(mvi, MVS_P0_VSR_DATA, MVS_P4_VSR_DATA, port);
2307}
2308
2309static void mvs_write_port_vsr_data(struct mvs_info *mvi, u32 port, u32 val)
2310{
2311 mvs_write_port(mvi, MVS_P0_VSR_DATA, MVS_P4_VSR_DATA, port, val);
2312}
2313
2314static void mvs_write_port_vsr_addr(struct mvs_info *mvi, u32 port, u32 addr)
2315{
2316 mvs_write_port(mvi, MVS_P0_VSR_ADDR, MVS_P4_VSR_ADDR, port, addr);
2317}
2318
2319static u32 mvs_read_port_irq_stat(struct mvs_info *mvi, u32 port)
2320{
2321 return mvs_read_port(mvi, MVS_P0_INT_STAT, MVS_P4_INT_STAT, port);
2322}
2323
2324static void mvs_write_port_irq_stat(struct mvs_info *mvi, u32 port, u32 val)
2325{
2326 mvs_write_port(mvi, MVS_P0_INT_STAT, MVS_P4_INT_STAT, port, val);
2327}
2328
2329static u32 mvs_read_port_irq_mask(struct mvs_info *mvi, u32 port)
2330{
2331 return mvs_read_port(mvi, MVS_P0_INT_MASK, MVS_P4_INT_MASK, port);
2332}
2333
2334static void mvs_write_port_irq_mask(struct mvs_info *mvi, u32 port, u32 val)
2335{
2336 mvs_write_port(mvi, MVS_P0_INT_MASK, MVS_P4_INT_MASK, port, val);
2337}
2338
2339static void __devinit mvs_phy_hacks(struct mvs_info *mvi)
2340{
2341 void __iomem *regs = mvi->regs;
2342 u32 tmp;
2343
2344 /* workaround for SATA R-ERR, to ignore phy glitch */
2345 tmp = mvs_cr32(regs, CMD_PHY_TIMER);
2346 tmp &= ~(1 << 9);
2347 tmp |= (1 << 10);
2348 mvs_cw32(regs, CMD_PHY_TIMER, tmp);
2349
2350 /* enable retry 127 times */
2351 mvs_cw32(regs, CMD_SAS_CTL1, 0x7f7f);
2352
2353 /* extend open frame timeout to max */
2354 tmp = mvs_cr32(regs, CMD_SAS_CTL0);
2355 tmp &= ~0xffff;
2356 tmp |= 0x3fff;
2357 mvs_cw32(regs, CMD_SAS_CTL0, tmp);
2358
2359 /* workaround for WDTIMEOUT , set to 550 ms */
2360 mvs_cw32(regs, CMD_WD_TIMER, 0xffffff);
2361
2362 /* not to halt for different port op during wideport link change */
2363 mvs_cw32(regs, CMD_APP_ERR_CONFIG, 0xffefbf7d);
2364
2365 /* workaround for Seagate disk not-found OOB sequence, recv
2366 * COMINIT before sending out COMWAKE */
2367 tmp = mvs_cr32(regs, CMD_PHY_MODE_21);
2368 tmp &= 0x0000ffff;
2369 tmp |= 0x00fa0000;
2370 mvs_cw32(regs, CMD_PHY_MODE_21, tmp);
2371
2372 tmp = mvs_cr32(regs, CMD_PHY_TIMER);
2373 tmp &= 0x1fffffff;
2374 tmp |= (2U << 29); /* 8 ms retry */
2375 mvs_cw32(regs, CMD_PHY_TIMER, tmp);
2376
2377 /* TEST - for phy decoding error, adjust voltage levels */
2378 mw32(P0_VSR_ADDR + 0, 0x8);
2379 mw32(P0_VSR_DATA + 0, 0x2F0);
2380
2381 mw32(P0_VSR_ADDR + 8, 0x8);
2382 mw32(P0_VSR_DATA + 8, 0x2F0);
2383
2384 mw32(P0_VSR_ADDR + 16, 0x8);
2385 mw32(P0_VSR_DATA + 16, 0x2F0);
2386
2387 mw32(P0_VSR_ADDR + 24, 0x8);
2388 mw32(P0_VSR_DATA + 24, 0x2F0);
2389
2390}
2391
2392static void mvs_enable_xmt(struct mvs_info *mvi, int PhyId)
2393{
2394 void __iomem *regs = mvi->regs;
2395 u32 tmp;
2396
2397 tmp = mr32(PCS);
2398 if (mvi->chip->n_phy <= 4)
2399 tmp |= 1 << (PhyId + PCS_EN_PORT_XMT_SHIFT);
2400 else
2401 tmp |= 1 << (PhyId + PCS_EN_PORT_XMT_SHIFT2);
2402 mw32(PCS, tmp);
2403}
2404
2405static void mvs_detect_porttype(struct mvs_info *mvi, int i)
2406{
2407 void __iomem *regs = mvi->regs;
2408 u32 reg;
2409 struct mvs_phy *phy = &mvi->phy[i];
2410
2411 /* TODO check & save device type */
2412 reg = mr32(GBL_PORT_TYPE);
2413
2414 if (reg & MODE_SAS_SATA & (1 << i))
2415 phy->phy_type |= PORT_TYPE_SAS;
2416 else
2417 phy->phy_type |= PORT_TYPE_SATA;
2418}
2419
2420static void *mvs_get_d2h_reg(struct mvs_info *mvi, int i, void *buf)
2421{
2422 u32 *s = (u32 *) buf;
2423
2424 if (!s)
2425 return NULL;
2426
2427 mvs_write_port_cfg_addr(mvi, i, PHYR_SATA_SIG3);
2428 s[3] = mvs_read_port_cfg_data(mvi, i);
2429
2430 mvs_write_port_cfg_addr(mvi, i, PHYR_SATA_SIG2);
2431 s[2] = mvs_read_port_cfg_data(mvi, i);
2432
2433 mvs_write_port_cfg_addr(mvi, i, PHYR_SATA_SIG1);
2434 s[1] = mvs_read_port_cfg_data(mvi, i);
2435
2436 mvs_write_port_cfg_addr(mvi, i, PHYR_SATA_SIG0);
2437 s[0] = mvs_read_port_cfg_data(mvi, i);
2438
2439 return (void *)s;
2440}
2441
2442static u32 mvs_is_sig_fis_received(u32 irq_status)
2443{
2444 return irq_status & PHYEV_SIG_FIS;
2445}
2446
2447static void mvs_update_wideport(struct mvs_info *mvi, int i)
2448{
2449 struct mvs_phy *phy = &mvi->phy[i];
2450 struct mvs_port *port = phy->port;
2451 int j, no;
2452
2453 for_each_phy(port->wide_port_phymap, no, j, mvi->chip->n_phy)
2454 if (no & 1) {
2455 mvs_write_port_cfg_addr(mvi, no, PHYR_WIDE_PORT);
2456 mvs_write_port_cfg_data(mvi, no,
2457 port->wide_port_phymap);
2458 } else {
2459 mvs_write_port_cfg_addr(mvi, no, PHYR_WIDE_PORT);
2460 mvs_write_port_cfg_data(mvi, no, 0);
2461 }
2462}
2463
2464static u32 mvs_is_phy_ready(struct mvs_info *mvi, int i)
2465{
2466 u32 tmp;
2467 struct mvs_phy *phy = &mvi->phy[i];
2468 struct mvs_port *port;
2469
2470 tmp = mvs_read_phy_ctl(mvi, i);
2471
2472 if ((tmp & PHY_READY_MASK) && !(phy->irq_status & PHYEV_POOF)) {
2473 if (!phy->port)
2474 phy->phy_attached = 1;
2475 return tmp;
2476 }
2477
2478 port = phy->port;
2479 if (port) {
2480 if (phy->phy_type & PORT_TYPE_SAS) {
2481 port->wide_port_phymap &= ~(1U << i);
2482 if (!port->wide_port_phymap)
2483 port->port_attached = 0;
2484 mvs_update_wideport(mvi, i);
2485 } else if (phy->phy_type & PORT_TYPE_SATA)
2486 port->port_attached = 0;
2487 mvs_free_reg_set(mvi, phy->port);
2488 phy->port = NULL;
2489 phy->phy_attached = 0;
2490 phy->phy_type &= ~(PORT_TYPE_SAS | PORT_TYPE_SATA);
2491 }
2492 return 0;
2493}
2494
2495static void mvs_update_phyinfo(struct mvs_info *mvi, int i,
2496 int get_st)
2497{
2498 struct mvs_phy *phy = &mvi->phy[i];
2499 struct pci_dev *pdev = mvi->pdev;
2500 u32 tmp, j;
2501 u64 tmp64;
2502
2503 mvs_write_port_cfg_addr(mvi, i, PHYR_IDENTIFY);
2504 phy->dev_info = mvs_read_port_cfg_data(mvi, i);
2505
2506 mvs_write_port_cfg_addr(mvi, i, PHYR_ADDR_HI);
2507 phy->dev_sas_addr = (u64) mvs_read_port_cfg_data(mvi, i) << 32;
2508
2509 mvs_write_port_cfg_addr(mvi, i, PHYR_ADDR_LO);
2510 phy->dev_sas_addr |= mvs_read_port_cfg_data(mvi, i);
2511
2512 if (get_st) {
2513 phy->irq_status = mvs_read_port_irq_stat(mvi, i);
2514 phy->phy_status = mvs_is_phy_ready(mvi, i);
2515 }
2516
2517 if (phy->phy_status) {
2518 u32 phy_st;
2519 struct asd_sas_phy *sas_phy = mvi->sas.sas_phy[i];
2520
2521 mvs_write_port_cfg_addr(mvi, i, PHYR_PHY_STAT);
2522 phy_st = mvs_read_port_cfg_data(mvi, i);
2523
2524 sas_phy->linkrate =
2525 (phy->phy_status & PHY_NEG_SPP_PHYS_LINK_RATE_MASK) >>
2526 PHY_NEG_SPP_PHYS_LINK_RATE_MASK_OFFSET;
2527
2528 /* Updated attached_sas_addr */
2529 mvs_write_port_cfg_addr(mvi, i, PHYR_ATT_ADDR_HI);
2530 phy->att_dev_sas_addr =
2531 (u64) mvs_read_port_cfg_data(mvi, i) << 32;
2532
2533 mvs_write_port_cfg_addr(mvi, i, PHYR_ATT_ADDR_LO);
2534 phy->att_dev_sas_addr |= mvs_read_port_cfg_data(mvi, i);
2535
2536 dev_printk(KERN_DEBUG, &pdev->dev,
2537 "phy[%d] Get Attached Address 0x%llX ,"
2538 " SAS Address 0x%llX\n",
2539 i, phy->att_dev_sas_addr, phy->dev_sas_addr);
2540 dev_printk(KERN_DEBUG, &pdev->dev,
2541 "Rate = %x , type = %d\n",
2542 sas_phy->linkrate, phy->phy_type);
2543
2544#if 1
2545 /*
2546 * If the device is capable of supporting a wide port
2547 * on its phys, it may configure the phys as a wide port.
2548 */
2549 if (phy->phy_type & PORT_TYPE_SAS)
2550 for (j = 0; j < mvi->chip->n_phy && j != i; ++j) {
2551 if ((mvi->phy[j].phy_attached) &&
2552 (mvi->phy[j].phy_type & PORT_TYPE_SAS))
2553 if (phy->att_dev_sas_addr ==
2554 mvi->phy[j].att_dev_sas_addr - 1) {
2555 phy->att_dev_sas_addr =
2556 mvi->phy[j].att_dev_sas_addr;
2557 break;
2558 }
2559 }
2560
2561#endif
2562
2563 tmp64 = cpu_to_be64(phy->att_dev_sas_addr);
2564 memcpy(sas_phy->attached_sas_addr, &tmp64, SAS_ADDR_SIZE);
2565
2566 if (phy->phy_type & PORT_TYPE_SAS) {
2567 mvs_write_port_cfg_addr(mvi, i, PHYR_ATT_DEV_INFO);
2568 phy->att_dev_info = mvs_read_port_cfg_data(mvi, i);
2569 phy->identify.device_type =
2570 phy->att_dev_info & PORT_DEV_TYPE_MASK;
2571
2572 if (phy->identify.device_type == SAS_END_DEV)
2573 phy->identify.target_port_protocols =
2574 SAS_PROTOCOL_SSP;
2575 else if (phy->identify.device_type != NO_DEVICE)
2576 phy->identify.target_port_protocols =
2577 SAS_PROTOCOL_SMP;
2578 if (phy_st & PHY_OOB_DTCTD)
2579 sas_phy->oob_mode = SAS_OOB_MODE;
2580 phy->frame_rcvd_size =
2581 sizeof(struct sas_identify_frame);
2582 } else if (phy->phy_type & PORT_TYPE_SATA) {
2583 phy->identify.target_port_protocols = SAS_PROTOCOL_STP;
2584 if (mvs_is_sig_fis_received(phy->irq_status)) {
2585 if (phy_st & PHY_OOB_DTCTD)
2586 sas_phy->oob_mode = SATA_OOB_MODE;
2587 phy->frame_rcvd_size =
2588 sizeof(struct dev_to_host_fis);
2589 mvs_get_d2h_reg(mvi, i,
2590 (void *)sas_phy->frame_rcvd);
2591 } else {
2592 dev_printk(KERN_DEBUG, &pdev->dev,
2593 "No sig fis\n");
2594 }
2595 }
2596 /* workaround for HW phy decoding error on 1.5g disk drive */
2597 mvs_write_port_vsr_addr(mvi, i, VSR_PHY_MODE6);
2598 tmp = mvs_read_port_vsr_data(mvi, i);
2599 if (((phy->phy_status & PHY_NEG_SPP_PHYS_LINK_RATE_MASK) >>
2600 PHY_NEG_SPP_PHYS_LINK_RATE_MASK_OFFSET) ==
2601 SAS_LINK_RATE_1_5_GBPS)
2602 tmp &= ~PHY_MODE6_DTL_SPEED;
2603 else
2604 tmp |= PHY_MODE6_DTL_SPEED;
2605 mvs_write_port_vsr_data(mvi, i, tmp);
2606
2607 }
2608 if (get_st)
2609 mvs_write_port_irq_stat(mvi, i, phy->irq_status);
2610}
2611
2612static void mvs_port_formed(struct asd_sas_phy *sas_phy)
2613{
2614 struct sas_ha_struct *sas_ha = sas_phy->ha;
2615 struct mvs_info *mvi = sas_ha->lldd_ha;
2616 struct asd_sas_port *sas_port = sas_phy->port;
2617 struct mvs_phy *phy = sas_phy->lldd_phy;
2618 struct mvs_port *port = &mvi->port[sas_port->id];
2619 unsigned long flags;
2620
2621 spin_lock_irqsave(&mvi->lock, flags);
2622 port->port_attached = 1;
2623 phy->port = port;
2624 port->taskfileset = MVS_ID_NOT_MAPPED;
2625 if (phy->phy_type & PORT_TYPE_SAS) {
2626 port->wide_port_phymap = sas_port->phy_mask;
2627 mvs_update_wideport(mvi, sas_phy->id);
2628 }
2629 spin_unlock_irqrestore(&mvi->lock, flags);
2630}
2631
2632static int __devinit mvs_hw_init(struct mvs_info *mvi)
2633{
2634 void __iomem *regs = mvi->regs;
2635 int i;
2636 u32 tmp, cctl;
2637
2638 /* make sure interrupts are masked immediately (paranoia) */
2639 mw32(GBL_CTL, 0);
2640 tmp = mr32(GBL_CTL);
2641
2642 /* Reset Controller */
2643 if (!(tmp & HBA_RST)) {
2644 if (mvi->flags & MVF_PHY_PWR_FIX) {
2645 pci_read_config_dword(mvi->pdev, PCR_PHY_CTL, &tmp);
2646 tmp &= ~PCTL_PWR_ON;
2647 tmp |= PCTL_OFF;
2648 pci_write_config_dword(mvi->pdev, PCR_PHY_CTL, tmp);
2649
2650 pci_read_config_dword(mvi->pdev, PCR_PHY_CTL2, &tmp);
2651 tmp &= ~PCTL_PWR_ON;
2652 tmp |= PCTL_OFF;
2653 pci_write_config_dword(mvi->pdev, PCR_PHY_CTL2, tmp);
2654 }
2655
2656 /* global reset, incl. COMRESET/H_RESET_N (self-clearing) */
2657 mw32_f(GBL_CTL, HBA_RST);
2658 }
2659
2660 /* wait for reset to finish; timeout is just a guess */
2661 i = 1000;
2662 while (i-- > 0) {
2663 msleep(10);
2664
2665 if (!(mr32(GBL_CTL) & HBA_RST))
2666 break;
2667 }
2668 if (mr32(GBL_CTL) & HBA_RST) {
2669 dev_printk(KERN_ERR, &mvi->pdev->dev, "HBA reset failed\n");
2670 return -EBUSY;
2671 }
2672
2673 /* Init Chip */
2674 /* make sure RST is set; HBA_RST /should/ have done that for us */
2675 cctl = mr32(CTL);
2676 if (cctl & CCTL_RST)
2677 cctl &= ~CCTL_RST;
2678 else
2679 mw32_f(CTL, cctl | CCTL_RST);
2680
2681 /* write to device control _AND_ device status register? - A.C. */
2682 pci_read_config_dword(mvi->pdev, PCR_DEV_CTRL, &tmp);
2683 tmp &= ~PRD_REQ_MASK;
2684 tmp |= PRD_REQ_SIZE;
2685 pci_write_config_dword(mvi->pdev, PCR_DEV_CTRL, tmp);
2686
2687 pci_read_config_dword(mvi->pdev, PCR_PHY_CTL, &tmp);
2688 tmp |= PCTL_PWR_ON;
2689 tmp &= ~PCTL_OFF;
2690 pci_write_config_dword(mvi->pdev, PCR_PHY_CTL, tmp);
2691
2692 pci_read_config_dword(mvi->pdev, PCR_PHY_CTL2, &tmp);
2693 tmp |= PCTL_PWR_ON;
2694 tmp &= ~PCTL_OFF;
2695 pci_write_config_dword(mvi->pdev, PCR_PHY_CTL2, tmp);
2696
2697 mw32_f(CTL, cctl);
2698
2699 /* reset control */
2700 mw32(PCS, 0); /*MVS_PCS */
2701
2702 mvs_phy_hacks(mvi);
2703
2704 mw32(CMD_LIST_LO, mvi->slot_dma);
2705 mw32(CMD_LIST_HI, (mvi->slot_dma >> 16) >> 16);
2706
2707 mw32(RX_FIS_LO, mvi->rx_fis_dma);
2708 mw32(RX_FIS_HI, (mvi->rx_fis_dma >> 16) >> 16);
2709
2710 mw32(TX_CFG, MVS_CHIP_SLOT_SZ);
2711 mw32(TX_LO, mvi->tx_dma);
2712 mw32(TX_HI, (mvi->tx_dma >> 16) >> 16);
2713
2714 mw32(RX_CFG, MVS_RX_RING_SZ);
2715 mw32(RX_LO, mvi->rx_dma);
2716 mw32(RX_HI, (mvi->rx_dma >> 16) >> 16);
2717
2718 /* enable auto port detection */
2719 mw32(GBL_PORT_TYPE, MODE_AUTO_DET_EN);
2720 msleep(100);
2721 /* init and reset phys */
2722 for (i = 0; i < mvi->chip->n_phy; i++) {
2723 /* FIXME: is this the correct dword order? */
2724 u32 lo = *((u32 *)&mvi->sas_addr[0]);
2725 u32 hi = *((u32 *)&mvi->sas_addr[4]);
2726
2727 mvs_detect_porttype(mvi, i);
2728
2729 /* set phy local SAS address */
2730 mvs_write_port_cfg_addr(mvi, i, PHYR_ADDR_LO);
2731 mvs_write_port_cfg_data(mvi, i, lo);
2732 mvs_write_port_cfg_addr(mvi, i, PHYR_ADDR_HI);
2733 mvs_write_port_cfg_data(mvi, i, hi);
2734
2735 /* reset phy */
2736 tmp = mvs_read_phy_ctl(mvi, i);
2737 tmp |= PHY_RST;
2738 mvs_write_phy_ctl(mvi, i, tmp);
2739 }
2740
2741 msleep(100);
2742
2743 for (i = 0; i < mvi->chip->n_phy; i++) {
2744 /* clear phy int status */
2745 tmp = mvs_read_port_irq_stat(mvi, i);
2746 tmp &= ~PHYEV_SIG_FIS;
2747 mvs_write_port_irq_stat(mvi, i, tmp);
2748
2749 /* set phy int mask */
2750 tmp = PHYEV_RDY_CH | PHYEV_BROAD_CH | PHYEV_UNASSOC_FIS |
2751 PHYEV_ID_DONE | PHYEV_DEC_ERR;
2752 mvs_write_port_irq_mask(mvi, i, tmp);
2753
2754 msleep(100);
2755 mvs_update_phyinfo(mvi, i, 1);
2756 mvs_enable_xmt(mvi, i);
2757 }
2758
2759 /* FIXME: update wide port bitmaps */
2760
2761 /* little endian for open address and command table, etc. */
2762 /* A.C.
2763 * it seems that ( from the spec ) turning on big-endian won't
2764 * do us any good on big-endian machines, need further confirmation
2765 */
2766 cctl = mr32(CTL);
2767 cctl |= CCTL_ENDIAN_CMD;
2768 cctl |= CCTL_ENDIAN_DATA;
2769 cctl &= ~CCTL_ENDIAN_OPEN;
2770 cctl |= CCTL_ENDIAN_RSP;
2771 mw32_f(CTL, cctl);
2772
2773 /* reset CMD queue */
2774 tmp = mr32(PCS);
2775 tmp |= PCS_CMD_RST;
2776 mw32(PCS, tmp);
2777 /* interrupt coalescing may cause missing HW interrput in some case,
2778 * and the max count is 0x1ff, while our max slot is 0x200,
2779 * it will make count 0.
2780 */
2781 tmp = 0;
2782 mw32(INT_COAL, tmp);
2783
2784 tmp = 0x100;
2785 mw32(INT_COAL_TMOUT, tmp);
2786
2787 /* ladies and gentlemen, start your engines */
2788 mw32(TX_CFG, 0);
2789 mw32(TX_CFG, MVS_CHIP_SLOT_SZ | TX_EN);
2790 mw32(RX_CFG, MVS_RX_RING_SZ | RX_EN);
2791 /* enable CMD/CMPL_Q/RESP mode */
2792 mw32(PCS, PCS_SATA_RETRY | PCS_FIS_RX_EN | PCS_CMD_EN);
2793
2794 /* re-enable interrupts globally */
2795 mvs_hba_interrupt_enable(mvi);
2796
2797 /* enable completion queue interrupt */
2798 tmp = (CINT_PORT_MASK | CINT_DONE | CINT_MEM);
2799 mw32(INT_MASK, tmp);
2800
2801 return 0;
2802}
2803
2804static void __devinit mvs_print_info(struct mvs_info *mvi)
2805{
2806 struct pci_dev *pdev = mvi->pdev;
2807 static int printed_version;
2808
2809 if (!printed_version++)
2810 dev_printk(KERN_INFO, &pdev->dev, "version " DRV_VERSION "\n");
2811
2812 dev_printk(KERN_INFO, &pdev->dev, "%u phys, addr %llx\n",
2813 mvi->chip->n_phy, SAS_ADDR(mvi->sas_addr));
2814}
2815
2816static int __devinit mvs_pci_init(struct pci_dev *pdev,
2817 const struct pci_device_id *ent)
2818{
2819 int rc;
2820 struct mvs_info *mvi;
2821 irq_handler_t irq_handler = mvs_interrupt;
2822
2823 rc = pci_enable_device(pdev);
2824 if (rc)
2825 return rc;
2826
2827 pci_set_master(pdev);
2828
2829 rc = pci_request_regions(pdev, DRV_NAME);
2830 if (rc)
2831 goto err_out_disable;
2832
2833 rc = pci_go_64(pdev);
2834 if (rc)
2835 goto err_out_regions;
2836
2837 mvi = mvs_alloc(pdev, ent);
2838 if (!mvi) {
2839 rc = -ENOMEM;
2840 goto err_out_regions;
2841 }
2842
2843 rc = mvs_hw_init(mvi);
2844 if (rc)
2845 goto err_out_mvi;
2846
2847#ifndef MVS_DISABLE_MSI
2848 if (!pci_enable_msi(pdev)) {
2849 u32 tmp;
2850 void __iomem *regs = mvi->regs;
2851 mvi->flags |= MVF_MSI;
2852 irq_handler = mvs_msi_interrupt;
2853 tmp = mr32(PCS);
2854 mw32(PCS, tmp | PCS_SELF_CLEAR);
2855 }
2856#endif
2857
2858 rc = request_irq(pdev->irq, irq_handler, IRQF_SHARED, DRV_NAME, mvi);
2859 if (rc)
2860 goto err_out_msi;
2861
2862 rc = scsi_add_host(mvi->shost, &pdev->dev);
2863 if (rc)
2864 goto err_out_irq;
2865
2866 rc = sas_register_ha(&mvi->sas);
2867 if (rc)
2868 goto err_out_shost;
2869
2870 pci_set_drvdata(pdev, mvi);
2871
2872 mvs_print_info(mvi);
2873
2874 scsi_scan_host(mvi->shost);
2875
2876 return 0;
2877
2878err_out_shost:
2879 scsi_remove_host(mvi->shost);
2880err_out_irq:
2881 free_irq(pdev->irq, mvi);
2882err_out_msi:
2883 if (mvi->flags |= MVF_MSI)
2884 pci_disable_msi(pdev);
2885err_out_mvi:
2886 mvs_free(mvi);
2887err_out_regions:
2888 pci_release_regions(pdev);
2889err_out_disable:
2890 pci_disable_device(pdev);
2891 return rc;
2892}
2893
2894static void __devexit mvs_pci_remove(struct pci_dev *pdev)
2895{
2896 struct mvs_info *mvi = pci_get_drvdata(pdev);
2897
2898 pci_set_drvdata(pdev, NULL);
2899
2900 if (mvi) {
2901 sas_unregister_ha(&mvi->sas);
2902 mvs_hba_interrupt_disable(mvi);
2903 sas_remove_host(mvi->shost);
2904 scsi_remove_host(mvi->shost);
2905
2906 free_irq(pdev->irq, mvi);
2907 if (mvi->flags & MVF_MSI)
2908 pci_disable_msi(pdev);
2909 mvs_free(mvi);
2910 pci_release_regions(pdev);
2911 }
2912 pci_disable_device(pdev);
2913}
2914
2915static struct sas_domain_function_template mvs_transport_ops = {
2916 .lldd_execute_task = mvs_task_exec,
2917 .lldd_control_phy = mvs_phy_control,
2918 .lldd_abort_task = mvs_task_abort,
2919 .lldd_port_formed = mvs_port_formed
2920};
2921
2922static struct pci_device_id __devinitdata mvs_pci_table[] = {
2923 { PCI_VDEVICE(MARVELL, 0x6320), chip_6320 },
2924 { PCI_VDEVICE(MARVELL, 0x6340), chip_6440 },
2925 { PCI_VDEVICE(MARVELL, 0x6440), chip_6440 },
2926 { PCI_VDEVICE(MARVELL, 0x6480), chip_6480 },
2927
2928 { } /* terminate list */
2929};
2930
2931static struct pci_driver mvs_pci_driver = {
2932 .name = DRV_NAME,
2933 .id_table = mvs_pci_table,
2934 .probe = mvs_pci_init,
2935 .remove = __devexit_p(mvs_pci_remove),
2936};
2937
2938static int __init mvs_init(void)
2939{
2940 int rc;
2941
2942 mvs_stt = sas_domain_attach_transport(&mvs_transport_ops);
2943 if (!mvs_stt)
2944 return -ENOMEM;
2945
2946 rc = pci_register_driver(&mvs_pci_driver);
2947 if (rc)
2948 goto err_out;
2949
2950 return 0;
2951
2952err_out:
2953 sas_release_transport(mvs_stt);
2954 return rc;
2955}
2956
2957static void __exit mvs_exit(void)
2958{
2959 pci_unregister_driver(&mvs_pci_driver);
2960 sas_release_transport(mvs_stt);
2961}
2962
2963module_init(mvs_init);
2964module_exit(mvs_exit);
2965
2966MODULE_AUTHOR("Jeff Garzik <jgarzik@pobox.com>");
2967MODULE_DESCRIPTION("Marvell 88SE6440 SAS/SATA controller driver");
2968MODULE_VERSION(DRV_VERSION);
2969MODULE_LICENSE("GPL");
2970MODULE_DEVICE_TABLE(pci, mvs_pci_table);
diff --git a/drivers/scsi/qla2xxx/qla_dfs.c b/drivers/scsi/qla2xxx/qla_dfs.c
index 1479c60441c8..2cd899bfe84b 100644
--- a/drivers/scsi/qla2xxx/qla_dfs.c
+++ b/drivers/scsi/qla2xxx/qla_dfs.c
@@ -23,7 +23,7 @@ qla2x00_dfs_fce_show(struct seq_file *s, void *unused)
23 mutex_lock(&ha->fce_mutex); 23 mutex_lock(&ha->fce_mutex);
24 24
25 seq_printf(s, "FCE Trace Buffer\n"); 25 seq_printf(s, "FCE Trace Buffer\n");
26 seq_printf(s, "In Pointer = %llx\n\n", ha->fce_wr); 26 seq_printf(s, "In Pointer = %llx\n\n", (unsigned long long)ha->fce_wr);
27 seq_printf(s, "Base = %llx\n\n", (unsigned long long) ha->fce_dma); 27 seq_printf(s, "Base = %llx\n\n", (unsigned long long) ha->fce_dma);
28 seq_printf(s, "FCE Enable Registers\n"); 28 seq_printf(s, "FCE Enable Registers\n");
29 seq_printf(s, "%08x %08x %08x %08x %08x %08x\n", 29 seq_printf(s, "%08x %08x %08x %08x %08x %08x\n",
diff --git a/drivers/scsi/qla4xxx/ql4_isr.c b/drivers/scsi/qla4xxx/ql4_isr.c
index 0f029d0d7315..fc84db4069f4 100644
--- a/drivers/scsi/qla4xxx/ql4_isr.c
+++ b/drivers/scsi/qla4xxx/ql4_isr.c
@@ -100,8 +100,7 @@ static void qla4xxx_status_entry(struct scsi_qla_host *ha,
100 100
101 if (sts_entry->iscsiFlags &ISCSI_FLAG_RESIDUAL_UNDER) { 101 if (sts_entry->iscsiFlags &ISCSI_FLAG_RESIDUAL_UNDER) {
102 scsi_set_resid(cmd, residual); 102 scsi_set_resid(cmd, residual);
103 if (!scsi_status && ((scsi_bufflen(cmd) - residual) < 103 if ((scsi_bufflen(cmd) - residual) < cmd->underflow) {
104 cmd->underflow)) {
105 104
106 cmd->result = DID_ERROR << 16; 105 cmd->result = DID_ERROR << 16;
107 106
diff --git a/drivers/scsi/qlogicpti.c b/drivers/scsi/qlogicpti.c
index 65455ab1f3b9..4a1cf6377f6c 100644
--- a/drivers/scsi/qlogicpti.c
+++ b/drivers/scsi/qlogicpti.c
@@ -651,7 +651,7 @@ static int qlogicpti_verify_tmon(struct qlogicpti *qpti)
651 651
652static irqreturn_t qpti_intr(int irq, void *dev_id); 652static irqreturn_t qpti_intr(int irq, void *dev_id);
653 653
654static void __init qpti_chain_add(struct qlogicpti *qpti) 654static void __devinit qpti_chain_add(struct qlogicpti *qpti)
655{ 655{
656 spin_lock_irq(&qptichain_lock); 656 spin_lock_irq(&qptichain_lock);
657 if (qptichain != NULL) { 657 if (qptichain != NULL) {
@@ -667,7 +667,7 @@ static void __init qpti_chain_add(struct qlogicpti *qpti)
667 spin_unlock_irq(&qptichain_lock); 667 spin_unlock_irq(&qptichain_lock);
668} 668}
669 669
670static void __init qpti_chain_del(struct qlogicpti *qpti) 670static void __devexit qpti_chain_del(struct qlogicpti *qpti)
671{ 671{
672 spin_lock_irq(&qptichain_lock); 672 spin_lock_irq(&qptichain_lock);
673 if (qptichain == qpti) { 673 if (qptichain == qpti) {
@@ -682,7 +682,7 @@ static void __init qpti_chain_del(struct qlogicpti *qpti)
682 spin_unlock_irq(&qptichain_lock); 682 spin_unlock_irq(&qptichain_lock);
683} 683}
684 684
685static int __init qpti_map_regs(struct qlogicpti *qpti) 685static int __devinit qpti_map_regs(struct qlogicpti *qpti)
686{ 686{
687 struct sbus_dev *sdev = qpti->sdev; 687 struct sbus_dev *sdev = qpti->sdev;
688 688
@@ -705,7 +705,7 @@ static int __init qpti_map_regs(struct qlogicpti *qpti)
705 return 0; 705 return 0;
706} 706}
707 707
708static int __init qpti_register_irq(struct qlogicpti *qpti) 708static int __devinit qpti_register_irq(struct qlogicpti *qpti)
709{ 709{
710 struct sbus_dev *sdev = qpti->sdev; 710 struct sbus_dev *sdev = qpti->sdev;
711 711
@@ -730,7 +730,7 @@ fail:
730 return -1; 730 return -1;
731} 731}
732 732
733static void __init qpti_get_scsi_id(struct qlogicpti *qpti) 733static void __devinit qpti_get_scsi_id(struct qlogicpti *qpti)
734{ 734{
735 qpti->scsi_id = prom_getintdefault(qpti->prom_node, 735 qpti->scsi_id = prom_getintdefault(qpti->prom_node,
736 "initiator-id", 736 "initiator-id",
@@ -783,7 +783,7 @@ static void qpti_get_clock(struct qlogicpti *qpti)
783/* The request and response queues must each be aligned 783/* The request and response queues must each be aligned
784 * on a page boundary. 784 * on a page boundary.
785 */ 785 */
786static int __init qpti_map_queues(struct qlogicpti *qpti) 786static int __devinit qpti_map_queues(struct qlogicpti *qpti)
787{ 787{
788 struct sbus_dev *sdev = qpti->sdev; 788 struct sbus_dev *sdev = qpti->sdev;
789 789
diff --git a/drivers/scsi/scsi_debug.c b/drivers/scsi/scsi_debug.c
index 1541c174937a..d1777a9a9625 100644
--- a/drivers/scsi/scsi_debug.c
+++ b/drivers/scsi/scsi_debug.c
@@ -222,7 +222,7 @@ static struct scsi_host_template sdebug_driver_template = {
222 .cmd_per_lun = 16, 222 .cmd_per_lun = 16,
223 .max_sectors = 0xffff, 223 .max_sectors = 0xffff,
224 .unchecked_isa_dma = 0, 224 .unchecked_isa_dma = 0,
225 .use_clustering = ENABLE_CLUSTERING, 225 .use_clustering = DISABLE_CLUSTERING,
226 .module = THIS_MODULE, 226 .module = THIS_MODULE,
227}; 227};
228 228
diff --git a/drivers/scsi/scsi_lib.c b/drivers/scsi/scsi_lib.c
index 135c1d054701..ba21d97d1855 100644
--- a/drivers/scsi/scsi_lib.c
+++ b/drivers/scsi/scsi_lib.c
@@ -1014,10 +1014,6 @@ static int scsi_init_sgtable(struct request *req, struct scsi_data_buffer *sdb,
1014 } 1014 }
1015 1015
1016 req->buffer = NULL; 1016 req->buffer = NULL;
1017 if (blk_pc_request(req))
1018 sdb->length = req->data_len;
1019 else
1020 sdb->length = req->nr_sectors << 9;
1021 1017
1022 /* 1018 /*
1023 * Next, walk the list, and fill in the addresses and sizes of 1019 * Next, walk the list, and fill in the addresses and sizes of
@@ -1026,6 +1022,10 @@ static int scsi_init_sgtable(struct request *req, struct scsi_data_buffer *sdb,
1026 count = blk_rq_map_sg(req->q, req, sdb->table.sgl); 1022 count = blk_rq_map_sg(req->q, req, sdb->table.sgl);
1027 BUG_ON(count > sdb->table.nents); 1023 BUG_ON(count > sdb->table.nents);
1028 sdb->table.nents = count; 1024 sdb->table.nents = count;
1025 if (blk_pc_request(req))
1026 sdb->length = req->data_len;
1027 else
1028 sdb->length = req->nr_sectors << 9;
1029 return BLKPREP_OK; 1029 return BLKPREP_OK;
1030} 1030}
1031 1031
diff --git a/drivers/scsi/scsi_transport_iscsi.c b/drivers/scsi/scsi_transport_iscsi.c
index fac7534f3ec4..9981682d5302 100644
--- a/drivers/scsi/scsi_transport_iscsi.c
+++ b/drivers/scsi/scsi_transport_iscsi.c
@@ -231,7 +231,7 @@ static struct {
231 { ISCSI_SESSION_FREE, "FREE" }, 231 { ISCSI_SESSION_FREE, "FREE" },
232}; 232};
233 233
234const char *iscsi_session_state_name(int state) 234static const char *iscsi_session_state_name(int state)
235{ 235{
236 int i; 236 int i;
237 char *name = NULL; 237 char *name = NULL;
@@ -373,7 +373,7 @@ static void session_recovery_timedout(struct work_struct *work)
373 scsi_target_unblock(&session->dev); 373 scsi_target_unblock(&session->dev);
374} 374}
375 375
376void __iscsi_unblock_session(struct iscsi_cls_session *session) 376static void __iscsi_unblock_session(struct iscsi_cls_session *session)
377{ 377{
378 if (!cancel_delayed_work(&session->recovery_work)) 378 if (!cancel_delayed_work(&session->recovery_work))
379 flush_workqueue(iscsi_eh_timer_workq); 379 flush_workqueue(iscsi_eh_timer_workq);
diff --git a/drivers/scsi/sd.c b/drivers/scsi/sd.c
index 37df8bbe7f46..7aee64dbfbeb 100644
--- a/drivers/scsi/sd.c
+++ b/drivers/scsi/sd.c
@@ -1835,8 +1835,7 @@ static int sd_suspend(struct device *dev, pm_message_t mesg)
1835 goto done; 1835 goto done;
1836 } 1836 }
1837 1837
1838 if (mesg.event == PM_EVENT_SUSPEND && 1838 if ((mesg.event & PM_EVENT_SLEEP) && sdkp->device->manage_start_stop) {
1839 sdkp->device->manage_start_stop) {
1840 sd_printk(KERN_NOTICE, sdkp, "Stopping disk\n"); 1839 sd_printk(KERN_NOTICE, sdkp, "Stopping disk\n");
1841 ret = sd_start_stop_device(sdkp, 0); 1840 ret = sd_start_stop_device(sdkp, 0);
1842 } 1841 }
diff --git a/drivers/scsi/ses.c b/drivers/scsi/ses.c
index a57fed47b39d..a6d96694d0a5 100644
--- a/drivers/scsi/ses.c
+++ b/drivers/scsi/ses.c
@@ -33,9 +33,9 @@
33#include <scsi/scsi_host.h> 33#include <scsi/scsi_host.h>
34 34
35struct ses_device { 35struct ses_device {
36 char *page1; 36 unsigned char *page1;
37 char *page2; 37 unsigned char *page2;
38 char *page10; 38 unsigned char *page10;
39 short page1_len; 39 short page1_len;
40 short page2_len; 40 short page2_len;
41 short page10_len; 41 short page10_len;
@@ -67,7 +67,7 @@ static int ses_probe(struct device *dev)
67static int ses_recv_diag(struct scsi_device *sdev, int page_code, 67static int ses_recv_diag(struct scsi_device *sdev, int page_code,
68 void *buf, int bufflen) 68 void *buf, int bufflen)
69{ 69{
70 char cmd[] = { 70 unsigned char cmd[] = {
71 RECEIVE_DIAGNOSTIC, 71 RECEIVE_DIAGNOSTIC,
72 1, /* Set PCV bit */ 72 1, /* Set PCV bit */
73 page_code, 73 page_code,
@@ -85,7 +85,7 @@ static int ses_send_diag(struct scsi_device *sdev, int page_code,
85{ 85{
86 u32 result; 86 u32 result;
87 87
88 char cmd[] = { 88 unsigned char cmd[] = {
89 SEND_DIAGNOSTIC, 89 SEND_DIAGNOSTIC,
90 0x10, /* Set PF bit */ 90 0x10, /* Set PF bit */
91 0, 91 0,
@@ -104,13 +104,13 @@ static int ses_send_diag(struct scsi_device *sdev, int page_code,
104 104
105static int ses_set_page2_descriptor(struct enclosure_device *edev, 105static int ses_set_page2_descriptor(struct enclosure_device *edev,
106 struct enclosure_component *ecomp, 106 struct enclosure_component *ecomp,
107 char *desc) 107 unsigned char *desc)
108{ 108{
109 int i, j, count = 0, descriptor = ecomp->number; 109 int i, j, count = 0, descriptor = ecomp->number;
110 struct scsi_device *sdev = to_scsi_device(edev->cdev.dev); 110 struct scsi_device *sdev = to_scsi_device(edev->cdev.dev);
111 struct ses_device *ses_dev = edev->scratch; 111 struct ses_device *ses_dev = edev->scratch;
112 char *type_ptr = ses_dev->page1 + 12 + ses_dev->page1[11]; 112 unsigned char *type_ptr = ses_dev->page1 + 12 + ses_dev->page1[11];
113 char *desc_ptr = ses_dev->page2 + 8; 113 unsigned char *desc_ptr = ses_dev->page2 + 8;
114 114
115 /* Clear everything */ 115 /* Clear everything */
116 memset(desc_ptr, 0, ses_dev->page2_len - 8); 116 memset(desc_ptr, 0, ses_dev->page2_len - 8);
@@ -133,14 +133,14 @@ static int ses_set_page2_descriptor(struct enclosure_device *edev,
133 return ses_send_diag(sdev, 2, ses_dev->page2, ses_dev->page2_len); 133 return ses_send_diag(sdev, 2, ses_dev->page2, ses_dev->page2_len);
134} 134}
135 135
136static char *ses_get_page2_descriptor(struct enclosure_device *edev, 136static unsigned char *ses_get_page2_descriptor(struct enclosure_device *edev,
137 struct enclosure_component *ecomp) 137 struct enclosure_component *ecomp)
138{ 138{
139 int i, j, count = 0, descriptor = ecomp->number; 139 int i, j, count = 0, descriptor = ecomp->number;
140 struct scsi_device *sdev = to_scsi_device(edev->cdev.dev); 140 struct scsi_device *sdev = to_scsi_device(edev->cdev.dev);
141 struct ses_device *ses_dev = edev->scratch; 141 struct ses_device *ses_dev = edev->scratch;
142 char *type_ptr = ses_dev->page1 + 12 + ses_dev->page1[11]; 142 unsigned char *type_ptr = ses_dev->page1 + 12 + ses_dev->page1[11];
143 char *desc_ptr = ses_dev->page2 + 8; 143 unsigned char *desc_ptr = ses_dev->page2 + 8;
144 144
145 ses_recv_diag(sdev, 2, ses_dev->page2, ses_dev->page2_len); 145 ses_recv_diag(sdev, 2, ses_dev->page2, ses_dev->page2_len);
146 146
@@ -160,17 +160,18 @@ static char *ses_get_page2_descriptor(struct enclosure_device *edev,
160static void ses_get_fault(struct enclosure_device *edev, 160static void ses_get_fault(struct enclosure_device *edev,
161 struct enclosure_component *ecomp) 161 struct enclosure_component *ecomp)
162{ 162{
163 char *desc; 163 unsigned char *desc;
164 164
165 desc = ses_get_page2_descriptor(edev, ecomp); 165 desc = ses_get_page2_descriptor(edev, ecomp);
166 ecomp->fault = (desc[3] & 0x60) >> 4; 166 if (desc)
167 ecomp->fault = (desc[3] & 0x60) >> 4;
167} 168}
168 169
169static int ses_set_fault(struct enclosure_device *edev, 170static int ses_set_fault(struct enclosure_device *edev,
170 struct enclosure_component *ecomp, 171 struct enclosure_component *ecomp,
171 enum enclosure_component_setting val) 172 enum enclosure_component_setting val)
172{ 173{
173 char desc[4] = {0 }; 174 unsigned char desc[4] = {0 };
174 175
175 switch (val) { 176 switch (val) {
176 case ENCLOSURE_SETTING_DISABLED: 177 case ENCLOSURE_SETTING_DISABLED:
@@ -190,26 +191,28 @@ static int ses_set_fault(struct enclosure_device *edev,
190static void ses_get_status(struct enclosure_device *edev, 191static void ses_get_status(struct enclosure_device *edev,
191 struct enclosure_component *ecomp) 192 struct enclosure_component *ecomp)
192{ 193{
193 char *desc; 194 unsigned char *desc;
194 195
195 desc = ses_get_page2_descriptor(edev, ecomp); 196 desc = ses_get_page2_descriptor(edev, ecomp);
196 ecomp->status = (desc[0] & 0x0f); 197 if (desc)
198 ecomp->status = (desc[0] & 0x0f);
197} 199}
198 200
199static void ses_get_locate(struct enclosure_device *edev, 201static void ses_get_locate(struct enclosure_device *edev,
200 struct enclosure_component *ecomp) 202 struct enclosure_component *ecomp)
201{ 203{
202 char *desc; 204 unsigned char *desc;
203 205
204 desc = ses_get_page2_descriptor(edev, ecomp); 206 desc = ses_get_page2_descriptor(edev, ecomp);
205 ecomp->locate = (desc[2] & 0x02) ? 1 : 0; 207 if (desc)
208 ecomp->locate = (desc[2] & 0x02) ? 1 : 0;
206} 209}
207 210
208static int ses_set_locate(struct enclosure_device *edev, 211static int ses_set_locate(struct enclosure_device *edev,
209 struct enclosure_component *ecomp, 212 struct enclosure_component *ecomp,
210 enum enclosure_component_setting val) 213 enum enclosure_component_setting val)
211{ 214{
212 char desc[4] = {0 }; 215 unsigned char desc[4] = {0 };
213 216
214 switch (val) { 217 switch (val) {
215 case ENCLOSURE_SETTING_DISABLED: 218 case ENCLOSURE_SETTING_DISABLED:
@@ -229,7 +232,7 @@ static int ses_set_active(struct enclosure_device *edev,
229 struct enclosure_component *ecomp, 232 struct enclosure_component *ecomp,
230 enum enclosure_component_setting val) 233 enum enclosure_component_setting val)
231{ 234{
232 char desc[4] = {0 }; 235 unsigned char desc[4] = {0 };
233 236
234 switch (val) { 237 switch (val) {
235 case ENCLOSURE_SETTING_DISABLED: 238 case ENCLOSURE_SETTING_DISABLED:
@@ -409,11 +412,11 @@ static int ses_intf_add(struct class_device *cdev,
409{ 412{
410 struct scsi_device *sdev = to_scsi_device(cdev->dev); 413 struct scsi_device *sdev = to_scsi_device(cdev->dev);
411 struct scsi_device *tmp_sdev; 414 struct scsi_device *tmp_sdev;
412 unsigned char *buf = NULL, *hdr_buf, *type_ptr, *desc_ptr, 415 unsigned char *buf = NULL, *hdr_buf, *type_ptr, *desc_ptr = NULL,
413 *addl_desc_ptr; 416 *addl_desc_ptr = NULL;
414 struct ses_device *ses_dev; 417 struct ses_device *ses_dev;
415 u32 result; 418 u32 result;
416 int i, j, types, len, components = 0; 419 int i, j, types, len, page7_len = 0, components = 0;
417 int err = -ENOMEM; 420 int err = -ENOMEM;
418 struct enclosure_device *edev; 421 struct enclosure_device *edev;
419 struct ses_component *scomp = NULL; 422 struct ses_component *scomp = NULL;
@@ -447,7 +450,7 @@ static int ses_intf_add(struct class_device *cdev,
447 * traversal routines more complex */ 450 * traversal routines more complex */
448 sdev_printk(KERN_ERR, sdev, 451 sdev_printk(KERN_ERR, sdev,
449 "FIXME driver has no support for subenclosures (%d)\n", 452 "FIXME driver has no support for subenclosures (%d)\n",
450 buf[1]); 453 hdr_buf[1]);
451 goto err_free; 454 goto err_free;
452 } 455 }
453 456
@@ -461,9 +464,8 @@ static int ses_intf_add(struct class_device *cdev,
461 goto recv_failed; 464 goto recv_failed;
462 465
463 types = buf[10]; 466 types = buf[10];
464 len = buf[11];
465 467
466 type_ptr = buf + 12 + len; 468 type_ptr = buf + 12 + buf[11];
467 469
468 for (i = 0; i < types; i++, type_ptr += 4) { 470 for (i = 0; i < types; i++, type_ptr += 4) {
469 if (type_ptr[0] == ENCLOSURE_COMPONENT_DEVICE || 471 if (type_ptr[0] == ENCLOSURE_COMPONENT_DEVICE ||
@@ -494,22 +496,21 @@ static int ses_intf_add(struct class_device *cdev,
494 /* The additional information page --- allows us 496 /* The additional information page --- allows us
495 * to match up the devices */ 497 * to match up the devices */
496 result = ses_recv_diag(sdev, 10, hdr_buf, INIT_ALLOC_SIZE); 498 result = ses_recv_diag(sdev, 10, hdr_buf, INIT_ALLOC_SIZE);
497 if (result) 499 if (!result) {
498 goto no_page10; 500
499 501 len = (hdr_buf[2] << 8) + hdr_buf[3] + 4;
500 len = (hdr_buf[2] << 8) + hdr_buf[3] + 4; 502 buf = kzalloc(len, GFP_KERNEL);
501 buf = kzalloc(len, GFP_KERNEL); 503 if (!buf)
502 if (!buf) 504 goto err_free;
503 goto err_free; 505
504 506 result = ses_recv_diag(sdev, 10, buf, len);
505 result = ses_recv_diag(sdev, 10, buf, len); 507 if (result)
506 if (result) 508 goto recv_failed;
507 goto recv_failed; 509 ses_dev->page10 = buf;
508 ses_dev->page10 = buf; 510 ses_dev->page10_len = len;
509 ses_dev->page10_len = len; 511 buf = NULL;
510 buf = NULL; 512 }
511 513
512 no_page10:
513 scomp = kzalloc(sizeof(struct ses_component) * components, GFP_KERNEL); 514 scomp = kzalloc(sizeof(struct ses_component) * components, GFP_KERNEL);
514 if (!scomp) 515 if (!scomp)
515 goto err_free; 516 goto err_free;
@@ -530,7 +531,7 @@ static int ses_intf_add(struct class_device *cdev,
530 if (result) 531 if (result)
531 goto simple_populate; 532 goto simple_populate;
532 533
533 len = (hdr_buf[2] << 8) + hdr_buf[3] + 4; 534 page7_len = len = (hdr_buf[2] << 8) + hdr_buf[3] + 4;
534 /* add 1 for trailing '\0' we'll use */ 535 /* add 1 for trailing '\0' we'll use */
535 buf = kzalloc(len + 1, GFP_KERNEL); 536 buf = kzalloc(len + 1, GFP_KERNEL);
536 if (!buf) 537 if (!buf)
@@ -547,7 +548,8 @@ static int ses_intf_add(struct class_device *cdev,
547 len = (desc_ptr[2] << 8) + desc_ptr[3]; 548 len = (desc_ptr[2] << 8) + desc_ptr[3];
548 /* skip past overall descriptor */ 549 /* skip past overall descriptor */
549 desc_ptr += len + 4; 550 desc_ptr += len + 4;
550 addl_desc_ptr = ses_dev->page10 + 8; 551 if (ses_dev->page10)
552 addl_desc_ptr = ses_dev->page10 + 8;
551 } 553 }
552 type_ptr = ses_dev->page1 + 12 + ses_dev->page1[11]; 554 type_ptr = ses_dev->page1 + 12 + ses_dev->page1[11];
553 components = 0; 555 components = 0;
@@ -557,29 +559,35 @@ static int ses_intf_add(struct class_device *cdev,
557 struct enclosure_component *ecomp; 559 struct enclosure_component *ecomp;
558 560
559 if (desc_ptr) { 561 if (desc_ptr) {
560 len = (desc_ptr[2] << 8) + desc_ptr[3]; 562 if (desc_ptr >= buf + page7_len) {
561 desc_ptr += 4; 563 desc_ptr = NULL;
562 /* Add trailing zero - pushes into 564 } else {
563 * reserved space */ 565 len = (desc_ptr[2] << 8) + desc_ptr[3];
564 desc_ptr[len] = '\0'; 566 desc_ptr += 4;
565 name = desc_ptr; 567 /* Add trailing zero - pushes into
568 * reserved space */
569 desc_ptr[len] = '\0';
570 name = desc_ptr;
571 }
566 } 572 }
567 if (type_ptr[0] != ENCLOSURE_COMPONENT_DEVICE && 573 if (type_ptr[0] == ENCLOSURE_COMPONENT_DEVICE ||
568 type_ptr[0] != ENCLOSURE_COMPONENT_ARRAY_DEVICE) 574 type_ptr[0] == ENCLOSURE_COMPONENT_ARRAY_DEVICE) {
569 continue; 575
570 ecomp = enclosure_component_register(edev, 576 ecomp = enclosure_component_register(edev,
571 components++, 577 components++,
572 type_ptr[0], 578 type_ptr[0],
573 name); 579 name);
574 if (desc_ptr) { 580
575 desc_ptr += len; 581 if (!IS_ERR(ecomp) && addl_desc_ptr)
576 if (!IS_ERR(ecomp))
577 ses_process_descriptor(ecomp, 582 ses_process_descriptor(ecomp,
578 addl_desc_ptr); 583 addl_desc_ptr);
579
580 if (addl_desc_ptr)
581 addl_desc_ptr += addl_desc_ptr[1] + 2;
582 } 584 }
585 if (desc_ptr)
586 desc_ptr += len;
587
588 if (addl_desc_ptr)
589 addl_desc_ptr += addl_desc_ptr[1] + 2;
590
583 } 591 }
584 } 592 }
585 kfree(buf); 593 kfree(buf);
diff --git a/drivers/scsi/st.c b/drivers/scsi/st.c
index 71952703125a..0a52d9d2da2c 100644
--- a/drivers/scsi/st.c
+++ b/drivers/scsi/st.c
@@ -17,7 +17,7 @@
17 Last modified: 18-JAN-1998 Richard Gooch <rgooch@atnf.csiro.au> Devfs support 17 Last modified: 18-JAN-1998 Richard Gooch <rgooch@atnf.csiro.au> Devfs support
18 */ 18 */
19 19
20static const char *verstr = "20080117"; 20static const char *verstr = "20080221";
21 21
22#include <linux/module.h> 22#include <linux/module.h>
23 23
@@ -1172,7 +1172,7 @@ static int st_open(struct inode *inode, struct file *filp)
1172 STp->try_dio_now = STp->try_dio; 1172 STp->try_dio_now = STp->try_dio;
1173 STp->recover_count = 0; 1173 STp->recover_count = 0;
1174 DEB( STp->nbr_waits = STp->nbr_finished = 0; 1174 DEB( STp->nbr_waits = STp->nbr_finished = 0;
1175 STp->nbr_requests = STp->nbr_dio = STp->nbr_pages = STp->nbr_combinable = 0; ) 1175 STp->nbr_requests = STp->nbr_dio = STp->nbr_pages = 0; )
1176 1176
1177 retval = check_tape(STp, filp); 1177 retval = check_tape(STp, filp);
1178 if (retval < 0) 1178 if (retval < 0)
@@ -1226,8 +1226,8 @@ static int st_flush(struct file *filp, fl_owner_t id)
1226 } 1226 }
1227 1227
1228 DEBC( if (STp->nbr_requests) 1228 DEBC( if (STp->nbr_requests)
1229 printk(KERN_DEBUG "%s: Number of r/w requests %d, dio used in %d, pages %d (%d).\n", 1229 printk(KERN_DEBUG "%s: Number of r/w requests %d, dio used in %d, pages %d.\n",
1230 name, STp->nbr_requests, STp->nbr_dio, STp->nbr_pages, STp->nbr_combinable)); 1230 name, STp->nbr_requests, STp->nbr_dio, STp->nbr_pages));
1231 1231
1232 if (STps->rw == ST_WRITING && !STp->pos_unknown) { 1232 if (STps->rw == ST_WRITING && !STp->pos_unknown) {
1233 struct st_cmdstatus *cmdstatp = &STp->buffer->cmdstat; 1233 struct st_cmdstatus *cmdstatp = &STp->buffer->cmdstat;
@@ -1422,9 +1422,6 @@ static int setup_buffering(struct scsi_tape *STp, const char __user *buf,
1422 if (STbp->do_dio) { 1422 if (STbp->do_dio) {
1423 STp->nbr_dio++; 1423 STp->nbr_dio++;
1424 STp->nbr_pages += STbp->do_dio; 1424 STp->nbr_pages += STbp->do_dio;
1425 for (i=1; i < STbp->do_dio; i++)
1426 if (page_to_pfn(STbp->sg[i].page) == page_to_pfn(STbp->sg[i-1].page) + 1)
1427 STp->nbr_combinable++;
1428 } 1425 }
1429 ) 1426 )
1430 } else 1427 } else
diff --git a/drivers/scsi/st.h b/drivers/scsi/st.h
index 6c8075712974..5931726fcf93 100644
--- a/drivers/scsi/st.h
+++ b/drivers/scsi/st.h
@@ -164,7 +164,6 @@ struct scsi_tape {
164 int nbr_requests; 164 int nbr_requests;
165 int nbr_dio; 165 int nbr_dio;
166 int nbr_pages; 166 int nbr_pages;
167 int nbr_combinable;
168 unsigned char last_cmnd[6]; 167 unsigned char last_cmnd[6];
169 unsigned char last_sense[16]; 168 unsigned char last_sense[16];
170#endif 169#endif
diff --git a/drivers/scsi/stex.c b/drivers/scsi/stex.c
index 72f6d8015358..654430edf74d 100644
--- a/drivers/scsi/stex.c
+++ b/drivers/scsi/stex.c
@@ -461,30 +461,14 @@ static void stex_internal_copy(struct scsi_cmnd *cmd,
461 } 461 }
462} 462}
463 463
464static int stex_direct_copy(struct scsi_cmnd *cmd,
465 const void *src, size_t count)
466{
467 size_t cp_len = count;
468 int n_elem = 0;
469
470 n_elem = scsi_dma_map(cmd);
471 if (n_elem < 0)
472 return 0;
473
474 stex_internal_copy(cmd, src, &cp_len, n_elem, ST_TO_CMD);
475
476 scsi_dma_unmap(cmd);
477
478 return cp_len == count;
479}
480
481static void stex_controller_info(struct st_hba *hba, struct st_ccb *ccb) 464static void stex_controller_info(struct st_hba *hba, struct st_ccb *ccb)
482{ 465{
483 struct st_frame *p; 466 struct st_frame *p;
484 size_t count = sizeof(struct st_frame); 467 size_t count = sizeof(struct st_frame);
485 468
486 p = hba->copy_buffer; 469 p = hba->copy_buffer;
487 stex_internal_copy(ccb->cmd, p, &count, ccb->sg_count, ST_FROM_CMD); 470 stex_internal_copy(ccb->cmd, p, &count, scsi_sg_count(ccb->cmd),
471 ST_FROM_CMD);
488 memset(p->base, 0, sizeof(u32)*6); 472 memset(p->base, 0, sizeof(u32)*6);
489 *(unsigned long *)(p->base) = pci_resource_start(hba->pdev, 0); 473 *(unsigned long *)(p->base) = pci_resource_start(hba->pdev, 0);
490 p->rom_addr = 0; 474 p->rom_addr = 0;
@@ -502,7 +486,8 @@ static void stex_controller_info(struct st_hba *hba, struct st_ccb *ccb)
502 p->subid = 486 p->subid =
503 hba->pdev->subsystem_vendor << 16 | hba->pdev->subsystem_device; 487 hba->pdev->subsystem_vendor << 16 | hba->pdev->subsystem_device;
504 488
505 stex_internal_copy(ccb->cmd, p, &count, ccb->sg_count, ST_TO_CMD); 489 stex_internal_copy(ccb->cmd, p, &count, scsi_sg_count(ccb->cmd),
490 ST_TO_CMD);
506} 491}
507 492
508static void 493static void
@@ -569,8 +554,10 @@ stex_queuecommand(struct scsi_cmnd *cmd, void (* done)(struct scsi_cmnd *))
569 unsigned char page; 554 unsigned char page;
570 page = cmd->cmnd[2] & 0x3f; 555 page = cmd->cmnd[2] & 0x3f;
571 if (page == 0x8 || page == 0x3f) { 556 if (page == 0x8 || page == 0x3f) {
572 stex_direct_copy(cmd, ms10_caching_page, 557 size_t cp_len = sizeof(ms10_caching_page);
573 sizeof(ms10_caching_page)); 558 stex_internal_copy(cmd, ms10_caching_page,
559 &cp_len, scsi_sg_count(cmd),
560 ST_TO_CMD);
574 cmd->result = DID_OK << 16 | COMMAND_COMPLETE << 8; 561 cmd->result = DID_OK << 16 | COMMAND_COMPLETE << 8;
575 done(cmd); 562 done(cmd);
576 } else 563 } else
@@ -599,8 +586,10 @@ stex_queuecommand(struct scsi_cmnd *cmd, void (* done)(struct scsi_cmnd *))
599 if (id != host->max_id - 1) 586 if (id != host->max_id - 1)
600 break; 587 break;
601 if (lun == 0 && (cmd->cmnd[1] & INQUIRY_EVPD) == 0) { 588 if (lun == 0 && (cmd->cmnd[1] & INQUIRY_EVPD) == 0) {
602 stex_direct_copy(cmd, console_inq_page, 589 size_t cp_len = sizeof(console_inq_page);
603 sizeof(console_inq_page)); 590 stex_internal_copy(cmd, console_inq_page,
591 &cp_len, scsi_sg_count(cmd),
592 ST_TO_CMD);
604 cmd->result = DID_OK << 16 | COMMAND_COMPLETE << 8; 593 cmd->result = DID_OK << 16 | COMMAND_COMPLETE << 8;
605 done(cmd); 594 done(cmd);
606 } else 595 } else
@@ -609,6 +598,7 @@ stex_queuecommand(struct scsi_cmnd *cmd, void (* done)(struct scsi_cmnd *))
609 case PASSTHRU_CMD: 598 case PASSTHRU_CMD:
610 if (cmd->cmnd[1] == PASSTHRU_GET_DRVVER) { 599 if (cmd->cmnd[1] == PASSTHRU_GET_DRVVER) {
611 struct st_drvver ver; 600 struct st_drvver ver;
601 size_t cp_len = sizeof(ver);
612 ver.major = ST_VER_MAJOR; 602 ver.major = ST_VER_MAJOR;
613 ver.minor = ST_VER_MINOR; 603 ver.minor = ST_VER_MINOR;
614 ver.oem = ST_OEM; 604 ver.oem = ST_OEM;
@@ -616,7 +606,9 @@ stex_queuecommand(struct scsi_cmnd *cmd, void (* done)(struct scsi_cmnd *))
616 ver.signature[0] = PASSTHRU_SIGNATURE; 606 ver.signature[0] = PASSTHRU_SIGNATURE;
617 ver.console_id = host->max_id - 1; 607 ver.console_id = host->max_id - 1;
618 ver.host_no = hba->host->host_no; 608 ver.host_no = hba->host->host_no;
619 cmd->result = stex_direct_copy(cmd, &ver, sizeof(ver)) ? 609 stex_internal_copy(cmd, &ver, &cp_len,
610 scsi_sg_count(cmd), ST_TO_CMD);
611 cmd->result = sizeof(ver) == cp_len ?
620 DID_OK << 16 | COMMAND_COMPLETE << 8 : 612 DID_OK << 16 | COMMAND_COMPLETE << 8 :
621 DID_ERROR << 16 | COMMAND_COMPLETE << 8; 613 DID_ERROR << 16 | COMMAND_COMPLETE << 8;
622 done(cmd); 614 done(cmd);
@@ -709,7 +701,7 @@ static void stex_copy_data(struct st_ccb *ccb,
709 if (ccb->cmd == NULL) 701 if (ccb->cmd == NULL)
710 return; 702 return;
711 stex_internal_copy(ccb->cmd, 703 stex_internal_copy(ccb->cmd,
712 resp->variable, &count, ccb->sg_count, ST_TO_CMD); 704 resp->variable, &count, scsi_sg_count(ccb->cmd), ST_TO_CMD);
713} 705}
714 706
715static void stex_ys_commands(struct st_hba *hba, 707static void stex_ys_commands(struct st_hba *hba,
@@ -734,7 +726,7 @@ static void stex_ys_commands(struct st_hba *hba,
734 726
735 count = STEX_EXTRA_SIZE; 727 count = STEX_EXTRA_SIZE;
736 stex_internal_copy(ccb->cmd, hba->copy_buffer, 728 stex_internal_copy(ccb->cmd, hba->copy_buffer,
737 &count, ccb->sg_count, ST_FROM_CMD); 729 &count, scsi_sg_count(ccb->cmd), ST_FROM_CMD);
738 inq_data = (ST_INQ *)hba->copy_buffer; 730 inq_data = (ST_INQ *)hba->copy_buffer;
739 if (inq_data->DeviceTypeQualifier != 0) 731 if (inq_data->DeviceTypeQualifier != 0)
740 ccb->srb_status = SRB_STATUS_SELECTION_TIMEOUT; 732 ccb->srb_status = SRB_STATUS_SELECTION_TIMEOUT;
diff --git a/drivers/serial/atmel_serial.c b/drivers/serial/atmel_serial.c
index fad245b064d6..d57bf3e708d8 100644
--- a/drivers/serial/atmel_serial.c
+++ b/drivers/serial/atmel_serial.c
@@ -549,7 +549,7 @@ static irqreturn_t atmel_interrupt(int irq, void *dev_id)
549 atmel_handle_transmit(port, pending); 549 atmel_handle_transmit(port, pending);
550 } while (pass_counter++ < ATMEL_ISR_PASS_LIMIT); 550 } while (pass_counter++ < ATMEL_ISR_PASS_LIMIT);
551 551
552 return IRQ_HANDLED; 552 return pass_counter ? IRQ_HANDLED : IRQ_NONE;
553} 553}
554 554
555/* 555/*
diff --git a/drivers/spi/atmel_spi.c b/drivers/spi/atmel_spi.c
index 293b7cab3e57..85687aaf9cab 100644
--- a/drivers/spi/atmel_spi.c
+++ b/drivers/spi/atmel_spi.c
@@ -87,6 +87,16 @@ static void cs_activate(struct atmel_spi *as, struct spi_device *spi)
87 unsigned gpio = (unsigned) spi->controller_data; 87 unsigned gpio = (unsigned) spi->controller_data;
88 unsigned active = spi->mode & SPI_CS_HIGH; 88 unsigned active = spi->mode & SPI_CS_HIGH;
89 u32 mr; 89 u32 mr;
90 int i;
91 u32 csr;
92 u32 cpol = (spi->mode & SPI_CPOL) ? SPI_BIT(CPOL) : 0;
93
94 /* Make sure clock polarity is correct */
95 for (i = 0; i < spi->master->num_chipselect; i++) {
96 csr = spi_readl(as, CSR0 + 4 * i);
97 if ((csr ^ cpol) & SPI_BIT(CPOL))
98 spi_writel(as, CSR0 + 4 * i, csr ^ SPI_BIT(CPOL));
99 }
90 100
91 mr = spi_readl(as, MR); 101 mr = spi_readl(as, MR);
92 mr = SPI_BFINS(PCS, ~(1 << spi->chip_select), mr); 102 mr = SPI_BFINS(PCS, ~(1 << spi->chip_select), mr);
diff --git a/drivers/spi/pxa2xx_spi.c b/drivers/spi/pxa2xx_spi.c
index 365e0e355aea..59deed79e0ab 100644
--- a/drivers/spi/pxa2xx_spi.c
+++ b/drivers/spi/pxa2xx_spi.c
@@ -51,13 +51,19 @@ MODULE_LICENSE("GPL");
51#define RESET_DMA_CHANNEL (DCSR_NODESC | DMA_INT_MASK) 51#define RESET_DMA_CHANNEL (DCSR_NODESC | DMA_INT_MASK)
52#define IS_DMA_ALIGNED(x) (((u32)(x)&0x07)==0) 52#define IS_DMA_ALIGNED(x) (((u32)(x)&0x07)==0)
53 53
54/* for testing SSCR1 changes that require SSP restart, basically 54/*
55 * everything except the service and interrupt enables */ 55 * for testing SSCR1 changes that require SSP restart, basically
56#define SSCR1_CHANGE_MASK (SSCR1_TTELP | SSCR1_TTE | SSCR1_EBCEI | SSCR1_SCFR \ 56 * everything except the service and interrupt enables, the pxa270 developer
57 * manual says only SSCR1_SCFR, SSCR1_SPH, SSCR1_SPO need to be in this
58 * list, but the PXA255 dev man says all bits without really meaning the
59 * service and interrupt enables
60 */
61#define SSCR1_CHANGE_MASK (SSCR1_TTELP | SSCR1_TTE | SSCR1_SCFR \
57 | SSCR1_ECRA | SSCR1_ECRB | SSCR1_SCLKDIR \ 62 | SSCR1_ECRA | SSCR1_ECRB | SSCR1_SCLKDIR \
58 | SSCR1_RWOT | SSCR1_TRAIL | SSCR1_PINTE \ 63 | SSCR1_SFRMDIR | SSCR1_RWOT | SSCR1_TRAIL \
59 | SSCR1_STRF | SSCR1_EFWR |SSCR1_RFT \ 64 | SSCR1_IFS | SSCR1_STRF | SSCR1_EFWR \
60 | SSCR1_TFT | SSCR1_SPH | SSCR1_SPO | SSCR1_LBM) 65 | SSCR1_RFT | SSCR1_TFT | SSCR1_MWDS \
66 | SSCR1_SPH | SSCR1_SPO | SSCR1_LBM)
61 67
62#define DEFINE_SSP_REG(reg, off) \ 68#define DEFINE_SSP_REG(reg, off) \
63static inline u32 read_##reg(void *p) { return __raw_readl(p + (off)); } \ 69static inline u32 read_##reg(void *p) { return __raw_readl(p + (off)); } \
@@ -973,9 +979,6 @@ static void pump_transfers(unsigned long data)
973 if (drv_data->ssp_type == PXA25x_SSP) 979 if (drv_data->ssp_type == PXA25x_SSP)
974 DCMD(drv_data->tx_channel) |= DCMD_ENDIRQEN; 980 DCMD(drv_data->tx_channel) |= DCMD_ENDIRQEN;
975 981
976 /* Fix me, need to handle cs polarity */
977 drv_data->cs_control(PXA2XX_CS_ASSERT);
978
979 /* Clear status and start DMA engine */ 982 /* Clear status and start DMA engine */
980 cr1 = chip->cr1 | dma_thresh | drv_data->dma_cr1; 983 cr1 = chip->cr1 | dma_thresh | drv_data->dma_cr1;
981 write_SSSR(drv_data->clear_sr, reg); 984 write_SSSR(drv_data->clear_sr, reg);
@@ -985,9 +988,6 @@ static void pump_transfers(unsigned long data)
985 /* Ensure we have the correct interrupt handler */ 988 /* Ensure we have the correct interrupt handler */
986 drv_data->transfer_handler = interrupt_transfer; 989 drv_data->transfer_handler = interrupt_transfer;
987 990
988 /* Fix me, need to handle cs polarity */
989 drv_data->cs_control(PXA2XX_CS_ASSERT);
990
991 /* Clear status */ 991 /* Clear status */
992 cr1 = chip->cr1 | chip->threshold | drv_data->int_cr1; 992 cr1 = chip->cr1 | chip->threshold | drv_data->int_cr1;
993 write_SSSR(drv_data->clear_sr, reg); 993 write_SSSR(drv_data->clear_sr, reg);
@@ -998,16 +998,29 @@ static void pump_transfers(unsigned long data)
998 || (read_SSCR1(reg) & SSCR1_CHANGE_MASK) != 998 || (read_SSCR1(reg) & SSCR1_CHANGE_MASK) !=
999 (cr1 & SSCR1_CHANGE_MASK)) { 999 (cr1 & SSCR1_CHANGE_MASK)) {
1000 1000
1001 /* stop the SSP, and update the other bits */
1001 write_SSCR0(cr0 & ~SSCR0_SSE, reg); 1002 write_SSCR0(cr0 & ~SSCR0_SSE, reg);
1002 if (drv_data->ssp_type != PXA25x_SSP) 1003 if (drv_data->ssp_type != PXA25x_SSP)
1003 write_SSTO(chip->timeout, reg); 1004 write_SSTO(chip->timeout, reg);
1004 write_SSCR1(cr1, reg); 1005 /* first set CR1 without interrupt and service enables */
1006 write_SSCR1(cr1 & SSCR1_CHANGE_MASK, reg);
1007 /* restart the SSP */
1005 write_SSCR0(cr0, reg); 1008 write_SSCR0(cr0, reg);
1009
1006 } else { 1010 } else {
1007 if (drv_data->ssp_type != PXA25x_SSP) 1011 if (drv_data->ssp_type != PXA25x_SSP)
1008 write_SSTO(chip->timeout, reg); 1012 write_SSTO(chip->timeout, reg);
1009 write_SSCR1(cr1, reg);
1010 } 1013 }
1014
1015 /* FIXME, need to handle cs polarity,
1016 * this driver uses struct pxa2xx_spi_chip.cs_control to
1017 * specify a CS handling function, and it ignores most
1018 * struct spi_device.mode[s], including SPI_CS_HIGH */
1019 drv_data->cs_control(PXA2XX_CS_ASSERT);
1020
1021 /* after chip select, release the data by enabling service
1022 * requests and interrupts, without changing any mode bits */
1023 write_SSCR1(cr1, reg);
1011} 1024}
1012 1025
1013static void pump_messages(struct work_struct *work) 1026static void pump_messages(struct work_struct *work)
diff --git a/drivers/ssb/Kconfig b/drivers/ssb/Kconfig
index d976660cb7f0..78fd33125e02 100644
--- a/drivers/ssb/Kconfig
+++ b/drivers/ssb/Kconfig
@@ -105,6 +105,12 @@ config SSB_DRIVER_MIPS
105 105
106 If unsure, say N 106 If unsure, say N
107 107
108# Assumption: We are on embedded, if we compile the MIPS core.
109config SSB_EMBEDDED
110 bool
111 depends on SSB_DRIVER_MIPS
112 default y
113
108config SSB_DRIVER_EXTIF 114config SSB_DRIVER_EXTIF
109 bool "SSB Broadcom EXTIF core driver (EXPERIMENTAL)" 115 bool "SSB Broadcom EXTIF core driver (EXPERIMENTAL)"
110 depends on SSB_DRIVER_MIPS && EXPERIMENTAL 116 depends on SSB_DRIVER_MIPS && EXPERIMENTAL
diff --git a/drivers/ssb/Makefile b/drivers/ssb/Makefile
index 7be397595805..e235144add7c 100644
--- a/drivers/ssb/Makefile
+++ b/drivers/ssb/Makefile
@@ -1,5 +1,6 @@
1# core 1# core
2ssb-y += main.o scan.o 2ssb-y += main.o scan.o
3ssb-$(CONFIG_SSB_EMBEDDED) += embedded.o
3 4
4# host support 5# host support
5ssb-$(CONFIG_SSB_PCIHOST) += pci.o pcihost_wrapper.o 6ssb-$(CONFIG_SSB_PCIHOST) += pci.o pcihost_wrapper.o
diff --git a/drivers/ssb/driver_chipcommon.c b/drivers/ssb/driver_chipcommon.c
index 6fbf1c53b6f2..e586321a473a 100644
--- a/drivers/ssb/driver_chipcommon.c
+++ b/drivers/ssb/driver_chipcommon.c
@@ -39,12 +39,14 @@ static inline void chipco_write32(struct ssb_chipcommon *cc,
39 ssb_write32(cc->dev, offset, value); 39 ssb_write32(cc->dev, offset, value);
40} 40}
41 41
42static inline void chipco_write32_masked(struct ssb_chipcommon *cc, u16 offset, 42static inline u32 chipco_write32_masked(struct ssb_chipcommon *cc, u16 offset,
43 u32 mask, u32 value) 43 u32 mask, u32 value)
44{ 44{
45 value &= mask; 45 value &= mask;
46 value |= chipco_read32(cc, offset) & ~mask; 46 value |= chipco_read32(cc, offset) & ~mask;
47 chipco_write32(cc, offset, value); 47 chipco_write32(cc, offset, value);
48
49 return value;
48} 50}
49 51
50void ssb_chipco_set_clockmode(struct ssb_chipcommon *cc, 52void ssb_chipco_set_clockmode(struct ssb_chipcommon *cc,
@@ -356,14 +358,29 @@ u32 ssb_chipco_gpio_in(struct ssb_chipcommon *cc, u32 mask)
356 return chipco_read32(cc, SSB_CHIPCO_GPIOIN) & mask; 358 return chipco_read32(cc, SSB_CHIPCO_GPIOIN) & mask;
357} 359}
358 360
359void ssb_chipco_gpio_out(struct ssb_chipcommon *cc, u32 mask, u32 value) 361u32 ssb_chipco_gpio_out(struct ssb_chipcommon *cc, u32 mask, u32 value)
362{
363 return chipco_write32_masked(cc, SSB_CHIPCO_GPIOOUT, mask, value);
364}
365
366u32 ssb_chipco_gpio_outen(struct ssb_chipcommon *cc, u32 mask, u32 value)
367{
368 return chipco_write32_masked(cc, SSB_CHIPCO_GPIOOUTEN, mask, value);
369}
370
371u32 ssb_chipco_gpio_control(struct ssb_chipcommon *cc, u32 mask, u32 value)
372{
373 return chipco_write32_masked(cc, SSB_CHIPCO_GPIOCTL, mask, value);
374}
375
376u32 ssb_chipco_gpio_intmask(struct ssb_chipcommon *cc, u32 mask, u32 value)
360{ 377{
361 chipco_write32_masked(cc, SSB_CHIPCO_GPIOOUT, mask, value); 378 return chipco_write32_masked(cc, SSB_CHIPCO_GPIOIRQ, mask, value);
362} 379}
363 380
364void ssb_chipco_gpio_outen(struct ssb_chipcommon *cc, u32 mask, u32 value) 381u32 ssb_chipco_gpio_polarity(struct ssb_chipcommon *cc, u32 mask, u32 value)
365{ 382{
366 chipco_write32_masked(cc, SSB_CHIPCO_GPIOOUTEN, mask, value); 383 return chipco_write32_masked(cc, SSB_CHIPCO_GPIOPOL, mask, value);
367} 384}
368 385
369#ifdef CONFIG_SSB_SERIAL 386#ifdef CONFIG_SSB_SERIAL
@@ -376,6 +393,7 @@ int ssb_chipco_serial_init(struct ssb_chipcommon *cc,
376 unsigned int irq; 393 unsigned int irq;
377 u32 baud_base, div; 394 u32 baud_base, div;
378 u32 i, n; 395 u32 i, n;
396 unsigned int ccrev = cc->dev->id.revision;
379 397
380 plltype = (cc->capabilities & SSB_CHIPCO_CAP_PLLT); 398 plltype = (cc->capabilities & SSB_CHIPCO_CAP_PLLT);
381 irq = ssb_mips_irq(cc->dev); 399 irq = ssb_mips_irq(cc->dev);
@@ -387,14 +405,39 @@ int ssb_chipco_serial_init(struct ssb_chipcommon *cc,
387 chipco_read32(cc, SSB_CHIPCO_CLOCK_M2)); 405 chipco_read32(cc, SSB_CHIPCO_CLOCK_M2));
388 div = 1; 406 div = 1;
389 } else { 407 } else {
390 if (cc->dev->id.revision >= 11) { 408 if (ccrev == 20) {
409 /* BCM5354 uses constant 25MHz clock */
410 baud_base = 25000000;
411 div = 48;
412 /* Set the override bit so we don't divide it */
413 chipco_write32(cc, SSB_CHIPCO_CORECTL,
414 chipco_read32(cc, SSB_CHIPCO_CORECTL)
415 | SSB_CHIPCO_CORECTL_UARTCLK0);
416 } else if ((ccrev >= 11) && (ccrev != 15)) {
391 /* Fixed ALP clock */ 417 /* Fixed ALP clock */
392 baud_base = 20000000; 418 baud_base = 20000000;
419 if (cc->capabilities & SSB_CHIPCO_CAP_PMU) {
420 /* FIXME: baud_base is different for devices with a PMU */
421 SSB_WARN_ON(1);
422 }
393 div = 1; 423 div = 1;
424 if (ccrev >= 21) {
425 /* Turn off UART clock before switching clocksource. */
426 chipco_write32(cc, SSB_CHIPCO_CORECTL,
427 chipco_read32(cc, SSB_CHIPCO_CORECTL)
428 & ~SSB_CHIPCO_CORECTL_UARTCLKEN);
429 }
394 /* Set the override bit so we don't divide it */ 430 /* Set the override bit so we don't divide it */
395 chipco_write32(cc, SSB_CHIPCO_CORECTL, 431 chipco_write32(cc, SSB_CHIPCO_CORECTL,
396 SSB_CHIPCO_CORECTL_UARTCLK0); 432 chipco_read32(cc, SSB_CHIPCO_CORECTL)
397 } else if (cc->dev->id.revision >= 3) { 433 | SSB_CHIPCO_CORECTL_UARTCLK0);
434 if (ccrev >= 21) {
435 /* Re-enable the UART clock. */
436 chipco_write32(cc, SSB_CHIPCO_CORECTL,
437 chipco_read32(cc, SSB_CHIPCO_CORECTL)
438 | SSB_CHIPCO_CORECTL_UARTCLKEN);
439 }
440 } else if (ccrev >= 3) {
398 /* Internal backplane clock */ 441 /* Internal backplane clock */
399 baud_base = ssb_clockspeed(bus); 442 baud_base = ssb_clockspeed(bus);
400 div = chipco_read32(cc, SSB_CHIPCO_CLKDIV) 443 div = chipco_read32(cc, SSB_CHIPCO_CLKDIV)
@@ -406,7 +449,7 @@ int ssb_chipco_serial_init(struct ssb_chipcommon *cc,
406 } 449 }
407 450
408 /* Clock source depends on strapping if UartClkOverride is unset */ 451 /* Clock source depends on strapping if UartClkOverride is unset */
409 if ((cc->dev->id.revision > 0) && 452 if ((ccrev > 0) &&
410 !(chipco_read32(cc, SSB_CHIPCO_CORECTL) & SSB_CHIPCO_CORECTL_UARTCLK0)) { 453 !(chipco_read32(cc, SSB_CHIPCO_CORECTL) & SSB_CHIPCO_CORECTL_UARTCLK0)) {
411 if ((cc->capabilities & SSB_CHIPCO_CAP_UARTCLK) == 454 if ((cc->capabilities & SSB_CHIPCO_CAP_UARTCLK) ==
412 SSB_CHIPCO_CAP_UARTCLK_INT) { 455 SSB_CHIPCO_CAP_UARTCLK_INT) {
@@ -428,7 +471,7 @@ int ssb_chipco_serial_init(struct ssb_chipcommon *cc,
428 cc_mmio = cc->dev->bus->mmio + (cc->dev->core_index * SSB_CORE_SIZE); 471 cc_mmio = cc->dev->bus->mmio + (cc->dev->core_index * SSB_CORE_SIZE);
429 uart_regs = cc_mmio + SSB_CHIPCO_UART0_DATA; 472 uart_regs = cc_mmio + SSB_CHIPCO_UART0_DATA;
430 /* Offset changed at after rev 0 */ 473 /* Offset changed at after rev 0 */
431 if (cc->dev->id.revision == 0) 474 if (ccrev == 0)
432 uart_regs += (i * 8); 475 uart_regs += (i * 8);
433 else 476 else
434 uart_regs += (i * 256); 477 uart_regs += (i * 256);
diff --git a/drivers/ssb/driver_extif.c b/drivers/ssb/driver_extif.c
index fe55eb8b038a..c3e1d3e6d610 100644
--- a/drivers/ssb/driver_extif.c
+++ b/drivers/ssb/driver_extif.c
@@ -27,12 +27,14 @@ static inline void extif_write32(struct ssb_extif *extif, u16 offset, u32 value)
27 ssb_write32(extif->dev, offset, value); 27 ssb_write32(extif->dev, offset, value);
28} 28}
29 29
30static inline void extif_write32_masked(struct ssb_extif *extif, u16 offset, 30static inline u32 extif_write32_masked(struct ssb_extif *extif, u16 offset,
31 u32 mask, u32 value) 31 u32 mask, u32 value)
32{ 32{
33 value &= mask; 33 value &= mask;
34 value |= extif_read32(extif, offset) & ~mask; 34 value |= extif_read32(extif, offset) & ~mask;
35 extif_write32(extif, offset, value); 35 extif_write32(extif, offset, value);
36
37 return value;
36} 38}
37 39
38#ifdef CONFIG_SSB_SERIAL 40#ifdef CONFIG_SSB_SERIAL
@@ -110,20 +112,35 @@ void ssb_extif_get_clockcontrol(struct ssb_extif *extif,
110 *m = extif_read32(extif, SSB_EXTIF_CLOCK_SB); 112 *m = extif_read32(extif, SSB_EXTIF_CLOCK_SB);
111} 113}
112 114
115void ssb_extif_watchdog_timer_set(struct ssb_extif *extif,
116 u32 ticks)
117{
118 extif_write32(extif, SSB_EXTIF_WATCHDOG, ticks);
119}
120
113u32 ssb_extif_gpio_in(struct ssb_extif *extif, u32 mask) 121u32 ssb_extif_gpio_in(struct ssb_extif *extif, u32 mask)
114{ 122{
115 return extif_read32(extif, SSB_EXTIF_GPIO_IN) & mask; 123 return extif_read32(extif, SSB_EXTIF_GPIO_IN) & mask;
116} 124}
117 125
118void ssb_extif_gpio_out(struct ssb_extif *extif, u32 mask, u32 value) 126u32 ssb_extif_gpio_out(struct ssb_extif *extif, u32 mask, u32 value)
119{ 127{
120 return extif_write32_masked(extif, SSB_EXTIF_GPIO_OUT(0), 128 return extif_write32_masked(extif, SSB_EXTIF_GPIO_OUT(0),
121 mask, value); 129 mask, value);
122} 130}
123 131
124void ssb_extif_gpio_outen(struct ssb_extif *extif, u32 mask, u32 value) 132u32 ssb_extif_gpio_outen(struct ssb_extif *extif, u32 mask, u32 value)
125{ 133{
126 return extif_write32_masked(extif, SSB_EXTIF_GPIO_OUTEN(0), 134 return extif_write32_masked(extif, SSB_EXTIF_GPIO_OUTEN(0),
127 mask, value); 135 mask, value);
128} 136}
129 137
138u32 ssb_extif_gpio_polarity(struct ssb_extif *extif, u32 mask, u32 value)
139{
140 return extif_write32_masked(extif, SSB_EXTIF_GPIO_INTPOL, mask, value);
141}
142
143u32 ssb_extif_gpio_intmask(struct ssb_extif *extif, u32 mask, u32 value)
144{
145 return extif_write32_masked(extif, SSB_EXTIF_GPIO_INTMASK, mask, value);
146}
diff --git a/drivers/ssb/driver_pcicore.c b/drivers/ssb/driver_pcicore.c
index 2faaa906d5d6..6d99a9880055 100644
--- a/drivers/ssb/driver_pcicore.c
+++ b/drivers/ssb/driver_pcicore.c
@@ -11,6 +11,7 @@
11#include <linux/ssb/ssb.h> 11#include <linux/ssb/ssb.h>
12#include <linux/pci.h> 12#include <linux/pci.h>
13#include <linux/delay.h> 13#include <linux/delay.h>
14#include <linux/ssb/ssb_embedded.h>
14 15
15#include "ssb_private.h" 16#include "ssb_private.h"
16 17
@@ -27,6 +28,18 @@ void pcicore_write32(struct ssb_pcicore *pc, u16 offset, u32 value)
27 ssb_write32(pc->dev, offset, value); 28 ssb_write32(pc->dev, offset, value);
28} 29}
29 30
31static inline
32u16 pcicore_read16(struct ssb_pcicore *pc, u16 offset)
33{
34 return ssb_read16(pc->dev, offset);
35}
36
37static inline
38void pcicore_write16(struct ssb_pcicore *pc, u16 offset, u16 value)
39{
40 ssb_write16(pc->dev, offset, value);
41}
42
30/************************************************** 43/**************************************************
31 * Code for hostmode operation. 44 * Code for hostmode operation.
32 **************************************************/ 45 **************************************************/
@@ -66,6 +79,7 @@ int pcibios_plat_dev_init(struct pci_dev *d)
66 base = &ssb_pcicore_pcibus_iobase; 79 base = &ssb_pcicore_pcibus_iobase;
67 else 80 else
68 base = &ssb_pcicore_pcibus_membase; 81 base = &ssb_pcicore_pcibus_membase;
82 res->flags |= IORESOURCE_PCI_FIXED;
69 if (res->end) { 83 if (res->end) {
70 size = res->end - res->start + 1; 84 size = res->end - res->start + 1;
71 if (*base & (size - 1)) 85 if (*base & (size - 1))
@@ -88,10 +102,12 @@ int pcibios_plat_dev_init(struct pci_dev *d)
88 102
89static void __init ssb_fixup_pcibridge(struct pci_dev *dev) 103static void __init ssb_fixup_pcibridge(struct pci_dev *dev)
90{ 104{
105 u8 lat;
106
91 if (dev->bus->number != 0 || PCI_SLOT(dev->devfn) != 0) 107 if (dev->bus->number != 0 || PCI_SLOT(dev->devfn) != 0)
92 return; 108 return;
93 109
94 ssb_printk(KERN_INFO "PCI: fixing up bridge\n"); 110 ssb_printk(KERN_INFO "PCI: Fixing up bridge %s\n", pci_name(dev));
95 111
96 /* Enable PCI bridge bus mastering and memory space */ 112 /* Enable PCI bridge bus mastering and memory space */
97 pci_set_master(dev); 113 pci_set_master(dev);
@@ -101,7 +117,10 @@ static void __init ssb_fixup_pcibridge(struct pci_dev *dev)
101 pci_write_config_dword(dev, SSB_BAR1_CONTROL, 3); 117 pci_write_config_dword(dev, SSB_BAR1_CONTROL, 3);
102 118
103 /* Make sure our latency is high enough to handle the devices behind us */ 119 /* Make sure our latency is high enough to handle the devices behind us */
104 pci_write_config_byte(dev, PCI_LATENCY_TIMER, 0xa8); 120 lat = 168;
121 ssb_printk(KERN_INFO "PCI: Fixing latency timer of device %s to %u\n",
122 pci_name(dev), lat);
123 pci_write_config_byte(dev, PCI_LATENCY_TIMER, lat);
105} 124}
106DECLARE_PCI_FIXUP_EARLY(PCI_ANY_ID, PCI_ANY_ID, ssb_fixup_pcibridge); 125DECLARE_PCI_FIXUP_EARLY(PCI_ANY_ID, PCI_ANY_ID, ssb_fixup_pcibridge);
107 126
@@ -117,8 +136,10 @@ static u32 get_cfgspace_addr(struct ssb_pcicore *pc,
117 u32 addr = 0; 136 u32 addr = 0;
118 u32 tmp; 137 u32 tmp;
119 138
120 if (unlikely(pc->cardbusmode && dev > 1)) 139 /* We do only have one cardbus device behind the bridge. */
140 if (pc->cardbusmode && (dev >= 1))
121 goto out; 141 goto out;
142
122 if (bus == 0) { 143 if (bus == 0) {
123 /* Type 0 transaction */ 144 /* Type 0 transaction */
124 if (unlikely(dev >= SSB_PCI_SLOT_MAX)) 145 if (unlikely(dev >= SSB_PCI_SLOT_MAX))
@@ -279,14 +300,14 @@ static struct resource ssb_pcicore_mem_resource = {
279 .name = "SSB PCIcore external memory", 300 .name = "SSB PCIcore external memory",
280 .start = SSB_PCI_DMA, 301 .start = SSB_PCI_DMA,
281 .end = SSB_PCI_DMA + SSB_PCI_DMA_SZ - 1, 302 .end = SSB_PCI_DMA + SSB_PCI_DMA_SZ - 1,
282 .flags = IORESOURCE_MEM, 303 .flags = IORESOURCE_MEM | IORESOURCE_PCI_FIXED,
283}; 304};
284 305
285static struct resource ssb_pcicore_io_resource = { 306static struct resource ssb_pcicore_io_resource = {
286 .name = "SSB PCIcore external I/O", 307 .name = "SSB PCIcore external I/O",
287 .start = 0x100, 308 .start = 0x100,
288 .end = 0x7FF, 309 .end = 0x7FF,
289 .flags = IORESOURCE_IO, 310 .flags = IORESOURCE_IO | IORESOURCE_PCI_FIXED,
290}; 311};
291 312
292static struct pci_controller ssb_pcicore_controller = { 313static struct pci_controller ssb_pcicore_controller = {
@@ -318,7 +339,16 @@ static void ssb_pcicore_init_hostmode(struct ssb_pcicore *pc)
318 pcicore_write32(pc, SSB_PCICORE_ARBCTL, val); 339 pcicore_write32(pc, SSB_PCICORE_ARBCTL, val);
319 udelay(1); /* Assertion time demanded by the PCI standard */ 340 udelay(1); /* Assertion time demanded by the PCI standard */
320 341
321 /*TODO cardbus mode */ 342 if (pc->dev->bus->has_cardbus_slot) {
343 ssb_dprintk(KERN_INFO PFX "CardBus slot detected\n");
344 pc->cardbusmode = 1;
345 /* GPIO 1 resets the bridge */
346 ssb_gpio_out(pc->dev->bus, 1, 1);
347 ssb_gpio_outen(pc->dev->bus, 1, 1);
348 pcicore_write16(pc, SSB_PCICORE_SPROM(0),
349 pcicore_read16(pc, SSB_PCICORE_SPROM(0))
350 | 0x0400);
351 }
322 352
323 /* 64MB I/O window */ 353 /* 64MB I/O window */
324 pcicore_write32(pc, SSB_PCICORE_SBTOPCI0, 354 pcicore_write32(pc, SSB_PCICORE_SBTOPCI0,
@@ -344,7 +374,8 @@ static void ssb_pcicore_init_hostmode(struct ssb_pcicore *pc)
344 /* Ok, ready to run, register it to the system. 374 /* Ok, ready to run, register it to the system.
345 * The following needs change, if we want to port hostmode 375 * The following needs change, if we want to port hostmode
346 * to non-MIPS platform. */ 376 * to non-MIPS platform. */
347 set_io_port_base((unsigned long)ioremap_nocache(SSB_PCI_MEM, 0x04000000)); 377 ssb_pcicore_controller.io_map_base = (unsigned long)ioremap_nocache(SSB_PCI_MEM, 0x04000000);
378 set_io_port_base(ssb_pcicore_controller.io_map_base);
348 /* Give some time to the PCI controller to configure itself with the new 379 /* Give some time to the PCI controller to configure itself with the new
349 * values. Not waiting at this point causes crashes of the machine. */ 380 * values. Not waiting at this point causes crashes of the machine. */
350 mdelay(10); 381 mdelay(10);
diff --git a/drivers/ssb/embedded.c b/drivers/ssb/embedded.c
new file mode 100644
index 000000000000..d3ade821555c
--- /dev/null
+++ b/drivers/ssb/embedded.c
@@ -0,0 +1,132 @@
1/*
2 * Sonics Silicon Backplane
3 * Embedded systems support code
4 *
5 * Copyright 2005-2008, Broadcom Corporation
6 * Copyright 2006-2008, Michael Buesch <mb@bu3sch.de>
7 *
8 * Licensed under the GNU/GPL. See COPYING for details.
9 */
10
11#include <linux/ssb/ssb.h>
12#include <linux/ssb/ssb_embedded.h>
13
14#include "ssb_private.h"
15
16
17int ssb_watchdog_timer_set(struct ssb_bus *bus, u32 ticks)
18{
19 if (ssb_chipco_available(&bus->chipco)) {
20 ssb_chipco_watchdog_timer_set(&bus->chipco, ticks);
21 return 0;
22 }
23 if (ssb_extif_available(&bus->extif)) {
24 ssb_extif_watchdog_timer_set(&bus->extif, ticks);
25 return 0;
26 }
27 return -ENODEV;
28}
29
30u32 ssb_gpio_in(struct ssb_bus *bus, u32 mask)
31{
32 unsigned long flags;
33 u32 res = 0;
34
35 spin_lock_irqsave(&bus->gpio_lock, flags);
36 if (ssb_chipco_available(&bus->chipco))
37 res = ssb_chipco_gpio_in(&bus->chipco, mask);
38 else if (ssb_extif_available(&bus->extif))
39 res = ssb_extif_gpio_in(&bus->extif, mask);
40 else
41 SSB_WARN_ON(1);
42 spin_unlock_irqrestore(&bus->gpio_lock, flags);
43
44 return res;
45}
46EXPORT_SYMBOL(ssb_gpio_in);
47
48u32 ssb_gpio_out(struct ssb_bus *bus, u32 mask, u32 value)
49{
50 unsigned long flags;
51 u32 res = 0;
52
53 spin_lock_irqsave(&bus->gpio_lock, flags);
54 if (ssb_chipco_available(&bus->chipco))
55 res = ssb_chipco_gpio_out(&bus->chipco, mask, value);
56 else if (ssb_extif_available(&bus->extif))
57 res = ssb_extif_gpio_out(&bus->extif, mask, value);
58 else
59 SSB_WARN_ON(1);
60 spin_unlock_irqrestore(&bus->gpio_lock, flags);
61
62 return res;
63}
64EXPORT_SYMBOL(ssb_gpio_out);
65
66u32 ssb_gpio_outen(struct ssb_bus *bus, u32 mask, u32 value)
67{
68 unsigned long flags;
69 u32 res = 0;
70
71 spin_lock_irqsave(&bus->gpio_lock, flags);
72 if (ssb_chipco_available(&bus->chipco))
73 res = ssb_chipco_gpio_outen(&bus->chipco, mask, value);
74 else if (ssb_extif_available(&bus->extif))
75 res = ssb_extif_gpio_outen(&bus->extif, mask, value);
76 else
77 SSB_WARN_ON(1);
78 spin_unlock_irqrestore(&bus->gpio_lock, flags);
79
80 return res;
81}
82EXPORT_SYMBOL(ssb_gpio_outen);
83
84u32 ssb_gpio_control(struct ssb_bus *bus, u32 mask, u32 value)
85{
86 unsigned long flags;
87 u32 res = 0;
88
89 spin_lock_irqsave(&bus->gpio_lock, flags);
90 if (ssb_chipco_available(&bus->chipco))
91 res = ssb_chipco_gpio_control(&bus->chipco, mask, value);
92 spin_unlock_irqrestore(&bus->gpio_lock, flags);
93
94 return res;
95}
96EXPORT_SYMBOL(ssb_gpio_control);
97
98u32 ssb_gpio_intmask(struct ssb_bus *bus, u32 mask, u32 value)
99{
100 unsigned long flags;
101 u32 res = 0;
102
103 spin_lock_irqsave(&bus->gpio_lock, flags);
104 if (ssb_chipco_available(&bus->chipco))
105 res = ssb_chipco_gpio_intmask(&bus->chipco, mask, value);
106 else if (ssb_extif_available(&bus->extif))
107 res = ssb_extif_gpio_intmask(&bus->extif, mask, value);
108 else
109 SSB_WARN_ON(1);
110 spin_unlock_irqrestore(&bus->gpio_lock, flags);
111
112 return res;
113}
114EXPORT_SYMBOL(ssb_gpio_intmask);
115
116u32 ssb_gpio_polarity(struct ssb_bus *bus, u32 mask, u32 value)
117{
118 unsigned long flags;
119 u32 res = 0;
120
121 spin_lock_irqsave(&bus->gpio_lock, flags);
122 if (ssb_chipco_available(&bus->chipco))
123 res = ssb_chipco_gpio_polarity(&bus->chipco, mask, value);
124 else if (ssb_extif_available(&bus->extif))
125 res = ssb_extif_gpio_polarity(&bus->extif, mask, value);
126 else
127 SSB_WARN_ON(1);
128 spin_unlock_irqrestore(&bus->gpio_lock, flags);
129
130 return res;
131}
132EXPORT_SYMBOL(ssb_gpio_polarity);
diff --git a/drivers/ssb/main.c b/drivers/ssb/main.c
index 9028ed5715a1..bedb2b4ee9d2 100644
--- a/drivers/ssb/main.c
+++ b/drivers/ssb/main.c
@@ -557,6 +557,7 @@ static int ssb_fetch_invariants(struct ssb_bus *bus,
557 goto out; 557 goto out;
558 memcpy(&bus->boardinfo, &iv.boardinfo, sizeof(iv.boardinfo)); 558 memcpy(&bus->boardinfo, &iv.boardinfo, sizeof(iv.boardinfo));
559 memcpy(&bus->sprom, &iv.sprom, sizeof(iv.sprom)); 559 memcpy(&bus->sprom, &iv.sprom, sizeof(iv.sprom));
560 bus->has_cardbus_slot = iv.has_cardbus_slot;
560out: 561out:
561 return err; 562 return err;
562} 563}
@@ -569,6 +570,9 @@ static int ssb_bus_register(struct ssb_bus *bus,
569 570
570 spin_lock_init(&bus->bar_lock); 571 spin_lock_init(&bus->bar_lock);
571 INIT_LIST_HEAD(&bus->list); 572 INIT_LIST_HEAD(&bus->list);
573#ifdef CONFIG_SSB_EMBEDDED
574 spin_lock_init(&bus->gpio_lock);
575#endif
572 576
573 /* Powerup the bus */ 577 /* Powerup the bus */
574 err = ssb_pci_xtal(bus, SSB_GPIO_XTAL | SSB_GPIO_PLL, 1); 578 err = ssb_pci_xtal(bus, SSB_GPIO_XTAL | SSB_GPIO_PLL, 1);
diff --git a/drivers/thermal/thermal.c b/drivers/thermal/thermal.c
index e782b3e7fcdb..8b86e53ccf7a 100644
--- a/drivers/thermal/thermal.c
+++ b/drivers/thermal/thermal.c
@@ -306,12 +306,23 @@ int thermal_zone_bind_cooling_device(struct thermal_zone_device *tz,
306{ 306{
307 struct thermal_cooling_device_instance *dev; 307 struct thermal_cooling_device_instance *dev;
308 struct thermal_cooling_device_instance *pos; 308 struct thermal_cooling_device_instance *pos;
309 struct thermal_zone_device *pos1;
310 struct thermal_cooling_device *pos2;
309 int result; 311 int result;
310 312
311 if (trip >= tz->trips || (trip < 0 && trip != THERMAL_TRIPS_NONE)) 313 if (trip >= tz->trips || (trip < 0 && trip != THERMAL_TRIPS_NONE))
312 return -EINVAL; 314 return -EINVAL;
313 315
314 if (!tz || !cdev) 316 list_for_each_entry(pos1, &thermal_tz_list, node) {
317 if (pos1 == tz)
318 break;
319 }
320 list_for_each_entry(pos2, &thermal_cdev_list, node) {
321 if (pos2 == cdev)
322 break;
323 }
324
325 if (tz != pos1 || cdev != pos2)
315 return -EINVAL; 326 return -EINVAL;
316 327
317 dev = 328 dev =
@@ -437,20 +448,20 @@ struct thermal_cooling_device *thermal_cooling_device_register(char *type,
437 int result; 448 int result;
438 449
439 if (strlen(type) >= THERMAL_NAME_LENGTH) 450 if (strlen(type) >= THERMAL_NAME_LENGTH)
440 return NULL; 451 return ERR_PTR(-EINVAL);
441 452
442 if (!ops || !ops->get_max_state || !ops->get_cur_state || 453 if (!ops || !ops->get_max_state || !ops->get_cur_state ||
443 !ops->set_cur_state) 454 !ops->set_cur_state)
444 return NULL; 455 return ERR_PTR(-EINVAL);
445 456
446 cdev = kzalloc(sizeof(struct thermal_cooling_device), GFP_KERNEL); 457 cdev = kzalloc(sizeof(struct thermal_cooling_device), GFP_KERNEL);
447 if (!cdev) 458 if (!cdev)
448 return NULL; 459 return ERR_PTR(-ENOMEM);
449 460
450 result = get_idr(&thermal_cdev_idr, &thermal_idr_lock, &cdev->id); 461 result = get_idr(&thermal_cdev_idr, &thermal_idr_lock, &cdev->id);
451 if (result) { 462 if (result) {
452 kfree(cdev); 463 kfree(cdev);
453 return NULL; 464 return ERR_PTR(result);
454 } 465 }
455 466
456 strcpy(cdev->type, type); 467 strcpy(cdev->type, type);
@@ -462,7 +473,7 @@ struct thermal_cooling_device *thermal_cooling_device_register(char *type,
462 if (result) { 473 if (result) {
463 release_idr(&thermal_cdev_idr, &thermal_idr_lock, cdev->id); 474 release_idr(&thermal_cdev_idr, &thermal_idr_lock, cdev->id);
464 kfree(cdev); 475 kfree(cdev);
465 return NULL; 476 return ERR_PTR(result);
466 } 477 }
467 478
468 /* sys I/F */ 479 /* sys I/F */
@@ -498,7 +509,7 @@ struct thermal_cooling_device *thermal_cooling_device_register(char *type,
498 unregister: 509 unregister:
499 release_idr(&thermal_cdev_idr, &thermal_idr_lock, cdev->id); 510 release_idr(&thermal_cdev_idr, &thermal_idr_lock, cdev->id);
500 device_unregister(&cdev->device); 511 device_unregister(&cdev->device);
501 return NULL; 512 return ERR_PTR(result);
502} 513}
503 514
504EXPORT_SYMBOL(thermal_cooling_device_register); 515EXPORT_SYMBOL(thermal_cooling_device_register);
@@ -570,17 +581,17 @@ struct thermal_zone_device *thermal_zone_device_register(char *type,
570 int count; 581 int count;
571 582
572 if (strlen(type) >= THERMAL_NAME_LENGTH) 583 if (strlen(type) >= THERMAL_NAME_LENGTH)
573 return NULL; 584 return ERR_PTR(-EINVAL);
574 585
575 if (trips > THERMAL_MAX_TRIPS || trips < 0) 586 if (trips > THERMAL_MAX_TRIPS || trips < 0)
576 return NULL; 587 return ERR_PTR(-EINVAL);
577 588
578 if (!ops || !ops->get_temp) 589 if (!ops || !ops->get_temp)
579 return NULL; 590 return ERR_PTR(-EINVAL);
580 591
581 tz = kzalloc(sizeof(struct thermal_zone_device), GFP_KERNEL); 592 tz = kzalloc(sizeof(struct thermal_zone_device), GFP_KERNEL);
582 if (!tz) 593 if (!tz)
583 return NULL; 594 return ERR_PTR(-ENOMEM);
584 595
585 INIT_LIST_HEAD(&tz->cooling_devices); 596 INIT_LIST_HEAD(&tz->cooling_devices);
586 idr_init(&tz->idr); 597 idr_init(&tz->idr);
@@ -588,7 +599,7 @@ struct thermal_zone_device *thermal_zone_device_register(char *type,
588 result = get_idr(&thermal_tz_idr, &thermal_idr_lock, &tz->id); 599 result = get_idr(&thermal_tz_idr, &thermal_idr_lock, &tz->id);
589 if (result) { 600 if (result) {
590 kfree(tz); 601 kfree(tz);
591 return NULL; 602 return ERR_PTR(result);
592 } 603 }
593 604
594 strcpy(tz->type, type); 605 strcpy(tz->type, type);
@@ -601,7 +612,7 @@ struct thermal_zone_device *thermal_zone_device_register(char *type,
601 if (result) { 612 if (result) {
602 release_idr(&thermal_tz_idr, &thermal_idr_lock, tz->id); 613 release_idr(&thermal_tz_idr, &thermal_idr_lock, tz->id);
603 kfree(tz); 614 kfree(tz);
604 return NULL; 615 return ERR_PTR(result);
605 } 616 }
606 617
607 /* sys I/F */ 618 /* sys I/F */
@@ -643,7 +654,7 @@ struct thermal_zone_device *thermal_zone_device_register(char *type,
643 unregister: 654 unregister:
644 release_idr(&thermal_tz_idr, &thermal_idr_lock, tz->id); 655 release_idr(&thermal_tz_idr, &thermal_idr_lock, tz->id);
645 device_unregister(&tz->device); 656 device_unregister(&tz->device);
646 return NULL; 657 return ERR_PTR(result);
647} 658}
648 659
649EXPORT_SYMBOL(thermal_zone_device_register); 660EXPORT_SYMBOL(thermal_zone_device_register);
diff --git a/drivers/uio/uio.c b/drivers/uio/uio.c
index 2a77e9d42c68..e8a01f264540 100644
--- a/drivers/uio/uio.c
+++ b/drivers/uio/uio.c
@@ -57,29 +57,29 @@ struct uio_map {
57}; 57};
58#define to_map(map) container_of(map, struct uio_map, kobj) 58#define to_map(map) container_of(map, struct uio_map, kobj)
59 59
60 60static ssize_t map_addr_show(struct uio_mem *mem, char *buf)
61static ssize_t map_attr_show(struct kobject *kobj, struct kobj_attribute *attr,
62 char *buf)
63{ 61{
64 struct uio_map *map = to_map(kobj); 62 return sprintf(buf, "0x%lx\n", mem->addr);
65 struct uio_mem *mem = map->mem; 63}
66
67 if (strncmp(attr->attr.name, "addr", 4) == 0)
68 return sprintf(buf, "0x%lx\n", mem->addr);
69
70 if (strncmp(attr->attr.name, "size", 4) == 0)
71 return sprintf(buf, "0x%lx\n", mem->size);
72 64
73 return -ENODEV; 65static ssize_t map_size_show(struct uio_mem *mem, char *buf)
66{
67 return sprintf(buf, "0x%lx\n", mem->size);
74} 68}
75 69
76static struct kobj_attribute attr_attribute = 70struct uio_sysfs_entry {
77 __ATTR(addr, S_IRUGO, map_attr_show, NULL); 71 struct attribute attr;
78static struct kobj_attribute size_attribute = 72 ssize_t (*show)(struct uio_mem *, char *);
79 __ATTR(size, S_IRUGO, map_attr_show, NULL); 73 ssize_t (*store)(struct uio_mem *, const char *, size_t);
74};
75
76static struct uio_sysfs_entry addr_attribute =
77 __ATTR(addr, S_IRUGO, map_addr_show, NULL);
78static struct uio_sysfs_entry size_attribute =
79 __ATTR(size, S_IRUGO, map_size_show, NULL);
80 80
81static struct attribute *attrs[] = { 81static struct attribute *attrs[] = {
82 &attr_attribute.attr, 82 &addr_attribute.attr,
83 &size_attribute.attr, 83 &size_attribute.attr,
84 NULL, /* need to NULL terminate the list of attributes */ 84 NULL, /* need to NULL terminate the list of attributes */
85}; 85};
@@ -90,8 +90,28 @@ static void map_release(struct kobject *kobj)
90 kfree(map); 90 kfree(map);
91} 91}
92 92
93static ssize_t map_type_show(struct kobject *kobj, struct attribute *attr,
94 char *buf)
95{
96 struct uio_map *map = to_map(kobj);
97 struct uio_mem *mem = map->mem;
98 struct uio_sysfs_entry *entry;
99
100 entry = container_of(attr, struct uio_sysfs_entry, attr);
101
102 if (!entry->show)
103 return -EIO;
104
105 return entry->show(mem, buf);
106}
107
108static struct sysfs_ops uio_sysfs_ops = {
109 .show = map_type_show,
110};
111
93static struct kobj_type map_attr_type = { 112static struct kobj_type map_attr_type = {
94 .release = map_release, 113 .release = map_release,
114 .sysfs_ops = &uio_sysfs_ops,
95 .default_attrs = attrs, 115 .default_attrs = attrs,
96}; 116};
97 117
diff --git a/drivers/usb/class/cdc-acm.c b/drivers/usb/class/cdc-acm.c
index bcc42136c93f..0147ea39340e 100644
--- a/drivers/usb/class/cdc-acm.c
+++ b/drivers/usb/class/cdc-acm.c
@@ -496,13 +496,10 @@ static int acm_tty_open(struct tty_struct *tty, struct file *filp)
496 otherwise it is scheduled, and with high data rates data can get lost. */ 496 otherwise it is scheduled, and with high data rates data can get lost. */
497 tty->low_latency = 1; 497 tty->low_latency = 1;
498 498
499 if (usb_autopm_get_interface(acm->control)) { 499 if (usb_autopm_get_interface(acm->control) < 0)
500 mutex_unlock(&open_mutex); 500 goto early_bail;
501 return -EIO;
502 }
503 501
504 mutex_lock(&acm->mutex); 502 mutex_lock(&acm->mutex);
505 mutex_unlock(&open_mutex);
506 if (acm->used++) { 503 if (acm->used++) {
507 usb_autopm_put_interface(acm->control); 504 usb_autopm_put_interface(acm->control);
508 goto done; 505 goto done;
@@ -536,6 +533,7 @@ static int acm_tty_open(struct tty_struct *tty, struct file *filp)
536done: 533done:
537err_out: 534err_out:
538 mutex_unlock(&acm->mutex); 535 mutex_unlock(&acm->mutex);
536 mutex_unlock(&open_mutex);
539 return rv; 537 return rv;
540 538
541full_bailout: 539full_bailout:
@@ -544,6 +542,8 @@ bail_out:
544 usb_autopm_put_interface(acm->control); 542 usb_autopm_put_interface(acm->control);
545 acm->used--; 543 acm->used--;
546 mutex_unlock(&acm->mutex); 544 mutex_unlock(&acm->mutex);
545early_bail:
546 mutex_unlock(&open_mutex);
547 return -EIO; 547 return -EIO;
548} 548}
549 549
diff --git a/drivers/usb/class/usblp.c b/drivers/usb/class/usblp.c
index ad632f2d6f94..0647164d36db 100644
--- a/drivers/usb/class/usblp.c
+++ b/drivers/usb/class/usblp.c
@@ -428,6 +428,7 @@ static int usblp_open(struct inode *inode, struct file *file)
428 usblp->rcomplete = 0; 428 usblp->rcomplete = 0;
429 429
430 if (handle_bidir(usblp) < 0) { 430 if (handle_bidir(usblp) < 0) {
431 usb_autopm_put_interface(intf);
431 usblp->used = 0; 432 usblp->used = 0;
432 file->private_data = NULL; 433 file->private_data = NULL;
433 retval = -EIO; 434 retval = -EIO;
diff --git a/drivers/usb/core/quirks.c b/drivers/usb/core/quirks.c
index d42c561c75f1..f90ab5e94c58 100644
--- a/drivers/usb/core/quirks.c
+++ b/drivers/usb/core/quirks.c
@@ -28,11 +28,23 @@
28 * devices is broken... 28 * devices is broken...
29 */ 29 */
30static const struct usb_device_id usb_quirk_list[] = { 30static const struct usb_device_id usb_quirk_list[] = {
31 /* Action Semiconductor flash disk */
32 { USB_DEVICE(0x10d6, 0x2200), .driver_info = USB_QUIRK_STRING_FETCH_255},
33
31 /* CBM - Flash disk */ 34 /* CBM - Flash disk */
32 { USB_DEVICE(0x0204, 0x6025), .driver_info = USB_QUIRK_RESET_RESUME }, 35 { USB_DEVICE(0x0204, 0x6025), .driver_info = USB_QUIRK_RESET_RESUME },
33 /* HP 5300/5370C scanner */ 36 /* HP 5300/5370C scanner */
34 { USB_DEVICE(0x03f0, 0x0701), .driver_info = USB_QUIRK_STRING_FETCH_255 }, 37 { USB_DEVICE(0x03f0, 0x0701), .driver_info = USB_QUIRK_STRING_FETCH_255 },
35 38
39 /* Creative SB Audigy 2 NX */
40 { USB_DEVICE(0x041e, 0x3020), .driver_info = USB_QUIRK_RESET_RESUME },
41
42 /* Roland SC-8820 */
43 { USB_DEVICE(0x0582, 0x0007), .driver_info = USB_QUIRK_RESET_RESUME },
44
45 /* Edirol SD-20 */
46 { USB_DEVICE(0x0582, 0x0027), .driver_info = USB_QUIRK_RESET_RESUME },
47
36 /* INTEL VALUE SSD */ 48 /* INTEL VALUE SSD */
37 { USB_DEVICE(0x8086, 0xf1a5), .driver_info = USB_QUIRK_RESET_RESUME }, 49 { USB_DEVICE(0x8086, 0xf1a5), .driver_info = USB_QUIRK_RESET_RESUME },
38 50
diff --git a/drivers/usb/gadget/ether.c b/drivers/usb/gadget/ether.c
index a70e255402b8..e99872308144 100644
--- a/drivers/usb/gadget/ether.c
+++ b/drivers/usb/gadget/ether.c
@@ -1561,6 +1561,7 @@ done_set_intf:
1561 memcpy(req->buf, buf, n); 1561 memcpy(req->buf, buf, n);
1562 req->complete = rndis_response_complete; 1562 req->complete = rndis_response_complete;
1563 rndis_free_response(dev->rndis_config, buf); 1563 rndis_free_response(dev->rndis_config, buf);
1564 value = n;
1564 } 1565 }
1565 /* else stalls ... spec says to avoid that */ 1566 /* else stalls ... spec says to avoid that */
1566 } 1567 }
diff --git a/drivers/usb/gadget/printer.c b/drivers/usb/gadget/printer.c
index 9fdabc8fcac4..4f6bfa100f2a 100644
--- a/drivers/usb/gadget/printer.c
+++ b/drivers/usb/gadget/printer.c
@@ -1299,7 +1299,7 @@ printer_unbind(struct usb_gadget *gadget)
1299 printer_req_free(dev->in_ep, req); 1299 printer_req_free(dev->in_ep, req);
1300 } 1300 }
1301 1301
1302 if (dev->current_rx_req != NULL); 1302 if (dev->current_rx_req != NULL)
1303 printer_req_free(dev->out_ep, dev->current_rx_req); 1303 printer_req_free(dev->out_ep, dev->current_rx_req);
1304 1304
1305 while (!list_empty(&dev->rx_reqs)) { 1305 while (!list_empty(&dev->rx_reqs)) {
diff --git a/drivers/usb/host/Kconfig b/drivers/usb/host/Kconfig
index d97b16b52efa..bf8be2a41a4a 100644
--- a/drivers/usb/host/Kconfig
+++ b/drivers/usb/host/Kconfig
@@ -69,10 +69,9 @@ config USB_EHCI_BIG_ENDIAN_DESC
69 default y 69 default y
70 70
71config USB_EHCI_FSL 71config USB_EHCI_FSL
72 bool 72 bool "Support for Freescale on-chip EHCI USB controller"
73 depends on USB_EHCI_HCD 73 depends on USB_EHCI_HCD && FSL_SOC
74 select USB_EHCI_ROOT_HUB_TT 74 select USB_EHCI_ROOT_HUB_TT
75 default y if MPC834x || PPC_MPC831x
76 ---help--- 75 ---help---
77 Variation of ARC USB block used in some Freescale chips. 76 Variation of ARC USB block used in some Freescale chips.
78 77
diff --git a/drivers/usb/host/ehci-hcd.c b/drivers/usb/host/ehci-hcd.c
index 4caa6a8b9a37..b8ad55aff842 100644
--- a/drivers/usb/host/ehci-hcd.c
+++ b/drivers/usb/host/ehci-hcd.c
@@ -862,18 +862,18 @@ static int ehci_urb_dequeue(struct usb_hcd *hcd, struct urb *urb, int status)
862 /* reschedule QH iff another request is queued */ 862 /* reschedule QH iff another request is queued */
863 if (!list_empty (&qh->qtd_list) 863 if (!list_empty (&qh->qtd_list)
864 && HC_IS_RUNNING (hcd->state)) { 864 && HC_IS_RUNNING (hcd->state)) {
865 int schedule_status; 865 rc = qh_schedule(ehci, qh);
866 866
867 schedule_status = qh_schedule (ehci, qh); 867 /* An error here likely indicates handshake failure
868 spin_unlock_irqrestore (&ehci->lock, flags); 868 * or no space left in the schedule. Neither fault
869 869 * should happen often ...
870 if (schedule_status != 0) { 870 *
871 // shouldn't happen often, but ... 871 * FIXME kill the now-dysfunctional queued urbs
872 // FIXME kill those tds' urbs 872 */
873 err ("can't reschedule qh %p, err %d", 873 if (rc != 0)
874 qh, schedule_status); 874 ehci_err(ehci,
875 } 875 "can't reschedule qh %p, err %d",
876 return status; 876 qh, rc);
877 } 877 }
878 break; 878 break;
879 879
@@ -1014,7 +1014,7 @@ MODULE_LICENSE ("GPL");
1014#endif 1014#endif
1015 1015
1016#if !defined(PCI_DRIVER) && !defined(PLATFORM_DRIVER) && \ 1016#if !defined(PCI_DRIVER) && !defined(PLATFORM_DRIVER) && \
1017 !defined(PS3_SYSTEM_BUS_DRIVER) 1017 !defined(PS3_SYSTEM_BUS_DRIVER) && !defined(OF_PLATFORM_DRIVER)
1018#error "missing bus glue for ehci-hcd" 1018#error "missing bus glue for ehci-hcd"
1019#endif 1019#endif
1020 1020
diff --git a/drivers/usb/host/sl811-hcd.c b/drivers/usb/host/sl811-hcd.c
index ba370c56172c..59be276ccd9d 100644
--- a/drivers/usb/host/sl811-hcd.c
+++ b/drivers/usb/host/sl811-hcd.c
@@ -1766,6 +1766,7 @@ sl811h_suspend(struct platform_device *dev, pm_message_t state)
1766 retval = sl811h_bus_suspend(hcd); 1766 retval = sl811h_bus_suspend(hcd);
1767 break; 1767 break;
1768 case PM_EVENT_SUSPEND: 1768 case PM_EVENT_SUSPEND:
1769 case PM_EVENT_HIBERNATE:
1769 case PM_EVENT_PRETHAW: /* explicitly discard hw state */ 1770 case PM_EVENT_PRETHAW: /* explicitly discard hw state */
1770 port_power(sl811, 0); 1771 port_power(sl811, 0);
1771 break; 1772 break;
diff --git a/drivers/usb/host/u132-hcd.c b/drivers/usb/host/u132-hcd.c
index ac283b09a63f..3033d6945202 100644
--- a/drivers/usb/host/u132-hcd.c
+++ b/drivers/usb/host/u132-hcd.c
@@ -3213,15 +3213,20 @@ static int u132_suspend(struct platform_device *pdev, pm_message_t state)
3213 dev_err(&u132->platform_dev->dev, "device is being removed\n"); 3213 dev_err(&u132->platform_dev->dev, "device is being removed\n");
3214 return -ESHUTDOWN; 3214 return -ESHUTDOWN;
3215 } else { 3215 } else {
3216 int retval = 0; 3216 int retval = 0, ports;
3217 if (state.event == PM_EVENT_FREEZE) { 3217
3218 switch (state.event) {
3219 case PM_EVENT_FREEZE:
3218 retval = u132_bus_suspend(hcd); 3220 retval = u132_bus_suspend(hcd);
3219 } else if (state.event == PM_EVENT_SUSPEND) { 3221 break;
3220 int ports = MAX_U132_PORTS; 3222 case PM_EVENT_SUSPEND:
3223 case PM_EVENT_HIBERNATE:
3224 ports = MAX_U132_PORTS;
3221 while (ports-- > 0) { 3225 while (ports-- > 0) {
3222 port_power(u132, ports, 0); 3226 port_power(u132, ports, 0);
3223 } 3227 }
3224 } 3228 break;
3229 }
3225 if (retval == 0) 3230 if (retval == 0)
3226 pdev->dev.power.power_state = state; 3231 pdev->dev.power.power_state = state;
3227 return retval; 3232 return retval;
diff --git a/drivers/usb/misc/ldusb.c b/drivers/usb/misc/ldusb.c
index 8208496dfc63..c730d20eec66 100644
--- a/drivers/usb/misc/ldusb.c
+++ b/drivers/usb/misc/ldusb.c
@@ -61,6 +61,7 @@
61#define USB_DEVICE_ID_VERNIER_GOTEMP 0x0002 61#define USB_DEVICE_ID_VERNIER_GOTEMP 0x0002
62#define USB_DEVICE_ID_VERNIER_SKIP 0x0003 62#define USB_DEVICE_ID_VERNIER_SKIP 0x0003
63#define USB_DEVICE_ID_VERNIER_CYCLOPS 0x0004 63#define USB_DEVICE_ID_VERNIER_CYCLOPS 0x0004
64#define USB_DEVICE_ID_VERNIER_LCSPEC 0x0006
64 65
65#define USB_VENDOR_ID_MICROCHIP 0x04d8 66#define USB_VENDOR_ID_MICROCHIP 0x04d8
66#define USB_DEVICE_ID_PICDEM 0x000c 67#define USB_DEVICE_ID_PICDEM 0x000c
@@ -92,6 +93,7 @@ static struct usb_device_id ld_usb_table [] = {
92 { USB_DEVICE(USB_VENDOR_ID_VERNIER, USB_DEVICE_ID_VERNIER_SKIP) }, 93 { USB_DEVICE(USB_VENDOR_ID_VERNIER, USB_DEVICE_ID_VERNIER_SKIP) },
93 { USB_DEVICE(USB_VENDOR_ID_VERNIER, USB_DEVICE_ID_VERNIER_CYCLOPS) }, 94 { USB_DEVICE(USB_VENDOR_ID_VERNIER, USB_DEVICE_ID_VERNIER_CYCLOPS) },
94 { USB_DEVICE(USB_VENDOR_ID_MICROCHIP, USB_DEVICE_ID_PICDEM) }, 95 { USB_DEVICE(USB_VENDOR_ID_MICROCHIP, USB_DEVICE_ID_PICDEM) },
96 { USB_DEVICE(USB_VENDOR_ID_VERNIER, USB_DEVICE_ID_VERNIER_LCSPEC) },
95 { } /* Terminating entry */ 97 { } /* Terminating entry */
96}; 98};
97MODULE_DEVICE_TABLE(usb, ld_usb_table); 99MODULE_DEVICE_TABLE(usb, ld_usb_table);
diff --git a/drivers/usb/misc/trancevibrator.c b/drivers/usb/misc/trancevibrator.c
index 67e2fc20eeeb..03368edf3f22 100644
--- a/drivers/usb/misc/trancevibrator.c
+++ b/drivers/usb/misc/trancevibrator.c
@@ -59,13 +59,14 @@ static ssize_t set_speed(struct device *dev, struct device_attribute *attr,
59{ 59{
60 struct usb_interface *intf = to_usb_interface(dev); 60 struct usb_interface *intf = to_usb_interface(dev);
61 struct trancevibrator *tv = usb_get_intfdata(intf); 61 struct trancevibrator *tv = usb_get_intfdata(intf);
62 int temp, retval; 62 int temp, retval, old;
63 63
64 temp = simple_strtoul(buf, NULL, 10); 64 temp = simple_strtoul(buf, NULL, 10);
65 if (temp > 255) 65 if (temp > 255)
66 temp = 255; 66 temp = 255;
67 else if (temp < 0) 67 else if (temp < 0)
68 temp = 0; 68 temp = 0;
69 old = tv->speed;
69 tv->speed = temp; 70 tv->speed = temp;
70 71
71 dev_dbg(&tv->udev->dev, "speed = %d\n", tv->speed); 72 dev_dbg(&tv->udev->dev, "speed = %d\n", tv->speed);
@@ -77,6 +78,7 @@ static ssize_t set_speed(struct device *dev, struct device_attribute *attr,
77 tv->speed, /* speed value */ 78 tv->speed, /* speed value */
78 0, NULL, 0, USB_CTRL_GET_TIMEOUT); 79 0, NULL, 0, USB_CTRL_GET_TIMEOUT);
79 if (retval) { 80 if (retval) {
81 tv->speed = old;
80 dev_dbg(&tv->udev->dev, "retval = %d\n", retval); 82 dev_dbg(&tv->udev->dev, "retval = %d\n", retval);
81 return retval; 83 return retval;
82 } 84 }
diff --git a/drivers/usb/serial/ftdi_sio.c b/drivers/usb/serial/ftdi_sio.c
index 90dcc625f70d..76db2fef4657 100644
--- a/drivers/usb/serial/ftdi_sio.c
+++ b/drivers/usb/serial/ftdi_sio.c
@@ -393,8 +393,8 @@ static const char *ftdi_chip_name[] = {
393#define FTDI_STATUS_B1_MASK (FTDI_RS_BI) 393#define FTDI_STATUS_B1_MASK (FTDI_RS_BI)
394/* End TIOCMIWAIT */ 394/* End TIOCMIWAIT */
395 395
396#define FTDI_IMPL_ASYNC_FLAGS = ( ASYNC_SPD_HI | ASYNC_SPD_VHI \ 396#define FTDI_IMPL_ASYNC_FLAGS = (ASYNC_SPD_HI | ASYNC_SPD_VHI \
397 ASYNC_SPD_CUST | ASYNC_SPD_SHI | ASYNC_SPD_WARP ) 397 | ASYNC_SPD_CUST | ASYNC_SPD_SHI | ASYNC_SPD_WARP)
398 398
399/* function prototypes for a FTDI serial converter */ 399/* function prototypes for a FTDI serial converter */
400static int ftdi_sio_probe (struct usb_serial *serial, const struct usb_device_id *id); 400static int ftdi_sio_probe (struct usb_serial *serial, const struct usb_device_id *id);
diff --git a/drivers/usb/serial/option.c b/drivers/usb/serial/option.c
index 5e8bf1bc1e50..af2674c57414 100644
--- a/drivers/usb/serial/option.c
+++ b/drivers/usb/serial/option.c
@@ -113,6 +113,9 @@ static int option_send_setup(struct usb_serial_port *port);
113#define NOVATELWIRELESS_VENDOR_ID 0x1410 113#define NOVATELWIRELESS_VENDOR_ID 0x1410
114#define DELL_VENDOR_ID 0x413C 114#define DELL_VENDOR_ID 0x413C
115 115
116#define KYOCERA_VENDOR_ID 0x0c88
117#define KYOCERA_PRODUCT_KPC680 0x180a
118
116#define ANYDATA_VENDOR_ID 0x16d5 119#define ANYDATA_VENDOR_ID 0x16d5
117#define ANYDATA_PRODUCT_ADU_E100A 0x6501 120#define ANYDATA_PRODUCT_ADU_E100A 0x6501
118#define ANYDATA_PRODUCT_ADU_500A 0x6502 121#define ANYDATA_PRODUCT_ADU_500A 0x6502
@@ -121,6 +124,8 @@ static int option_send_setup(struct usb_serial_port *port);
121#define BANDRICH_PRODUCT_C100_1 0x1002 124#define BANDRICH_PRODUCT_C100_1 0x1002
122#define BANDRICH_PRODUCT_C100_2 0x1003 125#define BANDRICH_PRODUCT_C100_2 0x1003
123 126
127#define QUALCOMM_VENDOR_ID 0x05C6
128
124static struct usb_device_id option_ids[] = { 129static struct usb_device_id option_ids[] = {
125 { USB_DEVICE(OPTION_VENDOR_ID, OPTION_PRODUCT_COLT) }, 130 { USB_DEVICE(OPTION_VENDOR_ID, OPTION_PRODUCT_COLT) },
126 { USB_DEVICE(OPTION_VENDOR_ID, OPTION_PRODUCT_RICOLA) }, 131 { USB_DEVICE(OPTION_VENDOR_ID, OPTION_PRODUCT_RICOLA) },
@@ -174,18 +179,23 @@ static struct usb_device_id option_ids[] = {
174 { USB_DEVICE(NOVATELWIRELESS_VENDOR_ID, 0x2410) }, /* Novatel EU740 */ 179 { USB_DEVICE(NOVATELWIRELESS_VENDOR_ID, 0x2410) }, /* Novatel EU740 */
175 { USB_DEVICE(NOVATELWIRELESS_VENDOR_ID, 0x4100) }, /* Novatel U727 */ 180 { USB_DEVICE(NOVATELWIRELESS_VENDOR_ID, 0x4100) }, /* Novatel U727 */
176 { USB_DEVICE(NOVATELWIRELESS_VENDOR_ID, 0x4400) }, /* Novatel MC950 */ 181 { USB_DEVICE(NOVATELWIRELESS_VENDOR_ID, 0x4400) }, /* Novatel MC950 */
182 { USB_DEVICE(NOVATELWIRELESS_VENDOR_ID, 0x5010) }, /* Novatel U727 */
177 { USB_DEVICE(DELL_VENDOR_ID, 0x8114) }, /* Dell Wireless 5700 Mobile Broadband CDMA/EVDO Mini-Card == Novatel Expedite EV620 CDMA/EV-DO */ 183 { USB_DEVICE(DELL_VENDOR_ID, 0x8114) }, /* Dell Wireless 5700 Mobile Broadband CDMA/EVDO Mini-Card == Novatel Expedite EV620 CDMA/EV-DO */
178 { USB_DEVICE(DELL_VENDOR_ID, 0x8115) }, /* Dell Wireless 5500 Mobile Broadband HSDPA Mini-Card == Novatel Expedite EU740 HSDPA/3G */ 184 { USB_DEVICE(DELL_VENDOR_ID, 0x8115) }, /* Dell Wireless 5500 Mobile Broadband HSDPA Mini-Card == Novatel Expedite EU740 HSDPA/3G */
179 { USB_DEVICE(DELL_VENDOR_ID, 0x8116) }, /* Dell Wireless 5505 Mobile Broadband HSDPA Mini-Card == Novatel Expedite EU740 HSDPA/3G */ 185 { USB_DEVICE(DELL_VENDOR_ID, 0x8116) }, /* Dell Wireless 5505 Mobile Broadband HSDPA Mini-Card == Novatel Expedite EU740 HSDPA/3G */
180 { USB_DEVICE(DELL_VENDOR_ID, 0x8117) }, /* Dell Wireless 5700 Mobile Broadband CDMA/EVDO ExpressCard == Novatel Merlin XV620 CDMA/EV-DO */ 186 { USB_DEVICE(DELL_VENDOR_ID, 0x8117) }, /* Dell Wireless 5700 Mobile Broadband CDMA/EVDO ExpressCard == Novatel Merlin XV620 CDMA/EV-DO */
181 { USB_DEVICE(DELL_VENDOR_ID, 0x8118) }, /* Dell Wireless 5510 Mobile Broadband HSDPA ExpressCard == Novatel Merlin XU870 HSDPA/3G */ 187 { USB_DEVICE(DELL_VENDOR_ID, 0x8118) }, /* Dell Wireless 5510 Mobile Broadband HSDPA ExpressCard == Novatel Merlin XU870 HSDPA/3G */
182 { USB_DEVICE(DELL_VENDOR_ID, 0x8128) }, /* Dell Wireless 5700 Mobile Broadband CDMA/EVDO Mini-Card == Novatel Expedite E720 CDMA/EV-DO */ 188 { USB_DEVICE(DELL_VENDOR_ID, 0x8128) }, /* Dell Wireless 5700 Mobile Broadband CDMA/EVDO Mini-Card == Novatel Expedite E720 CDMA/EV-DO */
189 { USB_DEVICE(DELL_VENDOR_ID, 0x8129) }, /* Dell Wireless 5700 Mobile Broadband CDMA/EVDO Mini-Card == Novatel Expedite ET620 CDMA/EV-DO */
190 { USB_DEVICE(DELL_VENDOR_ID, 0x8133) }, /* Dell Wireless 5720 == Novatel EV620 CDMA/EV-DO */
183 { USB_DEVICE(DELL_VENDOR_ID, 0x8136) }, /* Dell Wireless HSDPA 5520 == Novatel Expedite EU860D */ 191 { USB_DEVICE(DELL_VENDOR_ID, 0x8136) }, /* Dell Wireless HSDPA 5520 == Novatel Expedite EU860D */
184 { USB_DEVICE(DELL_VENDOR_ID, 0x8137) }, /* Dell Wireless HSDPA 5520 */ 192 { USB_DEVICE(DELL_VENDOR_ID, 0x8137) }, /* Dell Wireless HSDPA 5520 */
185 { USB_DEVICE(ANYDATA_VENDOR_ID, ANYDATA_PRODUCT_ADU_E100A) }, 193 { USB_DEVICE(ANYDATA_VENDOR_ID, ANYDATA_PRODUCT_ADU_E100A) },
186 { USB_DEVICE(ANYDATA_VENDOR_ID, ANYDATA_PRODUCT_ADU_500A) }, 194 { USB_DEVICE(ANYDATA_VENDOR_ID, ANYDATA_PRODUCT_ADU_500A) },
187 { USB_DEVICE(BANDRICH_VENDOR_ID, BANDRICH_PRODUCT_C100_1) }, 195 { USB_DEVICE(BANDRICH_VENDOR_ID, BANDRICH_PRODUCT_C100_1) },
188 { USB_DEVICE(BANDRICH_VENDOR_ID, BANDRICH_PRODUCT_C100_2) }, 196 { USB_DEVICE(BANDRICH_VENDOR_ID, BANDRICH_PRODUCT_C100_2) },
197 { USB_DEVICE(KYOCERA_VENDOR_ID, KYOCERA_PRODUCT_KPC680) },
198 { USB_DEVICE(QUALCOMM_VENDOR_ID, 0x6613)}, /* Onda H600/ZTE MF330 */
189 { } /* Terminating entry */ 199 { } /* Terminating entry */
190}; 200};
191MODULE_DEVICE_TABLE(usb, option_ids); 201MODULE_DEVICE_TABLE(usb, option_ids);
@@ -247,10 +257,10 @@ static int debug;
247struct option_port_private { 257struct option_port_private {
248 /* Input endpoints and buffer for this port */ 258 /* Input endpoints and buffer for this port */
249 struct urb *in_urbs[N_IN_URB]; 259 struct urb *in_urbs[N_IN_URB];
250 char in_buffer[N_IN_URB][IN_BUFLEN]; 260 u8 *in_buffer[N_IN_URB];
251 /* Output endpoints and buffer for this port */ 261 /* Output endpoints and buffer for this port */
252 struct urb *out_urbs[N_OUT_URB]; 262 struct urb *out_urbs[N_OUT_URB];
253 char out_buffer[N_OUT_URB][OUT_BUFLEN]; 263 u8 *out_buffer[N_OUT_URB];
254 unsigned long out_busy; /* Bit vector of URBs in use */ 264 unsigned long out_busy; /* Bit vector of URBs in use */
255 265
256 /* Settings for the port */ 266 /* Settings for the port */
@@ -737,9 +747,10 @@ static int option_send_setup(struct usb_serial_port *port)
737 747
738static int option_startup(struct usb_serial *serial) 748static int option_startup(struct usb_serial *serial)
739{ 749{
740 int i, err; 750 int i, j, err;
741 struct usb_serial_port *port; 751 struct usb_serial_port *port;
742 struct option_port_private *portdata; 752 struct option_port_private *portdata;
753 u8 *buffer;
743 754
744 dbg("%s", __FUNCTION__); 755 dbg("%s", __FUNCTION__);
745 756
@@ -753,6 +764,20 @@ static int option_startup(struct usb_serial *serial)
753 return (1); 764 return (1);
754 } 765 }
755 766
767 for (j = 0; j < N_IN_URB; j++) {
768 buffer = (u8 *)__get_free_page(GFP_KERNEL);
769 if (!buffer)
770 goto bail_out_error;
771 portdata->in_buffer[j] = buffer;
772 }
773
774 for (j = 0; j < N_OUT_URB; j++) {
775 buffer = kmalloc(OUT_BUFLEN, GFP_KERNEL);
776 if (!buffer)
777 goto bail_out_error2;
778 portdata->out_buffer[j] = buffer;
779 }
780
756 usb_set_serial_port_data(port, portdata); 781 usb_set_serial_port_data(port, portdata);
757 782
758 if (! port->interrupt_in_urb) 783 if (! port->interrupt_in_urb)
@@ -766,6 +791,16 @@ static int option_startup(struct usb_serial *serial)
766 option_setup_urbs(serial); 791 option_setup_urbs(serial);
767 792
768 return (0); 793 return (0);
794
795bail_out_error2:
796 for (j = 0; j < N_OUT_URB; j++)
797 kfree(portdata->out_buffer[j]);
798bail_out_error:
799 for (j = 0; j < N_IN_URB; j++)
800 if (portdata->in_buffer[j])
801 free_page((unsigned long)portdata->in_buffer[j]);
802 kfree(portdata);
803 return 1;
769} 804}
770 805
771static void option_shutdown(struct usb_serial *serial) 806static void option_shutdown(struct usb_serial *serial)
@@ -794,12 +829,14 @@ static void option_shutdown(struct usb_serial *serial)
794 for (j = 0; j < N_IN_URB; j++) { 829 for (j = 0; j < N_IN_URB; j++) {
795 if (portdata->in_urbs[j]) { 830 if (portdata->in_urbs[j]) {
796 usb_free_urb(portdata->in_urbs[j]); 831 usb_free_urb(portdata->in_urbs[j]);
832 free_page((unsigned long)portdata->in_buffer[j]);
797 portdata->in_urbs[j] = NULL; 833 portdata->in_urbs[j] = NULL;
798 } 834 }
799 } 835 }
800 for (j = 0; j < N_OUT_URB; j++) { 836 for (j = 0; j < N_OUT_URB; j++) {
801 if (portdata->out_urbs[j]) { 837 if (portdata->out_urbs[j]) {
802 usb_free_urb(portdata->out_urbs[j]); 838 usb_free_urb(portdata->out_urbs[j]);
839 kfree(portdata->out_buffer[j]);
803 portdata->out_urbs[j] = NULL; 840 portdata->out_urbs[j] = NULL;
804 } 841 }
805 } 842 }
diff --git a/drivers/usb/serial/sierra.c b/drivers/usb/serial/sierra.c
index 4c925e3e8a63..e3d44ae8d448 100644
--- a/drivers/usb/serial/sierra.c
+++ b/drivers/usb/serial/sierra.c
@@ -178,7 +178,6 @@ static struct usb_device_id id_table [] = {
178 178
179 { USB_DEVICE(0x1199, 0x0112), .driver_info = DEVICE_1_PORT }, /* Sierra Wireless AirCard 580 */ 179 { USB_DEVICE(0x1199, 0x0112), .driver_info = DEVICE_1_PORT }, /* Sierra Wireless AirCard 580 */
180 { USB_DEVICE(0x0F3D, 0x0112), .driver_info = DEVICE_1_PORT }, /* Airprime/Sierra PC 5220 */ 180 { USB_DEVICE(0x0F3D, 0x0112), .driver_info = DEVICE_1_PORT }, /* Airprime/Sierra PC 5220 */
181 { USB_DEVICE(0x05C6, 0x6613), .driver_info = DEVICE_1_PORT }, /* Onda H600/ZTE MF330 */
182 181
183 { USB_DEVICE(0x1199, 0x0FFF), .driver_info = DEVICE_INSTALLER}, 182 { USB_DEVICE(0x1199, 0x0FFF), .driver_info = DEVICE_INSTALLER},
184 { } 183 { }
diff --git a/drivers/usb/storage/protocol.c b/drivers/usb/storage/protocol.c
index a41ce21c0697..958f5b17847c 100644
--- a/drivers/usb/storage/protocol.c
+++ b/drivers/usb/storage/protocol.c
@@ -150,13 +150,14 @@ void usb_stor_transparent_scsi_command(struct scsi_cmnd *srb,
150 150
151/* Copy a buffer of length buflen to/from the srb's transfer buffer. 151/* Copy a buffer of length buflen to/from the srb's transfer buffer.
152 * Update the **sgptr and *offset variables so that the next copy will 152 * Update the **sgptr and *offset variables so that the next copy will
153 * pick up from where this one left off. */ 153 * pick up from where this one left off.
154 154 */
155unsigned int usb_stor_access_xfer_buf(unsigned char *buffer, 155unsigned int usb_stor_access_xfer_buf(unsigned char *buffer,
156 unsigned int buflen, struct scsi_cmnd *srb, struct scatterlist **sgptr, 156 unsigned int buflen, struct scsi_cmnd *srb, struct scatterlist **sgptr,
157 unsigned int *offset, enum xfer_buf_dir dir) 157 unsigned int *offset, enum xfer_buf_dir dir)
158{ 158{
159 unsigned int cnt; 159 unsigned int cnt;
160 struct scatterlist *sg = *sgptr;
160 161
161 /* We have to go through the list one entry 162 /* We have to go through the list one entry
162 * at a time. Each s-g entry contains some number of pages, and 163 * at a time. Each s-g entry contains some number of pages, and
@@ -164,22 +165,23 @@ unsigned int usb_stor_access_xfer_buf(unsigned char *buffer,
164 * in kernel-addressable memory then kmap() will return its address. 165 * in kernel-addressable memory then kmap() will return its address.
165 * If the page is not directly accessible -- such as a user buffer 166 * If the page is not directly accessible -- such as a user buffer
166 * located in high memory -- then kmap() will map it to a temporary 167 * located in high memory -- then kmap() will map it to a temporary
167 * position in the kernel's virtual address space. */ 168 * position in the kernel's virtual address space.
168 struct scatterlist *sg = *sgptr; 169 */
169 170
170 if (!sg) 171 if (!sg)
171 sg = scsi_sglist(srb); 172 sg = scsi_sglist(srb);
173 buflen = min(buflen, scsi_bufflen(srb));
172 174
173 /* This loop handles a single s-g list entry, which may 175 /* This loop handles a single s-g list entry, which may
174 * include multiple pages. Find the initial page structure 176 * include multiple pages. Find the initial page structure
175 * and the starting offset within the page, and update 177 * and the starting offset within the page, and update
176 * the *offset and **sgptr values for the next loop. */ 178 * the *offset and **sgptr values for the next loop.
179 */
177 cnt = 0; 180 cnt = 0;
178 while (cnt < buflen) { 181 while (cnt < buflen && sg) {
179 struct page *page = sg_page(sg) + 182 struct page *page = sg_page(sg) +
180 ((sg->offset + *offset) >> PAGE_SHIFT); 183 ((sg->offset + *offset) >> PAGE_SHIFT);
181 unsigned int poff = 184 unsigned int poff = (sg->offset + *offset) & (PAGE_SIZE-1);
182 (sg->offset + *offset) & (PAGE_SIZE-1);
183 unsigned int sglen = sg->length - *offset; 185 unsigned int sglen = sg->length - *offset;
184 186
185 if (sglen > buflen - cnt) { 187 if (sglen > buflen - cnt) {
@@ -222,14 +224,15 @@ unsigned int usb_stor_access_xfer_buf(unsigned char *buffer,
222} 224}
223 225
224/* Store the contents of buffer into srb's transfer buffer and set the 226/* Store the contents of buffer into srb's transfer buffer and set the
225 * SCSI residue. */ 227 * SCSI residue.
228 */
226void usb_stor_set_xfer_buf(unsigned char *buffer, 229void usb_stor_set_xfer_buf(unsigned char *buffer,
227 unsigned int buflen, struct scsi_cmnd *srb) 230 unsigned int buflen, struct scsi_cmnd *srb)
228{ 231{
229 unsigned int offset = 0; 232 unsigned int offset = 0;
230 struct scatterlist *sg = NULL; 233 struct scatterlist *sg = NULL;
231 234
232 usb_stor_access_xfer_buf(buffer, buflen, srb, &sg, &offset, 235 buflen = usb_stor_access_xfer_buf(buffer, buflen, srb, &sg, &offset,
233 TO_XFER_BUF); 236 TO_XFER_BUF);
234 if (buflen < scsi_bufflen(srb)) 237 if (buflen < scsi_bufflen(srb))
235 scsi_set_resid(srb, scsi_bufflen(srb) - buflen); 238 scsi_set_resid(srb, scsi_bufflen(srb) - buflen);
diff --git a/drivers/usb/storage/transport.c b/drivers/usb/storage/transport.c
index d9f4912f873d..5780ed15f1ad 100644
--- a/drivers/usb/storage/transport.c
+++ b/drivers/usb/storage/transport.c
@@ -891,17 +891,6 @@ int usb_stor_Bulk_max_lun(struct us_data *us)
891 if (result > 0) 891 if (result > 0)
892 return us->iobuf[0]; 892 return us->iobuf[0];
893 893
894 /*
895 * Some devices (i.e. Iomega Zip100) need this -- apparently
896 * the bulk pipes get STALLed when the GetMaxLUN request is
897 * processed. This is, in theory, harmless to all other devices
898 * (regardless of if they stall or not).
899 */
900 if (result == -EPIPE) {
901 usb_stor_clear_halt(us, us->recv_bulk_pipe);
902 usb_stor_clear_halt(us, us->send_bulk_pipe);
903 }
904
905 /* 894 /*
906 * Some devices don't like GetMaxLUN. They may STALL the control 895 * Some devices don't like GetMaxLUN. They may STALL the control
907 * pipe, they may return a zero-length result, they may do nothing at 896 * pipe, they may return a zero-length result, they may do nothing at
diff --git a/drivers/usb/storage/unusual_devs.h b/drivers/usb/storage/unusual_devs.h
index fe12737e0e2b..99679a8cfa02 100644
--- a/drivers/usb/storage/unusual_devs.h
+++ b/drivers/usb/storage/unusual_devs.h
@@ -357,7 +357,7 @@ UNUSUAL_DEV( 0x04b0, 0x040f, 0x0100, 0x0200,
357 US_FL_FIX_CAPACITY), 357 US_FL_FIX_CAPACITY),
358 358
359/* Reported by Emil Larsson <emil@swip.net> */ 359/* Reported by Emil Larsson <emil@swip.net> */
360UNUSUAL_DEV( 0x04b0, 0x0411, 0x0100, 0x0101, 360UNUSUAL_DEV( 0x04b0, 0x0411, 0x0100, 0x0110,
361 "NIKON", 361 "NIKON",
362 "NIKON DSC D80", 362 "NIKON DSC D80",
363 US_SC_DEVICE, US_PR_DEVICE, NULL, 363 US_SC_DEVICE, US_PR_DEVICE, NULL,
@@ -759,6 +759,18 @@ UNUSUAL_DEV( 0x0595, 0x4343, 0x0000, 0x2210,
759 "Digital Camera EX-20 DSC", 759 "Digital Camera EX-20 DSC",
760 US_SC_8070, US_PR_DEVICE, NULL, 0 ), 760 US_SC_8070, US_PR_DEVICE, NULL, 0 ),
761 761
762/* Reported by Andre Welter <a.r.welter@gmx.de>
763 * This antique device predates the release of the Bulk-only Transport
764 * spec, and if it gets a Get-Max-LUN then it requires the host to do a
765 * Clear-Halt on the bulk endpoints. The SINGLE_LUN flag will prevent
766 * us from sending the request.
767 */
768UNUSUAL_DEV( 0x059b, 0x0001, 0x0100, 0x0100,
769 "Iomega",
770 "ZIP 100",
771 US_SC_DEVICE, US_PR_DEVICE, NULL,
772 US_FL_SINGLE_LUN ),
773
762/* Reported by <Hendryk.Pfeiffer@gmx.de> */ 774/* Reported by <Hendryk.Pfeiffer@gmx.de> */
763UNUSUAL_DEV( 0x059f, 0x0643, 0x0000, 0x0000, 775UNUSUAL_DEV( 0x059f, 0x0643, 0x0000, 0x0000,
764 "LaCie", 776 "LaCie",
@@ -1412,6 +1424,17 @@ UNUSUAL_DEV( 0x0ed1, 0x7636, 0x0103, 0x0103,
1412 US_SC_DEVICE, US_PR_DEVICE, NULL, 1424 US_SC_DEVICE, US_PR_DEVICE, NULL,
1413 US_FL_IGNORE_RESIDUE | US_FL_GO_SLOW | US_FL_MAX_SECTORS_64), 1425 US_FL_IGNORE_RESIDUE | US_FL_GO_SLOW | US_FL_MAX_SECTORS_64),
1414 1426
1427/* Patch by Leonid Petrov mail at lpetrov.net
1428 * Reported by Robert Spitzenpfeil <robert@spitzenpfeil.org>
1429 * http://www.qbik.ch/usb/devices/showdev.php?id=1705
1430 * Updated to 103 device by MJ Ray mjr at phonecoop.coop
1431 */
1432UNUSUAL_DEV( 0x0f19, 0x0103, 0x0100, 0x0100,
1433 "Oracom Co., Ltd",
1434 "ORC-200M",
1435 US_SC_DEVICE, US_PR_DEVICE, NULL,
1436 US_FL_IGNORE_RESIDUE ),
1437
1415/* David Kuehling <dvdkhlng@gmx.de>: 1438/* David Kuehling <dvdkhlng@gmx.de>:
1416 * for MP3-Player AVOX WSX-300ER (bought in Japan). Reports lots of SCSI 1439 * for MP3-Player AVOX WSX-300ER (bought in Japan). Reports lots of SCSI
1417 * errors when trying to write. 1440 * errors when trying to write.
@@ -1477,6 +1500,15 @@ UNUSUAL_DEV( 0x1019, 0x0c55, 0x0000, 0x0110,
1477 US_SC_DEVICE, US_PR_DEVICE, usb_stor_ucr61s2b_init, 1500 US_SC_DEVICE, US_PR_DEVICE, usb_stor_ucr61s2b_init,
1478 0 ), 1501 0 ),
1479 1502
1503/* Reported by Fabio Venturi <f.venturi@tdnet.it>
1504 * The device reports a vendor-specific bDeviceClass.
1505 */
1506UNUSUAL_DEV( 0x10d6, 0x2200, 0x0100, 0x0100,
1507 "Actions Semiconductor",
1508 "Mtp device",
1509 US_SC_DEVICE, US_PR_DEVICE, NULL,
1510 0),
1511
1480/* Reported by Kevin Lloyd <linux@sierrawireless.com> 1512/* Reported by Kevin Lloyd <linux@sierrawireless.com>
1481 * Entry is needed for the initializer function override, 1513 * Entry is needed for the initializer function override,
1482 * which instructs the device to load as a modem 1514 * which instructs the device to load as a modem
diff --git a/drivers/video/aty/atyfb_base.c b/drivers/video/aty/atyfb_base.c
index d775eb6590b6..62f9c6e387cc 100644
--- a/drivers/video/aty/atyfb_base.c
+++ b/drivers/video/aty/atyfb_base.c
@@ -1913,61 +1913,6 @@ static int atyfb_mmap(struct fb_info *info, struct vm_area_struct *vma)
1913 par->mmaped = 1; 1913 par->mmaped = 1;
1914 return 0; 1914 return 0;
1915} 1915}
1916
1917static struct {
1918 u32 yoffset;
1919 u8 r[2][256];
1920 u8 g[2][256];
1921 u8 b[2][256];
1922} atyfb_save;
1923
1924static void atyfb_save_palette(struct atyfb_par *par, int enter)
1925{
1926 int i, tmp;
1927
1928 for (i = 0; i < 256; i++) {
1929 tmp = aty_ld_8(DAC_CNTL, par) & 0xfc;
1930 if (M64_HAS(EXTRA_BRIGHT))
1931 tmp |= 0x2;
1932 aty_st_8(DAC_CNTL, tmp, par);
1933 aty_st_8(DAC_MASK, 0xff, par);
1934
1935 aty_st_8(DAC_R_INDEX, i, par);
1936 atyfb_save.r[enter][i] = aty_ld_8(DAC_DATA, par);
1937 atyfb_save.g[enter][i] = aty_ld_8(DAC_DATA, par);
1938 atyfb_save.b[enter][i] = aty_ld_8(DAC_DATA, par);
1939 aty_st_8(DAC_W_INDEX, i, par);
1940 aty_st_8(DAC_DATA, atyfb_save.r[1 - enter][i], par);
1941 aty_st_8(DAC_DATA, atyfb_save.g[1 - enter][i], par);
1942 aty_st_8(DAC_DATA, atyfb_save.b[1 - enter][i], par);
1943 }
1944}
1945
1946static void atyfb_palette(int enter)
1947{
1948 struct atyfb_par *par;
1949 struct fb_info *info;
1950 int i;
1951
1952 for (i = 0; i < FB_MAX; i++) {
1953 info = registered_fb[i];
1954 if (info && info->fbops == &atyfb_ops) {
1955 par = (struct atyfb_par *) info->par;
1956
1957 atyfb_save_palette(par, enter);
1958 if (enter) {
1959 atyfb_save.yoffset = info->var.yoffset;
1960 info->var.yoffset = 0;
1961 set_off_pitch(par, info);
1962 } else {
1963 info->var.yoffset = atyfb_save.yoffset;
1964 set_off_pitch(par, info);
1965 }
1966 aty_st_le32(CRTC_OFF_PITCH, par->crtc.off_pitch, par);
1967 break;
1968 }
1969 }
1970}
1971#endif /* __sparc__ */ 1916#endif /* __sparc__ */
1972 1917
1973 1918
@@ -2670,10 +2615,6 @@ static int __devinit aty_init(struct fb_info *info)
2670 goto aty_init_exit; 2615 goto aty_init_exit;
2671 } 2616 }
2672 2617
2673#ifdef __sparc__
2674 atyfb_save_palette(par, 0);
2675#endif
2676
2677#ifdef CONFIG_FB_ATY_CT 2618#ifdef CONFIG_FB_ATY_CT
2678 if (!noaccel && M64_HAS(INTEGRATED)) 2619 if (!noaccel && M64_HAS(INTEGRATED))
2679 aty_init_cursor(info); 2620 aty_init_cursor(info);
@@ -2900,8 +2841,6 @@ static int atyfb_setcolreg(u_int regno, u_int red, u_int green, u_int blue,
2900 2841
2901#ifdef __sparc__ 2842#ifdef __sparc__
2902 2843
2903extern void (*prom_palette) (int);
2904
2905static int __devinit atyfb_setup_sparc(struct pci_dev *pdev, 2844static int __devinit atyfb_setup_sparc(struct pci_dev *pdev,
2906 struct fb_info *info, unsigned long addr) 2845 struct fb_info *info, unsigned long addr)
2907{ 2846{
@@ -3536,9 +3475,6 @@ static int __devinit atyfb_pci_probe(struct pci_dev *pdev, const struct pci_devi
3536 goto err_release_io; 3475 goto err_release_io;
3537 3476
3538#ifdef __sparc__ 3477#ifdef __sparc__
3539 if (!prom_palette)
3540 prom_palette = atyfb_palette;
3541
3542 /* 3478 /*
3543 * Add /dev/fb mmap values. 3479 * Add /dev/fb mmap values.
3544 */ 3480 */
diff --git a/drivers/video/cg14.c b/drivers/video/cg14.c
index 41f6dbf61be7..fdc9f43ec30a 100644
--- a/drivers/video/cg14.c
+++ b/drivers/video/cg14.c
@@ -16,6 +16,7 @@
16#include <linux/init.h> 16#include <linux/init.h>
17#include <linux/fb.h> 17#include <linux/fb.h>
18#include <linux/mm.h> 18#include <linux/mm.h>
19#include <linux/uaccess.h>
19 20
20#include <asm/io.h> 21#include <asm/io.h>
21#include <asm/prom.h> 22#include <asm/prom.h>
diff --git a/drivers/video/chipsfb.c b/drivers/video/chipsfb.c
index 6796ba62c3c6..777389c40988 100644
--- a/drivers/video/chipsfb.c
+++ b/drivers/video/chipsfb.c
@@ -459,7 +459,7 @@ static int chipsfb_pci_suspend(struct pci_dev *pdev, pm_message_t state)
459 459
460 if (state.event == pdev->dev.power.power_state.event) 460 if (state.event == pdev->dev.power.power_state.event)
461 return 0; 461 return 0;
462 if (state.event != PM_EVENT_SUSPEND) 462 if (!(state.event & PM_EVENT_SLEEP))
463 goto done; 463 goto done;
464 464
465 acquire_console_sem(); 465 acquire_console_sem();
diff --git a/drivers/video/nvidia/nvidia.c b/drivers/video/nvidia/nvidia.c
index 74517b1b26a6..596652d2831f 100644
--- a/drivers/video/nvidia/nvidia.c
+++ b/drivers/video/nvidia/nvidia.c
@@ -1066,7 +1066,7 @@ static int nvidiafb_suspend(struct pci_dev *dev, pm_message_t mesg)
1066 acquire_console_sem(); 1066 acquire_console_sem();
1067 par->pm_state = mesg.event; 1067 par->pm_state = mesg.event;
1068 1068
1069 if (mesg.event == PM_EVENT_SUSPEND) { 1069 if (mesg.event & PM_EVENT_SLEEP) {
1070 fb_set_suspend(info, 1); 1070 fb_set_suspend(info, 1);
1071 nvidiafb_blank(FB_BLANK_POWERDOWN, info); 1071 nvidiafb_blank(FB_BLANK_POWERDOWN, info);
1072 nvidia_write_regs(par, &par->SavedReg); 1072 nvidia_write_regs(par, &par->SavedReg);
diff --git a/drivers/video/pxafb.c b/drivers/video/pxafb.c
index 10f912df2dad..97facb121c73 100644
--- a/drivers/video/pxafb.c
+++ b/drivers/video/pxafb.c
@@ -1046,7 +1046,7 @@ pxafb_freq_policy(struct notifier_block *nb, unsigned long val, void *data)
1046 switch (val) { 1046 switch (val) {
1047 case CPUFREQ_ADJUST: 1047 case CPUFREQ_ADJUST:
1048 case CPUFREQ_INCOMPATIBLE: 1048 case CPUFREQ_INCOMPATIBLE:
1049 printk(KERN_DEBUG "min dma period: %d ps, " 1049 pr_debug("min dma period: %d ps, "
1050 "new clock %d kHz\n", pxafb_display_dma_period(var), 1050 "new clock %d kHz\n", pxafb_display_dma_period(var),
1051 policy->max); 1051 policy->max);
1052 // TODO: fill in min/max values 1052 // TODO: fill in min/max values
@@ -1361,7 +1361,7 @@ static int __init pxafb_parse_options(struct device *dev, char *options)
1361} 1361}
1362#endif 1362#endif
1363 1363
1364int __init pxafb_probe(struct platform_device *dev) 1364static int __init pxafb_probe(struct platform_device *dev)
1365{ 1365{
1366 struct pxafb_info *fbi; 1366 struct pxafb_info *fbi;
1367 struct pxafb_mach_info *inf; 1367 struct pxafb_mach_info *inf;
@@ -1486,7 +1486,7 @@ static struct platform_driver pxafb_driver = {
1486}; 1486};
1487 1487
1488#ifndef MODULE 1488#ifndef MODULE
1489int __devinit pxafb_setup(char *options) 1489static int __devinit pxafb_setup(char *options)
1490{ 1490{
1491# ifdef CONFIG_FB_PXA_PARAMETERS 1491# ifdef CONFIG_FB_PXA_PARAMETERS
1492 if (options) 1492 if (options)
@@ -1501,7 +1501,7 @@ MODULE_PARM_DESC(options, "LCD parameters (see Documentation/fb/pxafb.txt)");
1501# endif 1501# endif
1502#endif 1502#endif
1503 1503
1504int __devinit pxafb_init(void) 1504static int __devinit pxafb_init(void)
1505{ 1505{
1506#ifndef MODULE 1506#ifndef MODULE
1507 char *option = NULL; 1507 char *option = NULL;
diff --git a/drivers/video/sbuslib.c b/drivers/video/sbuslib.c
index 963a454b7074..4deaac05b938 100644
--- a/drivers/video/sbuslib.c
+++ b/drivers/video/sbuslib.c
@@ -9,6 +9,7 @@
9#include <linux/string.h> 9#include <linux/string.h>
10#include <linux/fb.h> 10#include <linux/fb.h>
11#include <linux/mm.h> 11#include <linux/mm.h>
12#include <linux/uaccess.h>
12 13
13#include <asm/oplib.h> 14#include <asm/oplib.h>
14#include <asm/fbio.h> 15#include <asm/fbio.h>
diff --git a/drivers/video/uvesafb.c b/drivers/video/uvesafb.c
index be27b9c1ed72..93361656316c 100644
--- a/drivers/video/uvesafb.c
+++ b/drivers/video/uvesafb.c
@@ -44,7 +44,7 @@ static struct fb_fix_screeninfo uvesafb_fix __devinitdata = {
44 44
45static int mtrr __devinitdata = 3; /* enable mtrr by default */ 45static int mtrr __devinitdata = 3; /* enable mtrr by default */
46static int blank = 1; /* enable blanking by default */ 46static int blank = 1; /* enable blanking by default */
47static int ypan __devinitdata = 1; /* 0: scroll, 1: ypan, 2: ywrap */ 47static int ypan = 1; /* 0: scroll, 1: ypan, 2: ywrap */
48static int pmi_setpal __devinitdata = 1; /* use PMI for palette changes */ 48static int pmi_setpal __devinitdata = 1; /* use PMI for palette changes */
49static int nocrtc __devinitdata; /* ignore CRTC settings */ 49static int nocrtc __devinitdata; /* ignore CRTC settings */
50static int noedid __devinitdata; /* don't try DDC transfers */ 50static int noedid __devinitdata; /* don't try DDC transfers */
diff --git a/drivers/watchdog/Kconfig b/drivers/watchdog/Kconfig
index afcdc69e37d6..254d115cafab 100644
--- a/drivers/watchdog/Kconfig
+++ b/drivers/watchdog/Kconfig
@@ -402,6 +402,18 @@ config IT8712F_WDT
402 To compile this driver as a module, choose M here: the 402 To compile this driver as a module, choose M here: the
403 module will be called it8712f_wdt. 403 module will be called it8712f_wdt.
404 404
405config HP_WATCHDOG
406 tristate "HP Proliant iLO 2 Hardware Watchdog Timer"
407 depends on X86
408 help
409 A software monitoring watchdog and NMI sourcing driver. This driver
410 will detect lockups and provide stack trace. Also, when an NMI
411 occurs this driver will make the necessary BIOS calls to log
412 the cause of the NMI. This is a driver that will only load on a
413 HP ProLiant system with a minimum of iLO2 support.
414 To compile this driver as a module, choose M here: the
415 module will be called hpwdt.
416
405config SC1200_WDT 417config SC1200_WDT
406 tristate "National Semiconductor PC87307/PC97307 (ala SC1200) Watchdog" 418 tristate "National Semiconductor PC87307/PC97307 (ala SC1200) Watchdog"
407 depends on X86 419 depends on X86
@@ -633,6 +645,19 @@ config WDT_RM9K_GPI
633 To compile this driver as a module, choose M here: the 645 To compile this driver as a module, choose M here: the
634 module will be called rm9k_wdt. 646 module will be called rm9k_wdt.
635 647
648config SIBYTE_WDOG
649 tristate "Sibyte SoC hardware watchdog"
650 depends on CPU_SB1
651 help
652 Watchdog driver for the built in watchdog hardware in Sibyte
653 SoC processors. There are apparently two watchdog timers
654 on such processors; this driver supports only the first one,
655 because currently Linux only supports exporting one watchdog
656 to userspace.
657
658 To compile this driver as a loadable module, choose M here.
659 The module will be called sb_wdog.
660
636config AR7_WDT 661config AR7_WDT
637 tristate "TI AR7 Watchdog Timer" 662 tristate "TI AR7 Watchdog Timer"
638 depends on AR7 663 depends on AR7
diff --git a/drivers/watchdog/Makefile b/drivers/watchdog/Makefile
index ebc21146d40c..f3fb170fe5c6 100644
--- a/drivers/watchdog/Makefile
+++ b/drivers/watchdog/Makefile
@@ -67,6 +67,7 @@ obj-$(CONFIG_WAFER_WDT) += wafer5823wdt.o
67obj-$(CONFIG_I6300ESB_WDT) += i6300esb.o 67obj-$(CONFIG_I6300ESB_WDT) += i6300esb.o
68obj-$(CONFIG_ITCO_WDT) += iTCO_wdt.o iTCO_vendor_support.o 68obj-$(CONFIG_ITCO_WDT) += iTCO_wdt.o iTCO_vendor_support.o
69obj-$(CONFIG_IT8712F_WDT) += it8712f_wdt.o 69obj-$(CONFIG_IT8712F_WDT) += it8712f_wdt.o
70obj-$(CONFIG_HP_WATCHDOG) += hpwdt.o
70obj-$(CONFIG_SC1200_WDT) += sc1200wdt.o 71obj-$(CONFIG_SC1200_WDT) += sc1200wdt.o
71obj-$(CONFIG_SCx200_WDT) += scx200_wdt.o 72obj-$(CONFIG_SCx200_WDT) += scx200_wdt.o
72obj-$(CONFIG_PC87413_WDT) += pc87413_wdt.o 73obj-$(CONFIG_PC87413_WDT) += pc87413_wdt.o
@@ -92,6 +93,7 @@ obj-$(CONFIG_SBC_EPX_C3_WATCHDOG) += sbc_epx_c3.o
92obj-$(CONFIG_INDYDOG) += indydog.o 93obj-$(CONFIG_INDYDOG) += indydog.o
93obj-$(CONFIG_WDT_MTX1) += mtx-1_wdt.o 94obj-$(CONFIG_WDT_MTX1) += mtx-1_wdt.o
94obj-$(CONFIG_WDT_RM9K_GPI) += rm9k_wdt.o 95obj-$(CONFIG_WDT_RM9K_GPI) += rm9k_wdt.o
96obj-$(CONFIG_SIBYTE_WDOG) += sb_wdog.o
95obj-$(CONFIG_AR7_WDT) += ar7_wdt.o 97obj-$(CONFIG_AR7_WDT) += ar7_wdt.o
96obj-$(CONFIG_TXX9_WDT) += txx9wdt.o 98obj-$(CONFIG_TXX9_WDT) += txx9wdt.o
97 99
diff --git a/drivers/watchdog/bfin_wdt.c b/drivers/watchdog/bfin_wdt.c
index 472be10f0686..1237113dc14a 100644
--- a/drivers/watchdog/bfin_wdt.c
+++ b/drivers/watchdog/bfin_wdt.c
@@ -29,6 +29,7 @@
29 29
30#define stamp(fmt, args...) pr_debug("%s:%i: " fmt "\n", __func__, __LINE__, ## args) 30#define stamp(fmt, args...) pr_debug("%s:%i: " fmt "\n", __func__, __LINE__, ## args)
31#define stampit() stamp("here i am") 31#define stampit() stamp("here i am")
32#define pr_init(fmt, args...) ({ static const __initdata char __fmt[] = fmt; printk(__fmt, ## args); })
32 33
33#define WATCHDOG_NAME "bfin-wdt" 34#define WATCHDOG_NAME "bfin-wdt"
34#define PFX WATCHDOG_NAME ": " 35#define PFX WATCHDOG_NAME ": "
@@ -445,19 +446,19 @@ static int __init bfin_wdt_init(void)
445 446
446 ret = register_reboot_notifier(&bfin_wdt_notifier); 447 ret = register_reboot_notifier(&bfin_wdt_notifier);
447 if (ret) { 448 if (ret) {
448 printk(KERN_ERR PFX "cannot register reboot notifier (err=%d)\n", ret); 449 pr_init(KERN_ERR PFX "cannot register reboot notifier (err=%d)\n", ret);
449 return ret; 450 return ret;
450 } 451 }
451 452
452 ret = misc_register(&bfin_wdt_miscdev); 453 ret = misc_register(&bfin_wdt_miscdev);
453 if (ret) { 454 if (ret) {
454 printk(KERN_ERR PFX "cannot register miscdev on minor=%d (err=%d)\n", 455 pr_init(KERN_ERR PFX "cannot register miscdev on minor=%d (err=%d)\n",
455 WATCHDOG_MINOR, ret); 456 WATCHDOG_MINOR, ret);
456 unregister_reboot_notifier(&bfin_wdt_notifier); 457 unregister_reboot_notifier(&bfin_wdt_notifier);
457 return ret; 458 return ret;
458 } 459 }
459 460
460 printk(KERN_INFO PFX "initialized: timeout=%d sec (nowayout=%d)\n", 461 pr_init(KERN_INFO PFX "initialized: timeout=%d sec (nowayout=%d)\n",
461 timeout, nowayout); 462 timeout, nowayout);
462 463
463 return 0; 464 return 0;
diff --git a/drivers/watchdog/hpwdt.c b/drivers/watchdog/hpwdt.c
new file mode 100644
index 000000000000..a2e174b09fe7
--- /dev/null
+++ b/drivers/watchdog/hpwdt.c
@@ -0,0 +1,926 @@
1/*
2 * HP WatchDog Driver
3 * based on
4 *
5 * SoftDog 0.05: A Software Watchdog Device
6 *
7 * (c) Copyright 2007 Hewlett-Packard Development Company, L.P.
8 * Thomas Mingarelli <thomas.mingarelli@hp.com>
9 *
10 * This program is free software; you can redistribute it and/or
11 * modify it under the terms of the GNU General Public License
12 * version 2 as published by the Free Software Foundation
13 *
14 */
15
16#include <linux/device.h>
17#include <linux/fs.h>
18#include <linux/init.h>
19#include <linux/interrupt.h>
20#include <linux/io.h>
21#include <linux/irq.h>
22#include <linux/kernel.h>
23#include <linux/miscdevice.h>
24#include <linux/mm.h>
25#include <linux/module.h>
26#include <linux/kdebug.h>
27#include <linux/moduleparam.h>
28#include <linux/notifier.h>
29#include <linux/pci.h>
30#include <linux/pci_ids.h>
31#include <linux/reboot.h>
32#include <linux/sched.h>
33#include <linux/timer.h>
34#include <linux/types.h>
35#include <linux/uaccess.h>
36#include <linux/watchdog.h>
37#include <linux/dmi.h>
38#include <linux/efi.h>
39#include <linux/string.h>
40#include <linux/bootmem.h>
41#include <linux/slab.h>
42#include <asm/dmi.h>
43#include <asm/desc.h>
44#include <asm/kdebug.h>
45
46#define PCI_BIOS32_SD_VALUE 0x5F32335F /* "_32_" */
47#define CRU_BIOS_SIGNATURE_VALUE 0x55524324
48#define PCI_BIOS32_PARAGRAPH_LEN 16
49#define PCI_ROM_BASE1 0x000F0000
50#define ROM_SIZE 0x10000
51
52struct bios32_service_dir {
53 u32 signature;
54 u32 entry_point;
55 u8 revision;
56 u8 length;
57 u8 checksum;
58 u8 reserved[5];
59};
60
61/*
62 * smbios_entry_point - defines SMBIOS entry point structure
63 *
64 * anchor[4] - anchor string (_SM_)
65 * checksum - checksum of the entry point structure
66 * length - length of the entry point structure
67 * major_ver - major version (02h for revision 2.1)
68 * minor_ver - minor version (01h for revision 2.1)
69 * max_struct_size - size of the largest SMBIOS structure
70 * revision - entry point structure revision implemented
71 * formatted_area[5] - reserved
72 * intermediate_anchor[5] - intermediate anchor string (_DMI_)
73 * intermediate_checksum - intermediate checksum
74 * table_length - structure table length
75 * table_address - structure table address
76 * table_num_structs - number of SMBIOS structures present
77 * bcd_revision - BCD revision
78 */
79struct smbios_entry_point {
80 u8 anchor[4];
81 u8 checksum;
82 u8 length;
83 u8 major_ver;
84 u8 minor_ver;
85 u16 max_struct_size;
86 u8 revision;
87 u8 formatted_area[5];
88 u8 intermediate_anchor[5];
89 u8 intermediate_checksum;
90 u16 table_length;
91 u64 table_address;
92 u16 table_num_structs;
93 u8 bcd_revision;
94};
95
96/* type 212 */
97struct smbios_cru64_info {
98 u8 type;
99 u8 byte_length;
100 u16 handle;
101 u32 signature;
102 u64 physical_address;
103 u32 double_length;
104 u32 double_offset;
105};
106#define SMBIOS_CRU64_INFORMATION 212
107
108struct cmn_registers {
109 union {
110 struct {
111 u8 ral;
112 u8 rah;
113 u16 rea2;
114 };
115 u32 reax;
116 } u1;
117 union {
118 struct {
119 u8 rbl;
120 u8 rbh;
121 u8 reb2l;
122 u8 reb2h;
123 };
124 u32 rebx;
125 } u2;
126 union {
127 struct {
128 u8 rcl;
129 u8 rch;
130 u16 rec2;
131 };
132 u32 recx;
133 } u3;
134 union {
135 struct {
136 u8 rdl;
137 u8 rdh;
138 u16 red2;
139 };
140 u32 redx;
141 } u4;
142
143 u32 resi;
144 u32 redi;
145 u16 rds;
146 u16 res;
147 u32 reflags;
148} __attribute__((packed));
149
150#define DEFAULT_MARGIN 30
151static unsigned int soft_margin = DEFAULT_MARGIN; /* in seconds */
152static unsigned int reload; /* the computed soft_margin */
153static int nowayout = WATCHDOG_NOWAYOUT;
154static char expect_release;
155static unsigned long hpwdt_is_open;
156
157static void __iomem *pci_mem_addr; /* the PCI-memory address */
158static unsigned long __iomem *hpwdt_timer_reg;
159static unsigned long __iomem *hpwdt_timer_con;
160
161static DEFINE_SPINLOCK(rom_lock);
162
163static void *cru_rom_addr;
164
165static struct cmn_registers cmn_regs;
166
167static struct pci_device_id hpwdt_devices[] = {
168 {
169 .vendor = PCI_VENDOR_ID_COMPAQ,
170 .device = 0xB203,
171 .subvendor = PCI_ANY_ID,
172 .subdevice = PCI_ANY_ID,
173 },
174 {0}, /* terminate list */
175};
176MODULE_DEVICE_TABLE(pci, hpwdt_devices);
177
178/*
179 * bios_checksum
180 */
181static int __devinit bios_checksum(const char __iomem *ptr, int len)
182{
183 char sum = 0;
184 int i;
185
186 /*
187 * calculate checksum of size bytes. This should add up
188 * to zero if we have a valid header.
189 */
190 for (i = 0; i < len; i++)
191 sum += ptr[i];
192
193 return ((sum == 0) && (len > 0));
194}
195
196#ifndef CONFIG_X86_64
197/* --32 Bit Bios------------------------------------------------------------ */
198
199#define HPWDT_ARCH 32
200
201asmlinkage void asminline_call(struct cmn_registers *pi86Regs,
202 unsigned long *pRomEntry)
203{
204 asm("pushl %ebp \n\t"
205 "movl %esp, %ebp \n\t"
206 "pusha \n\t"
207 "pushf \n\t"
208 "push %es \n\t"
209 "push %ds \n\t"
210 "pop %es \n\t"
211 "movl 8(%ebp),%eax \n\t"
212 "movl 4(%eax),%ebx \n\t"
213 "movl 8(%eax),%ecx \n\t"
214 "movl 12(%eax),%edx \n\t"
215 "movl 16(%eax),%esi \n\t"
216 "movl 20(%eax),%edi \n\t"
217 "movl (%eax),%eax \n\t"
218 "push %cs \n\t"
219 "call *12(%ebp) \n\t"
220 "pushf \n\t"
221 "pushl %eax \n\t"
222 "movl 8(%ebp),%eax \n\t"
223 "movl %ebx,4(%eax) \n\t"
224 "movl %ecx,8(%eax) \n\t"
225 "movl %edx,12(%eax) \n\t"
226 "movl %esi,16(%eax) \n\t"
227 "movl %edi,20(%eax) \n\t"
228 "movw %ds,24(%eax) \n\t"
229 "movw %es,26(%eax) \n\t"
230 "popl %ebx \n\t"
231 "movl %ebx,(%eax) \n\t"
232 "popl %ebx \n\t"
233 "movl %ebx,28(%eax) \n\t"
234 "pop %es \n\t"
235 "popf \n\t"
236 "popa \n\t"
237 "leave \n\t" "ret");
238}
239
240/*
241 * cru_detect
242 *
243 * Routine Description:
244 * This function uses the 32-bit BIOS Service Directory record to
245 * search for a $CRU record.
246 *
247 * Return Value:
248 * 0 : SUCCESS
249 * <0 : FAILURE
250 */
251static int __devinit cru_detect(unsigned long map_entry,
252 unsigned long map_offset)
253{
254 void *bios32_map;
255 unsigned long *bios32_entrypoint;
256 unsigned long cru_physical_address;
257 unsigned long cru_length;
258 unsigned long physical_bios_base = 0;
259 unsigned long physical_bios_offset = 0;
260 int retval = -ENODEV;
261
262 bios32_map = ioremap(map_entry, (2 * PAGE_SIZE));
263
264 if (bios32_map == NULL)
265 return -ENODEV;
266
267 bios32_entrypoint = bios32_map + map_offset;
268
269 cmn_regs.u1.reax = CRU_BIOS_SIGNATURE_VALUE;
270
271 asminline_call(&cmn_regs, bios32_entrypoint);
272
273 if (cmn_regs.u1.ral != 0) {
274 printk(KERN_WARNING
275 "hpwdt: Call succeeded but with an error: 0x%x\n",
276 cmn_regs.u1.ral);
277 } else {
278 physical_bios_base = cmn_regs.u2.rebx;
279 physical_bios_offset = cmn_regs.u4.redx;
280 cru_length = cmn_regs.u3.recx;
281 cru_physical_address =
282 physical_bios_base + physical_bios_offset;
283
284 /* If the values look OK, then map it in. */
285 if ((physical_bios_base + physical_bios_offset)) {
286 cru_rom_addr =
287 ioremap(cru_physical_address, cru_length);
288 if (cru_rom_addr)
289 retval = 0;
290 }
291
292 printk(KERN_DEBUG "hpwdt: CRU Base Address: 0x%lx\n",
293 physical_bios_base);
294 printk(KERN_DEBUG "hpwdt: CRU Offset Address: 0x%lx\n",
295 physical_bios_offset);
296 printk(KERN_DEBUG "hpwdt: CRU Length: 0x%lx\n",
297 cru_length);
298 printk(KERN_DEBUG "hpwdt: CRU Mapped Address: 0x%x\n",
299 (unsigned int)&cru_rom_addr);
300 }
301 iounmap(bios32_map);
302 return retval;
303}
304
305/*
306 * bios32_present
307 *
308 * Routine Description:
309 * This function finds the 32-bit BIOS Service Directory
310 *
311 * Return Value:
312 * 0 : SUCCESS
313 * <0 : FAILURE
314 */
315static int __devinit bios32_present(const char __iomem *p)
316{
317 struct bios32_service_dir *bios_32_ptr;
318 int length;
319 unsigned long map_entry, map_offset;
320
321 bios_32_ptr = (struct bios32_service_dir *) p;
322
323 /*
324 * Search for signature by checking equal to the swizzled value
325 * instead of calling another routine to perform a strcmp.
326 */
327 if (bios_32_ptr->signature == PCI_BIOS32_SD_VALUE) {
328 length = bios_32_ptr->length * PCI_BIOS32_PARAGRAPH_LEN;
329 if (bios_checksum(p, length)) {
330 /*
331 * According to the spec, we're looking for the
332 * first 4KB-aligned address below the entrypoint
333 * listed in the header. The Service Directory code
334 * is guaranteed to occupy no more than 2 4KB pages.
335 */
336 map_entry = bios_32_ptr->entry_point & ~(PAGE_SIZE - 1);
337 map_offset = bios_32_ptr->entry_point - map_entry;
338
339 return cru_detect(map_entry, map_offset);
340 }
341 }
342 return -ENODEV;
343}
344
345static int __devinit detect_cru_service(void)
346{
347 char __iomem *p, *q;
348 int rc = -1;
349
350 /*
351 * Search from 0x0f0000 through 0x0fffff, inclusive.
352 */
353 p = ioremap(PCI_ROM_BASE1, ROM_SIZE);
354 if (p == NULL)
355 return -ENOMEM;
356
357 for (q = p; q < p + ROM_SIZE; q += 16) {
358 rc = bios32_present(q);
359 if (!rc)
360 break;
361 }
362 iounmap(p);
363 return rc;
364}
365
366#else
367/* --64 Bit Bios------------------------------------------------------------ */
368
369#define HPWDT_ARCH 64
370
371asmlinkage void asminline_call(struct cmn_registers *pi86Regs,
372 unsigned long *pRomEntry)
373{
374 asm("pushq %rbp \n\t"
375 "movq %rsp, %rbp \n\t"
376 "pushq %rax \n\t"
377 "pushq %rbx \n\t"
378 "pushq %rdx \n\t"
379 "pushq %r12 \n\t"
380 "pushq %r9 \n\t"
381 "movq %rsi, %r12 \n\t"
382 "movq %rdi, %r9 \n\t"
383 "movl 4(%r9),%ebx \n\t"
384 "movl 8(%r9),%ecx \n\t"
385 "movl 12(%r9),%edx \n\t"
386 "movl 16(%r9),%esi \n\t"
387 "movl 20(%r9),%edi \n\t"
388 "movl (%r9),%eax \n\t"
389 "call *%r12 \n\t"
390 "pushfq \n\t"
391 "popq %r12 \n\t"
392 "popfq \n\t"
393 "movl %eax, (%r9) \n\t"
394 "movl %ebx, 4(%r9) \n\t"
395 "movl %ecx, 8(%r9) \n\t"
396 "movl %edx, 12(%r9) \n\t"
397 "movl %esi, 16(%r9) \n\t"
398 "movl %edi, 20(%r9) \n\t"
399 "movq %r12, %rax \n\t"
400 "movl %eax, 28(%r9) \n\t"
401 "popq %r9 \n\t"
402 "popq %r12 \n\t"
403 "popq %rdx \n\t"
404 "popq %rbx \n\t"
405 "popq %rax \n\t"
406 "leave \n\t" "ret");
407}
408
409/*
410 * dmi_find_cru
411 *
412 * Routine Description:
413 * This function checks wether or not a SMBIOS/DMI record is
414 * the 64bit CRU info or not
415 *
416 * Return Value:
417 * 0 : SUCCESS - if record found
418 * <0 : FAILURE - if record not found
419 */
420static void __devinit dmi_find_cru(const struct dmi_header *dm)
421{
422 struct smbios_cru64_info *smbios_cru64_ptr;
423 unsigned long cru_physical_address;
424
425 if (dm->type == SMBIOS_CRU64_INFORMATION) {
426 smbios_cru64_ptr = (struct smbios_cru64_info *) dm;
427 if (smbios_cru64_ptr->signature == CRU_BIOS_SIGNATURE_VALUE) {
428 cru_physical_address =
429 smbios_cru64_ptr->physical_address +
430 smbios_cru64_ptr->double_offset;
431 cru_rom_addr = ioremap(cru_physical_address,
432 smbios_cru64_ptr->double_length);
433 }
434 }
435}
436
437/*
438 * dmi_table
439 *
440 * Routine Description:
441 * Decode the SMBIOS/DMI table and check if we have a 64bit CRU record
442 * or not.
443 *
444 * We have to be cautious here. We have seen BIOSes with DMI pointers
445 * pointing to completely the wrong place for example
446 */
447static void __devinit dmi_table(u8 *buf, int len, int num,
448 void (*decode)(const struct dmi_header *))
449{
450 u8 *data = buf;
451 int i = 0;
452
453 /*
454 * Stop when we see all the items the table claimed to have
455 * OR we run off the end of the table (also happens)
456 */
457 while ((i < num) && (data - buf + sizeof(struct dmi_header)) <= len) {
458 const struct dmi_header *dm = (const struct dmi_header *)data;
459
460 /*
461 * We want to know the total length (formated area and strings)
462 * before decoding to make sure we won't run off the table in
463 * dmi_decode or dmi_string
464 */
465 data += dm->length;
466 while ((data - buf < len - 1) && (data[0] || data[1]))
467 data++;
468 if (data - buf < len - 1)
469 decode(dm);
470 data += 2;
471 i++;
472 }
473}
474
475/*
476 * smbios_present
477 *
478 * Routine Description:
479 * This function parses the SMBIOS entry point table to retrieve
480 * the 64 bit CRU Service.
481 *
482 * Return Value:
483 * 0 : SUCCESS
484 * <0 : FAILURE
485 */
486static int __devinit smbios_present(const char __iomem *p)
487{
488 struct smbios_entry_point *eps =
489 (struct smbios_entry_point *) p;
490 int length;
491 u8 *buf;
492
493 /* check if we have indeed the SMBIOS table entry point */
494 if ((strncmp((char *)eps->anchor, "_SM_",
495 sizeof(eps->anchor))) == 0) {
496 length = eps->length;
497
498 /* SMBIOS v2.1 implementation might use 0x1e */
499 if ((length == 0x1e) &&
500 (eps->major_ver == 2) &&
501 (eps->minor_ver == 1))
502 length = 0x1f;
503
504 /*
505 * Now we will check:
506 * - SMBIOS checksum must be 0
507 * - intermediate anchor should be _DMI_
508 * - intermediate checksum should be 0
509 */
510 if ((bios_checksum(p, length)) &&
511 (strncmp((char *)eps->intermediate_anchor, "_DMI_",
512 sizeof(eps->intermediate_anchor)) == 0) &&
513 (bios_checksum(p+0x10, 15))) {
514 buf = ioremap(eps->table_address, eps->table_length);
515 if (buf == NULL)
516 return -ENODEV;
517
518
519 /* Scan the DMI table for the 64 bit CRU service */
520 dmi_table(buf, eps->table_length,
521 eps->table_num_structs, dmi_find_cru);
522
523 iounmap(buf);
524 return 0;
525 }
526 }
527
528 return -ENODEV;
529}
530
531static int __devinit smbios_scan_machine(void)
532{
533 char __iomem *p, *q;
534 int rc;
535
536 if (efi_enabled) {
537 if (efi.smbios == EFI_INVALID_TABLE_ADDR)
538 return -ENODEV;
539
540 p = ioremap(efi.smbios, 32);
541 if (p == NULL)
542 return -ENOMEM;
543
544 rc = smbios_present(p);
545 iounmap(p);
546 } else {
547 /*
548 * Search from 0x0f0000 through 0x0fffff, inclusive.
549 */
550 p = ioremap(PCI_ROM_BASE1, ROM_SIZE);
551 if (p == NULL)
552 return -ENOMEM;
553
554 for (q = p; q < p + ROM_SIZE; q += 16) {
555 rc = smbios_present(q);
556 if (!rc) {
557 break;
558 }
559 }
560 iounmap(p);
561 }
562}
563
564static int __devinit detect_cru_service(void)
565{
566 cru_rom_addr = NULL;
567
568 smbios_scan_machine(); /* will become dmi_walk(dmi_find_cru); */
569
570 /* if cru_rom_addr has been set then we found a CRU service */
571 return ((cru_rom_addr != NULL)? 0: -ENODEV);
572}
573
574/* ------------------------------------------------------------------------- */
575
576#endif
577
578/*
579 * NMI Handler
580 */
581static int hpwdt_pretimeout(struct notifier_block *nb, unsigned long ulReason,
582 void *data)
583{
584 static unsigned long rom_pl;
585 static int die_nmi_called;
586
587 if (ulReason != DIE_NMI && ulReason != DIE_NMI_IPI)
588 return NOTIFY_OK;
589
590 spin_lock_irqsave(&rom_lock, rom_pl);
591 if (!die_nmi_called)
592 asminline_call(&cmn_regs, cru_rom_addr);
593 die_nmi_called = 1;
594 spin_unlock_irqrestore(&rom_lock, rom_pl);
595 if (cmn_regs.u1.ral == 0) {
596 printk(KERN_WARNING "hpwdt: An NMI occurred, "
597 "but unable to determine source.\n");
598 } else {
599 panic("An NMI occurred, please see the Integrated "
600 "Management Log for details.\n");
601 }
602
603 return NOTIFY_STOP;
604}
605
606/*
607 * Watchdog operations
608 */
609static void hpwdt_start(void)
610{
611 reload = (soft_margin * 1000) / 128;
612 iowrite16(reload, hpwdt_timer_reg);
613 iowrite16(0x85, hpwdt_timer_con);
614}
615
616static void hpwdt_stop(void)
617{
618 unsigned long data;
619
620 data = ioread16(hpwdt_timer_con);
621 data &= 0xFE;
622 iowrite16(data, hpwdt_timer_con);
623}
624
625static void hpwdt_ping(void)
626{
627 iowrite16(reload, hpwdt_timer_reg);
628}
629
630static int hpwdt_change_timer(int new_margin)
631{
632 /* Arbitrary, can't find the card's limits */
633 if (new_margin < 30 || new_margin > 600) {
634 printk(KERN_WARNING
635 "hpwdt: New value passed in is invalid: %d seconds.\n",
636 new_margin);
637 return -EINVAL;
638 }
639
640 soft_margin = new_margin;
641 printk(KERN_DEBUG
642 "hpwdt: New timer passed in is %d seconds.\n",
643 new_margin);
644 reload = (soft_margin * 1000) / 128;
645
646 return 0;
647}
648
649/*
650 * /dev/watchdog handling
651 */
652static int hpwdt_open(struct inode *inode, struct file *file)
653{
654 /* /dev/watchdog can only be opened once */
655 if (test_and_set_bit(0, &hpwdt_is_open))
656 return -EBUSY;
657
658 /* Start the watchdog */
659 hpwdt_start();
660 hpwdt_ping();
661
662 return nonseekable_open(inode, file);
663}
664
665static int hpwdt_release(struct inode *inode, struct file *file)
666{
667 /* Stop the watchdog */
668 if (expect_release == 42) {
669 hpwdt_stop();
670 } else {
671 printk(KERN_CRIT
672 "hpwdt: Unexpected close, not stopping watchdog!\n");
673 hpwdt_ping();
674 }
675
676 expect_release = 0;
677
678 /* /dev/watchdog is being closed, make sure it can be re-opened */
679 clear_bit(0, &hpwdt_is_open);
680
681 return 0;
682}
683
684static ssize_t hpwdt_write(struct file *file, const char __user *data,
685 size_t len, loff_t *ppos)
686{
687 /* See if we got the magic character 'V' and reload the timer */
688 if (len) {
689 if (!nowayout) {
690 size_t i;
691
692 /* note: just in case someone wrote the magic character
693 * five months ago... */
694 expect_release = 0;
695
696 /* scan to see whether or not we got the magic char. */
697 for (i = 0; i != len; i++) {
698 char c;
699 if (get_user(c, data+i))
700 return -EFAULT;
701 if (c == 'V')
702 expect_release = 42;
703 }
704 }
705
706 /* someone wrote to us, we should reload the timer */
707 hpwdt_ping();
708 }
709
710 return len;
711}
712
713static struct watchdog_info ident = {
714 .options = WDIOF_SETTIMEOUT |
715 WDIOF_KEEPALIVEPING |
716 WDIOF_MAGICCLOSE,
717 .identity = "HP iLO2 HW Watchdog Timer",
718};
719
720static long hpwdt_ioctl(struct file *file, unsigned int cmd,
721 unsigned long arg)
722{
723 void __user *argp = (void __user *)arg;
724 int __user *p = argp;
725 int new_margin;
726 int ret = -ENOTTY;
727
728 switch (cmd) {
729 case WDIOC_GETSUPPORT:
730 ret = 0;
731 if (copy_to_user(argp, &ident, sizeof(ident)))
732 ret = -EFAULT;
733 break;
734
735 case WDIOC_GETSTATUS:
736 case WDIOC_GETBOOTSTATUS:
737 ret = put_user(0, p);
738 break;
739
740 case WDIOC_KEEPALIVE:
741 hpwdt_ping();
742 ret = 0;
743 break;
744
745 case WDIOC_SETTIMEOUT:
746 ret = get_user(new_margin, p);
747 if (ret)
748 break;
749
750 ret = hpwdt_change_timer(new_margin);
751 if (ret)
752 break;
753
754 hpwdt_ping();
755 /* Fall */
756 case WDIOC_GETTIMEOUT:
757 ret = put_user(soft_margin, p);
758 break;
759 }
760 return ret;
761}
762
763/*
764 * Kernel interfaces
765 */
766static struct file_operations hpwdt_fops = {
767 .owner = THIS_MODULE,
768 .llseek = no_llseek,
769 .write = hpwdt_write,
770 .unlocked_ioctl = hpwdt_ioctl,
771 .open = hpwdt_open,
772 .release = hpwdt_release,
773};
774
775static struct miscdevice hpwdt_miscdev = {
776 .minor = WATCHDOG_MINOR,
777 .name = "watchdog",
778 .fops = &hpwdt_fops,
779};
780
781static struct notifier_block die_notifier = {
782 .notifier_call = hpwdt_pretimeout,
783 .priority = 0x7FFFFFFF,
784};
785
786/*
787 * Init & Exit
788 */
789
790static int __devinit hpwdt_init_one(struct pci_dev *dev,
791 const struct pci_device_id *ent)
792{
793 int retval;
794
795 /*
796 * First let's find out if we are on an iLO2 server. We will
797 * not run on a legacy ASM box.
798 */
799 if (dev->subsystem_vendor != PCI_VENDOR_ID_HP) {
800 dev_warn(&dev->dev,
801 "This server does not have an iLO2 ASIC.\n");
802 return -ENODEV;
803 }
804
805 if (pci_enable_device(dev)) {
806 dev_warn(&dev->dev,
807 "Not possible to enable PCI Device: 0x%x:0x%x.\n",
808 ent->vendor, ent->device);
809 return -ENODEV;
810 }
811
812 pci_mem_addr = pci_iomap(dev, 1, 0x80);
813 if (!pci_mem_addr) {
814 dev_warn(&dev->dev,
815 "Unable to detect the iLO2 server memory.\n");
816 retval = -ENOMEM;
817 goto error_pci_iomap;
818 }
819 hpwdt_timer_reg = pci_mem_addr + 0x70;
820 hpwdt_timer_con = pci_mem_addr + 0x72;
821
822 /* Make sure that we have a valid soft_margin */
823 if (hpwdt_change_timer(soft_margin))
824 hpwdt_change_timer(DEFAULT_MARGIN);
825
826 /*
827 * We need to map the ROM to get the CRU service.
828 * For 32 bit Operating Systems we need to go through the 32 Bit
829 * BIOS Service Directory
830 * For 64 bit Operating Systems we get that service through SMBIOS.
831 */
832 retval = detect_cru_service();
833 if (retval < 0) {
834 dev_warn(&dev->dev,
835 "Unable to detect the %d Bit CRU Service.\n",
836 HPWDT_ARCH);
837 goto error_get_cru;
838 }
839
840 /*
841 * We know this is the only CRU call we need to make so lets keep as
842 * few instructions as possible once the NMI comes in.
843 */
844 cmn_regs.u1.rah = 0x0D;
845 cmn_regs.u1.ral = 0x02;
846
847 retval = register_die_notifier(&die_notifier);
848 if (retval != 0) {
849 dev_warn(&dev->dev,
850 "Unable to register a die notifier (err=%d).\n",
851 retval);
852 goto error_die_notifier;
853 }
854
855 retval = misc_register(&hpwdt_miscdev);
856 if (retval < 0) {
857 dev_warn(&dev->dev,
858 "Unable to register miscdev on minor=%d (err=%d).\n",
859 WATCHDOG_MINOR, retval);
860 goto error_misc_register;
861 }
862
863 printk(KERN_INFO
864 "hp Watchdog Timer Driver: 1.00"
865 ", timer margin: %d seconds( nowayout=%d).\n",
866 soft_margin, nowayout);
867
868 return 0;
869
870error_misc_register:
871 unregister_die_notifier(&die_notifier);
872error_die_notifier:
873 if (cru_rom_addr)
874 iounmap(cru_rom_addr);
875error_get_cru:
876 pci_iounmap(dev, pci_mem_addr);
877error_pci_iomap:
878 pci_disable_device(dev);
879 return retval;
880}
881
882static void __devexit hpwdt_exit(struct pci_dev *dev)
883{
884 if (!nowayout)
885 hpwdt_stop();
886
887 misc_deregister(&hpwdt_miscdev);
888 unregister_die_notifier(&die_notifier);
889
890 if (cru_rom_addr)
891 iounmap(cru_rom_addr);
892 pci_iounmap(dev, pci_mem_addr);
893 pci_disable_device(dev);
894}
895
896static struct pci_driver hpwdt_driver = {
897 .name = "hpwdt",
898 .id_table = hpwdt_devices,
899 .probe = hpwdt_init_one,
900 .remove = __devexit_p(hpwdt_exit),
901};
902
903static void __exit hpwdt_cleanup(void)
904{
905 pci_unregister_driver(&hpwdt_driver);
906}
907
908static int __init hpwdt_init(void)
909{
910 return pci_register_driver(&hpwdt_driver);
911}
912
913MODULE_AUTHOR("Tom Mingarelli");
914MODULE_DESCRIPTION("hp watchdog driver");
915MODULE_LICENSE("GPL");
916MODULE_ALIAS_MISCDEV(WATCHDOG_MINOR);
917
918module_param(soft_margin, int, 0);
919MODULE_PARM_DESC(soft_margin, "Watchdog timeout in seconds");
920
921module_param(nowayout, int, 0);
922MODULE_PARM_DESC(nowayout, "Watchdog cannot be stopped once started (default="
923 __MODULE_STRING(WATCHDOG_NOWAYOUT) ")");
924
925module_init(hpwdt_init);
926module_exit(hpwdt_cleanup);
diff --git a/drivers/watchdog/mtx-1_wdt.c b/drivers/watchdog/mtx-1_wdt.c
index 98451747d3cd..789831b3fa00 100644
--- a/drivers/watchdog/mtx-1_wdt.c
+++ b/drivers/watchdog/mtx-1_wdt.c
@@ -45,10 +45,13 @@
45#include <linux/completion.h> 45#include <linux/completion.h>
46#include <linux/jiffies.h> 46#include <linux/jiffies.h>
47#include <linux/watchdog.h> 47#include <linux/watchdog.h>
48#include <linux/platform_device.h>
49
48#include <asm/io.h> 50#include <asm/io.h>
49#include <asm/uaccess.h> 51#include <asm/uaccess.h>
50 52
51#include <asm/mach-au1x00/au1000.h> 53#include <asm/mach-au1x00/au1000.h>
54#include <asm/gpio.h>
52 55
53#define MTX1_WDT_INTERVAL (5 * HZ) 56#define MTX1_WDT_INTERVAL (5 * HZ)
54 57
@@ -61,6 +64,7 @@ static struct {
61 volatile int queue; 64 volatile int queue;
62 int default_ticks; 65 int default_ticks;
63 unsigned long inuse; 66 unsigned long inuse;
67 unsigned gpio;
64} mtx1_wdt_device; 68} mtx1_wdt_device;
65 69
66static void mtx1_wdt_trigger(unsigned long unused) 70static void mtx1_wdt_trigger(unsigned long unused)
@@ -73,7 +77,8 @@ static void mtx1_wdt_trigger(unsigned long unused)
73 * toggle GPIO2_15 77 * toggle GPIO2_15
74 */ 78 */
75 tmp = au_readl(GPIO2_DIR); 79 tmp = au_readl(GPIO2_DIR);
76 tmp = (tmp & ~(1<<15)) | ((~tmp) & (1<<15)); 80 tmp = (tmp & ~(1 << mtx1_wdt_device.gpio)) |
81 ((~tmp) & (1 << mtx1_wdt_device.gpio));
77 au_writel (tmp, GPIO2_DIR); 82 au_writel (tmp, GPIO2_DIR);
78 83
79 if (mtx1_wdt_device.queue && ticks) 84 if (mtx1_wdt_device.queue && ticks)
@@ -93,7 +98,7 @@ static void mtx1_wdt_start(void)
93{ 98{
94 if (!mtx1_wdt_device.queue) { 99 if (!mtx1_wdt_device.queue) {
95 mtx1_wdt_device.queue = 1; 100 mtx1_wdt_device.queue = 1;
96 au_writel (au_readl(GPIO2_DIR) | (u32)(1<<15), GPIO2_DIR); 101 gpio_set_value(mtx1_wdt_device.gpio, 1);
97 mod_timer(&mtx1_wdt_device.timer, jiffies + MTX1_WDT_INTERVAL); 102 mod_timer(&mtx1_wdt_device.timer, jiffies + MTX1_WDT_INTERVAL);
98 } 103 }
99 mtx1_wdt_device.running++; 104 mtx1_wdt_device.running++;
@@ -103,7 +108,7 @@ static int mtx1_wdt_stop(void)
103{ 108{
104 if (mtx1_wdt_device.queue) { 109 if (mtx1_wdt_device.queue) {
105 mtx1_wdt_device.queue = 0; 110 mtx1_wdt_device.queue = 0;
106 au_writel (au_readl(GPIO2_DIR) & ~((u32)(1<<15)), GPIO2_DIR); 111 gpio_set_value(mtx1_wdt_device.gpio, 0);
107 } 112 }
108 113
109 ticks = mtx1_wdt_device.default_ticks; 114 ticks = mtx1_wdt_device.default_ticks;
@@ -197,10 +202,12 @@ static struct miscdevice mtx1_wdt_misc = {
197}; 202};
198 203
199 204
200static int __init mtx1_wdt_init(void) 205static int mtx1_wdt_probe(struct platform_device *pdev)
201{ 206{
202 int ret; 207 int ret;
203 208
209 mtx1_wdt_device.gpio = pdev->resource[0].start;
210
204 if ((ret = misc_register(&mtx1_wdt_misc)) < 0) { 211 if ((ret = misc_register(&mtx1_wdt_misc)) < 0) {
205 printk(KERN_ERR " mtx-1_wdt : failed to register\n"); 212 printk(KERN_ERR " mtx-1_wdt : failed to register\n");
206 return ret; 213 return ret;
@@ -222,13 +229,30 @@ static int __init mtx1_wdt_init(void)
222 return 0; 229 return 0;
223} 230}
224 231
225static void __exit mtx1_wdt_exit(void) 232static int mtx1_wdt_remove(struct platform_device *pdev)
226{ 233{
227 if (mtx1_wdt_device.queue) { 234 if (mtx1_wdt_device.queue) {
228 mtx1_wdt_device.queue = 0; 235 mtx1_wdt_device.queue = 0;
229 wait_for_completion(&mtx1_wdt_device.stop); 236 wait_for_completion(&mtx1_wdt_device.stop);
230 } 237 }
231 misc_deregister(&mtx1_wdt_misc); 238 misc_deregister(&mtx1_wdt_misc);
239 return 0;
240}
241
242static struct platform_driver mtx1_wdt = {
243 .probe = mtx1_wdt_probe,
244 .remove = mtx1_wdt_remove,
245 .driver.name = "mtx1-wdt",
246};
247
248static int __init mtx1_wdt_init(void)
249{
250 return platform_driver_register(&mtx1_wdt);
251}
252
253static void __exit mtx1_wdt_exit(void)
254{
255 platform_driver_unregister(&mtx1_wdt);
232} 256}
233 257
234module_init(mtx1_wdt_init); 258module_init(mtx1_wdt_init);
@@ -237,3 +261,4 @@ module_exit(mtx1_wdt_exit);
237MODULE_AUTHOR("Michael Stickel, Florian Fainelli"); 261MODULE_AUTHOR("Michael Stickel, Florian Fainelli");
238MODULE_DESCRIPTION("Driver for the MTX-1 watchdog"); 262MODULE_DESCRIPTION("Driver for the MTX-1 watchdog");
239MODULE_LICENSE("GPL"); 263MODULE_LICENSE("GPL");
264MODULE_ALIAS_MISCDEV(WATCHDOG_MINOR);
diff --git a/drivers/watchdog/sb_wdog.c b/drivers/watchdog/sb_wdog.c
new file mode 100644
index 000000000000..b94431433695
--- /dev/null
+++ b/drivers/watchdog/sb_wdog.c
@@ -0,0 +1,353 @@
1/*
2 * Watchdog driver for SiByte SB1 SoCs
3 *
4 * Copyright (C) 2007 OnStor, Inc. * Andrew Sharp <andy.sharp@onstor.com>
5 *
6 * This driver is intended to make the second of two hardware watchdogs
7 * on the Sibyte 12XX and 11XX SoCs available to the user. There are two
8 * such devices available on the SoC, but it seems that there isn't an
9 * enumeration class for watchdogs in Linux like there is for RTCs.
10 * The second is used rather than the first because it uses IRQ 1,
11 * thereby avoiding all that IRQ 0 problematic nonsense.
12 *
13 * I have not tried this driver on a 1480 processor; it might work
14 * just well enough to really screw things up.
15 *
16 * It is a simple timer, and there is an interrupt that is raised the
17 * first time the timer expires. The second time it expires, the chip
18 * is reset and there is no way to redirect that NMI. Which could
19 * be problematic in some cases where this chip is sitting on the HT
20 * bus and has just taken responsibility for providing a cache block.
21 * Since the reset can't be redirected to the external reset pin, it is
22 * possible that other HT connected processors might hang and not reset.
23 * For Linux, a soft reset would probably be even worse than a hard reset.
24 * There you have it.
25 *
26 * The timer takes 23 bits of a 64 bit register (?) as a count value,
27 * and decrements the count every microsecond, for a max value of
28 * 0x7fffff usec or about 8.3ish seconds.
29 *
30 * This watchdog borrows some user semantics from the softdog driver,
31 * in that if you close the fd, it leaves the watchdog running, unless
32 * you previously wrote a 'V' to the fd, in which case it disables
33 * the watchdog when you close the fd like some other drivers.
34 *
35 * Based on various other watchdog drivers, which are probably all
36 * loosely based on something Alan Cox wrote years ago.
37 *
38 * (c) Copyright 1996 Alan Cox <alan@redhat.com>, All Rights Reserved.
39 * http://www.redhat.com
40 *
41 * This program is free software; you can redistribute it and/or
42 * modify it under the terms of the GNU General Public License
43 * version 1 or 2 as published by the Free Software Foundation.
44 *
45 */
46#include <linux/module.h>
47#include <linux/io.h>
48#include <linux/uaccess.h>
49#include <linux/fs.h>
50#include <linux/reboot.h>
51#include <linux/miscdevice.h>
52#include <linux/watchdog.h>
53#include <linux/interrupt.h>
54
55#include <asm/sibyte/sb1250.h>
56#include <asm/sibyte/sb1250_regs.h>
57#include <asm/sibyte/sb1250_int.h>
58#include <asm/sibyte/sb1250_scd.h>
59
60
61/*
62 * set the initial count value of a timer
63 *
64 * wdog is the iomem address of the cfg register
65 */
66void sbwdog_set(char __iomem *wdog, unsigned long t)
67{
68 __raw_writeb(0, wdog - 0x10);
69 __raw_writeq(t & 0x7fffffUL, wdog);
70}
71
72/*
73 * cause the timer to [re]load it's initial count and start counting
74 * all over again
75 *
76 * wdog is the iomem address of the cfg register
77 */
78void sbwdog_pet(char __iomem *wdog)
79{
80 __raw_writeb(__raw_readb(wdog) | 1, wdog);
81}
82
83static unsigned long sbwdog_gate; /* keeps it to one thread only */
84static char __iomem *kern_dog = (char __iomem *)(IO_BASE + (A_SCD_WDOG_CFG_0));
85static char __iomem *user_dog = (char __iomem *)(IO_BASE + (A_SCD_WDOG_CFG_1));
86static unsigned long timeout = 0x7fffffUL; /* useconds: 8.3ish secs. */
87static int expect_close;
88
89static struct watchdog_info ident = {
90 .options = WDIOF_CARDRESET | WDIOF_SETTIMEOUT | WDIOF_KEEPALIVEPING,
91 .identity = "SiByte Watchdog",
92};
93
94/*
95 * Allow only a single thread to walk the dog
96 */
97static int sbwdog_open(struct inode *inode, struct file *file)
98{
99 nonseekable_open(inode, file);
100 if (test_and_set_bit(0, &sbwdog_gate)) {
101 return -EBUSY;
102 }
103 __module_get(THIS_MODULE);
104
105 /*
106 * Activate the timer
107 */
108 sbwdog_set(user_dog, timeout);
109 __raw_writeb(1, user_dog);
110
111 return 0;
112}
113
114/*
115 * Put the dog back in the kennel.
116 */
117static int sbwdog_release(struct inode *inode, struct file *file)
118{
119 if (expect_close == 42) {
120 __raw_writeb(0, user_dog);
121 module_put(THIS_MODULE);
122 } else {
123 printk(KERN_CRIT "%s: Unexpected close, not stopping watchdog!\n",
124 ident.identity);
125 sbwdog_pet(user_dog);
126 }
127 clear_bit(0, &sbwdog_gate);
128 expect_close = 0;
129
130 return 0;
131}
132
133/*
134 * 42 - the answer
135 */
136static ssize_t sbwdog_write(struct file *file, const char __user *data,
137 size_t len, loff_t *ppos)
138{
139 int i;
140
141 if (len) {
142 /*
143 * restart the timer
144 */
145 expect_close = 0;
146
147 for (i = 0; i != len; i++) {
148 char c;
149
150 if (get_user(c, data + i)) {
151 return -EFAULT;
152 }
153 if (c == 'V') {
154 expect_close = 42;
155 }
156 }
157 sbwdog_pet(user_dog);
158 }
159
160 return len;
161}
162
163static int sbwdog_ioctl(struct inode *inode, struct file *file,
164 unsigned int cmd, unsigned long arg)
165{
166 int ret = -ENOTTY;
167 unsigned long time;
168 void __user *argp = (void __user *)arg;
169 int __user *p = argp;
170
171 switch (cmd) {
172 case WDIOC_GETSUPPORT:
173 ret = copy_to_user(argp, &ident, sizeof(ident)) ? -EFAULT : 0;
174 break;
175
176 case WDIOC_GETSTATUS:
177 case WDIOC_GETBOOTSTATUS:
178 ret = put_user(0, p);
179 break;
180
181 case WDIOC_SETTIMEOUT:
182 ret = get_user(time, p);
183 if (ret) {
184 break;
185 }
186
187 time *= 1000000;
188 if (time > 0x7fffffUL) {
189 ret = -EINVAL;
190 break;
191 }
192 timeout = time;
193 sbwdog_set(user_dog, timeout);
194 sbwdog_pet(user_dog);
195
196 case WDIOC_GETTIMEOUT:
197 /*
198 * get the remaining count from the ... count register
199 * which is 1*8 before the config register
200 */
201 ret = put_user(__raw_readq(user_dog - 8) / 1000000, p);
202 break;
203
204 case WDIOC_KEEPALIVE:
205 sbwdog_pet(user_dog);
206 ret = 0;
207 break;
208 }
209 return ret;
210}
211
212/*
213 * Notifier for system down
214 */
215static int
216sbwdog_notify_sys(struct notifier_block *this, unsigned long code, void *erf)
217{
218 if (code == SYS_DOWN || code == SYS_HALT) {
219 /*
220 * sit and sit
221 */
222 __raw_writeb(0, user_dog);
223 __raw_writeb(0, kern_dog);
224 }
225
226 return NOTIFY_DONE;
227}
228
229static const struct file_operations sbwdog_fops =
230{
231 .owner = THIS_MODULE,
232 .llseek = no_llseek,
233 .write = sbwdog_write,
234 .ioctl = sbwdog_ioctl,
235 .open = sbwdog_open,
236 .release = sbwdog_release,
237};
238
239static struct miscdevice sbwdog_miscdev =
240{
241 .minor = WATCHDOG_MINOR,
242 .name = "watchdog",
243 .fops = &sbwdog_fops,
244};
245
246static struct notifier_block sbwdog_notifier = {
247 .notifier_call = sbwdog_notify_sys,
248};
249
250/*
251 * interrupt handler
252 *
253 * doesn't do a whole lot for user, but oh so cleverly written so kernel
254 * code can use it to re-up the watchdog, thereby saving the kernel from
255 * having to create and maintain a timer, just to tickle another timer,
256 * which is just so wrong.
257 */
258irqreturn_t sbwdog_interrupt(int irq, void *addr)
259{
260 unsigned long wd_init;
261 char *wd_cfg_reg = (char *)addr;
262 u8 cfg;
263
264 cfg = __raw_readb(wd_cfg_reg);
265 wd_init = __raw_readq(wd_cfg_reg - 8) & 0x7fffff;
266
267 /*
268 * if it's the second watchdog timer, it's for those users
269 */
270 if (wd_cfg_reg == user_dog) {
271 printk(KERN_CRIT
272 "%s in danger of initiating system reset in %ld.%01ld seconds\n",
273 ident.identity, wd_init / 1000000, (wd_init / 100000) % 10);
274 } else {
275 cfg |= 1;
276 }
277
278 __raw_writeb(cfg, wd_cfg_reg);
279
280 return IRQ_HANDLED;
281}
282
283static int __init sbwdog_init(void)
284{
285 int ret;
286
287 /*
288 * register a reboot notifier
289 */
290 ret = register_reboot_notifier(&sbwdog_notifier);
291 if (ret) {
292 printk (KERN_ERR "%s: cannot register reboot notifier (err=%d)\n",
293 ident.identity, ret);
294 return ret;
295 }
296
297 /*
298 * get the resources
299 */
300 ret = misc_register(&sbwdog_miscdev);
301 if (ret == 0) {
302 printk(KERN_INFO "%s: timeout is %ld.%ld secs\n", ident.identity,
303 timeout / 1000000, (timeout / 100000) % 10);
304 }
305
306 ret = request_irq(1, sbwdog_interrupt, IRQF_DISABLED | IRQF_SHARED,
307 ident.identity, (void *)user_dog);
308 if (ret) {
309 printk(KERN_ERR "%s: failed to request irq 1 - %d\n", ident.identity,
310 ret);
311 misc_deregister(&sbwdog_miscdev);
312 }
313
314 return ret;
315}
316
317static void __exit sbwdog_exit(void)
318{
319 misc_deregister(&sbwdog_miscdev);
320}
321
322module_init(sbwdog_init);
323module_exit(sbwdog_exit);
324
325MODULE_AUTHOR("Andrew Sharp <andy.sharp@onstor.com>");
326MODULE_DESCRIPTION("SiByte Watchdog");
327
328module_param(timeout, ulong, 0);
329MODULE_PARM_DESC(timeout,
330 "Watchdog timeout in microseconds (max/default 8388607 or 8.3ish secs)");
331
332MODULE_LICENSE("GPL");
333MODULE_ALIAS_MISCDEV(WATCHDOG_MINOR);
334
335/*
336 * example code that can be put in a platform code area to utilize the
337 * first watchdog timer for the kernels own purpose.
338
339 void
340platform_wd_setup(void)
341{
342 int ret;
343
344 ret = request_irq(0, sbwdog_interrupt, IRQF_DISABLED | IRQF_SHARED,
345 "Kernel Watchdog", IOADDR(A_SCD_WDOG_CFG_0));
346 if (ret) {
347 printk(KERN_CRIT "Watchdog IRQ zero(0) failed to be requested - %d\n",
348 ret);
349 }
350}
351
352
353 */
diff --git a/fs/bio.c b/fs/bio.c
index 242e409dab4b..3312fcc3c098 100644
--- a/fs/bio.c
+++ b/fs/bio.c
@@ -903,7 +903,7 @@ void bio_set_pages_dirty(struct bio *bio)
903 } 903 }
904} 904}
905 905
906void bio_release_pages(struct bio *bio) 906static void bio_release_pages(struct bio *bio)
907{ 907{
908 struct bio_vec *bvec = bio->bi_io_vec; 908 struct bio_vec *bvec = bio->bi_io_vec;
909 int i; 909 int i;
diff --git a/fs/block_dev.c b/fs/block_dev.c
index 67fe72ce6ac7..7d822fae7765 100644
--- a/fs/block_dev.c
+++ b/fs/block_dev.c
@@ -31,6 +31,8 @@ struct bdev_inode {
31 struct inode vfs_inode; 31 struct inode vfs_inode;
32}; 32};
33 33
34static const struct address_space_operations def_blk_aops;
35
34static inline struct bdev_inode *BDEV_I(struct inode *inode) 36static inline struct bdev_inode *BDEV_I(struct inode *inode)
35{ 37{
36 return container_of(inode, struct bdev_inode, vfs_inode); 38 return container_of(inode, struct bdev_inode, vfs_inode);
@@ -171,203 +173,6 @@ blkdev_direct_IO(int rw, struct kiocb *iocb, const struct iovec *iov,
171 iov, offset, nr_segs, blkdev_get_blocks, NULL); 173 iov, offset, nr_segs, blkdev_get_blocks, NULL);
172} 174}
173 175
174#if 0
175static void blk_end_aio(struct bio *bio, int error)
176{
177 struct kiocb *iocb = bio->bi_private;
178 atomic_t *bio_count = &iocb->ki_bio_count;
179
180 if (bio_data_dir(bio) == READ)
181 bio_check_pages_dirty(bio);
182 else {
183 bio_release_pages(bio);
184 bio_put(bio);
185 }
186
187 /* iocb->ki_nbytes stores error code from LLDD */
188 if (error)
189 iocb->ki_nbytes = -EIO;
190
191 if (atomic_dec_and_test(bio_count)) {
192 if ((long)iocb->ki_nbytes < 0)
193 aio_complete(iocb, iocb->ki_nbytes, 0);
194 else
195 aio_complete(iocb, iocb->ki_left, 0);
196 }
197
198 return 0;
199}
200
201#define VEC_SIZE 16
202struct pvec {
203 unsigned short nr;
204 unsigned short idx;
205 struct page *page[VEC_SIZE];
206};
207
208#define PAGES_SPANNED(addr, len) \
209 (DIV_ROUND_UP((addr) + (len), PAGE_SIZE) - (addr) / PAGE_SIZE);
210
211/*
212 * get page pointer for user addr, we internally cache struct page array for
213 * (addr, count) range in pvec to avoid frequent call to get_user_pages. If
214 * internal page list is exhausted, a batch count of up to VEC_SIZE is used
215 * to get next set of page struct.
216 */
217static struct page *blk_get_page(unsigned long addr, size_t count, int rw,
218 struct pvec *pvec)
219{
220 int ret, nr_pages;
221 if (pvec->idx == pvec->nr) {
222 nr_pages = PAGES_SPANNED(addr, count);
223 nr_pages = min(nr_pages, VEC_SIZE);
224 down_read(&current->mm->mmap_sem);
225 ret = get_user_pages(current, current->mm, addr, nr_pages,
226 rw == READ, 0, pvec->page, NULL);
227 up_read(&current->mm->mmap_sem);
228 if (ret < 0)
229 return ERR_PTR(ret);
230 pvec->nr = ret;
231 pvec->idx = 0;
232 }
233 return pvec->page[pvec->idx++];
234}
235
236/* return a page back to pvec array */
237static void blk_unget_page(struct page *page, struct pvec *pvec)
238{
239 pvec->page[--pvec->idx] = page;
240}
241
242static ssize_t
243blkdev_direct_IO(int rw, struct kiocb *iocb, const struct iovec *iov,
244 loff_t pos, unsigned long nr_segs)
245{
246 struct inode *inode = iocb->ki_filp->f_mapping->host;
247 unsigned blkbits = blksize_bits(bdev_hardsect_size(I_BDEV(inode)));
248 unsigned blocksize_mask = (1 << blkbits) - 1;
249 unsigned long seg = 0; /* iov segment iterator */
250 unsigned long nvec; /* number of bio vec needed */
251 unsigned long cur_off; /* offset into current page */
252 unsigned long cur_len; /* I/O len of current page, up to PAGE_SIZE */
253
254 unsigned long addr; /* user iovec address */
255 size_t count; /* user iovec len */
256 size_t nbytes = iocb->ki_nbytes = iocb->ki_left; /* total xfer size */
257 loff_t size; /* size of block device */
258 struct bio *bio;
259 atomic_t *bio_count = &iocb->ki_bio_count;
260 struct page *page;
261 struct pvec pvec;
262
263 pvec.nr = 0;
264 pvec.idx = 0;
265
266 if (pos & blocksize_mask)
267 return -EINVAL;
268
269 size = i_size_read(inode);
270 if (pos + nbytes > size) {
271 nbytes = size - pos;
272 iocb->ki_left = nbytes;
273 }
274
275 /*
276 * check first non-zero iov alignment, the remaining
277 * iov alignment is checked inside bio loop below.
278 */
279 do {
280 addr = (unsigned long) iov[seg].iov_base;
281 count = min(iov[seg].iov_len, nbytes);
282 if (addr & blocksize_mask || count & blocksize_mask)
283 return -EINVAL;
284 } while (!count && ++seg < nr_segs);
285 atomic_set(bio_count, 1);
286
287 while (nbytes) {
288 /* roughly estimate number of bio vec needed */
289 nvec = (nbytes + PAGE_SIZE - 1) / PAGE_SIZE;
290 nvec = max(nvec, nr_segs - seg);
291 nvec = min(nvec, (unsigned long) BIO_MAX_PAGES);
292
293 /* bio_alloc should not fail with GFP_KERNEL flag */
294 bio = bio_alloc(GFP_KERNEL, nvec);
295 bio->bi_bdev = I_BDEV(inode);
296 bio->bi_end_io = blk_end_aio;
297 bio->bi_private = iocb;
298 bio->bi_sector = pos >> blkbits;
299same_bio:
300 cur_off = addr & ~PAGE_MASK;
301 cur_len = PAGE_SIZE - cur_off;
302 if (count < cur_len)
303 cur_len = count;
304
305 page = blk_get_page(addr, count, rw, &pvec);
306 if (unlikely(IS_ERR(page)))
307 goto backout;
308
309 if (bio_add_page(bio, page, cur_len, cur_off)) {
310 pos += cur_len;
311 addr += cur_len;
312 count -= cur_len;
313 nbytes -= cur_len;
314
315 if (count)
316 goto same_bio;
317 while (++seg < nr_segs) {
318 addr = (unsigned long) iov[seg].iov_base;
319 count = iov[seg].iov_len;
320 if (!count)
321 continue;
322 if (unlikely(addr & blocksize_mask ||
323 count & blocksize_mask)) {
324 page = ERR_PTR(-EINVAL);
325 goto backout;
326 }
327 count = min(count, nbytes);
328 goto same_bio;
329 }
330 } else {
331 blk_unget_page(page, &pvec);
332 }
333
334 /* bio is ready, submit it */
335 if (rw == READ)
336 bio_set_pages_dirty(bio);
337 atomic_inc(bio_count);
338 submit_bio(rw, bio);
339 }
340
341completion:
342 iocb->ki_left -= nbytes;
343 nbytes = iocb->ki_left;
344 iocb->ki_pos += nbytes;
345
346 blk_run_address_space(inode->i_mapping);
347 if (atomic_dec_and_test(bio_count))
348 aio_complete(iocb, nbytes, 0);
349
350 return -EIOCBQUEUED;
351
352backout:
353 /*
354 * back out nbytes count constructed so far for this bio,
355 * we will throw away current bio.
356 */
357 nbytes += bio->bi_size;
358 bio_release_pages(bio);
359 bio_put(bio);
360
361 /*
362 * if no bio was submmitted, return the error code.
363 * otherwise, proceed with pending I/O completion.
364 */
365 if (atomic_read(bio_count) == 1)
366 return PTR_ERR(page);
367 goto completion;
368}
369#endif
370
371static int blkdev_writepage(struct page *page, struct writeback_control *wbc) 176static int blkdev_writepage(struct page *page, struct writeback_control *wbc)
372{ 177{
373 return block_write_full_page(page, blkdev_get_block, wbc); 178 return block_write_full_page(page, blkdev_get_block, wbc);
@@ -1334,7 +1139,7 @@ static long block_ioctl(struct file *file, unsigned cmd, unsigned long arg)
1334 return blkdev_ioctl(file->f_mapping->host, file, cmd, arg); 1139 return blkdev_ioctl(file->f_mapping->host, file, cmd, arg);
1335} 1140}
1336 1141
1337const struct address_space_operations def_blk_aops = { 1142static const struct address_space_operations def_blk_aops = {
1338 .readpage = blkdev_readpage, 1143 .readpage = blkdev_readpage,
1339 .writepage = blkdev_writepage, 1144 .writepage = blkdev_writepage,
1340 .sync_page = block_sync_page, 1145 .sync_page = block_sync_page,
diff --git a/fs/dlm/rcom.c b/fs/dlm/rcom.c
index 035e6f9990b0..67522c268c14 100644
--- a/fs/dlm/rcom.c
+++ b/fs/dlm/rcom.c
@@ -215,6 +215,8 @@ int dlm_rcom_names(struct dlm_ls *ls, int nodeid, char *last_name, int last_len)
215 ls->ls_recover_nodeid = nodeid; 215 ls->ls_recover_nodeid = nodeid;
216 216
217 if (nodeid == dlm_our_nodeid()) { 217 if (nodeid == dlm_our_nodeid()) {
218 ls->ls_recover_buf->rc_header.h_length =
219 dlm_config.ci_buffer_size;
218 dlm_copy_master_names(ls, last_name, last_len, 220 dlm_copy_master_names(ls, last_name, last_len,
219 ls->ls_recover_buf->rc_buf, 221 ls->ls_recover_buf->rc_buf,
220 max_size, nodeid); 222 max_size, nodeid);
diff --git a/fs/efs/dir.c b/fs/efs/dir.c
index dfb5cb400217..49308a29798a 100644
--- a/fs/efs/dir.c
+++ b/fs/efs/dir.c
@@ -5,8 +5,8 @@
5 */ 5 */
6 6
7#include <linux/buffer_head.h> 7#include <linux/buffer_head.h>
8#include <linux/efs_fs.h>
9#include <linux/smp_lock.h> 8#include <linux/smp_lock.h>
9#include "efs.h"
10 10
11static int efs_readdir(struct file *, void *, filldir_t); 11static int efs_readdir(struct file *, void *, filldir_t);
12 12
diff --git a/fs/efs/efs.h b/fs/efs/efs.h
new file mode 100644
index 000000000000..d8305b582ab0
--- /dev/null
+++ b/fs/efs/efs.h
@@ -0,0 +1,140 @@
1/*
2 * Copyright (c) 1999 Al Smith
3 *
4 * Portions derived from work (c) 1995,1996 Christian Vogelgsang.
5 * Portions derived from IRIX header files (c) 1988 Silicon Graphics
6 */
7#ifndef _EFS_EFS_H_
8#define _EFS_EFS_H_
9
10#include <linux/fs.h>
11#include <asm/uaccess.h>
12
13#define EFS_VERSION "1.0a"
14
15static const char cprt[] = "EFS: "EFS_VERSION" - (c) 1999 Al Smith <Al.Smith@aeschi.ch.eu.org>";
16
17
18/* 1 block is 512 bytes */
19#define EFS_BLOCKSIZE_BITS 9
20#define EFS_BLOCKSIZE (1 << EFS_BLOCKSIZE_BITS)
21
22typedef int32_t efs_block_t;
23typedef uint32_t efs_ino_t;
24
25#define EFS_DIRECTEXTENTS 12
26
27/*
28 * layout of an extent, in memory and on disk. 8 bytes exactly.
29 */
30typedef union extent_u {
31 unsigned char raw[8];
32 struct extent_s {
33 unsigned int ex_magic:8; /* magic # (zero) */
34 unsigned int ex_bn:24; /* basic block */
35 unsigned int ex_length:8; /* numblocks in this extent */
36 unsigned int ex_offset:24; /* logical offset into file */
37 } cooked;
38} efs_extent;
39
40typedef struct edevs {
41 __be16 odev;
42 __be32 ndev;
43} efs_devs;
44
45/*
46 * extent based filesystem inode as it appears on disk. The efs inode
47 * is exactly 128 bytes long.
48 */
49struct efs_dinode {
50 __be16 di_mode; /* mode and type of file */
51 __be16 di_nlink; /* number of links to file */
52 __be16 di_uid; /* owner's user id */
53 __be16 di_gid; /* owner's group id */
54 __be32 di_size; /* number of bytes in file */
55 __be32 di_atime; /* time last accessed */
56 __be32 di_mtime; /* time last modified */
57 __be32 di_ctime; /* time created */
58 __be32 di_gen; /* generation number */
59 __be16 di_numextents; /* # of extents */
60 u_char di_version; /* version of inode */
61 u_char di_spare; /* spare - used by AFS */
62 union di_addr {
63 efs_extent di_extents[EFS_DIRECTEXTENTS];
64 efs_devs di_dev; /* device for IFCHR/IFBLK */
65 } di_u;
66};
67
68/* efs inode storage in memory */
69struct efs_inode_info {
70 int numextents;
71 int lastextent;
72
73 efs_extent extents[EFS_DIRECTEXTENTS];
74 struct inode vfs_inode;
75};
76
77#include <linux/efs_fs_sb.h>
78
79#define EFS_DIRBSIZE_BITS EFS_BLOCKSIZE_BITS
80#define EFS_DIRBSIZE (1 << EFS_DIRBSIZE_BITS)
81
82struct efs_dentry {
83 __be32 inode;
84 unsigned char namelen;
85 char name[3];
86};
87
88#define EFS_DENTSIZE (sizeof(struct efs_dentry) - 3 + 1)
89#define EFS_MAXNAMELEN ((1 << (sizeof(char) * 8)) - 1)
90
91#define EFS_DIRBLK_HEADERSIZE 4
92#define EFS_DIRBLK_MAGIC 0xbeef /* moo */
93
94struct efs_dir {
95 __be16 magic;
96 unsigned char firstused;
97 unsigned char slots;
98
99 unsigned char space[EFS_DIRBSIZE - EFS_DIRBLK_HEADERSIZE];
100};
101
102#define EFS_MAXENTS \
103 ((EFS_DIRBSIZE - EFS_DIRBLK_HEADERSIZE) / \
104 (EFS_DENTSIZE + sizeof(char)))
105
106#define EFS_SLOTAT(dir, slot) EFS_REALOFF((dir)->space[slot])
107
108#define EFS_REALOFF(offset) ((offset << 1))
109
110
111static inline struct efs_inode_info *INODE_INFO(struct inode *inode)
112{
113 return container_of(inode, struct efs_inode_info, vfs_inode);
114}
115
116static inline struct efs_sb_info *SUPER_INFO(struct super_block *sb)
117{
118 return sb->s_fs_info;
119}
120
121struct statfs;
122struct fid;
123
124extern const struct inode_operations efs_dir_inode_operations;
125extern const struct file_operations efs_dir_operations;
126extern const struct address_space_operations efs_symlink_aops;
127
128extern struct inode *efs_iget(struct super_block *, unsigned long);
129extern efs_block_t efs_map_block(struct inode *, efs_block_t);
130extern int efs_get_block(struct inode *, sector_t, struct buffer_head *, int);
131
132extern struct dentry *efs_lookup(struct inode *, struct dentry *, struct nameidata *);
133extern struct dentry *efs_fh_to_dentry(struct super_block *sb, struct fid *fid,
134 int fh_len, int fh_type);
135extern struct dentry *efs_fh_to_parent(struct super_block *sb, struct fid *fid,
136 int fh_len, int fh_type);
137extern struct dentry *efs_get_parent(struct dentry *);
138extern int efs_bmap(struct inode *, int);
139
140#endif /* _EFS_EFS_H_ */
diff --git a/fs/efs/file.c b/fs/efs/file.c
index 5db20129681e..1ccb364ffa63 100644
--- a/fs/efs/file.c
+++ b/fs/efs/file.c
@@ -7,7 +7,7 @@
7 */ 7 */
8 8
9#include <linux/buffer_head.h> 9#include <linux/buffer_head.h>
10#include <linux/efs_fs.h> 10#include "efs.h"
11 11
12int efs_get_block(struct inode *inode, sector_t iblock, 12int efs_get_block(struct inode *inode, sector_t iblock,
13 struct buffer_head *bh_result, int create) 13 struct buffer_head *bh_result, int create)
diff --git a/fs/efs/inode.c b/fs/efs/inode.c
index 627c3026946d..79e19e5958e1 100644
--- a/fs/efs/inode.c
+++ b/fs/efs/inode.c
@@ -7,11 +7,11 @@
7 * and from work (c) 1998 Mike Shaver. 7 * and from work (c) 1998 Mike Shaver.
8 */ 8 */
9 9
10#include <linux/efs_fs.h>
11#include <linux/efs_fs_sb.h>
12#include <linux/buffer_head.h> 10#include <linux/buffer_head.h>
13#include <linux/module.h> 11#include <linux/module.h>
14#include <linux/fs.h> 12#include <linux/fs.h>
13#include "efs.h"
14#include <linux/efs_fs_sb.h>
15 15
16static int efs_readpage(struct file *file, struct page *page) 16static int efs_readpage(struct file *file, struct page *page)
17{ 17{
diff --git a/fs/efs/namei.c b/fs/efs/namei.c
index e26704742d41..3a404e7fad53 100644
--- a/fs/efs/namei.c
+++ b/fs/efs/namei.c
@@ -8,9 +8,9 @@
8 8
9#include <linux/buffer_head.h> 9#include <linux/buffer_head.h>
10#include <linux/string.h> 10#include <linux/string.h>
11#include <linux/efs_fs.h>
12#include <linux/smp_lock.h> 11#include <linux/smp_lock.h>
13#include <linux/exportfs.h> 12#include <linux/exportfs.h>
13#include "efs.h"
14 14
15 15
16static efs_ino_t efs_find_entry(struct inode *inode, const char *name, int len) { 16static efs_ino_t efs_find_entry(struct inode *inode, const char *name, int len) {
diff --git a/fs/efs/super.c b/fs/efs/super.c
index 14082405cdd1..d733531b55e2 100644
--- a/fs/efs/super.c
+++ b/fs/efs/super.c
@@ -8,14 +8,15 @@
8 8
9#include <linux/init.h> 9#include <linux/init.h>
10#include <linux/module.h> 10#include <linux/module.h>
11#include <linux/efs_fs.h>
12#include <linux/efs_vh.h>
13#include <linux/efs_fs_sb.h>
14#include <linux/exportfs.h> 11#include <linux/exportfs.h>
15#include <linux/slab.h> 12#include <linux/slab.h>
16#include <linux/buffer_head.h> 13#include <linux/buffer_head.h>
17#include <linux/vfs.h> 14#include <linux/vfs.h>
18 15
16#include "efs.h"
17#include <linux/efs_vh.h>
18#include <linux/efs_fs_sb.h>
19
19static int efs_statfs(struct dentry *dentry, struct kstatfs *buf); 20static int efs_statfs(struct dentry *dentry, struct kstatfs *buf);
20static int efs_fill_super(struct super_block *s, void *d, int silent); 21static int efs_fill_super(struct super_block *s, void *d, int silent);
21 22
diff --git a/fs/efs/symlink.c b/fs/efs/symlink.c
index 1d30d2ff440f..41911ec83aaf 100644
--- a/fs/efs/symlink.c
+++ b/fs/efs/symlink.c
@@ -7,10 +7,10 @@
7 */ 7 */
8 8
9#include <linux/string.h> 9#include <linux/string.h>
10#include <linux/efs_fs.h>
11#include <linux/pagemap.h> 10#include <linux/pagemap.h>
12#include <linux/buffer_head.h> 11#include <linux/buffer_head.h>
13#include <linux/smp_lock.h> 12#include <linux/smp_lock.h>
13#include "efs.h"
14 14
15static int efs_symlink_readpage(struct file *file, struct page *page) 15static int efs_symlink_readpage(struct file *file, struct page *page)
16{ 16{
diff --git a/fs/fuse/dir.c b/fs/fuse/dir.c
index 7fb514b6d852..c4807b3fc8a3 100644
--- a/fs/fuse/dir.c
+++ b/fs/fuse/dir.c
@@ -906,7 +906,7 @@ static int fuse_permission(struct inode *inode, int mask, struct nameidata *nd)
906 } 906 }
907 907
908 if (fc->flags & FUSE_DEFAULT_PERMISSIONS) { 908 if (fc->flags & FUSE_DEFAULT_PERMISSIONS) {
909 int err = generic_permission(inode, mask, NULL); 909 err = generic_permission(inode, mask, NULL);
910 910
911 /* If permission is denied, try to refresh file 911 /* If permission is denied, try to refresh file
912 attributes. This is also needed, because the root 912 attributes. This is also needed, because the root
diff --git a/fs/lockd/svc.c b/fs/lockd/svc.c
index 08226464e563..1ed8bd4de941 100644
--- a/fs/lockd/svc.c
+++ b/fs/lockd/svc.c
@@ -153,7 +153,7 @@ lockd(struct svc_rqst *rqstp)
153 */ 153 */
154 while ((nlmsvc_users || !signalled()) && nlmsvc_pid == current->pid) { 154 while ((nlmsvc_users || !signalled()) && nlmsvc_pid == current->pid) {
155 long timeout = MAX_SCHEDULE_TIMEOUT; 155 long timeout = MAX_SCHEDULE_TIMEOUT;
156 char buf[RPC_MAX_ADDRBUFLEN]; 156 RPC_IFDEBUG(char buf[RPC_MAX_ADDRBUFLEN]);
157 157
158 if (signalled()) { 158 if (signalled()) {
159 flush_signals(current); 159 flush_signals(current);
diff --git a/fs/nfs/callback.c b/fs/nfs/callback.c
index ecc06c619494..66648dd92d97 100644
--- a/fs/nfs/callback.c
+++ b/fs/nfs/callback.c
@@ -93,6 +93,7 @@ static void nfs_callback_svc(struct svc_rqst *rqstp)
93 svc_process(rqstp); 93 svc_process(rqstp);
94 } 94 }
95 95
96 flush_signals(current);
96 svc_exit_thread(rqstp); 97 svc_exit_thread(rqstp);
97 nfs_callback_info.pid = 0; 98 nfs_callback_info.pid = 0;
98 complete(&nfs_callback_info.stopped); 99 complete(&nfs_callback_info.stopped);
@@ -171,7 +172,7 @@ void nfs_callback_down(void)
171static int nfs_callback_authenticate(struct svc_rqst *rqstp) 172static int nfs_callback_authenticate(struct svc_rqst *rqstp)
172{ 173{
173 struct nfs_client *clp; 174 struct nfs_client *clp;
174 char buf[RPC_MAX_ADDRBUFLEN]; 175 RPC_IFDEBUG(char buf[RPC_MAX_ADDRBUFLEN]);
175 176
176 /* Don't talk to strangers */ 177 /* Don't talk to strangers */
177 clp = nfs_find_client(svc_addr(rqstp), 4); 178 clp = nfs_find_client(svc_addr(rqstp), 4);
diff --git a/fs/nfs/callback_xdr.c b/fs/nfs/callback_xdr.c
index c63eb720b68b..13619d24f023 100644
--- a/fs/nfs/callback_xdr.c
+++ b/fs/nfs/callback_xdr.c
@@ -254,7 +254,7 @@ static __be32 encode_attr_change(struct xdr_stream *xdr, const uint32_t *bitmap,
254 if (!(bitmap[0] & FATTR4_WORD0_CHANGE)) 254 if (!(bitmap[0] & FATTR4_WORD0_CHANGE))
255 return 0; 255 return 0;
256 p = xdr_reserve_space(xdr, 8); 256 p = xdr_reserve_space(xdr, 8);
257 if (unlikely(p == 0)) 257 if (unlikely(!p))
258 return htonl(NFS4ERR_RESOURCE); 258 return htonl(NFS4ERR_RESOURCE);
259 p = xdr_encode_hyper(p, change); 259 p = xdr_encode_hyper(p, change);
260 return 0; 260 return 0;
@@ -267,7 +267,7 @@ static __be32 encode_attr_size(struct xdr_stream *xdr, const uint32_t *bitmap, u
267 if (!(bitmap[0] & FATTR4_WORD0_SIZE)) 267 if (!(bitmap[0] & FATTR4_WORD0_SIZE))
268 return 0; 268 return 0;
269 p = xdr_reserve_space(xdr, 8); 269 p = xdr_reserve_space(xdr, 8);
270 if (unlikely(p == 0)) 270 if (unlikely(!p))
271 return htonl(NFS4ERR_RESOURCE); 271 return htonl(NFS4ERR_RESOURCE);
272 p = xdr_encode_hyper(p, size); 272 p = xdr_encode_hyper(p, size);
273 return 0; 273 return 0;
@@ -278,7 +278,7 @@ static __be32 encode_attr_time(struct xdr_stream *xdr, const struct timespec *ti
278 __be32 *p; 278 __be32 *p;
279 279
280 p = xdr_reserve_space(xdr, 12); 280 p = xdr_reserve_space(xdr, 12);
281 if (unlikely(p == 0)) 281 if (unlikely(!p))
282 return htonl(NFS4ERR_RESOURCE); 282 return htonl(NFS4ERR_RESOURCE);
283 p = xdr_encode_hyper(p, time->tv_sec); 283 p = xdr_encode_hyper(p, time->tv_sec);
284 *p = htonl(time->tv_nsec); 284 *p = htonl(time->tv_nsec);
diff --git a/fs/nfs/delegation.c b/fs/nfs/delegation.c
index b9eadd18ba70..00a5e4405e16 100644
--- a/fs/nfs/delegation.c
+++ b/fs/nfs/delegation.c
@@ -49,7 +49,7 @@ static int nfs_delegation_claim_locks(struct nfs_open_context *ctx, struct nfs4_
49 struct file_lock *fl; 49 struct file_lock *fl;
50 int status; 50 int status;
51 51
52 for (fl = inode->i_flock; fl != 0; fl = fl->fl_next) { 52 for (fl = inode->i_flock; fl != NULL; fl = fl->fl_next) {
53 if (!(fl->fl_flags & (FL_POSIX|FL_FLOCK))) 53 if (!(fl->fl_flags & (FL_POSIX|FL_FLOCK)))
54 continue; 54 continue;
55 if (nfs_file_open_context(fl->fl_file) != ctx) 55 if (nfs_file_open_context(fl->fl_file) != ctx)
diff --git a/fs/nfs/idmap.c b/fs/nfs/idmap.c
index 8ae5dba2d4e5..86147b0ab2cf 100644
--- a/fs/nfs/idmap.c
+++ b/fs/nfs/idmap.c
@@ -309,7 +309,7 @@ nfs_idmap_name(struct idmap *idmap, struct idmap_hashtable *h,
309 mutex_lock(&idmap->idmap_im_lock); 309 mutex_lock(&idmap->idmap_im_lock);
310 310
311 he = idmap_lookup_id(h, id); 311 he = idmap_lookup_id(h, id);
312 if (he != 0) { 312 if (he) {
313 memcpy(name, he->ih_name, he->ih_namelen); 313 memcpy(name, he->ih_name, he->ih_namelen);
314 ret = he->ih_namelen; 314 ret = he->ih_namelen;
315 goto out; 315 goto out;
diff --git a/fs/nfs/nfs4state.c b/fs/nfs/nfs4state.c
index 6233eb5e98c1..b962397004c1 100644
--- a/fs/nfs/nfs4state.c
+++ b/fs/nfs/nfs4state.c
@@ -785,7 +785,7 @@ static int nfs4_reclaim_locks(struct nfs4_state_recovery_ops *ops, struct nfs4_s
785 struct file_lock *fl; 785 struct file_lock *fl;
786 int status = 0; 786 int status = 0;
787 787
788 for (fl = inode->i_flock; fl != 0; fl = fl->fl_next) { 788 for (fl = inode->i_flock; fl != NULL; fl = fl->fl_next) {
789 if (!(fl->fl_flags & (FL_POSIX|FL_FLOCK))) 789 if (!(fl->fl_flags & (FL_POSIX|FL_FLOCK)))
790 continue; 790 continue;
791 if (nfs_file_open_context(fl->fl_file)->state != state) 791 if (nfs_file_open_context(fl->fl_file)->state != state)
diff --git a/fs/nfsd/nfsfh.c b/fs/nfsd/nfsfh.c
index 0130b345234d..1eb771d79cca 100644
--- a/fs/nfsd/nfsfh.c
+++ b/fs/nfsd/nfsfh.c
@@ -101,7 +101,7 @@ static __be32 nfsd_setuser_and_check_port(struct svc_rqst *rqstp,
101{ 101{
102 /* Check if the request originated from a secure port. */ 102 /* Check if the request originated from a secure port. */
103 if (!rqstp->rq_secure && EX_SECURE(exp)) { 103 if (!rqstp->rq_secure && EX_SECURE(exp)) {
104 char buf[RPC_MAX_ADDRBUFLEN]; 104 RPC_IFDEBUG(char buf[RPC_MAX_ADDRBUFLEN]);
105 dprintk(KERN_WARNING 105 dprintk(KERN_WARNING
106 "nfsd: request from insecure port %s!\n", 106 "nfsd: request from insecure port %s!\n",
107 svc_print_addr(rqstp, buf, sizeof(buf))); 107 svc_print_addr(rqstp, buf, sizeof(buf)));
diff --git a/fs/proc/base.c b/fs/proc/base.c
index 88f8edf18258..96ee899d6502 100644
--- a/fs/proc/base.c
+++ b/fs/proc/base.c
@@ -416,6 +416,7 @@ static const struct limit_names lnames[RLIM_NLIMITS] = {
416 [RLIMIT_MSGQUEUE] = {"Max msgqueue size", "bytes"}, 416 [RLIMIT_MSGQUEUE] = {"Max msgqueue size", "bytes"},
417 [RLIMIT_NICE] = {"Max nice priority", NULL}, 417 [RLIMIT_NICE] = {"Max nice priority", NULL},
418 [RLIMIT_RTPRIO] = {"Max realtime priority", NULL}, 418 [RLIMIT_RTPRIO] = {"Max realtime priority", NULL},
419 [RLIMIT_RTTIME] = {"Max realtime timeout", "us"},
419}; 420};
420 421
421/* Display limits for a process */ 422/* Display limits for a process */
diff --git a/fs/proc/task_mmu.c b/fs/proc/task_mmu.c
index 49958cffbd8d..6dc0334815f7 100644
--- a/fs/proc/task_mmu.c
+++ b/fs/proc/task_mmu.c
@@ -531,7 +531,7 @@ struct pagemapread {
531#define PM_RESERVED_BITS 3 531#define PM_RESERVED_BITS 3
532#define PM_RESERVED_OFFSET (64 - PM_RESERVED_BITS) 532#define PM_RESERVED_OFFSET (64 - PM_RESERVED_BITS)
533#define PM_RESERVED_MASK (((1LL<<PM_RESERVED_BITS)-1) << PM_RESERVED_OFFSET) 533#define PM_RESERVED_MASK (((1LL<<PM_RESERVED_BITS)-1) << PM_RESERVED_OFFSET)
534#define PM_SPECIAL(nr) (((nr) << PM_RESERVED_OFFSET) | PM_RESERVED_MASK) 534#define PM_SPECIAL(nr) (((nr) << PM_RESERVED_OFFSET) & PM_RESERVED_MASK)
535#define PM_NOT_PRESENT PM_SPECIAL(1LL) 535#define PM_NOT_PRESENT PM_SPECIAL(1LL)
536#define PM_SWAP PM_SPECIAL(2LL) 536#define PM_SWAP PM_SPECIAL(2LL)
537#define PM_END_OF_BUFFER 1 537#define PM_END_OF_BUFFER 1
diff --git a/fs/ufs/util.h b/fs/ufs/util.h
index b26fc4dec1e7..23ceed8c8fb9 100644
--- a/fs/ufs/util.h
+++ b/fs/ufs/util.h
@@ -58,7 +58,7 @@ ufs_set_fs_state(struct super_block *sb, struct ufs_super_block_first *usb1,
58{ 58{
59 switch (UFS_SB(sb)->s_flags & UFS_ST_MASK) { 59 switch (UFS_SB(sb)->s_flags & UFS_ST_MASK) {
60 case UFS_ST_SUNOS: 60 case UFS_ST_SUNOS:
61 if (fs32_to_cpu(sb, usb3->fs_postblformat == UFS_42POSTBLFMT)) { 61 if (fs32_to_cpu(sb, usb3->fs_postblformat) == UFS_42POSTBLFMT) {
62 usb1->fs_u0.fs_sun.fs_state = cpu_to_fs32(sb, value); 62 usb1->fs_u0.fs_sun.fs_state = cpu_to_fs32(sb, value);
63 break; 63 break;
64 } 64 }
diff --git a/include/asm-arm/arch-pxa/regs-ssp.h b/include/asm-arm/arch-pxa/regs-ssp.h
index 991cb688db75..0255328c3c18 100644
--- a/include/asm-arm/arch-pxa/regs-ssp.h
+++ b/include/asm-arm/arch-pxa/regs-ssp.h
@@ -85,6 +85,7 @@
85#define SSCR1_RSRE (1 << 20) /* Receive Service Request Enable */ 85#define SSCR1_RSRE (1 << 20) /* Receive Service Request Enable */
86#define SSCR1_TINTE (1 << 19) /* Receiver Time-out Interrupt enable */ 86#define SSCR1_TINTE (1 << 19) /* Receiver Time-out Interrupt enable */
87#define SSCR1_PINTE (1 << 18) /* Peripheral Trailing Byte Interupt Enable */ 87#define SSCR1_PINTE (1 << 18) /* Peripheral Trailing Byte Interupt Enable */
88#define SSCR1_IFS (1 << 16) /* Invert Frame Signal */
88#define SSCR1_STRF (1 << 15) /* Select FIFO or EFWR */ 89#define SSCR1_STRF (1 << 15) /* Select FIFO or EFWR */
89#define SSCR1_EFWR (1 << 14) /* Enable FIFO Write/Read */ 90#define SSCR1_EFWR (1 << 14) /* Enable FIFO Write/Read */
90 91
diff --git a/include/asm-arm/mach/arch.h b/include/asm-arm/mach/arch.h
index c59fad18e73b..bcc8aed7c9a9 100644
--- a/include/asm-arm/mach/arch.h
+++ b/include/asm-arm/mach/arch.h
@@ -17,7 +17,7 @@ struct sys_timer;
17struct machine_desc { 17struct machine_desc {
18 /* 18 /*
19 * Note! The first four elements are used 19 * Note! The first four elements are used
20 * by assembler code in head-armv.S 20 * by assembler code in head.S, head-common.S
21 */ 21 */
22 unsigned int nr; /* architecture number */ 22 unsigned int nr; /* architecture number */
23 unsigned int phys_io; /* start of physical io */ 23 unsigned int phys_io; /* start of physical io */
diff --git a/include/asm-frv/unistd.h b/include/asm-frv/unistd.h
index e8c986667532..f184eb8c047c 100644
--- a/include/asm-frv/unistd.h
+++ b/include/asm-frv/unistd.h
@@ -328,9 +328,11 @@
328#define __NR_epoll_pwait 319 328#define __NR_epoll_pwait 319
329#define __NR_utimensat 320 329#define __NR_utimensat 320
330#define __NR_signalfd 321 330#define __NR_signalfd 321
331/* #define __NR_timerfd 322 removed */ 331#define __NR_timerfd_create 322
332#define __NR_eventfd 323 332#define __NR_eventfd 323
333#define __NR_fallocate 324 333#define __NR_fallocate 324
334#define __NR_timerfd_settime 325
335#define __NR_timerfd_gettime 326
334 336
335#ifdef __KERNEL__ 337#ifdef __KERNEL__
336 338
diff --git a/include/asm-generic/percpu.h b/include/asm-generic/percpu.h
index 4b8d31cda1a0..b0e63c672ebd 100644
--- a/include/asm-generic/percpu.h
+++ b/include/asm-generic/percpu.h
@@ -32,6 +32,8 @@ extern unsigned long __per_cpu_offset[NR_CPUS];
32 */ 32 */
33#ifndef __my_cpu_offset 33#ifndef __my_cpu_offset
34#define __my_cpu_offset per_cpu_offset(raw_smp_processor_id()) 34#define __my_cpu_offset per_cpu_offset(raw_smp_processor_id())
35#endif
36#ifdef CONFIG_DEBUG_PREEMPT
35#define my_cpu_offset per_cpu_offset(smp_processor_id()) 37#define my_cpu_offset per_cpu_offset(smp_processor_id())
36#else 38#else
37#define my_cpu_offset __my_cpu_offset 39#define my_cpu_offset __my_cpu_offset
diff --git a/include/asm-generic/vmlinux.lds.h b/include/asm-generic/vmlinux.lds.h
index f784d2f34149..f054778e916c 100644
--- a/include/asm-generic/vmlinux.lds.h
+++ b/include/asm-generic/vmlinux.lds.h
@@ -238,6 +238,9 @@
238 *(.kprobes.text) \ 238 *(.kprobes.text) \
239 VMLINUX_SYMBOL(__kprobes_text_end) = .; 239 VMLINUX_SYMBOL(__kprobes_text_end) = .;
240 240
241/* Section used for early init (in .S files) */
242#define HEAD_TEXT *(.head.text)
243
241/* init and exit section handling */ 244/* init and exit section handling */
242#define INIT_DATA \ 245#define INIT_DATA \
243 *(.init.data) \ 246 *(.init.data) \
diff --git a/include/asm-h8300/hardirq.h b/include/asm-h8300/hardirq.h
index 18fa7931e09f..9d7f7a7462b2 100644
--- a/include/asm-h8300/hardirq.h
+++ b/include/asm-h8300/hardirq.h
@@ -12,6 +12,8 @@ typedef struct {
12 12
13#include <linux/irq_cpustat.h> /* Standard mappings for irq_cpustat_t above */ 13#include <linux/irq_cpustat.h> /* Standard mappings for irq_cpustat_t above */
14 14
15extern void ack_bad_irq(unsigned int irq);
16
15#define HARDIRQ_BITS 8 17#define HARDIRQ_BITS 8
16 18
17/* 19/*
diff --git a/include/asm-h8300/irq.h b/include/asm-h8300/irq.h
index 56eec28cc2c4..13d7c601cd0a 100644
--- a/include/asm-h8300/irq.h
+++ b/include/asm-h8300/irq.h
@@ -3,7 +3,7 @@
3 3
4#include <asm/ptrace.h> 4#include <asm/ptrace.h>
5 5
6#if defined(__H8300H__) 6#if defined(CONFIG_CPU_H8300H)
7#define NR_IRQS 64 7#define NR_IRQS 64
8#define EXT_IRQ0 12 8#define EXT_IRQ0 12
9#define EXT_IRQ1 13 9#define EXT_IRQ1 13
@@ -14,14 +14,6 @@
14#define EXT_IRQ6 18 14#define EXT_IRQ6 18
15#define EXT_IRQ7 19 15#define EXT_IRQ7 19
16#define EXT_IRQS 5 16#define EXT_IRQS 5
17
18#include <asm/regs306x.h>
19#define h8300_clear_isr(irq) \
20do { \
21 if (irq >= EXT_IRQ0 && irq <= EXT_IRQ5) \
22 *(volatile unsigned char *)ISR &= ~(1 << (irq - EXT_IRQ0)); \
23} while(0)
24
25#define IER_REGS *(volatile unsigned char *)IER 17#define IER_REGS *(volatile unsigned char *)IER
26#endif 18#endif
27#if defined(CONFIG_CPU_H8S) 19#if defined(CONFIG_CPU_H8S)
@@ -44,13 +36,6 @@ do { \
44#define EXT_IRQ15 31 36#define EXT_IRQ15 31
45#define EXT_IRQS 15 37#define EXT_IRQS 15
46 38
47#include <asm/regs267x.h>
48#define h8300_clear_isr(irq) \
49do { \
50 if (irq >= EXT_IRQ0 && irq <= EXT_IRQ15) \
51 *(volatile unsigned short *)ISR &= ~(1 << (irq - EXT_IRQ0)); \
52} while(0)
53
54#define IER_REGS *(volatile unsigned short *)IER 39#define IER_REGS *(volatile unsigned short *)IER
55#endif 40#endif
56 41
@@ -59,4 +44,6 @@ static __inline__ int irq_canonicalize(int irq)
59 return irq; 44 return irq;
60} 45}
61 46
47typedef void (*h8300_vector)(void);
48
62#endif /* _H8300_IRQ_H_ */ 49#endif /* _H8300_IRQ_H_ */
diff --git a/include/asm-h8300/uaccess.h b/include/asm-h8300/uaccess.h
index ebe58c6c8387..a22350ec271a 100644
--- a/include/asm-h8300/uaccess.h
+++ b/include/asm-h8300/uaccess.h
@@ -91,7 +91,7 @@ extern int __put_user_bad(void);
91#define get_user(x, ptr) \ 91#define get_user(x, ptr) \
92({ \ 92({ \
93 int __gu_err = 0; \ 93 int __gu_err = 0; \
94 typeof(*(ptr)) __gu_val = 0; \ 94 uint32_t __gu_val = 0; \
95 switch (sizeof(*(ptr))) { \ 95 switch (sizeof(*(ptr))) { \
96 case 1: \ 96 case 1: \
97 case 2: \ 97 case 2: \
@@ -106,7 +106,7 @@ extern int __put_user_bad(void);
106 __gu_err = __get_user_bad(); \ 106 __gu_err = __get_user_bad(); \
107 break; \ 107 break; \
108 } \ 108 } \
109 (x) = __gu_val; \ 109 (x) = (typeof(*(ptr)))__gu_val; \
110 __gu_err; \ 110 __gu_err; \
111}) 111})
112#define __get_user(x, ptr) get_user(x, ptr) 112#define __get_user(x, ptr) get_user(x, ptr)
diff --git a/include/asm-mips/mach-db1x00/db1200.h b/include/asm-mips/mach-db1x00/db1200.h
index 050eae87ff01..a6bdac61ab49 100644
--- a/include/asm-mips/mach-db1x00/db1200.h
+++ b/include/asm-mips/mach-db1x00/db1200.h
@@ -25,6 +25,7 @@
25#define __ASM_DB1200_H 25#define __ASM_DB1200_H
26 26
27#include <linux/types.h> 27#include <linux/types.h>
28#include <asm/mach-au1x00/au1xxx_psc.h>
28 29
29// This is defined in au1000.h with bogus value 30// This is defined in au1000.h with bogus value
30#undef AU1X00_EXTERNAL_INT 31#undef AU1X00_EXTERNAL_INT
diff --git a/include/asm-mips/mach-db1x00/db1x00.h b/include/asm-mips/mach-db1x00/db1x00.h
index 0f5f4c29f4e8..e7a88ba35833 100644
--- a/include/asm-mips/mach-db1x00/db1x00.h
+++ b/include/asm-mips/mach-db1x00/db1x00.h
@@ -28,6 +28,7 @@
28#ifndef __ASM_DB1X00_H 28#ifndef __ASM_DB1X00_H
29#define __ASM_DB1X00_H 29#define __ASM_DB1X00_H
30 30
31#include <asm/mach-au1x00/au1xxx_psc.h>
31 32
32#ifdef CONFIG_MIPS_DB1550 33#ifdef CONFIG_MIPS_DB1550
33 34
diff --git a/include/asm-mips/mach-ip27/dma-coherence.h b/include/asm-mips/mach-ip27/dma-coherence.h
index 3fdbbf68e952..ed7e6222dc15 100644
--- a/include/asm-mips/mach-ip27/dma-coherence.h
+++ b/include/asm-mips/mach-ip27/dma-coherence.h
@@ -35,7 +35,7 @@ static dma_addr_t plat_map_dma_mem_page(struct device *dev, struct page *page)
35 35
36static unsigned long plat_dma_addr_to_phys(dma_addr_t dma_addr) 36static unsigned long plat_dma_addr_to_phys(dma_addr_t dma_addr)
37{ 37{
38 return dma_addr & (0xffUL << 56); 38 return dma_addr & ~(0xffUL << 56);
39} 39}
40 40
41static inline void plat_unmap_dma_mem(dma_addr_t dma_addr) 41static inline void plat_unmap_dma_mem(dma_addr_t dma_addr)
diff --git a/include/asm-mips/mach-pb1x00/pb1200.h b/include/asm-mips/mach-pb1x00/pb1200.h
index d9f384acfea9..ed5fd7390678 100644
--- a/include/asm-mips/mach-pb1x00/pb1200.h
+++ b/include/asm-mips/mach-pb1x00/pb1200.h
@@ -25,6 +25,7 @@
25#define __ASM_PB1200_H 25#define __ASM_PB1200_H
26 26
27#include <linux/types.h> 27#include <linux/types.h>
28#include <asm/mach-au1x00/au1xxx_psc.h>
28 29
29// This is defined in au1000.h with bogus value 30// This is defined in au1000.h with bogus value
30#undef AU1X00_EXTERNAL_INT 31#undef AU1X00_EXTERNAL_INT
diff --git a/include/asm-mips/mach-pb1x00/pb1550.h b/include/asm-mips/mach-pb1x00/pb1550.h
index 9a4955ce3b4a..c2ab0e2df4ae 100644
--- a/include/asm-mips/mach-pb1x00/pb1550.h
+++ b/include/asm-mips/mach-pb1x00/pb1550.h
@@ -28,6 +28,7 @@
28#define __ASM_PB1550_H 28#define __ASM_PB1550_H
29 29
30#include <linux/types.h> 30#include <linux/types.h>
31#include <asm/mach-au1x00/au1xxx_psc.h>
31 32
32#define DBDMA_AC97_TX_CHAN DSCR_CMD0_PSC1_TX 33#define DBDMA_AC97_TX_CHAN DSCR_CMD0_PSC1_TX
33#define DBDMA_AC97_RX_CHAN DSCR_CMD0_PSC1_RX 34#define DBDMA_AC97_RX_CHAN DSCR_CMD0_PSC1_RX
diff --git a/include/asm-mips/qemu.h b/include/asm-mips/qemu.h
deleted file mode 100644
index 487ced4a40de..000000000000
--- a/include/asm-mips/qemu.h
+++ /dev/null
@@ -1,30 +0,0 @@
1/*
2 * This file is subject to the terms and conditions of the GNU General Public
3 * License. See the file "COPYING" in the main directory of this archive
4 * for more details.
5 *
6 * Copyright (C) 2005 by Ralf Baechle (ralf@linux-mips.org)
7 */
8#ifndef __ASM_QEMU_H
9#define __ASM_QEMU_H
10
11/*
12 * Interrupt numbers
13 */
14#define Q_PIC_IRQ_BASE 0
15#define Q_COUNT_COMPARE_IRQ 23
16
17/*
18 * Qemu clock rate. Unlike on real MIPS this has no relation to the
19 * instruction issue rate, so the choosen value is pure fiction, just needs
20 * to match the value in Qemu itself.
21 */
22#define QEMU_C0_COUNTER_CLOCK 100000000
23
24/*
25 * Magic qemu system control location.
26 */
27#define QEMU_RESTART_REG 0xBFBF0000
28#define QEMU_HALT_REG 0xBFBF0004
29
30#endif /* __ASM_QEMU_H */
diff --git a/include/asm-mips/sni.h b/include/asm-mips/sni.h
index e716447e5e03..8c1eb02c6d16 100644
--- a/include/asm-mips/sni.h
+++ b/include/asm-mips/sni.h
@@ -228,7 +228,14 @@ extern void sni_pcimt_irq_init(void);
228extern void sni_cpu_time_init(void); 228extern void sni_cpu_time_init(void);
229 229
230/* eisa init for RM200/400 */ 230/* eisa init for RM200/400 */
231#ifdef CONFIG_EISA
231extern int sni_eisa_root_init(void); 232extern int sni_eisa_root_init(void);
233#else
234static inline int sni_eisa_root_init(void)
235{
236 return 0;
237}
238#endif
232 239
233/* common irq stuff */ 240/* common irq stuff */
234extern void (*sni_hwint)(void); 241extern void (*sni_hwint)(void);
diff --git a/include/asm-mips/unistd.h b/include/asm-mips/unistd.h
index fa9a587b3bf1..4964c82f85f9 100644
--- a/include/asm-mips/unistd.h
+++ b/include/asm-mips/unistd.h
@@ -341,16 +341,19 @@
341#define __NR_timerfd (__NR_Linux + 318) 341#define __NR_timerfd (__NR_Linux + 318)
342#define __NR_eventfd (__NR_Linux + 319) 342#define __NR_eventfd (__NR_Linux + 319)
343#define __NR_fallocate (__NR_Linux + 320) 343#define __NR_fallocate (__NR_Linux + 320)
344#define __NR_timerfd_create (__NR_Linux + 321)
345#define __NR_timerfd_gettime (__NR_Linux + 322)
346#define __NR_timerfd_settime (__NR_Linux + 323)
344 347
345/* 348/*
346 * Offset of the last Linux o32 flavoured syscall 349 * Offset of the last Linux o32 flavoured syscall
347 */ 350 */
348#define __NR_Linux_syscalls 320 351#define __NR_Linux_syscalls 323
349 352
350#endif /* _MIPS_SIM == _MIPS_SIM_ABI32 */ 353#endif /* _MIPS_SIM == _MIPS_SIM_ABI32 */
351 354
352#define __NR_O32_Linux 4000 355#define __NR_O32_Linux 4000
353#define __NR_O32_Linux_syscalls 320 356#define __NR_O32_Linux_syscalls 323
354 357
355#if _MIPS_SIM == _MIPS_SIM_ABI64 358#if _MIPS_SIM == _MIPS_SIM_ABI64
356 359
@@ -638,16 +641,19 @@
638#define __NR_timerfd (__NR_Linux + 277) 641#define __NR_timerfd (__NR_Linux + 277)
639#define __NR_eventfd (__NR_Linux + 278) 642#define __NR_eventfd (__NR_Linux + 278)
640#define __NR_fallocate (__NR_Linux + 279) 643#define __NR_fallocate (__NR_Linux + 279)
644#define __NR_timerfd_create (__NR_Linux + 280)
645#define __NR_timerfd_gettime (__NR_Linux + 281)
646#define __NR_timerfd_settime (__NR_Linux + 282)
641 647
642/* 648/*
643 * Offset of the last Linux 64-bit flavoured syscall 649 * Offset of the last Linux 64-bit flavoured syscall
644 */ 650 */
645#define __NR_Linux_syscalls 279 651#define __NR_Linux_syscalls 282
646 652
647#endif /* _MIPS_SIM == _MIPS_SIM_ABI64 */ 653#endif /* _MIPS_SIM == _MIPS_SIM_ABI64 */
648 654
649#define __NR_64_Linux 5000 655#define __NR_64_Linux 5000
650#define __NR_64_Linux_syscalls 279 656#define __NR_64_Linux_syscalls 282
651 657
652#if _MIPS_SIM == _MIPS_SIM_NABI32 658#if _MIPS_SIM == _MIPS_SIM_NABI32
653 659
@@ -939,16 +945,19 @@
939#define __NR_timerfd (__NR_Linux + 281) 945#define __NR_timerfd (__NR_Linux + 281)
940#define __NR_eventfd (__NR_Linux + 282) 946#define __NR_eventfd (__NR_Linux + 282)
941#define __NR_fallocate (__NR_Linux + 283) 947#define __NR_fallocate (__NR_Linux + 283)
948#define __NR_timerfd_create (__NR_Linux + 284)
949#define __NR_timerfd_gettime (__NR_Linux + 285)
950#define __NR_timerfd_settime (__NR_Linux + 286)
942 951
943/* 952/*
944 * Offset of the last N32 flavoured syscall 953 * Offset of the last N32 flavoured syscall
945 */ 954 */
946#define __NR_Linux_syscalls 283 955#define __NR_Linux_syscalls 286
947 956
948#endif /* _MIPS_SIM == _MIPS_SIM_NABI32 */ 957#endif /* _MIPS_SIM == _MIPS_SIM_NABI32 */
949 958
950#define __NR_N32_Linux 6000 959#define __NR_N32_Linux 6000
951#define __NR_N32_Linux_syscalls 283 960#define __NR_N32_Linux_syscalls 286
952 961
953#ifdef __KERNEL__ 962#ifdef __KERNEL__
954 963
diff --git a/include/asm-mn10300/param.h b/include/asm-mn10300/param.h
index 54b883ec3906..789b1df41fcb 100644
--- a/include/asm-mn10300/param.h
+++ b/include/asm-mn10300/param.h
@@ -12,7 +12,7 @@
12#define _ASM_PARAM_H 12#define _ASM_PARAM_H
13 13
14#ifdef __KERNEL__ 14#ifdef __KERNEL__
15#define HZ 1000 /* Internal kernel timer frequency */ 15#define HZ CONFIG_HZ /* Internal kernel timer frequency */
16#define USER_HZ 100 /* .. some user interfaces are in 16#define USER_HZ 100 /* .. some user interfaces are in
17 * "ticks" */ 17 * "ticks" */
18#define CLOCKS_PER_SEC (USER_HZ) /* like times() */ 18#define CLOCKS_PER_SEC (USER_HZ) /* like times() */
diff --git a/include/asm-mn10300/socket.h b/include/asm-mn10300/socket.h
index 99ca648b94c5..80af9c4ccad7 100644
--- a/include/asm-mn10300/socket.h
+++ b/include/asm-mn10300/socket.h
@@ -52,4 +52,6 @@
52#define SO_TIMESTAMPNS 35 52#define SO_TIMESTAMPNS 35
53#define SCM_TIMESTAMPNS SO_TIMESTAMPNS 53#define SCM_TIMESTAMPNS SO_TIMESTAMPNS
54 54
55#define SO_MARK 36
56
55#endif /* _ASM_SOCKET_H */ 57#endif /* _ASM_SOCKET_H */
diff --git a/include/asm-powerpc/percpu.h b/include/asm-powerpc/percpu.h
index ccb0523eb3b4..f879252b7ea6 100644
--- a/include/asm-powerpc/percpu.h
+++ b/include/asm-powerpc/percpu.h
@@ -13,7 +13,7 @@
13#include <asm/paca.h> 13#include <asm/paca.h>
14 14
15#define __per_cpu_offset(cpu) (paca[cpu].data_offset) 15#define __per_cpu_offset(cpu) (paca[cpu].data_offset)
16#define __my_cpu_offset get_paca()->data_offset 16#define __my_cpu_offset local_paca->data_offset
17#define per_cpu_offset(x) (__per_cpu_offset(x)) 17#define per_cpu_offset(x) (__per_cpu_offset(x))
18 18
19#endif /* CONFIG_SMP */ 19#endif /* CONFIG_SMP */
diff --git a/include/asm-powerpc/spu.h b/include/asm-powerpc/spu.h
index f07c99ba5d13..e3c845b0f764 100644
--- a/include/asm-powerpc/spu.h
+++ b/include/asm-powerpc/spu.h
@@ -98,9 +98,8 @@
98#define MFC_PRIV_ATTN_EVENT 0x00000800 98#define MFC_PRIV_ATTN_EVENT 0x00000800
99#define MFC_MULTI_SRC_EVENT 0x00001000 99#define MFC_MULTI_SRC_EVENT 0x00001000
100 100
101/* Flags indicating progress during context switch. */ 101/* Flag indicating progress during context switch. */
102#define SPU_CONTEXT_SWITCH_PENDING 0UL 102#define SPU_CONTEXT_SWITCH_PENDING 0UL
103#define SPU_CONTEXT_SWITCH_ACTIVE 1UL
104 103
105struct spu_context; 104struct spu_context;
106struct spu_runqueue; 105struct spu_runqueue;
diff --git a/include/asm-s390/bitops.h b/include/asm-s390/bitops.h
index ab83c844d04c..965394e69452 100644
--- a/include/asm-s390/bitops.h
+++ b/include/asm-s390/bitops.h
@@ -456,16 +456,18 @@ static inline unsigned long __ffz_word_loop(const unsigned long *addr,
456 456
457 asm volatile( 457 asm volatile(
458#ifndef __s390x__ 458#ifndef __s390x__
459 " ahi %1,31\n" 459 " ahi %1,-1\n"
460 " srl %1,5\n" 460 " sra %1,5\n"
461 " jz 1f\n"
461 "0: c %2,0(%0,%3)\n" 462 "0: c %2,0(%0,%3)\n"
462 " jne 1f\n" 463 " jne 1f\n"
463 " la %0,4(%0)\n" 464 " la %0,4(%0)\n"
464 " brct %1,0b\n" 465 " brct %1,0b\n"
465 "1:\n" 466 "1:\n"
466#else 467#else
467 " aghi %1,63\n" 468 " aghi %1,-1\n"
468 " srlg %1,%1,6\n" 469 " srag %1,%1,6\n"
470 " jz 1f\n"
469 "0: cg %2,0(%0,%3)\n" 471 "0: cg %2,0(%0,%3)\n"
470 " jne 1f\n" 472 " jne 1f\n"
471 " la %0,8(%0)\n" 473 " la %0,8(%0)\n"
@@ -491,16 +493,18 @@ static inline unsigned long __ffs_word_loop(const unsigned long *addr,
491 493
492 asm volatile( 494 asm volatile(
493#ifndef __s390x__ 495#ifndef __s390x__
494 " ahi %1,31\n" 496 " ahi %1,-1\n"
495 " srl %1,5\n" 497 " sra %1,5\n"
498 " jz 1f\n"
496 "0: c %2,0(%0,%3)\n" 499 "0: c %2,0(%0,%3)\n"
497 " jne 1f\n" 500 " jne 1f\n"
498 " la %0,4(%0)\n" 501 " la %0,4(%0)\n"
499 " brct %1,0b\n" 502 " brct %1,0b\n"
500 "1:\n" 503 "1:\n"
501#else 504#else
502 " aghi %1,63\n" 505 " aghi %1,-1\n"
503 " srlg %1,%1,6\n" 506 " srag %1,%1,6\n"
507 " jz 1f\n"
504 "0: cg %2,0(%0,%3)\n" 508 "0: cg %2,0(%0,%3)\n"
505 " jne 1f\n" 509 " jne 1f\n"
506 " la %0,8(%0)\n" 510 " la %0,8(%0)\n"
diff --git a/include/asm-sparc64/ptrace.h b/include/asm-sparc64/ptrace.h
index 8617c3a5143b..6da197803efc 100644
--- a/include/asm-sparc64/ptrace.h
+++ b/include/asm-sparc64/ptrace.h
@@ -102,12 +102,14 @@ do { current_thread_info()->syscall_noerror = 1; \
102} while (0) 102} while (0)
103#define user_mode(regs) (!((regs)->tstate & TSTATE_PRIV)) 103#define user_mode(regs) (!((regs)->tstate & TSTATE_PRIV))
104#define instruction_pointer(regs) ((regs)->tpc) 104#define instruction_pointer(regs) ((regs)->tpc)
105#define regs_return_value(regs) ((regs)->u_regs[UREG_I0])
105#ifdef CONFIG_SMP 106#ifdef CONFIG_SMP
106extern unsigned long profile_pc(struct pt_regs *); 107extern unsigned long profile_pc(struct pt_regs *);
107#else 108#else
108#define profile_pc(regs) instruction_pointer(regs) 109#define profile_pc(regs) instruction_pointer(regs)
109#endif 110#endif
110extern void show_regs(struct pt_regs *); 111extern void show_regs(struct pt_regs *);
112extern void __show_regs(struct pt_regs *);
111#endif 113#endif
112 114
113#else /* __ASSEMBLY__ */ 115#else /* __ASSEMBLY__ */
diff --git a/include/asm-sparc64/reboot.h b/include/asm-sparc64/reboot.h
new file mode 100644
index 000000000000..3f3f43f5be5e
--- /dev/null
+++ b/include/asm-sparc64/reboot.h
@@ -0,0 +1,6 @@
1#ifndef _SPARC64_REBOOT_H
2#define _SPARC64_REBOOT_H
3
4extern void machine_alt_power_off(void);
5
6#endif /* _SPARC64_REBOOT_H */
diff --git a/include/asm-sparc64/syscalls.h b/include/asm-sparc64/syscalls.h
new file mode 100644
index 000000000000..45a43f637a14
--- /dev/null
+++ b/include/asm-sparc64/syscalls.h
@@ -0,0 +1,13 @@
1#ifndef _SPARC64_SYSCALLS_H
2#define _SPARC64_SYSCALLS_H
3
4struct pt_regs;
5
6extern asmlinkage long sparc_do_fork(unsigned long clone_flags,
7 unsigned long stack_start,
8 struct pt_regs *regs,
9 unsigned long stack_size);
10
11extern asmlinkage int sparc_execve(struct pt_regs *regs);
12
13#endif /* _SPARC64_SYSCALLS_H */
diff --git a/include/asm-sparc64/system.h b/include/asm-sparc64/system.h
index 1faefa6d3708..ed91a5d8d4f0 100644
--- a/include/asm-sparc64/system.h
+++ b/include/asm-sparc64/system.h
@@ -117,6 +117,7 @@ do { __asm__ __volatile__("ba,pt %%xcc, 1f\n\t" \
117extern void sun_do_break(void); 117extern void sun_do_break(void);
118extern int stop_a_enabled; 118extern int stop_a_enabled;
119 119
120extern void fault_in_user_windows(void);
120extern void synchronize_user_stack(void); 121extern void synchronize_user_stack(void);
121 122
122extern void __flushw_user(void); 123extern void __flushw_user(void);
diff --git a/include/asm-x86/desc_64.h b/include/asm-x86/desc_64.h
deleted file mode 100644
index 8b137891791f..000000000000
--- a/include/asm-x86/desc_64.h
+++ /dev/null
@@ -1 +0,0 @@
1
diff --git a/include/asm-x86/i387.h b/include/asm-x86/i387.h
index 6b1895ccd6b7..f377b76b2f34 100644
--- a/include/asm-x86/i387.h
+++ b/include/asm-x86/i387.h
@@ -20,7 +20,6 @@
20#include <asm/uaccess.h> 20#include <asm/uaccess.h>
21 21
22extern void fpu_init(void); 22extern void fpu_init(void);
23extern unsigned int mxcsr_feature_mask;
24extern void mxcsr_feature_mask_init(void); 23extern void mxcsr_feature_mask_init(void);
25extern void init_fpu(struct task_struct *child); 24extern void init_fpu(struct task_struct *child);
26extern asmlinkage void math_state_restore(void); 25extern asmlinkage void math_state_restore(void);
diff --git a/include/asm-x86/pgtable_64.h b/include/asm-x86/pgtable_64.h
index bd4740a60f29..0a0b77bc736a 100644
--- a/include/asm-x86/pgtable_64.h
+++ b/include/asm-x86/pgtable_64.h
@@ -188,6 +188,7 @@ static inline unsigned long pmd_bad(pmd_t pmd)
188#define pgd_offset(mm, addr) ((mm)->pgd + pgd_index(addr)) 188#define pgd_offset(mm, addr) ((mm)->pgd + pgd_index(addr))
189#define pgd_offset_k(address) (init_level4_pgt + pgd_index(address)) 189#define pgd_offset_k(address) (init_level4_pgt + pgd_index(address))
190#define pgd_present(pgd) (pgd_val(pgd) & _PAGE_PRESENT) 190#define pgd_present(pgd) (pgd_val(pgd) & _PAGE_PRESENT)
191static inline int pgd_large(pgd_t pgd) { return 0; }
191#define mk_kernel_pgd(address) ((pgd_t){ (address) | _KERNPG_TABLE }) 192#define mk_kernel_pgd(address) ((pgd_t){ (address) | _KERNPG_TABLE })
192 193
193/* PUD - Level3 access */ 194/* PUD - Level3 access */
@@ -246,6 +247,7 @@ static inline int pud_large(pud_t pte)
246#define __swp_entry_to_pte(x) ((pte_t) { .pte = (x).val }) 247#define __swp_entry_to_pte(x) ((pte_t) { .pte = (x).val })
247 248
248extern int kern_addr_valid(unsigned long addr); 249extern int kern_addr_valid(unsigned long addr);
250extern void cleanup_highmap(void);
249 251
250#define io_remap_pfn_range(vma, vaddr, pfn, size, prot) \ 252#define io_remap_pfn_range(vma, vaddr, pfn, size, prot) \
251 remap_pfn_range(vma, vaddr, pfn, size, prot) 253 remap_pfn_range(vma, vaddr, pfn, size, prot)
diff --git a/include/asm-x86/processor.h b/include/asm-x86/processor.h
index 149920dcd341..45a2f0ab33d0 100644
--- a/include/asm-x86/processor.h
+++ b/include/asm-x86/processor.h
@@ -302,10 +302,6 @@ union i387_union {
302}; 302};
303 303
304#ifdef CONFIG_X86_32 304#ifdef CONFIG_X86_32
305/*
306 * the following now lives in the per cpu area:
307 * extern int cpu_llc_id[NR_CPUS];
308 */
309DECLARE_PER_CPU(u8, cpu_llc_id); 305DECLARE_PER_CPU(u8, cpu_llc_id);
310#else 306#else
311DECLARE_PER_CPU(struct orig_ist, orig_ist); 307DECLARE_PER_CPU(struct orig_ist, orig_ist);
@@ -671,7 +667,6 @@ extern void init_gdt(int cpu);
671extern unsigned int machine_id; 667extern unsigned int machine_id;
672extern unsigned int machine_submodel_id; 668extern unsigned int machine_submodel_id;
673extern unsigned int BIOS_revision; 669extern unsigned int BIOS_revision;
674extern unsigned int mca_pentium_flag;
675 670
676/* Boot loader type from the setup header */ 671/* Boot loader type from the setup header */
677extern int bootloader_type; 672extern int bootloader_type;
diff --git a/include/asm-xtensa/cacheflush.h b/include/asm-xtensa/cacheflush.h
index b773c57e75a5..94c4c53a099e 100644
--- a/include/asm-xtensa/cacheflush.h
+++ b/include/asm-xtensa/cacheflush.h
@@ -70,6 +70,8 @@ extern void __flush_invalidate_dcache_page_alias(unsigned long, unsigned long);
70#endif 70#endif
71#if (ICACHE_WAY_SIZE > PAGE_SIZE) 71#if (ICACHE_WAY_SIZE > PAGE_SIZE)
72extern void __invalidate_icache_page_alias(unsigned long, unsigned long); 72extern void __invalidate_icache_page_alias(unsigned long, unsigned long);
73#else
74# define __invalidate_icache_page_alias(v,p) do { } while(0)
73#endif 75#endif
74 76
75/* 77/*
diff --git a/include/asm-xtensa/coprocessor.h b/include/asm-xtensa/coprocessor.h
index aa2121034558..1cbcf9001a41 100644
--- a/include/asm-xtensa/coprocessor.h
+++ b/include/asm-xtensa/coprocessor.h
@@ -5,81 +5,173 @@
5 * License. See the file "COPYING" in the main directory of this archive 5 * License. See the file "COPYING" in the main directory of this archive
6 * for more details. 6 * for more details.
7 * 7 *
8 * Copyright (C) 2003 - 2005 Tensilica Inc. 8 * Copyright (C) 2003 - 2007 Tensilica Inc.
9 */ 9 */
10 10
11
11#ifndef _XTENSA_COPROCESSOR_H 12#ifndef _XTENSA_COPROCESSOR_H
12#define _XTENSA_COPROCESSOR_H 13#define _XTENSA_COPROCESSOR_H
13 14
14#include <asm/variant/core.h> 15#include <linux/stringify.h>
15#include <asm/variant/tie.h> 16#include <asm/variant/tie.h>
17#include <asm/types.h>
18
19#ifdef __ASSEMBLY__
20# include <asm/variant/tie-asm.h>
21
22.macro xchal_sa_start a b
23 .set .Lxchal_pofs_, 0
24 .set .Lxchal_ofs_, 0
25.endm
26
27.macro xchal_sa_align ptr minofs maxofs ofsalign totalign
28 .set .Lxchal_ofs_, .Lxchal_ofs_ + .Lxchal_pofs_ + \totalign - 1
29 .set .Lxchal_ofs_, (.Lxchal_ofs_ & -\totalign) - .Lxchal_pofs_
30.endm
31
32#define _SELECT ( XTHAL_SAS_TIE | XTHAL_SAS_OPT \
33 | XTHAL_SAS_CC \
34 | XTHAL_SAS_CALR | XTHAL_SAS_CALE )
35
36.macro save_xtregs_opt ptr clb at1 at2 at3 at4 offset
37 .if XTREGS_OPT_SIZE > 0
38 addi \clb, \ptr, \offset
39 xchal_ncp_store \clb \at1 \at2 \at3 \at4 select=_SELECT
40 .endif
41.endm
42
43.macro load_xtregs_opt ptr clb at1 at2 at3 at4 offset
44 .if XTREGS_OPT_SIZE > 0
45 addi \clb, \ptr, \offset
46 xchal_ncp_load \clb \at1 \at2 \at3 \at4 select=_SELECT
47 .endif
48.endm
49#undef _SELECT
50
51#define _SELECT ( XTHAL_SAS_TIE | XTHAL_SAS_OPT \
52 | XTHAL_SAS_NOCC \
53 | XTHAL_SAS_CALR | XTHAL_SAS_CALE | XTHAL_SAS_GLOB )
54
55.macro save_xtregs_user ptr clb at1 at2 at3 at4 offset
56 .if XTREGS_USER_SIZE > 0
57 addi \clb, \ptr, \offset
58 xchal_ncp_store \clb \at1 \at2 \at3 \at4 select=_SELECT
59 .endif
60.endm
61
62.macro load_xtregs_user ptr clb at1 at2 at3 at4 offset
63 .if XTREGS_USER_SIZE > 0
64 addi \clb, \ptr, \offset
65 xchal_ncp_load \clb \at1 \at2 \at3 \at4 select=_SELECT
66 .endif
67.endm
68#undef _SELECT
69
70
71
72#endif /* __ASSEMBLY__ */
16 73
17#if !XCHAL_HAVE_CP
18
19#define XTENSA_CP_EXTRA_OFFSET 0
20#define XTENSA_CP_EXTRA_ALIGN 1 /* must be a power of 2 */
21#define XTENSA_CP_EXTRA_SIZE 0
22
23#else
24
25#define XTOFS(last_start,last_size,align) \
26 ((last_start+last_size+align-1) & -align)
27
28#define XTENSA_CP_EXTRA_OFFSET 0
29#define XTENSA_CP_EXTRA_ALIGN XCHAL_EXTRA_SA_ALIGN
30
31#define XTENSA_CPE_CP0_OFFSET \
32 XTOFS(XTENSA_CP_EXTRA_OFFSET, XCHAL_EXTRA_SA_SIZE, XCHAL_CP0_SA_ALIGN)
33#define XTENSA_CPE_CP1_OFFSET \
34 XTOFS(XTENSA_CPE_CP0_OFFSET, XCHAL_CP0_SA_SIZE, XCHAL_CP1_SA_ALIGN)
35#define XTENSA_CPE_CP2_OFFSET \
36 XTOFS(XTENSA_CPE_CP1_OFFSET, XCHAL_CP1_SA_SIZE, XCHAL_CP2_SA_ALIGN)
37#define XTENSA_CPE_CP3_OFFSET \
38 XTOFS(XTENSA_CPE_CP2_OFFSET, XCHAL_CP2_SA_SIZE, XCHAL_CP3_SA_ALIGN)
39#define XTENSA_CPE_CP4_OFFSET \
40 XTOFS(XTENSA_CPE_CP3_OFFSET, XCHAL_CP3_SA_SIZE, XCHAL_CP4_SA_ALIGN)
41#define XTENSA_CPE_CP5_OFFSET \
42 XTOFS(XTENSA_CPE_CP4_OFFSET, XCHAL_CP4_SA_SIZE, XCHAL_CP5_SA_ALIGN)
43#define XTENSA_CPE_CP6_OFFSET \
44 XTOFS(XTENSA_CPE_CP5_OFFSET, XCHAL_CP5_SA_SIZE, XCHAL_CP6_SA_ALIGN)
45#define XTENSA_CPE_CP7_OFFSET \
46 XTOFS(XTENSA_CPE_CP6_OFFSET, XCHAL_CP6_SA_SIZE, XCHAL_CP7_SA_ALIGN)
47#define XTENSA_CP_EXTRA_SIZE \
48 XTOFS(XTENSA_CPE_CP7_OFFSET, XCHAL_CP7_SA_SIZE, 16)
49
50#if XCHAL_CP_NUM > 0
51# ifndef __ASSEMBLY__
52/* 74/*
53 * Tasks that own contents of (last user) each coprocessor. 75 * XTENSA_HAVE_COPROCESSOR(x) returns 1 if coprocessor x is configured.
54 * Entries are 0 for not-owned or non-existent coprocessors. 76 *
55 * Note: The size of this structure is fixed to 8 bytes in entry.S 77 * XTENSA_HAVE_IO_PORT(x) returns 1 if io-port x is configured.
78 *
56 */ 79 */
57typedef struct {
58 struct task_struct *owner; /* owner */
59 int offset; /* offset in cpextra space. */
60} coprocessor_info_t;
61# else
62# define COPROCESSOR_INFO_OWNER 0
63# define COPROCESSOR_INFO_OFFSET 4
64# define COPROCESSOR_INFO_SIZE 8
65# endif
66#endif
67#endif /* XCHAL_HAVE_CP */
68 80
81#define XTENSA_HAVE_COPROCESSOR(x) \
82 ((XCHAL_CP_MASK ^ XCHAL_CP_PORT_MASK) & (1 << (x)))
83#define XTENSA_HAVE_COPROCESSORS \
84 (XCHAL_CP_MASK ^ XCHAL_CP_PORT_MASK)
85#define XTENSA_HAVE_IO_PORT(x) \
86 (XCHAL_CP_PORT_MASK & (1 << (x)))
87#define XTENSA_HAVE_IO_PORTS \
88 XCHAL_CP_PORT_MASK
69 89
70#ifndef __ASSEMBLY__ 90#ifndef __ASSEMBLY__
71# if XCHAL_CP_NUM > 0
72struct task_struct;
73extern void release_coprocessors (struct task_struct*);
74extern void save_coprocessor_registers(void*, int);
75# else
76# define release_coprocessors(task)
77# endif
78 91
79typedef unsigned char cp_state_t[XTENSA_CP_EXTRA_SIZE]
80 __attribute__ ((aligned (XTENSA_CP_EXTRA_ALIGN)));
81 92
82#endif /* !__ASSEMBLY__ */ 93#if XCHAL_HAVE_CP
94
95#define RSR_CPENABLE(x) do { \
96 __asm__ __volatile__("rsr %0," __stringify(CPENABLE) : "=a" (x)); \
97 } while(0);
98#define WSR_CPENABLE(x) do { \
99 __asm__ __volatile__("wsr %0," __stringify(CPENABLE) "; rsync" \
100 :: "a" (x)); \
101 } while(0);
83 102
103#endif /* XCHAL_HAVE_CP */
84 104
105
106/*
107 * Additional registers.
108 * We define three types of additional registers:
109 * ext: extra registers that are used by the compiler
110 * cpn: optional registers that can be used by a user application
111 * cpX: coprocessor registers that can only be used if the corresponding
112 * CPENABLE bit is set.
113 */
114
115#define XCHAL_SA_REG(list,cc,abi,type,y,name,z,align,size,...) \
116 __REG ## list (cc, abi, type, name, size, align)
117
118#define __REG0(cc,abi,t,name,s,a) __REG0_ ## cc (abi,name)
119#define __REG1(cc,abi,t,name,s,a) __REG1_ ## cc (name)
120#define __REG2(cc,abi,type,...) __REG2_ ## type (__VA_ARGS__)
121
122#define __REG0_0(abi,name)
123#define __REG0_1(abi,name) __REG0_1 ## abi (name)
124#define __REG0_10(name) __u32 name;
125#define __REG0_11(name) __u32 name;
126#define __REG0_12(name)
127
128#define __REG1_0(name) __u32 name;
129#define __REG1_1(name)
130
131#define __REG2_0(n,s,a) __u32 name;
132#define __REG2_1(n,s,a) unsigned char n[s] __attribute__ ((aligned(a)));
133#define __REG2_2(n,s,a) unsigned char n[s] __attribute__ ((aligned(a)));
134
135typedef struct { XCHAL_NCP_SA_LIST(0) } xtregs_opt_t
136 __attribute__ ((aligned (XCHAL_NCP_SA_ALIGN)));
137typedef struct { XCHAL_NCP_SA_LIST(1) } xtregs_user_t
138 __attribute__ ((aligned (XCHAL_NCP_SA_ALIGN)));
139
140#if XTENSA_HAVE_COPROCESSORS
141
142typedef struct { XCHAL_CP0_SA_LIST(2) } xtregs_cp0_t
143 __attribute__ ((aligned (XCHAL_CP0_SA_ALIGN)));
144typedef struct { XCHAL_CP1_SA_LIST(2) } xtregs_cp1_t
145 __attribute__ ((aligned (XCHAL_CP1_SA_ALIGN)));
146typedef struct { XCHAL_CP2_SA_LIST(2) } xtregs_cp2_t
147 __attribute__ ((aligned (XCHAL_CP2_SA_ALIGN)));
148typedef struct { XCHAL_CP3_SA_LIST(2) } xtregs_cp3_t
149 __attribute__ ((aligned (XCHAL_CP3_SA_ALIGN)));
150typedef struct { XCHAL_CP4_SA_LIST(2) } xtregs_cp4_t
151 __attribute__ ((aligned (XCHAL_CP4_SA_ALIGN)));
152typedef struct { XCHAL_CP5_SA_LIST(2) } xtregs_cp5_t
153 __attribute__ ((aligned (XCHAL_CP5_SA_ALIGN)));
154typedef struct { XCHAL_CP6_SA_LIST(2) } xtregs_cp6_t
155 __attribute__ ((aligned (XCHAL_CP6_SA_ALIGN)));
156typedef struct { XCHAL_CP7_SA_LIST(2) } xtregs_cp7_t
157 __attribute__ ((aligned (XCHAL_CP7_SA_ALIGN)));
158
159extern struct thread_info* coprocessor_owner[XCHAL_CP_MAX];
160extern void coprocessor_save(void*, int);
161extern void coprocessor_load(void*, int);
162extern void coprocessor_flush(struct thread_info*, int);
163extern void coprocessor_restore(struct thread_info*, int);
164
165extern void coprocessor_release_all(struct thread_info*);
166extern void coprocessor_flush_all(struct thread_info*);
167
168static inline void coprocessor_clear_cpenable(void)
169{
170 unsigned long i = 0;
171 WSR_CPENABLE(i);
172}
173
174#endif /* XTENSA_HAVE_COPROCESSORS */
175
176#endif /* !__ASSEMBLY__ */
85#endif /* _XTENSA_COPROCESSOR_H */ 177#endif /* _XTENSA_COPROCESSOR_H */
diff --git a/include/asm-xtensa/elf.h b/include/asm-xtensa/elf.h
index 467384542502..ca6e5101a2cb 100644
--- a/include/asm-xtensa/elf.h
+++ b/include/asm-xtensa/elf.h
@@ -72,115 +72,32 @@
72 72
73/* ELF register definitions. This is needed for core dump support. */ 73/* ELF register definitions. This is needed for core dump support. */
74 74
75/*
76 * elf_gregset_t contains the application-level state in the following order:
77 * Processor info: config_version, cpuxy
78 * Processor state: pc, ps, exccause, excvaddr, wb, ws,
79 * lbeg, lend, lcount, sar
80 * GP regs: ar0 - arXX
81 */
82
83typedef unsigned long elf_greg_t; 75typedef unsigned long elf_greg_t;
84 76
85typedef struct { 77typedef struct {
86 elf_greg_t xchal_config_id0;
87 elf_greg_t xchal_config_id1;
88 elf_greg_t cpux;
89 elf_greg_t cpuy;
90 elf_greg_t pc; 78 elf_greg_t pc;
91 elf_greg_t ps; 79 elf_greg_t ps;
92 elf_greg_t exccause;
93 elf_greg_t excvaddr;
94 elf_greg_t windowbase;
95 elf_greg_t windowstart;
96 elf_greg_t lbeg; 80 elf_greg_t lbeg;
97 elf_greg_t lend; 81 elf_greg_t lend;
98 elf_greg_t lcount; 82 elf_greg_t lcount;
99 elf_greg_t sar; 83 elf_greg_t sar;
100 elf_greg_t syscall; 84 elf_greg_t windowstart;
101 elf_greg_t ar[64]; 85 elf_greg_t windowbase;
86 elf_greg_t reserved[8+48];
87 elf_greg_t a[64];
102} xtensa_gregset_t; 88} xtensa_gregset_t;
103 89
104#define ELF_NGREG (sizeof(xtensa_gregset_t) / sizeof(elf_greg_t)) 90#define ELF_NGREG (sizeof(xtensa_gregset_t) / sizeof(elf_greg_t))
105 91
106typedef elf_greg_t elf_gregset_t[ELF_NGREG]; 92typedef elf_greg_t elf_gregset_t[ELF_NGREG];
107 93
108/* 94#define ELF_NFPREG 18
109 * Compute the size of the coprocessor and extra state layout (register info)
110 * table (in bytes).
111 * This is actually the maximum size of the table, as opposed to the size,
112 * which is available from the _xtensa_reginfo_table_size global variable.
113 *
114 * (See also arch/xtensa/kernel/coprocessor.S)
115 *
116 */
117
118#ifndef XCHAL_EXTRA_SA_CONTENTS_LIBDB_NUM
119# define XTENSA_CPE_LTABLE_SIZE 0
120#else
121# define XTENSA_CPE_SEGMENT(num) (num ? (1+num) : 0)
122# define XTENSA_CPE_LTABLE_ENTRIES \
123 ( XTENSA_CPE_SEGMENT(XCHAL_EXTRA_SA_CONTENTS_LIBDB_NUM) \
124 + XTENSA_CPE_SEGMENT(XCHAL_CP0_SA_CONTENTS_LIBDB_NUM) \
125 + XTENSA_CPE_SEGMENT(XCHAL_CP1_SA_CONTENTS_LIBDB_NUM) \
126 + XTENSA_CPE_SEGMENT(XCHAL_CP2_SA_CONTENTS_LIBDB_NUM) \
127 + XTENSA_CPE_SEGMENT(XCHAL_CP3_SA_CONTENTS_LIBDB_NUM) \
128 + XTENSA_CPE_SEGMENT(XCHAL_CP4_SA_CONTENTS_LIBDB_NUM) \
129 + XTENSA_CPE_SEGMENT(XCHAL_CP5_SA_CONTENTS_LIBDB_NUM) \
130 + XTENSA_CPE_SEGMENT(XCHAL_CP6_SA_CONTENTS_LIBDB_NUM) \
131 + XTENSA_CPE_SEGMENT(XCHAL_CP7_SA_CONTENTS_LIBDB_NUM) \
132 + 1 /* final entry */ \
133 )
134# define XTENSA_CPE_LTABLE_SIZE (XTENSA_CPE_LTABLE_ENTRIES * 8)
135#endif
136
137
138/*
139 * Instantiations of the elf_fpregset_t type contain, in most
140 * architectures, the floating point (FPU) register set.
141 * For Xtensa, this type is extended to contain all custom state,
142 * ie. coprocessor and "extra" (non-coprocessor) state (including,
143 * for example, TIE-defined states and register files; as well
144 * as other optional processor state).
145 * This includes FPU state if a floating-point coprocessor happens
146 * to have been configured within the Xtensa processor.
147 *
148 * TOTAL_FPREGS_SIZE is the required size (without rounding)
149 * of elf_fpregset_t. It provides space for the following:
150 *
151 * a) 32-bit mask of active coprocessors for this task (similar
152 * to CPENABLE in single-threaded Xtensa processor systems)
153 *
154 * b) table describing the layout of custom states (ie. of
155 * individual registers, etc) within the save areas
156 *
157 * c) save areas for each coprocessor and for non-coprocessor
158 * ("extra") state
159 *
160 * Note that save areas may require up to 16-byte alignment when
161 * accessed by save/restore sequences. We do not need to ensure
162 * such alignment in an elf_fpregset_t structure because custom
163 * state is not directly loaded/stored into it; rather, save area
164 * contents are copied to elf_fpregset_t from the active save areas
165 * (see 'struct task_struct' definition in processor.h for that)
166 * using memcpy(). But we do allow space for such alignment,
167 * to allow optimizations of layout and copying.
168 */
169#if 0
170#define TOTAL_FPREGS_SIZE \
171 (4 + XTENSA_CPE_LTABLE_SIZE + XTENSA_CP_EXTRA_SIZE)
172#define ELF_NFPREG \
173 ((TOTAL_FPREGS_SIZE + sizeof(elf_fpreg_t) - 1) / sizeof(elf_fpreg_t))
174#else
175#define TOTAL_FPREGS_SIZE 0
176#define ELF_NFPREG 0
177#endif
178 95
179typedef unsigned int elf_fpreg_t; 96typedef unsigned int elf_fpreg_t;
180typedef elf_fpreg_t elf_fpregset_t[ELF_NFPREG]; 97typedef elf_fpreg_t elf_fpregset_t[ELF_NFPREG];
181 98
182#define ELF_CORE_COPY_REGS(_eregs, _pregs) \ 99#define ELF_CORE_COPY_REGS(_eregs, _pregs) \
183 xtensa_elf_core_copy_regs (&_eregs, _pregs); 100 xtensa_elf_core_copy_regs ((xtensa_gregset_t*)&(_eregs), _pregs);
184 101
185extern void xtensa_elf_core_copy_regs (xtensa_gregset_t *, struct pt_regs *); 102extern void xtensa_elf_core_copy_regs (xtensa_gregset_t *, struct pt_regs *);
186 103
@@ -257,6 +174,21 @@ extern void xtensa_elf_core_copy_regs (xtensa_gregset_t *, struct pt_regs *);
257 _r->areg[12]=0; _r->areg[13]=0; _r->areg[14]=0; _r->areg[15]=0; \ 174 _r->areg[12]=0; _r->areg[13]=0; _r->areg[14]=0; _r->areg[15]=0; \
258 } while (0) 175 } while (0)
259 176
177typedef struct {
178 xtregs_opt_t opt;
179 xtregs_user_t user;
180#if XTENSA_HAVE_COPROCESSORS
181 xtregs_cp0_t cp0;
182 xtregs_cp1_t cp1;
183 xtregs_cp2_t cp2;
184 xtregs_cp3_t cp3;
185 xtregs_cp4_t cp4;
186 xtregs_cp5_t cp5;
187 xtregs_cp6_t cp6;
188 xtregs_cp7_t cp7;
189#endif
190} elf_xtregs_t;
191
260#define SET_PERSONALITY(ex, ibcs2) set_personality(PER_LINUX_32BIT) 192#define SET_PERSONALITY(ex, ibcs2) set_personality(PER_LINUX_32BIT)
261 193
262struct task_struct; 194struct task_struct;
diff --git a/include/asm-xtensa/module.h b/include/asm-xtensa/module.h
index ffb25bfdf6a1..d9b34bee4d42 100644
--- a/include/asm-xtensa/module.h
+++ b/include/asm-xtensa/module.h
@@ -15,9 +15,11 @@
15 15
16struct mod_arch_specific 16struct mod_arch_specific
17{ 17{
18 /* Module support is not completely implemented. */ 18 /* No special elements, yet. */
19}; 19};
20 20
21#define MODULE_ARCH_VERMAGIC "xtensa-" __stringify(XCHAL_CORE_ID) " "
22
21#define Elf_Shdr Elf32_Shdr 23#define Elf_Shdr Elf32_Shdr
22#define Elf_Sym Elf32_Sym 24#define Elf_Sym Elf32_Sym
23#define Elf_Ehdr Elf32_Ehdr 25#define Elf_Ehdr Elf32_Ehdr
diff --git a/include/asm-xtensa/pgalloc.h b/include/asm-xtensa/pgalloc.h
index 8d1544eb461e..4f4a7987eded 100644
--- a/include/asm-xtensa/pgalloc.h
+++ b/include/asm-xtensa/pgalloc.h
@@ -47,7 +47,7 @@ static inline pte_t *pte_alloc_one_kernel(struct mm_struct *mm,
47 return kmem_cache_alloc(pgtable_cache, GFP_KERNEL|__GFP_REPEAT); 47 return kmem_cache_alloc(pgtable_cache, GFP_KERNEL|__GFP_REPEAT);
48} 48}
49 49
50static inline pte_token_t pte_alloc_one(struct mm_struct *mm, 50static inline pgtable_t pte_alloc_one(struct mm_struct *mm,
51 unsigned long addr) 51 unsigned long addr)
52{ 52{
53 struct page *page; 53 struct page *page;
diff --git a/include/asm-xtensa/pgtable.h b/include/asm-xtensa/pgtable.h
index c0fcc1c9660c..c8b024a48b4d 100644
--- a/include/asm-xtensa/pgtable.h
+++ b/include/asm-xtensa/pgtable.h
@@ -66,11 +66,9 @@
66 */ 66 */
67 67
68#define VMALLOC_START 0xC0000000 68#define VMALLOC_START 0xC0000000
69#define VMALLOC_END 0xC6FEFFFF 69#define VMALLOC_END 0xC7FEFFFF
70#define TLBTEMP_BASE_1 0xC6FF0000 70#define TLBTEMP_BASE_1 0xC7FF0000
71#define TLBTEMP_BASE_2 0xC6FF8000 71#define TLBTEMP_BASE_2 0xC7FF8000
72#define MODULE_START 0xC7000000
73#define MODULE_END 0xC7FFFFFF
74 72
75/* 73/*
76 * Xtensa Linux config PTE layout (when present): 74 * Xtensa Linux config PTE layout (when present):
diff --git a/include/asm-xtensa/processor.h b/include/asm-xtensa/processor.h
index 96408f436624..4918a4e96d42 100644
--- a/include/asm-xtensa/processor.h
+++ b/include/asm-xtensa/processor.h
@@ -103,10 +103,6 @@ struct thread_struct {
103 unsigned long dbreaka[XCHAL_NUM_DBREAK]; 103 unsigned long dbreaka[XCHAL_NUM_DBREAK];
104 unsigned long dbreakc[XCHAL_NUM_DBREAK]; 104 unsigned long dbreakc[XCHAL_NUM_DBREAK];
105 105
106 /* Allocate storage for extra state and coprocessor state. */
107 unsigned char cp_save[XTENSA_CP_EXTRA_SIZE]
108 __attribute__ ((aligned(XTENSA_CP_EXTRA_ALIGN)));
109
110 /* Make structure 16 bytes aligned. */ 106 /* Make structure 16 bytes aligned. */
111 int align[0] __attribute__ ((aligned(16))); 107 int align[0] __attribute__ ((aligned(16)));
112}; 108};
@@ -162,21 +158,16 @@ struct thread_struct {
162struct task_struct; 158struct task_struct;
163struct mm_struct; 159struct mm_struct;
164 160
165// FIXME: do we need release_thread for CP??
166/* Free all resources held by a thread. */ 161/* Free all resources held by a thread. */
167#define release_thread(thread) do { } while(0) 162#define release_thread(thread) do { } while(0)
168 163
169// FIXME: do we need prepare_to_copy (lazy status) for CP??
170/* Prepare to copy thread state - unlazy all lazy status */ 164/* Prepare to copy thread state - unlazy all lazy status */
171#define prepare_to_copy(tsk) do { } while (0) 165extern void prepare_to_copy(struct task_struct*);
172 166
173/* 167/* Create a kernel thread without removing it from tasklists */
174 * create a kernel thread without removing it from tasklists
175 */
176extern int kernel_thread(int (*fn)(void *), void * arg, unsigned long flags); 168extern int kernel_thread(int (*fn)(void *), void * arg, unsigned long flags);
177 169
178/* Copy and release all segment info associated with a VM */ 170/* Copy and release all segment info associated with a VM */
179
180#define copy_segments(p, mm) do { } while(0) 171#define copy_segments(p, mm) do { } while(0)
181#define release_segments(mm) do { } while(0) 172#define release_segments(mm) do { } while(0)
182#define forget_segments() do { } while (0) 173#define forget_segments() do { } while (0)
diff --git a/include/asm-xtensa/ptrace.h b/include/asm-xtensa/ptrace.h
index 77ff02d307bb..422c73e26937 100644
--- a/include/asm-xtensa/ptrace.h
+++ b/include/asm-xtensa/ptrace.h
@@ -53,33 +53,30 @@
53 53
54/* Registers used by strace */ 54/* Registers used by strace */
55 55
56#define REG_A_BASE 0xfc000000 56#define REG_A_BASE 0x0000
57#define REG_AR_BASE 0x04000000 57#define REG_AR_BASE 0x0100
58#define REG_PC 0x14000000 58#define REG_PC 0x0020
59#define REG_PS 0x080000e6 59#define REG_PS 0x02e6
60#define REG_WB 0x08000048 60#define REG_WB 0x0248
61#define REG_WS 0x08000049 61#define REG_WS 0x0249
62#define REG_LBEG 0x08000000 62#define REG_LBEG 0x0200
63#define REG_LEND 0x08000001 63#define REG_LEND 0x0201
64#define REG_LCOUNT 0x08000002 64#define REG_LCOUNT 0x0202
65#define REG_SAR 0x08000003 65#define REG_SAR 0x0203
66#define REG_DEPC 0x080000c0 66
67#define REG_EXCCAUSE 0x080000e8 67#define SYSCALL_NR 0x00ff
68#define REG_EXCVADDR 0x080000ee
69#define SYSCALL_NR 0x1
70
71#define AR_REGNO_TO_A_REGNO(ar, wb) (ar - wb*4) & ~(XCHAL_NUM_AREGS - 1)
72 68
73/* Other PTRACE_ values defined in <linux/ptrace.h> using values 0-9,16,17,24 */ 69/* Other PTRACE_ values defined in <linux/ptrace.h> using values 0-9,16,17,24 */
74 70
75#define PTRACE_GETREGS 12 71#define PTRACE_GETREGS 12
76#define PTRACE_SETREGS 13 72#define PTRACE_SETREGS 13
77#define PTRACE_GETFPREGS 14 73#define PTRACE_GETXTREGS 18
78#define PTRACE_SETFPREGS 15 74#define PTRACE_SETXTREGS 19
79#define PTRACE_GETFPREGSIZE 18
80 75
81#ifndef __ASSEMBLY__ 76#ifndef __ASSEMBLY__
82 77
78#ifdef __KERNEL__
79
83/* 80/*
84 * This struct defines the way the registers are stored on the 81 * This struct defines the way the registers are stored on the
85 * kernel stack during a system call or other kernel entry. 82 * kernel stack during a system call or other kernel entry.
@@ -102,6 +99,9 @@ struct pt_regs {
102 unsigned long icountlevel; /* 60 */ 99 unsigned long icountlevel; /* 60 */
103 int reserved[1]; /* 64 */ 100 int reserved[1]; /* 64 */
104 101
102 /* Additional configurable registers that are used by the compiler. */
103 xtregs_opt_t xtregs_opt;
104
105 /* Make sure the areg field is 16 bytes aligned. */ 105 /* Make sure the areg field is 16 bytes aligned. */
106 int align[0] __attribute__ ((aligned(16))); 106 int align[0] __attribute__ ((aligned(16)));
107 107
@@ -111,8 +111,6 @@ struct pt_regs {
111 unsigned long areg[16]; /* 128 (64) */ 111 unsigned long areg[16]; /* 128 (64) */
112}; 112};
113 113
114#ifdef __KERNEL__
115
116#include <asm/variant/core.h> 114#include <asm/variant/core.h>
117 115
118# define task_pt_regs(tsk) ((struct pt_regs*) \ 116# define task_pt_regs(tsk) ((struct pt_regs*) \
diff --git a/include/asm-xtensa/regs.h b/include/asm-xtensa/regs.h
index c913d259faaa..d4baed246928 100644
--- a/include/asm-xtensa/regs.h
+++ b/include/asm-xtensa/regs.h
@@ -100,7 +100,14 @@
100#define EXCCAUSE_DTLB_SIZE_RESTRICTION 27 100#define EXCCAUSE_DTLB_SIZE_RESTRICTION 27
101#define EXCCAUSE_LOAD_CACHE_ATTRIBUTE 28 101#define EXCCAUSE_LOAD_CACHE_ATTRIBUTE 28
102#define EXCCAUSE_STORE_CACHE_ATTRIBUTE 29 102#define EXCCAUSE_STORE_CACHE_ATTRIBUTE 29
103#define EXCCAUSE_FLOATING_POINT 40 103#define EXCCAUSE_COPROCESSOR0_DISABLED 32
104#define EXCCAUSE_COPROCESSOR1_DISABLED 33
105#define EXCCAUSE_COPROCESSOR2_DISABLED 34
106#define EXCCAUSE_COPROCESSOR3_DISABLED 35
107#define EXCCAUSE_COPROCESSOR4_DISABLED 36
108#define EXCCAUSE_COPROCESSOR5_DISABLED 37
109#define EXCCAUSE_COPROCESSOR6_DISABLED 38
110#define EXCCAUSE_COPROCESSOR7_DISABLED 39
104 111
105/* PS register fields. */ 112/* PS register fields. */
106 113
diff --git a/include/asm-xtensa/sigcontext.h b/include/asm-xtensa/sigcontext.h
index e3381cee5059..03383af8c3b7 100644
--- a/include/asm-xtensa/sigcontext.h
+++ b/include/asm-xtensa/sigcontext.h
@@ -13,9 +13,6 @@
13 13
14 14
15struct sigcontext { 15struct sigcontext {
16 unsigned long oldmask;
17
18 /* CPU registers */
19 unsigned long sc_pc; 16 unsigned long sc_pc;
20 unsigned long sc_ps; 17 unsigned long sc_ps;
21 unsigned long sc_lbeg; 18 unsigned long sc_lbeg;
@@ -25,6 +22,7 @@ struct sigcontext {
25 unsigned long sc_acclo; 22 unsigned long sc_acclo;
26 unsigned long sc_acchi; 23 unsigned long sc_acchi;
27 unsigned long sc_a[16]; 24 unsigned long sc_a[16];
25 void *sc_xtregs;
28}; 26};
29 27
30#endif /* _XTENSA_SIGCONTEXT_H */ 28#endif /* _XTENSA_SIGCONTEXT_H */
diff --git a/include/asm-xtensa/stat.h b/include/asm-xtensa/stat.h
index 149f4bce092f..c4992038cee0 100644
--- a/include/asm-xtensa/stat.h
+++ b/include/asm-xtensa/stat.h
@@ -5,25 +5,23 @@
5 * License. See the file "COPYING" in the main directory of this archive 5 * License. See the file "COPYING" in the main directory of this archive
6 * for more details. 6 * for more details.
7 * 7 *
8 * Copyright (C) 2001 - 2005 Tensilica Inc. 8 * Copyright (C) 2001 - 2007 Tensilica Inc.
9 */ 9 */
10 10
11#ifndef _XTENSA_STAT_H 11#ifndef _XTENSA_STAT_H
12#define _XTENSA_STAT_H 12#define _XTENSA_STAT_H
13 13
14#include <linux/types.h>
15
16#define STAT_HAVE_NSEC 1 14#define STAT_HAVE_NSEC 1
17 15
18struct stat { 16struct stat {
19 unsigned long st_dev; 17 unsigned long st_dev;
20 ino_t st_ino; 18 unsigned long st_ino;
21 mode_t st_mode; 19 unsigned int st_mode;
22 nlink_t st_nlink; 20 unsigned int st_nlink;
23 uid_t st_uid; 21 unsigned int st_uid;
24 gid_t st_gid; 22 unsigned int st_gid;
25 unsigned int st_rdev; 23 unsigned long st_rdev;
26 off_t st_size; 24 long st_size;
27 unsigned long st_blksize; 25 unsigned long st_blksize;
28 unsigned long st_blocks; 26 unsigned long st_blocks;
29 unsigned long st_atime; 27 unsigned long st_atime;
@@ -36,8 +34,6 @@ struct stat {
36 unsigned long __unused5; 34 unsigned long __unused5;
37}; 35};
38 36
39/* This matches struct stat64 in glibc-2.3 */
40
41struct stat64 { 37struct stat64 {
42 unsigned long long st_dev; /* Device */ 38 unsigned long long st_dev; /* Device */
43 unsigned long long st_ino; /* File serial number */ 39 unsigned long long st_ino; /* File serial number */
@@ -47,20 +43,14 @@ struct stat64 {
47 unsigned int st_gid; /* Group ID of the file's group. */ 43 unsigned int st_gid; /* Group ID of the file's group. */
48 unsigned long long st_rdev; /* Device number, if device. */ 44 unsigned long long st_rdev; /* Device number, if device. */
49 long long st_size; /* Size of file, in bytes. */ 45 long long st_size; /* Size of file, in bytes. */
50 long st_blksize; /* Optimal block size for I/O. */ 46 unsigned long st_blksize; /* Optimal block size for I/O. */
51 unsigned long __unused2; 47 unsigned long __unused2;
52#ifdef __XTENSA_EB__ 48 unsigned long long st_blocks; /* Number 512-byte blocks allocated. */
53 unsigned long __unused3; 49 unsigned long st_atime; /* Time of last access. */
54 long st_blocks; /* Number 512-byte blocks allocated. */
55#else
56 long st_blocks; /* Number 512-byte blocks allocated. */
57 unsigned long __unused3;
58#endif
59 long st_atime; /* Time of last access. */
60 unsigned long st_atime_nsec; 50 unsigned long st_atime_nsec;
61 long st_mtime; /* Time of last modification. */ 51 unsigned long st_mtime; /* Time of last modification. */
62 unsigned long st_mtime_nsec; 52 unsigned long st_mtime_nsec;
63 long st_ctime; /* Time of last status change. */ 53 unsigned long st_ctime; /* Time of last status change. */
64 unsigned long st_ctime_nsec; 54 unsigned long st_ctime_nsec;
65 unsigned long __unused4; 55 unsigned long __unused4;
66 unsigned long __unused5; 56 unsigned long __unused5;
diff --git a/include/asm-xtensa/system.h b/include/asm-xtensa/system.h
index e0cb9116d8ab..62b1e8f3c13c 100644
--- a/include/asm-xtensa/system.h
+++ b/include/asm-xtensa/system.h
@@ -46,42 +46,6 @@ static inline int irqs_disabled(void)
46 return flags & 0xf; 46 return flags & 0xf;
47} 47}
48 48
49#define RSR_CPENABLE(x) do { \
50 __asm__ __volatile__("rsr %0," __stringify(CPENABLE) : "=a" (x)); \
51 } while(0);
52#define WSR_CPENABLE(x) do { \
53 __asm__ __volatile__("wsr %0," __stringify(CPENABLE)";rsync" \
54 :: "a" (x));} while(0);
55
56#define clear_cpenable() __clear_cpenable()
57
58static inline void __clear_cpenable(void)
59{
60#if XCHAL_HAVE_CP
61 unsigned long i = 0;
62 WSR_CPENABLE(i);
63#endif
64}
65
66static inline void enable_coprocessor(int i)
67{
68#if XCHAL_HAVE_CP
69 int cp;
70 RSR_CPENABLE(cp);
71 cp |= 1 << i;
72 WSR_CPENABLE(cp);
73#endif
74}
75
76static inline void disable_coprocessor(int i)
77{
78#if XCHAL_HAVE_CP
79 int cp;
80 RSR_CPENABLE(cp);
81 cp &= ~(1 << i);
82 WSR_CPENABLE(cp);
83#endif
84}
85 49
86#define smp_read_barrier_depends() do { } while(0) 50#define smp_read_barrier_depends() do { } while(0)
87#define read_barrier_depends() do { } while(0) 51#define read_barrier_depends() do { } while(0)
@@ -111,7 +75,6 @@ extern void *_switch_to(void *last, void *next);
111 75
112#define switch_to(prev,next,last) \ 76#define switch_to(prev,next,last) \
113do { \ 77do { \
114 clear_cpenable(); \
115 (last) = _switch_to(prev, next); \ 78 (last) = _switch_to(prev, next); \
116} while(0) 79} while(0)
117 80
@@ -244,7 +207,7 @@ static inline void spill_registers(void)
244 "wsr a13," __stringify(SAR) "\n\t" 207 "wsr a13," __stringify(SAR) "\n\t"
245 "wsr a14," __stringify(PS) "\n\t" 208 "wsr a14," __stringify(PS) "\n\t"
246 :: "a" (&a0), "a" (&ps) 209 :: "a" (&a0), "a" (&ps)
247 : "a2", "a3", "a12", "a13", "a14", "a15", "memory"); 210 : "a2", "a3", "a4", "a7", "a11", "a12", "a13", "a14", "a15", "memory");
248} 211}
249 212
250#define arch_align_stack(x) (x) 213#define arch_align_stack(x) (x)
diff --git a/include/asm-xtensa/thread_info.h b/include/asm-xtensa/thread_info.h
index 52c958285bcb..a2c640682ed9 100644
--- a/include/asm-xtensa/thread_info.h
+++ b/include/asm-xtensa/thread_info.h
@@ -27,6 +27,21 @@
27 27
28#ifndef __ASSEMBLY__ 28#ifndef __ASSEMBLY__
29 29
30#if XTENSA_HAVE_COPROCESSORS
31
32typedef struct xtregs_coprocessor {
33 xtregs_cp0_t cp0;
34 xtregs_cp1_t cp1;
35 xtregs_cp2_t cp2;
36 xtregs_cp3_t cp3;
37 xtregs_cp4_t cp4;
38 xtregs_cp5_t cp5;
39 xtregs_cp6_t cp6;
40 xtregs_cp7_t cp7;
41} xtregs_coprocessor_t;
42
43#endif
44
30struct thread_info { 45struct thread_info {
31 struct task_struct *task; /* main task structure */ 46 struct task_struct *task; /* main task structure */
32 struct exec_domain *exec_domain; /* execution domain */ 47 struct exec_domain *exec_domain; /* execution domain */
@@ -38,7 +53,13 @@ struct thread_info {
38 mm_segment_t addr_limit; /* thread address space */ 53 mm_segment_t addr_limit; /* thread address space */
39 struct restart_block restart_block; 54 struct restart_block restart_block;
40 55
56 unsigned long cpenable;
41 57
58 /* Allocate storage for extra user states and coprocessor states. */
59#if XTENSA_HAVE_COPROCESSORS
60 xtregs_coprocessor_t xtregs_cp;
61#endif
62 xtregs_user_t xtregs_user;
42}; 63};
43 64
44#else /* !__ASSEMBLY__ */ 65#else /* !__ASSEMBLY__ */
diff --git a/include/asm-xtensa/timex.h b/include/asm-xtensa/timex.h
index a5fca59fba9e..b83a8181d448 100644
--- a/include/asm-xtensa/timex.h
+++ b/include/asm-xtensa/timex.h
@@ -63,10 +63,10 @@ extern cycles_t cacheflush_time;
63 * Register access. 63 * Register access.
64 */ 64 */
65 65
66#define WSR_CCOUNT(r) __asm__("wsr %0,"__stringify(CCOUNT) :: "a" (r)) 66#define WSR_CCOUNT(r) asm volatile ("wsr %0,"__stringify(CCOUNT) :: "a" (r))
67#define RSR_CCOUNT(r) __asm__("rsr %0,"__stringify(CCOUNT) : "=a" (r)) 67#define RSR_CCOUNT(r) asm volatile ("rsr %0,"__stringify(CCOUNT) : "=a" (r))
68#define WSR_CCOMPARE(x,r) __asm__("wsr %0,"__stringify(CCOMPARE)"+"__stringify(x) :: "a"(r)) 68#define WSR_CCOMPARE(x,r) asm volatile ("wsr %0,"__stringify(CCOMPARE)"+"__stringify(x) :: "a"(r))
69#define RSR_CCOMPARE(x,r) __asm__("rsr %0,"__stringify(CCOMPARE)"+"__stringify(x) : "=a"(r)) 69#define RSR_CCOMPARE(x,r) asm volatile ("rsr %0,"__stringify(CCOMPARE)"+"__stringify(x) : "=a"(r))
70 70
71static inline unsigned long get_ccount (void) 71static inline unsigned long get_ccount (void)
72{ 72{
diff --git a/include/asm-xtensa/uaccess.h b/include/asm-xtensa/uaccess.h
index d6352da05b10..b8528426ab1f 100644
--- a/include/asm-xtensa/uaccess.h
+++ b/include/asm-xtensa/uaccess.h
@@ -26,6 +26,7 @@
26#include <asm/current.h> 26#include <asm/current.h>
27#include <asm/asm-offsets.h> 27#include <asm/asm-offsets.h>
28#include <asm/processor.h> 28#include <asm/processor.h>
29#include <asm/types.h>
29 30
30/* 31/*
31 * These assembly macros mirror the C macros that follow below. They 32 * These assembly macros mirror the C macros that follow below. They
@@ -118,7 +119,7 @@
118 * <at> destroyed (actually, (TASK_SIZE + 1 - size)) 119 * <at> destroyed (actually, (TASK_SIZE + 1 - size))
119 */ 120 */
120 .macro user_ok aa, as, at, error 121 .macro user_ok aa, as, at, error
121 movi \at, (TASK_SIZE+1) 122 movi \at, __XTENSA_UL_CONST(TASK_SIZE)
122 bgeu \as, \at, \error 123 bgeu \as, \at, \error
123 sub \at, \at, \as 124 sub \at, \at, \as
124 bgeu \aa, \at, \error 125 bgeu \aa, \at, \error
@@ -226,20 +227,21 @@ extern long __put_user_bad(void);
226 __pu_err; \ 227 __pu_err; \
227}) 228})
228 229
229#define __put_user_size(x,ptr,size,retval) \ 230#define __put_user_size(x,ptr,size,retval) \
230do { \ 231do { \
231 retval = 0; \ 232 int __cb; \
232 switch (size) { \ 233 retval = 0; \
233 case 1: __put_user_asm(x,ptr,retval,1,"s8i"); break; \ 234 switch (size) { \
234 case 2: __put_user_asm(x,ptr,retval,2,"s16i"); break; \ 235 case 1: __put_user_asm(x,ptr,retval,1,"s8i",__cb); break; \
235 case 4: __put_user_asm(x,ptr,retval,4,"s32i"); break; \ 236 case 2: __put_user_asm(x,ptr,retval,2,"s16i",__cb); break; \
236 case 8: { \ 237 case 4: __put_user_asm(x,ptr,retval,4,"s32i",__cb); break; \
237 __typeof__(*ptr) __v64 = x; \ 238 case 8: { \
238 retval = __copy_to_user(ptr,&__v64,8); \ 239 __typeof__(*ptr) __v64 = x; \
239 break; \ 240 retval = __copy_to_user(ptr,&__v64,8); \
240 } \ 241 break; \
241 default: __put_user_bad(); \ 242 } \
242 } \ 243 default: __put_user_bad(); \
244 } \
243} while (0) 245} while (0)
244 246
245 247
@@ -267,14 +269,14 @@ do { \
267#define __check_align_1 "" 269#define __check_align_1 ""
268 270
269#define __check_align_2 \ 271#define __check_align_2 \
270 " _bbci.l %2, 0, 1f \n" \ 272 " _bbci.l %3, 0, 1f \n" \
271 " movi %0, %3 \n" \ 273 " movi %0, %4 \n" \
272 " _j 2f \n" 274 " _j 2f \n"
273 275
274#define __check_align_4 \ 276#define __check_align_4 \
275 " _bbsi.l %2, 0, 0f \n" \ 277 " _bbsi.l %3, 0, 0f \n" \
276 " _bbci.l %2, 1, 1f \n" \ 278 " _bbci.l %3, 1, 1f \n" \
277 "0: movi %0, %3 \n" \ 279 "0: movi %0, %4 \n" \
278 " _j 2f \n" 280 " _j 2f \n"
279 281
280 282
@@ -286,24 +288,24 @@ do { \
286 * WARNING: If you modify this macro at all, verify that the 288 * WARNING: If you modify this macro at all, verify that the
287 * __check_align_* macros still work. 289 * __check_align_* macros still work.
288 */ 290 */
289#define __put_user_asm(x, addr, err, align, insn) \ 291#define __put_user_asm(x, addr, err, align, insn, cb) \
290 __asm__ __volatile__( \ 292 __asm__ __volatile__( \
291 __check_align_##align \ 293 __check_align_##align \
292 "1: "insn" %1, %2, 0 \n" \ 294 "1: "insn" %2, %3, 0 \n" \
293 "2: \n" \ 295 "2: \n" \
294 " .section .fixup,\"ax\" \n" \ 296 " .section .fixup,\"ax\" \n" \
295 " .align 4 \n" \ 297 " .align 4 \n" \
296 "4: \n" \ 298 "4: \n" \
297 " .long 2b \n" \ 299 " .long 2b \n" \
298 "5: \n" \ 300 "5: \n" \
299 " l32r %2, 4b \n" \ 301 " l32r %1, 4b \n" \
300 " movi %0, %3 \n" \ 302 " movi %0, %4 \n" \
301 " jx %2 \n" \ 303 " jx %1 \n" \
302 " .previous \n" \ 304 " .previous \n" \
303 " .section __ex_table,\"a\" \n" \ 305 " .section __ex_table,\"a\" \n" \
304 " .long 1b, 5b \n" \ 306 " .long 1b, 5b \n" \
305 " .previous" \ 307 " .previous" \
306 :"=r" (err) \ 308 :"=r" (err), "=r" (cb) \
307 :"r" ((int)(x)), "r" (addr), "i" (-EFAULT), "0" (err)) 309 :"r" ((int)(x)), "r" (addr), "i" (-EFAULT), "0" (err))
308 310
309#define __get_user_nocheck(x,ptr,size) \ 311#define __get_user_nocheck(x,ptr,size) \
@@ -328,11 +330,12 @@ extern long __get_user_bad(void);
328 330
329#define __get_user_size(x,ptr,size,retval) \ 331#define __get_user_size(x,ptr,size,retval) \
330do { \ 332do { \
333 int __cb; \
331 retval = 0; \ 334 retval = 0; \
332 switch (size) { \ 335 switch (size) { \
333 case 1: __get_user_asm(x,ptr,retval,1,"l8ui"); break; \ 336 case 1: __get_user_asm(x,ptr,retval,1,"l8ui",__cb); break; \
334 case 2: __get_user_asm(x,ptr,retval,2,"l16ui"); break; \ 337 case 2: __get_user_asm(x,ptr,retval,2,"l16ui",__cb); break; \
335 case 4: __get_user_asm(x,ptr,retval,4,"l32i"); break; \ 338 case 4: __get_user_asm(x,ptr,retval,4,"l32i",__cb); break; \
336 case 8: retval = __copy_from_user(&x,ptr,8); break; \ 339 case 8: retval = __copy_from_user(&x,ptr,8); break; \
337 default: (x) = __get_user_bad(); \ 340 default: (x) = __get_user_bad(); \
338 } \ 341 } \
@@ -343,25 +346,25 @@ do { \
343 * WARNING: If you modify this macro at all, verify that the 346 * WARNING: If you modify this macro at all, verify that the
344 * __check_align_* macros still work. 347 * __check_align_* macros still work.
345 */ 348 */
346#define __get_user_asm(x, addr, err, align, insn) \ 349#define __get_user_asm(x, addr, err, align, insn, cb) \
347 __asm__ __volatile__( \ 350 __asm__ __volatile__( \
348 __check_align_##align \ 351 __check_align_##align \
349 "1: "insn" %1, %2, 0 \n" \ 352 "1: "insn" %2, %3, 0 \n" \
350 "2: \n" \ 353 "2: \n" \
351 " .section .fixup,\"ax\" \n" \ 354 " .section .fixup,\"ax\" \n" \
352 " .align 4 \n" \ 355 " .align 4 \n" \
353 "4: \n" \ 356 "4: \n" \
354 " .long 2b \n" \ 357 " .long 2b \n" \
355 "5: \n" \ 358 "5: \n" \
356 " l32r %2, 4b \n" \ 359 " l32r %1, 4b \n" \
357 " movi %1, 0 \n" \ 360 " movi %2, 0 \n" \
358 " movi %0, %3 \n" \ 361 " movi %0, %4 \n" \
359 " jx %2 \n" \ 362 " jx %1 \n" \
360 " .previous \n" \ 363 " .previous \n" \
361 " .section __ex_table,\"a\" \n" \ 364 " .section __ex_table,\"a\" \n" \
362 " .long 1b, 5b \n" \ 365 " .long 1b, 5b \n" \
363 " .previous" \ 366 " .previous" \
364 :"=r" (err), "=r" (x) \ 367 :"=r" (err), "=r" (cb), "=r" (x) \
365 :"r" (addr), "i" (-EFAULT), "0" (err)) 368 :"r" (addr), "i" (-EFAULT), "0" (err))
366 369
367 370
diff --git a/include/asm-xtensa/variant-fsf/tie-asm.h b/include/asm-xtensa/variant-fsf/tie-asm.h
new file mode 100644
index 000000000000..68a73bf4ffc5
--- /dev/null
+++ b/include/asm-xtensa/variant-fsf/tie-asm.h
@@ -0,0 +1,70 @@
1/*
2 * This header file contains assembly-language definitions (assembly
3 * macros, etc.) for this specific Xtensa processor's TIE extensions
4 * and options. It is customized to this Xtensa processor configuration.
5 *
6 * This file is subject to the terms and conditions of the GNU General Public
7 * License. See the file "COPYING" in the main directory of this archive
8 * for more details.
9 *
10 * Copyright (C) 1999-2008 Tensilica Inc.
11 */
12
13#ifndef _XTENSA_CORE_TIE_ASM_H
14#define _XTENSA_CORE_TIE_ASM_H
15
16/* Selection parameter values for save-area save/restore macros: */
17/* Option vs. TIE: */
18#define XTHAL_SAS_TIE 0x0001 /* custom extension or coprocessor */
19#define XTHAL_SAS_OPT 0x0002 /* optional (and not a coprocessor) */
20/* Whether used automatically by compiler: */
21#define XTHAL_SAS_NOCC 0x0004 /* not used by compiler w/o special opts/code */
22#define XTHAL_SAS_CC 0x0008 /* used by compiler without special opts/code */
23/* ABI handling across function calls: */
24#define XTHAL_SAS_CALR 0x0010 /* caller-saved */
25#define XTHAL_SAS_CALE 0x0020 /* callee-saved */
26#define XTHAL_SAS_GLOB 0x0040 /* global across function calls (in thread) */
27/* Misc */
28#define XTHAL_SAS_ALL 0xFFFF /* include all default NCP contents */
29
30
31
32/* Macro to save all non-coprocessor (extra) custom TIE and optional state
33 * (not including zero-overhead loop registers).
34 * Save area ptr (clobbered): ptr (1 byte aligned)
35 * Scratch regs (clobbered): at1..at4 (only first XCHAL_NCP_NUM_ATMPS needed)
36 */
37 .macro xchal_ncp_store ptr at1 at2 at3 at4 continue=0 ofs=-1 select=XTHAL_SAS_ALL
38 xchal_sa_start \continue, \ofs
39 .ifeq (XTHAL_SAS_OPT | XTHAL_SAS_CC | XTHAL_SAS_GLOB) & ~\select
40 xchal_sa_align \ptr, 0, 1024-4, 4, 4
41 rur \at1, THREADPTR // threadptr option
42 s32i \at1, \ptr, .Lxchal_ofs_ + 0
43 .set .Lxchal_ofs_, .Lxchal_ofs_ + 4
44 .endif
45 .endm // xchal_ncp_store
46
47/* Macro to save all non-coprocessor (extra) custom TIE and optional state
48 * (not including zero-overhead loop registers).
49 * Save area ptr (clobbered): ptr (1 byte aligned)
50 * Scratch regs (clobbered): at1..at4 (only first XCHAL_NCP_NUM_ATMPS needed)
51 */
52 .macro xchal_ncp_load ptr at1 at2 at3 at4 continue=0 ofs=-1 select=XTHAL_SAS_ALL
53 xchal_sa_start \continue, \ofs
54 .ifeq (XTHAL_SAS_OPT | XTHAL_SAS_CC | XTHAL_SAS_GLOB) & ~\select
55 xchal_sa_align \ptr, 0, 1024-4, 4, 4
56 l32i \at1, \ptr, .Lxchal_ofs_ + 0
57 wur \at1, THREADPTR // threadptr option
58 .set .Lxchal_ofs_, .Lxchal_ofs_ + 4
59 .endif
60 .endm // xchal_ncp_load
61
62
63
64#define XCHAL_NCP_NUM_ATMPS 1
65
66
67#define XCHAL_SA_NUM_ATMPS 1
68
69#endif /*_XTENSA_CORE_TIE_ASM_H*/
70
diff --git a/include/asm-xtensa/variant-fsf/tie.h b/include/asm-xtensa/variant-fsf/tie.h
index a73c71664918..bf4020116df5 100644
--- a/include/asm-xtensa/variant-fsf/tie.h
+++ b/include/asm-xtensa/variant-fsf/tie.h
@@ -1,22 +1,77 @@
1/* 1/*
2 * Xtensa processor core configuration information. 2 * This header file describes this specific Xtensa processor's TIE extensions
3 * that extend basic Xtensa core functionality. It is customized to this
4 * Xtensa processor configuration.
3 * 5 *
4 * This file is subject to the terms and conditions of the GNU General Public 6 * This file is subject to the terms and conditions of the GNU General Public
5 * License. See the file "COPYING" in the main directory of this archive 7 * License. See the file "COPYING" in the main directory of this archive
6 * for more details. 8 * for more details.
7 * 9 *
8 * Copyright (C) 1999-2006 Tensilica Inc. 10 * Copyright (C) 1999-2007 Tensilica Inc.
9 */ 11 */
10 12
11#ifndef XTENSA_TIE_H 13#ifndef _XTENSA_CORE_TIE_H
12#define XTENSA_TIE_H 14#define _XTENSA_CORE_TIE_H
13
14/*----------------------------------------------------------------------
15 COPROCESSORS and EXTRA STATE
16 ----------------------------------------------------------------------*/
17 15
18#define XCHAL_CP_NUM 0 /* number of coprocessors */ 16#define XCHAL_CP_NUM 0 /* number of coprocessors */
19#define XCHAL_CP_MASK 0x00 17#define XCHAL_CP_MAX 0 /* max CP ID + 1 (0 if none) */
18#define XCHAL_CP_MASK 0x00 /* bitmask of all CPs by ID */
19#define XCHAL_CP_PORT_MASK 0x00 /* bitmask of only port CPs */
20
21/* Basic parameters of each coprocessor: */
22#define XCHAL_CP7_NAME "XTIOP"
23#define XCHAL_CP7_IDENT XTIOP
24#define XCHAL_CP7_SA_SIZE 0 /* size of state save area */
25#define XCHAL_CP7_SA_ALIGN 1 /* min alignment of save area */
26#define XCHAL_CP_ID_XTIOP 7 /* coprocessor ID (0..7) */
27
28/* Filler info for unassigned coprocessors, to simplify arrays etc: */
29#define XCHAL_NCP_SA_SIZE 0
30#define XCHAL_NCP_SA_ALIGN 1
31#define XCHAL_CP0_SA_SIZE 0
32#define XCHAL_CP0_SA_ALIGN 1
33#define XCHAL_CP1_SA_SIZE 0
34#define XCHAL_CP1_SA_ALIGN 1
35#define XCHAL_CP2_SA_SIZE 0
36#define XCHAL_CP2_SA_ALIGN 1
37#define XCHAL_CP3_SA_SIZE 0
38#define XCHAL_CP3_SA_ALIGN 1
39#define XCHAL_CP4_SA_SIZE 0
40#define XCHAL_CP4_SA_ALIGN 1
41#define XCHAL_CP5_SA_SIZE 0
42#define XCHAL_CP5_SA_ALIGN 1
43#define XCHAL_CP6_SA_SIZE 0
44#define XCHAL_CP6_SA_ALIGN 1
45
46/* Save area for non-coprocessor optional and custom (TIE) state: */
47#define XCHAL_NCP_SA_SIZE 0
48#define XCHAL_NCP_SA_ALIGN 1
49
50/* Total save area for optional and custom state (NCP + CPn): */
51#define XCHAL_TOTAL_SA_SIZE 0 /* with 16-byte align padding */
52#define XCHAL_TOTAL_SA_ALIGN 1 /* actual minimum alignment */
53
54#define XCHAL_NCP_SA_NUM 0
55#define XCHAL_NCP_SA_LIST(s)
56#define XCHAL_CP0_SA_NUM 0
57#define XCHAL_CP0_SA_LIST(s)
58#define XCHAL_CP1_SA_NUM 0
59#define XCHAL_CP1_SA_LIST(s)
60#define XCHAL_CP2_SA_NUM 0
61#define XCHAL_CP2_SA_LIST(s)
62#define XCHAL_CP3_SA_NUM 0
63#define XCHAL_CP3_SA_LIST(s)
64#define XCHAL_CP4_SA_NUM 0
65#define XCHAL_CP4_SA_LIST(s)
66#define XCHAL_CP5_SA_NUM 0
67#define XCHAL_CP5_SA_LIST(s)
68#define XCHAL_CP6_SA_NUM 0
69#define XCHAL_CP6_SA_LIST(s)
70#define XCHAL_CP7_SA_NUM 0
71#define XCHAL_CP7_SA_LIST(s)
72
73/* Byte length of instruction from its first nibble (op0 field), per FLIX. */
74#define XCHAL_OP0_FORMAT_LENGTHS 3,3,3,3,3,3,3,3,2,2,2,2,2,2,3,3
20 75
21#endif /*XTENSA_CONFIG_TIE_H*/ 76#endif /*_XTENSA_CORE_TIE_H*/
22 77
diff --git a/include/linux/Kbuild b/include/linux/Kbuild
index 5cae9b5960ea..aada32fffec2 100644
--- a/include/linux/Kbuild
+++ b/include/linux/Kbuild
@@ -70,7 +70,6 @@ header-y += fuse.h
70header-y += genetlink.h 70header-y += genetlink.h
71header-y += gen_stats.h 71header-y += gen_stats.h
72header-y += gigaset_dev.h 72header-y += gigaset_dev.h
73header-y += hdsmart.h
74header-y += hysdn_if.h 73header-y += hysdn_if.h
75header-y += i2o-dev.h 74header-y += i2o-dev.h
76header-y += i8k.h 75header-y += i8k.h
@@ -211,6 +210,7 @@ unifdef-y += hayesesp.h
211unifdef-y += hdlcdrv.h 210unifdef-y += hdlcdrv.h
212unifdef-y += hdlc.h 211unifdef-y += hdlc.h
213unifdef-y += hdreg.h 212unifdef-y += hdreg.h
213unifdef-y += hdsmart.h
214unifdef-y += hiddev.h 214unifdef-y += hiddev.h
215unifdef-y += hpet.h 215unifdef-y += hpet.h
216unifdef-y += i2c.h 216unifdef-y += i2c.h
diff --git a/include/linux/aio.h b/include/linux/aio.h
index a9931e2e5624..0d0b7f629bd3 100644
--- a/include/linux/aio.h
+++ b/include/linux/aio.h
@@ -105,7 +105,6 @@ struct kiocb {
105 wait_queue_t ki_wait; 105 wait_queue_t ki_wait;
106 loff_t ki_pos; 106 loff_t ki_pos;
107 107
108 atomic_t ki_bio_count; /* num bio used for this iocb */
109 void *private; 108 void *private;
110 /* State that we remember to be able to restart/retry */ 109 /* State that we remember to be able to restart/retry */
111 unsigned short ki_opcode; 110 unsigned short ki_opcode;
diff --git a/include/linux/ata.h b/include/linux/ata.h
index 78bbacaed8c4..1c622e2b0504 100644
--- a/include/linux/ata.h
+++ b/include/linux/ata.h
@@ -659,6 +659,11 @@ static inline int atapi_command_packet_set(const u16 *dev_id)
659 return (dev_id[0] >> 8) & 0x1f; 659 return (dev_id[0] >> 8) & 0x1f;
660} 660}
661 661
662static inline int atapi_id_dmadir(const u16 *dev_id)
663{
664 return ata_id_major_version(dev_id) >= 7 && (dev_id[62] & 0x8000);
665}
666
662static inline int is_multi_taskfile(struct ata_taskfile *tf) 667static inline int is_multi_taskfile(struct ata_taskfile *tf)
663{ 668{
664 return (tf->command == ATA_CMD_READ_MULTI) || 669 return (tf->command == ATA_CMD_READ_MULTI) ||
diff --git a/include/linux/bio.h b/include/linux/bio.h
index 4da441337d6e..4c59bdccd3ee 100644
--- a/include/linux/bio.h
+++ b/include/linux/bio.h
@@ -326,7 +326,6 @@ extern struct bio *bio_map_kern(struct request_queue *, void *, unsigned int,
326 gfp_t); 326 gfp_t);
327extern void bio_set_pages_dirty(struct bio *bio); 327extern void bio_set_pages_dirty(struct bio *bio);
328extern void bio_check_pages_dirty(struct bio *bio); 328extern void bio_check_pages_dirty(struct bio *bio);
329extern void bio_release_pages(struct bio *bio);
330extern struct bio *bio_copy_user(struct request_queue *, unsigned long, unsigned int, int); 329extern struct bio *bio_copy_user(struct request_queue *, unsigned long, unsigned int, int);
331extern int bio_uncopy_user(struct bio *); 330extern int bio_uncopy_user(struct bio *);
332void zero_fill_bio(struct bio *bio); 331void zero_fill_bio(struct bio *bio);
diff --git a/include/linux/blkdev.h b/include/linux/blkdev.h
index e1888cc5b8ae..6fe67d1939c2 100644
--- a/include/linux/blkdev.h
+++ b/include/linux/blkdev.h
@@ -216,6 +216,7 @@ struct request {
216 unsigned int cmd_len; 216 unsigned int cmd_len;
217 unsigned char cmd[BLK_MAX_CDB]; 217 unsigned char cmd[BLK_MAX_CDB];
218 218
219 unsigned int raw_data_len;
219 unsigned int data_len; 220 unsigned int data_len;
220 unsigned int sense_len; 221 unsigned int sense_len;
221 void *data; 222 void *data;
@@ -258,6 +259,7 @@ struct bio_vec;
258typedef int (merge_bvec_fn) (struct request_queue *, struct bio *, struct bio_vec *); 259typedef int (merge_bvec_fn) (struct request_queue *, struct bio *, struct bio_vec *);
259typedef void (prepare_flush_fn) (struct request_queue *, struct request *); 260typedef void (prepare_flush_fn) (struct request_queue *, struct request *);
260typedef void (softirq_done_fn)(struct request *); 261typedef void (softirq_done_fn)(struct request *);
262typedef int (dma_drain_needed_fn)(struct request *);
261 263
262enum blk_queue_state { 264enum blk_queue_state {
263 Queue_down, 265 Queue_down,
@@ -294,6 +296,7 @@ struct request_queue
294 merge_bvec_fn *merge_bvec_fn; 296 merge_bvec_fn *merge_bvec_fn;
295 prepare_flush_fn *prepare_flush_fn; 297 prepare_flush_fn *prepare_flush_fn;
296 softirq_done_fn *softirq_done_fn; 298 softirq_done_fn *softirq_done_fn;
299 dma_drain_needed_fn *dma_drain_needed;
297 300
298 /* 301 /*
299 * Dispatch queue sorting 302 * Dispatch queue sorting
@@ -698,8 +701,9 @@ extern void blk_queue_max_hw_segments(struct request_queue *, unsigned short);
698extern void blk_queue_max_segment_size(struct request_queue *, unsigned int); 701extern void blk_queue_max_segment_size(struct request_queue *, unsigned int);
699extern void blk_queue_hardsect_size(struct request_queue *, unsigned short); 702extern void blk_queue_hardsect_size(struct request_queue *, unsigned short);
700extern void blk_queue_stack_limits(struct request_queue *t, struct request_queue *b); 703extern void blk_queue_stack_limits(struct request_queue *t, struct request_queue *b);
701extern int blk_queue_dma_drain(struct request_queue *q, void *buf, 704extern int blk_queue_dma_drain(struct request_queue *q,
702 unsigned int size); 705 dma_drain_needed_fn *dma_drain_needed,
706 void *buf, unsigned int size);
703extern void blk_queue_segment_boundary(struct request_queue *, unsigned long); 707extern void blk_queue_segment_boundary(struct request_queue *, unsigned long);
704extern void blk_queue_prep_rq(struct request_queue *, prep_rq_fn *pfn); 708extern void blk_queue_prep_rq(struct request_queue *, prep_rq_fn *pfn);
705extern void blk_queue_merge_bvec(struct request_queue *, merge_bvec_fn *); 709extern void blk_queue_merge_bvec(struct request_queue *, merge_bvec_fn *);
diff --git a/include/linux/cgroup.h b/include/linux/cgroup.h
index ff9055fc3d2a..028ba3b523b1 100644
--- a/include/linux/cgroup.h
+++ b/include/linux/cgroup.h
@@ -175,7 +175,7 @@ struct css_set {
175 * 175 *
176 * 176 *
177 * When reading/writing to a file: 177 * When reading/writing to a file:
178 * - the cgroup to use in file->f_dentry->d_parent->d_fsdata 178 * - the cgroup to use is file->f_dentry->d_parent->d_fsdata
179 * - the 'cftype' of the file is file->f_dentry->d_fsdata 179 * - the 'cftype' of the file is file->f_dentry->d_fsdata
180 */ 180 */
181 181
@@ -186,15 +186,15 @@ struct cftype {
186 char name[MAX_CFTYPE_NAME]; 186 char name[MAX_CFTYPE_NAME];
187 int private; 187 int private;
188 int (*open) (struct inode *inode, struct file *file); 188 int (*open) (struct inode *inode, struct file *file);
189 ssize_t (*read) (struct cgroup *cont, struct cftype *cft, 189 ssize_t (*read) (struct cgroup *cgrp, struct cftype *cft,
190 struct file *file, 190 struct file *file,
191 char __user *buf, size_t nbytes, loff_t *ppos); 191 char __user *buf, size_t nbytes, loff_t *ppos);
192 /* 192 /*
193 * read_uint() is a shortcut for the common case of returning a 193 * read_uint() is a shortcut for the common case of returning a
194 * single integer. Use it in place of read() 194 * single integer. Use it in place of read()
195 */ 195 */
196 u64 (*read_uint) (struct cgroup *cont, struct cftype *cft); 196 u64 (*read_uint) (struct cgroup *cgrp, struct cftype *cft);
197 ssize_t (*write) (struct cgroup *cont, struct cftype *cft, 197 ssize_t (*write) (struct cgroup *cgrp, struct cftype *cft,
198 struct file *file, 198 struct file *file,
199 const char __user *buf, size_t nbytes, loff_t *ppos); 199 const char __user *buf, size_t nbytes, loff_t *ppos);
200 200
@@ -203,7 +203,7 @@ struct cftype {
203 * a single integer (as parsed by simple_strtoull) from 203 * a single integer (as parsed by simple_strtoull) from
204 * userspace. Use in place of write(); return 0 or error. 204 * userspace. Use in place of write(); return 0 or error.
205 */ 205 */
206 int (*write_uint) (struct cgroup *cont, struct cftype *cft, u64 val); 206 int (*write_uint) (struct cgroup *cgrp, struct cftype *cft, u64 val);
207 207
208 int (*release) (struct inode *inode, struct file *file); 208 int (*release) (struct inode *inode, struct file *file);
209}; 209};
@@ -218,41 +218,41 @@ struct cgroup_scanner {
218 218
219/* Add a new file to the given cgroup directory. Should only be 219/* Add a new file to the given cgroup directory. Should only be
220 * called by subsystems from within a populate() method */ 220 * called by subsystems from within a populate() method */
221int cgroup_add_file(struct cgroup *cont, struct cgroup_subsys *subsys, 221int cgroup_add_file(struct cgroup *cgrp, struct cgroup_subsys *subsys,
222 const struct cftype *cft); 222 const struct cftype *cft);
223 223
224/* Add a set of new files to the given cgroup directory. Should 224/* Add a set of new files to the given cgroup directory. Should
225 * only be called by subsystems from within a populate() method */ 225 * only be called by subsystems from within a populate() method */
226int cgroup_add_files(struct cgroup *cont, 226int cgroup_add_files(struct cgroup *cgrp,
227 struct cgroup_subsys *subsys, 227 struct cgroup_subsys *subsys,
228 const struct cftype cft[], 228 const struct cftype cft[],
229 int count); 229 int count);
230 230
231int cgroup_is_removed(const struct cgroup *cont); 231int cgroup_is_removed(const struct cgroup *cgrp);
232 232
233int cgroup_path(const struct cgroup *cont, char *buf, int buflen); 233int cgroup_path(const struct cgroup *cgrp, char *buf, int buflen);
234 234
235int cgroup_task_count(const struct cgroup *cont); 235int cgroup_task_count(const struct cgroup *cgrp);
236 236
237/* Return true if the cgroup is a descendant of the current cgroup */ 237/* Return true if the cgroup is a descendant of the current cgroup */
238int cgroup_is_descendant(const struct cgroup *cont); 238int cgroup_is_descendant(const struct cgroup *cgrp);
239 239
240/* Control Group subsystem type. See Documentation/cgroups.txt for details */ 240/* Control Group subsystem type. See Documentation/cgroups.txt for details */
241 241
242struct cgroup_subsys { 242struct cgroup_subsys {
243 struct cgroup_subsys_state *(*create)(struct cgroup_subsys *ss, 243 struct cgroup_subsys_state *(*create)(struct cgroup_subsys *ss,
244 struct cgroup *cont); 244 struct cgroup *cgrp);
245 void (*pre_destroy)(struct cgroup_subsys *ss, struct cgroup *cont); 245 void (*pre_destroy)(struct cgroup_subsys *ss, struct cgroup *cgrp);
246 void (*destroy)(struct cgroup_subsys *ss, struct cgroup *cont); 246 void (*destroy)(struct cgroup_subsys *ss, struct cgroup *cgrp);
247 int (*can_attach)(struct cgroup_subsys *ss, 247 int (*can_attach)(struct cgroup_subsys *ss,
248 struct cgroup *cont, struct task_struct *tsk); 248 struct cgroup *cgrp, struct task_struct *tsk);
249 void (*attach)(struct cgroup_subsys *ss, struct cgroup *cont, 249 void (*attach)(struct cgroup_subsys *ss, struct cgroup *cgrp,
250 struct cgroup *old_cont, struct task_struct *tsk); 250 struct cgroup *old_cgrp, struct task_struct *tsk);
251 void (*fork)(struct cgroup_subsys *ss, struct task_struct *task); 251 void (*fork)(struct cgroup_subsys *ss, struct task_struct *task);
252 void (*exit)(struct cgroup_subsys *ss, struct task_struct *task); 252 void (*exit)(struct cgroup_subsys *ss, struct task_struct *task);
253 int (*populate)(struct cgroup_subsys *ss, 253 int (*populate)(struct cgroup_subsys *ss,
254 struct cgroup *cont); 254 struct cgroup *cgrp);
255 void (*post_clone)(struct cgroup_subsys *ss, struct cgroup *cont); 255 void (*post_clone)(struct cgroup_subsys *ss, struct cgroup *cgrp);
256 void (*bind)(struct cgroup_subsys *ss, struct cgroup *root); 256 void (*bind)(struct cgroup_subsys *ss, struct cgroup *root);
257 int subsys_id; 257 int subsys_id;
258 int active; 258 int active;
@@ -273,9 +273,9 @@ struct cgroup_subsys {
273#undef SUBSYS 273#undef SUBSYS
274 274
275static inline struct cgroup_subsys_state *cgroup_subsys_state( 275static inline struct cgroup_subsys_state *cgroup_subsys_state(
276 struct cgroup *cont, int subsys_id) 276 struct cgroup *cgrp, int subsys_id)
277{ 277{
278 return cont->subsys[subsys_id]; 278 return cgrp->subsys[subsys_id];
279} 279}
280 280
281static inline struct cgroup_subsys_state *task_subsys_state( 281static inline struct cgroup_subsys_state *task_subsys_state(
@@ -290,8 +290,6 @@ static inline struct cgroup* task_cgroup(struct task_struct *task,
290 return task_subsys_state(task, subsys_id)->cgroup; 290 return task_subsys_state(task, subsys_id)->cgroup;
291} 291}
292 292
293int cgroup_path(const struct cgroup *cont, char *buf, int buflen);
294
295int cgroup_clone(struct task_struct *tsk, struct cgroup_subsys *ss); 293int cgroup_clone(struct task_struct *tsk, struct cgroup_subsys *ss);
296 294
297/* A cgroup_iter should be treated as an opaque object */ 295/* A cgroup_iter should be treated as an opaque object */
@@ -313,10 +311,10 @@ struct cgroup_iter {
313 * - cgroup_scan_tasks() holds the css_set_lock when calling the test_task() 311 * - cgroup_scan_tasks() holds the css_set_lock when calling the test_task()
314 * callback, but not while calling the process_task() callback. 312 * callback, but not while calling the process_task() callback.
315 */ 313 */
316void cgroup_iter_start(struct cgroup *cont, struct cgroup_iter *it); 314void cgroup_iter_start(struct cgroup *cgrp, struct cgroup_iter *it);
317struct task_struct *cgroup_iter_next(struct cgroup *cont, 315struct task_struct *cgroup_iter_next(struct cgroup *cgrp,
318 struct cgroup_iter *it); 316 struct cgroup_iter *it);
319void cgroup_iter_end(struct cgroup *cont, struct cgroup_iter *it); 317void cgroup_iter_end(struct cgroup *cgrp, struct cgroup_iter *it);
320int cgroup_scan_tasks(struct cgroup_scanner *scan); 318int cgroup_scan_tasks(struct cgroup_scanner *scan);
321int cgroup_attach_task(struct cgroup *, struct task_struct *); 319int cgroup_attach_task(struct cgroup *, struct task_struct *);
322 320
diff --git a/include/linux/efs_dir.h b/include/linux/efs_dir.h
deleted file mode 100644
index a09ec010569c..000000000000
--- a/include/linux/efs_dir.h
+++ /dev/null
@@ -1,42 +0,0 @@
1/*
2 * efs_dir.h
3 *
4 * Copyright (c) 1999 Al Smith
5 */
6
7#ifndef __EFS_DIR_H__
8#define __EFS_DIR_H__
9
10#define EFS_DIRBSIZE_BITS EFS_BLOCKSIZE_BITS
11#define EFS_DIRBSIZE (1 << EFS_DIRBSIZE_BITS)
12
13struct efs_dentry {
14 __be32 inode;
15 unsigned char namelen;
16 char name[3];
17};
18
19#define EFS_DENTSIZE (sizeof(struct efs_dentry) - 3 + 1)
20#define EFS_MAXNAMELEN ((1 << (sizeof(char) * 8)) - 1)
21
22#define EFS_DIRBLK_HEADERSIZE 4
23#define EFS_DIRBLK_MAGIC 0xbeef /* moo */
24
25struct efs_dir {
26 __be16 magic;
27 unsigned char firstused;
28 unsigned char slots;
29
30 unsigned char space[EFS_DIRBSIZE - EFS_DIRBLK_HEADERSIZE];
31};
32
33#define EFS_MAXENTS \
34 ((EFS_DIRBSIZE - EFS_DIRBLK_HEADERSIZE) / \
35 (EFS_DENTSIZE + sizeof(char)))
36
37#define EFS_SLOTAT(dir, slot) EFS_REALOFF((dir)->space[slot])
38
39#define EFS_REALOFF(offset) ((offset << 1))
40
41#endif /* __EFS_DIR_H__ */
42
diff --git a/include/linux/efs_fs.h b/include/linux/efs_fs.h
deleted file mode 100644
index a695d63a07af..000000000000
--- a/include/linux/efs_fs.h
+++ /dev/null
@@ -1,56 +0,0 @@
1/*
2 * efs_fs.h
3 *
4 * Copyright (c) 1999 Al Smith
5 *
6 * Portions derived from work (c) 1995,1996 Christian Vogelgsang.
7 */
8
9#ifndef __EFS_FS_H__
10#define __EFS_FS_H__
11
12#define EFS_VERSION "1.0a"
13
14static const char cprt[] = "EFS: "EFS_VERSION" - (c) 1999 Al Smith <Al.Smith@aeschi.ch.eu.org>";
15
16#include <asm/uaccess.h>
17
18/* 1 block is 512 bytes */
19#define EFS_BLOCKSIZE_BITS 9
20#define EFS_BLOCKSIZE (1 << EFS_BLOCKSIZE_BITS)
21
22#include <linux/fs.h>
23#include <linux/efs_fs_i.h>
24#include <linux/efs_fs_sb.h>
25#include <linux/efs_dir.h>
26
27static inline struct efs_inode_info *INODE_INFO(struct inode *inode)
28{
29 return container_of(inode, struct efs_inode_info, vfs_inode);
30}
31
32static inline struct efs_sb_info *SUPER_INFO(struct super_block *sb)
33{
34 return sb->s_fs_info;
35}
36
37struct statfs;
38struct fid;
39
40extern const struct inode_operations efs_dir_inode_operations;
41extern const struct file_operations efs_dir_operations;
42extern const struct address_space_operations efs_symlink_aops;
43
44extern struct inode *efs_iget(struct super_block *, unsigned long);
45extern efs_block_t efs_map_block(struct inode *, efs_block_t);
46extern int efs_get_block(struct inode *, sector_t, struct buffer_head *, int);
47
48extern struct dentry *efs_lookup(struct inode *, struct dentry *, struct nameidata *);
49extern struct dentry *efs_fh_to_dentry(struct super_block *sb, struct fid *fid,
50 int fh_len, int fh_type);
51extern struct dentry *efs_fh_to_parent(struct super_block *sb, struct fid *fid,
52 int fh_len, int fh_type);
53extern struct dentry *efs_get_parent(struct dentry *);
54extern int efs_bmap(struct inode *, int);
55
56#endif /* __EFS_FS_H__ */
diff --git a/include/linux/efs_fs_i.h b/include/linux/efs_fs_i.h
deleted file mode 100644
index 617c474ca659..000000000000
--- a/include/linux/efs_fs_i.h
+++ /dev/null
@@ -1,68 +0,0 @@
1/*
2 * efs_fs_i.h
3 *
4 * Copyright (c) 1999 Al Smith
5 *
6 * Portions derived from IRIX header files (c) 1988 Silicon Graphics
7 */
8
9#ifndef __EFS_FS_I_H__
10#define __EFS_FS_I_H__
11
12typedef int32_t efs_block_t;
13typedef uint32_t efs_ino_t;
14
15#define EFS_DIRECTEXTENTS 12
16
17/*
18 * layout of an extent, in memory and on disk. 8 bytes exactly.
19 */
20typedef union extent_u {
21 unsigned char raw[8];
22 struct extent_s {
23 unsigned int ex_magic:8; /* magic # (zero) */
24 unsigned int ex_bn:24; /* basic block */
25 unsigned int ex_length:8; /* numblocks in this extent */
26 unsigned int ex_offset:24; /* logical offset into file */
27 } cooked;
28} efs_extent;
29
30typedef struct edevs {
31 __be16 odev;
32 __be32 ndev;
33} efs_devs;
34
35/*
36 * extent based filesystem inode as it appears on disk. The efs inode
37 * is exactly 128 bytes long.
38 */
39struct efs_dinode {
40 __be16 di_mode; /* mode and type of file */
41 __be16 di_nlink; /* number of links to file */
42 __be16 di_uid; /* owner's user id */
43 __be16 di_gid; /* owner's group id */
44 __be32 di_size; /* number of bytes in file */
45 __be32 di_atime; /* time last accessed */
46 __be32 di_mtime; /* time last modified */
47 __be32 di_ctime; /* time created */
48 __be32 di_gen; /* generation number */
49 __be16 di_numextents; /* # of extents */
50 u_char di_version; /* version of inode */
51 u_char di_spare; /* spare - used by AFS */
52 union di_addr {
53 efs_extent di_extents[EFS_DIRECTEXTENTS];
54 efs_devs di_dev; /* device for IFCHR/IFBLK */
55 } di_u;
56};
57
58/* efs inode storage in memory */
59struct efs_inode_info {
60 int numextents;
61 int lastextent;
62
63 efs_extent extents[EFS_DIRECTEXTENTS];
64 struct inode vfs_inode;
65};
66
67#endif /* __EFS_FS_I_H__ */
68
diff --git a/include/linux/fs.h b/include/linux/fs.h
index 98ffb6ead434..b84b848431f2 100644
--- a/include/linux/fs.h
+++ b/include/linux/fs.h
@@ -1590,7 +1590,6 @@ extern void bd_set_size(struct block_device *, loff_t size);
1590extern void bd_forget(struct inode *inode); 1590extern void bd_forget(struct inode *inode);
1591extern void bdput(struct block_device *); 1591extern void bdput(struct block_device *);
1592extern struct block_device *open_by_devnum(dev_t, unsigned); 1592extern struct block_device *open_by_devnum(dev_t, unsigned);
1593extern const struct address_space_operations def_blk_aops;
1594#else 1593#else
1595static inline void bd_forget(struct inode *inode) {} 1594static inline void bd_forget(struct inode *inode) {}
1596#endif 1595#endif
diff --git a/include/linux/futex.h b/include/linux/futex.h
index 90048fb28a38..586ab56a3ec3 100644
--- a/include/linux/futex.h
+++ b/include/linux/futex.h
@@ -167,6 +167,7 @@ union futex_key {
167#ifdef CONFIG_FUTEX 167#ifdef CONFIG_FUTEX
168extern void exit_robust_list(struct task_struct *curr); 168extern void exit_robust_list(struct task_struct *curr);
169extern void exit_pi_state_list(struct task_struct *curr); 169extern void exit_pi_state_list(struct task_struct *curr);
170extern int futex_cmpxchg_enabled;
170#else 171#else
171static inline void exit_robust_list(struct task_struct *curr) 172static inline void exit_robust_list(struct task_struct *curr)
172{ 173{
diff --git a/include/linux/hdsmart.h b/include/linux/hdsmart.h
index e69192159d40..4f4faf9d4238 100644
--- a/include/linux/hdsmart.h
+++ b/include/linux/hdsmart.h
@@ -17,7 +17,7 @@
17#ifndef _LINUX_HDSMART_H 17#ifndef _LINUX_HDSMART_H
18#define _LINUX_HDSMART_H 18#define _LINUX_HDSMART_H
19 19
20#ifndef __KERNEL 20#ifndef __KERNEL__
21#define OFFLINE_FULL_SCAN 0 21#define OFFLINE_FULL_SCAN 0
22#define SHORT_SELF_TEST 1 22#define SHORT_SELF_TEST 1
23#define EXTEND_SELF_TEST 2 23#define EXTEND_SELF_TEST 2
@@ -121,6 +121,6 @@ typedef struct ata_smart_selftestlog_s {
121 unsigned char resevered[2]; 121 unsigned char resevered[2];
122 unsigned char chksum; 122 unsigned char chksum;
123} __attribute__ ((packed)) ata_smart_selftestlog_t; 123} __attribute__ ((packed)) ata_smart_selftestlog_t;
124#endif /* __KERNEL__ * 124#endif /* __KERNEL__ */
125 125
126#endif /* _LINUX_HDSMART_H */ 126#endif /* _LINUX_HDSMART_H */
diff --git a/include/linux/i2c.h b/include/linux/i2c.h
index 76014f8f3c60..365e0df3646b 100644
--- a/include/linux/i2c.h
+++ b/include/linux/i2c.h
@@ -271,9 +271,16 @@ extern void i2c_unregister_device(struct i2c_client *);
271 * This is done at arch_initcall time, before declaring any i2c adapters. 271 * This is done at arch_initcall time, before declaring any i2c adapters.
272 * Modules for add-on boards must use other calls. 272 * Modules for add-on boards must use other calls.
273 */ 273 */
274#ifdef CONFIG_I2C_BOARDINFO
274extern int 275extern int
275i2c_register_board_info(int busnum, struct i2c_board_info const *info, unsigned n); 276i2c_register_board_info(int busnum, struct i2c_board_info const *info, unsigned n);
276 277#else
278static inline int
279i2c_register_board_info(int busnum, struct i2c_board_info const *info, unsigned n)
280{
281 return 0;
282}
283#endif
277 284
278/* 285/*
279 * The following structs are for those who like to implement new bus drivers: 286 * The following structs are for those who like to implement new bus drivers:
@@ -598,7 +605,7 @@ I2C_CLIENT_MODULE_PARM(probe, "List of adapter,address pairs to scan " \
598 "additionally"); \ 605 "additionally"); \
599I2C_CLIENT_MODULE_PARM(ignore, "List of adapter,address pairs not to " \ 606I2C_CLIENT_MODULE_PARM(ignore, "List of adapter,address pairs not to " \
600 "scan"); \ 607 "scan"); \
601const static struct i2c_client_address_data addr_data = { \ 608static const struct i2c_client_address_data addr_data = { \
602 .normal_i2c = normal_i2c, \ 609 .normal_i2c = normal_i2c, \
603 .probe = probe, \ 610 .probe = probe, \
604 .ignore = ignore, \ 611 .ignore = ignore, \
diff --git a/include/linux/init.h b/include/linux/init.h
index a404a0055dd7..fb58c0493cf2 100644
--- a/include/linux/init.h
+++ b/include/linux/init.h
@@ -42,6 +42,7 @@
42 discard it in modules) */ 42 discard it in modules) */
43#define __init __section(.init.text) __cold 43#define __init __section(.init.text) __cold
44#define __initdata __section(.init.data) 44#define __initdata __section(.init.data)
45#define __initconst __section(.init.rodata)
45#define __exitdata __section(.exit.data) 46#define __exitdata __section(.exit.data)
46#define __exit_call __used __section(.exitcall.exit) 47#define __exit_call __used __section(.exitcall.exit)
47 48
@@ -106,6 +107,7 @@
106#define __memexitconst __section(.memexit.rodata) 107#define __memexitconst __section(.memexit.rodata)
107 108
108/* For assembly routines */ 109/* For assembly routines */
110#define __HEAD .section ".head.text","ax"
109#define __INIT .section ".init.text","ax" 111#define __INIT .section ".init.text","ax"
110#define __FINIT .previous 112#define __FINIT .previous
111 113
diff --git a/include/linux/iocontext.h b/include/linux/iocontext.h
index 593b222d9dcc..1b4ccf25b4d2 100644
--- a/include/linux/iocontext.h
+++ b/include/linux/iocontext.h
@@ -50,6 +50,7 @@ struct cfq_io_context {
50 sector_t seek_mean; 50 sector_t seek_mean;
51 51
52 struct list_head queue_list; 52 struct list_head queue_list;
53 struct hlist_node cic_list;
53 54
54 void (*dtor)(struct io_context *); /* destructor */ 55 void (*dtor)(struct io_context *); /* destructor */
55 void (*exit)(struct io_context *); /* called on task exit */ 56 void (*exit)(struct io_context *); /* called on task exit */
@@ -77,6 +78,7 @@ struct io_context {
77 78
78 struct as_io_context *aic; 79 struct as_io_context *aic;
79 struct radix_tree_root radix_root; 80 struct radix_tree_root radix_root;
81 struct hlist_head cic_list;
80 void *ioc_data; 82 void *ioc_data;
81}; 83};
82 84
diff --git a/include/linux/libata.h b/include/linux/libata.h
index bc5a8d0c7090..a05f60013642 100644
--- a/include/linux/libata.h
+++ b/include/linux/libata.h
@@ -138,6 +138,7 @@ enum {
138 ATA_DFLAG_AN = (1 << 7), /* AN configured */ 138 ATA_DFLAG_AN = (1 << 7), /* AN configured */
139 ATA_DFLAG_HIPM = (1 << 8), /* device supports HIPM */ 139 ATA_DFLAG_HIPM = (1 << 8), /* device supports HIPM */
140 ATA_DFLAG_DIPM = (1 << 9), /* device supports DIPM */ 140 ATA_DFLAG_DIPM = (1 << 9), /* device supports DIPM */
141 ATA_DFLAG_DMADIR = (1 << 10), /* device requires DMADIR */
141 ATA_DFLAG_CFG_MASK = (1 << 12) - 1, 142 ATA_DFLAG_CFG_MASK = (1 << 12) - 1,
142 143
143 ATA_DFLAG_PIO = (1 << 12), /* device limited to PIO mode */ 144 ATA_DFLAG_PIO = (1 << 12), /* device limited to PIO mode */
@@ -278,7 +279,6 @@ enum {
278 279
279 /* size of buffer to pad xfers ending on unaligned boundaries */ 280 /* size of buffer to pad xfers ending on unaligned boundaries */
280 ATA_DMA_PAD_SZ = 4, 281 ATA_DMA_PAD_SZ = 4,
281 ATA_DMA_PAD_BUF_SZ = ATA_DMA_PAD_SZ * ATA_MAX_QUEUE,
282 282
283 /* ering size */ 283 /* ering size */
284 ATA_ERING_SIZE = 32, 284 ATA_ERING_SIZE = 32,
@@ -457,24 +457,18 @@ struct ata_queued_cmd {
457 unsigned long flags; /* ATA_QCFLAG_xxx */ 457 unsigned long flags; /* ATA_QCFLAG_xxx */
458 unsigned int tag; 458 unsigned int tag;
459 unsigned int n_elem; 459 unsigned int n_elem;
460 unsigned int mapped_n_elem;
461 460
462 int dma_dir; 461 int dma_dir;
463 462
464 unsigned int pad_len;
465 unsigned int sect_size; 463 unsigned int sect_size;
466 464
467 unsigned int nbytes; 465 unsigned int nbytes;
468 unsigned int raw_nbytes;
469 unsigned int curbytes; 466 unsigned int curbytes;
470 467
471 struct scatterlist *cursg; 468 struct scatterlist *cursg;
472 unsigned int cursg_ofs; 469 unsigned int cursg_ofs;
473 470
474 struct scatterlist *last_sg;
475 struct scatterlist saved_last_sg;
476 struct scatterlist sgent; 471 struct scatterlist sgent;
477 struct scatterlist extra_sg[2];
478 472
479 struct scatterlist *sg; 473 struct scatterlist *sg;
480 474
@@ -619,9 +613,6 @@ struct ata_port {
619 struct ata_prd *prd; /* our SG list */ 613 struct ata_prd *prd; /* our SG list */
620 dma_addr_t prd_dma; /* and its DMA mapping */ 614 dma_addr_t prd_dma; /* and its DMA mapping */
621 615
622 void *pad; /* array of DMA pad buffers */
623 dma_addr_t pad_dma;
624
625 struct ata_ioports ioaddr; /* ATA cmd/ctl/dma register blocks */ 616 struct ata_ioports ioaddr; /* ATA cmd/ctl/dma register blocks */
626 617
627 u8 ctl; /* cache of ATA control register */ 618 u8 ctl; /* cache of ATA control register */
@@ -1207,7 +1198,7 @@ static inline struct ata_link *ata_port_next_link(struct ata_link *link)
1207 return ap->pmp_link; 1198 return ap->pmp_link;
1208 } 1199 }
1209 1200
1210 if (++link - ap->pmp_link < ap->nr_pmp_links) 1201 if (++link < ap->nr_pmp_links + ap->pmp_link)
1211 return link; 1202 return link;
1212 return NULL; 1203 return NULL;
1213} 1204}
@@ -1363,12 +1354,9 @@ static inline void ata_qc_reinit(struct ata_queued_cmd *qc)
1363 qc->flags = 0; 1354 qc->flags = 0;
1364 qc->cursg = NULL; 1355 qc->cursg = NULL;
1365 qc->cursg_ofs = 0; 1356 qc->cursg_ofs = 0;
1366 qc->nbytes = qc->raw_nbytes = qc->curbytes = 0; 1357 qc->nbytes = qc->curbytes = 0;
1367 qc->n_elem = 0; 1358 qc->n_elem = 0;
1368 qc->mapped_n_elem = 0;
1369 qc->err_mask = 0; 1359 qc->err_mask = 0;
1370 qc->pad_len = 0;
1371 qc->last_sg = NULL;
1372 qc->sect_size = ATA_SECT_SIZE; 1360 qc->sect_size = ATA_SECT_SIZE;
1373 1361
1374 ata_tf_init(qc->dev, &qc->tf); 1362 ata_tf_init(qc->dev, &qc->tf);
@@ -1423,19 +1411,6 @@ static inline unsigned int __ac_err_mask(u8 status)
1423 return mask; 1411 return mask;
1424} 1412}
1425 1413
1426static inline int ata_pad_alloc(struct ata_port *ap, struct device *dev)
1427{
1428 ap->pad_dma = 0;
1429 ap->pad = dmam_alloc_coherent(dev, ATA_DMA_PAD_BUF_SZ,
1430 &ap->pad_dma, GFP_KERNEL);
1431 return (ap->pad == NULL) ? -ENOMEM : 0;
1432}
1433
1434static inline void ata_pad_free(struct ata_port *ap, struct device *dev)
1435{
1436 dmam_free_coherent(dev, ATA_DMA_PAD_BUF_SZ, ap->pad, ap->pad_dma);
1437}
1438
1439static inline struct ata_port *ata_shost_to_port(struct Scsi_Host *host) 1414static inline struct ata_port *ata_shost_to_port(struct Scsi_Host *host)
1440{ 1415{
1441 return *(struct ata_port **)&host->hostdata[0]; 1416 return *(struct ata_port **)&host->hostdata[0];
diff --git a/include/linux/memcontrol.h b/include/linux/memcontrol.h
index 925d57b236aa..04075628cb9a 100644
--- a/include/linux/memcontrol.h
+++ b/include/linux/memcontrol.h
@@ -20,9 +20,6 @@
20#ifndef _LINUX_MEMCONTROL_H 20#ifndef _LINUX_MEMCONTROL_H
21#define _LINUX_MEMCONTROL_H 21#define _LINUX_MEMCONTROL_H
22 22
23#include <linux/rcupdate.h>
24#include <linux/mm.h>
25
26struct mem_cgroup; 23struct mem_cgroup;
27struct page_cgroup; 24struct page_cgroup;
28struct page; 25struct page;
diff --git a/include/linux/mm.h b/include/linux/mm.h
index 26c7124b841a..3f3ccfe42de0 100644
--- a/include/linux/mm.h
+++ b/include/linux/mm.h
@@ -235,6 +235,7 @@ static inline int get_page_unless_zero(struct page *page)
235struct page *vmalloc_to_page(const void *addr); 235struct page *vmalloc_to_page(const void *addr);
236unsigned long vmalloc_to_pfn(const void *addr); 236unsigned long vmalloc_to_pfn(const void *addr);
237 237
238#ifdef CONFIG_MMU
238/* Determine if an address is within the vmalloc range */ 239/* Determine if an address is within the vmalloc range */
239static inline int is_vmalloc_addr(const void *x) 240static inline int is_vmalloc_addr(const void *x)
240{ 241{
@@ -242,6 +243,7 @@ static inline int is_vmalloc_addr(const void *x)
242 243
243 return addr >= VMALLOC_START && addr < VMALLOC_END; 244 return addr >= VMALLOC_START && addr < VMALLOC_END;
244} 245}
246#endif
245 247
246static inline struct page *compound_head(struct page *page) 248static inline struct page *compound_head(struct page *page)
247{ 249{
@@ -1171,12 +1173,18 @@ static inline void enable_debug_pagealloc(void)
1171{ 1173{
1172 debug_pagealloc_enabled = 1; 1174 debug_pagealloc_enabled = 1;
1173} 1175}
1176#ifdef CONFIG_HIBERNATION
1177extern bool kernel_page_present(struct page *page);
1178#endif /* CONFIG_HIBERNATION */
1174#else 1179#else
1175static inline void 1180static inline void
1176kernel_map_pages(struct page *page, int numpages, int enable) {} 1181kernel_map_pages(struct page *page, int numpages, int enable) {}
1177static inline void enable_debug_pagealloc(void) 1182static inline void enable_debug_pagealloc(void)
1178{ 1183{
1179} 1184}
1185#ifdef CONFIG_HIBERNATION
1186static inline bool kernel_page_present(struct page *page) { return true; }
1187#endif /* CONFIG_HIBERNATION */
1180#endif 1188#endif
1181 1189
1182extern struct vm_area_struct *get_gate_vma(struct task_struct *tsk); 1190extern struct vm_area_struct *get_gate_vma(struct task_struct *tsk);
diff --git a/include/linux/netfilter.h b/include/linux/netfilter.h
index d74e79bacd2d..b74b615492e8 100644
--- a/include/linux/netfilter.h
+++ b/include/linux/netfilter.h
@@ -51,7 +51,7 @@ enum nf_inet_hooks {
51}; 51};
52 52
53union nf_inet_addr { 53union nf_inet_addr {
54 u_int32_t all[4]; 54 __u32 all[4];
55 __be32 ip; 55 __be32 ip;
56 __be32 ip6[4]; 56 __be32 ip6[4];
57 struct in_addr in; 57 struct in_addr in;
diff --git a/include/linux/netfilter/Kbuild b/include/linux/netfilter/Kbuild
index 91fef0cae42f..3aff513d12c8 100644
--- a/include/linux/netfilter/Kbuild
+++ b/include/linux/netfilter/Kbuild
@@ -30,7 +30,6 @@ header-y += xt_mark.h
30header-y += xt_multiport.h 30header-y += xt_multiport.h
31header-y += xt_owner.h 31header-y += xt_owner.h
32header-y += xt_pkttype.h 32header-y += xt_pkttype.h
33header-y += xt_policy.h
34header-y += xt_rateest.h 33header-y += xt_rateest.h
35header-y += xt_realm.h 34header-y += xt_realm.h
36header-y += xt_sctp.h 35header-y += xt_sctp.h
@@ -47,3 +46,4 @@ unifdef-y += nfnetlink.h
47unifdef-y += nfnetlink_compat.h 46unifdef-y += nfnetlink_compat.h
48unifdef-y += x_tables.h 47unifdef-y += x_tables.h
49unifdef-y += xt_physdev.h 48unifdef-y += xt_physdev.h
49unifdef-y += xt_policy.h
diff --git a/include/linux/netfilter/xt_hashlimit.h b/include/linux/netfilter/xt_hashlimit.h
index 58b818ee41ca..51b18d83b477 100644
--- a/include/linux/netfilter/xt_hashlimit.h
+++ b/include/linux/netfilter/xt_hashlimit.h
@@ -61,7 +61,6 @@ struct xt_hashlimit_mtinfo1 {
61 61
62 /* Used internally by the kernel */ 62 /* Used internally by the kernel */
63 struct xt_hashlimit_htable *hinfo __attribute__((aligned(8))); 63 struct xt_hashlimit_htable *hinfo __attribute__((aligned(8)));
64 struct xt_hashlimit_mtinfo1 *master __attribute__((aligned(8)));
65}; 64};
66 65
67#endif /*_XT_HASHLIMIT_H*/ 66#endif /*_XT_HASHLIMIT_H*/
diff --git a/include/linux/page-flags.h b/include/linux/page-flags.h
index bbad43fb8181..b5b30f1c1e59 100644
--- a/include/linux/page-flags.h
+++ b/include/linux/page-flags.h
@@ -266,7 +266,7 @@ static inline void SetPageUptodate(struct page *page)
266 266
267#define PG_head_tail_mask ((1L << PG_compound) | (1L << PG_reclaim)) 267#define PG_head_tail_mask ((1L << PG_compound) | (1L << PG_reclaim))
268 268
269#define PageTail(page) ((page->flags & PG_head_tail_mask) \ 269#define PageTail(page) (((page)->flags & PG_head_tail_mask) \
270 == PG_head_tail_mask) 270 == PG_head_tail_mask)
271 271
272static inline void __SetPageTail(struct page *page) 272static inline void __SetPageTail(struct page *page)
@@ -279,7 +279,7 @@ static inline void __ClearPageTail(struct page *page)
279 page->flags &= ~PG_head_tail_mask; 279 page->flags &= ~PG_head_tail_mask;
280} 280}
281 281
282#define PageHead(page) ((page->flags & PG_head_tail_mask) \ 282#define PageHead(page) (((page)->flags & PG_head_tail_mask) \
283 == (1L << PG_compound)) 283 == (1L << PG_compound))
284#define __SetPageHead(page) __SetPageCompound(page) 284#define __SetPageHead(page) __SetPageCompound(page)
285#define __ClearPageHead(page) __ClearPageCompound(page) 285#define __ClearPageHead(page) __ClearPageCompound(page)
diff --git a/include/linux/pci_ids.h b/include/linux/pci_ids.h
index df6dd79a0d3b..effdb558a588 100644
--- a/include/linux/pci_ids.h
+++ b/include/linux/pci_ids.h
@@ -1351,6 +1351,7 @@
1351#define PCI_DEVICE_ID_VIA_8231_4 0x8235 1351#define PCI_DEVICE_ID_VIA_8231_4 0x8235
1352#define PCI_DEVICE_ID_VIA_8365_1 0x8305 1352#define PCI_DEVICE_ID_VIA_8365_1 0x8305
1353#define PCI_DEVICE_ID_VIA_CX700 0x8324 1353#define PCI_DEVICE_ID_VIA_CX700 0x8324
1354#define PCI_DEVICE_ID_VIA_CX700_IDE 0x0581
1354#define PCI_DEVICE_ID_VIA_VX800 0x8353 1355#define PCI_DEVICE_ID_VIA_VX800 0x8353
1355#define PCI_DEVICE_ID_VIA_8371_1 0x8391 1356#define PCI_DEVICE_ID_VIA_8371_1 0x8391
1356#define PCI_DEVICE_ID_VIA_82C598_1 0x8598 1357#define PCI_DEVICE_ID_VIA_82C598_1 0x8598
@@ -2373,6 +2374,12 @@
2373#define PCI_DEVICE_ID_INTEL_MCH_PC1 0x359a 2374#define PCI_DEVICE_ID_INTEL_MCH_PC1 0x359a
2374#define PCI_DEVICE_ID_INTEL_E7525_MCH 0x359e 2375#define PCI_DEVICE_ID_INTEL_E7525_MCH 0x359e
2375#define PCI_DEVICE_ID_INTEL_IOAT_CNB 0x360b 2376#define PCI_DEVICE_ID_INTEL_IOAT_CNB 0x360b
2377#define PCI_DEVICE_ID_INTEL_ICH10_0 0x3a14
2378#define PCI_DEVICE_ID_INTEL_ICH10_1 0x3a16
2379#define PCI_DEVICE_ID_INTEL_ICH10_2 0x3a18
2380#define PCI_DEVICE_ID_INTEL_ICH10_3 0x3a1a
2381#define PCI_DEVICE_ID_INTEL_ICH10_4 0x3a30
2382#define PCI_DEVICE_ID_INTEL_ICH10_5 0x3a60
2376#define PCI_DEVICE_ID_INTEL_IOAT_SNB 0x402f 2383#define PCI_DEVICE_ID_INTEL_IOAT_SNB 0x402f
2377#define PCI_DEVICE_ID_INTEL_IOAT_SCNB 0x65ff 2384#define PCI_DEVICE_ID_INTEL_IOAT_SCNB 0x65ff
2378#define PCI_DEVICE_ID_INTEL_TOLAPAI_0 0x5031 2385#define PCI_DEVICE_ID_INTEL_TOLAPAI_0 0x5031
diff --git a/include/linux/pm.h b/include/linux/pm.h
index eccf59ea2a77..015b735811b4 100644
--- a/include/linux/pm.h
+++ b/include/linux/pm.h
@@ -143,6 +143,9 @@ typedef struct pm_message {
143 * the upcoming system state (such as PCI_D3hot), and enable 143 * the upcoming system state (such as PCI_D3hot), and enable
144 * wakeup events as appropriate. 144 * wakeup events as appropriate.
145 * 145 *
146 * HIBERNATE Enter a low power device state appropriate for the hibernation
147 * state (eg. ACPI S4) and enable wakeup events as appropriate.
148 *
146 * FREEZE Quiesce operations so that a consistent image can be saved; 149 * FREEZE Quiesce operations so that a consistent image can be saved;
147 * but do NOT otherwise enter a low power device state, and do 150 * but do NOT otherwise enter a low power device state, and do
148 * NOT emit system wakeup events. 151 * NOT emit system wakeup events.
@@ -166,11 +169,15 @@ typedef struct pm_message {
166#define PM_EVENT_ON 0 169#define PM_EVENT_ON 0
167#define PM_EVENT_FREEZE 1 170#define PM_EVENT_FREEZE 1
168#define PM_EVENT_SUSPEND 2 171#define PM_EVENT_SUSPEND 2
169#define PM_EVENT_PRETHAW 3 172#define PM_EVENT_HIBERNATE 4
173#define PM_EVENT_PRETHAW 8
174
175#define PM_EVENT_SLEEP (PM_EVENT_SUSPEND | PM_EVENT_HIBERNATE)
170 176
171#define PMSG_FREEZE ((struct pm_message){ .event = PM_EVENT_FREEZE, }) 177#define PMSG_FREEZE ((struct pm_message){ .event = PM_EVENT_FREEZE, })
172#define PMSG_PRETHAW ((struct pm_message){ .event = PM_EVENT_PRETHAW, }) 178#define PMSG_PRETHAW ((struct pm_message){ .event = PM_EVENT_PRETHAW, })
173#define PMSG_SUSPEND ((struct pm_message){ .event = PM_EVENT_SUSPEND, }) 179#define PMSG_SUSPEND ((struct pm_message){ .event = PM_EVENT_SUSPEND, })
180#define PMSG_HIBERNATE ((struct pm_message){ .event = PM_EVENT_HIBERNATE, })
174#define PMSG_ON ((struct pm_message){ .event = PM_EVENT_ON, }) 181#define PMSG_ON ((struct pm_message){ .event = PM_EVENT_ON, })
175 182
176struct dev_pm_info { 183struct dev_pm_info {
diff --git a/include/linux/skbuff.h b/include/linux/skbuff.h
index 412672a79e8a..bbd8d0027e2f 100644
--- a/include/linux/skbuff.h
+++ b/include/linux/skbuff.h
@@ -232,6 +232,8 @@ typedef unsigned char *sk_buff_data_t;
232 * @mark: Generic packet mark 232 * @mark: Generic packet mark
233 * @nfct: Associated connection, if any 233 * @nfct: Associated connection, if any
234 * @ipvs_property: skbuff is owned by ipvs 234 * @ipvs_property: skbuff is owned by ipvs
235 * @peeked: this packet has been seen already, so stats have been
236 * done for it, don't do them again
235 * @nf_trace: netfilter packet trace flag 237 * @nf_trace: netfilter packet trace flag
236 * @nfctinfo: Relationship of this skb to the connection 238 * @nfctinfo: Relationship of this skb to the connection
237 * @nfct_reasm: netfilter conntrack re-assembly pointer 239 * @nfct_reasm: netfilter conntrack re-assembly pointer
diff --git a/include/linux/ssb/ssb.h b/include/linux/ssb/ssb.h
index 9d5da8b2ccf9..20add65215af 100644
--- a/include/linux/ssb/ssb.h
+++ b/include/linux/ssb/ssb.h
@@ -282,6 +282,13 @@ struct ssb_bus {
282 struct ssb_boardinfo boardinfo; 282 struct ssb_boardinfo boardinfo;
283 /* Contents of the SPROM. */ 283 /* Contents of the SPROM. */
284 struct ssb_sprom sprom; 284 struct ssb_sprom sprom;
285 /* If the board has a cardbus slot, this is set to true. */
286 bool has_cardbus_slot;
287
288#ifdef CONFIG_SSB_EMBEDDED
289 /* Lock for GPIO register access. */
290 spinlock_t gpio_lock;
291#endif /* EMBEDDED */
285 292
286 /* Internal-only stuff follows. Do not touch. */ 293 /* Internal-only stuff follows. Do not touch. */
287 struct list_head list; 294 struct list_head list;
@@ -294,8 +301,13 @@ struct ssb_bus {
294 301
295/* The initialization-invariants. */ 302/* The initialization-invariants. */
296struct ssb_init_invariants { 303struct ssb_init_invariants {
304 /* Versioning information about the PCB. */
297 struct ssb_boardinfo boardinfo; 305 struct ssb_boardinfo boardinfo;
306 /* The SPROM information. That's either stored in an
307 * EEPROM or NVRAM on the board. */
298 struct ssb_sprom sprom; 308 struct ssb_sprom sprom;
309 /* If the board has a cardbus slot, this is set to true. */
310 bool has_cardbus_slot;
299}; 311};
300/* Type of function to fetch the invariants. */ 312/* Type of function to fetch the invariants. */
301typedef int (*ssb_invariants_func_t)(struct ssb_bus *bus, 313typedef int (*ssb_invariants_func_t)(struct ssb_bus *bus,
diff --git a/include/linux/ssb/ssb_driver_chipcommon.h b/include/linux/ssb/ssb_driver_chipcommon.h
index 4cb995494662..536851b946f6 100644
--- a/include/linux/ssb/ssb_driver_chipcommon.h
+++ b/include/linux/ssb/ssb_driver_chipcommon.h
@@ -51,9 +51,12 @@
51#define SSB_CHIPCO_CAP_JTAGM 0x00400000 /* JTAG master present */ 51#define SSB_CHIPCO_CAP_JTAGM 0x00400000 /* JTAG master present */
52#define SSB_CHIPCO_CAP_BROM 0x00800000 /* Internal boot ROM active */ 52#define SSB_CHIPCO_CAP_BROM 0x00800000 /* Internal boot ROM active */
53#define SSB_CHIPCO_CAP_64BIT 0x08000000 /* 64-bit Backplane */ 53#define SSB_CHIPCO_CAP_64BIT 0x08000000 /* 64-bit Backplane */
54#define SSB_CHIPCO_CAP_PMU 0x10000000 /* PMU available (rev >= 20) */
55#define SSB_CHIPCO_CAP_ECI 0x20000000 /* ECI available (rev >= 20) */
54#define SSB_CHIPCO_CORECTL 0x0008 56#define SSB_CHIPCO_CORECTL 0x0008
55#define SSB_CHIPCO_CORECTL_UARTCLK0 0x00000001 /* Drive UART with internal clock */ 57#define SSB_CHIPCO_CORECTL_UARTCLK0 0x00000001 /* Drive UART with internal clock */
56#define SSB_CHIPCO_CORECTL_SE 0x00000002 /* sync clk out enable (corerev >= 3) */ 58#define SSB_CHIPCO_CORECTL_SE 0x00000002 /* sync clk out enable (corerev >= 3) */
59#define SSB_CHIPCO_CORECTL_UARTCLKEN 0x00000008 /* UART clock enable (rev >= 21) */
57#define SSB_CHIPCO_BIST 0x000C 60#define SSB_CHIPCO_BIST 0x000C
58#define SSB_CHIPCO_OTPS 0x0010 /* OTP status */ 61#define SSB_CHIPCO_OTPS 0x0010 /* OTP status */
59#define SSB_CHIPCO_OTPS_PROGFAIL 0x80000000 62#define SSB_CHIPCO_OTPS_PROGFAIL 0x80000000
@@ -357,6 +360,11 @@ struct ssb_chipcommon {
357 u16 fast_pwrup_delay; 360 u16 fast_pwrup_delay;
358}; 361};
359 362
363static inline bool ssb_chipco_available(struct ssb_chipcommon *cc)
364{
365 return (cc->dev != NULL);
366}
367
360extern void ssb_chipcommon_init(struct ssb_chipcommon *cc); 368extern void ssb_chipcommon_init(struct ssb_chipcommon *cc);
361 369
362#include <linux/pm.h> 370#include <linux/pm.h>
@@ -382,11 +390,13 @@ extern void ssb_chipco_set_clockmode(struct ssb_chipcommon *cc,
382extern void ssb_chipco_watchdog_timer_set(struct ssb_chipcommon *cc, 390extern void ssb_chipco_watchdog_timer_set(struct ssb_chipcommon *cc,
383 u32 ticks); 391 u32 ticks);
384 392
393/* Chipcommon GPIO pin access. */
385u32 ssb_chipco_gpio_in(struct ssb_chipcommon *cc, u32 mask); 394u32 ssb_chipco_gpio_in(struct ssb_chipcommon *cc, u32 mask);
386 395u32 ssb_chipco_gpio_out(struct ssb_chipcommon *cc, u32 mask, u32 value);
387void ssb_chipco_gpio_out(struct ssb_chipcommon *cc, u32 mask, u32 value); 396u32 ssb_chipco_gpio_outen(struct ssb_chipcommon *cc, u32 mask, u32 value);
388 397u32 ssb_chipco_gpio_control(struct ssb_chipcommon *cc, u32 mask, u32 value);
389void ssb_chipco_gpio_outen(struct ssb_chipcommon *cc, u32 mask, u32 value); 398u32 ssb_chipco_gpio_intmask(struct ssb_chipcommon *cc, u32 mask, u32 value);
399u32 ssb_chipco_gpio_polarity(struct ssb_chipcommon *cc, u32 mask, u32 value);
390 400
391#ifdef CONFIG_SSB_SERIAL 401#ifdef CONFIG_SSB_SERIAL
392extern int ssb_chipco_serial_init(struct ssb_chipcommon *cc, 402extern int ssb_chipco_serial_init(struct ssb_chipcommon *cc,
diff --git a/include/linux/ssb/ssb_driver_extif.h b/include/linux/ssb/ssb_driver_extif.h
index a9164357b5ae..91161f0aa22b 100644
--- a/include/linux/ssb/ssb_driver_extif.h
+++ b/include/linux/ssb/ssb_driver_extif.h
@@ -171,11 +171,15 @@ extern void ssb_extif_get_clockcontrol(struct ssb_extif *extif,
171extern void ssb_extif_timing_init(struct ssb_extif *extif, 171extern void ssb_extif_timing_init(struct ssb_extif *extif,
172 unsigned long ns); 172 unsigned long ns);
173 173
174u32 ssb_extif_gpio_in(struct ssb_extif *extif, u32 mask); 174extern void ssb_extif_watchdog_timer_set(struct ssb_extif *extif,
175 175 u32 ticks);
176void ssb_extif_gpio_out(struct ssb_extif *extif, u32 mask, u32 value);
177 176
178void ssb_extif_gpio_outen(struct ssb_extif *extif, u32 mask, u32 value); 177/* Extif GPIO pin access */
178u32 ssb_extif_gpio_in(struct ssb_extif *extif, u32 mask);
179u32 ssb_extif_gpio_out(struct ssb_extif *extif, u32 mask, u32 value);
180u32 ssb_extif_gpio_outen(struct ssb_extif *extif, u32 mask, u32 value);
181u32 ssb_extif_gpio_polarity(struct ssb_extif *extif, u32 mask, u32 value);
182u32 ssb_extif_gpio_intmask(struct ssb_extif *extif, u32 mask, u32 value);
179 183
180#ifdef CONFIG_SSB_SERIAL 184#ifdef CONFIG_SSB_SERIAL
181extern int ssb_extif_serial_init(struct ssb_extif *extif, 185extern int ssb_extif_serial_init(struct ssb_extif *extif,
@@ -200,5 +204,11 @@ void ssb_extif_get_clockcontrol(struct ssb_extif *extif,
200{ 204{
201} 205}
202 206
207static inline
208void ssb_extif_watchdog_timer_set(struct ssb_extif *extif,
209 u32 ticks)
210{
211}
212
203#endif /* CONFIG_SSB_DRIVER_EXTIF */ 213#endif /* CONFIG_SSB_DRIVER_EXTIF */
204#endif /* LINUX_SSB_EXTIFCORE_H_ */ 214#endif /* LINUX_SSB_EXTIFCORE_H_ */
diff --git a/include/linux/ssb/ssb_driver_pci.h b/include/linux/ssb/ssb_driver_pci.h
index 9cfffb7b1a27..5e25bac4ed31 100644
--- a/include/linux/ssb/ssb_driver_pci.h
+++ b/include/linux/ssb/ssb_driver_pci.h
@@ -51,6 +51,11 @@
51#define SSB_PCICORE_SBTOPCI1_MASK 0xFC000000 51#define SSB_PCICORE_SBTOPCI1_MASK 0xFC000000
52#define SSB_PCICORE_SBTOPCI2 0x0108 /* Backplane to PCI translation 2 (sbtopci2) */ 52#define SSB_PCICORE_SBTOPCI2 0x0108 /* Backplane to PCI translation 2 (sbtopci2) */
53#define SSB_PCICORE_SBTOPCI2_MASK 0xC0000000 53#define SSB_PCICORE_SBTOPCI2_MASK 0xC0000000
54#define SSB_PCICORE_PCICFG0 0x0400 /* PCI config space 0 (rev >= 8) */
55#define SSB_PCICORE_PCICFG1 0x0500 /* PCI config space 1 (rev >= 8) */
56#define SSB_PCICORE_PCICFG2 0x0600 /* PCI config space 2 (rev >= 8) */
57#define SSB_PCICORE_PCICFG3 0x0700 /* PCI config space 3 (rev >= 8) */
58#define SSB_PCICORE_SPROM(wordoffset) (0x0800 + ((wordoffset) * 2)) /* SPROM shadow area (72 bytes) */
54 59
55/* SBtoPCIx */ 60/* SBtoPCIx */
56#define SSB_PCICORE_SBTOPCI_MEM 0x00000000 61#define SSB_PCICORE_SBTOPCI_MEM 0x00000000
diff --git a/include/linux/ssb/ssb_embedded.h b/include/linux/ssb/ssb_embedded.h
new file mode 100644
index 000000000000..8d8dedff059d
--- /dev/null
+++ b/include/linux/ssb/ssb_embedded.h
@@ -0,0 +1,18 @@
1#ifndef LINUX_SSB_EMBEDDED_H_
2#define LINUX_SSB_EMBEDDED_H_
3
4#include <linux/types.h>
5#include <linux/ssb/ssb.h>
6
7
8extern int ssb_watchdog_timer_set(struct ssb_bus *bus, u32 ticks);
9
10/* Generic GPIO API */
11u32 ssb_gpio_in(struct ssb_bus *bus, u32 mask);
12u32 ssb_gpio_out(struct ssb_bus *bus, u32 mask, u32 value);
13u32 ssb_gpio_outen(struct ssb_bus *bus, u32 mask, u32 value);
14u32 ssb_gpio_control(struct ssb_bus *bus, u32 mask, u32 value);
15u32 ssb_gpio_intmask(struct ssb_bus *bus, u32 mask, u32 value);
16u32 ssb_gpio_polarity(struct ssb_bus *bus, u32 mask, u32 value);
17
18#endif /* LINUX_SSB_EMBEDDED_H_ */
diff --git a/include/linux/videodev.h b/include/linux/videodev.h
index 52e3d5fd5be4..9385a566aed8 100644
--- a/include/linux/videodev.h
+++ b/include/linux/videodev.h
@@ -12,6 +12,7 @@
12#ifndef __LINUX_VIDEODEV_H 12#ifndef __LINUX_VIDEODEV_H
13#define __LINUX_VIDEODEV_H 13#define __LINUX_VIDEODEV_H
14 14
15#include <linux/ioctl.h>
15#include <linux/videodev2.h> 16#include <linux/videodev2.h>
16 17
17#if defined(CONFIG_VIDEO_V4L1_COMPAT) || !defined (__KERNEL__) 18#if defined(CONFIG_VIDEO_V4L1_COMPAT) || !defined (__KERNEL__)
diff --git a/include/linux/videodev2.h b/include/linux/videodev2.h
index 439474f24e34..17a80177a674 100644
--- a/include/linux/videodev2.h
+++ b/include/linux/videodev2.h
@@ -62,6 +62,7 @@
62#define __user 62#define __user
63#include <sys/time.h> 63#include <sys/time.h>
64#endif 64#endif
65#include <linux/ioctl.h>
65#include <linux/types.h> 66#include <linux/types.h>
66 67
67/* 68/*
diff --git a/include/media/ir-common.h b/include/media/ir-common.h
index 831547d79683..a4274203f252 100644
--- a/include/media/ir-common.h
+++ b/include/media/ir-common.h
@@ -142,6 +142,7 @@ extern IR_KEYTAB_TYPE ir_codes_tt_1500[IR_KEYTAB_SIZE];
142extern IR_KEYTAB_TYPE ir_codes_fusionhdtv_mce[IR_KEYTAB_SIZE]; 142extern IR_KEYTAB_TYPE ir_codes_fusionhdtv_mce[IR_KEYTAB_SIZE];
143extern IR_KEYTAB_TYPE ir_codes_behold[IR_KEYTAB_SIZE]; 143extern IR_KEYTAB_TYPE ir_codes_behold[IR_KEYTAB_SIZE];
144extern IR_KEYTAB_TYPE ir_codes_pinnacle_pctv_hd[IR_KEYTAB_SIZE]; 144extern IR_KEYTAB_TYPE ir_codes_pinnacle_pctv_hd[IR_KEYTAB_SIZE];
145extern IR_KEYTAB_TYPE ir_codes_genius_tvgo_a11mce[IR_KEYTAB_SIZE];
145 146
146#endif 147#endif
147 148
diff --git a/include/media/v4l2-common.h b/include/media/v4l2-common.h
index 475d0d8275e0..316a58453134 100644
--- a/include/media/v4l2-common.h
+++ b/include/media/v4l2-common.h
@@ -61,8 +61,6 @@
61 v4l_client_printk(KERN_DEBUG, client, fmt , ## arg); \ 61 v4l_client_printk(KERN_DEBUG, client, fmt , ## arg); \
62 } while (0) 62 } while (0)
63 63
64/* Prints the ioctl in a human-readable format */
65extern void v4l_printk_ioctl(unsigned int cmd);
66 64
67/* Use this macro for non-I2C drivers. Pass the driver name as the first arg. */ 65/* Use this macro for non-I2C drivers. Pass the driver name as the first arg. */
68#define v4l_print_ioctl(name, cmd) \ 66#define v4l_print_ioctl(name, cmd) \
diff --git a/include/media/v4l2-dev.h b/include/media/v4l2-dev.h
index c544c6f90893..f2114459995d 100644
--- a/include/media/v4l2-dev.h
+++ b/include/media/v4l2-dev.h
@@ -44,6 +44,8 @@ extern unsigned int v4l2_video_std_fps(struct v4l2_standard *vs);
44extern char *v4l2_norm_to_name(v4l2_std_id id); 44extern char *v4l2_norm_to_name(v4l2_std_id id);
45extern int v4l2_video_std_construct(struct v4l2_standard *vs, 45extern int v4l2_video_std_construct(struct v4l2_standard *vs,
46 int id, char *name); 46 int id, char *name);
47/* Prints the ioctl in a human-readable format */
48extern void v4l_printk_ioctl(unsigned int cmd);
47 49
48/* prority handling */ 50/* prority handling */
49struct v4l2_prio_state { 51struct v4l2_prio_state {
diff --git a/include/media/videobuf-core.h b/include/media/videobuf-core.h
index 97f14d469595..99033945cdee 100644
--- a/include/media/videobuf-core.h
+++ b/include/media/videobuf-core.h
@@ -149,7 +149,7 @@ struct videobuf_qtype_ops {
149}; 149};
150 150
151struct videobuf_queue { 151struct videobuf_queue {
152 struct mutex lock; 152 struct mutex vb_lock;
153 spinlock_t *irqlock; 153 spinlock_t *irqlock;
154 void *dev; /* on pci, points to struct pci_dev */ 154 void *dev; /* on pci, points to struct pci_dev */
155 155
diff --git a/include/media/videobuf-vmalloc.h b/include/media/videobuf-vmalloc.h
index 26a8958d23d1..ec63ab0fab93 100644
--- a/include/media/videobuf-vmalloc.h
+++ b/include/media/videobuf-vmalloc.h
@@ -17,7 +17,7 @@
17 17
18/* --------------------------------------------------------------------- */ 18/* --------------------------------------------------------------------- */
19 19
20struct videbuf_vmalloc_memory 20struct videobuf_vmalloc_memory
21{ 21{
22 u32 magic; 22 u32 magic;
23 23
diff --git a/include/net/ip6_tunnel.h b/include/net/ip6_tunnel.h
index c17fa1fdc356..6512d85f11b3 100644
--- a/include/net/ip6_tunnel.h
+++ b/include/net/ip6_tunnel.h
@@ -14,8 +14,6 @@
14/* capable of receiving packets */ 14/* capable of receiving packets */
15#define IP6_TNL_F_CAP_RCV 0x20000 15#define IP6_TNL_F_CAP_RCV 0x20000
16 16
17#define IP6_TNL_MAX 128
18
19/* IPv6 tunnel */ 17/* IPv6 tunnel */
20 18
21struct ip6_tnl { 19struct ip6_tnl {
diff --git a/include/net/sock.h b/include/net/sock.h
index 8a7889b35810..fd9876087651 100644
--- a/include/net/sock.h
+++ b/include/net/sock.h
@@ -180,6 +180,7 @@ struct sock_common {
180 * @sk_sndmsg_off: cached offset for sendmsg 180 * @sk_sndmsg_off: cached offset for sendmsg
181 * @sk_send_head: front of stuff to transmit 181 * @sk_send_head: front of stuff to transmit
182 * @sk_security: used by security modules 182 * @sk_security: used by security modules
183 * @sk_mark: generic packet mark
183 * @sk_write_pending: a write to stream socket waits to start 184 * @sk_write_pending: a write to stream socket waits to start
184 * @sk_state_change: callback to indicate change in the state of the sock 185 * @sk_state_change: callback to indicate change in the state of the sock
185 * @sk_data_ready: callback to indicate there is data to be processed 186 * @sk_data_ready: callback to indicate there is data to be processed
diff --git a/include/sound/opl3.h b/include/sound/opl3.h
index a0c5febdc4ea..6ba670707831 100644
--- a/include/sound/opl3.h
+++ b/include/sound/opl3.h
@@ -370,12 +370,13 @@ int snd_opl3_hwdep_new(struct snd_opl3 * opl3, int device, int seq_device,
370int snd_opl3_open(struct snd_hwdep * hw, struct file *file); 370int snd_opl3_open(struct snd_hwdep * hw, struct file *file);
371int snd_opl3_ioctl(struct snd_hwdep * hw, struct file *file, 371int snd_opl3_ioctl(struct snd_hwdep * hw, struct file *file,
372 unsigned int cmd, unsigned long arg); 372 unsigned int cmd, unsigned long arg);
373long snd_opl3_write(struct snd_hwdep *hw, const char __user *buf, long count,
374 loff_t *offset);
375int snd_opl3_release(struct snd_hwdep * hw, struct file *file); 373int snd_opl3_release(struct snd_hwdep * hw, struct file *file);
376 374
377void snd_opl3_reset(struct snd_opl3 * opl3); 375void snd_opl3_reset(struct snd_opl3 * opl3);
378 376
377#if defined(CONFIG_SND_SEQUENCER) || defined(CONFIG_SND_SEQUENCER_MODULE)
378long snd_opl3_write(struct snd_hwdep *hw, const char __user *buf, long count,
379 loff_t *offset);
379int snd_opl3_load_patch(struct snd_opl3 *opl3, 380int snd_opl3_load_patch(struct snd_opl3 *opl3,
380 int prog, int bank, int type, 381 int prog, int bank, int type,
381 const char *name, 382 const char *name,
@@ -384,5 +385,9 @@ int snd_opl3_load_patch(struct snd_opl3 *opl3,
384struct fm_patch *snd_opl3_find_patch(struct snd_opl3 *opl3, int prog, int bank, 385struct fm_patch *snd_opl3_find_patch(struct snd_opl3 *opl3, int prog, int bank,
385 int create_patch); 386 int create_patch);
386void snd_opl3_clear_patches(struct snd_opl3 *opl3); 387void snd_opl3_clear_patches(struct snd_opl3 *opl3);
388#else
389#define snd_opl3_write NULL
390static inline void snd_opl3_clear_patches(struct snd_opl3 *opl3) {}
391#endif
387 392
388#endif /* __SOUND_OPL3_H */ 393#endif /* __SOUND_OPL3_H */
diff --git a/init/Kconfig b/init/Kconfig
index dcef8b55011a..f698a5af5007 100644
--- a/init/Kconfig
+++ b/init/Kconfig
@@ -394,6 +394,14 @@ config CGROUP_MEM_CONT
394 Provides a memory controller that manages both page cache and 394 Provides a memory controller that manages both page cache and
395 RSS memory. 395 RSS memory.
396 396
397 Note that setting this option increases fixed memory overhead
398 associated with each page of memory in the system by 4/8 bytes
399 and also increases cache misses because struct page on many 64bit
400 systems will not fit into a single cache line anymore.
401
402 Only enable when you're ok with these trade offs and really
403 sure you need the memory controller.
404
397config PROC_PID_CPUSET 405config PROC_PID_CPUSET
398 bool "Include legacy /proc/<pid>/cpuset file" 406 bool "Include legacy /proc/<pid>/cpuset file"
399 depends on CPUSETS 407 depends on CPUSETS
diff --git a/kernel/auditsc.c b/kernel/auditsc.c
index ac6d9b23b018..2087d6de67ea 100644
--- a/kernel/auditsc.c
+++ b/kernel/auditsc.c
@@ -1000,9 +1000,10 @@ static int audit_log_single_execve_arg(struct audit_context *context,
1000 * for strings that are too long, we should not have created 1000 * for strings that are too long, we should not have created
1001 * any. 1001 * any.
1002 */ 1002 */
1003 if (unlikely((len = -1) || len > MAX_ARG_STRLEN - 1)) { 1003 if (unlikely((len == -1) || len > MAX_ARG_STRLEN - 1)) {
1004 WARN_ON(1); 1004 WARN_ON(1);
1005 send_sig(SIGKILL, current, 0); 1005 send_sig(SIGKILL, current, 0);
1006 return -1;
1006 } 1007 }
1007 1008
1008 /* walk the whole argument looking for non-ascii chars */ 1009 /* walk the whole argument looking for non-ascii chars */
@@ -1020,6 +1021,7 @@ static int audit_log_single_execve_arg(struct audit_context *context,
1020 if (ret) { 1021 if (ret) {
1021 WARN_ON(1); 1022 WARN_ON(1);
1022 send_sig(SIGKILL, current, 0); 1023 send_sig(SIGKILL, current, 0);
1024 return -1;
1023 } 1025 }
1024 buf[to_send] = '\0'; 1026 buf[to_send] = '\0';
1025 has_cntl = audit_string_contains_control(buf, to_send); 1027 has_cntl = audit_string_contains_control(buf, to_send);
@@ -1083,6 +1085,7 @@ static int audit_log_single_execve_arg(struct audit_context *context,
1083 if (ret) { 1085 if (ret) {
1084 WARN_ON(1); 1086 WARN_ON(1);
1085 send_sig(SIGKILL, current, 0); 1087 send_sig(SIGKILL, current, 0);
1088 return -1;
1086 } 1089 }
1087 buf[to_send] = '\0'; 1090 buf[to_send] = '\0';
1088 1091
diff --git a/kernel/cgroup.c b/kernel/cgroup.c
index 4766bb65e4d9..d8abe996e009 100644
--- a/kernel/cgroup.c
+++ b/kernel/cgroup.c
@@ -113,9 +113,9 @@ static int root_count;
113#define dummytop (&rootnode.top_cgroup) 113#define dummytop (&rootnode.top_cgroup)
114 114
115/* This flag indicates whether tasks in the fork and exit paths should 115/* This flag indicates whether tasks in the fork and exit paths should
116 * take callback_mutex and check for fork/exit handlers to call. This 116 * check for fork/exit handlers to call. This avoids us having to do
117 * avoids us having to do extra work in the fork/exit path if none of the 117 * extra work in the fork/exit path if none of the subsystems need to
118 * subsystems need to be called. 118 * be called.
119 */ 119 */
120static int need_forkexit_callback; 120static int need_forkexit_callback;
121 121
@@ -307,7 +307,6 @@ static inline void put_css_set_taskexit(struct css_set *cg)
307 * template: location in which to build the desired set of subsystem 307 * template: location in which to build the desired set of subsystem
308 * state objects for the new cgroup group 308 * state objects for the new cgroup group
309 */ 309 */
310
311static struct css_set *find_existing_css_set( 310static struct css_set *find_existing_css_set(
312 struct css_set *oldcg, 311 struct css_set *oldcg,
313 struct cgroup *cgrp, 312 struct cgroup *cgrp,
@@ -320,7 +319,7 @@ static struct css_set *find_existing_css_set(
320 /* Built the set of subsystem state objects that we want to 319 /* Built the set of subsystem state objects that we want to
321 * see in the new css_set */ 320 * see in the new css_set */
322 for (i = 0; i < CGROUP_SUBSYS_COUNT; i++) { 321 for (i = 0; i < CGROUP_SUBSYS_COUNT; i++) {
323 if (root->subsys_bits & (1ull << i)) { 322 if (root->subsys_bits & (1UL << i)) {
324 /* Subsystem is in this hierarchy. So we want 323 /* Subsystem is in this hierarchy. So we want
325 * the subsystem state from the new 324 * the subsystem state from the new
326 * cgroup */ 325 * cgroup */
@@ -354,7 +353,6 @@ static struct css_set *find_existing_css_set(
354 * and chains them on tmp through their cgrp_link_list fields. Returns 0 on 353 * and chains them on tmp through their cgrp_link_list fields. Returns 0 on
355 * success or a negative error 354 * success or a negative error
356 */ 355 */
357
358static int allocate_cg_links(int count, struct list_head *tmp) 356static int allocate_cg_links(int count, struct list_head *tmp)
359{ 357{
360 struct cg_cgroup_link *link; 358 struct cg_cgroup_link *link;
@@ -396,7 +394,6 @@ static void free_cg_links(struct list_head *tmp)
396 * substituted into the appropriate hierarchy. Must be called with 394 * substituted into the appropriate hierarchy. Must be called with
397 * cgroup_mutex held 395 * cgroup_mutex held
398 */ 396 */
399
400static struct css_set *find_css_set( 397static struct css_set *find_css_set(
401 struct css_set *oldcg, struct cgroup *cgrp) 398 struct css_set *oldcg, struct cgroup *cgrp)
402{ 399{
@@ -473,7 +470,6 @@ static struct css_set *find_css_set(
473 /* Link this cgroup group into the list */ 470 /* Link this cgroup group into the list */
474 list_add(&res->list, &init_css_set.list); 471 list_add(&res->list, &init_css_set.list);
475 css_set_count++; 472 css_set_count++;
476 INIT_LIST_HEAD(&res->tasks);
477 write_unlock(&css_set_lock); 473 write_unlock(&css_set_lock);
478 474
479 return res; 475 return res;
@@ -507,8 +503,8 @@ static struct css_set *find_css_set(
507 * critical pieces of code here. The exception occurs on cgroup_exit(), 503 * critical pieces of code here. The exception occurs on cgroup_exit(),
508 * when a task in a notify_on_release cgroup exits. Then cgroup_mutex 504 * when a task in a notify_on_release cgroup exits. Then cgroup_mutex
509 * is taken, and if the cgroup count is zero, a usermode call made 505 * is taken, and if the cgroup count is zero, a usermode call made
510 * to /sbin/cgroup_release_agent with the name of the cgroup (path 506 * to the release agent with the name of the cgroup (path relative to
511 * relative to the root of cgroup file system) as the argument. 507 * the root of cgroup file system) as the argument.
512 * 508 *
513 * A cgroup can only be deleted if both its 'count' of using tasks 509 * A cgroup can only be deleted if both its 'count' of using tasks
514 * is zero, and its list of 'children' cgroups is empty. Since all 510 * is zero, and its list of 'children' cgroups is empty. Since all
@@ -521,7 +517,7 @@ static struct css_set *find_css_set(
521 * 517 *
522 * The need for this exception arises from the action of 518 * The need for this exception arises from the action of
523 * cgroup_attach_task(), which overwrites one tasks cgroup pointer with 519 * cgroup_attach_task(), which overwrites one tasks cgroup pointer with
524 * another. It does so using cgroup_mutexe, however there are 520 * another. It does so using cgroup_mutex, however there are
525 * several performance critical places that need to reference 521 * several performance critical places that need to reference
526 * task->cgroup without the expense of grabbing a system global 522 * task->cgroup without the expense of grabbing a system global
527 * mutex. Therefore except as noted below, when dereferencing or, as 523 * mutex. Therefore except as noted below, when dereferencing or, as
@@ -537,7 +533,6 @@ static struct css_set *find_css_set(
537 * cgroup_lock - lock out any changes to cgroup structures 533 * cgroup_lock - lock out any changes to cgroup structures
538 * 534 *
539 */ 535 */
540
541void cgroup_lock(void) 536void cgroup_lock(void)
542{ 537{
543 mutex_lock(&cgroup_mutex); 538 mutex_lock(&cgroup_mutex);
@@ -548,7 +543,6 @@ void cgroup_lock(void)
548 * 543 *
549 * Undo the lock taken in a previous cgroup_lock() call. 544 * Undo the lock taken in a previous cgroup_lock() call.
550 */ 545 */
551
552void cgroup_unlock(void) 546void cgroup_unlock(void)
553{ 547{
554 mutex_unlock(&cgroup_mutex); 548 mutex_unlock(&cgroup_mutex);
@@ -590,7 +584,6 @@ static struct inode *cgroup_new_inode(mode_t mode, struct super_block *sb)
590 * Call subsys's pre_destroy handler. 584 * Call subsys's pre_destroy handler.
591 * This is called before css refcnt check. 585 * This is called before css refcnt check.
592 */ 586 */
593
594static void cgroup_call_pre_destroy(struct cgroup *cgrp) 587static void cgroup_call_pre_destroy(struct cgroup *cgrp)
595{ 588{
596 struct cgroup_subsys *ss; 589 struct cgroup_subsys *ss;
@@ -600,7 +593,6 @@ static void cgroup_call_pre_destroy(struct cgroup *cgrp)
600 return; 593 return;
601} 594}
602 595
603
604static void cgroup_diput(struct dentry *dentry, struct inode *inode) 596static void cgroup_diput(struct dentry *dentry, struct inode *inode)
605{ 597{
606 /* is dentry a directory ? if so, kfree() associated cgroup */ 598 /* is dentry a directory ? if so, kfree() associated cgroup */
@@ -696,7 +688,7 @@ static int rebind_subsystems(struct cgroupfs_root *root,
696 added_bits = final_bits & ~root->actual_subsys_bits; 688 added_bits = final_bits & ~root->actual_subsys_bits;
697 /* Check that any added subsystems are currently free */ 689 /* Check that any added subsystems are currently free */
698 for (i = 0; i < CGROUP_SUBSYS_COUNT; i++) { 690 for (i = 0; i < CGROUP_SUBSYS_COUNT; i++) {
699 unsigned long long bit = 1ull << i; 691 unsigned long bit = 1UL << i;
700 struct cgroup_subsys *ss = subsys[i]; 692 struct cgroup_subsys *ss = subsys[i];
701 if (!(bit & added_bits)) 693 if (!(bit & added_bits))
702 continue; 694 continue;
@@ -927,7 +919,6 @@ static int cgroup_get_rootdir(struct super_block *sb)
927 if (!inode) 919 if (!inode)
928 return -ENOMEM; 920 return -ENOMEM;
929 921
930 inode->i_op = &simple_dir_inode_operations;
931 inode->i_fop = &simple_dir_operations; 922 inode->i_fop = &simple_dir_operations;
932 inode->i_op = &cgroup_dir_inode_operations; 923 inode->i_op = &cgroup_dir_inode_operations;
933 /* directories start off with i_nlink == 2 (for "." entry) */ 924 /* directories start off with i_nlink == 2 (for "." entry) */
@@ -961,8 +952,11 @@ static int cgroup_get_sb(struct file_system_type *fs_type,
961 } 952 }
962 953
963 root = kzalloc(sizeof(*root), GFP_KERNEL); 954 root = kzalloc(sizeof(*root), GFP_KERNEL);
964 if (!root) 955 if (!root) {
956 if (opts.release_agent)
957 kfree(opts.release_agent);
965 return -ENOMEM; 958 return -ENOMEM;
959 }
966 960
967 init_cgroup_root(root); 961 init_cgroup_root(root);
968 root->subsys_bits = opts.subsys_bits; 962 root->subsys_bits = opts.subsys_bits;
@@ -1129,8 +1123,13 @@ static inline struct cftype *__d_cft(struct dentry *dentry)
1129 return dentry->d_fsdata; 1123 return dentry->d_fsdata;
1130} 1124}
1131 1125
1132/* 1126/**
1133 * Called with cgroup_mutex held. Writes path of cgroup into buf. 1127 * cgroup_path - generate the path of a cgroup
1128 * @cgrp: the cgroup in question
1129 * @buf: the buffer to write the path into
1130 * @buflen: the length of the buffer
1131 *
1132 * Called with cgroup_mutex held. Writes path of cgroup into buf.
1134 * Returns 0 on success, -errno on error. 1133 * Returns 0 on success, -errno on error.
1135 */ 1134 */
1136int cgroup_path(const struct cgroup *cgrp, char *buf, int buflen) 1135int cgroup_path(const struct cgroup *cgrp, char *buf, int buflen)
@@ -1188,11 +1187,13 @@ static void get_first_subsys(const struct cgroup *cgrp,
1188 *subsys_id = test_ss->subsys_id; 1187 *subsys_id = test_ss->subsys_id;
1189} 1188}
1190 1189
1191/* 1190/**
1192 * Attach task 'tsk' to cgroup 'cgrp' 1191 * cgroup_attach_task - attach task 'tsk' to cgroup 'cgrp'
1192 * @cgrp: the cgroup the task is attaching to
1193 * @tsk: the task to be attached
1193 * 1194 *
1194 * Call holding cgroup_mutex. May take task_lock of 1195 * Call holding cgroup_mutex. May take task_lock of
1195 * the task 'pid' during call. 1196 * the task 'tsk' during call.
1196 */ 1197 */
1197int cgroup_attach_task(struct cgroup *cgrp, struct task_struct *tsk) 1198int cgroup_attach_task(struct cgroup *cgrp, struct task_struct *tsk)
1198{ 1199{
@@ -1293,7 +1294,6 @@ static int attach_task_by_pid(struct cgroup *cgrp, char *pidbuf)
1293} 1294}
1294 1295
1295/* The various types of files and directories in a cgroup file system */ 1296/* The various types of files and directories in a cgroup file system */
1296
1297enum cgroup_filetype { 1297enum cgroup_filetype {
1298 FILE_ROOT, 1298 FILE_ROOT,
1299 FILE_DIR, 1299 FILE_DIR,
@@ -1584,12 +1584,11 @@ static int cgroup_create_file(struct dentry *dentry, int mode,
1584} 1584}
1585 1585
1586/* 1586/*
1587 * cgroup_create_dir - create a directory for an object. 1587 * cgroup_create_dir - create a directory for an object.
1588 * cgrp: the cgroup we create the directory for. 1588 * @cgrp: the cgroup we create the directory for. It must have a valid
1589 * It must have a valid ->parent field 1589 * ->parent field. And we are going to fill its ->dentry field.
1590 * And we are going to fill its ->dentry field. 1590 * @dentry: dentry of the new cgroup
1591 * dentry: dentry of the new cgroup 1591 * @mode: mode to set on new directory.
1592 * mode: mode to set on new directory.
1593 */ 1592 */
1594static int cgroup_create_dir(struct cgroup *cgrp, struct dentry *dentry, 1593static int cgroup_create_dir(struct cgroup *cgrp, struct dentry *dentry,
1595 int mode) 1594 int mode)
@@ -1651,8 +1650,12 @@ int cgroup_add_files(struct cgroup *cgrp,
1651 return 0; 1650 return 0;
1652} 1651}
1653 1652
1654/* Count the number of tasks in a cgroup. */ 1653/**
1655 1654 * cgroup_task_count - count the number of tasks in a cgroup.
1655 * @cgrp: the cgroup in question
1656 *
1657 * Return the number of tasks in the cgroup.
1658 */
1656int cgroup_task_count(const struct cgroup *cgrp) 1659int cgroup_task_count(const struct cgroup *cgrp)
1657{ 1660{
1658 int count = 0; 1661 int count = 0;
@@ -1962,12 +1965,13 @@ static int pid_array_load(pid_t *pidarray, int npids, struct cgroup *cgrp)
1962} 1965}
1963 1966
1964/** 1967/**
1965 * Build and fill cgroupstats so that taskstats can export it to user 1968 * cgroupstats_build - build and fill cgroupstats
1966 * space.
1967 *
1968 * @stats: cgroupstats to fill information into 1969 * @stats: cgroupstats to fill information into
1969 * @dentry: A dentry entry belonging to the cgroup for which stats have 1970 * @dentry: A dentry entry belonging to the cgroup for which stats have
1970 * been requested. 1971 * been requested.
1972 *
1973 * Build and fill cgroupstats so that taskstats can export it to user
1974 * space.
1971 */ 1975 */
1972int cgroupstats_build(struct cgroupstats *stats, struct dentry *dentry) 1976int cgroupstats_build(struct cgroupstats *stats, struct dentry *dentry)
1973{ 1977{
@@ -2199,14 +2203,13 @@ static void init_cgroup_css(struct cgroup_subsys_state *css,
2199} 2203}
2200 2204
2201/* 2205/*
2202 * cgroup_create - create a cgroup 2206 * cgroup_create - create a cgroup
2203 * parent: cgroup that will be parent of the new cgroup. 2207 * @parent: cgroup that will be parent of the new cgroup
2204 * name: name of the new cgroup. Will be strcpy'ed. 2208 * @dentry: dentry of the new cgroup
2205 * mode: mode to set on new inode 2209 * @mode: mode to set on new inode
2206 * 2210 *
2207 * Must be called with the mutex on the parent inode held 2211 * Must be called with the mutex on the parent inode held
2208 */ 2212 */
2209
2210static long cgroup_create(struct cgroup *parent, struct dentry *dentry, 2213static long cgroup_create(struct cgroup *parent, struct dentry *dentry,
2211 int mode) 2214 int mode)
2212{ 2215{
@@ -2349,13 +2352,12 @@ static int cgroup_rmdir(struct inode *unused_dir, struct dentry *dentry)
2349 parent = cgrp->parent; 2352 parent = cgrp->parent;
2350 root = cgrp->root; 2353 root = cgrp->root;
2351 sb = root->sb; 2354 sb = root->sb;
2355
2352 /* 2356 /*
2353 * Call pre_destroy handlers of subsys 2357 * Call pre_destroy handlers of subsys. Notify subsystems
2358 * that rmdir() request comes.
2354 */ 2359 */
2355 cgroup_call_pre_destroy(cgrp); 2360 cgroup_call_pre_destroy(cgrp);
2356 /*
2357 * Notify subsyses that rmdir() request comes.
2358 */
2359 2361
2360 if (cgroup_has_css_refs(cgrp)) { 2362 if (cgroup_has_css_refs(cgrp)) {
2361 mutex_unlock(&cgroup_mutex); 2363 mutex_unlock(&cgroup_mutex);
@@ -2431,8 +2433,10 @@ static void cgroup_init_subsys(struct cgroup_subsys *ss)
2431} 2433}
2432 2434
2433/** 2435/**
2434 * cgroup_init_early - initialize cgroups at system boot, and 2436 * cgroup_init_early - cgroup initialization at system boot
2435 * initialize any subsystems that request early init. 2437 *
2438 * Initialize cgroups at system boot, and initialize any
2439 * subsystems that request early init.
2436 */ 2440 */
2437int __init cgroup_init_early(void) 2441int __init cgroup_init_early(void)
2438{ 2442{
@@ -2474,8 +2478,10 @@ int __init cgroup_init_early(void)
2474} 2478}
2475 2479
2476/** 2480/**
2477 * cgroup_init - register cgroup filesystem and /proc file, and 2481 * cgroup_init - cgroup initialization
2478 * initialize any subsystems that didn't request early init. 2482 *
2483 * Register cgroup filesystem and /proc file, and initialize
2484 * any subsystems that didn't request early init.
2479 */ 2485 */
2480int __init cgroup_init(void) 2486int __init cgroup_init(void)
2481{ 2487{
@@ -2618,7 +2624,7 @@ static struct file_operations proc_cgroupstats_operations = {
2618 2624
2619/** 2625/**
2620 * cgroup_fork - attach newly forked task to its parents cgroup. 2626 * cgroup_fork - attach newly forked task to its parents cgroup.
2621 * @tsk: pointer to task_struct of forking parent process. 2627 * @child: pointer to task_struct of forking parent process.
2622 * 2628 *
2623 * Description: A task inherits its parent's cgroup at fork(). 2629 * Description: A task inherits its parent's cgroup at fork().
2624 * 2630 *
@@ -2642,9 +2648,12 @@ void cgroup_fork(struct task_struct *child)
2642} 2648}
2643 2649
2644/** 2650/**
2645 * cgroup_fork_callbacks - called on a new task very soon before 2651 * cgroup_fork_callbacks - run fork callbacks
2646 * adding it to the tasklist. No need to take any locks since no-one 2652 * @child: the new task
2647 * can be operating on this task 2653 *
2654 * Called on a new task very soon before adding it to the
2655 * tasklist. No need to take any locks since no-one can
2656 * be operating on this task.
2648 */ 2657 */
2649void cgroup_fork_callbacks(struct task_struct *child) 2658void cgroup_fork_callbacks(struct task_struct *child)
2650{ 2659{
@@ -2659,11 +2668,14 @@ void cgroup_fork_callbacks(struct task_struct *child)
2659} 2668}
2660 2669
2661/** 2670/**
2662 * cgroup_post_fork - called on a new task after adding it to the 2671 * cgroup_post_fork - called on a new task after adding it to the task list
2663 * task list. Adds the task to the list running through its css_set 2672 * @child: the task in question
2664 * if necessary. Has to be after the task is visible on the task list 2673 *
2665 * in case we race with the first call to cgroup_iter_start() - to 2674 * Adds the task to the list running through its css_set if necessary.
2666 * guarantee that the new task ends up on its list. */ 2675 * Has to be after the task is visible on the task list in case we race
2676 * with the first call to cgroup_iter_start() - to guarantee that the
2677 * new task ends up on its list.
2678 */
2667void cgroup_post_fork(struct task_struct *child) 2679void cgroup_post_fork(struct task_struct *child)
2668{ 2680{
2669 if (use_task_css_set_links) { 2681 if (use_task_css_set_links) {
@@ -2676,6 +2688,7 @@ void cgroup_post_fork(struct task_struct *child)
2676/** 2688/**
2677 * cgroup_exit - detach cgroup from exiting task 2689 * cgroup_exit - detach cgroup from exiting task
2678 * @tsk: pointer to task_struct of exiting process 2690 * @tsk: pointer to task_struct of exiting process
2691 * @run_callback: run exit callbacks?
2679 * 2692 *
2680 * Description: Detach cgroup from @tsk and release it. 2693 * Description: Detach cgroup from @tsk and release it.
2681 * 2694 *
@@ -2706,7 +2719,6 @@ void cgroup_post_fork(struct task_struct *child)
2706 * top_cgroup isn't going away, and either task has PF_EXITING set, 2719 * top_cgroup isn't going away, and either task has PF_EXITING set,
2707 * which wards off any cgroup_attach_task() attempts, or task is a failed 2720 * which wards off any cgroup_attach_task() attempts, or task is a failed
2708 * fork, never visible to cgroup_attach_task. 2721 * fork, never visible to cgroup_attach_task.
2709 *
2710 */ 2722 */
2711void cgroup_exit(struct task_struct *tsk, int run_callbacks) 2723void cgroup_exit(struct task_struct *tsk, int run_callbacks)
2712{ 2724{
@@ -2743,9 +2755,13 @@ void cgroup_exit(struct task_struct *tsk, int run_callbacks)
2743} 2755}
2744 2756
2745/** 2757/**
2746 * cgroup_clone - duplicate the current cgroup in the hierarchy 2758 * cgroup_clone - clone the cgroup the given subsystem is attached to
2747 * that the given subsystem is attached to, and move this task into 2759 * @tsk: the task to be moved
2748 * the new child 2760 * @subsys: the given subsystem
2761 *
2762 * Duplicate the current cgroup in the hierarchy that the given
2763 * subsystem is attached to, and move this task into the new
2764 * child.
2749 */ 2765 */
2750int cgroup_clone(struct task_struct *tsk, struct cgroup_subsys *subsys) 2766int cgroup_clone(struct task_struct *tsk, struct cgroup_subsys *subsys)
2751{ 2767{
@@ -2858,9 +2874,12 @@ int cgroup_clone(struct task_struct *tsk, struct cgroup_subsys *subsys)
2858 return ret; 2874 return ret;
2859} 2875}
2860 2876
2861/* 2877/**
2862 * See if "cgrp" is a descendant of the current task's cgroup in 2878 * cgroup_is_descendant - see if @cgrp is a descendant of current task's cgrp
2863 * the appropriate hierarchy 2879 * @cgrp: the cgroup in question
2880 *
2881 * See if @cgrp is a descendant of the current task's cgroup in
2882 * the appropriate hierarchy.
2864 * 2883 *
2865 * If we are sending in dummytop, then presumably we are creating 2884 * If we are sending in dummytop, then presumably we are creating
2866 * the top cgroup in the subsystem. 2885 * the top cgroup in the subsystem.
@@ -2939,9 +2958,7 @@ void __css_put(struct cgroup_subsys_state *css)
2939 * release agent task. We don't bother to wait because the caller of 2958 * release agent task. We don't bother to wait because the caller of
2940 * this routine has no use for the exit status of the release agent 2959 * this routine has no use for the exit status of the release agent
2941 * task, so no sense holding our caller up for that. 2960 * task, so no sense holding our caller up for that.
2942 *
2943 */ 2961 */
2944
2945static void cgroup_release_agent(struct work_struct *work) 2962static void cgroup_release_agent(struct work_struct *work)
2946{ 2963{
2947 BUG_ON(work != &release_agent_work); 2964 BUG_ON(work != &release_agent_work);
diff --git a/kernel/futex.c b/kernel/futex.c
index 221f2128a437..06968cd79200 100644
--- a/kernel/futex.c
+++ b/kernel/futex.c
@@ -60,6 +60,8 @@
60 60
61#include "rtmutex_common.h" 61#include "rtmutex_common.h"
62 62
63int __read_mostly futex_cmpxchg_enabled;
64
63#define FUTEX_HASHBITS (CONFIG_BASE_SMALL ? 4 : 8) 65#define FUTEX_HASHBITS (CONFIG_BASE_SMALL ? 4 : 8)
64 66
65/* 67/*
@@ -469,6 +471,8 @@ void exit_pi_state_list(struct task_struct *curr)
469 struct futex_hash_bucket *hb; 471 struct futex_hash_bucket *hb;
470 union futex_key key; 472 union futex_key key;
471 473
474 if (!futex_cmpxchg_enabled)
475 return;
472 /* 476 /*
473 * We are a ZOMBIE and nobody can enqueue itself on 477 * We are a ZOMBIE and nobody can enqueue itself on
474 * pi_state_list anymore, but we have to be careful 478 * pi_state_list anymore, but we have to be careful
@@ -1870,6 +1874,8 @@ asmlinkage long
1870sys_set_robust_list(struct robust_list_head __user *head, 1874sys_set_robust_list(struct robust_list_head __user *head,
1871 size_t len) 1875 size_t len)
1872{ 1876{
1877 if (!futex_cmpxchg_enabled)
1878 return -ENOSYS;
1873 /* 1879 /*
1874 * The kernel knows only one size for now: 1880 * The kernel knows only one size for now:
1875 */ 1881 */
@@ -1894,6 +1900,9 @@ sys_get_robust_list(int pid, struct robust_list_head __user * __user *head_ptr,
1894 struct robust_list_head __user *head; 1900 struct robust_list_head __user *head;
1895 unsigned long ret; 1901 unsigned long ret;
1896 1902
1903 if (!futex_cmpxchg_enabled)
1904 return -ENOSYS;
1905
1897 if (!pid) 1906 if (!pid)
1898 head = current->robust_list; 1907 head = current->robust_list;
1899 else { 1908 else {
@@ -1997,6 +2006,9 @@ void exit_robust_list(struct task_struct *curr)
1997 unsigned long futex_offset; 2006 unsigned long futex_offset;
1998 int rc; 2007 int rc;
1999 2008
2009 if (!futex_cmpxchg_enabled)
2010 return;
2011
2000 /* 2012 /*
2001 * Fetch the list head (which was registered earlier, via 2013 * Fetch the list head (which was registered earlier, via
2002 * sys_set_robust_list()): 2014 * sys_set_robust_list()):
@@ -2051,7 +2063,7 @@ void exit_robust_list(struct task_struct *curr)
2051long do_futex(u32 __user *uaddr, int op, u32 val, ktime_t *timeout, 2063long do_futex(u32 __user *uaddr, int op, u32 val, ktime_t *timeout,
2052 u32 __user *uaddr2, u32 val2, u32 val3) 2064 u32 __user *uaddr2, u32 val2, u32 val3)
2053{ 2065{
2054 int ret; 2066 int ret = -ENOSYS;
2055 int cmd = op & FUTEX_CMD_MASK; 2067 int cmd = op & FUTEX_CMD_MASK;
2056 struct rw_semaphore *fshared = NULL; 2068 struct rw_semaphore *fshared = NULL;
2057 2069
@@ -2083,13 +2095,16 @@ long do_futex(u32 __user *uaddr, int op, u32 val, ktime_t *timeout,
2083 ret = futex_wake_op(uaddr, fshared, uaddr2, val, val2, val3); 2095 ret = futex_wake_op(uaddr, fshared, uaddr2, val, val2, val3);
2084 break; 2096 break;
2085 case FUTEX_LOCK_PI: 2097 case FUTEX_LOCK_PI:
2086 ret = futex_lock_pi(uaddr, fshared, val, timeout, 0); 2098 if (futex_cmpxchg_enabled)
2099 ret = futex_lock_pi(uaddr, fshared, val, timeout, 0);
2087 break; 2100 break;
2088 case FUTEX_UNLOCK_PI: 2101 case FUTEX_UNLOCK_PI:
2089 ret = futex_unlock_pi(uaddr, fshared); 2102 if (futex_cmpxchg_enabled)
2103 ret = futex_unlock_pi(uaddr, fshared);
2090 break; 2104 break;
2091 case FUTEX_TRYLOCK_PI: 2105 case FUTEX_TRYLOCK_PI:
2092 ret = futex_lock_pi(uaddr, fshared, 0, timeout, 1); 2106 if (futex_cmpxchg_enabled)
2107 ret = futex_lock_pi(uaddr, fshared, 0, timeout, 1);
2093 break; 2108 break;
2094 default: 2109 default:
2095 ret = -ENOSYS; 2110 ret = -ENOSYS;
@@ -2145,8 +2160,29 @@ static struct file_system_type futex_fs_type = {
2145 2160
2146static int __init init(void) 2161static int __init init(void)
2147{ 2162{
2148 int i = register_filesystem(&futex_fs_type); 2163 u32 curval;
2164 int i;
2165
2166 /*
2167 * This will fail and we want it. Some arch implementations do
2168 * runtime detection of the futex_atomic_cmpxchg_inatomic()
2169 * functionality. We want to know that before we call in any
2170 * of the complex code paths. Also we want to prevent
2171 * registration of robust lists in that case. NULL is
2172 * guaranteed to fault and we get -EFAULT on functional
2173 * implementation, the non functional ones will return
2174 * -ENOSYS.
2175 */
2176 curval = cmpxchg_futex_value_locked(NULL, 0, 0);
2177 if (curval == -EFAULT)
2178 futex_cmpxchg_enabled = 1;
2149 2179
2180 for (i = 0; i < ARRAY_SIZE(futex_queues); i++) {
2181 plist_head_init(&futex_queues[i].chain, &futex_queues[i].lock);
2182 spin_lock_init(&futex_queues[i].lock);
2183 }
2184
2185 i = register_filesystem(&futex_fs_type);
2150 if (i) 2186 if (i)
2151 return i; 2187 return i;
2152 2188
@@ -2156,10 +2192,6 @@ static int __init init(void)
2156 return PTR_ERR(futex_mnt); 2192 return PTR_ERR(futex_mnt);
2157 } 2193 }
2158 2194
2159 for (i = 0; i < ARRAY_SIZE(futex_queues); i++) {
2160 plist_head_init(&futex_queues[i].chain, &futex_queues[i].lock);
2161 spin_lock_init(&futex_queues[i].lock);
2162 }
2163 return 0; 2195 return 0;
2164} 2196}
2165__initcall(init); 2197__initcall(init);
diff --git a/kernel/futex_compat.c b/kernel/futex_compat.c
index 7d5e4b016f39..ff90f049f8f6 100644
--- a/kernel/futex_compat.c
+++ b/kernel/futex_compat.c
@@ -54,6 +54,9 @@ void compat_exit_robust_list(struct task_struct *curr)
54 compat_long_t futex_offset; 54 compat_long_t futex_offset;
55 int rc; 55 int rc;
56 56
57 if (!futex_cmpxchg_enabled)
58 return;
59
57 /* 60 /*
58 * Fetch the list head (which was registered earlier, via 61 * Fetch the list head (which was registered earlier, via
59 * sys_set_robust_list()): 62 * sys_set_robust_list()):
@@ -115,6 +118,9 @@ asmlinkage long
115compat_sys_set_robust_list(struct compat_robust_list_head __user *head, 118compat_sys_set_robust_list(struct compat_robust_list_head __user *head,
116 compat_size_t len) 119 compat_size_t len)
117{ 120{
121 if (!futex_cmpxchg_enabled)
122 return -ENOSYS;
123
118 if (unlikely(len != sizeof(*head))) 124 if (unlikely(len != sizeof(*head)))
119 return -EINVAL; 125 return -EINVAL;
120 126
@@ -130,6 +136,9 @@ compat_sys_get_robust_list(int pid, compat_uptr_t __user *head_ptr,
130 struct compat_robust_list_head __user *head; 136 struct compat_robust_list_head __user *head;
131 unsigned long ret; 137 unsigned long ret;
132 138
139 if (!futex_cmpxchg_enabled)
140 return -ENOSYS;
141
133 if (!pid) 142 if (!pid)
134 head = current->compat_robust_list; 143 head = current->compat_robust_list;
135 else { 144 else {
diff --git a/kernel/irq/chip.c b/kernel/irq/chip.c
index cc54c6276356..fdb3fbe2b0c4 100644
--- a/kernel/irq/chip.c
+++ b/kernel/irq/chip.c
@@ -246,6 +246,17 @@ static unsigned int default_startup(unsigned int irq)
246} 246}
247 247
248/* 248/*
249 * default shutdown function
250 */
251static void default_shutdown(unsigned int irq)
252{
253 struct irq_desc *desc = irq_desc + irq;
254
255 desc->chip->mask(irq);
256 desc->status |= IRQ_MASKED;
257}
258
259/*
249 * Fixup enable/disable function pointers 260 * Fixup enable/disable function pointers
250 */ 261 */
251void irq_chip_set_defaults(struct irq_chip *chip) 262void irq_chip_set_defaults(struct irq_chip *chip)
@@ -256,8 +267,15 @@ void irq_chip_set_defaults(struct irq_chip *chip)
256 chip->disable = default_disable; 267 chip->disable = default_disable;
257 if (!chip->startup) 268 if (!chip->startup)
258 chip->startup = default_startup; 269 chip->startup = default_startup;
270 /*
271 * We use chip->disable, when the user provided its own. When
272 * we have default_disable set for chip->disable, then we need
273 * to use default_shutdown, otherwise the irq line is not
274 * disabled on free_irq():
275 */
259 if (!chip->shutdown) 276 if (!chip->shutdown)
260 chip->shutdown = chip->disable; 277 chip->shutdown = chip->disable != default_disable ?
278 chip->disable : default_shutdown;
261 if (!chip->name) 279 if (!chip->name)
262 chip->name = chip->typename; 280 chip->name = chip->typename;
263 if (!chip->end) 281 if (!chip->end)
diff --git a/kernel/irq/spurious.c b/kernel/irq/spurious.c
index a6b2bc831dd0..088dabbf2d6a 100644
--- a/kernel/irq/spurious.c
+++ b/kernel/irq/spurious.c
@@ -6,6 +6,7 @@
6 * This file contains spurious interrupt handling. 6 * This file contains spurious interrupt handling.
7 */ 7 */
8 8
9#include <linux/jiffies.h>
9#include <linux/irq.h> 10#include <linux/irq.h>
10#include <linux/module.h> 11#include <linux/module.h>
11#include <linux/kallsyms.h> 12#include <linux/kallsyms.h>
@@ -179,7 +180,7 @@ void note_interrupt(unsigned int irq, struct irq_desc *desc,
179 * otherwise the couter becomes a doomsday timer for otherwise 180 * otherwise the couter becomes a doomsday timer for otherwise
180 * working systems 181 * working systems
181 */ 182 */
182 if (jiffies - desc->last_unhandled > HZ/10) 183 if (time_after(jiffies, desc->last_unhandled + HZ/10))
183 desc->irqs_unhandled = 1; 184 desc->irqs_unhandled = 1;
184 else 185 else
185 desc->irqs_unhandled++; 186 desc->irqs_unhandled++;
diff --git a/kernel/marker.c b/kernel/marker.c
index c4c2cd8b61f5..50effc01d9a2 100644
--- a/kernel/marker.c
+++ b/kernel/marker.c
@@ -61,8 +61,8 @@ struct marker_entry {
61 int refcount; /* Number of times armed. 0 if disarmed. */ 61 int refcount; /* Number of times armed. 0 if disarmed. */
62 struct rcu_head rcu; 62 struct rcu_head rcu;
63 void *oldptr; 63 void *oldptr;
64 char rcu_pending:1; 64 unsigned char rcu_pending:1;
65 char ptype:1; 65 unsigned char ptype:1;
66 char name[0]; /* Contains name'\0'format'\0' */ 66 char name[0]; /* Contains name'\0'format'\0' */
67}; 67};
68 68
diff --git a/kernel/module.c b/kernel/module.c
index 92595bad3812..901cd6ac2f11 100644
--- a/kernel/module.c
+++ b/kernel/module.c
@@ -987,12 +987,11 @@ static unsigned long resolve_symbol(Elf_Shdr *sechdrs,
987 return ret; 987 return ret;
988} 988}
989 989
990
991/* 990/*
992 * /sys/module/foo/sections stuff 991 * /sys/module/foo/sections stuff
993 * J. Corbet <corbet@lwn.net> 992 * J. Corbet <corbet@lwn.net>
994 */ 993 */
995#ifdef CONFIG_KALLSYMS 994#if defined(CONFIG_KALLSYMS) && defined(CONFIG_SYSFS)
996static ssize_t module_sect_show(struct module_attribute *mattr, 995static ssize_t module_sect_show(struct module_attribute *mattr,
997 struct module *mod, char *buf) 996 struct module *mod, char *buf)
998{ 997{
@@ -1188,7 +1187,7 @@ static inline void add_notes_attrs(struct module *mod, unsigned int nsect,
1188static inline void remove_notes_attrs(struct module *mod) 1187static inline void remove_notes_attrs(struct module *mod)
1189{ 1188{
1190} 1189}
1191#endif /* CONFIG_KALLSYMS */ 1190#endif
1192 1191
1193#ifdef CONFIG_SYSFS 1192#ifdef CONFIG_SYSFS
1194int module_add_modinfo_attrs(struct module *mod) 1193int module_add_modinfo_attrs(struct module *mod)
@@ -1231,9 +1230,7 @@ void module_remove_modinfo_attrs(struct module *mod)
1231 } 1230 }
1232 kfree(mod->modinfo_attrs); 1231 kfree(mod->modinfo_attrs);
1233} 1232}
1234#endif
1235 1233
1236#ifdef CONFIG_SYSFS
1237int mod_sysfs_init(struct module *mod) 1234int mod_sysfs_init(struct module *mod)
1238{ 1235{
1239 int err; 1236 int err;
diff --git a/kernel/power/disk.c b/kernel/power/disk.c
index 859a8e59773a..14a656cdc652 100644
--- a/kernel/power/disk.c
+++ b/kernel/power/disk.c
@@ -391,7 +391,7 @@ int hibernation_platform_enter(void)
391 goto Close; 391 goto Close;
392 392
393 suspend_console(); 393 suspend_console();
394 error = device_suspend(PMSG_SUSPEND); 394 error = device_suspend(PMSG_HIBERNATE);
395 if (error) 395 if (error)
396 goto Resume_console; 396 goto Resume_console;
397 397
@@ -404,7 +404,7 @@ int hibernation_platform_enter(void)
404 goto Finish; 404 goto Finish;
405 405
406 local_irq_disable(); 406 local_irq_disable();
407 error = device_power_down(PMSG_SUSPEND); 407 error = device_power_down(PMSG_HIBERNATE);
408 if (!error) { 408 if (!error) {
409 hibernation_ops->enter(); 409 hibernation_ops->enter();
410 /* We should never get here */ 410 /* We should never get here */
diff --git a/kernel/power/snapshot.c b/kernel/power/snapshot.c
index 95250d7c8d91..72a020cabb4c 100644
--- a/kernel/power/snapshot.c
+++ b/kernel/power/snapshot.c
@@ -875,8 +875,8 @@ static inline void *saveable_highmem_page(unsigned long pfn) { return NULL; }
875#endif /* CONFIG_HIGHMEM */ 875#endif /* CONFIG_HIGHMEM */
876 876
877/** 877/**
878 * saveable - Determine whether a non-highmem page should be included in 878 * saveable_page - Determine whether a non-highmem page should be included
879 * the suspend image. 879 * in the suspend image.
880 * 880 *
881 * We should save the page if it isn't Nosave, and is not in the range 881 * We should save the page if it isn't Nosave, and is not in the range
882 * of pages statically defined as 'unsaveable', and it isn't a part of 882 * of pages statically defined as 'unsaveable', and it isn't a part of
@@ -897,7 +897,8 @@ static struct page *saveable_page(unsigned long pfn)
897 if (swsusp_page_is_forbidden(page) || swsusp_page_is_free(page)) 897 if (swsusp_page_is_forbidden(page) || swsusp_page_is_free(page))
898 return NULL; 898 return NULL;
899 899
900 if (PageReserved(page) && pfn_is_nosave(pfn)) 900 if (PageReserved(page)
901 && (!kernel_page_present(page) || pfn_is_nosave(pfn)))
901 return NULL; 902 return NULL;
902 903
903 return page; 904 return page;
@@ -938,6 +939,25 @@ static inline void do_copy_page(long *dst, long *src)
938 *dst++ = *src++; 939 *dst++ = *src++;
939} 940}
940 941
942
943/**
944 * safe_copy_page - check if the page we are going to copy is marked as
945 * present in the kernel page tables (this always is the case if
946 * CONFIG_DEBUG_PAGEALLOC is not set and in that case
947 * kernel_page_present() always returns 'true').
948 */
949static void safe_copy_page(void *dst, struct page *s_page)
950{
951 if (kernel_page_present(s_page)) {
952 do_copy_page(dst, page_address(s_page));
953 } else {
954 kernel_map_pages(s_page, 1, 1);
955 do_copy_page(dst, page_address(s_page));
956 kernel_map_pages(s_page, 1, 0);
957 }
958}
959
960
941#ifdef CONFIG_HIGHMEM 961#ifdef CONFIG_HIGHMEM
942static inline struct page * 962static inline struct page *
943page_is_saveable(struct zone *zone, unsigned long pfn) 963page_is_saveable(struct zone *zone, unsigned long pfn)
@@ -946,8 +966,7 @@ page_is_saveable(struct zone *zone, unsigned long pfn)
946 saveable_highmem_page(pfn) : saveable_page(pfn); 966 saveable_highmem_page(pfn) : saveable_page(pfn);
947} 967}
948 968
949static inline void 969static void copy_data_page(unsigned long dst_pfn, unsigned long src_pfn)
950copy_data_page(unsigned long dst_pfn, unsigned long src_pfn)
951{ 970{
952 struct page *s_page, *d_page; 971 struct page *s_page, *d_page;
953 void *src, *dst; 972 void *src, *dst;
@@ -961,29 +980,26 @@ copy_data_page(unsigned long dst_pfn, unsigned long src_pfn)
961 kunmap_atomic(src, KM_USER0); 980 kunmap_atomic(src, KM_USER0);
962 kunmap_atomic(dst, KM_USER1); 981 kunmap_atomic(dst, KM_USER1);
963 } else { 982 } else {
964 src = page_address(s_page);
965 if (PageHighMem(d_page)) { 983 if (PageHighMem(d_page)) {
966 /* Page pointed to by src may contain some kernel 984 /* Page pointed to by src may contain some kernel
967 * data modified by kmap_atomic() 985 * data modified by kmap_atomic()
968 */ 986 */
969 do_copy_page(buffer, src); 987 safe_copy_page(buffer, s_page);
970 dst = kmap_atomic(pfn_to_page(dst_pfn), KM_USER0); 988 dst = kmap_atomic(pfn_to_page(dst_pfn), KM_USER0);
971 memcpy(dst, buffer, PAGE_SIZE); 989 memcpy(dst, buffer, PAGE_SIZE);
972 kunmap_atomic(dst, KM_USER0); 990 kunmap_atomic(dst, KM_USER0);
973 } else { 991 } else {
974 dst = page_address(d_page); 992 safe_copy_page(page_address(d_page), s_page);
975 do_copy_page(dst, src);
976 } 993 }
977 } 994 }
978} 995}
979#else 996#else
980#define page_is_saveable(zone, pfn) saveable_page(pfn) 997#define page_is_saveable(zone, pfn) saveable_page(pfn)
981 998
982static inline void 999static inline void copy_data_page(unsigned long dst_pfn, unsigned long src_pfn)
983copy_data_page(unsigned long dst_pfn, unsigned long src_pfn)
984{ 1000{
985 do_copy_page(page_address(pfn_to_page(dst_pfn)), 1001 safe_copy_page(page_address(pfn_to_page(dst_pfn)),
986 page_address(pfn_to_page(src_pfn))); 1002 pfn_to_page(src_pfn));
987} 1003}
988#endif /* CONFIG_HIGHMEM */ 1004#endif /* CONFIG_HIGHMEM */
989 1005
diff --git a/kernel/sched.c b/kernel/sched.c
index f28f19e65b59..b387a8de26a5 100644
--- a/kernel/sched.c
+++ b/kernel/sched.c
@@ -1831,6 +1831,7 @@ static int try_to_wake_up(struct task_struct *p, unsigned int state, int sync)
1831 long old_state; 1831 long old_state;
1832 struct rq *rq; 1832 struct rq *rq;
1833 1833
1834 smp_wmb();
1834 rq = task_rq_lock(p, &flags); 1835 rq = task_rq_lock(p, &flags);
1835 old_state = p->state; 1836 old_state = p->state;
1836 if (!(old_state & state)) 1837 if (!(old_state & state))
@@ -3766,7 +3767,7 @@ void scheduler_tick(void)
3766 3767
3767#if defined(CONFIG_PREEMPT) && defined(CONFIG_DEBUG_PREEMPT) 3768#if defined(CONFIG_PREEMPT) && defined(CONFIG_DEBUG_PREEMPT)
3768 3769
3769void add_preempt_count(int val) 3770void __kprobes add_preempt_count(int val)
3770{ 3771{
3771 /* 3772 /*
3772 * Underflow? 3773 * Underflow?
@@ -3782,7 +3783,7 @@ void add_preempt_count(int val)
3782} 3783}
3783EXPORT_SYMBOL(add_preempt_count); 3784EXPORT_SYMBOL(add_preempt_count);
3784 3785
3785void sub_preempt_count(int val) 3786void __kprobes sub_preempt_count(int val)
3786{ 3787{
3787 /* 3788 /*
3788 * Underflow? 3789 * Underflow?
diff --git a/kernel/time/timer_list.c b/kernel/time/timer_list.c
index d3d94c1a0fd2..67fe8fc21fb1 100644
--- a/kernel/time/timer_list.c
+++ b/kernel/time/timer_list.c
@@ -65,9 +65,9 @@ print_timer(struct seq_file *m, struct hrtimer *timer, int idx, u64 now)
65 SEQ_printf(m, ", %s/%d", tmp, timer->start_pid); 65 SEQ_printf(m, ", %s/%d", tmp, timer->start_pid);
66#endif 66#endif
67 SEQ_printf(m, "\n"); 67 SEQ_printf(m, "\n");
68 SEQ_printf(m, " # expires at %Lu nsecs [in %Lu nsecs]\n", 68 SEQ_printf(m, " # expires at %Lu nsecs [in %Ld nsecs]\n",
69 (unsigned long long)ktime_to_ns(timer->expires), 69 (unsigned long long)ktime_to_ns(timer->expires),
70 (unsigned long long)(ktime_to_ns(timer->expires) - now)); 70 (long long)(ktime_to_ns(timer->expires) - now));
71} 71}
72 72
73static void 73static void
diff --git a/lib/Kconfig.debug b/lib/Kconfig.debug
index a370fe828a79..0796c1a090c0 100644
--- a/lib/Kconfig.debug
+++ b/lib/Kconfig.debug
@@ -82,6 +82,9 @@ config HEADERS_CHECK
82config DEBUG_SECTION_MISMATCH 82config DEBUG_SECTION_MISMATCH
83 bool "Enable full Section mismatch analysis" 83 bool "Enable full Section mismatch analysis"
84 depends on UNDEFINED 84 depends on UNDEFINED
85 # This option is on purpose disabled for now.
86 # It will be enabled when we are down to a resonable number
87 # of section mismatch warnings (< 10 for an allyesconfig build)
85 help 88 help
86 The section mismatch analysis checks if there are illegal 89 The section mismatch analysis checks if there are illegal
87 references from one section to another section. 90 references from one section to another section.
@@ -524,6 +527,7 @@ config LKDTM
524 tristate "Linux Kernel Dump Test Tool Module" 527 tristate "Linux Kernel Dump Test Tool Module"
525 depends on DEBUG_KERNEL 528 depends on DEBUG_KERNEL
526 depends on KPROBES 529 depends on KPROBES
530 depends on BLOCK
527 default n 531 default n
528 help 532 help
529 This module enables testing of the different dumping mechanisms by 533 This module enables testing of the different dumping mechanisms by
diff --git a/lib/vsprintf.c b/lib/vsprintf.c
index fd987b17bda7..6021757a4496 100644
--- a/lib/vsprintf.c
+++ b/lib/vsprintf.c
@@ -234,7 +234,7 @@ int strict_strto##type(const char *cp, unsigned int base, valtype *res) \
234 int ret; \ 234 int ret; \
235 if (*cp == '-') { \ 235 if (*cp == '-') { \
236 ret = strict_strtou##type(cp+1, base, res); \ 236 ret = strict_strtou##type(cp+1, base, res); \
237 if (ret != 0) \ 237 if (!ret) \
238 *res = -(*res); \ 238 *res = -(*res); \
239 } else \ 239 } else \
240 ret = strict_strtou##type(cp, base, res); \ 240 ret = strict_strtou##type(cp, base, res); \
diff --git a/mm/hugetlb.c b/mm/hugetlb.c
index cb1b3a7ecdfc..89e6286a7f57 100644
--- a/mm/hugetlb.c
+++ b/mm/hugetlb.c
@@ -120,6 +120,7 @@ static void free_huge_page(struct page *page)
120 struct address_space *mapping; 120 struct address_space *mapping;
121 121
122 mapping = (struct address_space *) page_private(page); 122 mapping = (struct address_space *) page_private(page);
123 set_page_private(page, 0);
123 BUG_ON(page_count(page)); 124 BUG_ON(page_count(page));
124 INIT_LIST_HEAD(&page->lru); 125 INIT_LIST_HEAD(&page->lru);
125 126
@@ -134,7 +135,6 @@ static void free_huge_page(struct page *page)
134 spin_unlock(&hugetlb_lock); 135 spin_unlock(&hugetlb_lock);
135 if (mapping) 136 if (mapping)
136 hugetlb_put_quota(mapping, 1); 137 hugetlb_put_quota(mapping, 1);
137 set_page_private(page, 0);
138} 138}
139 139
140/* 140/*
diff --git a/mm/internal.h b/mm/internal.h
index 5a9a6200e034..789727309f4d 100644
--- a/mm/internal.h
+++ b/mm/internal.h
@@ -47,4 +47,17 @@ static inline unsigned long page_order(struct page *page)
47 VM_BUG_ON(!PageBuddy(page)); 47 VM_BUG_ON(!PageBuddy(page));
48 return page_private(page); 48 return page_private(page);
49} 49}
50
51/*
52 * FLATMEM and DISCONTIGMEM configurations use alloc_bootmem_node,
53 * so all functions starting at paging_init should be marked __init
54 * in those cases. SPARSEMEM, however, allows for memory hotplug,
55 * and alloc_bootmem_node is not used.
56 */
57#ifdef CONFIG_SPARSEMEM
58#define __paginginit __meminit
59#else
60#define __paginginit __init
61#endif
62
50#endif 63#endif
diff --git a/mm/memcontrol.c b/mm/memcontrol.c
index 6bded84c20c8..631002d085d1 100644
--- a/mm/memcontrol.c
+++ b/mm/memcontrol.c
@@ -534,7 +534,6 @@ unsigned long mem_cgroup_isolate_pages(unsigned long nr_to_scan,
534 if (scan >= nr_to_scan) 534 if (scan >= nr_to_scan)
535 break; 535 break;
536 page = pc->page; 536 page = pc->page;
537 VM_BUG_ON(!pc);
538 537
539 if (unlikely(!PageLRU(page))) 538 if (unlikely(!PageLRU(page)))
540 continue; 539 continue;
@@ -1101,7 +1100,7 @@ mem_cgroup_create(struct cgroup_subsys *ss, struct cgroup *cont)
1101 mem = kzalloc(sizeof(struct mem_cgroup), GFP_KERNEL); 1100 mem = kzalloc(sizeof(struct mem_cgroup), GFP_KERNEL);
1102 1101
1103 if (mem == NULL) 1102 if (mem == NULL)
1104 return NULL; 1103 return ERR_PTR(-ENOMEM);
1105 1104
1106 res_counter_init(&mem->res); 1105 res_counter_init(&mem->res);
1107 1106
@@ -1117,7 +1116,7 @@ free_out:
1117 free_mem_cgroup_per_zone_info(mem, node); 1116 free_mem_cgroup_per_zone_info(mem, node);
1118 if (cont->parent != NULL) 1117 if (cont->parent != NULL)
1119 kfree(mem); 1118 kfree(mem);
1120 return NULL; 1119 return ERR_PTR(-ENOMEM);
1121} 1120}
1122 1121
1123static void mem_cgroup_pre_destroy(struct cgroup_subsys *ss, 1122static void mem_cgroup_pre_destroy(struct cgroup_subsys *ss,
diff --git a/mm/page_alloc.c b/mm/page_alloc.c
index 75b979313346..8896e874a67d 100644
--- a/mm/page_alloc.c
+++ b/mm/page_alloc.c
@@ -3314,7 +3314,7 @@ static inline int pageblock_default_order(unsigned int order)
3314 * - mark all memory queues empty 3314 * - mark all memory queues empty
3315 * - clear the memory bitmaps 3315 * - clear the memory bitmaps
3316 */ 3316 */
3317static void __meminit free_area_init_core(struct pglist_data *pgdat, 3317static void __paginginit free_area_init_core(struct pglist_data *pgdat,
3318 unsigned long *zones_size, unsigned long *zholes_size) 3318 unsigned long *zones_size, unsigned long *zholes_size)
3319{ 3319{
3320 enum zone_type j; 3320 enum zone_type j;
@@ -3438,7 +3438,7 @@ static void __init_refok alloc_node_mem_map(struct pglist_data *pgdat)
3438#endif /* CONFIG_FLAT_NODE_MEM_MAP */ 3438#endif /* CONFIG_FLAT_NODE_MEM_MAP */
3439} 3439}
3440 3440
3441void __meminit free_area_init_node(int nid, struct pglist_data *pgdat, 3441void __paginginit free_area_init_node(int nid, struct pglist_data *pgdat,
3442 unsigned long *zones_size, unsigned long node_start_pfn, 3442 unsigned long *zones_size, unsigned long node_start_pfn,
3443 unsigned long *zholes_size) 3443 unsigned long *zholes_size)
3444{ 3444{
diff --git a/mm/slub.c b/mm/slub.c
index 4b3895cb90ee..74c65af0a54f 100644
--- a/mm/slub.c
+++ b/mm/slub.c
@@ -149,13 +149,6 @@ static inline void ClearSlabDebug(struct page *page)
149/* Enable to test recovery from slab corruption on boot */ 149/* Enable to test recovery from slab corruption on boot */
150#undef SLUB_RESILIENCY_TEST 150#undef SLUB_RESILIENCY_TEST
151 151
152/*
153 * Currently fastpath is not supported if preemption is enabled.
154 */
155#if defined(CONFIG_FAST_CMPXCHG_LOCAL) && !defined(CONFIG_PREEMPT)
156#define SLUB_FASTPATH
157#endif
158
159#if PAGE_SHIFT <= 12 152#if PAGE_SHIFT <= 12
160 153
161/* 154/*
@@ -1514,11 +1507,7 @@ static void *__slab_alloc(struct kmem_cache *s,
1514{ 1507{
1515 void **object; 1508 void **object;
1516 struct page *new; 1509 struct page *new;
1517#ifdef SLUB_FASTPATH
1518 unsigned long flags;
1519 1510
1520 local_irq_save(flags);
1521#endif
1522 if (!c->page) 1511 if (!c->page)
1523 goto new_slab; 1512 goto new_slab;
1524 1513
@@ -1541,9 +1530,6 @@ load_freelist:
1541unlock_out: 1530unlock_out:
1542 slab_unlock(c->page); 1531 slab_unlock(c->page);
1543 stat(c, ALLOC_SLOWPATH); 1532 stat(c, ALLOC_SLOWPATH);
1544#ifdef SLUB_FASTPATH
1545 local_irq_restore(flags);
1546#endif
1547 return object; 1533 return object;
1548 1534
1549another_slab: 1535another_slab:
@@ -1575,9 +1561,7 @@ new_slab:
1575 c->page = new; 1561 c->page = new;
1576 goto load_freelist; 1562 goto load_freelist;
1577 } 1563 }
1578#ifdef SLUB_FASTPATH 1564
1579 local_irq_restore(flags);
1580#endif
1581 /* 1565 /*
1582 * No memory available. 1566 * No memory available.
1583 * 1567 *
@@ -1619,34 +1603,6 @@ static __always_inline void *slab_alloc(struct kmem_cache *s,
1619{ 1603{
1620 void **object; 1604 void **object;
1621 struct kmem_cache_cpu *c; 1605 struct kmem_cache_cpu *c;
1622
1623/*
1624 * The SLUB_FASTPATH path is provisional and is currently disabled if the
1625 * kernel is compiled with preemption or if the arch does not support
1626 * fast cmpxchg operations. There are a couple of coming changes that will
1627 * simplify matters and allow preemption. Ultimately we may end up making
1628 * SLUB_FASTPATH the default.
1629 *
1630 * 1. The introduction of the per cpu allocator will avoid array lookups
1631 * through get_cpu_slab(). A special register can be used instead.
1632 *
1633 * 2. The introduction of per cpu atomic operations (cpu_ops) means that
1634 * we can realize the logic here entirely with per cpu atomics. The
1635 * per cpu atomic ops will take care of the preemption issues.
1636 */
1637
1638#ifdef SLUB_FASTPATH
1639 c = get_cpu_slab(s, raw_smp_processor_id());
1640 do {
1641 object = c->freelist;
1642 if (unlikely(is_end(object) || !node_match(c, node))) {
1643 object = __slab_alloc(s, gfpflags, node, addr, c);
1644 break;
1645 }
1646 stat(c, ALLOC_FASTPATH);
1647 } while (cmpxchg_local(&c->freelist, object, object[c->offset])
1648 != object);
1649#else
1650 unsigned long flags; 1606 unsigned long flags;
1651 1607
1652 local_irq_save(flags); 1608 local_irq_save(flags);
@@ -1661,7 +1617,6 @@ static __always_inline void *slab_alloc(struct kmem_cache *s,
1661 stat(c, ALLOC_FASTPATH); 1617 stat(c, ALLOC_FASTPATH);
1662 } 1618 }
1663 local_irq_restore(flags); 1619 local_irq_restore(flags);
1664#endif
1665 1620
1666 if (unlikely((gfpflags & __GFP_ZERO) && object)) 1621 if (unlikely((gfpflags & __GFP_ZERO) && object))
1667 memset(object, 0, c->objsize); 1622 memset(object, 0, c->objsize);
@@ -1698,11 +1653,6 @@ static void __slab_free(struct kmem_cache *s, struct page *page,
1698 void **object = (void *)x; 1653 void **object = (void *)x;
1699 struct kmem_cache_cpu *c; 1654 struct kmem_cache_cpu *c;
1700 1655
1701#ifdef SLUB_FASTPATH
1702 unsigned long flags;
1703
1704 local_irq_save(flags);
1705#endif
1706 c = get_cpu_slab(s, raw_smp_processor_id()); 1656 c = get_cpu_slab(s, raw_smp_processor_id());
1707 stat(c, FREE_SLOWPATH); 1657 stat(c, FREE_SLOWPATH);
1708 slab_lock(page); 1658 slab_lock(page);
@@ -1734,9 +1684,6 @@ checks_ok:
1734 1684
1735out_unlock: 1685out_unlock:
1736 slab_unlock(page); 1686 slab_unlock(page);
1737#ifdef SLUB_FASTPATH
1738 local_irq_restore(flags);
1739#endif
1740 return; 1687 return;
1741 1688
1742slab_empty: 1689slab_empty:
@@ -1749,9 +1696,6 @@ slab_empty:
1749 } 1696 }
1750 slab_unlock(page); 1697 slab_unlock(page);
1751 stat(c, FREE_SLAB); 1698 stat(c, FREE_SLAB);
1752#ifdef SLUB_FASTPATH
1753 local_irq_restore(flags);
1754#endif
1755 discard_slab(s, page); 1699 discard_slab(s, page);
1756 return; 1700 return;
1757 1701
@@ -1777,34 +1721,6 @@ static __always_inline void slab_free(struct kmem_cache *s,
1777{ 1721{
1778 void **object = (void *)x; 1722 void **object = (void *)x;
1779 struct kmem_cache_cpu *c; 1723 struct kmem_cache_cpu *c;
1780
1781#ifdef SLUB_FASTPATH
1782 void **freelist;
1783
1784 c = get_cpu_slab(s, raw_smp_processor_id());
1785 debug_check_no_locks_freed(object, s->objsize);
1786 do {
1787 freelist = c->freelist;
1788 barrier();
1789 /*
1790 * If the compiler would reorder the retrieval of c->page to
1791 * come before c->freelist then an interrupt could
1792 * change the cpu slab before we retrieve c->freelist. We
1793 * could be matching on a page no longer active and put the
1794 * object onto the freelist of the wrong slab.
1795 *
1796 * On the other hand: If we already have the freelist pointer
1797 * then any change of cpu_slab will cause the cmpxchg to fail
1798 * since the freelist pointers are unique per slab.
1799 */
1800 if (unlikely(page != c->page || c->node < 0)) {
1801 __slab_free(s, page, x, addr, c->offset);
1802 break;
1803 }
1804 object[c->offset] = freelist;
1805 stat(c, FREE_FASTPATH);
1806 } while (cmpxchg_local(&c->freelist, freelist, object) != freelist);
1807#else
1808 unsigned long flags; 1724 unsigned long flags;
1809 1725
1810 local_irq_save(flags); 1726 local_irq_save(flags);
@@ -1818,7 +1734,6 @@ static __always_inline void slab_free(struct kmem_cache *s,
1818 __slab_free(s, page, x, addr, c->offset); 1734 __slab_free(s, page, x, addr, c->offset);
1819 1735
1820 local_irq_restore(flags); 1736 local_irq_restore(flags);
1821#endif
1822} 1737}
1823 1738
1824void kmem_cache_free(struct kmem_cache *s, void *x) 1739void kmem_cache_free(struct kmem_cache *s, void *x)
diff --git a/net/9p/trans_virtio.c b/net/9p/trans_virtio.c
index 0117b9fb8480..de7a9f532edc 100644
--- a/net/9p/trans_virtio.c
+++ b/net/9p/trans_virtio.c
@@ -110,7 +110,7 @@ static struct p9_req_t *p9_lookup_tag(struct virtio_chan *c, u16 tag)
110 } 110 }
111 for (count = old_max; count < c->max_tag; count++) { 111 for (count = old_max; count < c->max_tag; count++) {
112 c->reqs[count].status = REQ_STATUS_IDLE; 112 c->reqs[count].status = REQ_STATUS_IDLE;
113 c->reqs[count].wq = kmalloc(sizeof(wait_queue_t), 113 c->reqs[count].wq = kmalloc(sizeof(wait_queue_head_t),
114 GFP_ATOMIC); 114 GFP_ATOMIC);
115 if (!c->reqs[count].wq) { 115 if (!c->reqs[count].wq) {
116 printk(KERN_ERR "Couldn't grow tag array\n"); 116 printk(KERN_ERR "Couldn't grow tag array\n");
@@ -183,8 +183,7 @@ pack_sg_list(struct scatterlist *sg, int start, int limit, char *data,
183 sg_set_buf(&sg[index++], data, s); 183 sg_set_buf(&sg[index++], data, s);
184 count -= s; 184 count -= s;
185 data += s; 185 data += s;
186 if (index > limit) 186 BUG_ON(index > limit);
187 BUG();
188 } 187 }
189 188
190 return index-start; 189 return index-start;
diff --git a/net/ax25/ax25_out.c b/net/ax25/ax25_out.c
index 92b517af7260..bf706f83a5c9 100644
--- a/net/ax25/ax25_out.c
+++ b/net/ax25/ax25_out.c
@@ -117,6 +117,12 @@ void ax25_output(ax25_cb *ax25, int paclen, struct sk_buff *skb)
117 unsigned char *p; 117 unsigned char *p;
118 int frontlen, len, fragno, ka9qfrag, first = 1; 118 int frontlen, len, fragno, ka9qfrag, first = 1;
119 119
120 if (paclen < 16) {
121 WARN_ON_ONCE(1);
122 kfree_skb(skb);
123 return;
124 }
125
120 if ((skb->len - 1) > paclen) { 126 if ((skb->len - 1) > paclen) {
121 if (*skb->data == AX25_P_TEXT) { 127 if (*skb->data == AX25_P_TEXT) {
122 skb_pull(skb, 1); /* skip PID */ 128 skb_pull(skb, 1); /* skip PID */
@@ -251,8 +257,6 @@ void ax25_kick(ax25_cb *ax25)
251 if (start == end) 257 if (start == end)
252 return; 258 return;
253 259
254 ax25->vs = start;
255
256 /* 260 /*
257 * Transmit data until either we're out of data to send or 261 * Transmit data until either we're out of data to send or
258 * the window is full. Send a poll on the final I frame if 262 * the window is full. Send a poll on the final I frame if
@@ -261,8 +265,13 @@ void ax25_kick(ax25_cb *ax25)
261 265
262 /* 266 /*
263 * Dequeue the frame and copy it. 267 * Dequeue the frame and copy it.
268 * Check for race with ax25_clear_queues().
264 */ 269 */
265 skb = skb_dequeue(&ax25->write_queue); 270 skb = skb_dequeue(&ax25->write_queue);
271 if (!skb)
272 return;
273
274 ax25->vs = start;
266 275
267 do { 276 do {
268 if ((skbn = skb_clone(skb, GFP_ATOMIC)) == NULL) { 277 if ((skbn = skb_clone(skb, GFP_ATOMIC)) == NULL) {
diff --git a/net/bluetooth/hci_conn.c b/net/bluetooth/hci_conn.c
index 5fc7be206f62..f8880261da0e 100644
--- a/net/bluetooth/hci_conn.c
+++ b/net/bluetooth/hci_conn.c
@@ -260,7 +260,6 @@ int hci_conn_del(struct hci_conn *conn)
260 tasklet_enable(&hdev->tx_task); 260 tasklet_enable(&hdev->tx_task);
261 skb_queue_purge(&conn->data_q); 261 skb_queue_purge(&conn->data_q);
262 hci_conn_del_sysfs(conn); 262 hci_conn_del_sysfs(conn);
263 hci_dev_put(hdev);
264 263
265 return 0; 264 return 0;
266} 265}
diff --git a/net/bluetooth/hci_core.c b/net/bluetooth/hci_core.c
index 372b0d3b75a8..930b58e7149a 100644
--- a/net/bluetooth/hci_core.c
+++ b/net/bluetooth/hci_core.c
@@ -24,6 +24,7 @@
24 24
25/* Bluetooth HCI core. */ 25/* Bluetooth HCI core. */
26 26
27#include <linux/jiffies.h>
27#include <linux/module.h> 28#include <linux/module.h>
28#include <linux/kmod.h> 29#include <linux/kmod.h>
29 30
@@ -1321,7 +1322,7 @@ static inline void hci_sched_acl(struct hci_dev *hdev)
1321 if (!test_bit(HCI_RAW, &hdev->flags)) { 1322 if (!test_bit(HCI_RAW, &hdev->flags)) {
1322 /* ACL tx timeout must be longer than maximum 1323 /* ACL tx timeout must be longer than maximum
1323 * link supervision timeout (40.9 seconds) */ 1324 * link supervision timeout (40.9 seconds) */
1324 if (!hdev->acl_cnt && (jiffies - hdev->acl_last_tx) > (HZ * 45)) 1325 if (!hdev->acl_cnt && time_after(jiffies, hdev->acl_last_tx + HZ * 45))
1325 hci_acl_tx_to(hdev); 1326 hci_acl_tx_to(hdev);
1326 } 1327 }
1327 1328
@@ -1543,7 +1544,7 @@ static void hci_cmd_task(unsigned long arg)
1543 1544
1544 BT_DBG("%s cmd %d", hdev->name, atomic_read(&hdev->cmd_cnt)); 1545 BT_DBG("%s cmd %d", hdev->name, atomic_read(&hdev->cmd_cnt));
1545 1546
1546 if (!atomic_read(&hdev->cmd_cnt) && (jiffies - hdev->cmd_last_tx) > HZ) { 1547 if (!atomic_read(&hdev->cmd_cnt) && time_after(jiffies, hdev->cmd_last_tx + HZ)) {
1547 BT_ERR("%s command tx timeout", hdev->name); 1548 BT_ERR("%s command tx timeout", hdev->name);
1548 atomic_set(&hdev->cmd_cnt, 1); 1549 atomic_set(&hdev->cmd_cnt, 1);
1549 } 1550 }
diff --git a/net/bluetooth/hci_sysfs.c b/net/bluetooth/hci_sysfs.c
index e13cf5ef144c..84360c117d4e 100644
--- a/net/bluetooth/hci_sysfs.c
+++ b/net/bluetooth/hci_sysfs.c
@@ -320,28 +320,34 @@ void hci_conn_add_sysfs(struct hci_conn *conn)
320 queue_work(btaddconn, &conn->work); 320 queue_work(btaddconn, &conn->work);
321} 321}
322 322
323/*
324 * The rfcomm tty device will possibly retain even when conn
325 * is down, and sysfs doesn't support move zombie device,
326 * so we should move the device before conn device is destroyed.
327 */
323static int __match_tty(struct device *dev, void *data) 328static int __match_tty(struct device *dev, void *data)
324{ 329{
325 /* The rfcomm tty device will possibly retain even when conn 330 return !strncmp(dev->bus_id, "rfcomm", 6);
326 * is down, and sysfs doesn't support move zombie device,
327 * so we should move the device before conn device is destroyed.
328 * Due to the only child device of hci_conn dev is rfcomm
329 * tty_dev, here just return 1
330 */
331 return 1;
332} 331}
333 332
334static void del_conn(struct work_struct *work) 333static void del_conn(struct work_struct *work)
335{ 334{
336 struct device *dev;
337 struct hci_conn *conn = container_of(work, struct hci_conn, work); 335 struct hci_conn *conn = container_of(work, struct hci_conn, work);
336 struct hci_dev *hdev = conn->hdev;
337
338 while (1) {
339 struct device *dev;
338 340
339 while (dev = device_find_child(&conn->dev, NULL, __match_tty)) { 341 dev = device_find_child(&conn->dev, NULL, __match_tty);
342 if (!dev)
343 break;
340 device_move(dev, NULL); 344 device_move(dev, NULL);
341 put_device(dev); 345 put_device(dev);
342 } 346 }
347
343 device_del(&conn->dev); 348 device_del(&conn->dev);
344 put_device(&conn->dev); 349 put_device(&conn->dev);
350 hci_dev_put(hdev);
345} 351}
346 352
347void hci_conn_del_sysfs(struct hci_conn *conn) 353void hci_conn_del_sysfs(struct hci_conn *conn)
diff --git a/net/bridge/netfilter/ebt_dnat.c b/net/bridge/netfilter/ebt_dnat.c
index e700cbf634c2..ca64c1cc1b47 100644
--- a/net/bridge/netfilter/ebt_dnat.c
+++ b/net/bridge/netfilter/ebt_dnat.c
@@ -20,8 +20,8 @@ static int ebt_target_dnat(struct sk_buff *skb, unsigned int hooknr,
20{ 20{
21 const struct ebt_nat_info *info = data; 21 const struct ebt_nat_info *info = data;
22 22
23 if (skb_make_writable(skb, 0)) 23 if (!skb_make_writable(skb, 0))
24 return NF_DROP; 24 return EBT_DROP;
25 25
26 memcpy(eth_hdr(skb)->h_dest, info->mac, ETH_ALEN); 26 memcpy(eth_hdr(skb)->h_dest, info->mac, ETH_ALEN);
27 return info->target; 27 return info->target;
diff --git a/net/bridge/netfilter/ebt_redirect.c b/net/bridge/netfilter/ebt_redirect.c
index bfdf2fb60b1f..b8afe850cf1e 100644
--- a/net/bridge/netfilter/ebt_redirect.c
+++ b/net/bridge/netfilter/ebt_redirect.c
@@ -21,8 +21,8 @@ static int ebt_target_redirect(struct sk_buff *skb, unsigned int hooknr,
21{ 21{
22 const struct ebt_redirect_info *info = data; 22 const struct ebt_redirect_info *info = data;
23 23
24 if (skb_make_writable(skb, 0)) 24 if (!skb_make_writable(skb, 0))
25 return NF_DROP; 25 return EBT_DROP;
26 26
27 if (hooknr != NF_BR_BROUTING) 27 if (hooknr != NF_BR_BROUTING)
28 memcpy(eth_hdr(skb)->h_dest, 28 memcpy(eth_hdr(skb)->h_dest,
diff --git a/net/bridge/netfilter/ebt_snat.c b/net/bridge/netfilter/ebt_snat.c
index e252dabbb143..5425333dda03 100644
--- a/net/bridge/netfilter/ebt_snat.c
+++ b/net/bridge/netfilter/ebt_snat.c
@@ -22,8 +22,8 @@ static int ebt_target_snat(struct sk_buff *skb, unsigned int hooknr,
22{ 22{
23 const struct ebt_nat_info *info = data; 23 const struct ebt_nat_info *info = data;
24 24
25 if (skb_make_writable(skb, 0)) 25 if (!skb_make_writable(skb, 0))
26 return NF_DROP; 26 return EBT_DROP;
27 27
28 memcpy(eth_hdr(skb)->h_source, info->mac, ETH_ALEN); 28 memcpy(eth_hdr(skb)->h_source, info->mac, ETH_ALEN);
29 if (!(info->target & NAT_ARP_BIT) && 29 if (!(info->target & NAT_ARP_BIT) &&
diff --git a/net/core/dev.c b/net/core/dev.c
index 908f07c3bd7d..fcdf03cf3b3f 100644
--- a/net/core/dev.c
+++ b/net/core/dev.c
@@ -2900,7 +2900,7 @@ int __dev_addr_add(struct dev_addr_list **list, int *count,
2900 } 2900 }
2901 } 2901 }
2902 2902
2903 da = kmalloc(sizeof(*da), GFP_ATOMIC); 2903 da = kzalloc(sizeof(*da), GFP_ATOMIC);
2904 if (da == NULL) 2904 if (da == NULL)
2905 return -ENOMEM; 2905 return -ENOMEM;
2906 memcpy(da->da_addr, addr, alen); 2906 memcpy(da->da_addr, addr, alen);
diff --git a/net/core/neighbour.c b/net/core/neighbour.c
index 7bb6a9a1256d..2328acbd16cd 100644
--- a/net/core/neighbour.c
+++ b/net/core/neighbour.c
@@ -358,11 +358,12 @@ struct neighbour *neigh_lookup(struct neigh_table *tbl, const void *pkey,
358{ 358{
359 struct neighbour *n; 359 struct neighbour *n;
360 int key_len = tbl->key_len; 360 int key_len = tbl->key_len;
361 u32 hash_val = tbl->hash(pkey, dev); 361 u32 hash_val;
362 362
363 NEIGH_CACHE_STAT_INC(tbl, lookups); 363 NEIGH_CACHE_STAT_INC(tbl, lookups);
364 364
365 read_lock_bh(&tbl->lock); 365 read_lock_bh(&tbl->lock);
366 hash_val = tbl->hash(pkey, dev);
366 for (n = tbl->hash_buckets[hash_val & tbl->hash_mask]; n; n = n->next) { 367 for (n = tbl->hash_buckets[hash_val & tbl->hash_mask]; n; n = n->next) {
367 if (dev == n->dev && !memcmp(n->primary_key, pkey, key_len)) { 368 if (dev == n->dev && !memcmp(n->primary_key, pkey, key_len)) {
368 neigh_hold(n); 369 neigh_hold(n);
@@ -379,11 +380,12 @@ struct neighbour *neigh_lookup_nodev(struct neigh_table *tbl, struct net *net,
379{ 380{
380 struct neighbour *n; 381 struct neighbour *n;
381 int key_len = tbl->key_len; 382 int key_len = tbl->key_len;
382 u32 hash_val = tbl->hash(pkey, NULL); 383 u32 hash_val;
383 384
384 NEIGH_CACHE_STAT_INC(tbl, lookups); 385 NEIGH_CACHE_STAT_INC(tbl, lookups);
385 386
386 read_lock_bh(&tbl->lock); 387 read_lock_bh(&tbl->lock);
388 hash_val = tbl->hash(pkey, NULL);
387 for (n = tbl->hash_buckets[hash_val & tbl->hash_mask]; n; n = n->next) { 389 for (n = tbl->hash_buckets[hash_val & tbl->hash_mask]; n; n = n->next) {
388 if (!memcmp(n->primary_key, pkey, key_len) && 390 if (!memcmp(n->primary_key, pkey, key_len) &&
389 (net == n->dev->nd_net)) { 391 (net == n->dev->nd_net)) {
@@ -507,6 +509,7 @@ struct pneigh_entry * pneigh_lookup(struct neigh_table *tbl,
507 if (tbl->pconstructor && tbl->pconstructor(n)) { 509 if (tbl->pconstructor && tbl->pconstructor(n)) {
508 if (dev) 510 if (dev)
509 dev_put(dev); 511 dev_put(dev);
512 release_net(net);
510 kfree(n); 513 kfree(n);
511 n = NULL; 514 n = NULL;
512 goto out; 515 goto out;
@@ -834,12 +837,18 @@ static void neigh_timer_handler(unsigned long arg)
834 } 837 }
835 if (neigh->nud_state & (NUD_INCOMPLETE | NUD_PROBE)) { 838 if (neigh->nud_state & (NUD_INCOMPLETE | NUD_PROBE)) {
836 struct sk_buff *skb = skb_peek(&neigh->arp_queue); 839 struct sk_buff *skb = skb_peek(&neigh->arp_queue);
837 840 /* keep skb alive even if arp_queue overflows */
841 if (skb)
842 skb_get(skb);
843 write_unlock(&neigh->lock);
838 neigh->ops->solicit(neigh, skb); 844 neigh->ops->solicit(neigh, skb);
839 atomic_inc(&neigh->probes); 845 atomic_inc(&neigh->probes);
840 } 846 if (skb)
847 kfree_skb(skb);
848 } else {
841out: 849out:
842 write_unlock(&neigh->lock); 850 write_unlock(&neigh->lock);
851 }
843 852
844 if (notify) 853 if (notify)
845 neigh_update_notify(neigh); 854 neigh_update_notify(neigh);
diff --git a/net/core/rtnetlink.c b/net/core/rtnetlink.c
index ecb02afd52dc..2bd9c5f7627d 100644
--- a/net/core/rtnetlink.c
+++ b/net/core/rtnetlink.c
@@ -504,7 +504,7 @@ int rtnl_put_cacheinfo(struct sk_buff *skb, struct dst_entry *dst, u32 id,
504 504
505EXPORT_SYMBOL_GPL(rtnl_put_cacheinfo); 505EXPORT_SYMBOL_GPL(rtnl_put_cacheinfo);
506 506
507static int set_operstate(struct net_device *dev, unsigned char transition, bool send_notification) 507static void set_operstate(struct net_device *dev, unsigned char transition)
508{ 508{
509 unsigned char operstate = dev->operstate; 509 unsigned char operstate = dev->operstate;
510 510
@@ -527,12 +527,8 @@ static int set_operstate(struct net_device *dev, unsigned char transition, bool
527 write_lock_bh(&dev_base_lock); 527 write_lock_bh(&dev_base_lock);
528 dev->operstate = operstate; 528 dev->operstate = operstate;
529 write_unlock_bh(&dev_base_lock); 529 write_unlock_bh(&dev_base_lock);
530 530 netdev_state_change(dev);
531 if (send_notification) 531 }
532 netdev_state_change(dev);
533 return 1;
534 } else
535 return 0;
536} 532}
537 533
538static void copy_rtnl_link_stats(struct rtnl_link_stats *a, 534static void copy_rtnl_link_stats(struct rtnl_link_stats *a,
@@ -693,10 +689,12 @@ const struct nla_policy ifla_policy[IFLA_MAX+1] = {
693 [IFLA_BROADCAST] = { .type = NLA_BINARY, .len = MAX_ADDR_LEN }, 689 [IFLA_BROADCAST] = { .type = NLA_BINARY, .len = MAX_ADDR_LEN },
694 [IFLA_MAP] = { .len = sizeof(struct rtnl_link_ifmap) }, 690 [IFLA_MAP] = { .len = sizeof(struct rtnl_link_ifmap) },
695 [IFLA_MTU] = { .type = NLA_U32 }, 691 [IFLA_MTU] = { .type = NLA_U32 },
692 [IFLA_LINK] = { .type = NLA_U32 },
696 [IFLA_TXQLEN] = { .type = NLA_U32 }, 693 [IFLA_TXQLEN] = { .type = NLA_U32 },
697 [IFLA_WEIGHT] = { .type = NLA_U32 }, 694 [IFLA_WEIGHT] = { .type = NLA_U32 },
698 [IFLA_OPERSTATE] = { .type = NLA_U8 }, 695 [IFLA_OPERSTATE] = { .type = NLA_U8 },
699 [IFLA_LINKMODE] = { .type = NLA_U8 }, 696 [IFLA_LINKMODE] = { .type = NLA_U8 },
697 [IFLA_LINKINFO] = { .type = NLA_NESTED },
700 [IFLA_NET_NS_PID] = { .type = NLA_U32 }, 698 [IFLA_NET_NS_PID] = { .type = NLA_U32 },
701}; 699};
702 700
@@ -724,6 +722,21 @@ static struct net *get_net_ns_by_pid(pid_t pid)
724 return net; 722 return net;
725} 723}
726 724
725static int validate_linkmsg(struct net_device *dev, struct nlattr *tb[])
726{
727 if (dev) {
728 if (tb[IFLA_ADDRESS] &&
729 nla_len(tb[IFLA_ADDRESS]) < dev->addr_len)
730 return -EINVAL;
731
732 if (tb[IFLA_BROADCAST] &&
733 nla_len(tb[IFLA_BROADCAST]) < dev->addr_len)
734 return -EINVAL;
735 }
736
737 return 0;
738}
739
727static int do_setlink(struct net_device *dev, struct ifinfomsg *ifm, 740static int do_setlink(struct net_device *dev, struct ifinfomsg *ifm,
728 struct nlattr **tb, char *ifname, int modified) 741 struct nlattr **tb, char *ifname, int modified)
729{ 742{
@@ -826,7 +839,6 @@ static int do_setlink(struct net_device *dev, struct ifinfomsg *ifm,
826 if (tb[IFLA_BROADCAST]) { 839 if (tb[IFLA_BROADCAST]) {
827 nla_memcpy(dev->broadcast, tb[IFLA_BROADCAST], dev->addr_len); 840 nla_memcpy(dev->broadcast, tb[IFLA_BROADCAST], dev->addr_len);
828 send_addr_notify = 1; 841 send_addr_notify = 1;
829 modified = 1;
830 } 842 }
831 843
832 if (ifm->ifi_flags || ifm->ifi_change) { 844 if (ifm->ifi_flags || ifm->ifi_change) {
@@ -839,23 +851,16 @@ static int do_setlink(struct net_device *dev, struct ifinfomsg *ifm,
839 dev_change_flags(dev, flags); 851 dev_change_flags(dev, flags);
840 } 852 }
841 853
842 if (tb[IFLA_TXQLEN]) { 854 if (tb[IFLA_TXQLEN])
843 if (dev->tx_queue_len != nla_get_u32(tb[IFLA_TXQLEN])) { 855 dev->tx_queue_len = nla_get_u32(tb[IFLA_TXQLEN]);
844 dev->tx_queue_len = nla_get_u32(tb[IFLA_TXQLEN]);
845 modified = 1;
846 }
847 }
848 856
849 if (tb[IFLA_OPERSTATE]) 857 if (tb[IFLA_OPERSTATE])
850 modified |= set_operstate(dev, nla_get_u8(tb[IFLA_OPERSTATE]), false); 858 set_operstate(dev, nla_get_u8(tb[IFLA_OPERSTATE]));
851 859
852 if (tb[IFLA_LINKMODE]) { 860 if (tb[IFLA_LINKMODE]) {
853 if (dev->link_mode != nla_get_u8(tb[IFLA_LINKMODE])) { 861 write_lock_bh(&dev_base_lock);
854 write_lock_bh(&dev_base_lock); 862 dev->link_mode = nla_get_u8(tb[IFLA_LINKMODE]);
855 dev->link_mode = nla_get_u8(tb[IFLA_LINKMODE]); 863 write_unlock_bh(&dev_base_lock);
856 write_lock_bh(&dev_base_lock);
857 modified = 1;
858 }
859 } 864 }
860 865
861 err = 0; 866 err = 0;
@@ -869,10 +874,6 @@ errout:
869 874
870 if (send_addr_notify) 875 if (send_addr_notify)
871 call_netdevice_notifiers(NETDEV_CHANGEADDR, dev); 876 call_netdevice_notifiers(NETDEV_CHANGEADDR, dev);
872
873 if (modified)
874 netdev_state_change(dev);
875
876 return err; 877 return err;
877} 878}
878 879
@@ -908,12 +909,7 @@ static int rtnl_setlink(struct sk_buff *skb, struct nlmsghdr *nlh, void *arg)
908 goto errout; 909 goto errout;
909 } 910 }
910 911
911 if (tb[IFLA_ADDRESS] && 912 if ((err = validate_linkmsg(dev, tb)) < 0)
912 nla_len(tb[IFLA_ADDRESS]) < dev->addr_len)
913 goto errout_dev;
914
915 if (tb[IFLA_BROADCAST] &&
916 nla_len(tb[IFLA_BROADCAST]) < dev->addr_len)
917 goto errout_dev; 913 goto errout_dev;
918 914
919 err = do_setlink(dev, ifm, tb, ifname, 0); 915 err = do_setlink(dev, ifm, tb, ifname, 0);
@@ -990,7 +986,7 @@ struct net_device *rtnl_create_link(struct net *net, char *ifname,
990 if (tb[IFLA_TXQLEN]) 986 if (tb[IFLA_TXQLEN])
991 dev->tx_queue_len = nla_get_u32(tb[IFLA_TXQLEN]); 987 dev->tx_queue_len = nla_get_u32(tb[IFLA_TXQLEN]);
992 if (tb[IFLA_OPERSTATE]) 988 if (tb[IFLA_OPERSTATE])
993 set_operstate(dev, nla_get_u8(tb[IFLA_OPERSTATE]), true); 989 set_operstate(dev, nla_get_u8(tb[IFLA_OPERSTATE]));
994 if (tb[IFLA_LINKMODE]) 990 if (tb[IFLA_LINKMODE])
995 dev->link_mode = nla_get_u8(tb[IFLA_LINKMODE]); 991 dev->link_mode = nla_get_u8(tb[IFLA_LINKMODE]);
996 992
@@ -1034,6 +1030,9 @@ replay:
1034 else 1030 else
1035 dev = NULL; 1031 dev = NULL;
1036 1032
1033 if ((err = validate_linkmsg(dev, tb)) < 0)
1034 return err;
1035
1037 if (tb[IFLA_LINKINFO]) { 1036 if (tb[IFLA_LINKINFO]) {
1038 err = nla_parse_nested(linkinfo, IFLA_INFO_MAX, 1037 err = nla_parse_nested(linkinfo, IFLA_INFO_MAX,
1039 tb[IFLA_LINKINFO], ifla_info_policy); 1038 tb[IFLA_LINKINFO], ifla_info_policy);
diff --git a/net/ipv4/arp.c b/net/ipv4/arp.c
index c663fa5339ee..8e17f65f4002 100644
--- a/net/ipv4/arp.c
+++ b/net/ipv4/arp.c
@@ -368,6 +368,7 @@ static void arp_solicit(struct neighbour *neigh, struct sk_buff *skb)
368 if (!(neigh->nud_state&NUD_VALID)) 368 if (!(neigh->nud_state&NUD_VALID))
369 printk(KERN_DEBUG "trying to ucast probe in NUD_INVALID\n"); 369 printk(KERN_DEBUG "trying to ucast probe in NUD_INVALID\n");
370 dst_ha = neigh->ha; 370 dst_ha = neigh->ha;
371 read_lock_bh(&neigh->lock);
371 } else if ((probes -= neigh->parms->app_probes) < 0) { 372 } else if ((probes -= neigh->parms->app_probes) < 0) {
372#ifdef CONFIG_ARPD 373#ifdef CONFIG_ARPD
373 neigh_app_ns(neigh); 374 neigh_app_ns(neigh);
@@ -377,6 +378,8 @@ static void arp_solicit(struct neighbour *neigh, struct sk_buff *skb)
377 378
378 arp_send(ARPOP_REQUEST, ETH_P_ARP, target, dev, saddr, 379 arp_send(ARPOP_REQUEST, ETH_P_ARP, target, dev, saddr,
379 dst_ha, dev->dev_addr, NULL); 380 dst_ha, dev->dev_addr, NULL);
381 if (dst_ha)
382 read_unlock_bh(&neigh->lock);
380} 383}
381 384
382static int arp_ignore(struct in_device *in_dev, __be32 sip, __be32 tip) 385static int arp_ignore(struct in_device *in_dev, __be32 sip, __be32 tip)
diff --git a/net/ipv4/fib_hash.c b/net/ipv4/fib_hash.c
index 76b9c684cccd..8d58d85dfac6 100644
--- a/net/ipv4/fib_hash.c
+++ b/net/ipv4/fib_hash.c
@@ -372,7 +372,8 @@ static struct fib_node *fib_find_node(struct fn_zone *fz, __be32 key)
372static int fn_hash_insert(struct fib_table *tb, struct fib_config *cfg) 372static int fn_hash_insert(struct fib_table *tb, struct fib_config *cfg)
373{ 373{
374 struct fn_hash *table = (struct fn_hash *) tb->tb_data; 374 struct fn_hash *table = (struct fn_hash *) tb->tb_data;
375 struct fib_node *new_f, *f; 375 struct fib_node *new_f = NULL;
376 struct fib_node *f;
376 struct fib_alias *fa, *new_fa; 377 struct fib_alias *fa, *new_fa;
377 struct fn_zone *fz; 378 struct fn_zone *fz;
378 struct fib_info *fi; 379 struct fib_info *fi;
@@ -496,7 +497,6 @@ static int fn_hash_insert(struct fib_table *tb, struct fib_config *cfg)
496 497
497 err = -ENOBUFS; 498 err = -ENOBUFS;
498 499
499 new_f = NULL;
500 if (!f) { 500 if (!f) {
501 new_f = kmem_cache_zalloc(fn_hash_kmem, GFP_KERNEL); 501 new_f = kmem_cache_zalloc(fn_hash_kmem, GFP_KERNEL);
502 if (new_f == NULL) 502 if (new_f == NULL)
@@ -512,7 +512,7 @@ static int fn_hash_insert(struct fib_table *tb, struct fib_config *cfg)
512 if (new_fa->fa_info != NULL) { 512 if (new_fa->fa_info != NULL) {
513 new_fa = kmem_cache_alloc(fn_alias_kmem, GFP_KERNEL); 513 new_fa = kmem_cache_alloc(fn_alias_kmem, GFP_KERNEL);
514 if (new_fa == NULL) 514 if (new_fa == NULL)
515 goto out_free_new_f; 515 goto out;
516 } 516 }
517 new_fa->fa_info = fi; 517 new_fa->fa_info = fi;
518 new_fa->fa_tos = tos; 518 new_fa->fa_tos = tos;
@@ -540,9 +540,9 @@ static int fn_hash_insert(struct fib_table *tb, struct fib_config *cfg)
540 &cfg->fc_nlinfo, 0); 540 &cfg->fc_nlinfo, 0);
541 return 0; 541 return 0;
542 542
543out_free_new_f:
544 kmem_cache_free(fn_hash_kmem, new_f);
545out: 543out:
544 if (new_f)
545 kmem_cache_free(fn_hash_kmem, new_f);
546 fib_release_info(fi); 546 fib_release_info(fi);
547 return err; 547 return err;
548} 548}
diff --git a/net/ipv4/ip_gre.c b/net/ipv4/ip_gre.c
index 63f691719353..906cb1ada4c3 100644
--- a/net/ipv4/ip_gre.c
+++ b/net/ipv4/ip_gre.c
@@ -259,16 +259,8 @@ static struct ip_tunnel * ipgre_tunnel_locate(struct ip_tunnel_parm *parms, int
259 259
260 if (parms->name[0]) 260 if (parms->name[0])
261 strlcpy(name, parms->name, IFNAMSIZ); 261 strlcpy(name, parms->name, IFNAMSIZ);
262 else { 262 else
263 int i; 263 sprintf(name, "gre%%d");
264 for (i=1; i<100; i++) {
265 sprintf(name, "gre%d", i);
266 if (__dev_get_by_name(&init_net, name) == NULL)
267 break;
268 }
269 if (i==100)
270 goto failed;
271 }
272 264
273 dev = alloc_netdev(sizeof(*t), name, ipgre_tunnel_setup); 265 dev = alloc_netdev(sizeof(*t), name, ipgre_tunnel_setup);
274 if (!dev) 266 if (!dev)
diff --git a/net/ipv4/ipconfig.c b/net/ipv4/ipconfig.c
index a52b5853aaa8..10013ccee8dd 100644
--- a/net/ipv4/ipconfig.c
+++ b/net/ipv4/ipconfig.c
@@ -1390,7 +1390,7 @@ static int __init ip_auto_config(void)
1390 * Clue in the operator. 1390 * Clue in the operator.
1391 */ 1391 */
1392 printk("IP-Config: Complete:"); 1392 printk("IP-Config: Complete:");
1393 printk("\n device=%s", ic_dev->name); 1393 printk("\n device=%s", ic_dev->name);
1394 printk(", addr=%u.%u.%u.%u", NIPQUAD(ic_myaddr)); 1394 printk(", addr=%u.%u.%u.%u", NIPQUAD(ic_myaddr));
1395 printk(", mask=%u.%u.%u.%u", NIPQUAD(ic_netmask)); 1395 printk(", mask=%u.%u.%u.%u", NIPQUAD(ic_netmask));
1396 printk(", gw=%u.%u.%u.%u", NIPQUAD(ic_gateway)); 1396 printk(", gw=%u.%u.%u.%u", NIPQUAD(ic_gateway));
diff --git a/net/ipv4/ipip.c b/net/ipv4/ipip.c
index da281581692c..e77e3b855834 100644
--- a/net/ipv4/ipip.c
+++ b/net/ipv4/ipip.c
@@ -221,16 +221,8 @@ static struct ip_tunnel * ipip_tunnel_locate(struct ip_tunnel_parm *parms, int c
221 221
222 if (parms->name[0]) 222 if (parms->name[0])
223 strlcpy(name, parms->name, IFNAMSIZ); 223 strlcpy(name, parms->name, IFNAMSIZ);
224 else { 224 else
225 int i; 225 sprintf(name, "tunl%%d");
226 for (i=1; i<100; i++) {
227 sprintf(name, "tunl%d", i);
228 if (__dev_get_by_name(&init_net, name) == NULL)
229 break;
230 }
231 if (i==100)
232 goto failed;
233 }
234 226
235 dev = alloc_netdev(sizeof(*t), name, ipip_tunnel_setup); 227 dev = alloc_netdev(sizeof(*t), name, ipip_tunnel_setup);
236 if (dev == NULL) 228 if (dev == NULL)
diff --git a/net/ipv4/netfilter/arpt_mangle.c b/net/ipv4/netfilter/arpt_mangle.c
index 45fa4e20094a..3f4222b0a803 100644
--- a/net/ipv4/netfilter/arpt_mangle.c
+++ b/net/ipv4/netfilter/arpt_mangle.c
@@ -19,7 +19,7 @@ target(struct sk_buff *skb,
19 unsigned char *arpptr; 19 unsigned char *arpptr;
20 int pln, hln; 20 int pln, hln;
21 21
22 if (skb_make_writable(skb, skb->len)) 22 if (!skb_make_writable(skb, skb->len))
23 return NF_DROP; 23 return NF_DROP;
24 24
25 arp = arp_hdr(skb); 25 arp = arp_hdr(skb);
diff --git a/net/ipv4/netfilter/ip_queue.c b/net/ipv4/netfilter/ip_queue.c
index 6bda1102851b..fe05da41d6ba 100644
--- a/net/ipv4/netfilter/ip_queue.c
+++ b/net/ipv4/netfilter/ip_queue.c
@@ -283,8 +283,8 @@ static int
283ipq_mangle_ipv4(ipq_verdict_msg_t *v, struct nf_queue_entry *e) 283ipq_mangle_ipv4(ipq_verdict_msg_t *v, struct nf_queue_entry *e)
284{ 284{
285 int diff; 285 int diff;
286 int err;
287 struct iphdr *user_iph = (struct iphdr *)v->payload; 286 struct iphdr *user_iph = (struct iphdr *)v->payload;
287 struct sk_buff *nskb;
288 288
289 if (v->data_len < sizeof(*user_iph)) 289 if (v->data_len < sizeof(*user_iph))
290 return 0; 290 return 0;
@@ -296,14 +296,16 @@ ipq_mangle_ipv4(ipq_verdict_msg_t *v, struct nf_queue_entry *e)
296 if (v->data_len > 0xFFFF) 296 if (v->data_len > 0xFFFF)
297 return -EINVAL; 297 return -EINVAL;
298 if (diff > skb_tailroom(e->skb)) { 298 if (diff > skb_tailroom(e->skb)) {
299 err = pskb_expand_head(e->skb, 0, 299 nskb = skb_copy_expand(e->skb, 0,
300 diff - skb_tailroom(e->skb), 300 diff - skb_tailroom(e->skb),
301 GFP_ATOMIC); 301 GFP_ATOMIC);
302 if (err) { 302 if (!nskb) {
303 printk(KERN_WARNING "ip_queue: error " 303 printk(KERN_WARNING "ip_queue: error "
304 "in mangle, dropping packet: %d\n", -err); 304 "in mangle, dropping packet\n");
305 return err; 305 return -ENOMEM;
306 } 306 }
307 kfree_skb(e->skb);
308 e->skb = nskb;
307 } 309 }
308 skb_put(e->skb, diff); 310 skb_put(e->skb, diff);
309 } 311 }
diff --git a/net/ipv4/tcp_ipv4.c b/net/ipv4/tcp_ipv4.c
index 63414ea427c5..00156bf421ca 100644
--- a/net/ipv4/tcp_ipv4.c
+++ b/net/ipv4/tcp_ipv4.c
@@ -719,7 +719,7 @@ static void tcp_v4_reqsk_send_ack(struct sk_buff *skb,
719} 719}
720 720
721/* 721/*
722 * Send a SYN-ACK after having received an ACK. 722 * Send a SYN-ACK after having received a SYN.
723 * This still operates on a request_sock only, not on a big 723 * This still operates on a request_sock only, not on a big
724 * socket. 724 * socket.
725 */ 725 */
diff --git a/net/ipv6/af_inet6.c b/net/ipv6/af_inet6.c
index bddac0e8780f..f0aa97738746 100644
--- a/net/ipv6/af_inet6.c
+++ b/net/ipv6/af_inet6.c
@@ -752,14 +752,6 @@ static int __init inet6_init(void)
752 752
753 BUILD_BUG_ON(sizeof(struct inet6_skb_parm) > sizeof(dummy_skb->cb)); 753 BUILD_BUG_ON(sizeof(struct inet6_skb_parm) > sizeof(dummy_skb->cb));
754 754
755#ifdef MODULE
756#if 0 /* FIXME --RR */
757 if (!mod_member_present(&__this_module, can_unload))
758 return -EINVAL;
759
760 __this_module.can_unload = &ipv6_unload;
761#endif
762#endif
763 err = proto_register(&tcpv6_prot, 1); 755 err = proto_register(&tcpv6_prot, 1);
764 if (err) 756 if (err)
765 goto out; 757 goto out;
diff --git a/net/ipv6/ip6_fib.c b/net/ipv6/ip6_fib.c
index f93407cf6515..bab72b6f1444 100644
--- a/net/ipv6/ip6_fib.c
+++ b/net/ipv6/ip6_fib.c
@@ -1151,7 +1151,7 @@ static void fib6_del_route(struct fib6_node *fn, struct rt6_info **rtp,
1151 fn = fn->parent; 1151 fn = fn->parent;
1152 } 1152 }
1153 /* No more references are possible at this point. */ 1153 /* No more references are possible at this point. */
1154 if (atomic_read(&rt->rt6i_ref) != 1) BUG(); 1154 BUG_ON(atomic_read(&rt->rt6i_ref) != 1);
1155 } 1155 }
1156 1156
1157 inet6_rt_notify(RTM_DELROUTE, rt, info); 1157 inet6_rt_notify(RTM_DELROUTE, rt, info);
diff --git a/net/ipv6/ip6_tunnel.c b/net/ipv6/ip6_tunnel.c
index 9031e521c1df..2a124e9a1b2d 100644
--- a/net/ipv6/ip6_tunnel.c
+++ b/net/ipv6/ip6_tunnel.c
@@ -229,18 +229,11 @@ static struct ip6_tnl *ip6_tnl_create(struct ip6_tnl_parm *p)
229 char name[IFNAMSIZ]; 229 char name[IFNAMSIZ];
230 int err; 230 int err;
231 231
232 if (p->name[0]) { 232 if (p->name[0])
233 strlcpy(name, p->name, IFNAMSIZ); 233 strlcpy(name, p->name, IFNAMSIZ);
234 } else { 234 else
235 int i; 235 sprintf(name, "ip6tnl%%d");
236 for (i = 1; i < IP6_TNL_MAX; i++) { 236
237 sprintf(name, "ip6tnl%d", i);
238 if (__dev_get_by_name(&init_net, name) == NULL)
239 break;
240 }
241 if (i == IP6_TNL_MAX)
242 goto failed;
243 }
244 dev = alloc_netdev(sizeof (*t), name, ip6_tnl_dev_setup); 237 dev = alloc_netdev(sizeof (*t), name, ip6_tnl_dev_setup);
245 if (dev == NULL) 238 if (dev == NULL)
246 goto failed; 239 goto failed;
@@ -550,6 +543,7 @@ ip4ip6_err(struct sk_buff *skb, struct inet6_skb_parm *opt,
550 ip_rt_put(rt); 543 ip_rt_put(rt);
551 goto out; 544 goto out;
552 } 545 }
546 skb2->dst = (struct dst_entry *)rt;
553 } else { 547 } else {
554 ip_rt_put(rt); 548 ip_rt_put(rt);
555 if (ip_route_input(skb2, eiph->daddr, eiph->saddr, eiph->tos, 549 if (ip_route_input(skb2, eiph->daddr, eiph->saddr, eiph->tos,
diff --git a/net/ipv6/netfilter/ip6_queue.c b/net/ipv6/netfilter/ip6_queue.c
index e869916b05f1..cc2f9afcf808 100644
--- a/net/ipv6/netfilter/ip6_queue.c
+++ b/net/ipv6/netfilter/ip6_queue.c
@@ -285,8 +285,8 @@ static int
285ipq_mangle_ipv6(ipq_verdict_msg_t *v, struct nf_queue_entry *e) 285ipq_mangle_ipv6(ipq_verdict_msg_t *v, struct nf_queue_entry *e)
286{ 286{
287 int diff; 287 int diff;
288 int err;
289 struct ipv6hdr *user_iph = (struct ipv6hdr *)v->payload; 288 struct ipv6hdr *user_iph = (struct ipv6hdr *)v->payload;
289 struct sk_buff *nskb;
290 290
291 if (v->data_len < sizeof(*user_iph)) 291 if (v->data_len < sizeof(*user_iph))
292 return 0; 292 return 0;
@@ -298,14 +298,16 @@ ipq_mangle_ipv6(ipq_verdict_msg_t *v, struct nf_queue_entry *e)
298 if (v->data_len > 0xFFFF) 298 if (v->data_len > 0xFFFF)
299 return -EINVAL; 299 return -EINVAL;
300 if (diff > skb_tailroom(e->skb)) { 300 if (diff > skb_tailroom(e->skb)) {
301 err = pskb_expand_head(e->skb, 0, 301 nskb = skb_copy_expand(e->skb, 0,
302 diff - skb_tailroom(e->skb), 302 diff - skb_tailroom(e->skb),
303 GFP_ATOMIC); 303 GFP_ATOMIC);
304 if (err) { 304 if (!nskb) {
305 printk(KERN_WARNING "ip6_queue: OOM " 305 printk(KERN_WARNING "ip6_queue: OOM "
306 "in mangle, dropping packet\n"); 306 "in mangle, dropping packet\n");
307 return err; 307 return -ENOMEM;
308 } 308 }
309 kfree_skb(e->skb);
310 e->skb = nskb;
309 } 311 }
310 skb_put(e->skb, diff); 312 skb_put(e->skb, diff);
311 } 313 }
diff --git a/net/ipv6/sit.c b/net/ipv6/sit.c
index e77239d02bf5..dde7801abeff 100644
--- a/net/ipv6/sit.c
+++ b/net/ipv6/sit.c
@@ -164,16 +164,8 @@ static struct ip_tunnel * ipip6_tunnel_locate(struct ip_tunnel_parm *parms, int
164 164
165 if (parms->name[0]) 165 if (parms->name[0])
166 strlcpy(name, parms->name, IFNAMSIZ); 166 strlcpy(name, parms->name, IFNAMSIZ);
167 else { 167 else
168 int i; 168 sprintf(name, "sit%%d");
169 for (i=1; i<100; i++) {
170 sprintf(name, "sit%d", i);
171 if (__dev_get_by_name(&init_net, name) == NULL)
172 break;
173 }
174 if (i==100)
175 goto failed;
176 }
177 169
178 dev = alloc_netdev(sizeof(*t), name, ipip6_tunnel_setup); 170 dev = alloc_netdev(sizeof(*t), name, ipip6_tunnel_setup);
179 if (dev == NULL) 171 if (dev == NULL)
diff --git a/net/mac80211/ieee80211.c b/net/mac80211/ieee80211.c
index 67b7c75c430d..28bcdf9fc3df 100644
--- a/net/mac80211/ieee80211.c
+++ b/net/mac80211/ieee80211.c
@@ -165,6 +165,7 @@ static int ieee80211_open(struct net_device *dev)
165 struct ieee80211_local *local = wdev_priv(dev->ieee80211_ptr); 165 struct ieee80211_local *local = wdev_priv(dev->ieee80211_ptr);
166 struct ieee80211_if_init_conf conf; 166 struct ieee80211_if_init_conf conf;
167 int res; 167 int res;
168 bool need_hw_reconfig = 0;
168 169
169 sdata = IEEE80211_DEV_TO_SUB_IF(dev); 170 sdata = IEEE80211_DEV_TO_SUB_IF(dev);
170 171
@@ -218,7 +219,7 @@ static int ieee80211_open(struct net_device *dev)
218 res = local->ops->start(local_to_hw(local)); 219 res = local->ops->start(local_to_hw(local));
219 if (res) 220 if (res)
220 return res; 221 return res;
221 ieee80211_hw_config(local); 222 need_hw_reconfig = 1;
222 ieee80211_led_radio(local, local->hw.conf.radio_enabled); 223 ieee80211_led_radio(local, local->hw.conf.radio_enabled);
223 } 224 }
224 225
@@ -282,6 +283,8 @@ static int ieee80211_open(struct net_device *dev)
282 atomic_inc(&local->iff_promiscs); 283 atomic_inc(&local->iff_promiscs);
283 284
284 local->open_count++; 285 local->open_count++;
286 if (need_hw_reconfig)
287 ieee80211_hw_config(local);
285 288
286 netif_start_queue(dev); 289 netif_start_queue(dev);
287 290
diff --git a/net/netfilter/nfnetlink_queue.c b/net/netfilter/nfnetlink_queue.c
index a48b20fe9cd6..0043d3a9f87e 100644
--- a/net/netfilter/nfnetlink_queue.c
+++ b/net/netfilter/nfnetlink_queue.c
@@ -443,8 +443,8 @@ err_out:
443static int 443static int
444nfqnl_mangle(void *data, int data_len, struct nf_queue_entry *e) 444nfqnl_mangle(void *data, int data_len, struct nf_queue_entry *e)
445{ 445{
446 struct sk_buff *nskb;
446 int diff; 447 int diff;
447 int err;
448 448
449 diff = data_len - e->skb->len; 449 diff = data_len - e->skb->len;
450 if (diff < 0) { 450 if (diff < 0) {
@@ -454,14 +454,16 @@ nfqnl_mangle(void *data, int data_len, struct nf_queue_entry *e)
454 if (data_len > 0xFFFF) 454 if (data_len > 0xFFFF)
455 return -EINVAL; 455 return -EINVAL;
456 if (diff > skb_tailroom(e->skb)) { 456 if (diff > skb_tailroom(e->skb)) {
457 err = pskb_expand_head(e->skb, 0, 457 nskb = skb_copy_expand(e->skb, 0,
458 diff - skb_tailroom(e->skb), 458 diff - skb_tailroom(e->skb),
459 GFP_ATOMIC); 459 GFP_ATOMIC);
460 if (err) { 460 if (!nskb) {
461 printk(KERN_WARNING "nf_queue: OOM " 461 printk(KERN_WARNING "nf_queue: OOM "
462 "in mangle, dropping packet\n"); 462 "in mangle, dropping packet\n");
463 return err; 463 return -ENOMEM;
464 } 464 }
465 kfree_skb(e->skb);
466 e->skb = nskb;
465 } 467 }
466 skb_put(e->skb, diff); 468 skb_put(e->skb, diff);
467 } 469 }
diff --git a/net/netfilter/xt_hashlimit.c b/net/netfilter/xt_hashlimit.c
index 744c7f2ab0b1..5418ce59ac3a 100644
--- a/net/netfilter/xt_hashlimit.c
+++ b/net/netfilter/xt_hashlimit.c
@@ -774,9 +774,6 @@ hashlimit_mt_check(const char *tablename, const void *inf,
774 return false; 774 return false;
775 } 775 }
776 mutex_unlock(&hlimit_mutex); 776 mutex_unlock(&hlimit_mutex);
777
778 /* Ugly hack: For SMP, we only want to use one set */
779 info->master = info;
780 return true; 777 return true;
781} 778}
782 779
diff --git a/net/netfilter/xt_iprange.c b/net/netfilter/xt_iprange.c
index 4f984dc60319..500528d60cd7 100644
--- a/net/netfilter/xt_iprange.c
+++ b/net/netfilter/xt_iprange.c
@@ -102,7 +102,7 @@ iprange_ipv6_sub(const struct in6_addr *a, const struct in6_addr *b)
102 int r; 102 int r;
103 103
104 for (i = 0; i < 4; ++i) { 104 for (i = 0; i < 4; ++i) {
105 r = (__force u32)a->s6_addr32[i] - (__force u32)b->s6_addr32[i]; 105 r = ntohl(a->s6_addr32[i]) - ntohl(b->s6_addr32[i]);
106 if (r != 0) 106 if (r != 0)
107 return r; 107 return r;
108 } 108 }
diff --git a/net/netfilter/xt_u32.c b/net/netfilter/xt_u32.c
index 9b8ed390a8e0..627e0f336d54 100644
--- a/net/netfilter/xt_u32.c
+++ b/net/netfilter/xt_u32.c
@@ -26,7 +26,6 @@ static bool u32_match_it(const struct xt_u32 *data,
26 u_int32_t pos; 26 u_int32_t pos;
27 u_int32_t val; 27 u_int32_t val;
28 u_int32_t at; 28 u_int32_t at;
29 int ret;
30 29
31 /* 30 /*
32 * Small example: "0 >> 28 == 4 && 8 & 0xFF0000 >> 16 = 6, 17" 31 * Small example: "0 >> 28 == 4 && 8 & 0xFF0000 >> 16 = 6, 17"
@@ -40,8 +39,8 @@ static bool u32_match_it(const struct xt_u32 *data,
40 if (skb->len < 4 || pos > skb->len - 4) 39 if (skb->len < 4 || pos > skb->len - 4)
41 return false; 40 return false;
42 41
43 ret = skb_copy_bits(skb, pos, &n, sizeof(n)); 42 if (skb_copy_bits(skb, pos, &n, sizeof(n)) < 0)
44 BUG_ON(ret < 0); 43 BUG();
45 val = ntohl(n); 44 val = ntohl(n);
46 nnums = ct->nnums; 45 nnums = ct->nnums;
47 46
@@ -67,9 +66,9 @@ static bool u32_match_it(const struct xt_u32 *data,
67 pos > skb->len - at - 4) 66 pos > skb->len - at - 4)
68 return false; 67 return false;
69 68
70 ret = skb_copy_bits(skb, at + pos, &n, 69 if (skb_copy_bits(skb, at + pos, &n,
71 sizeof(n)); 70 sizeof(n)) < 0)
72 BUG_ON(ret < 0); 71 BUG();
73 val = ntohl(n); 72 val = ntohl(n);
74 break; 73 break;
75 } 74 }
diff --git a/net/netlabel/netlabel_cipso_v4.c b/net/netlabel/netlabel_cipso_v4.c
index c7ad64d664ad..fdc14a0d21af 100644
--- a/net/netlabel/netlabel_cipso_v4.c
+++ b/net/netlabel/netlabel_cipso_v4.c
@@ -718,36 +718,35 @@ static int netlbl_cipsov4_remove(struct sk_buff *skb, struct genl_info *info)
718 * NetLabel Generic NETLINK Command Definitions 718 * NetLabel Generic NETLINK Command Definitions
719 */ 719 */
720 720
721static struct genl_ops netlbl_cipsov4_genl_c_add = { 721static struct genl_ops netlbl_cipsov4_ops[] = {
722 {
722 .cmd = NLBL_CIPSOV4_C_ADD, 723 .cmd = NLBL_CIPSOV4_C_ADD,
723 .flags = GENL_ADMIN_PERM, 724 .flags = GENL_ADMIN_PERM,
724 .policy = netlbl_cipsov4_genl_policy, 725 .policy = netlbl_cipsov4_genl_policy,
725 .doit = netlbl_cipsov4_add, 726 .doit = netlbl_cipsov4_add,
726 .dumpit = NULL, 727 .dumpit = NULL,
727}; 728 },
728 729 {
729static struct genl_ops netlbl_cipsov4_genl_c_remove = {
730 .cmd = NLBL_CIPSOV4_C_REMOVE, 730 .cmd = NLBL_CIPSOV4_C_REMOVE,
731 .flags = GENL_ADMIN_PERM, 731 .flags = GENL_ADMIN_PERM,
732 .policy = netlbl_cipsov4_genl_policy, 732 .policy = netlbl_cipsov4_genl_policy,
733 .doit = netlbl_cipsov4_remove, 733 .doit = netlbl_cipsov4_remove,
734 .dumpit = NULL, 734 .dumpit = NULL,
735}; 735 },
736 736 {
737static struct genl_ops netlbl_cipsov4_genl_c_list = {
738 .cmd = NLBL_CIPSOV4_C_LIST, 737 .cmd = NLBL_CIPSOV4_C_LIST,
739 .flags = 0, 738 .flags = 0,
740 .policy = netlbl_cipsov4_genl_policy, 739 .policy = netlbl_cipsov4_genl_policy,
741 .doit = netlbl_cipsov4_list, 740 .doit = netlbl_cipsov4_list,
742 .dumpit = NULL, 741 .dumpit = NULL,
743}; 742 },
744 743 {
745static struct genl_ops netlbl_cipsov4_genl_c_listall = {
746 .cmd = NLBL_CIPSOV4_C_LISTALL, 744 .cmd = NLBL_CIPSOV4_C_LISTALL,
747 .flags = 0, 745 .flags = 0,
748 .policy = netlbl_cipsov4_genl_policy, 746 .policy = netlbl_cipsov4_genl_policy,
749 .doit = NULL, 747 .doit = NULL,
750 .dumpit = netlbl_cipsov4_listall, 748 .dumpit = netlbl_cipsov4_listall,
749 },
751}; 750};
752 751
753/* 752/*
@@ -762,30 +761,20 @@ static struct genl_ops netlbl_cipsov4_genl_c_listall = {
762 * mechanism. Returns zero on success, negative values on failure. 761 * mechanism. Returns zero on success, negative values on failure.
763 * 762 *
764 */ 763 */
765int netlbl_cipsov4_genl_init(void) 764int __init netlbl_cipsov4_genl_init(void)
766{ 765{
767 int ret_val; 766 int ret_val, i;
768 767
769 ret_val = genl_register_family(&netlbl_cipsov4_gnl_family); 768 ret_val = genl_register_family(&netlbl_cipsov4_gnl_family);
770 if (ret_val != 0) 769 if (ret_val != 0)
771 return ret_val; 770 return ret_val;
772 771
773 ret_val = genl_register_ops(&netlbl_cipsov4_gnl_family, 772 for (i = 0; i < ARRAY_SIZE(netlbl_cipsov4_ops); i++) {
774 &netlbl_cipsov4_genl_c_add); 773 ret_val = genl_register_ops(&netlbl_cipsov4_gnl_family,
775 if (ret_val != 0) 774 &netlbl_cipsov4_ops[i]);
776 return ret_val; 775 if (ret_val != 0)
777 ret_val = genl_register_ops(&netlbl_cipsov4_gnl_family, 776 return ret_val;
778 &netlbl_cipsov4_genl_c_remove); 777 }
779 if (ret_val != 0)
780 return ret_val;
781 ret_val = genl_register_ops(&netlbl_cipsov4_gnl_family,
782 &netlbl_cipsov4_genl_c_list);
783 if (ret_val != 0)
784 return ret_val;
785 ret_val = genl_register_ops(&netlbl_cipsov4_gnl_family,
786 &netlbl_cipsov4_genl_c_listall);
787 if (ret_val != 0)
788 return ret_val;
789 778
790 return 0; 779 return 0;
791} 780}
diff --git a/net/netlabel/netlabel_domainhash.c b/net/netlabel/netlabel_domainhash.c
index fd462313471c..02c2f7c0b255 100644
--- a/net/netlabel/netlabel_domainhash.c
+++ b/net/netlabel/netlabel_domainhash.c
@@ -171,7 +171,7 @@ static struct netlbl_dom_map *netlbl_domhsh_search_def(const char *domain)
171 * values on error. 171 * values on error.
172 * 172 *
173 */ 173 */
174int netlbl_domhsh_init(u32 size) 174int __init netlbl_domhsh_init(u32 size)
175{ 175{
176 u32 iter; 176 u32 iter;
177 struct netlbl_domhsh_tbl *hsh_tbl; 177 struct netlbl_domhsh_tbl *hsh_tbl;
diff --git a/net/netlabel/netlabel_mgmt.c b/net/netlabel/netlabel_mgmt.c
index e2258dc3c845..22c191267808 100644
--- a/net/netlabel/netlabel_mgmt.c
+++ b/net/netlabel/netlabel_mgmt.c
@@ -517,68 +517,63 @@ version_failure:
517 * NetLabel Generic NETLINK Command Definitions 517 * NetLabel Generic NETLINK Command Definitions
518 */ 518 */
519 519
520static struct genl_ops netlbl_mgmt_genl_c_add = { 520static struct genl_ops netlbl_mgmt_genl_ops[] = {
521 {
521 .cmd = NLBL_MGMT_C_ADD, 522 .cmd = NLBL_MGMT_C_ADD,
522 .flags = GENL_ADMIN_PERM, 523 .flags = GENL_ADMIN_PERM,
523 .policy = netlbl_mgmt_genl_policy, 524 .policy = netlbl_mgmt_genl_policy,
524 .doit = netlbl_mgmt_add, 525 .doit = netlbl_mgmt_add,
525 .dumpit = NULL, 526 .dumpit = NULL,
526}; 527 },
527 528 {
528static struct genl_ops netlbl_mgmt_genl_c_remove = {
529 .cmd = NLBL_MGMT_C_REMOVE, 529 .cmd = NLBL_MGMT_C_REMOVE,
530 .flags = GENL_ADMIN_PERM, 530 .flags = GENL_ADMIN_PERM,
531 .policy = netlbl_mgmt_genl_policy, 531 .policy = netlbl_mgmt_genl_policy,
532 .doit = netlbl_mgmt_remove, 532 .doit = netlbl_mgmt_remove,
533 .dumpit = NULL, 533 .dumpit = NULL,
534}; 534 },
535 535 {
536static struct genl_ops netlbl_mgmt_genl_c_listall = {
537 .cmd = NLBL_MGMT_C_LISTALL, 536 .cmd = NLBL_MGMT_C_LISTALL,
538 .flags = 0, 537 .flags = 0,
539 .policy = netlbl_mgmt_genl_policy, 538 .policy = netlbl_mgmt_genl_policy,
540 .doit = NULL, 539 .doit = NULL,
541 .dumpit = netlbl_mgmt_listall, 540 .dumpit = netlbl_mgmt_listall,
542}; 541 },
543 542 {
544static struct genl_ops netlbl_mgmt_genl_c_adddef = {
545 .cmd = NLBL_MGMT_C_ADDDEF, 543 .cmd = NLBL_MGMT_C_ADDDEF,
546 .flags = GENL_ADMIN_PERM, 544 .flags = GENL_ADMIN_PERM,
547 .policy = netlbl_mgmt_genl_policy, 545 .policy = netlbl_mgmt_genl_policy,
548 .doit = netlbl_mgmt_adddef, 546 .doit = netlbl_mgmt_adddef,
549 .dumpit = NULL, 547 .dumpit = NULL,
550}; 548 },
551 549 {
552static struct genl_ops netlbl_mgmt_genl_c_removedef = {
553 .cmd = NLBL_MGMT_C_REMOVEDEF, 550 .cmd = NLBL_MGMT_C_REMOVEDEF,
554 .flags = GENL_ADMIN_PERM, 551 .flags = GENL_ADMIN_PERM,
555 .policy = netlbl_mgmt_genl_policy, 552 .policy = netlbl_mgmt_genl_policy,
556 .doit = netlbl_mgmt_removedef, 553 .doit = netlbl_mgmt_removedef,
557 .dumpit = NULL, 554 .dumpit = NULL,
558}; 555 },
559 556 {
560static struct genl_ops netlbl_mgmt_genl_c_listdef = {
561 .cmd = NLBL_MGMT_C_LISTDEF, 557 .cmd = NLBL_MGMT_C_LISTDEF,
562 .flags = 0, 558 .flags = 0,
563 .policy = netlbl_mgmt_genl_policy, 559 .policy = netlbl_mgmt_genl_policy,
564 .doit = netlbl_mgmt_listdef, 560 .doit = netlbl_mgmt_listdef,
565 .dumpit = NULL, 561 .dumpit = NULL,
566}; 562 },
567 563 {
568static struct genl_ops netlbl_mgmt_genl_c_protocols = {
569 .cmd = NLBL_MGMT_C_PROTOCOLS, 564 .cmd = NLBL_MGMT_C_PROTOCOLS,
570 .flags = 0, 565 .flags = 0,
571 .policy = netlbl_mgmt_genl_policy, 566 .policy = netlbl_mgmt_genl_policy,
572 .doit = NULL, 567 .doit = NULL,
573 .dumpit = netlbl_mgmt_protocols, 568 .dumpit = netlbl_mgmt_protocols,
574}; 569 },
575 570 {
576static struct genl_ops netlbl_mgmt_genl_c_version = {
577 .cmd = NLBL_MGMT_C_VERSION, 571 .cmd = NLBL_MGMT_C_VERSION,
578 .flags = 0, 572 .flags = 0,
579 .policy = netlbl_mgmt_genl_policy, 573 .policy = netlbl_mgmt_genl_policy,
580 .doit = netlbl_mgmt_version, 574 .doit = netlbl_mgmt_version,
581 .dumpit = NULL, 575 .dumpit = NULL,
576 },
582}; 577};
583 578
584/* 579/*
@@ -593,46 +588,20 @@ static struct genl_ops netlbl_mgmt_genl_c_version = {
593 * mechanism. Returns zero on success, negative values on failure. 588 * mechanism. Returns zero on success, negative values on failure.
594 * 589 *
595 */ 590 */
596int netlbl_mgmt_genl_init(void) 591int __init netlbl_mgmt_genl_init(void)
597{ 592{
598 int ret_val; 593 int ret_val, i;
599 594
600 ret_val = genl_register_family(&netlbl_mgmt_gnl_family); 595 ret_val = genl_register_family(&netlbl_mgmt_gnl_family);
601 if (ret_val != 0) 596 if (ret_val != 0)
602 return ret_val; 597 return ret_val;
603 598
604 ret_val = genl_register_ops(&netlbl_mgmt_gnl_family, 599 for (i = 0; i < ARRAY_SIZE(netlbl_mgmt_genl_ops); i++) {
605 &netlbl_mgmt_genl_c_add); 600 ret_val = genl_register_ops(&netlbl_mgmt_gnl_family,
606 if (ret_val != 0) 601 &netlbl_mgmt_genl_ops[i]);
607 return ret_val; 602 if (ret_val != 0)
608 ret_val = genl_register_ops(&netlbl_mgmt_gnl_family, 603 return ret_val;
609 &netlbl_mgmt_genl_c_remove); 604 }
610 if (ret_val != 0)
611 return ret_val;
612 ret_val = genl_register_ops(&netlbl_mgmt_gnl_family,
613 &netlbl_mgmt_genl_c_listall);
614 if (ret_val != 0)
615 return ret_val;
616 ret_val = genl_register_ops(&netlbl_mgmt_gnl_family,
617 &netlbl_mgmt_genl_c_adddef);
618 if (ret_val != 0)
619 return ret_val;
620 ret_val = genl_register_ops(&netlbl_mgmt_gnl_family,
621 &netlbl_mgmt_genl_c_removedef);
622 if (ret_val != 0)
623 return ret_val;
624 ret_val = genl_register_ops(&netlbl_mgmt_gnl_family,
625 &netlbl_mgmt_genl_c_listdef);
626 if (ret_val != 0)
627 return ret_val;
628 ret_val = genl_register_ops(&netlbl_mgmt_gnl_family,
629 &netlbl_mgmt_genl_c_protocols);
630 if (ret_val != 0)
631 return ret_val;
632 ret_val = genl_register_ops(&netlbl_mgmt_gnl_family,
633 &netlbl_mgmt_genl_c_version);
634 if (ret_val != 0)
635 return ret_val;
636 605
637 return 0; 606 return 0;
638} 607}
diff --git a/net/netlabel/netlabel_unlabeled.c b/net/netlabel/netlabel_unlabeled.c
index 3e745b72fded..4478f2f6079d 100644
--- a/net/netlabel/netlabel_unlabeled.c
+++ b/net/netlabel/netlabel_unlabeled.c
@@ -1553,68 +1553,63 @@ unlabel_staticlistdef_return:
1553 * NetLabel Generic NETLINK Command Definitions 1553 * NetLabel Generic NETLINK Command Definitions
1554 */ 1554 */
1555 1555
1556static struct genl_ops netlbl_unlabel_genl_c_staticadd = { 1556static struct genl_ops netlbl_unlabel_genl_ops[] = {
1557 {
1557 .cmd = NLBL_UNLABEL_C_STATICADD, 1558 .cmd = NLBL_UNLABEL_C_STATICADD,
1558 .flags = GENL_ADMIN_PERM, 1559 .flags = GENL_ADMIN_PERM,
1559 .policy = netlbl_unlabel_genl_policy, 1560 .policy = netlbl_unlabel_genl_policy,
1560 .doit = netlbl_unlabel_staticadd, 1561 .doit = netlbl_unlabel_staticadd,
1561 .dumpit = NULL, 1562 .dumpit = NULL,
1562}; 1563 },
1563 1564 {
1564static struct genl_ops netlbl_unlabel_genl_c_staticremove = {
1565 .cmd = NLBL_UNLABEL_C_STATICREMOVE, 1565 .cmd = NLBL_UNLABEL_C_STATICREMOVE,
1566 .flags = GENL_ADMIN_PERM, 1566 .flags = GENL_ADMIN_PERM,
1567 .policy = netlbl_unlabel_genl_policy, 1567 .policy = netlbl_unlabel_genl_policy,
1568 .doit = netlbl_unlabel_staticremove, 1568 .doit = netlbl_unlabel_staticremove,
1569 .dumpit = NULL, 1569 .dumpit = NULL,
1570}; 1570 },
1571 1571 {
1572static struct genl_ops netlbl_unlabel_genl_c_staticlist = {
1573 .cmd = NLBL_UNLABEL_C_STATICLIST, 1572 .cmd = NLBL_UNLABEL_C_STATICLIST,
1574 .flags = 0, 1573 .flags = 0,
1575 .policy = netlbl_unlabel_genl_policy, 1574 .policy = netlbl_unlabel_genl_policy,
1576 .doit = NULL, 1575 .doit = NULL,
1577 .dumpit = netlbl_unlabel_staticlist, 1576 .dumpit = netlbl_unlabel_staticlist,
1578}; 1577 },
1579 1578 {
1580static struct genl_ops netlbl_unlabel_genl_c_staticadddef = {
1581 .cmd = NLBL_UNLABEL_C_STATICADDDEF, 1579 .cmd = NLBL_UNLABEL_C_STATICADDDEF,
1582 .flags = GENL_ADMIN_PERM, 1580 .flags = GENL_ADMIN_PERM,
1583 .policy = netlbl_unlabel_genl_policy, 1581 .policy = netlbl_unlabel_genl_policy,
1584 .doit = netlbl_unlabel_staticadddef, 1582 .doit = netlbl_unlabel_staticadddef,
1585 .dumpit = NULL, 1583 .dumpit = NULL,
1586}; 1584 },
1587 1585 {
1588static struct genl_ops netlbl_unlabel_genl_c_staticremovedef = {
1589 .cmd = NLBL_UNLABEL_C_STATICREMOVEDEF, 1586 .cmd = NLBL_UNLABEL_C_STATICREMOVEDEF,
1590 .flags = GENL_ADMIN_PERM, 1587 .flags = GENL_ADMIN_PERM,
1591 .policy = netlbl_unlabel_genl_policy, 1588 .policy = netlbl_unlabel_genl_policy,
1592 .doit = netlbl_unlabel_staticremovedef, 1589 .doit = netlbl_unlabel_staticremovedef,
1593 .dumpit = NULL, 1590 .dumpit = NULL,
1594}; 1591 },
1595 1592 {
1596static struct genl_ops netlbl_unlabel_genl_c_staticlistdef = {
1597 .cmd = NLBL_UNLABEL_C_STATICLISTDEF, 1593 .cmd = NLBL_UNLABEL_C_STATICLISTDEF,
1598 .flags = 0, 1594 .flags = 0,
1599 .policy = netlbl_unlabel_genl_policy, 1595 .policy = netlbl_unlabel_genl_policy,
1600 .doit = NULL, 1596 .doit = NULL,
1601 .dumpit = netlbl_unlabel_staticlistdef, 1597 .dumpit = netlbl_unlabel_staticlistdef,
1602}; 1598 },
1603 1599 {
1604static struct genl_ops netlbl_unlabel_genl_c_accept = {
1605 .cmd = NLBL_UNLABEL_C_ACCEPT, 1600 .cmd = NLBL_UNLABEL_C_ACCEPT,
1606 .flags = GENL_ADMIN_PERM, 1601 .flags = GENL_ADMIN_PERM,
1607 .policy = netlbl_unlabel_genl_policy, 1602 .policy = netlbl_unlabel_genl_policy,
1608 .doit = netlbl_unlabel_accept, 1603 .doit = netlbl_unlabel_accept,
1609 .dumpit = NULL, 1604 .dumpit = NULL,
1610}; 1605 },
1611 1606 {
1612static struct genl_ops netlbl_unlabel_genl_c_list = {
1613 .cmd = NLBL_UNLABEL_C_LIST, 1607 .cmd = NLBL_UNLABEL_C_LIST,
1614 .flags = 0, 1608 .flags = 0,
1615 .policy = netlbl_unlabel_genl_policy, 1609 .policy = netlbl_unlabel_genl_policy,
1616 .doit = netlbl_unlabel_list, 1610 .doit = netlbl_unlabel_list,
1617 .dumpit = NULL, 1611 .dumpit = NULL,
1612 },
1618}; 1613};
1619 1614
1620/* 1615/*
@@ -1629,53 +1624,20 @@ static struct genl_ops netlbl_unlabel_genl_c_list = {
1629 * mechanism. Returns zero on success, negative values on failure. 1624 * mechanism. Returns zero on success, negative values on failure.
1630 * 1625 *
1631 */ 1626 */
1632int netlbl_unlabel_genl_init(void) 1627int __init netlbl_unlabel_genl_init(void)
1633{ 1628{
1634 int ret_val; 1629 int ret_val, i;
1635 1630
1636 ret_val = genl_register_family(&netlbl_unlabel_gnl_family); 1631 ret_val = genl_register_family(&netlbl_unlabel_gnl_family);
1637 if (ret_val != 0) 1632 if (ret_val != 0)
1638 return ret_val; 1633 return ret_val;
1639 1634
1640 ret_val = genl_register_ops(&netlbl_unlabel_gnl_family, 1635 for (i = 0; i < ARRAY_SIZE(netlbl_unlabel_genl_ops); i++) {
1641 &netlbl_unlabel_genl_c_staticadd); 1636 ret_val = genl_register_ops(&netlbl_unlabel_gnl_family,
1642 if (ret_val != 0) 1637 &netlbl_unlabel_genl_ops[i]);
1643 return ret_val; 1638 if (ret_val != 0)
1644 1639 return ret_val;
1645 ret_val = genl_register_ops(&netlbl_unlabel_gnl_family, 1640 }
1646 &netlbl_unlabel_genl_c_staticremove);
1647 if (ret_val != 0)
1648 return ret_val;
1649
1650 ret_val = genl_register_ops(&netlbl_unlabel_gnl_family,
1651 &netlbl_unlabel_genl_c_staticlist);
1652 if (ret_val != 0)
1653 return ret_val;
1654
1655 ret_val = genl_register_ops(&netlbl_unlabel_gnl_family,
1656 &netlbl_unlabel_genl_c_staticadddef);
1657 if (ret_val != 0)
1658 return ret_val;
1659
1660 ret_val = genl_register_ops(&netlbl_unlabel_gnl_family,
1661 &netlbl_unlabel_genl_c_staticremovedef);
1662 if (ret_val != 0)
1663 return ret_val;
1664
1665 ret_val = genl_register_ops(&netlbl_unlabel_gnl_family,
1666 &netlbl_unlabel_genl_c_staticlistdef);
1667 if (ret_val != 0)
1668 return ret_val;
1669
1670 ret_val = genl_register_ops(&netlbl_unlabel_gnl_family,
1671 &netlbl_unlabel_genl_c_accept);
1672 if (ret_val != 0)
1673 return ret_val;
1674
1675 ret_val = genl_register_ops(&netlbl_unlabel_gnl_family,
1676 &netlbl_unlabel_genl_c_list);
1677 if (ret_val != 0)
1678 return ret_val;
1679 1641
1680 return 0; 1642 return 0;
1681} 1643}
@@ -1699,7 +1661,7 @@ static struct notifier_block netlbl_unlhsh_netdev_notifier = {
1699 * non-zero values on error. 1661 * non-zero values on error.
1700 * 1662 *
1701 */ 1663 */
1702int netlbl_unlabel_init(u32 size) 1664int __init netlbl_unlabel_init(u32 size)
1703{ 1665{
1704 u32 iter; 1666 u32 iter;
1705 struct netlbl_unlhsh_tbl *hsh_tbl; 1667 struct netlbl_unlhsh_tbl *hsh_tbl;
@@ -1803,7 +1765,7 @@ unlabel_getattr_nolabel:
1803 * and to send unlabeled network traffic by default. 1765 * and to send unlabeled network traffic by default.
1804 * 1766 *
1805 */ 1767 */
1806int netlbl_unlabel_defconf(void) 1768int __init netlbl_unlabel_defconf(void)
1807{ 1769{
1808 int ret_val; 1770 int ret_val;
1809 struct netlbl_dom_map *entry; 1771 struct netlbl_dom_map *entry;
diff --git a/net/netlabel/netlabel_user.c b/net/netlabel/netlabel_user.c
index 023fc8fe840d..b17d4203806e 100644
--- a/net/netlabel/netlabel_user.c
+++ b/net/netlabel/netlabel_user.c
@@ -59,7 +59,7 @@
59 * non-zero on failure. 59 * non-zero on failure.
60 * 60 *
61 */ 61 */
62int netlbl_netlink_init(void) 62int __init netlbl_netlink_init(void)
63{ 63{
64 int ret_val; 64 int ret_val;
65 65
diff --git a/net/rfkill/rfkill.c b/net/rfkill/rfkill.c
index 1a47f5d1be17..140a0a8c6b02 100644
--- a/net/rfkill/rfkill.c
+++ b/net/rfkill/rfkill.c
@@ -232,7 +232,7 @@ static int rfkill_suspend(struct device *dev, pm_message_t state)
232 struct rfkill *rfkill = to_rfkill(dev); 232 struct rfkill *rfkill = to_rfkill(dev);
233 233
234 if (dev->power.power_state.event != state.event) { 234 if (dev->power.power_state.event != state.event) {
235 if (state.event == PM_EVENT_SUSPEND) { 235 if (state.event & PM_EVENT_SLEEP) {
236 mutex_lock(&rfkill->mutex); 236 mutex_lock(&rfkill->mutex);
237 237
238 if (rfkill->state == RFKILL_STATE_ON) 238 if (rfkill->state == RFKILL_STATE_ON)
diff --git a/net/rxrpc/ar-accept.c b/net/rxrpc/ar-accept.c
index 92a87fde8bfe..bdfb77417794 100644
--- a/net/rxrpc/ar-accept.c
+++ b/net/rxrpc/ar-accept.c
@@ -156,8 +156,7 @@ static int rxrpc_accept_incoming_call(struct rxrpc_local *local,
156 false); 156 false);
157 spin_unlock(&call->lock); 157 spin_unlock(&call->lock);
158 notification = NULL; 158 notification = NULL;
159 if (ret < 0) 159 BUG_ON(ret < 0);
160 BUG();
161 } 160 }
162 spin_unlock(&call->conn->state_lock); 161 spin_unlock(&call->conn->state_lock);
163 162
diff --git a/net/rxrpc/ar-ack.c b/net/rxrpc/ar-ack.c
index 657ee69f2133..3ac1672e1070 100644
--- a/net/rxrpc/ar-ack.c
+++ b/net/rxrpc/ar-ack.c
@@ -814,8 +814,7 @@ static int rxrpc_post_message(struct rxrpc_call *call, u32 mark, u32 error,
814 spin_lock_bh(&call->lock); 814 spin_lock_bh(&call->lock);
815 ret = rxrpc_queue_rcv_skb(call, skb, true, fatal); 815 ret = rxrpc_queue_rcv_skb(call, skb, true, fatal);
816 spin_unlock_bh(&call->lock); 816 spin_unlock_bh(&call->lock);
817 if (ret < 0) 817 BUG_ON(ret < 0);
818 BUG();
819 } 818 }
820 819
821 return 0; 820 return 0;
diff --git a/net/sctp/socket.c b/net/sctp/socket.c
index d47d5787e2e5..44797ad88a05 100644
--- a/net/sctp/socket.c
+++ b/net/sctp/socket.c
@@ -6488,6 +6488,7 @@ struct proto sctp_prot = {
6488 .memory_pressure = &sctp_memory_pressure, 6488 .memory_pressure = &sctp_memory_pressure,
6489 .enter_memory_pressure = sctp_enter_memory_pressure, 6489 .enter_memory_pressure = sctp_enter_memory_pressure,
6490 .memory_allocated = &sctp_memory_allocated, 6490 .memory_allocated = &sctp_memory_allocated,
6491 .sockets_allocated = &sctp_sockets_allocated,
6491 REF_PROTO_INUSE(sctp) 6492 REF_PROTO_INUSE(sctp)
6492}; 6493};
6493 6494
@@ -6521,6 +6522,7 @@ struct proto sctpv6_prot = {
6521 .memory_pressure = &sctp_memory_pressure, 6522 .memory_pressure = &sctp_memory_pressure,
6522 .enter_memory_pressure = sctp_enter_memory_pressure, 6523 .enter_memory_pressure = sctp_enter_memory_pressure,
6523 .memory_allocated = &sctp_memory_allocated, 6524 .memory_allocated = &sctp_memory_allocated,
6525 .sockets_allocated = &sctp_sockets_allocated,
6524 REF_PROTO_INUSE(sctpv6) 6526 REF_PROTO_INUSE(sctpv6)
6525}; 6527};
6526#endif /* defined(CONFIG_IPV6) || defined(CONFIG_IPV6_MODULE) */ 6528#endif /* defined(CONFIG_IPV6) || defined(CONFIG_IPV6_MODULE) */
diff --git a/net/sunrpc/svcsock.c b/net/sunrpc/svcsock.c
index 1d3e5fcc2cc4..c475977de05a 100644
--- a/net/sunrpc/svcsock.c
+++ b/net/sunrpc/svcsock.c
@@ -175,7 +175,7 @@ static int svc_sendto(struct svc_rqst *rqstp, struct xdr_buf *xdr)
175 size_t base = xdr->page_base; 175 size_t base = xdr->page_base;
176 unsigned int pglen = xdr->page_len; 176 unsigned int pglen = xdr->page_len;
177 unsigned int flags = MSG_MORE; 177 unsigned int flags = MSG_MORE;
178 char buf[RPC_MAX_ADDRBUFLEN]; 178 RPC_IFDEBUG(char buf[RPC_MAX_ADDRBUFLEN]);
179 179
180 slen = xdr->len; 180 slen = xdr->len;
181 181
@@ -716,7 +716,7 @@ static struct svc_xprt *svc_tcp_accept(struct svc_xprt *xprt)
716 struct socket *newsock; 716 struct socket *newsock;
717 struct svc_sock *newsvsk; 717 struct svc_sock *newsvsk;
718 int err, slen; 718 int err, slen;
719 char buf[RPC_MAX_ADDRBUFLEN]; 719 RPC_IFDEBUG(char buf[RPC_MAX_ADDRBUFLEN]);
720 720
721 dprintk("svc: tcp_accept %p sock %p\n", svsk, sock); 721 dprintk("svc: tcp_accept %p sock %p\n", svsk, sock);
722 if (!sock) 722 if (!sock)
@@ -1206,10 +1206,10 @@ static struct svc_xprt *svc_create_socket(struct svc_serv *serv,
1206 struct socket *sock; 1206 struct socket *sock;
1207 int error; 1207 int error;
1208 int type; 1208 int type;
1209 char buf[RPC_MAX_ADDRBUFLEN];
1210 struct sockaddr_storage addr; 1209 struct sockaddr_storage addr;
1211 struct sockaddr *newsin = (struct sockaddr *)&addr; 1210 struct sockaddr *newsin = (struct sockaddr *)&addr;
1212 int newlen; 1211 int newlen;
1212 RPC_IFDEBUG(char buf[RPC_MAX_ADDRBUFLEN]);
1213 1213
1214 dprintk("svc: svc_create_socket(%s, %d, %s)\n", 1214 dprintk("svc: svc_create_socket(%s, %d, %s)\n",
1215 serv->sv_program->pg_name, protocol, 1215 serv->sv_program->pg_name, protocol,
diff --git a/net/xfrm/xfrm_policy.c b/net/xfrm/xfrm_policy.c
index 47219f98053f..9fc4c315f6cd 100644
--- a/net/xfrm/xfrm_policy.c
+++ b/net/xfrm/xfrm_policy.c
@@ -331,15 +331,31 @@ static void xfrm_dst_hash_transfer(struct hlist_head *list,
331 struct hlist_head *ndsttable, 331 struct hlist_head *ndsttable,
332 unsigned int nhashmask) 332 unsigned int nhashmask)
333{ 333{
334 struct hlist_node *entry, *tmp; 334 struct hlist_node *entry, *tmp, *entry0 = NULL;
335 struct xfrm_policy *pol; 335 struct xfrm_policy *pol;
336 unsigned int h0 = 0;
336 337
338redo:
337 hlist_for_each_entry_safe(pol, entry, tmp, list, bydst) { 339 hlist_for_each_entry_safe(pol, entry, tmp, list, bydst) {
338 unsigned int h; 340 unsigned int h;
339 341
340 h = __addr_hash(&pol->selector.daddr, &pol->selector.saddr, 342 h = __addr_hash(&pol->selector.daddr, &pol->selector.saddr,
341 pol->family, nhashmask); 343 pol->family, nhashmask);
342 hlist_add_head(&pol->bydst, ndsttable+h); 344 if (!entry0) {
345 hlist_del(entry);
346 hlist_add_head(&pol->bydst, ndsttable+h);
347 h0 = h;
348 } else {
349 if (h != h0)
350 continue;
351 hlist_del(entry);
352 hlist_add_after(entry0, &pol->bydst);
353 }
354 entry0 = entry;
355 }
356 if (!hlist_empty(list)) {
357 entry0 = NULL;
358 goto redo;
343 } 359 }
344} 360}
345 361
diff --git a/scripts/kconfig/symbol.c b/scripts/kconfig/symbol.c
index 3929e5b35e79..4a03191ad176 100644
--- a/scripts/kconfig/symbol.c
+++ b/scripts/kconfig/symbol.c
@@ -298,22 +298,30 @@ void sym_calc_value(struct symbol *sym)
298 if (sym_is_choice_value(sym) && sym->visible == yes) { 298 if (sym_is_choice_value(sym) && sym->visible == yes) {
299 prop = sym_get_choice_prop(sym); 299 prop = sym_get_choice_prop(sym);
300 newval.tri = (prop_get_symbol(prop)->curr.val == sym) ? yes : no; 300 newval.tri = (prop_get_symbol(prop)->curr.val == sym) ? yes : no;
301 } else if (EXPR_OR(sym->visible, sym->rev_dep.tri) != no) { 301 } else {
302 sym->flags |= SYMBOL_WRITE; 302 if (sym->visible != no) {
303 if (sym_has_value(sym)) 303 /* if the symbol is visible use the user value
304 newval.tri = sym->def[S_DEF_USER].tri; 304 * if available, otherwise try the default value
305 else if (!sym_is_choice(sym)) { 305 */
306 prop = sym_get_default_prop(sym); 306 sym->flags |= SYMBOL_WRITE;
307 if (prop) 307 if (sym_has_value(sym)) {
308 newval.tri = expr_calc_value(prop->expr); 308 newval.tri = EXPR_AND(sym->def[S_DEF_USER].tri,
309 sym->visible);
310 goto calc_newval;
311 }
309 } 312 }
310 newval.tri = EXPR_OR(EXPR_AND(newval.tri, sym->visible), sym->rev_dep.tri); 313 if (sym->rev_dep.tri != no)
311 } else if (!sym_is_choice(sym)) {
312 prop = sym_get_default_prop(sym);
313 if (prop) {
314 sym->flags |= SYMBOL_WRITE; 314 sym->flags |= SYMBOL_WRITE;
315 newval.tri = expr_calc_value(prop->expr); 315 if (!sym_is_choice(sym)) {
316 prop = sym_get_default_prop(sym);
317 if (prop) {
318 sym->flags |= SYMBOL_WRITE;
319 newval.tri = EXPR_AND(expr_calc_value(prop->expr),
320 prop->visible.tri);
321 }
316 } 322 }
323 calc_newval:
324 newval.tri = EXPR_OR(newval.tri, sym->rev_dep.tri);
317 } 325 }
318 if (newval.tri == mod && sym_get_type(sym) == S_BOOLEAN) 326 if (newval.tri == mod && sym_get_type(sym) == S_BOOLEAN)
319 newval.tri = yes; 327 newval.tri = yes;
diff --git a/scripts/kernel-doc b/scripts/kernel-doc
index 26146cbaa504..74c2f9db2aac 100755
--- a/scripts/kernel-doc
+++ b/scripts/kernel-doc
@@ -1512,13 +1512,13 @@ sub create_parameterlist($$$) {
1512 # corresponding data structures "correctly". Catch it later in 1512 # corresponding data structures "correctly". Catch it later in
1513 # output_* subs. 1513 # output_* subs.
1514 push_parameter($arg, "", $file); 1514 push_parameter($arg, "", $file);
1515 } elsif ($arg =~ m/\(.*\*/) { 1515 } elsif ($arg =~ m/\(.+\)\s*\(/) {
1516 # pointer-to-function 1516 # pointer-to-function
1517 $arg =~ tr/#/,/; 1517 $arg =~ tr/#/,/;
1518 $arg =~ m/[^\(]+\(\*\s*([^\)]+)\)/; 1518 $arg =~ m/[^\(]+\(\*?\s*(\w*)\s*\)/;
1519 $param = $1; 1519 $param = $1;
1520 $type = $arg; 1520 $type = $arg;
1521 $type =~ s/([^\(]+\(\*)$param/$1/; 1521 $type =~ s/([^\(]+\(\*?)\s*$param/$1/;
1522 push_parameter($param, $type, $file); 1522 push_parameter($param, $type, $file);
1523 } elsif ($arg) { 1523 } elsif ($arg) {
1524 $arg =~ s/\s*:\s*/:/g; 1524 $arg =~ s/\s*:\s*/:/g;
diff --git a/scripts/mod/modpost.c b/scripts/mod/modpost.c
index 61742771c65d..695b5d657cf5 100644
--- a/scripts/mod/modpost.c
+++ b/scripts/mod/modpost.c
@@ -1200,7 +1200,7 @@ static void report_sec_mismatch(const char *modname, enum mismatch mismatch,
1200 "annotate %s with a matching annotation.\n", 1200 "annotate %s with a matching annotation.\n",
1201 from, sec2annotation(fromsec), fromsym, from_p, 1201 from, sec2annotation(fromsec), fromsym, from_p,
1202 to, sec2annotation(tosec), tosym, to_p, 1202 to, sec2annotation(tosec), tosym, to_p,
1203 fromsym, tosym, fromsym); 1203 tosym, fromsym, tosym);
1204 break; 1204 break;
1205 case INIT_TO_EXIT: 1205 case INIT_TO_EXIT:
1206 fprintf(stderr, 1206 fprintf(stderr,
diff --git a/security/commoncap.c b/security/commoncap.c
index 5aba82679a0b..bb0c095f5761 100644
--- a/security/commoncap.c
+++ b/security/commoncap.c
@@ -552,7 +552,7 @@ int cap_task_kill(struct task_struct *p, struct siginfo *info,
552 * allowed. 552 * allowed.
553 * We must preserve legacy signal behavior in this case. 553 * We must preserve legacy signal behavior in this case.
554 */ 554 */
555 if (p->euid == 0 && p->uid == current->uid) 555 if (p->uid == current->uid)
556 return 0; 556 return 0;
557 557
558 /* sigcont is permitted within same session */ 558 /* sigcont is permitted within same session */
diff --git a/security/smack/smack_lsm.c b/security/smack/smack_lsm.c
index 2b5d6f72f678..770eb067e165 100644
--- a/security/smack/smack_lsm.c
+++ b/security/smack/smack_lsm.c
@@ -584,14 +584,20 @@ static int smack_inode_getattr(struct vfsmount *mnt, struct dentry *dentry)
584static int smack_inode_setxattr(struct dentry *dentry, char *name, 584static int smack_inode_setxattr(struct dentry *dentry, char *name,
585 void *value, size_t size, int flags) 585 void *value, size_t size, int flags)
586{ 586{
587 if (!capable(CAP_MAC_ADMIN)) { 587 int rc = 0;
588 if (strcmp(name, XATTR_NAME_SMACK) == 0 ||
589 strcmp(name, XATTR_NAME_SMACKIPIN) == 0 ||
590 strcmp(name, XATTR_NAME_SMACKIPOUT) == 0)
591 return -EPERM;
592 }
593 588
594 return smk_curacc(smk_of_inode(dentry->d_inode), MAY_WRITE); 589 if (strcmp(name, XATTR_NAME_SMACK) == 0 ||
590 strcmp(name, XATTR_NAME_SMACKIPIN) == 0 ||
591 strcmp(name, XATTR_NAME_SMACKIPOUT) == 0) {
592 if (!capable(CAP_MAC_ADMIN))
593 rc = -EPERM;
594 } else
595 rc = cap_inode_setxattr(dentry, name, value, size, flags);
596
597 if (rc == 0)
598 rc = smk_curacc(smk_of_inode(dentry->d_inode), MAY_WRITE);
599
600 return rc;
595} 601}
596 602
597/** 603/**
@@ -658,10 +664,20 @@ static int smack_inode_getxattr(struct dentry *dentry, char *name)
658 */ 664 */
659static int smack_inode_removexattr(struct dentry *dentry, char *name) 665static int smack_inode_removexattr(struct dentry *dentry, char *name)
660{ 666{
661 if (strcmp(name, XATTR_NAME_SMACK) == 0 && !capable(CAP_MAC_ADMIN)) 667 int rc = 0;
662 return -EPERM;
663 668
664 return smk_curacc(smk_of_inode(dentry->d_inode), MAY_WRITE); 669 if (strcmp(name, XATTR_NAME_SMACK) == 0 ||
670 strcmp(name, XATTR_NAME_SMACKIPIN) == 0 ||
671 strcmp(name, XATTR_NAME_SMACKIPOUT) == 0) {
672 if (!capable(CAP_MAC_ADMIN))
673 rc = -EPERM;
674 } else
675 rc = cap_inode_removexattr(dentry, name);
676
677 if (rc == 0)
678 rc = smk_curacc(smk_of_inode(dentry->d_inode), MAY_WRITE);
679
680 return rc;
665} 681}
666 682
667/** 683/**
@@ -1016,7 +1032,12 @@ static void smack_task_getsecid(struct task_struct *p, u32 *secid)
1016 */ 1032 */
1017static int smack_task_setnice(struct task_struct *p, int nice) 1033static int smack_task_setnice(struct task_struct *p, int nice)
1018{ 1034{
1019 return smk_curacc(p->security, MAY_WRITE); 1035 int rc;
1036
1037 rc = cap_task_setnice(p, nice);
1038 if (rc == 0)
1039 rc = smk_curacc(p->security, MAY_WRITE);
1040 return rc;
1020} 1041}
1021 1042
1022/** 1043/**
@@ -1028,7 +1049,12 @@ static int smack_task_setnice(struct task_struct *p, int nice)
1028 */ 1049 */
1029static int smack_task_setioprio(struct task_struct *p, int ioprio) 1050static int smack_task_setioprio(struct task_struct *p, int ioprio)
1030{ 1051{
1031 return smk_curacc(p->security, MAY_WRITE); 1052 int rc;
1053
1054 rc = cap_task_setioprio(p, ioprio);
1055 if (rc == 0)
1056 rc = smk_curacc(p->security, MAY_WRITE);
1057 return rc;
1032} 1058}
1033 1059
1034/** 1060/**
@@ -1053,7 +1079,12 @@ static int smack_task_getioprio(struct task_struct *p)
1053static int smack_task_setscheduler(struct task_struct *p, int policy, 1079static int smack_task_setscheduler(struct task_struct *p, int policy,
1054 struct sched_param *lp) 1080 struct sched_param *lp)
1055{ 1081{
1056 return smk_curacc(p->security, MAY_WRITE); 1082 int rc;
1083
1084 rc = cap_task_setscheduler(p, policy, lp);
1085 if (rc == 0)
1086 rc = smk_curacc(p->security, MAY_WRITE);
1087 return rc;
1057} 1088}
1058 1089
1059/** 1090/**
@@ -1093,6 +1124,11 @@ static int smack_task_movememory(struct task_struct *p)
1093static int smack_task_kill(struct task_struct *p, struct siginfo *info, 1124static int smack_task_kill(struct task_struct *p, struct siginfo *info,
1094 int sig, u32 secid) 1125 int sig, u32 secid)
1095{ 1126{
1127 int rc;
1128
1129 rc = cap_task_kill(p, info, sig, secid);
1130 if (rc != 0)
1131 return rc;
1096 /* 1132 /*
1097 * Special cases where signals really ought to go through 1133 * Special cases where signals really ought to go through
1098 * in spite of policy. Stephen Smalley suggests it may 1134 * in spite of policy. Stephen Smalley suggests it may
@@ -1251,9 +1287,8 @@ static void smack_to_secattr(char *smack, struct netlbl_lsm_secattr *nlsp)
1251 1287
1252 switch (smack_net_nltype) { 1288 switch (smack_net_nltype) {
1253 case NETLBL_NLTYPE_CIPSOV4: 1289 case NETLBL_NLTYPE_CIPSOV4:
1254 nlsp->domain = NULL; 1290 nlsp->domain = kstrdup(smack, GFP_ATOMIC);
1255 nlsp->flags = NETLBL_SECATTR_DOMAIN; 1291 nlsp->flags = NETLBL_SECATTR_DOMAIN | NETLBL_SECATTR_MLS_LVL;
1256 nlsp->flags |= NETLBL_SECATTR_MLS_LVL;
1257 1292
1258 rc = smack_to_cipso(smack, &cipso); 1293 rc = smack_to_cipso(smack, &cipso);
1259 if (rc == 0) { 1294 if (rc == 0) {
@@ -1282,15 +1317,14 @@ static int smack_netlabel(struct sock *sk)
1282{ 1317{
1283 struct socket_smack *ssp; 1318 struct socket_smack *ssp;
1284 struct netlbl_lsm_secattr secattr; 1319 struct netlbl_lsm_secattr secattr;
1285 int rc = 0; 1320 int rc;
1286 1321
1287 ssp = sk->sk_security; 1322 ssp = sk->sk_security;
1288 netlbl_secattr_init(&secattr); 1323 netlbl_secattr_init(&secattr);
1289 smack_to_secattr(ssp->smk_out, &secattr); 1324 smack_to_secattr(ssp->smk_out, &secattr);
1290 if (secattr.flags != NETLBL_SECATTR_NONE) 1325 rc = netlbl_sock_setattr(sk, &secattr);
1291 rc = netlbl_sock_setattr(sk, &secattr);
1292
1293 netlbl_secattr_destroy(&secattr); 1326 netlbl_secattr_destroy(&secattr);
1327
1294 return rc; 1328 return rc;
1295} 1329}
1296 1330
@@ -1313,6 +1347,7 @@ static int smack_inode_setsecurity(struct inode *inode, const char *name,
1313 struct inode_smack *nsp = inode->i_security; 1347 struct inode_smack *nsp = inode->i_security;
1314 struct socket_smack *ssp; 1348 struct socket_smack *ssp;
1315 struct socket *sock; 1349 struct socket *sock;
1350 int rc = 0;
1316 1351
1317 if (value == NULL || size > SMK_LABELLEN) 1352 if (value == NULL || size > SMK_LABELLEN)
1318 return -EACCES; 1353 return -EACCES;
@@ -1341,7 +1376,10 @@ static int smack_inode_setsecurity(struct inode *inode, const char *name,
1341 ssp->smk_in = sp; 1376 ssp->smk_in = sp;
1342 else if (strcmp(name, XATTR_SMACK_IPOUT) == 0) { 1377 else if (strcmp(name, XATTR_SMACK_IPOUT) == 0) {
1343 ssp->smk_out = sp; 1378 ssp->smk_out = sp;
1344 return smack_netlabel(sock->sk); 1379 rc = smack_netlabel(sock->sk);
1380 if (rc != 0)
1381 printk(KERN_WARNING "Smack: \"%s\" netlbl error %d.\n",
1382 __func__, -rc);
1345 } else 1383 } else
1346 return -EOPNOTSUPP; 1384 return -EOPNOTSUPP;
1347 1385
@@ -1776,6 +1814,27 @@ static int smack_ipc_permission(struct kern_ipc_perm *ipp, short flag)
1776 return smk_curacc(isp, may); 1814 return smk_curacc(isp, may);
1777} 1815}
1778 1816
1817/* module stacking operations */
1818
1819/**
1820 * smack_register_security - stack capability module
1821 * @name: module name
1822 * @ops: module operations - ignored
1823 *
1824 * Allow the capability module to register.
1825 */
1826static int smack_register_security(const char *name,
1827 struct security_operations *ops)
1828{
1829 if (strcmp(name, "capability") != 0)
1830 return -EINVAL;
1831
1832 printk(KERN_INFO "%s: Registering secondary module %s\n",
1833 __func__, name);
1834
1835 return 0;
1836}
1837
1779/** 1838/**
1780 * smack_d_instantiate - Make sure the blob is correct on an inode 1839 * smack_d_instantiate - Make sure the blob is correct on an inode
1781 * @opt_dentry: unused 1840 * @opt_dentry: unused
@@ -2214,6 +2273,9 @@ static void smack_sock_graft(struct sock *sk, struct socket *parent)
2214 ssp->smk_packet[0] = '\0'; 2273 ssp->smk_packet[0] = '\0';
2215 2274
2216 rc = smack_netlabel(sk); 2275 rc = smack_netlabel(sk);
2276 if (rc != 0)
2277 printk(KERN_WARNING "Smack: \"%s\" netlbl error %d.\n",
2278 __func__, -rc);
2217} 2279}
2218 2280
2219/** 2281/**
@@ -2346,6 +2408,20 @@ static int smack_secid_to_secctx(u32 secid, char **secdata, u32 *seclen)
2346} 2408}
2347 2409
2348/* 2410/*
2411 * smack_secctx_to_secid - return the secid for a smack label
2412 * @secdata: smack label
2413 * @seclen: how long result is
2414 * @secid: outgoing integer
2415 *
2416 * Exists for audit and networking code.
2417 */
2418static int smack_secctx_to_secid(char *secdata, u32 seclen, u32 *secid)
2419{
2420 *secid = smack_to_secid(secdata);
2421 return 0;
2422}
2423
2424/*
2349 * smack_release_secctx - don't do anything. 2425 * smack_release_secctx - don't do anything.
2350 * @key_ref: unused 2426 * @key_ref: unused
2351 * @context: unused 2427 * @context: unused
@@ -2393,6 +2469,8 @@ static struct security_operations smack_ops = {
2393 .inode_post_setxattr = smack_inode_post_setxattr, 2469 .inode_post_setxattr = smack_inode_post_setxattr,
2394 .inode_getxattr = smack_inode_getxattr, 2470 .inode_getxattr = smack_inode_getxattr,
2395 .inode_removexattr = smack_inode_removexattr, 2471 .inode_removexattr = smack_inode_removexattr,
2472 .inode_need_killpriv = cap_inode_need_killpriv,
2473 .inode_killpriv = cap_inode_killpriv,
2396 .inode_getsecurity = smack_inode_getsecurity, 2474 .inode_getsecurity = smack_inode_getsecurity,
2397 .inode_setsecurity = smack_inode_setsecurity, 2475 .inode_setsecurity = smack_inode_setsecurity,
2398 .inode_listsecurity = smack_inode_listsecurity, 2476 .inode_listsecurity = smack_inode_listsecurity,
@@ -2452,6 +2530,8 @@ static struct security_operations smack_ops = {
2452 .netlink_send = cap_netlink_send, 2530 .netlink_send = cap_netlink_send,
2453 .netlink_recv = cap_netlink_recv, 2531 .netlink_recv = cap_netlink_recv,
2454 2532
2533 .register_security = smack_register_security,
2534
2455 .d_instantiate = smack_d_instantiate, 2535 .d_instantiate = smack_d_instantiate,
2456 2536
2457 .getprocattr = smack_getprocattr, 2537 .getprocattr = smack_getprocattr,
@@ -2475,6 +2555,7 @@ static struct security_operations smack_ops = {
2475 .key_permission = smack_key_permission, 2555 .key_permission = smack_key_permission,
2476#endif /* CONFIG_KEYS */ 2556#endif /* CONFIG_KEYS */
2477 .secid_to_secctx = smack_secid_to_secctx, 2557 .secid_to_secctx = smack_secid_to_secctx,
2558 .secctx_to_secid = smack_secctx_to_secid,
2478 .release_secctx = smack_release_secctx, 2559 .release_secctx = smack_release_secctx,
2479}; 2560};
2480 2561
diff --git a/security/smack/smackfs.c b/security/smack/smackfs.c
index 15aa37f65b39..358c92c1a153 100644
--- a/security/smack/smackfs.c
+++ b/security/smack/smackfs.c
@@ -24,6 +24,7 @@
24#include <net/cipso_ipv4.h> 24#include <net/cipso_ipv4.h>
25#include <linux/seq_file.h> 25#include <linux/seq_file.h>
26#include <linux/ctype.h> 26#include <linux/ctype.h>
27#include <linux/audit.h>
27#include "smack.h" 28#include "smack.h"
28 29
29/* 30/*
@@ -45,6 +46,7 @@ enum smk_inos {
45 */ 46 */
46static DEFINE_MUTEX(smack_list_lock); 47static DEFINE_MUTEX(smack_list_lock);
47static DEFINE_MUTEX(smack_cipso_lock); 48static DEFINE_MUTEX(smack_cipso_lock);
49static DEFINE_MUTEX(smack_ambient_lock);
48 50
49/* 51/*
50 * This is the "ambient" label for network traffic. 52 * This is the "ambient" label for network traffic.
@@ -342,6 +344,9 @@ void smk_cipso_doi(void)
342 struct cipso_v4_doi *doip; 344 struct cipso_v4_doi *doip;
343 struct netlbl_audit audit_info; 345 struct netlbl_audit audit_info;
344 346
347 audit_info.loginuid = audit_get_loginuid(current);
348 audit_info.secid = smack_to_secid(current->security);
349
345 rc = netlbl_cfg_map_del(NULL, &audit_info); 350 rc = netlbl_cfg_map_del(NULL, &audit_info);
346 if (rc != 0) 351 if (rc != 0)
347 printk(KERN_WARNING "%s:%d remove rc = %d\n", 352 printk(KERN_WARNING "%s:%d remove rc = %d\n",
@@ -363,6 +368,30 @@ void smk_cipso_doi(void)
363 __func__, __LINE__, rc); 368 __func__, __LINE__, rc);
364} 369}
365 370
371/**
372 * smk_unlbl_ambient - initialize the unlabeled domain
373 */
374void smk_unlbl_ambient(char *oldambient)
375{
376 int rc;
377 struct netlbl_audit audit_info;
378
379 audit_info.loginuid = audit_get_loginuid(current);
380 audit_info.secid = smack_to_secid(current->security);
381
382 if (oldambient != NULL) {
383 rc = netlbl_cfg_map_del(oldambient, &audit_info);
384 if (rc != 0)
385 printk(KERN_WARNING "%s:%d remove rc = %d\n",
386 __func__, __LINE__, rc);
387 }
388
389 rc = netlbl_cfg_unlbl_add_map(smack_net_ambient, &audit_info);
390 if (rc != 0)
391 printk(KERN_WARNING "%s:%d add rc = %d\n",
392 __func__, __LINE__, rc);
393}
394
366/* 395/*
367 * Seq_file read operations for /smack/cipso 396 * Seq_file read operations for /smack/cipso
368 */ 397 */
@@ -709,7 +738,6 @@ static ssize_t smk_read_ambient(struct file *filp, char __user *buf,
709 size_t cn, loff_t *ppos) 738 size_t cn, loff_t *ppos)
710{ 739{
711 ssize_t rc; 740 ssize_t rc;
712 char out[SMK_LABELLEN];
713 int asize; 741 int asize;
714 742
715 if (*ppos != 0) 743 if (*ppos != 0)
@@ -717,23 +745,18 @@ static ssize_t smk_read_ambient(struct file *filp, char __user *buf,
717 /* 745 /*
718 * Being careful to avoid a problem in the case where 746 * Being careful to avoid a problem in the case where
719 * smack_net_ambient gets changed in midstream. 747 * smack_net_ambient gets changed in midstream.
720 * Since smack_net_ambient is always set with a value
721 * from the label list, including initially, and those
722 * never get freed, the worst case is that the pointer
723 * gets changed just after this strncpy, in which case
724 * the value passed up is incorrect. Locking around
725 * smack_net_ambient wouldn't be any better than this
726 * copy scheme as by the time the caller got to look
727 * at the ambient value it would have cleared the lock
728 * and been changed.
729 */ 748 */
730 strncpy(out, smack_net_ambient, SMK_LABELLEN); 749 mutex_lock(&smack_ambient_lock);
731 asize = strlen(out) + 1;
732 750
733 if (cn < asize) 751 asize = strlen(smack_net_ambient) + 1;
734 return -EINVAL; 752
753 if (cn >= asize)
754 rc = simple_read_from_buffer(buf, cn, ppos,
755 smack_net_ambient, asize);
756 else
757 rc = -EINVAL;
735 758
736 rc = simple_read_from_buffer(buf, cn, ppos, out, asize); 759 mutex_unlock(&smack_ambient_lock);
737 760
738 return rc; 761 return rc;
739} 762}
@@ -751,6 +774,7 @@ static ssize_t smk_write_ambient(struct file *file, const char __user *buf,
751 size_t count, loff_t *ppos) 774 size_t count, loff_t *ppos)
752{ 775{
753 char in[SMK_LABELLEN]; 776 char in[SMK_LABELLEN];
777 char *oldambient;
754 char *smack; 778 char *smack;
755 779
756 if (!capable(CAP_MAC_ADMIN)) 780 if (!capable(CAP_MAC_ADMIN))
@@ -766,7 +790,13 @@ static ssize_t smk_write_ambient(struct file *file, const char __user *buf,
766 if (smack == NULL) 790 if (smack == NULL)
767 return -EINVAL; 791 return -EINVAL;
768 792
793 mutex_lock(&smack_ambient_lock);
794
795 oldambient = smack_net_ambient;
769 smack_net_ambient = smack; 796 smack_net_ambient = smack;
797 smk_unlbl_ambient(oldambient);
798
799 mutex_unlock(&smack_ambient_lock);
770 800
771 return count; 801 return count;
772} 802}
@@ -974,6 +1004,7 @@ static int __init init_smk_fs(void)
974 1004
975 sema_init(&smack_write_sem, 1); 1005 sema_init(&smack_write_sem, 1);
976 smk_cipso_doi(); 1006 smk_cipso_doi();
1007 smk_unlbl_ambient(NULL);
977 1008
978 return err; 1009 return err;
979} 1010}
diff --git a/sound/drivers/opl3/opl3_synth.c b/sound/drivers/opl3/opl3_synth.c
index a7bf7a4b1f85..fb64c890109b 100644
--- a/sound/drivers/opl3/opl3_synth.c
+++ b/sound/drivers/opl3/opl3_synth.c
@@ -22,6 +22,10 @@
22#include <sound/opl3.h> 22#include <sound/opl3.h>
23#include <sound/asound_fm.h> 23#include <sound/asound_fm.h>
24 24
25#if defined(CONFIG_SND_SEQUENCER) || defined(CONFIG_SND_SEQUENCER_MODULE)
26#define OPL3_SUPPORT_SYNTH
27#endif
28
25/* 29/*
26 * There is 18 possible 2 OP voices 30 * There is 18 possible 2 OP voices
27 * (9 in the left and 9 in the right). 31 * (9 in the left and 9 in the right).
@@ -155,9 +159,11 @@ int snd_opl3_ioctl(struct snd_hwdep * hw, struct file *file,
155#endif 159#endif
156 return snd_opl3_set_connection(opl3, (int) arg); 160 return snd_opl3_set_connection(opl3, (int) arg);
157 161
162#ifdef OPL3_SUPPORT_SYNTH
158 case SNDRV_DM_FM_IOCTL_CLEAR_PATCHES: 163 case SNDRV_DM_FM_IOCTL_CLEAR_PATCHES:
159 snd_opl3_clear_patches(opl3); 164 snd_opl3_clear_patches(opl3);
160 return 0; 165 return 0;
166#endif
161 167
162#ifdef CONFIG_SND_DEBUG 168#ifdef CONFIG_SND_DEBUG
163 default: 169 default:
@@ -178,6 +184,7 @@ int snd_opl3_release(struct snd_hwdep * hw, struct file *file)
178 return 0; 184 return 0;
179} 185}
180 186
187#ifdef OPL3_SUPPORT_SYNTH
181/* 188/*
182 * write the device - load patches 189 * write the device - load patches
183 */ 190 */
@@ -341,6 +348,7 @@ void snd_opl3_clear_patches(struct snd_opl3 *opl3)
341 } 348 }
342 memset(opl3->patch_table, 0, sizeof(opl3->patch_table)); 349 memset(opl3->patch_table, 0, sizeof(opl3->patch_table));
343} 350}
351#endif /* OPL3_SUPPORT_SYNTH */
344 352
345/* ------------------------------ */ 353/* ------------------------------ */
346 354
diff --git a/sound/pci/bt87x.c b/sound/pci/bt87x.c
index c9a2421cf6f0..4ecdd635ed1d 100644
--- a/sound/pci/bt87x.c
+++ b/sound/pci/bt87x.c
@@ -681,15 +681,12 @@ static struct snd_kcontrol_new snd_bt87x_capture_source = {
681 681
682static int snd_bt87x_free(struct snd_bt87x *chip) 682static int snd_bt87x_free(struct snd_bt87x *chip)
683{ 683{
684 if (chip->mmio) { 684 if (chip->mmio)
685 snd_bt87x_stop(chip); 685 snd_bt87x_stop(chip);
686 if (chip->irq >= 0)
687 synchronize_irq(chip->irq);
688
689 iounmap(chip->mmio);
690 }
691 if (chip->irq >= 0) 686 if (chip->irq >= 0)
692 free_irq(chip->irq, chip); 687 free_irq(chip->irq, chip);
688 if (chip->mmio)
689 iounmap(chip->mmio);
693 pci_release_regions(chip->pci); 690 pci_release_regions(chip->pci);
694 pci_disable_device(chip->pci); 691 pci_disable_device(chip->pci);
695 kfree(chip); 692 kfree(chip);
diff --git a/sound/pci/hda/hda_codec.c b/sound/pci/hda/hda_codec.c
index 26812dc2b7f2..37c413923db8 100644
--- a/sound/pci/hda/hda_codec.c
+++ b/sound/pci/hda/hda_codec.c
@@ -1055,6 +1055,12 @@ int snd_hda_add_vmaster(struct hda_codec *codec, char *name,
1055 const char **s; 1055 const char **s;
1056 int err; 1056 int err;
1057 1057
1058 for (s = slaves; *s && !snd_hda_find_mixer_ctl(codec, *s); s++)
1059 ;
1060 if (!*s) {
1061 snd_printdd("No slave found for %s\n", name);
1062 return 0;
1063 }
1058 kctl = snd_ctl_make_virtual_master(name, tlv); 1064 kctl = snd_ctl_make_virtual_master(name, tlv);
1059 if (!kctl) 1065 if (!kctl)
1060 return -ENOMEM; 1066 return -ENOMEM;
@@ -1197,8 +1203,8 @@ int snd_hda_mixer_bind_ctls_info(struct snd_kcontrol *kcontrol,
1197 struct hda_bind_ctls *c; 1203 struct hda_bind_ctls *c;
1198 int err; 1204 int err;
1199 1205
1200 c = (struct hda_bind_ctls *)kcontrol->private_value;
1201 mutex_lock(&codec->spdif_mutex); /* reuse spdif_mutex */ 1206 mutex_lock(&codec->spdif_mutex); /* reuse spdif_mutex */
1207 c = (struct hda_bind_ctls *)kcontrol->private_value;
1202 kcontrol->private_value = *c->values; 1208 kcontrol->private_value = *c->values;
1203 err = c->ops->info(kcontrol, uinfo); 1209 err = c->ops->info(kcontrol, uinfo);
1204 kcontrol->private_value = (long)c; 1210 kcontrol->private_value = (long)c;
@@ -1213,8 +1219,8 @@ int snd_hda_mixer_bind_ctls_get(struct snd_kcontrol *kcontrol,
1213 struct hda_bind_ctls *c; 1219 struct hda_bind_ctls *c;
1214 int err; 1220 int err;
1215 1221
1216 c = (struct hda_bind_ctls *)kcontrol->private_value;
1217 mutex_lock(&codec->spdif_mutex); /* reuse spdif_mutex */ 1222 mutex_lock(&codec->spdif_mutex); /* reuse spdif_mutex */
1223 c = (struct hda_bind_ctls *)kcontrol->private_value;
1218 kcontrol->private_value = *c->values; 1224 kcontrol->private_value = *c->values;
1219 err = c->ops->get(kcontrol, ucontrol); 1225 err = c->ops->get(kcontrol, ucontrol);
1220 kcontrol->private_value = (long)c; 1226 kcontrol->private_value = (long)c;
@@ -1230,8 +1236,8 @@ int snd_hda_mixer_bind_ctls_put(struct snd_kcontrol *kcontrol,
1230 unsigned long *vals; 1236 unsigned long *vals;
1231 int err = 0, change = 0; 1237 int err = 0, change = 0;
1232 1238
1233 c = (struct hda_bind_ctls *)kcontrol->private_value;
1234 mutex_lock(&codec->spdif_mutex); /* reuse spdif_mutex */ 1239 mutex_lock(&codec->spdif_mutex); /* reuse spdif_mutex */
1240 c = (struct hda_bind_ctls *)kcontrol->private_value;
1235 for (vals = c->values; *vals; vals++) { 1241 for (vals = c->values; *vals; vals++) {
1236 kcontrol->private_value = *vals; 1242 kcontrol->private_value = *vals;
1237 err = c->ops->put(kcontrol, ucontrol); 1243 err = c->ops->put(kcontrol, ucontrol);
@@ -1251,8 +1257,8 @@ int snd_hda_mixer_bind_tlv(struct snd_kcontrol *kcontrol, int op_flag,
1251 struct hda_bind_ctls *c; 1257 struct hda_bind_ctls *c;
1252 int err; 1258 int err;
1253 1259
1254 c = (struct hda_bind_ctls *)kcontrol->private_value;
1255 mutex_lock(&codec->spdif_mutex); /* reuse spdif_mutex */ 1260 mutex_lock(&codec->spdif_mutex); /* reuse spdif_mutex */
1261 c = (struct hda_bind_ctls *)kcontrol->private_value;
1256 kcontrol->private_value = *c->values; 1262 kcontrol->private_value = *c->values;
1257 err = c->ops->tlv(kcontrol, op_flag, size, tlv); 1263 err = c->ops->tlv(kcontrol, op_flag, size, tlv);
1258 kcontrol->private_value = (long)c; 1264 kcontrol->private_value = (long)c;
diff --git a/sound/pci/hda/hda_intel.c b/sound/pci/hda/hda_intel.c
index 56f8a3050751..4be36c84b36c 100644
--- a/sound/pci/hda/hda_intel.c
+++ b/sound/pci/hda/hda_intel.c
@@ -275,6 +275,11 @@ enum {
275#define NVIDIA_HDA_TRANSREG_ADDR 0x4e 275#define NVIDIA_HDA_TRANSREG_ADDR 0x4e
276#define NVIDIA_HDA_ENABLE_COHBITS 0x0f 276#define NVIDIA_HDA_ENABLE_COHBITS 0x0f
277 277
278/* Defines for Intel SCH HDA snoop control */
279#define INTEL_SCH_HDA_DEVC 0x78
280#define INTEL_SCH_HDA_DEVC_NOSNOOP (0x1<<11)
281
282
278/* 283/*
279 */ 284 */
280 285
@@ -868,6 +873,8 @@ static void update_pci_byte(struct pci_dev *pci, unsigned int reg,
868 873
869static void azx_init_pci(struct azx *chip) 874static void azx_init_pci(struct azx *chip)
870{ 875{
876 unsigned short snoop;
877
871 /* Clear bits 0-2 of PCI register TCSEL (at offset 0x44) 878 /* Clear bits 0-2 of PCI register TCSEL (at offset 0x44)
872 * TCSEL == Traffic Class Select Register, which sets PCI express QOS 879 * TCSEL == Traffic Class Select Register, which sets PCI express QOS
873 * Ensuring these bits are 0 clears playback static on some HD Audio 880 * Ensuring these bits are 0 clears playback static on some HD Audio
@@ -888,6 +895,19 @@ static void azx_init_pci(struct azx *chip)
888 NVIDIA_HDA_TRANSREG_ADDR, 895 NVIDIA_HDA_TRANSREG_ADDR,
889 0x0f, NVIDIA_HDA_ENABLE_COHBITS); 896 0x0f, NVIDIA_HDA_ENABLE_COHBITS);
890 break; 897 break;
898 case AZX_DRIVER_SCH:
899 pci_read_config_word(chip->pci, INTEL_SCH_HDA_DEVC, &snoop);
900 if (snoop & INTEL_SCH_HDA_DEVC_NOSNOOP) {
901 pci_write_config_word(chip->pci, INTEL_SCH_HDA_DEVC, \
902 snoop & (~INTEL_SCH_HDA_DEVC_NOSNOOP));
903 pci_read_config_word(chip->pci,
904 INTEL_SCH_HDA_DEVC, &snoop);
905 snd_printdd("HDA snoop disabled, enabling ... %s\n",\
906 (snoop & INTEL_SCH_HDA_DEVC_NOSNOOP) \
907 ? "Failed" : "OK");
908 }
909 break;
910
891 } 911 }
892} 912}
893 913
@@ -1040,6 +1060,7 @@ static int azx_setup_controller(struct azx *chip, struct azx_dev *azx_dev)
1040 1060
1041static unsigned int azx_max_codecs[] __devinitdata = { 1061static unsigned int azx_max_codecs[] __devinitdata = {
1042 [AZX_DRIVER_ICH] = 3, 1062 [AZX_DRIVER_ICH] = 3,
1063 [AZX_DRIVER_SCH] = 3,
1043 [AZX_DRIVER_ATI] = 4, 1064 [AZX_DRIVER_ATI] = 4,
1044 [AZX_DRIVER_ATIHDMI] = 4, 1065 [AZX_DRIVER_ATIHDMI] = 4,
1045 [AZX_DRIVER_VIA] = 3, /* FIXME: correct? */ 1066 [AZX_DRIVER_VIA] = 3, /* FIXME: correct? */
@@ -1797,7 +1818,7 @@ static int __devinit azx_create(struct snd_card *card, struct pci_dev *pci,
1797 */ 1818 */
1798 chip->playback_streams = (gcap & (0xF << 12)) >> 12; 1819 chip->playback_streams = (gcap & (0xF << 12)) >> 12;
1799 chip->capture_streams = (gcap & (0xF << 8)) >> 8; 1820 chip->capture_streams = (gcap & (0xF << 8)) >> 8;
1800 chip->playback_index_offset = (gcap & (0xF << 12)) >> 12; 1821 chip->playback_index_offset = chip->capture_streams;
1801 chip->capture_index_offset = 0; 1822 chip->capture_index_offset = 0;
1802 } else { 1823 } else {
1803 /* gcap didn't give any info, switching to old method */ 1824 /* gcap didn't give any info, switching to old method */
diff --git a/sound/pci/hda/hda_proc.c b/sound/pci/hda/hda_proc.c
index 35a630d1770f..5633f77f8f3b 100644
--- a/sound/pci/hda/hda_proc.c
+++ b/sound/pci/hda/hda_proc.c
@@ -584,7 +584,8 @@ static void print_codec_info(struct snd_info_entry *entry,
584 print_amp_caps(buffer, codec, nid, HDA_INPUT); 584 print_amp_caps(buffer, codec, nid, HDA_INPUT);
585 snd_iprintf(buffer, " Amp-In vals: "); 585 snd_iprintf(buffer, " Amp-In vals: ");
586 print_amp_vals(buffer, codec, nid, HDA_INPUT, 586 print_amp_vals(buffer, codec, nid, HDA_INPUT,
587 wid_caps & AC_WCAP_STEREO, conn_len); 587 wid_caps & AC_WCAP_STEREO,
588 wid_type == AC_WID_PIN ? 1 : conn_len);
588 } 589 }
589 if (wid_caps & AC_WCAP_OUT_AMP) { 590 if (wid_caps & AC_WCAP_OUT_AMP) {
590 snd_iprintf(buffer, " Amp-Out caps: "); 591 snd_iprintf(buffer, " Amp-Out caps: ");
diff --git a/sound/pci/hda/patch_conexant.c b/sound/pci/hda/patch_conexant.c
index f6dd51cda7b2..f7cd3a804b11 100644
--- a/sound/pci/hda/patch_conexant.c
+++ b/sound/pci/hda/patch_conexant.c
@@ -488,7 +488,7 @@ static int conexant_ch_mode_put(struct snd_kcontrol *kcontrol,
488static hda_nid_t cxt5045_dac_nids[1] = { 0x19 }; 488static hda_nid_t cxt5045_dac_nids[1] = { 0x19 };
489static hda_nid_t cxt5045_adc_nids[1] = { 0x1a }; 489static hda_nid_t cxt5045_adc_nids[1] = { 0x1a };
490static hda_nid_t cxt5045_capsrc_nids[1] = { 0x1a }; 490static hda_nid_t cxt5045_capsrc_nids[1] = { 0x1a };
491#define CXT5045_SPDIF_OUT 0x13 491#define CXT5045_SPDIF_OUT 0x18
492 492
493static struct hda_channel_mode cxt5045_modes[1] = { 493static struct hda_channel_mode cxt5045_modes[1] = {
494 { 2, NULL }, 494 { 2, NULL },
@@ -658,6 +658,7 @@ static struct hda_verb cxt5045_init_verbs[] = {
658 {0x1a, AC_VERB_SET_AMP_GAIN_MUTE, 658 {0x1a, AC_VERB_SET_AMP_GAIN_MUTE,
659 AC_AMP_SET_INPUT|AC_AMP_SET_RIGHT|AC_AMP_SET_LEFT|0x17}, 659 AC_AMP_SET_INPUT|AC_AMP_SET_RIGHT|AC_AMP_SET_LEFT|0x17},
660 /* SPDIF route: PCM */ 660 /* SPDIF route: PCM */
661 {0x13, AC_VERB_SET_PIN_WIDGET_CONTROL, PIN_OUT},
661 { 0x13, AC_VERB_SET_CONNECT_SEL, 0x0 }, 662 { 0x13, AC_VERB_SET_CONNECT_SEL, 0x0 },
662 /* EAPD */ 663 /* EAPD */
663 {0x10, AC_VERB_SET_EAPD_BTLENABLE, 0x2 }, /* default on */ 664 {0x10, AC_VERB_SET_EAPD_BTLENABLE, 0x2 }, /* default on */
@@ -683,6 +684,7 @@ static struct hda_verb cxt5045_benq_init_verbs[] = {
683 {0x1a, AC_VERB_SET_AMP_GAIN_MUTE, 684 {0x1a, AC_VERB_SET_AMP_GAIN_MUTE,
684 AC_AMP_SET_INPUT|AC_AMP_SET_RIGHT|AC_AMP_SET_LEFT|0x17}, 685 AC_AMP_SET_INPUT|AC_AMP_SET_RIGHT|AC_AMP_SET_LEFT|0x17},
685 /* SPDIF route: PCM */ 686 /* SPDIF route: PCM */
687 {0x13, AC_VERB_SET_PIN_WIDGET_CONTROL, PIN_OUT},
686 {0x13, AC_VERB_SET_CONNECT_SEL, 0x0}, 688 {0x13, AC_VERB_SET_CONNECT_SEL, 0x0},
687 /* EAPD */ 689 /* EAPD */
688 {0x10, AC_VERB_SET_EAPD_BTLENABLE, 0x2}, /* default on */ 690 {0x10, AC_VERB_SET_EAPD_BTLENABLE, 0x2}, /* default on */
@@ -781,7 +783,8 @@ static struct hda_verb cxt5045_test_init_verbs[] = {
781 * PCM format, copyright asserted, no pre-emphasis and no validity 783 * PCM format, copyright asserted, no pre-emphasis and no validity
782 * control. 784 * control.
783 */ 785 */
784 {0x13, AC_VERB_SET_DIGI_CONVERT_1, 0}, 786 {0x13, AC_VERB_SET_PIN_WIDGET_CONTROL, PIN_OUT},
787 {0x18, AC_VERB_SET_DIGI_CONVERT_1, 0},
785 788
786 /* Start with output sum widgets muted and their output gains at min */ 789 /* Start with output sum widgets muted and their output gains at min */
787 {0x17, AC_VERB_SET_AMP_GAIN_MUTE, AMP_IN_MUTE(0)}, 790 {0x17, AC_VERB_SET_AMP_GAIN_MUTE, AMP_IN_MUTE(0)},
diff --git a/sound/pci/hda/patch_realtek.c b/sound/pci/hda/patch_realtek.c
index 586d98f1b63d..777f8c01ca7a 100644
--- a/sound/pci/hda/patch_realtek.c
+++ b/sound/pci/hda/patch_realtek.c
@@ -5227,10 +5227,14 @@ static int alc882_mux_enum_put(struct snd_kcontrol *kcontrol,
5227 const struct hda_input_mux *imux = spec->input_mux; 5227 const struct hda_input_mux *imux = spec->input_mux;
5228 unsigned int adc_idx = snd_ctl_get_ioffidx(kcontrol, &ucontrol->id); 5228 unsigned int adc_idx = snd_ctl_get_ioffidx(kcontrol, &ucontrol->id);
5229 static hda_nid_t capture_mixers[3] = { 0x24, 0x23, 0x22 }; 5229 static hda_nid_t capture_mixers[3] = { 0x24, 0x23, 0x22 };
5230 hda_nid_t nid = capture_mixers[adc_idx]; 5230 hda_nid_t nid;
5231 unsigned int *cur_val = &spec->cur_mux[adc_idx]; 5231 unsigned int *cur_val = &spec->cur_mux[adc_idx];
5232 unsigned int i, idx; 5232 unsigned int i, idx;
5233 5233
5234 if (spec->num_adc_nids < 3)
5235 nid = capture_mixers[adc_idx + 1];
5236 else
5237 nid = capture_mixers[adc_idx];
5234 idx = ucontrol->value.enumerated.item[0]; 5238 idx = ucontrol->value.enumerated.item[0];
5235 if (idx >= imux->num_items) 5239 if (idx >= imux->num_items)
5236 idx = imux->num_items - 1; 5240 idx = imux->num_items - 1;
@@ -6457,7 +6461,7 @@ static int alc883_mux_enum_put(struct snd_kcontrol *kcontrol,
6457 struct alc_spec *spec = codec->spec; 6461 struct alc_spec *spec = codec->spec;
6458 const struct hda_input_mux *imux = spec->input_mux; 6462 const struct hda_input_mux *imux = spec->input_mux;
6459 unsigned int adc_idx = snd_ctl_get_ioffidx(kcontrol, &ucontrol->id); 6463 unsigned int adc_idx = snd_ctl_get_ioffidx(kcontrol, &ucontrol->id);
6460 static hda_nid_t capture_mixers[3] = { 0x24, 0x23, 0x22 }; 6464 static hda_nid_t capture_mixers[2] = { 0x23, 0x22 };
6461 hda_nid_t nid = capture_mixers[adc_idx]; 6465 hda_nid_t nid = capture_mixers[adc_idx];
6462 unsigned int *cur_val = &spec->cur_mux[adc_idx]; 6466 unsigned int *cur_val = &spec->cur_mux[adc_idx];
6463 unsigned int i, idx; 6467 unsigned int i, idx;
diff --git a/sound/pci/oxygen/oxygen.c b/sound/pci/oxygen/oxygen.c
index f31a0eb409b0..9a9941bb0460 100644
--- a/sound/pci/oxygen/oxygen.c
+++ b/sound/pci/oxygen/oxygen.c
@@ -28,7 +28,9 @@
28 * GPIO 1 -> DFS1 of AK5385 28 * GPIO 1 -> DFS1 of AK5385
29 */ 29 */
30 30
31#include <linux/mutex.h>
31#include <linux/pci.h> 32#include <linux/pci.h>
33#include <sound/ac97_codec.h>
32#include <sound/control.h> 34#include <sound/control.h>
33#include <sound/core.h> 35#include <sound/core.h>
34#include <sound/initval.h> 36#include <sound/initval.h>
@@ -37,6 +39,7 @@
37#include <sound/tlv.h> 39#include <sound/tlv.h>
38#include "oxygen.h" 40#include "oxygen.h"
39#include "ak4396.h" 41#include "ak4396.h"
42#include "cm9780.h"
40 43
41MODULE_AUTHOR("Clemens Ladisch <clemens@ladisch.de>"); 44MODULE_AUTHOR("Clemens Ladisch <clemens@ladisch.de>");
42MODULE_DESCRIPTION("C-Media CMI8788 driver"); 45MODULE_DESCRIPTION("C-Media CMI8788 driver");
@@ -75,6 +78,8 @@ MODULE_DEVICE_TABLE(pci, oxygen_ids);
75#define GPIO_AK5385_DFS_DOUBLE 0x0001 78#define GPIO_AK5385_DFS_DOUBLE 0x0001
76#define GPIO_AK5385_DFS_QUAD 0x0002 79#define GPIO_AK5385_DFS_QUAD 0x0002
77 80
81#define GPIO_LINE_MUTE CM9780_GPO0
82
78#define WM8785_R0 0 83#define WM8785_R0 0
79#define WM8785_R1 1 84#define WM8785_R1 1
80#define WM8785_R2 2 85#define WM8785_R2 2
@@ -180,16 +185,23 @@ static void wm8785_init(struct oxygen *chip)
180 snd_component_add(chip->card, "WM8785"); 185 snd_component_add(chip->card, "WM8785");
181} 186}
182 187
188static void cmi9780_init(struct oxygen *chip)
189{
190 oxygen_ac97_clear_bits(chip, 0, CM9780_GPIO_STATUS, GPIO_LINE_MUTE);
191}
192
183static void generic_init(struct oxygen *chip) 193static void generic_init(struct oxygen *chip)
184{ 194{
185 ak4396_init(chip); 195 ak4396_init(chip);
186 wm8785_init(chip); 196 wm8785_init(chip);
197 cmi9780_init(chip);
187} 198}
188 199
189static void meridian_init(struct oxygen *chip) 200static void meridian_init(struct oxygen *chip)
190{ 201{
191 ak4396_init(chip); 202 ak4396_init(chip);
192 ak5385_init(chip); 203 ak5385_init(chip);
204 cmi9780_init(chip);
193} 205}
194 206
195static void generic_cleanup(struct oxygen *chip) 207static void generic_cleanup(struct oxygen *chip)
@@ -285,6 +297,27 @@ static void set_ak5385_params(struct oxygen *chip,
285 value, GPIO_AK5385_DFS_MASK); 297 value, GPIO_AK5385_DFS_MASK);
286} 298}
287 299
300static void cmi9780_switch_hook(struct oxygen *chip, unsigned int codec,
301 unsigned int reg, int mute)
302{
303 if (codec != 0)
304 return;
305 switch (reg) {
306 case AC97_LINE:
307 oxygen_write_ac97_masked(chip, 0, CM9780_GPIO_STATUS,
308 mute ? GPIO_LINE_MUTE : 0,
309 GPIO_LINE_MUTE);
310 break;
311 case AC97_MIC:
312 case AC97_CD:
313 case AC97_AUX:
314 if (!mute)
315 oxygen_ac97_set_bits(chip, 0, CM9780_GPIO_STATUS,
316 GPIO_LINE_MUTE);
317 break;
318 }
319}
320
288static const DECLARE_TLV_DB_LINEAR(ak4396_db_scale, TLV_DB_GAIN_MUTE, 0); 321static const DECLARE_TLV_DB_LINEAR(ak4396_db_scale, TLV_DB_GAIN_MUTE, 0);
289 322
290static int ak4396_control_filter(struct snd_kcontrol_new *template) 323static int ak4396_control_filter(struct snd_kcontrol_new *template)
@@ -308,6 +341,7 @@ static const struct oxygen_model model_generic = {
308 .set_adc_params = set_wm8785_params, 341 .set_adc_params = set_wm8785_params,
309 .update_dac_volume = update_ak4396_volume, 342 .update_dac_volume = update_ak4396_volume,
310 .update_dac_mute = update_ak4396_mute, 343 .update_dac_mute = update_ak4396_mute,
344 .ac97_switch_hook = cmi9780_switch_hook,
311 .model_data_size = sizeof(struct generic_data), 345 .model_data_size = sizeof(struct generic_data),
312 .dac_channels = 8, 346 .dac_channels = 8,
313 .used_channels = OXYGEN_CHANNEL_A | 347 .used_channels = OXYGEN_CHANNEL_A |
@@ -331,6 +365,7 @@ static const struct oxygen_model model_meridian = {
331 .set_adc_params = set_ak5385_params, 365 .set_adc_params = set_ak5385_params,
332 .update_dac_volume = update_ak4396_volume, 366 .update_dac_volume = update_ak4396_volume,
333 .update_dac_mute = update_ak4396_mute, 367 .update_dac_mute = update_ak4396_mute,
368 .ac97_switch_hook = cmi9780_switch_hook,
334 .model_data_size = sizeof(struct generic_data), 369 .model_data_size = sizeof(struct generic_data),
335 .dac_channels = 8, 370 .dac_channels = 8,
336 .used_channels = OXYGEN_CHANNEL_B | 371 .used_channels = OXYGEN_CHANNEL_B |
diff --git a/sound/pci/oxygen/oxygen_lib.c b/sound/pci/oxygen/oxygen_lib.c
index 6eb36dd11476..78c21155218e 100644
--- a/sound/pci/oxygen/oxygen_lib.c
+++ b/sound/pci/oxygen/oxygen_lib.c
@@ -204,7 +204,7 @@ static void oxygen_proc_read(struct snd_info_entry *entry,
204 mutex_unlock(&chip->mutex); 204 mutex_unlock(&chip->mutex);
205} 205}
206 206
207static void __devinit oxygen_proc_init(struct oxygen *chip) 207static void oxygen_proc_init(struct oxygen *chip)
208{ 208{
209 struct snd_info_entry *entry; 209 struct snd_info_entry *entry;
210 210
@@ -215,7 +215,7 @@ static void __devinit oxygen_proc_init(struct oxygen *chip)
215#define oxygen_proc_init(chip) 215#define oxygen_proc_init(chip)
216#endif 216#endif
217 217
218static void __devinit oxygen_init(struct oxygen *chip) 218static void oxygen_init(struct oxygen *chip)
219{ 219{
220 unsigned int i; 220 unsigned int i;
221 221
@@ -399,8 +399,8 @@ static void oxygen_card_free(struct snd_card *card)
399 pci_disable_device(chip->pci); 399 pci_disable_device(chip->pci);
400} 400}
401 401
402int __devinit oxygen_pci_probe(struct pci_dev *pci, int index, char *id, 402int oxygen_pci_probe(struct pci_dev *pci, int index, char *id,
403 int midi, const struct oxygen_model *model) 403 int midi, const struct oxygen_model *model)
404{ 404{
405 struct snd_card *card; 405 struct snd_card *card;
406 struct oxygen *chip; 406 struct oxygen *chip;
@@ -507,7 +507,7 @@ err_card:
507} 507}
508EXPORT_SYMBOL(oxygen_pci_probe); 508EXPORT_SYMBOL(oxygen_pci_probe);
509 509
510void __devexit oxygen_pci_remove(struct pci_dev *pci) 510void oxygen_pci_remove(struct pci_dev *pci)
511{ 511{
512 snd_card_free(pci_get_drvdata(pci)); 512 snd_card_free(pci_get_drvdata(pci));
513 pci_set_drvdata(pci, NULL); 513 pci_set_drvdata(pci, NULL);
diff --git a/sound/pci/oxygen/oxygen_pcm.c b/sound/pci/oxygen/oxygen_pcm.c
index dfad3db35c82..b70046aca657 100644
--- a/sound/pci/oxygen/oxygen_pcm.c
+++ b/sound/pci/oxygen/oxygen_pcm.c
@@ -634,7 +634,7 @@ static void oxygen_pcm_free(struct snd_pcm *pcm)
634 snd_pcm_lib_preallocate_free_for_all(pcm); 634 snd_pcm_lib_preallocate_free_for_all(pcm);
635} 635}
636 636
637int __devinit oxygen_pcm_init(struct oxygen *chip) 637int oxygen_pcm_init(struct oxygen *chip)
638{ 638{
639 struct snd_pcm *pcm; 639 struct snd_pcm *pcm;
640 int outs, ins; 640 int outs, ins;
diff --git a/sound/pci/rme9652/hdsp.c b/sound/pci/rme9652/hdsp.c
index c2bd4384316a..1be84f22d0de 100644
--- a/sound/pci/rme9652/hdsp.c
+++ b/sound/pci/rme9652/hdsp.c
@@ -745,7 +745,7 @@ static int hdsp_get_iobox_version (struct hdsp *hdsp)
745 745
746 746
747#ifdef HDSP_FW_LOADER 747#ifdef HDSP_FW_LOADER
748static int __devinit hdsp_request_fw_loader(struct hdsp *hdsp); 748static int hdsp_request_fw_loader(struct hdsp *hdsp);
749#endif 749#endif
750 750
751static int hdsp_check_for_firmware (struct hdsp *hdsp, int load_on_demand) 751static int hdsp_check_for_firmware (struct hdsp *hdsp, int load_on_demand)
@@ -4688,8 +4688,7 @@ static struct snd_pcm_ops snd_hdsp_capture_ops = {
4688 .copy = snd_hdsp_capture_copy, 4688 .copy = snd_hdsp_capture_copy,
4689}; 4689};
4690 4690
4691static int __devinit snd_hdsp_create_hwdep(struct snd_card *card, 4691static int snd_hdsp_create_hwdep(struct snd_card *card, struct hdsp *hdsp)
4692 struct hdsp *hdsp)
4693{ 4692{
4694 struct snd_hwdep *hw; 4693 struct snd_hwdep *hw;
4695 int err; 4694 int err;
@@ -4857,7 +4856,7 @@ static int snd_hdsp_create_alsa_devices(struct snd_card *card, struct hdsp *hdsp
4857 4856
4858#ifdef HDSP_FW_LOADER 4857#ifdef HDSP_FW_LOADER
4859/* load firmware via hotplug fw loader */ 4858/* load firmware via hotplug fw loader */
4860static int __devinit hdsp_request_fw_loader(struct hdsp *hdsp) 4859static int hdsp_request_fw_loader(struct hdsp *hdsp)
4861{ 4860{
4862 const char *fwfile; 4861 const char *fwfile;
4863 const struct firmware *fw; 4862 const struct firmware *fw;
diff --git a/sound/soc/fsl/mpc8610_hpcd.c b/sound/soc/fsl/mpc8610_hpcd.c
index f26c4b2e8b6e..a00aac7a71f1 100644
--- a/sound/soc/fsl/mpc8610_hpcd.c
+++ b/sound/soc/fsl/mpc8610_hpcd.c
@@ -315,7 +315,7 @@ static int mpc8610_hpcd_probe(struct of_device *ofdev,
315 machine_data->dai_format = SND_SOC_DAIFMT_LEFT_J; 315 machine_data->dai_format = SND_SOC_DAIFMT_LEFT_J;
316 machine_data->codec_clk_direction = SND_SOC_CLOCK_IN; 316 machine_data->codec_clk_direction = SND_SOC_CLOCK_IN;
317 machine_data->cpu_clk_direction = SND_SOC_CLOCK_OUT; 317 machine_data->cpu_clk_direction = SND_SOC_CLOCK_OUT;
318 } else if (strcasecmp(sprop, "rj-master") == 0) { 318 } else if (strcasecmp(sprop, "rj-slave") == 0) {
319 machine_data->dai_format = SND_SOC_DAIFMT_RIGHT_J; 319 machine_data->dai_format = SND_SOC_DAIFMT_RIGHT_J;
320 machine_data->codec_clk_direction = SND_SOC_CLOCK_OUT; 320 machine_data->codec_clk_direction = SND_SOC_CLOCK_OUT;
321 machine_data->cpu_clk_direction = SND_SOC_CLOCK_IN; 321 machine_data->cpu_clk_direction = SND_SOC_CLOCK_IN;
diff --git a/sound/usb/caiaq/caiaq-device.c b/sound/usb/caiaq/caiaq-device.c
index 58d25e4e7d6c..7c44a2c7f963 100644
--- a/sound/usb/caiaq/caiaq-device.c
+++ b/sound/usb/caiaq/caiaq-device.c
@@ -245,7 +245,7 @@ int snd_usb_caiaq_set_auto_msg (struct snd_usb_caiaqdev *dev,
245 tmp, sizeof(tmp)); 245 tmp, sizeof(tmp));
246} 246}
247 247
248static void setup_card(struct snd_usb_caiaqdev *dev) 248static void __devinit setup_card(struct snd_usb_caiaqdev *dev)
249{ 249{
250 int ret; 250 int ret;
251 char val[4]; 251 char val[4];
@@ -359,7 +359,7 @@ static struct snd_card* create_card(struct usb_device* usb_dev)
359 return card; 359 return card;
360} 360}
361 361
362static int init_card(struct snd_usb_caiaqdev *dev) 362static int __devinit init_card(struct snd_usb_caiaqdev *dev)
363{ 363{
364 char *c; 364 char *c;
365 struct usb_device *usb_dev = dev->chip.dev; 365 struct usb_device *usb_dev = dev->chip.dev;
@@ -428,7 +428,7 @@ static int init_card(struct snd_usb_caiaqdev *dev)
428 return 0; 428 return 0;
429} 429}
430 430
431static int snd_probe(struct usb_interface *intf, 431static int __devinit snd_probe(struct usb_interface *intf,
432 const struct usb_device_id *id) 432 const struct usb_device_id *id)
433{ 433{
434 int ret; 434 int ret;
diff --git a/sound/usb/usbmidi.c b/sound/usb/usbmidi.c
index 750e929d5870..6676a177c99e 100644
--- a/sound/usb/usbmidi.c
+++ b/sound/usb/usbmidi.c
@@ -104,12 +104,14 @@ struct snd_usb_midi {
104 struct usb_protocol_ops* usb_protocol_ops; 104 struct usb_protocol_ops* usb_protocol_ops;
105 struct list_head list; 105 struct list_head list;
106 struct timer_list error_timer; 106 struct timer_list error_timer;
107 spinlock_t disc_lock;
107 108
108 struct snd_usb_midi_endpoint { 109 struct snd_usb_midi_endpoint {
109 struct snd_usb_midi_out_endpoint *out; 110 struct snd_usb_midi_out_endpoint *out;
110 struct snd_usb_midi_in_endpoint *in; 111 struct snd_usb_midi_in_endpoint *in;
111 } endpoints[MIDI_MAX_ENDPOINTS]; 112 } endpoints[MIDI_MAX_ENDPOINTS];
112 unsigned long input_triggered; 113 unsigned long input_triggered;
114 unsigned char disconnected;
113}; 115};
114 116
115struct snd_usb_midi_out_endpoint { 117struct snd_usb_midi_out_endpoint {
@@ -306,6 +308,11 @@ static void snd_usbmidi_error_timer(unsigned long data)
306 struct snd_usb_midi *umidi = (struct snd_usb_midi *)data; 308 struct snd_usb_midi *umidi = (struct snd_usb_midi *)data;
307 int i; 309 int i;
308 310
311 spin_lock(&umidi->disc_lock);
312 if (umidi->disconnected) {
313 spin_unlock(&umidi->disc_lock);
314 return;
315 }
309 for (i = 0; i < MIDI_MAX_ENDPOINTS; ++i) { 316 for (i = 0; i < MIDI_MAX_ENDPOINTS; ++i) {
310 struct snd_usb_midi_in_endpoint *in = umidi->endpoints[i].in; 317 struct snd_usb_midi_in_endpoint *in = umidi->endpoints[i].in;
311 if (in && in->error_resubmit) { 318 if (in && in->error_resubmit) {
@@ -316,6 +323,7 @@ static void snd_usbmidi_error_timer(unsigned long data)
316 if (umidi->endpoints[i].out) 323 if (umidi->endpoints[i].out)
317 snd_usbmidi_do_output(umidi->endpoints[i].out); 324 snd_usbmidi_do_output(umidi->endpoints[i].out);
318 } 325 }
326 spin_unlock(&umidi->disc_lock);
319} 327}
320 328
321/* helper function to send static data that may not DMA-able */ 329/* helper function to send static data that may not DMA-able */
@@ -1049,7 +1057,14 @@ void snd_usbmidi_disconnect(struct list_head* p)
1049 int i; 1057 int i;
1050 1058
1051 umidi = list_entry(p, struct snd_usb_midi, list); 1059 umidi = list_entry(p, struct snd_usb_midi, list);
1052 del_timer_sync(&umidi->error_timer); 1060 /*
1061 * an URB's completion handler may start the timer and
1062 * a timer may submit an URB. To reliably break the cycle
1063 * a flag under lock must be used
1064 */
1065 spin_lock_irq(&umidi->disc_lock);
1066 umidi->disconnected = 1;
1067 spin_unlock_irq(&umidi->disc_lock);
1053 for (i = 0; i < MIDI_MAX_ENDPOINTS; ++i) { 1068 for (i = 0; i < MIDI_MAX_ENDPOINTS; ++i) {
1054 struct snd_usb_midi_endpoint* ep = &umidi->endpoints[i]; 1069 struct snd_usb_midi_endpoint* ep = &umidi->endpoints[i];
1055 if (ep->out) 1070 if (ep->out)
@@ -1062,6 +1077,7 @@ void snd_usbmidi_disconnect(struct list_head* p)
1062 if (ep->in) 1077 if (ep->in)
1063 usb_kill_urb(ep->in->urb); 1078 usb_kill_urb(ep->in->urb);
1064 } 1079 }
1080 del_timer_sync(&umidi->error_timer);
1065} 1081}
1066 1082
1067static void snd_usbmidi_rawmidi_free(struct snd_rawmidi *rmidi) 1083static void snd_usbmidi_rawmidi_free(struct snd_rawmidi *rmidi)
@@ -1685,6 +1701,7 @@ int snd_usb_create_midi_interface(struct snd_usb_audio* chip,
1685 umidi->quirk = quirk; 1701 umidi->quirk = quirk;
1686 umidi->usb_protocol_ops = &snd_usbmidi_standard_ops; 1702 umidi->usb_protocol_ops = &snd_usbmidi_standard_ops;
1687 init_timer(&umidi->error_timer); 1703 init_timer(&umidi->error_timer);
1704 spin_lock_init(&umidi->disc_lock);
1688 umidi->error_timer.function = snd_usbmidi_error_timer; 1705 umidi->error_timer.function = snd_usbmidi_error_timer;
1689 umidi->error_timer.data = (unsigned long)umidi; 1706 umidi->error_timer.data = (unsigned long)umidi;
1690 1707