From 50908f6ac29865b0e4c6401e15c3ac3b578948d7 Mon Sep 17 00:00:00 2001 From: Linus Torvalds Date: Sun, 22 Jul 2007 11:36:49 -0700 Subject: [PATCH] --- yaml --- r: 62746 b: refs/heads/master c: e6f194d8f6f50da6837af637b2fd839c34185f7a h: refs/heads/master v: v3 --- [refs] | 2 +- trunk/.gitignore | 1 + trunk/CREDITS | 10 +- trunk/Documentation/CodingStyle | 20 +- trunk/Documentation/DocBook/Makefile | 10 +- trunk/Documentation/DocBook/kernel-api.tmpl | 5 +- trunk/Documentation/DocBook/uio-howto.tmpl | 611 +++ trunk/Documentation/HOWTO | 3 + trunk/Documentation/connector/cn_test.c | 3 +- trunk/Documentation/console/console.txt | 2 +- trunk/Documentation/driver-model/devres.txt | 2 +- trunk/Documentation/drivers/edac/edac.txt | 192 +- trunk/Documentation/dvb/bt8xx.txt | 32 +- trunk/Documentation/dvb/get_dvb_firmware | 63 +- trunk/Documentation/dvb/opera-firmware.txt | 27 + .../feature-removal-schedule.txt | 56 +- trunk/Documentation/filesystems/Locking | 13 +- .../filesystems/configfs/configfs_example.c | 6 +- trunk/Documentation/filesystems/proc.txt | 45 + trunk/Documentation/gpio.txt | 3 + trunk/Documentation/hwmon/abituguru | 31 +- trunk/Documentation/hwmon/abituguru3 | 65 + trunk/Documentation/hwmon/dme1737 | 257 ++ trunk/Documentation/hwmon/f71805f | 35 +- trunk/Documentation/hwmon/it87 | 9 +- trunk/Documentation/hwmon/lm90 | 36 +- trunk/Documentation/hwmon/lm93 | 412 ++ trunk/Documentation/hwmon/smsc47b397 | 7 +- trunk/Documentation/hwmon/sysfs-interface | 15 +- trunk/Documentation/hwmon/w83627ehf | 6 +- trunk/Documentation/ja_JP/HOWTO | 650 +++ .../ja_JP/stable_api_nonsense.txt | 263 ++ trunk/Documentation/kbuild/makefiles.txt | 14 + trunk/Documentation/kernel-parameters.txt | 7 +- trunk/Documentation/kprobes.txt | 8 +- trunk/Documentation/lguest/Makefile | 27 + trunk/Documentation/lguest/lguest.c | 1012 +++++ trunk/Documentation/lguest/lguest.txt | 129 + .../Documentation/power/freezing-of-tasks.txt | 8 +- trunk/Documentation/power/notifiers.txt | 50 + .../powerpc/booting-without-of.txt | 6 + .../sound/alsa/ALSA-Configuration.txt | 75 +- .../sound/alsa/Audiophile-Usb.txt | 242 +- .../sound/alsa/OSS-Emulation.txt | 15 + trunk/Documentation/thinkpad-acpi.txt | 353 +- trunk/Documentation/time_interpolators.txt | 41 - trunk/Documentation/video4linux/CARDLIST.bttv | 4 +- trunk/Documentation/video4linux/CARDLIST.cx88 | 1 + .../video4linux/CARDLIST.saa7134 | 1 + .../Documentation/video4linux/CARDLIST.tuner | 3 +- trunk/Documentation/video4linux/sn9c102.txt | 3 +- trunk/Documentation/video4linux/zr364xx.txt | 2 +- trunk/Documentation/x86_64/boot-options.txt | 14 +- trunk/Documentation/x86_64/machinecheck | 14 +- trunk/Documentation/zh_CN/HOWTO | 536 +++ .../zh_CN/stable_api_nonsense.txt | 157 + trunk/Kbuild | 1 + trunk/MAINTAINERS | 126 +- trunk/Makefile | 32 +- trunk/arch/alpha/kernel/module.c | 3 +- trunk/arch/alpha/kernel/vmlinux.lds.S | 10 +- trunk/arch/alpha/mm/fault.c | 22 +- trunk/arch/arm/Kconfig | 9 + trunk/arch/arm/Kconfig.debug | 18 +- trunk/arch/arm/Makefile | 3 + trunk/arch/arm/boot/Makefile | 8 + trunk/arch/arm/boot/compressed/Makefile | 2 +- trunk/arch/arm/boot/compressed/head.S | 2 +- trunk/arch/arm/configs/badge4_defconfig | 1 - trunk/arch/arm/configs/clps7500_defconfig | 1 - trunk/arch/arm/configs/em_x270_defconfig | 1265 ++++++ trunk/arch/arm/configs/footbridge_defconfig | 1 - trunk/arch/arm/configs/neponset_defconfig | 1 - trunk/arch/arm/configs/picotux200_defconfig | 1 - trunk/arch/arm/configs/rpc_defconfig | 1 - trunk/arch/arm/configs/s3c2410_defconfig | 11 +- trunk/arch/arm/kernel/vmlinux.lds.S | 1 + trunk/arch/arm/mach-at91/at91rm9200_devices.c | 10 +- trunk/arch/arm/mach-davinci/time.c | 2 + trunk/arch/arm/mach-imx/time.c | 1 + trunk/arch/arm/mach-iop13xx/pci.c | 3 +- trunk/arch/arm/mach-iop32x/Kconfig | 7 + trunk/arch/arm/mach-iop32x/Makefile | 1 + trunk/arch/arm/mach-iop32x/em7210.c | 215 + trunk/arch/arm/mach-iop32x/irq.c | 3 +- trunk/arch/arm/mach-ixp4xx/common.c | 4 +- trunk/arch/arm/mach-ks8695/irq.c | 1 - trunk/arch/arm/mach-mx3/Kconfig | 12 + trunk/arch/arm/mach-mx3/Makefile | 8 + trunk/arch/arm/mach-mx3/Makefile.boot | 3 + trunk/arch/arm/mach-mx3/mm.c | 64 + trunk/arch/arm/mach-mx3/mx31ads.c | 142 + trunk/arch/arm/mach-mx3/time.c | 152 + trunk/arch/arm/mach-ns9xxx/Makefile | 1 + trunk/arch/arm/mach-ns9xxx/board-a9m9750dev.c | 7 +- trunk/arch/arm/mach-ns9xxx/generic.c | 2 + trunk/arch/arm/mach-ns9xxx/irq.c | 11 +- trunk/arch/arm/mach-ns9xxx/mach-cc9p9360js.c | 2 +- trunk/arch/arm/mach-omap1/time.c | 1 + trunk/arch/arm/mach-pxa/Kconfig | 4 + trunk/arch/arm/mach-pxa/Makefile | 1 + trunk/arch/arm/mach-pxa/devices.h | 22 +- trunk/arch/arm/mach-pxa/em-x270.c | 354 ++ trunk/arch/arm/mach-pxa/generic.c | 32 +- trunk/arch/arm/mach-pxa/pm.c | 169 +- trunk/arch/arm/mach-pxa/pxa25x.c | 109 +- trunk/arch/arm/mach-pxa/pxa27x.c | 151 +- trunk/arch/arm/mach-pxa/sleep.S | 112 +- trunk/arch/arm/mach-pxa/time.c | 258 +- trunk/arch/arm/mach-rpc/riscpc.c | 2 +- trunk/arch/arm/mach-s3c2410/Kconfig | 1 + trunk/arch/arm/mach-s3c2410/clock.c | 2 +- trunk/arch/arm/mach-s3c2410/dma.c | 8 +- trunk/arch/arm/mach-s3c2410/mach-amlm5900.c | 2 +- trunk/arch/arm/mach-s3c2410/mach-bast.c | 6 +- trunk/arch/arm/mach-s3c2410/mach-h1940.c | 4 +- trunk/arch/arm/mach-s3c2410/mach-n30.c | 4 +- trunk/arch/arm/mach-s3c2410/mach-otom.c | 2 +- trunk/arch/arm/mach-s3c2410/mach-qt2410.c | 6 +- trunk/arch/arm/mach-s3c2410/mach-smdk2410.c | 2 +- trunk/arch/arm/mach-s3c2410/mach-vr1000.c | 2 +- trunk/arch/arm/mach-s3c2410/s3c2410.c | 3 +- trunk/arch/arm/mach-s3c2410/sleep.S | 2 +- trunk/arch/arm/mach-s3c2412/Kconfig | 1 + trunk/arch/arm/mach-s3c2412/clock.c | 2 +- trunk/arch/arm/mach-s3c2412/dma.c | 8 +- trunk/arch/arm/mach-s3c2412/mach-smdk2413.c | 4 +- trunk/arch/arm/mach-s3c2412/mach-vstms.c | 4 +- trunk/arch/arm/mach-s3c2412/s3c2412.c | 5 +- trunk/arch/arm/mach-s3c2440/Kconfig | 1 + trunk/arch/arm/mach-s3c2440/dma.c | 8 +- trunk/arch/arm/mach-s3c2440/mach-anubis.c | 4 +- trunk/arch/arm/mach-s3c2440/mach-nexcoder.c | 2 +- trunk/arch/arm/mach-s3c2440/mach-osiris.c | 4 +- trunk/arch/arm/mach-s3c2440/mach-rx3715.c | 4 +- trunk/arch/arm/mach-s3c2440/mach-smdk2440.c | 2 +- trunk/arch/arm/mach-s3c2442/Kconfig | 1 + trunk/arch/arm/mach-s3c2443/Kconfig | 1 + trunk/arch/arm/mach-s3c2443/dma.c | 8 +- trunk/arch/arm/mach-s3c2443/mach-smdk2443.c | 2 +- trunk/arch/arm/mach-sa1100/Kconfig | 13 +- trunk/arch/arm/mach-sa1100/Makefile | 2 + trunk/arch/arm/mach-sa1100/jornada720_ssp.c | 201 + trunk/arch/arm/mach-sa1100/neponset.c | 2 + trunk/arch/arm/mm/Kconfig | 18 +- trunk/arch/arm/mm/cache-l2x0.c | 6 + trunk/arch/arm/mm/fault.c | 40 +- trunk/arch/arm/mm/mmu.c | 14 +- trunk/arch/arm/mm/proc-syms.c | 2 + trunk/arch/arm/mm/proc-v7.S | 33 +- trunk/arch/arm/plat-iop/time.c | 8 + trunk/arch/arm/plat-mxc/Kconfig | 20 + trunk/arch/arm/plat-mxc/Makefile | 10 + trunk/arch/arm/plat-mxc/irq.c | 83 + trunk/arch/arm/plat-omap/timer32k.c | 2 + trunk/arch/arm/plat-s3c/Kconfig | 104 + trunk/arch/arm/plat-s3c24xx/Kconfig | 60 +- trunk/arch/arm/plat-s3c24xx/common-smdk.c | 2 +- trunk/arch/arm/plat-s3c24xx/cpu.c | 2 +- trunk/arch/arm/plat-s3c24xx/devs.c | 6 +- trunk/arch/arm/plat-s3c24xx/dma.c | 2 +- trunk/arch/arm/plat-s3c24xx/pm.c | 2 +- trunk/arch/arm/plat-s3c24xx/s3c244x.c | 3 +- trunk/arch/arm/plat-s3c24xx/sleep.S | 2 +- trunk/arch/arm/plat-s3c24xx/time.c | 2 +- trunk/arch/arm/vfp/vfphw.S | 12 +- trunk/arch/arm/vfp/vfpmodule.c | 12 +- trunk/arch/arm26/mm/fault.c | 30 +- trunk/arch/arm26/mm/memc.c | 4 +- trunk/arch/avr32/Kconfig | 25 + trunk/arch/avr32/boards/atngw100/setup.c | 31 + trunk/arch/avr32/boards/atstk1000/Kconfig | 53 + trunk/arch/avr32/boards/atstk1000/atstk1002.c | 50 +- trunk/arch/avr32/configs/atngw100_defconfig | 16 +- trunk/arch/avr32/kernel/setup.c | 4 +- trunk/arch/avr32/mach-at32ap/Makefile | 1 + trunk/arch/avr32/mach-at32ap/at32ap.c | 31 - trunk/arch/avr32/mach-at32ap/at32ap7000.c | 340 +- trunk/arch/avr32/mach-at32ap/cpufreq.c | 112 + trunk/arch/avr32/mach-at32ap/extint.c | 200 +- trunk/arch/avr32/mach-at32ap/pm.h | 112 + trunk/arch/avr32/mach-at32ap/sm.h | 242 -- trunk/arch/avr32/mm/fault.c | 23 +- trunk/arch/blackfin/mm/blackfin_sram.c | 3 +- trunk/arch/cris/arch-v10/drivers/pcf8563.c | 4 +- trunk/arch/cris/arch-v10/vmlinux.lds.S | 2 +- trunk/arch/cris/arch-v32/drivers/pcf8563.c | 4 +- trunk/arch/cris/arch-v32/drivers/pci/dma.c | 6 +- trunk/arch/cris/arch-v32/vmlinux.lds.S | 7 +- trunk/arch/cris/mm/fault.c | 23 +- trunk/arch/frv/Makefile | 2 +- trunk/arch/frv/kernel/vmlinux.lds.S | 5 +- trunk/arch/frv/mm/fault.c | 23 +- trunk/arch/i386/Kconfig | 23 +- trunk/arch/i386/Kconfig.cpu | 5 - trunk/arch/i386/Makefile | 3 + trunk/arch/i386/boot/.gitignore | 2 + trunk/arch/i386/boot/Makefile | 2 +- trunk/arch/i386/boot/boot.h | 2 +- trunk/arch/i386/boot/compressed/relocs.c | 3 + trunk/arch/i386/boot/cpucheck.c | 4 +- trunk/arch/i386/boot/mca.c | 2 +- trunk/arch/i386/boot/pm.c | 2 +- trunk/arch/i386/boot/tools/build.c | 2 +- trunk/arch/i386/boot/tty.c | 2 +- trunk/arch/i386/boot/video.c | 9 +- trunk/arch/i386/boot/video.h | 9 +- trunk/arch/i386/boot/voyager.c | 2 +- trunk/arch/i386/defconfig | 265 +- trunk/arch/i386/kernel/Makefile | 1 + trunk/arch/i386/kernel/acpi/boot.c | 44 +- trunk/arch/i386/kernel/acpi/sleep.c | 12 +- trunk/arch/i386/kernel/acpi/wakeup.S | 37 +- trunk/arch/i386/kernel/alternative.c | 69 +- trunk/arch/i386/kernel/apic.c | 10 +- trunk/arch/i386/kernel/asm-offsets.c | 29 + trunk/arch/i386/kernel/cpu/Makefile | 1 - trunk/arch/i386/kernel/cpu/amd.c | 11 +- trunk/arch/i386/kernel/cpu/common.c | 2 - .../i386/kernel/cpu/cpufreq/acpi-cpufreq.c | 4 +- .../arch/i386/kernel/cpu/cpufreq/gx-suspmod.c | 2 +- trunk/arch/i386/kernel/cpu/cyrix.c | 2 +- trunk/arch/i386/kernel/cpu/intel_cacheinfo.c | 79 +- trunk/arch/i386/kernel/cpu/mcheck/mce.c | 14 + trunk/arch/i386/kernel/cpu/mcheck/non-fatal.c | 4 +- trunk/arch/i386/kernel/cpu/mtrr/cyrix.c | 1 + trunk/arch/i386/kernel/cpu/mtrr/generic.c | 2 +- trunk/arch/i386/kernel/cpu/mtrr/main.c | 2 +- trunk/arch/i386/kernel/cpu/mtrr/state.c | 1 + trunk/arch/i386/kernel/cpu/perfctr-watchdog.c | 10 +- trunk/arch/i386/kernel/cpu/rise.c | 52 - trunk/arch/i386/kernel/e820.c | 32 + trunk/arch/i386/kernel/entry.S | 87 +- trunk/arch/i386/kernel/geode.c | 155 + trunk/arch/i386/kernel/head.S | 5 +- trunk/arch/i386/kernel/hpet.c | 98 +- trunk/arch/i386/kernel/i8253.c | 32 +- trunk/arch/i386/kernel/init_task.c | 2 +- trunk/arch/i386/kernel/io_apic.c | 26 +- trunk/arch/i386/kernel/irq.c | 10 +- trunk/arch/i386/kernel/kprobes.c | 9 +- trunk/arch/i386/kernel/nmi.c | 2 +- trunk/arch/i386/kernel/paravirt.c | 55 +- trunk/arch/i386/kernel/process.c | 12 + trunk/arch/i386/kernel/ptrace.c | 22 +- trunk/arch/i386/kernel/reboot.c | 9 + trunk/arch/i386/kernel/setup.c | 13 +- trunk/arch/i386/kernel/signal.c | 7 + trunk/arch/i386/kernel/smp.c | 5 +- trunk/arch/i386/kernel/smpboot.c | 8 +- trunk/arch/i386/kernel/syscall_table.S | 1 + trunk/arch/i386/kernel/sysenter.c | 4 +- trunk/arch/i386/kernel/time.c | 50 +- trunk/arch/i386/kernel/traps.c | 50 +- trunk/arch/i386/kernel/tsc.c | 27 +- trunk/arch/i386/kernel/vmi.c | 4 +- trunk/arch/i386/kernel/vmiclock.c | 8 +- trunk/arch/i386/kernel/vmlinux.lds.S | 8 +- trunk/arch/i386/kernel/vsyscall-note.S | 52 +- trunk/arch/i386/lib/Makefile | 2 +- trunk/arch/i386/lib/string.c | 257 ++ trunk/arch/i386/mach-generic/es7000.c | 2 +- trunk/arch/i386/mach-voyager/voyager_thread.c | 2 +- trunk/arch/i386/mm/fault.c | 33 +- trunk/arch/i386/mm/init.c | 27 +- trunk/arch/i386/mm/ioremap.c | 2 +- trunk/arch/i386/mm/pageattr.c | 22 +- trunk/arch/i386/mm/pgtable.c | 6 +- trunk/arch/i386/pci/acpi.c | 32 +- trunk/arch/i386/pci/common.c | 13 +- trunk/arch/i386/pci/mmconfig-shared.c | 48 +- trunk/arch/i386/xen/Kconfig | 11 + trunk/arch/i386/xen/Makefile | 4 + trunk/arch/i386/xen/enlighten.c | 1144 ++++++ trunk/arch/i386/xen/events.c | 591 +++ trunk/arch/i386/xen/features.c | 29 + trunk/arch/i386/xen/manage.c | 143 + trunk/arch/i386/xen/mmu.c | 564 +++ trunk/arch/i386/xen/mmu.h | 60 + trunk/arch/i386/xen/multicalls.c | 90 + trunk/arch/i386/xen/multicalls.h | 45 + trunk/arch/i386/xen/setup.c | 111 + trunk/arch/i386/xen/smp.c | 404 ++ trunk/arch/i386/xen/time.c | 593 +++ trunk/arch/i386/xen/vdso.h | 4 + trunk/arch/i386/xen/xen-asm.S | 291 ++ trunk/arch/i386/xen/xen-head.S | 38 + trunk/arch/i386/xen/xen-ops.h | 71 + trunk/arch/ia64/Kconfig | 6 +- trunk/arch/ia64/configs/bigsur_defconfig | 2 +- trunk/arch/ia64/configs/gensparse_defconfig | 2 +- trunk/arch/ia64/configs/sim_defconfig | 2 +- trunk/arch/ia64/configs/sn2_defconfig | 2 +- trunk/arch/ia64/configs/tiger_defconfig | 322 +- trunk/arch/ia64/configs/zx1_defconfig | 2 +- trunk/arch/ia64/defconfig | 338 +- trunk/arch/ia64/ia32/binfmt_elf32.c | 69 +- trunk/arch/ia64/ia32/ia32_support.c | 2 +- trunk/arch/ia64/kernel/asm-offsets.c | 35 +- trunk/arch/ia64/kernel/cyclone.c | 46 +- trunk/arch/ia64/kernel/entry.S | 2 +- trunk/arch/ia64/kernel/fsys.S | 179 +- trunk/arch/ia64/kernel/fsyscall_gtod_data.h | 23 + trunk/arch/ia64/kernel/iosapic.c | 652 ++- trunk/arch/ia64/kernel/irq.c | 2 +- trunk/arch/ia64/kernel/irq_ia64.c | 317 +- trunk/arch/ia64/kernel/kprobes.c | 7 +- trunk/arch/ia64/kernel/msi_ia64.c | 23 +- trunk/arch/ia64/kernel/setup.c | 9 - trunk/arch/ia64/kernel/smp.c | 2 +- trunk/arch/ia64/kernel/smpboot.c | 4 + trunk/arch/ia64/kernel/time.c | 96 +- trunk/arch/ia64/kernel/vmlinux.lds.S | 1 + trunk/arch/ia64/mm/fault.c | 26 +- trunk/arch/ia64/sn/kernel/sn2/timer.c | 29 +- trunk/arch/m32r/kernel/vmlinux.lds.S | 5 +- trunk/arch/m32r/m32104ut/defconfig.m32104ut | 1 - trunk/arch/m32r/mm/fault.c | 23 +- trunk/arch/m68k/Kconfig | 7 + trunk/arch/m68k/apollo/config.c | 4 +- trunk/arch/m68k/apollo/dn_ints.c | 2 +- trunk/arch/m68k/atari/atakeyb.c | 9 +- trunk/arch/m68k/bvme6000/config.c | 2 +- trunk/arch/m68k/kernel/head.S | 2 +- trunk/arch/m68k/kernel/setup.c | 1 + trunk/arch/m68k/kernel/sun3-head.S | 2 +- trunk/arch/m68k/kernel/time.c | 2 +- trunk/arch/m68k/kernel/vmlinux-std.lds | 1 + trunk/arch/m68k/kernel/vmlinux-sun3.lds | 2 +- trunk/arch/m68k/mac/config.c | 7 +- trunk/arch/m68k/mac/macints.c | 4 +- trunk/arch/m68k/mm/fault.c | 21 +- trunk/arch/m68k/mm/init.c | 2 +- trunk/arch/m68k/mm/sun3kmap.c | 2 + trunk/arch/m68k/mvme147/config.c | 2 +- trunk/arch/m68k/mvme16x/config.c | 2 +- trunk/arch/m68k/q40/q40ints.c | 2 +- trunk/arch/m68k/sun3/sun3ints.c | 2 +- trunk/arch/m68k/sun3x/prom.c | 2 +- trunk/arch/m68knommu/Kconfig | 4 + trunk/arch/m68knommu/kernel/Makefile | 4 +- trunk/arch/m68knommu/kernel/asm-offsets.c | 5 - trunk/arch/m68knommu/kernel/irq.c | 82 + trunk/arch/m68knommu/kernel/m68k_ksyms.c | 2 - trunk/arch/m68knommu/kernel/setup.c | 41 +- trunk/arch/m68knommu/kernel/traps.c | 4 +- trunk/arch/m68knommu/mm/memory.c | 20 - trunk/arch/m68knommu/platform/5307/Makefile | 2 +- trunk/arch/m68knommu/platform/5307/entry.S | 42 +- trunk/arch/m68knommu/platform/5307/ints.c | 279 -- trunk/arch/m68knommu/platform/5307/vectors.c | 29 +- trunk/arch/m68knommu/platform/68328/entry.S | 10 - trunk/arch/m68knommu/platform/68328/ints.c | 130 +- trunk/arch/m68knommu/platform/68360/entry.S | 6 +- trunk/arch/m68knommu/platform/68360/ints.c | 233 +- trunk/arch/mips/Kconfig | 11 + trunk/arch/mips/kernel/cpu-probe.c | 26 +- trunk/arch/mips/kernel/process.c | 14 + trunk/arch/mips/kernel/vmlinux.lds.S | 5 +- trunk/arch/mips/mm/fault.c | 23 +- trunk/arch/parisc/kernel/vmlinux.lds.S | 7 +- trunk/arch/parisc/mm/fault.c | 23 +- trunk/arch/powerpc/Kconfig | 3 + trunk/arch/powerpc/Makefile | 8 + trunk/arch/powerpc/boot/dts/mpc8641_hpcn.dts | 4 + trunk/arch/powerpc/boot/ps3-head.S | 2 + trunk/arch/powerpc/boot/ps3-hvcall.S | 2 + trunk/arch/powerpc/configs/cell_defconfig | 3 +- .../arch/powerpc/configs/prpmc2800_defconfig | 2 +- trunk/arch/powerpc/kernel/crash.c | 67 + trunk/arch/powerpc/kernel/kprobes.c | 11 +- trunk/arch/powerpc/kernel/lparcfg.c | 3 +- trunk/arch/powerpc/kernel/of_device.c | 122 +- trunk/arch/powerpc/kernel/of_platform.c | 85 +- trunk/arch/powerpc/kernel/pci-common.c | 9 +- trunk/arch/powerpc/kernel/prom.c | 252 +- trunk/arch/powerpc/kernel/rtas_flash.c | 2 +- trunk/arch/powerpc/kernel/setup_64.c | 12 +- trunk/arch/powerpc/kernel/smp.c | 7 +- trunk/arch/powerpc/kernel/sys_ppc32.c | 7 + trunk/arch/powerpc/kernel/time.c | 1 + trunk/arch/powerpc/kernel/vmlinux.lds.S | 7 +- trunk/arch/powerpc/mm/fault.c | 34 +- trunk/arch/powerpc/mm/hash_utils_64.c | 4 +- trunk/arch/powerpc/mm/hugetlbpage.c | 2 +- trunk/arch/powerpc/mm/init_64.c | 3 +- trunk/arch/powerpc/mm/tlb_32.c | 2 + trunk/arch/powerpc/oprofile/Kconfig | 7 + trunk/arch/powerpc/oprofile/Makefile | 4 +- trunk/arch/powerpc/oprofile/cell/pr_util.h | 97 + .../arch/powerpc/oprofile/cell/spu_profiler.c | 221 ++ .../powerpc/oprofile/cell/spu_task_sync.c | 484 +++ trunk/arch/powerpc/oprofile/cell/vma_map.c | 287 ++ trunk/arch/powerpc/oprofile/common.c | 51 +- trunk/arch/powerpc/oprofile/op_model_7450.c | 14 +- trunk/arch/powerpc/oprofile/op_model_cell.c | 607 ++- .../powerpc/oprofile/op_model_fsl_booke.c | 11 +- trunk/arch/powerpc/oprofile/op_model_pa6t.c | 12 +- trunk/arch/powerpc/oprofile/op_model_power4.c | 11 +- trunk/arch/powerpc/oprofile/op_model_rs64.c | 10 +- trunk/arch/powerpc/platforms/Kconfig | 10 + trunk/arch/powerpc/platforms/Kconfig.cputype | 2 +- trunk/arch/powerpc/platforms/cell/Kconfig | 10 + trunk/arch/powerpc/platforms/cell/Makefile | 6 +- trunk/arch/powerpc/platforms/cell/axon_msi.c | 445 +++ .../arch/powerpc/platforms/cell/cbe_cpufreq.c | 217 +- .../arch/powerpc/platforms/cell/cbe_cpufreq.h | 24 + .../platforms/cell/cbe_cpufreq_pervasive.c | 115 + .../powerpc/platforms/cell/cbe_cpufreq_pmi.c | 148 + trunk/arch/powerpc/platforms/cell/cbe_regs.c | 7 + .../arch/powerpc/platforms/cell/cbe_thermal.c | 25 +- trunk/arch/powerpc/platforms/cell/spu_base.c | 295 +- .../powerpc/platforms/cell/spu_syscalls.c | 17 +- .../powerpc/platforms/cell/spufs/context.c | 42 +- .../powerpc/platforms/cell/spufs/coredump.c | 2 +- .../arch/powerpc/platforms/cell/spufs/fault.c | 46 +- .../arch/powerpc/platforms/cell/spufs/file.c | 108 +- .../arch/powerpc/platforms/cell/spufs/gang.c | 6 + .../arch/powerpc/platforms/cell/spufs/inode.c | 134 +- trunk/arch/powerpc/platforms/cell/spufs/run.c | 36 +- .../arch/powerpc/platforms/cell/spufs/sched.c | 377 +- .../platforms/cell/spufs/spu_restore.c | 6 +- .../cell/spufs/spu_restore_dump.h_shipped | 480 +-- .../arch/powerpc/platforms/cell/spufs/spufs.h | 99 +- .../powerpc/platforms/cell/spufs/switch.c | 72 +- .../powerpc/platforms/cell/spufs/syscalls.c | 34 +- .../powerpc/platforms/embedded6xx/Kconfig | 2 +- trunk/arch/powerpc/platforms/ps3/Kconfig | 36 + .../arch/powerpc/platforms/pseries/firmware.c | 19 +- .../arch/powerpc/platforms/pseries/pseries.h | 2 +- trunk/arch/powerpc/platforms/pseries/setup.c | 17 +- trunk/arch/powerpc/sysdev/Makefile | 1 + trunk/arch/powerpc/sysdev/axonram.c | 381 ++ trunk/arch/powerpc/sysdev/fsl_soc.c | 9 + trunk/arch/powerpc/sysdev/mpic.c | 32 + trunk/arch/powerpc/sysdev/pmi.c | 51 +- trunk/arch/powerpc/xmon/nonstdio.c | 5 + trunk/arch/powerpc/xmon/nonstdio.h | 3 +- trunk/arch/powerpc/xmon/start.c | 2 +- trunk/arch/powerpc/xmon/xmon.c | 2 +- trunk/arch/ppc/configs/ev64260_defconfig | 1 - trunk/arch/ppc/configs/mpc8540_ads_defconfig | 1 - trunk/arch/ppc/configs/mpc8548_cds_defconfig | 1 - trunk/arch/ppc/configs/mpc8555_cds_defconfig | 1 - trunk/arch/ppc/configs/mpc8560_ads_defconfig | 1 - .../arch/ppc/configs/radstone_ppc7d_defconfig | 1 - trunk/arch/ppc/configs/stx_gp3_defconfig | 1 - trunk/arch/ppc/configs/sycamore_defconfig | 1 - trunk/arch/ppc/kernel/vmlinux.lds.S | 5 +- trunk/arch/ppc/mm/fault.c | 23 +- trunk/arch/ppc/syslib/mv64x60.c | 15 +- trunk/arch/s390/kernel/vmlinux.lds.S | 7 +- trunk/arch/s390/lib/uaccess_pt.c | 23 +- trunk/arch/s390/mm/fault.c | 30 +- trunk/arch/sh/Kconfig | 10 + trunk/arch/sh/Makefile | 3 +- trunk/arch/sh/boards/mpc1211/pci.c | 2 +- trunk/arch/sh/boards/renesas/r7780rp/setup.c | 54 + .../arch/sh/boards/renesas/rts7751r2d/setup.c | 3 +- trunk/arch/sh/boards/se/7722/irq.c | 96 +- trunk/arch/sh/boards/se/7722/setup.c | 5 +- trunk/arch/sh/cchips/hd6446x/Makefile | 2 + .../hd6446x/{hd64461/setup.c => hd64461.c} | 1 - trunk/arch/sh/cchips/hd6446x/hd64461/Makefile | 6 - trunk/arch/sh/cchips/hd6446x/hd64461/io.c | 150 - trunk/arch/sh/configs/landisk_defconfig | 2 +- trunk/arch/sh/configs/lboxre2_defconfig | 2 +- trunk/arch/sh/configs/r7780mp_defconfig | 2 +- trunk/arch/sh/configs/r7780rp_defconfig | 2 +- trunk/arch/sh/configs/rts7751r2d_defconfig | 8 +- trunk/arch/sh/configs/se7722_defconfig | 4 +- trunk/arch/sh/configs/se7750_defconfig | 2 +- trunk/arch/sh/configs/se7780_defconfig | 1 + trunk/arch/sh/drivers/dma/Kconfig | 3 +- trunk/arch/sh/drivers/heartbeat.c | 2 +- trunk/arch/sh/drivers/pci/Makefile | 1 + trunk/arch/sh/drivers/pci/ops-sh4.c | 2 +- trunk/arch/sh/drivers/pci/pci-st40.c | 2 +- trunk/arch/sh/drivers/pci/pci.c | 2 +- trunk/arch/sh/drivers/push-switch.c | 2 +- trunk/arch/sh/kernel/cpu/clock.c | 16 + trunk/arch/sh/kernel/cpu/irq/Makefile | 1 + trunk/arch/sh/kernel/cpu/irq/intc.c | 405 ++ trunk/arch/sh/kernel/cpu/sh2/setup-sh7619.c | 2 +- trunk/arch/sh/kernel/cpu/sh2a/setup-sh7206.c | 2 +- trunk/arch/sh/kernel/cpu/sh3/setup-sh7705.c | 2 +- trunk/arch/sh/kernel/cpu/sh3/setup-sh7709.c | 2 +- trunk/arch/sh/kernel/cpu/sh3/setup-sh7710.c | 2 +- trunk/arch/sh/kernel/cpu/sh4/setup-sh7750.c | 255 +- trunk/arch/sh/kernel/cpu/sh4/setup-sh7760.c | 8 +- trunk/arch/sh/kernel/cpu/sh4/sq.c | 3 +- trunk/arch/sh/kernel/cpu/sh4a/clock-sh7722.c | 15 + trunk/arch/sh/kernel/cpu/sh4a/setup-sh7722.c | 178 +- trunk/arch/sh/kernel/cpu/sh4a/setup-sh7780.c | 221 +- trunk/arch/sh/kernel/cpu/sh4a/setup-sh7785.c | 2 +- trunk/arch/sh/kernel/cpu/sh4a/setup-shx3.c | 2 +- trunk/arch/sh/kernel/cpufreq.c | 215 +- trunk/arch/sh/kernel/head.S | 3 +- trunk/arch/sh/kernel/irq.c | 9 +- trunk/arch/sh/kernel/setup.c | 7 +- trunk/arch/sh/kernel/sh_bios.c | 3 +- trunk/arch/sh/kernel/sh_ksyms.c | 35 + trunk/arch/sh/kernel/syscalls.S | 1 + trunk/arch/sh/kernel/timers/timer-tmu.c | 1 + trunk/arch/sh/kernel/vmlinux.lds.S | 6 +- trunk/arch/sh/mm/Kconfig | 16 +- trunk/arch/sh/mm/fault.c | 23 +- trunk/arch/sh/mm/pmb.c | 2 +- trunk/arch/sh64/configs/cayman_defconfig | 158 +- trunk/arch/sh64/kernel/head.S | 2 +- trunk/arch/sh64/kernel/pci_sh5.c | 4 +- trunk/arch/sh64/kernel/syscalls.S | 1 + trunk/arch/sh64/kernel/vmlinux.lds.S | 6 +- trunk/arch/sh64/mm/fault.c | 24 +- trunk/arch/sh64/mm/ioremap.c | 2 +- trunk/arch/sparc/Kconfig | 6 + trunk/arch/sparc/kernel/ebus.c | 5 + trunk/arch/sparc/kernel/entry.S | 14 +- trunk/arch/sparc/kernel/irq.c | 27 +- trunk/arch/sparc/kernel/irq.h | 68 + trunk/arch/sparc/kernel/of_device.c | 227 +- trunk/arch/sparc/kernel/pcic.c | 1 + trunk/arch/sparc/kernel/process.c | 8 +- trunk/arch/sparc/kernel/prom.c | 304 +- trunk/arch/sparc/kernel/setup.c | 65 +- trunk/arch/sparc/kernel/smp.c | 2 + trunk/arch/sparc/kernel/sparc_ksyms.c | 2 - trunk/arch/sparc/kernel/sun4c_irq.c | 15 + trunk/arch/sparc/kernel/sun4d_irq.c | 6 +- trunk/arch/sparc/kernel/sun4d_smp.c | 1 + trunk/arch/sparc/kernel/sun4m_irq.c | 74 + trunk/arch/sparc/kernel/sun4m_smp.c | 2 + trunk/arch/sparc/kernel/systbls.S | 9 +- trunk/arch/sparc/kernel/tick14.c | 6 +- trunk/arch/sparc/kernel/time.c | 4 +- trunk/arch/sparc/kernel/vmlinux.lds.S | 5 +- trunk/arch/sparc/mm/fault.c | 22 +- trunk/arch/sparc/mm/init.c | 3 + trunk/arch/sparc/mm/srmmu.c | 2 +- trunk/arch/sparc/mm/sun4c.c | 2 +- trunk/arch/sparc/prom/console.c | 116 - trunk/arch/sparc/prom/misc.c | 4 +- trunk/arch/sparc64/Kconfig | 10 + trunk/arch/sparc64/defconfig | 24 +- trunk/arch/sparc64/kernel/auxio.c | 2 +- trunk/arch/sparc64/kernel/ds.c | 270 +- trunk/arch/sparc64/kernel/ebus.c | 5 + trunk/arch/sparc64/kernel/head.S | 1 - trunk/arch/sparc64/kernel/irq.c | 76 +- trunk/arch/sparc64/kernel/isa.c | 5 + trunk/arch/sparc64/kernel/mdesc.c | 132 +- trunk/arch/sparc64/kernel/of_device.c | 243 +- trunk/arch/sparc64/kernel/pci_sun4v.c | 4 +- trunk/arch/sparc64/kernel/power.c | 68 +- trunk/arch/sparc64/kernel/process.c | 6 +- trunk/arch/sparc64/kernel/prom.c | 229 +- trunk/arch/sparc64/kernel/setup.c | 70 +- trunk/arch/sparc64/kernel/sparc64_ksyms.c | 2 +- trunk/arch/sparc64/kernel/sys_sparc32.c | 12 +- trunk/arch/sparc64/kernel/systbls.S | 11 +- trunk/arch/sparc64/kernel/time.c | 135 +- trunk/arch/sparc64/kernel/vio.c | 118 +- trunk/arch/sparc64/kernel/viohs.c | 30 + trunk/arch/sparc64/kernel/vmlinux.lds.S | 6 +- trunk/arch/sparc64/mm/fault.c | 24 +- trunk/arch/sparc64/mm/tsb.c | 3 +- trunk/arch/sparc64/prom/console.c | 85 - trunk/arch/sparc64/prom/misc.c | 4 +- trunk/arch/sparc64/prom/tree.c | 8 + trunk/arch/sparc64/solaris/socksys.c | 3 +- trunk/arch/um/Makefile | 2 +- trunk/arch/um/defconfig | 1 - trunk/arch/um/kernel/trap.c | 29 +- trunk/arch/x86_64/Kconfig | 12 + trunk/arch/x86_64/Makefile | 3 +- trunk/arch/x86_64/boot/.gitignore | 2 + trunk/arch/x86_64/boot/compressed/Makefile | 2 - trunk/arch/x86_64/defconfig | 288 +- trunk/arch/x86_64/ia32/ia32_aout.c | 2 +- trunk/arch/x86_64/ia32/ia32_binfmt.c | 59 +- trunk/arch/x86_64/ia32/ia32entry.S | 6 +- trunk/arch/x86_64/ia32/sys_ia32.c | 8 + trunk/arch/x86_64/kernel/acpi/sleep.c | 8 +- trunk/arch/x86_64/kernel/acpi/wakeup.S | 32 +- trunk/arch/x86_64/kernel/aperture.c | 4 +- trunk/arch/x86_64/kernel/apic.c | 77 +- trunk/arch/x86_64/kernel/e820.c | 138 +- trunk/arch/x86_64/kernel/early-quirks.c | 1 + trunk/arch/x86_64/kernel/early_printk.c | 5 + trunk/arch/x86_64/kernel/entry.S | 6 +- trunk/arch/x86_64/kernel/head.S | 8 +- trunk/arch/x86_64/kernel/hpet.c | 8 +- trunk/arch/x86_64/kernel/i8259.c | 18 - trunk/arch/x86_64/kernel/init_task.c | 2 +- trunk/arch/x86_64/kernel/io_apic.c | 58 +- trunk/arch/x86_64/kernel/kprobes.c | 10 +- trunk/arch/x86_64/kernel/mce.c | 255 +- trunk/arch/x86_64/kernel/mce_amd.c | 6 +- trunk/arch/x86_64/kernel/mpparse.c | 21 +- trunk/arch/x86_64/kernel/nmi.c | 17 +- trunk/arch/x86_64/kernel/pci-calgary.c | 570 ++- trunk/arch/x86_64/kernel/pci-dma.c | 7 +- trunk/arch/x86_64/kernel/pci-gart.c | 27 +- trunk/arch/x86_64/kernel/pci-nommu.c | 8 +- trunk/arch/x86_64/kernel/pci-swiotlb.c | 2 +- trunk/arch/x86_64/kernel/process.c | 21 +- trunk/arch/x86_64/kernel/ptrace.c | 23 +- trunk/arch/x86_64/kernel/reboot.c | 4 + trunk/arch/x86_64/kernel/setup.c | 12 +- trunk/arch/x86_64/kernel/signal.c | 9 +- trunk/arch/x86_64/kernel/smp.c | 6 +- trunk/arch/x86_64/kernel/suspend.c | 20 +- trunk/arch/x86_64/kernel/tce.c | 12 +- trunk/arch/x86_64/kernel/time.c | 158 +- trunk/arch/x86_64/kernel/traps.c | 17 +- trunk/arch/x86_64/kernel/tsc.c | 41 +- trunk/arch/x86_64/kernel/vmlinux.lds.S | 37 +- trunk/arch/x86_64/kernel/vsyscall.c | 22 +- trunk/arch/x86_64/mm/fault.c | 48 +- trunk/arch/x86_64/mm/init.c | 58 +- trunk/arch/x86_64/mm/k8topology.c | 13 +- trunk/arch/x86_64/mm/numa.c | 15 +- trunk/arch/x86_64/mm/pageattr.c | 25 +- trunk/arch/x86_64/mm/srat.c | 97 +- trunk/arch/x86_64/pci/k8-bus.c | 6 +- trunk/arch/x86_64/vdso/Makefile | 49 + trunk/arch/x86_64/vdso/vclock_gettime.c | 120 + trunk/arch/x86_64/vdso/vdso-note.S | 12 + trunk/arch/x86_64/vdso/vdso-start.S | 2 + trunk/arch/x86_64/vdso/vdso.S | 2 + trunk/arch/x86_64/vdso/vdso.lds.S | 77 + trunk/arch/x86_64/vdso/vextern.h | 16 + trunk/arch/x86_64/vdso/vgetcpu.c | 50 + trunk/arch/x86_64/vdso/vma.c | 139 + trunk/arch/x86_64/vdso/voffset.h | 1 + trunk/arch/x86_64/vdso/vvar.c | 12 + trunk/arch/xtensa/kernel/vmlinux.lds.S | 8 +- trunk/arch/xtensa/mm/fault.c | 23 +- trunk/block/bsg.c | 2 +- trunk/block/cfq-iosched.c | 67 +- trunk/block/ll_rw_blk.c | 6 +- trunk/block/scsi_ioctl.c | 3 +- trunk/crypto/async_tx/async_memcpy.c | 19 +- trunk/drivers/Kconfig | 5 + trunk/drivers/Makefile | 5 + trunk/drivers/acpi/Kconfig | 23 +- trunk/drivers/acpi/battery.c | 673 ++-- trunk/drivers/acpi/bay.c | 19 +- trunk/drivers/acpi/bus.c | 4 + trunk/drivers/acpi/dock.c | 127 +- trunk/drivers/acpi/ec.c | 247 +- trunk/drivers/acpi/event.c | 153 +- trunk/drivers/acpi/events/evgpeblk.c | 4 + trunk/drivers/acpi/events/evrgnini.c | 1 + trunk/drivers/acpi/glue.c | 2 +- trunk/drivers/acpi/numa.c | 31 +- trunk/drivers/acpi/osl.c | 42 +- trunk/drivers/acpi/pci_link.c | 2 +- trunk/drivers/acpi/processor_core.c | 6 + trunk/drivers/acpi/processor_idle.c | 24 +- trunk/drivers/acpi/processor_throttling.c | 410 +- trunk/drivers/acpi/sbs.c | 33 +- trunk/drivers/acpi/sleep/main.c | 19 +- trunk/drivers/acpi/sleep/poweroff.c | 41 +- trunk/drivers/acpi/system.c | 165 +- trunk/drivers/acpi/tables/tbfadt.c | 44 +- trunk/drivers/acpi/thermal.c | 24 +- trunk/drivers/acpi/utilities/uteval.c | 17 +- trunk/drivers/acpi/video.c | 124 +- trunk/drivers/ata/ahci.c | 255 +- trunk/drivers/ata/libata-core.c | 79 +- trunk/drivers/ata/libata-eh.c | 204 +- trunk/drivers/ata/libata-scsi.c | 63 +- trunk/drivers/ata/libata-sff.c | 4 +- trunk/drivers/ata/libata.h | 3 +- trunk/drivers/ata/pata_cs5520.c | 2 +- trunk/drivers/ata/pata_pcmcia.c | 1 + trunk/drivers/ata/pata_platform.c | 5 +- trunk/drivers/ata/pata_scc.c | 29 +- trunk/drivers/ata/sata_inic162x.c | 16 +- trunk/drivers/ata/sata_mv.c | 203 +- trunk/drivers/ata/sata_nv.c | 38 +- trunk/drivers/ata/sata_promise.c | 25 +- trunk/drivers/ata/sata_qstor.c | 18 +- trunk/drivers/ata/sata_sil.c | 25 +- trunk/drivers/ata/sata_sil24.c | 139 +- trunk/drivers/ata/sata_sis.c | 22 +- trunk/drivers/ata/sata_svw.c | 13 +- trunk/drivers/ata/sata_uli.c | 16 +- trunk/drivers/ata/sata_via.c | 27 +- trunk/drivers/ata/sata_vsc.c | 13 +- trunk/drivers/atm/Kconfig | 2 +- trunk/drivers/atm/eni.c | 19 +- trunk/drivers/atm/firestream.c | 14 +- trunk/drivers/atm/idt77252.c | 6 +- trunk/drivers/atm/lanai.c | 4 +- trunk/drivers/atm/nicstarmac.c | 2 +- trunk/drivers/base/core.c | 168 +- trunk/drivers/base/power/Makefile | 4 +- trunk/drivers/base/power/power.h | 5 - trunk/drivers/base/power/runtime.c | 85 - trunk/drivers/base/power/sysfs.c | 66 - trunk/drivers/base/power/trace.c | 5 +- trunk/drivers/block/Kconfig | 9 + trunk/drivers/block/Makefile | 3 + trunk/drivers/block/aoe/aoeblk.c | 4 +- trunk/drivers/block/lguest_blk.c | 275 ++ trunk/drivers/block/ps3disk.c | 630 +++ trunk/drivers/block/sunvdc.c | 123 +- trunk/drivers/block/sx8.c | 3 +- trunk/drivers/block/xen-blkfront.c | 988 +++++ trunk/drivers/char/Kconfig | 14 +- trunk/drivers/char/Makefile | 4 + trunk/drivers/char/amiserial.c | 3 +- trunk/drivers/char/drm/via_dmablit.c | 3 +- trunk/drivers/char/esp.c | 6 +- trunk/drivers/char/hpet.c | 70 +- trunk/drivers/char/hvc_iseries.c | 8 +- trunk/drivers/char/hvc_lguest.c | 102 + trunk/drivers/char/hvc_rtas.c | 2 +- trunk/drivers/char/hvc_xen.c | 159 + trunk/drivers/char/hvcs.c | 12 +- trunk/drivers/char/hw_random/Kconfig | 2 +- trunk/drivers/char/ip2/ip2main.c | 4 +- trunk/drivers/char/ipmi/ipmi_msghandler.c | 3 +- trunk/drivers/char/mbcs.c | 27 +- trunk/drivers/char/mbcs.h | 10 +- trunk/drivers/char/pcmcia/synclink_cs.c | 3 +- trunk/drivers/char/ps3flash.c | 440 +++ trunk/drivers/char/random.c | 9 +- trunk/drivers/char/rio/rio_linux.c | 4 +- trunk/drivers/char/rio/riocmd.c | 4 +- trunk/drivers/char/rio/riotable.c | 3 +- trunk/drivers/char/rocket.c | 3 +- trunk/drivers/char/rtc.c | 32 +- trunk/drivers/char/serial167.c | 6 - trunk/drivers/char/stallion.c | 5 +- trunk/drivers/char/synclink.c | 3 +- trunk/drivers/char/synclink_gt.c | 3 +- trunk/drivers/char/synclinkmp.c | 3 +- trunk/drivers/char/tpm/tpm_bios.c | 22 +- trunk/drivers/char/viotape.c | 7 +- trunk/drivers/char/vme_scc.c | 8 - trunk/drivers/char/watchdog/Kconfig | 18 +- trunk/drivers/char/watchdog/Makefile | 1 + trunk/drivers/char/watchdog/iop_wdt.c | 262 ++ trunk/drivers/char/watchdog/mpcore_wdt.c | 3 +- trunk/drivers/char/watchdog/pcwd_usb.c | 3 +- trunk/drivers/clocksource/acpi_pm.c | 2 +- trunk/drivers/edac/Kconfig | 53 +- trunk/drivers/edac/Makefile | 17 +- trunk/drivers/edac/amd76x_edac.c | 75 +- trunk/drivers/edac/e752x_edac.c | 320 +- trunk/drivers/edac/e7xxx_edac.c | 125 +- trunk/drivers/edac/{edac_mc.h => edac_core.h} | 506 ++- trunk/drivers/edac/edac_device.c | 746 ++++ trunk/drivers/edac/edac_device_sysfs.c | 896 +++++ trunk/drivers/edac/edac_mc.c | 1676 ++------ trunk/drivers/edac/edac_mc_sysfs.c | 1024 +++++ trunk/drivers/edac/edac_module.c | 222 ++ trunk/drivers/edac/edac_module.h | 77 + trunk/drivers/edac/edac_pci.c | 433 ++ trunk/drivers/edac/edac_pci_sysfs.c | 620 +++ trunk/drivers/edac/edac_stub.c | 46 + trunk/drivers/edac/i3000_edac.c | 506 +++ trunk/drivers/edac/i5000_edac.c | 1505 +++++++ trunk/drivers/edac/i82443bxgx_edac.c | 402 ++ trunk/drivers/edac/i82860_edac.c | 56 +- trunk/drivers/edac/i82875p_edac.c | 92 +- trunk/drivers/edac/i82975x_edac.c | 666 ++++ trunk/drivers/edac/pasemi_edac.c | 299 ++ trunk/drivers/edac/r82600_edac.c | 77 +- trunk/drivers/firewire/fw-ohci.c | 3 +- trunk/drivers/firewire/fw-sbp2.c | 16 +- trunk/drivers/firewire/fw-transaction.c | 9 +- trunk/drivers/firewire/fw-transaction.h | 4 + trunk/drivers/hwmon/Kconfig | 82 +- trunk/drivers/hwmon/Makefile | 3 + trunk/drivers/hwmon/abituguru.c | 45 +- trunk/drivers/hwmon/abituguru3.c | 1140 ++++++ trunk/drivers/hwmon/coretemp.c | 2 +- trunk/drivers/hwmon/dme1737.c | 2080 ++++++++++ trunk/drivers/hwmon/ds1621.c | 161 +- trunk/drivers/hwmon/f71805f.c | 178 +- trunk/drivers/hwmon/it87.c | 497 ++- trunk/drivers/hwmon/lm63.c | 4 +- trunk/drivers/hwmon/lm83.c | 12 +- trunk/drivers/hwmon/lm90.c | 78 +- trunk/drivers/hwmon/lm93.c | 2655 +++++++++++++ trunk/drivers/hwmon/pc87360.c | 232 +- trunk/drivers/hwmon/pc87427.c | 2 +- trunk/drivers/hwmon/sis5595.c | 510 +-- trunk/drivers/hwmon/smsc47b397.c | 7 +- trunk/drivers/hwmon/smsc47m1.c | 12 +- trunk/drivers/hwmon/smsc47m192.c | 37 +- trunk/drivers/hwmon/via686a.c | 538 ++- trunk/drivers/hwmon/vt8231.c | 318 +- trunk/drivers/hwmon/w83627ehf.c | 615 +-- trunk/drivers/hwmon/w83627hf.c | 153 +- trunk/drivers/i2c/busses/Kconfig | 3 - trunk/drivers/i2c/busses/Makefile | 1 - trunk/drivers/i2c/busses/i2c-isa.c | 192 - trunk/drivers/i2c/i2c-core.c | 2 - trunk/drivers/ide/cris/ide-cris.c | 9 +- trunk/drivers/ide/ide-floppy.c | 18 +- trunk/drivers/ide/ide-io.c | 22 +- trunk/drivers/ide/ide-lib.c | 72 +- trunk/drivers/ide/ide-timing.h | 20 +- trunk/drivers/ide/ide.c | 86 +- trunk/drivers/ide/legacy/ali14xx.c | 7 +- trunk/drivers/ide/legacy/dtc2278.c | 3 +- trunk/drivers/ide/legacy/falconide.c | 2 + trunk/drivers/ide/legacy/ht6560b.c | 12 +- trunk/drivers/ide/legacy/ide-cs.c | 1 + trunk/drivers/ide/legacy/qd65xx.c | 21 +- trunk/drivers/ide/legacy/umc8672.c | 4 +- trunk/drivers/ide/mips/au1xxx-ide.c | 4 +- trunk/drivers/ide/mips/swarm.c | 3 +- trunk/drivers/ide/pci/aec62xx.c | 18 +- trunk/drivers/ide/pci/alim15x3.c | 5 +- trunk/drivers/ide/pci/amd74xx.c | 24 +- trunk/drivers/ide/pci/atiixp.c | 37 +- trunk/drivers/ide/pci/cmd640.c | 19 +- trunk/drivers/ide/pci/cmd64x.c | 21 +- trunk/drivers/ide/pci/cs5520.c | 6 +- trunk/drivers/ide/pci/cs5530.c | 4 +- trunk/drivers/ide/pci/cs5535.c | 9 +- trunk/drivers/ide/pci/cy82c693.c | 5 +- trunk/drivers/ide/pci/generic.c | 15 - trunk/drivers/ide/pci/hpt34x.c | 17 +- trunk/drivers/ide/pci/hpt366.c | 36 +- trunk/drivers/ide/pci/it8213.c | 7 +- trunk/drivers/ide/pci/it821x.c | 8 +- trunk/drivers/ide/pci/jmicron.c | 4 +- trunk/drivers/ide/pci/ns87415.c | 1 - trunk/drivers/ide/pci/opti621.c | 8 +- trunk/drivers/ide/pci/pdc202xx_new.c | 23 +- trunk/drivers/ide/pci/pdc202xx_old.c | 20 +- trunk/drivers/ide/pci/piix.c | 8 +- trunk/drivers/ide/pci/rz1000.c | 1 - trunk/drivers/ide/pci/sc1200.c | 43 +- trunk/drivers/ide/pci/scc_pata.c | 76 +- trunk/drivers/ide/pci/serverworks.c | 105 +- trunk/drivers/ide/pci/sgiioc4.c | 3 +- trunk/drivers/ide/pci/siimage.c | 139 +- trunk/drivers/ide/pci/sis5513.c | 4 +- trunk/drivers/ide/pci/sl82c105.c | 22 +- trunk/drivers/ide/pci/slc90e66.c | 4 +- trunk/drivers/ide/pci/tc86c001.c | 7 +- trunk/drivers/ide/pci/triflex.c | 4 +- trunk/drivers/ide/pci/trm290.c | 1 - trunk/drivers/ide/pci/via82cxxx.c | 26 +- trunk/drivers/ide/ppc/mpc8xx.c | 5 +- trunk/drivers/ide/ppc/pmac.c | 16 +- trunk/drivers/ide/setup-pci.c | 18 +- trunk/drivers/ieee1394/eth1394.c | 2 +- trunk/drivers/infiniband/core/addr.c | 3 +- trunk/drivers/infiniband/core/cm.c | 2 +- trunk/drivers/infiniband/core/cma.c | 2 +- trunk/drivers/infiniband/core/mad.c | 1 - trunk/drivers/infiniband/hw/amso1100/c2_vq.c | 2 +- trunk/drivers/infiniband/hw/cxgb3/iwch_cm.c | 4 +- trunk/drivers/infiniband/hw/ehca/ehca_av.c | 4 +- .../drivers/infiniband/hw/ehca/ehca_classes.h | 54 +- .../infiniband/hw/ehca/ehca_classes_pSeries.h | 156 +- trunk/drivers/infiniband/hw/ehca/ehca_cq.c | 4 +- trunk/drivers/infiniband/hw/ehca/ehca_eq.c | 3 +- trunk/drivers/infiniband/hw/ehca/ehca_hca.c | 28 +- trunk/drivers/infiniband/hw/ehca/ehca_irq.c | 56 +- .../drivers/infiniband/hw/ehca/ehca_iverbs.h | 7 +- trunk/drivers/infiniband/hw/ehca/ehca_main.c | 52 +- trunk/drivers/infiniband/hw/ehca/ehca_mrmw.c | 1091 ++--- trunk/drivers/infiniband/hw/ehca/ehca_mrmw.h | 21 +- trunk/drivers/infiniband/hw/ehca/ehca_pd.c | 2 +- trunk/drivers/infiniband/hw/ehca/ehca_qes.h | 22 +- trunk/drivers/infiniband/hw/ehca/ehca_qp.c | 41 +- trunk/drivers/infiniband/hw/ehca/ehca_reqs.c | 15 +- trunk/drivers/infiniband/hw/ehca/ehca_tools.h | 31 +- .../drivers/infiniband/hw/ehca/ehca_uverbs.c | 10 +- trunk/drivers/infiniband/hw/ehca/hcp_if.c | 8 +- trunk/drivers/infiniband/hw/ehca/hcp_phyp.c | 2 +- .../infiniband/hw/ehca/hipz_fns_core.h | 4 +- trunk/drivers/infiniband/hw/ehca/hipz_hw.h | 24 +- trunk/drivers/infiniband/hw/ehca/ipz_pt_fn.c | 2 +- trunk/drivers/infiniband/hw/ehca/ipz_pt_fn.h | 4 +- .../infiniband/hw/ipath/ipath_driver.c | 2 +- .../infiniband/hw/ipath/ipath_eeprom.c | 4 +- .../drivers/infiniband/hw/ipath/ipath_intr.c | 2 +- .../infiniband/hw/ipath/ipath_kernel.h | 2 - trunk/drivers/infiniband/hw/ipath/ipath_ruc.c | 2 +- .../infiniband/hw/ipath/ipath_user_pages.c | 26 - .../drivers/infiniband/hw/ipath/ipath_verbs.c | 2 +- .../drivers/infiniband/hw/ipath/ipath_verbs.h | 4 - trunk/drivers/infiniband/hw/mlx4/qp.c | 115 +- .../drivers/infiniband/hw/mthca/mthca_main.c | 22 +- trunk/drivers/infiniband/hw/mthca/mthca_qp.c | 221 +- trunk/drivers/infiniband/hw/mthca/mthca_srq.c | 28 +- trunk/drivers/infiniband/hw/mthca/mthca_wqe.h | 15 + .../drivers/infiniband/ulp/iser/iscsi_iser.c | 2 +- .../drivers/infiniband/ulp/iser/iscsi_iser.h | 5 - .../drivers/infiniband/ulp/iser/iser_memory.c | 4 +- .../drivers/infiniband/ulp/iser/iser_verbs.c | 47 +- trunk/drivers/input/input.c | 29 +- trunk/drivers/input/joystick/Kconfig | 7 + trunk/drivers/input/joystick/xpad.c | 190 +- trunk/drivers/input/misc/pcspkr.c | 11 +- trunk/drivers/input/mouse/appletouch.c | 111 +- trunk/drivers/input/mouse/lifebook.c | 2 +- trunk/drivers/input/serio/ambakmi.c | 6 +- trunk/drivers/input/serio/i8042-x86ia64io.h | 36 +- trunk/drivers/input/serio/pcips2.c | 6 +- trunk/drivers/input/serio/sa1111ps2.c | 6 +- trunk/drivers/input/touchscreen/Kconfig | 13 + trunk/drivers/input/touchscreen/Makefile | 1 + trunk/drivers/input/touchscreen/ads7846.c | 80 +- trunk/drivers/input/touchscreen/fujitsu_ts.c | 189 + trunk/drivers/isdn/Kconfig | 12 +- trunk/drivers/isdn/act2000/Kconfig | 2 +- trunk/drivers/isdn/gigaset/Kconfig | 10 +- trunk/drivers/isdn/hisax/Kconfig | 1 - trunk/drivers/isdn/hisax/config.c | 4 +- trunk/drivers/isdn/i4l/Kconfig | 3 - trunk/drivers/isdn/icn/Kconfig | 2 +- trunk/drivers/isdn/pcbit/Kconfig | 2 +- trunk/drivers/isdn/sc/Kconfig | 2 +- trunk/drivers/isdn/sc/card.h | 2 +- trunk/drivers/isdn/sc/command.c | 2 +- trunk/drivers/isdn/sc/timer.c | 2 +- trunk/drivers/kvm/Kconfig | 2 +- trunk/drivers/kvm/kvm.h | 10 +- trunk/drivers/kvm/kvm_main.c | 76 +- trunk/drivers/kvm/mmu.c | 146 +- trunk/drivers/kvm/paging_tmpl.h | 2 + trunk/drivers/kvm/x86_emulate.c | 26 +- trunk/drivers/leds/Kconfig | 22 +- trunk/drivers/leds/Makefile | 1 + trunk/drivers/leds/led-class.c | 49 +- trunk/drivers/leds/led-triggers.c | 27 +- trunk/drivers/leds/leds-gpio.c | 199 + trunk/drivers/leds/leds-locomo.c | 2 +- trunk/drivers/leds/leds.h | 8 +- trunk/drivers/leds/ledtrig-timer.c | 49 +- trunk/drivers/lguest/Kconfig | 20 + trunk/drivers/lguest/Makefile | 7 + trunk/drivers/lguest/core.c | 462 +++ trunk/drivers/lguest/hypercalls.c | 192 + trunk/drivers/lguest/interrupts_and_traps.c | 268 ++ trunk/drivers/lguest/io.c | 399 ++ trunk/drivers/lguest/lg.h | 261 ++ trunk/drivers/lguest/lguest.c | 630 +++ trunk/drivers/lguest/lguest_asm.S | 54 + trunk/drivers/lguest/lguest_bus.c | 148 + trunk/drivers/lguest/lguest_user.c | 236 ++ trunk/drivers/lguest/page_tables.c | 411 ++ trunk/drivers/lguest/segments.c | 125 + trunk/drivers/lguest/switcher.S | 159 + trunk/drivers/macintosh/macio_asic.c | 3 +- trunk/drivers/macintosh/rack-meter.c | 1 - trunk/drivers/macintosh/smu.c | 3 +- trunk/drivers/macintosh/therm_pm72.c | 6 +- trunk/drivers/macintosh/therm_windtunnel.c | 3 +- trunk/drivers/macintosh/windfarm_core.c | 3 +- .../drivers/macintosh/windfarm_lm75_sensor.c | 3 +- trunk/drivers/md/dm-crypt.c | 2 + trunk/drivers/md/dm-raid1.c | 3 +- trunk/drivers/md/raid5.c | 8 +- trunk/drivers/media/Kconfig | 4 + trunk/drivers/media/common/ir-functions.c | 27 +- trunk/drivers/media/common/saa7146_core.c | 8 +- trunk/drivers/media/common/saa7146_video.c | 8 +- trunk/drivers/media/dvb/b2c2/Kconfig | 2 +- trunk/drivers/media/dvb/b2c2/Makefile | 2 +- .../drivers/media/dvb/b2c2/flexcop-fe-tuner.c | 4 +- trunk/drivers/media/dvb/bt8xx/Kconfig | 2 +- trunk/drivers/media/dvb/bt8xx/Makefile | 2 +- trunk/drivers/media/dvb/bt8xx/dst.c | 2 +- trunk/drivers/media/dvb/bt8xx/dvb-bt8xx.c | 5 +- trunk/drivers/media/dvb/cinergyT2/Makefile | 2 +- trunk/drivers/media/dvb/cinergyT2/cinergyT2.c | 22 +- trunk/drivers/media/dvb/dvb-core/dmxdev.c | 2 +- .../media/dvb/dvb-core/dvb_ca_en50221.c | 12 +- trunk/drivers/media/dvb/dvb-core/dvb_demux.c | 2 +- .../drivers/media/dvb/dvb-core/dvb_frontend.h | 2 +- trunk/drivers/media/dvb/dvb-core/dvb_net.c | 5 +- trunk/drivers/media/dvb/dvb-core/dvbdev.c | 10 +- trunk/drivers/media/dvb/dvb-usb/Kconfig | 29 +- trunk/drivers/media/dvb/dvb-usb/Makefile | 8 +- trunk/drivers/media/dvb/dvb-usb/af9005-fe.c | 1503 +++++++ .../drivers/media/dvb/dvb-usb/af9005-remote.c | 157 + .../drivers/media/dvb/dvb-usb/af9005-script.h | 203 + trunk/drivers/media/dvb/dvb-usb/af9005.c | 1141 ++++++ trunk/drivers/media/dvb/dvb-usb/af9005.h | 3496 +++++++++++++++++ trunk/drivers/media/dvb/dvb-usb/cxusb.c | 18 +- .../drivers/media/dvb/dvb-usb/dibusb-common.c | 2 +- trunk/drivers/media/dvb/dvb-usb/dibusb-mb.c | 53 +- trunk/drivers/media/dvb/dvb-usb/dibusb.h | 1 + trunk/drivers/media/dvb/dvb-usb/digitv.c | 21 +- trunk/drivers/media/dvb/dvb-usb/digitv.h | 4 + trunk/drivers/media/dvb/dvb-usb/dvb-usb-i2c.c | 79 - trunk/drivers/media/dvb/dvb-usb/dvb-usb-ids.h | 6 + .../media/dvb/dvb-usb/dvb-usb-remote.c | 2 +- trunk/drivers/media/dvb/dvb-usb/dvb-usb.h | 11 - trunk/drivers/media/dvb/dvb-usb/gl861.c | 7 +- trunk/drivers/media/dvb/dvb-usb/m920x.c | 127 +- trunk/drivers/media/dvb/dvb-usb/m920x.h | 5 +- trunk/drivers/media/dvb/dvb-usb/opera1.c | 25 +- trunk/drivers/media/dvb/dvb-usb/umt-010.c | 8 +- trunk/drivers/media/dvb/frontends/Makefile | 2 +- trunk/drivers/media/dvb/frontends/cx22702.c | 1 - trunk/drivers/media/dvb/frontends/cx24123.c | 2 +- trunk/drivers/media/dvb/frontends/dvb-pll.c | 256 +- trunk/drivers/media/dvb/frontends/dvb-pll.h | 73 +- trunk/drivers/media/dvb/frontends/nxt200x.c | 23 +- trunk/drivers/media/dvb/frontends/nxt200x.h | 3 - trunk/drivers/media/dvb/frontends/or51132.c | 1 - trunk/drivers/media/dvb/frontends/or51211.c | 31 +- trunk/drivers/media/dvb/frontends/stv0299.c | 2 +- trunk/drivers/media/dvb/frontends/tda10023.c | 2 +- trunk/drivers/media/dvb/pluto2/Makefile | 2 +- trunk/drivers/media/dvb/ttpci/Kconfig | 2 +- trunk/drivers/media/dvb/ttpci/Makefile | 2 +- trunk/drivers/media/dvb/ttpci/av7110.c | 15 +- trunk/drivers/media/dvb/ttpci/av7110.h | 1 + trunk/drivers/media/dvb/ttpci/av7110_av.c | 20 +- trunk/drivers/media/dvb/ttpci/av7110_ca.c | 4 +- trunk/drivers/media/dvb/ttpci/av7110_hw.c | 8 +- trunk/drivers/media/dvb/ttpci/av7110_hw.h | 2 +- trunk/drivers/media/dvb/ttpci/av7110_ir.c | 2 +- trunk/drivers/media/dvb/ttpci/av7110_v4l.c | 2 +- trunk/drivers/media/dvb/ttpci/budget-av.c | 31 +- trunk/drivers/media/dvb/ttpci/budget-ci.c | 2 +- trunk/drivers/media/dvb/ttusb-budget/Makefile | 2 +- trunk/drivers/media/dvb/ttusb-dec/Makefile | 2 +- trunk/drivers/media/radio/Kconfig | 4 +- trunk/drivers/media/radio/radio-aimslab.c | 3 +- trunk/drivers/media/radio/radio-aztech.c | 1 - trunk/drivers/media/radio/radio-cadet.c | 4 +- trunk/drivers/media/radio/radio-gemtek-pci.c | 4 - trunk/drivers/media/radio/radio-gemtek.c | 1 - trunk/drivers/media/radio/radio-rtrack2.c | 1 - trunk/drivers/media/radio/radio-sf16fmi.c | 1 - trunk/drivers/media/radio/radio-sf16fmr2.c | 1 - trunk/drivers/media/radio/radio-terratec.c | 1 - trunk/drivers/media/radio/radio-trust.c | 1 - trunk/drivers/media/radio/radio-typhoon.c | 1 - trunk/drivers/media/video/Kconfig | 9 + trunk/drivers/media/video/Makefile | 6 +- trunk/drivers/media/video/adv7170.c | 8 +- trunk/drivers/media/video/adv7175.c | 8 +- trunk/drivers/media/video/bt819.c | 9 +- trunk/drivers/media/video/bt856.c | 8 +- trunk/drivers/media/video/bt866.c | 2 +- trunk/drivers/media/video/bt8xx/bttv-cards.c | 444 ++- trunk/drivers/media/video/bt8xx/bttv-driver.c | 34 +- trunk/drivers/media/video/bt8xx/bttv-input.c | 4 +- trunk/drivers/media/video/bt8xx/bttv.h | 2 + trunk/drivers/media/video/bt8xx/bttvp.h | 6 +- trunk/drivers/media/video/c-qcam.c | 4 +- trunk/drivers/media/video/cpia2/cpia2_core.c | 13 +- trunk/drivers/media/video/cpia2/cpia2_v4l.c | 8 +- trunk/drivers/media/video/cx88/Kconfig | 2 +- .../drivers/media/video/cx88/cx88-blackbird.c | 14 +- trunk/drivers/media/video/cx88/cx88-cards.c | 24 + trunk/drivers/media/video/cx88/cx88-dvb.c | 122 +- trunk/drivers/media/video/cx88/cx88-i2c.c | 25 +- trunk/drivers/media/video/cx88/cx88-input.c | 25 +- trunk/drivers/media/video/cx88/cx88-mpeg.c | 2 +- trunk/drivers/media/video/cx88/cx88-video.c | 8 +- .../media/video/cx88/cx88-vp3054-i2c.c | 12 +- .../media/video/cx88/cx88-vp3054-i2c.h | 7 + trunk/drivers/media/video/cx88/cx88.h | 8 +- trunk/drivers/media/video/et61x251/Kconfig | 2 +- trunk/drivers/media/video/et61x251/et61x251.h | 23 +- .../media/video/et61x251/et61x251_core.c | 189 +- .../media/video/et61x251/et61x251_sensor.h | 8 +- .../video/et61x251/et61x251_tas5130d1b.c | 2 +- trunk/drivers/media/video/ir-kbd-i2c.c | 53 +- trunk/drivers/media/video/ivtv/Kconfig | 5 +- trunk/drivers/media/video/ivtv/ivtv-driver.c | 54 +- trunk/drivers/media/video/ivtv/ivtv-driver.h | 21 +- trunk/drivers/media/video/ivtv/ivtv-fileops.c | 14 +- .../drivers/media/video/ivtv/ivtv-firmware.c | 29 +- trunk/drivers/media/video/ivtv/ivtv-gpio.c | 11 +- trunk/drivers/media/video/ivtv/ivtv-i2c.c | 20 +- trunk/drivers/media/video/ivtv/ivtv-ioctl.c | 4 +- trunk/drivers/media/video/ivtv/ivtv-irq.c | 47 +- trunk/drivers/media/video/ivtv/ivtv-mailbox.c | 33 +- trunk/drivers/media/video/ivtv/ivtv-streams.c | 45 +- trunk/drivers/media/video/ivtv/ivtv-vbi.c | 31 +- trunk/drivers/media/video/msp3400-driver.c | 9 +- trunk/drivers/media/video/mt20xx.c | 80 +- trunk/drivers/media/video/ov7670.c | 4 +- trunk/drivers/media/video/planb.c | 3 +- trunk/drivers/media/video/pwc/pwc-if.c | 12 +- trunk/drivers/media/video/pwc/pwc.h | 4 +- trunk/drivers/media/video/saa5249.c | 8 +- trunk/drivers/media/video/saa7110.c | 4 +- trunk/drivers/media/video/saa7111.c | 8 +- trunk/drivers/media/video/saa7114.c | 10 +- trunk/drivers/media/video/saa7134/Kconfig | 2 +- .../media/video/saa7134/saa7134-alsa.c | 16 +- .../media/video/saa7134/saa7134-cards.c | 41 +- .../drivers/media/video/saa7134/saa7134-dvb.c | 169 +- .../media/video/saa7134/saa7134-empress.c | 8 + .../media/video/saa7134/saa7134-input.c | 20 +- .../media/video/saa7134/saa7134-tvaudio.c | 42 +- trunk/drivers/media/video/saa7134/saa7134.h | 8 +- trunk/drivers/media/video/saa7185.c | 8 +- trunk/drivers/media/video/sn9c102/sn9c102.h | 9 +- .../media/video/sn9c102/sn9c102_core.c | 173 +- .../media/video/sn9c102/sn9c102_ov7630.c | 214 +- .../media/video/sn9c102/sn9c102_ov7660.c | 88 +- trunk/drivers/media/video/stradis.c | 2 +- trunk/drivers/media/video/stv680.c | 7 +- trunk/drivers/media/video/tda8290.c | 129 +- trunk/drivers/media/video/tda9887.c | 57 +- trunk/drivers/media/video/tea5761.c | 243 ++ trunk/drivers/media/video/tea5767.c | 16 +- trunk/drivers/media/video/tuner-core.c | 95 +- trunk/drivers/media/video/tuner-driver.h | 107 + trunk/drivers/media/video/tuner-simple.c | 27 +- trunk/drivers/media/video/tuner-types.c | 22 +- trunk/drivers/media/video/tvaudio.c | 4 +- trunk/drivers/media/video/tveeprom.c | 8 +- trunk/drivers/media/video/tvp5150.c | 2 +- trunk/drivers/media/video/usbvideo/konicawc.c | 2 +- .../media/video/usbvideo/quickcam_messenger.c | 4 +- trunk/drivers/media/video/usbvideo/vicam.c | 184 +- .../media/video/usbvision/usbvision-cards.c | 8 +- .../media/video/usbvision/usbvision-core.c | 43 +- .../media/video/usbvision/usbvision-video.c | 1561 ++++---- .../drivers/media/video/usbvision/usbvision.h | 13 +- trunk/drivers/media/video/v4l2-common.c | 19 +- trunk/drivers/media/video/vino.c | 6 +- trunk/drivers/media/video/vivi.c | 178 +- trunk/drivers/media/video/wm8739.c | 2 + trunk/drivers/media/video/wm8775.c | 2 + trunk/drivers/media/video/zc0301/Kconfig | 2 +- trunk/drivers/media/video/zc0301/zc0301.h | 21 +- .../drivers/media/video/zc0301/zc0301_core.c | 147 +- .../media/video/zc0301/zc0301_pas202bcb.c | 1 + .../media/video/zc0301/zc0301_pb0330.c | 1 + .../media/video/zc0301/zc0301_sensor.h | 2 +- trunk/drivers/media/video/zoran_driver.c | 63 - trunk/drivers/media/video/zr364xx.c | 18 +- trunk/drivers/message/i2o/i2o_block.c | 3 +- trunk/drivers/mfd/mcp-core.c | 3 +- trunk/drivers/mfd/ucb1x00-core.c | 3 +- trunk/drivers/misc/Kconfig | 14 + trunk/drivers/misc/asus-laptop.c | 3 +- trunk/drivers/misc/ibmasm/command.c | 6 +- trunk/drivers/misc/ibmasm/ibmasmfs.c | 3 +- trunk/drivers/misc/ibmasm/module.c | 3 +- trunk/drivers/misc/sony-laptop.c | 368 +- trunk/drivers/misc/thinkpad_acpi.c | 602 ++- trunk/drivers/misc/thinkpad_acpi.h | 42 +- trunk/drivers/mmc/card/block.c | 3 +- trunk/drivers/mmc/host/at91_mci.c | 13 +- trunk/drivers/mmc/host/sdhci.c | 2 + trunk/drivers/mmc/host/sdhci.h | 1 + trunk/drivers/mtd/ubi/build.c | 25 +- trunk/drivers/mtd/ubi/cdev.c | 49 +- trunk/drivers/mtd/ubi/debug.c | 44 +- trunk/drivers/mtd/ubi/debug.h | 2 - trunk/drivers/mtd/ubi/eba.c | 100 +- trunk/drivers/mtd/ubi/gluebi.c | 27 +- trunk/drivers/mtd/ubi/io.c | 65 +- trunk/drivers/mtd/ubi/kapi.c | 19 +- trunk/drivers/mtd/ubi/misc.c | 4 +- trunk/drivers/mtd/ubi/scan.c | 127 +- trunk/drivers/mtd/ubi/scan.h | 2 - trunk/drivers/mtd/ubi/ubi.h | 3 + trunk/drivers/mtd/ubi/upd.c | 4 +- trunk/drivers/mtd/ubi/vmt.c | 53 +- trunk/drivers/mtd/ubi/vtbl.c | 85 +- trunk/drivers/mtd/ubi/wl.c | 95 +- trunk/drivers/net/Kconfig | 57 + trunk/drivers/net/Makefile | 4 + trunk/drivers/net/arm/ether1.c | 3 +- trunk/drivers/net/arm/ether3.c | 5 +- trunk/drivers/net/arm/etherh.c | 1 - trunk/drivers/net/b44.c | 3 +- trunk/drivers/net/bfin_mac.c | 1009 +++++ trunk/drivers/net/bfin_mac.h | 132 + trunk/drivers/net/bnx2.c | 103 +- trunk/drivers/net/bnx2.h | 10 +- trunk/drivers/net/bsd_comp.c | 3 +- trunk/drivers/net/ehea/ehea.h | 2 +- trunk/drivers/net/ehea/ehea_main.c | 37 +- trunk/drivers/net/forcedeth.c | 6 +- trunk/drivers/net/gianfar.c | 12 +- trunk/drivers/net/hamradio/baycom_epp.c | 2 +- trunk/drivers/net/hamradio/dmascc.c | 6 +- trunk/drivers/net/irda/Kconfig | 11 +- trunk/drivers/net/irda/Makefile | 1 + trunk/drivers/net/irda/ep7211-sir.c | 89 + trunk/drivers/net/irda/irport.c | 3 +- trunk/drivers/net/irda/irtty-sir.c | 3 +- trunk/drivers/net/iseries_veth.c | 6 +- trunk/drivers/net/lance.c | 3 +- trunk/drivers/net/lguest_net.c | 354 ++ trunk/drivers/net/mac89x0.c | 2 +- trunk/drivers/net/mlx4/catas.c | 106 +- trunk/drivers/net/mlx4/eq.c | 56 +- trunk/drivers/net/mlx4/intf.c | 2 + trunk/drivers/net/mlx4/main.c | 26 +- trunk/drivers/net/mlx4/mlx4.h | 13 +- trunk/drivers/net/ni5010.c | 6 +- trunk/drivers/net/ns83820.c | 2 +- trunk/drivers/net/pcmcia/com20020_cs.c | 3 +- trunk/drivers/net/pcmcia/ibmtr_cs.c | 3 +- trunk/drivers/net/phy/vitesse.c | 46 +- trunk/drivers/net/ppp_async.c | 3 +- trunk/drivers/net/ppp_deflate.c | 6 +- trunk/drivers/net/ppp_generic.c | 3 +- trunk/drivers/net/ppp_mppe.c | 3 +- trunk/drivers/net/ppp_synctty.c | 3 +- trunk/drivers/net/pppol2tp.c | 18 +- trunk/drivers/net/saa9730.c | 9 +- trunk/drivers/net/shaper.c | 3 +- trunk/drivers/net/sky2.c | 7 +- trunk/drivers/net/sunvnet.c | 399 +- trunk/drivers/net/sunvnet.h | 15 +- trunk/drivers/net/tc35815.c | 2 +- trunk/drivers/net/tg3.c | 114 +- trunk/drivers/net/tg3.h | 1 + trunk/drivers/net/wan/c101.c | 3 +- trunk/drivers/net/wan/cosa.c | 4 +- trunk/drivers/net/wan/cycx_main.c | 4 +- trunk/drivers/net/wan/cycx_x25.c | 3 +- trunk/drivers/net/wan/dscc4.c | 6 +- trunk/drivers/net/wan/farsync.c | 3 +- trunk/drivers/net/wan/hostess_sv11.c | 3 +- trunk/drivers/net/wan/n2.c | 3 +- trunk/drivers/net/wan/pc300_drv.c | 3 +- trunk/drivers/net/wan/pc300too.c | 3 +- trunk/drivers/net/wan/pci200syn.c | 3 +- trunk/drivers/net/wan/sdla.c | 3 +- trunk/drivers/net/wan/sealevel.c | 3 +- trunk/drivers/net/wan/wanxl.c | 3 +- trunk/drivers/net/wan/x25_asy.c | 4 +- trunk/drivers/net/wireless/ipw2100.c | 6 +- trunk/drivers/net/wireless/ipw2200.c | 18 +- trunk/drivers/net/wireless/zd1211rw/zd_usb.c | 2 + trunk/drivers/net/xen-netfront.c | 1863 +++++++++ trunk/drivers/nubus/nubus.c | 6 +- trunk/drivers/of/Kconfig | 3 + trunk/drivers/of/Makefile | 2 + trunk/drivers/of/base.c | 275 ++ trunk/drivers/of/device.c | 131 + trunk/drivers/of/platform.c | 96 + trunk/drivers/oprofile/buffer_sync.c | 3 +- trunk/drivers/oprofile/event_buffer.h | 20 +- trunk/drivers/oprofile/oprof.c | 28 + trunk/drivers/parport/Kconfig | 2 +- trunk/drivers/parport/parport_cs.c | 3 +- trunk/drivers/parport/parport_serial.c | 3 +- trunk/drivers/pci/pcie/aer/aerdrv.c | 3 +- trunk/drivers/pcmcia/ds.c | 40 +- trunk/drivers/pcmcia/m8xx_pcmcia.c | 2 +- trunk/drivers/pnp/core.c | 3 +- trunk/drivers/pnp/pnpbios/core.c | 2 +- trunk/drivers/rapidio/rio-scan.c | 6 +- trunk/drivers/rtc/Kconfig | 15 +- trunk/drivers/rtc/Makefile | 1 + trunk/drivers/rtc/rtc-cmos.c | 33 +- trunk/drivers/rtc/rtc-ds1553.c | 2 +- trunk/drivers/rtc/rtc-ds1742.c | 2 +- trunk/drivers/rtc/rtc-max6900.c | 96 +- trunk/drivers/rtc/rtc-stk17ta8.c | 420 ++ trunk/drivers/s390/block/dasd_devmap.c | 2 +- trunk/drivers/s390/char/tape_34xx.c | 3 +- trunk/drivers/s390/net/claw.c | 9 +- trunk/drivers/s390/scsi/zfcp_aux.c | 6 +- trunk/drivers/sbus/char/bbc_envctrl.c | 5 +- trunk/drivers/sbus/char/bbc_i2c.c | 3 +- trunk/drivers/sbus/char/envctrl.c | 7 +- trunk/drivers/sbus/char/vfc_dev.c | 5 +- trunk/drivers/sbus/sbus.c | 5 + trunk/drivers/scsi/3w-9xxx.c | 3 +- trunk/drivers/scsi/Kconfig | 2 +- trunk/drivers/scsi/Makefile | 1 + trunk/drivers/scsi/NCR53C9x.c | 10 +- trunk/drivers/scsi/NCR_D700.c | 3 +- trunk/drivers/scsi/NCR_Q720.c | 3 +- trunk/drivers/scsi/aic94xx/aic94xx_init.c | 4 +- trunk/drivers/scsi/arm/cumana_1.c | 207 +- trunk/drivers/scsi/arm/ecoscsi.c | 152 +- trunk/drivers/scsi/arm/oak.c | 74 +- trunk/drivers/scsi/imm.c | 3 +- trunk/drivers/scsi/ips.c | 3 +- trunk/drivers/scsi/lasi700.c | 3 +- trunk/drivers/scsi/libsas/sas_init.c | 2 +- trunk/drivers/scsi/lpfc/lpfc_init.c | 3 +- trunk/drivers/scsi/megaraid/megaraid_mbox.c | 14 +- trunk/drivers/scsi/megaraid/megaraid_mm.c | 3 +- trunk/drivers/scsi/megaraid/megaraid_sas.c | 4 +- trunk/drivers/scsi/pcmcia/aha152x_stub.c | 3 +- trunk/drivers/scsi/pcmcia/nsp_cs.c | 3 +- trunk/drivers/scsi/pcmcia/qlogic_stub.c | 3 +- trunk/drivers/scsi/pcmcia/sym53c500_cs.c | 3 +- trunk/drivers/scsi/ppa.c | 3 +- trunk/drivers/scsi/ps3rom.c | 533 +++ trunk/drivers/scsi/qla2xxx/qla_os.c | 2 +- trunk/drivers/scsi/qla4xxx/ql4_os.c | 2 +- trunk/drivers/scsi/scsi.c | 2 +- trunk/drivers/scsi/scsi_lib.c | 4 +- trunk/drivers/scsi/scsi_tgt_lib.c | 2 +- trunk/drivers/scsi/sim710.c | 3 +- trunk/drivers/scsi/tmscsim.c | 3 +- trunk/drivers/serial/amba-pl011.c | 3 +- trunk/drivers/serial/imx.c | 2 +- trunk/drivers/serial/s3c2410.c | 2 +- trunk/drivers/serial/suncore.c | 123 +- trunk/drivers/serial/suncore.h | 2 + trunk/drivers/serial/sunhv.c | 13 +- trunk/drivers/serial/sunsab.c | 22 +- trunk/drivers/serial/sunsu.c | 23 +- trunk/drivers/serial/sunzilog.c | 24 +- trunk/drivers/sh/superhyway/superhyway.c | 3 +- trunk/drivers/sn/ioc3.c | 3 +- trunk/drivers/spi/spi.c | 3 +- trunk/drivers/telephony/ixj_pcmcia.c | 3 +- trunk/drivers/uio/Kconfig | 29 + trunk/drivers/uio/Makefile | 2 + trunk/drivers/uio/uio.c | 701 ++++ trunk/drivers/uio/uio_cif.c | 156 + trunk/drivers/usb/atm/cxacru.c | 3 +- trunk/drivers/usb/atm/speedtch.c | 7 +- trunk/drivers/usb/atm/ueagle-atm.c | 6 +- trunk/drivers/usb/atm/usbatm.c | 11 +- trunk/drivers/usb/class/cdc-acm.c | 18 +- trunk/drivers/usb/class/usblp.c | 27 +- trunk/drivers/usb/core/driver.c | 7 - trunk/drivers/usb/core/hcd.c | 131 +- trunk/drivers/usb/core/hub.c | 10 +- trunk/drivers/usb/core/message.c | 34 +- trunk/drivers/usb/core/sysfs.c | 53 + trunk/drivers/usb/core/urb.c | 88 +- trunk/drivers/usb/gadget/Kconfig | 57 +- trunk/drivers/usb/gadget/Makefile | 1 + trunk/drivers/usb/gadget/amd5536udc.c | 3454 ++++++++++++++++ trunk/drivers/usb/gadget/amd5536udc.h | 626 +++ trunk/drivers/usb/gadget/ether.c | 4 + trunk/drivers/usb/gadget/gadget_chips.h | 10 +- trunk/drivers/usb/gadget/goku_udc.c | 3 +- trunk/drivers/usb/gadget/m66592-udc.c | 255 +- trunk/drivers/usb/gadget/m66592-udc.h | 610 ++- trunk/drivers/usb/gadget/serial.c | 28 +- trunk/drivers/usb/host/isp116x-hcd.c | 187 +- trunk/drivers/usb/host/ohci-hcd.c | 3 +- trunk/drivers/usb/host/r8a66597-hcd.c | 110 +- trunk/drivers/usb/host/r8a66597.h | 87 +- trunk/drivers/usb/host/sl811_cs.c | 3 +- trunk/drivers/usb/host/u132-hcd.c | 17 +- trunk/drivers/usb/host/uhci-hcd.c | 2 +- trunk/drivers/usb/host/uhci-q.c | 59 +- trunk/drivers/usb/image/mdc800.c | 45 +- trunk/drivers/usb/image/microtek.c | 19 +- trunk/drivers/usb/misc/adutux.c | 59 +- trunk/drivers/usb/misc/appledisplay.c | 13 +- trunk/drivers/usb/misc/auerswald.c | 25 +- trunk/drivers/usb/misc/ftdi-elan.c | 21 +- trunk/drivers/usb/misc/iowarrior.c | 21 +- trunk/drivers/usb/misc/ldusb.c | 20 +- trunk/drivers/usb/misc/legousbtower.c | 28 +- trunk/drivers/usb/misc/phidgetkit.c | 13 +- trunk/drivers/usb/misc/phidgetmotorcontrol.c | 13 +- trunk/drivers/usb/misc/usblcd.c | 11 +- trunk/drivers/usb/misc/usbtest.c | 4 +- trunk/drivers/usb/misc/uss720.c | 5 +- trunk/drivers/usb/mon/mon_text.c | 2 +- trunk/drivers/usb/serial/io_ti.c | 10 +- trunk/drivers/usb/serial/mos7720.c | 5 - trunk/drivers/usb/serial/mos7840.c | 19 - trunk/drivers/usb/serial/sierra.c | 119 +- trunk/drivers/usb/storage/dpcm.c | 56 +- trunk/drivers/usb/storage/onetouch.c | 13 +- trunk/drivers/usb/storage/unusual_devs.h | 18 + trunk/drivers/video/Kconfig | 20 +- trunk/drivers/video/Makefile | 3 + trunk/drivers/video/amba-clcd.c | 3 +- trunk/drivers/video/atmel_lcdfb.c | 67 +- trunk/drivers/video/aty/aty128fb.c | 2 +- trunk/drivers/video/aty/atyfb_base.c | 9 +- trunk/drivers/video/aty/radeon_backlight.c | 4 +- trunk/drivers/video/au1200fb.c | 3 +- trunk/drivers/video/backlight/Kconfig | 26 +- trunk/drivers/video/backlight/backlight.c | 125 +- trunk/drivers/video/backlight/cr_bllcd.c | 4 +- trunk/drivers/video/backlight/lcd.c | 112 +- trunk/drivers/video/clps711xfb.c | 3 +- trunk/drivers/video/console/vgacon.c | 6 +- trunk/drivers/video/cyber2000fb.c | 3 +- trunk/drivers/video/igafb.c | 4 - trunk/drivers/video/logo/logo.c | 7 +- trunk/drivers/video/nvidia/nv_backlight.c | 2 +- trunk/drivers/video/ps3fb.c | 2 +- trunk/drivers/video/pvr2fb.c | 3 +- trunk/drivers/video/riva/fbdev.c | 4 +- trunk/drivers/video/savage/savagefb_driver.c | 3 +- trunk/drivers/video/valkyriefb.c | 3 +- trunk/drivers/w1/masters/matrox_w1.c | 3 +- trunk/drivers/w1/slaves/w1_ds2433.c | 3 +- trunk/drivers/w1/w1.c | 3 +- trunk/drivers/w1/w1_int.c | 3 +- trunk/drivers/xen/Makefile | 2 + trunk/drivers/xen/grant-table.c | 582 +++ trunk/drivers/xen/xenbus/Makefile | 7 + trunk/drivers/xen/xenbus/xenbus_client.c | 569 +++ trunk/drivers/xen/xenbus/xenbus_comms.c | 233 ++ trunk/drivers/xen/xenbus/xenbus_comms.h | 46 + trunk/drivers/xen/xenbus/xenbus_probe.c | 935 +++++ trunk/drivers/xen/xenbus/xenbus_probe.h | 74 + trunk/drivers/xen/xenbus/xenbus_xs.c | 861 ++++ trunk/fs/Kconfig | 12 +- trunk/fs/adfs/super.c | 4 +- trunk/fs/affs/super.c | 2 +- trunk/fs/afs/flock.c | 3 +- trunk/fs/afs/rxrpc.c | 21 +- trunk/fs/afs/super.c | 3 +- trunk/fs/befs/linuxvfs.c | 4 +- trunk/fs/bfs/inode.c | 4 +- trunk/fs/binfmt_elf.c | 167 +- trunk/fs/binfmt_elf_fdpic.c | 64 +- trunk/fs/binfmt_misc.c | 4 +- trunk/fs/binfmt_script.c | 4 +- trunk/fs/bio.c | 2 +- trunk/fs/block_dev.c | 2 +- trunk/fs/buffer.c | 47 + trunk/fs/char_dev.c | 3 +- trunk/fs/cifs/CHANGES | 13 +- trunk/fs/cifs/README | 38 +- trunk/fs/cifs/TODO | 12 +- trunk/fs/cifs/asn1.c | 57 +- trunk/fs/cifs/cifs_debug.c | 103 +- trunk/fs/cifs/cifs_fs_sb.h | 2 +- trunk/fs/cifs/cifs_unicode.c | 2 +- trunk/fs/cifs/cifs_unicode.h | 39 +- trunk/fs/cifs/cifs_uniupr.h | 8 +- trunk/fs/cifs/cifsencrypt.c | 262 +- trunk/fs/cifs/cifsfs.c | 209 +- trunk/fs/cifs/cifsfs.h | 23 +- trunk/fs/cifs/cifsglob.h | 78 +- trunk/fs/cifs/cifspdu.h | 297 +- trunk/fs/cifs/cifsproto.h | 123 +- trunk/fs/cifs/cifssmb.c | 1621 ++++---- trunk/fs/cifs/connect.c | 1262 +++--- trunk/fs/cifs/dir.c | 22 +- trunk/fs/cifs/export.c | 49 +- trunk/fs/cifs/fcntl.c | 2 +- trunk/fs/cifs/file.c | 287 +- trunk/fs/cifs/inode.c | 320 +- trunk/fs/cifs/ioctl.c | 4 +- trunk/fs/cifs/link.c | 116 +- trunk/fs/cifs/md4.c | 10 +- trunk/fs/cifs/md5.c | 8 +- trunk/fs/cifs/misc.c | 239 +- trunk/fs/cifs/netmisc.c | 171 +- trunk/fs/cifs/nterr.c | 8 +- trunk/fs/cifs/nterr.h | 8 +- trunk/fs/cifs/ntlmssp.h | 22 +- trunk/fs/cifs/readdir.c | 375 +- trunk/fs/cifs/sess.c | 249 +- trunk/fs/cifs/smbdes.c | 30 +- trunk/fs/cifs/smbencrypt.c | 52 +- trunk/fs/cifs/smberr.h | 8 +- trunk/fs/cifs/transport.c | 248 +- trunk/fs/cifs/xattr.c | 229 +- trunk/fs/coda/cache.c | 7 +- trunk/fs/coda/cnode.c | 7 +- trunk/fs/coda/coda_int.h | 7 + trunk/fs/coda/dir.c | 305 +- trunk/fs/coda/file.c | 80 +- trunk/fs/coda/inode.c | 50 +- trunk/fs/coda/psdev.c | 88 +- trunk/fs/coda/symlink.c | 2 - trunk/fs/coda/sysctl.c | 228 +- trunk/fs/coda/upcall.c | 499 ++- trunk/fs/compat.c | 128 +- trunk/fs/configfs/mount.c | 2 +- trunk/fs/dcache.c | 4 +- trunk/fs/dcookies.c | 2 +- trunk/fs/debugfs/inode.c | 5 - trunk/fs/dlm/lowcomms.c | 2 +- trunk/fs/dlm/memory.c | 14 +- trunk/fs/dnotify.c | 2 +- trunk/fs/dquot.c | 4 +- trunk/fs/ecryptfs/inode.c | 5 +- trunk/fs/ecryptfs/main.c | 2 +- trunk/fs/ecryptfs/mmap.c | 5 +- trunk/fs/efs/super.c | 4 +- trunk/fs/eventpoll.c | 4 +- trunk/fs/exec.c | 679 ++-- trunk/fs/ext2/super.c | 8 +- trunk/fs/ext3/dir.c | 14 +- trunk/fs/ext3/super.c | 2 +- trunk/fs/ext4/balloc.c | 4 +- trunk/fs/ext4/dir.c | 14 +- trunk/fs/ext4/extents.c | 682 +++- trunk/fs/ext4/file.c | 1 + trunk/fs/ext4/ialloc.c | 8 +- trunk/fs/ext4/inode.c | 120 +- trunk/fs/ext4/ioctl.c | 9 +- trunk/fs/ext4/namei.c | 76 +- trunk/fs/ext4/super.c | 52 +- trunk/fs/ext4/xattr.c | 276 +- trunk/fs/ext4/xattr.h | 17 + trunk/fs/fat/cache.c | 2 +- trunk/fs/fat/inode.c | 2 +- trunk/fs/fcntl.c | 2 +- trunk/fs/freevxfs/vxfs_super.c | 4 +- trunk/fs/fuse/dev.c | 2 +- trunk/fs/fuse/inode.c | 2 +- trunk/fs/gfs2/main.c | 6 +- trunk/fs/gfs2/ops_address.c | 2 +- trunk/fs/gfs2/ops_file.c | 24 + trunk/fs/gfs2/ops_vm.c | 64 +- trunk/fs/hfs/super.c | 2 +- trunk/fs/hfsplus/super.c | 2 +- trunk/fs/hpfs/super.c | 4 +- trunk/fs/hugetlbfs/inode.c | 2 +- trunk/fs/inode.c | 3 +- trunk/fs/inotify_user.c | 4 +- trunk/fs/isofs/inode.c | 2 +- trunk/fs/jbd/journal.c | 8 +- trunk/fs/jbd/revoke.c | 4 +- trunk/fs/jbd2/journal.c | 87 +- trunk/fs/jbd2/recovery.c | 8 +- trunk/fs/jbd2/revoke.c | 4 +- trunk/fs/jffs2/malloc.c | 18 +- trunk/fs/jffs2/super.c | 2 +- trunk/fs/jfs/jfs_metapage.c | 2 +- trunk/fs/jfs/super.c | 2 +- trunk/fs/locks.c | 114 +- trunk/fs/mbcache.c | 2 +- trunk/fs/minix/inode.c | 4 +- trunk/fs/namei.c | 39 +- trunk/fs/namespace.c | 2 +- trunk/fs/ncpfs/inode.c | 4 +- trunk/fs/ncpfs/mmap.c | 40 +- trunk/fs/nfs/callback_xdr.c | 10 +- trunk/fs/nfs/dir.c | 8 +- trunk/fs/nfs/direct.c | 2 +- trunk/fs/nfs/file.c | 16 +- trunk/fs/nfs/inode.c | 4 +- trunk/fs/nfs/nfs2xdr.c | 19 +- trunk/fs/nfs/nfs3proc.c | 60 +- trunk/fs/nfs/nfs3xdr.c | 24 +- trunk/fs/nfs/nfs4_fs.h | 2 +- trunk/fs/nfs/nfs4proc.c | 122 +- trunk/fs/nfs/nfs4xdr.c | 274 +- trunk/fs/nfs/pagelist.c | 2 +- trunk/fs/nfs/proc.c | 40 +- trunk/fs/nfs/read.c | 2 +- trunk/fs/nfs/super.c | 9 +- trunk/fs/nfs/unlink.c | 195 +- trunk/fs/nfs/write.c | 2 +- trunk/fs/nfsctl.c | 16 +- trunk/fs/nfsd/auth.c | 3 +- trunk/fs/nfsd/export.c | 12 +- trunk/fs/nfsd/nfs4state.c | 18 +- trunk/fs/nfsd/vfs.c | 13 +- trunk/fs/ntfs/super.c | 10 +- trunk/fs/ocfs2/aops.c | 2 +- trunk/fs/ocfs2/dlm/dlmfs.c | 2 +- trunk/fs/ocfs2/dlm/dlmmaster.c | 2 +- trunk/fs/ocfs2/file.c | 77 +- trunk/fs/ocfs2/heartbeat.c | 2 +- trunk/fs/ocfs2/mmap.c | 34 +- trunk/fs/ocfs2/super.c | 2 +- trunk/fs/ocfs2/uptodate.c | 2 +- trunk/fs/open.c | 59 + trunk/fs/openpromfs/inode.c | 2 +- trunk/fs/partitions/check.c | 3 +- trunk/fs/proc/base.c | 91 +- trunk/fs/proc/inode.c | 4 +- trunk/fs/proc/proc_misc.c | 18 +- trunk/fs/qnx4/inode.c | 2 +- trunk/fs/reiserfs/super.c | 2 +- trunk/fs/romfs/inode.c | 4 +- trunk/fs/smbfs/inode.c | 4 +- trunk/fs/smbfs/request.c | 2 +- trunk/fs/splice.c | 38 +- trunk/fs/sysfs/dir.c | 25 +- trunk/fs/sysfs/file.c | 9 +- trunk/fs/sysfs/inode.c | 2 +- trunk/fs/sysfs/mount.c | 12 +- trunk/fs/sysfs/symlink.c | 12 +- trunk/fs/sysfs/sysfs.h | 1 - trunk/fs/sysv/inode.c | 2 +- trunk/fs/udf/balloc.c | 543 ++- trunk/fs/udf/crc.c | 15 +- trunk/fs/udf/dir.c | 108 +- trunk/fs/udf/directory.c | 173 +- trunk/fs/udf/ecma_167.h | 191 +- trunk/fs/udf/file.c | 102 +- trunk/fs/udf/fsync.c | 6 +- trunk/fs/udf/ialloc.c | 37 +- trunk/fs/udf/inode.c | 1206 +++--- trunk/fs/udf/lowlevel.c | 21 +- trunk/fs/udf/misc.c | 113 +- trunk/fs/udf/namei.c | 564 ++- trunk/fs/udf/osta_udf.h | 75 +- trunk/fs/udf/partition.c | 119 +- trunk/fs/udf/super.c | 1256 +++--- trunk/fs/udf/symlink.c | 54 +- trunk/fs/udf/truncate.c | 166 +- trunk/fs/udf/udf_sb.h | 20 +- trunk/fs/udf/udfdecl.h | 102 +- trunk/fs/udf/udfend.h | 18 + trunk/fs/udf/udftime.c | 87 +- trunk/fs/udf/unicode.c | 258 +- trunk/fs/ufs/super.c | 4 +- trunk/fs/xfs/linux-2.6/kmem.h | 4 +- trunk/fs/xfs/linux-2.6/xfs_file.c | 40 +- trunk/fs/xfs/xfs_vnodeops.c | 30 +- trunk/include/acpi/acmacros.h | 63 +- trunk/include/acpi/acoutput.h | 4 +- trunk/include/acpi/acpi_bus.h | 3 +- trunk/include/acpi/acpi_numa.h | 1 + trunk/include/acpi/platform/acenv.h | 2 +- trunk/include/acpi/platform/aclinux.h | 3 + trunk/include/acpi/processor.h | 47 +- trunk/include/asm-alpha/a.out.h | 2 + trunk/include/asm-alpha/system.h | 10 - trunk/include/asm-arm/a.out.h | 1 + trunk/include/asm-arm/arch-at91/at91_mci.h | 3 + trunk/include/asm-arm/arch-iop13xx/iop13xx.h | 43 + trunk/include/asm-arm/arch-iop13xx/system.h | 34 +- .../include/asm-arm/arch-iop13xx/uncompress.h | 3 +- .../include/asm-arm/arch-iop32x/uncompress.h | 2 +- .../include/asm-arm/arch-mxc/board-mx31ads.h | 142 + trunk/include/asm-arm/arch-mxc/common.h | 20 + trunk/include/asm-arm/arch-mxc/dma.h | 21 + trunk/include/asm-arm/arch-mxc/entry-macro.S | 39 + trunk/include/asm-arm/arch-mxc/hardware.h | 52 + trunk/include/asm-arm/arch-mxc/io.h | 33 + trunk/include/asm-arm/arch-mxc/irqs.h | 38 + trunk/include/asm-arm/arch-mxc/memory.h | 36 + trunk/include/asm-arm/arch-mxc/mx31.h | 335 ++ trunk/include/asm-arm/arch-mxc/mxc.h | 149 + trunk/include/asm-arm/arch-mxc/system.h | 50 + trunk/include/asm-arm/arch-mxc/timex.h | 25 + trunk/include/asm-arm/arch-mxc/uncompress.h | 79 + trunk/include/asm-arm/arch-mxc/vmalloc.h | 36 + trunk/include/asm-arm/arch-ns9xxx/regs-bbu.h | 28 +- trunk/include/asm-arm/arch-ns9xxx/regs-mem.h | 6 +- trunk/include/asm-arm/arch-ns9xxx/regs-sys.h | 2 +- trunk/include/asm-arm/arch-pxa/pm.h | 16 +- trunk/include/asm-arm/arch-s3c2400/map.h | 66 + trunk/include/asm-arm/arch-s3c2400/memory.h | 23 + .../asm-arm/arch-s3c2410/debug-macro.S | 84 +- trunk/include/asm-arm/arch-s3c2410/map.h | 85 +- trunk/include/asm-arm/arch-s3c2410/memory.h | 13 - trunk/include/asm-arm/arch-s3c2410/regs-lcd.h | 2 +- trunk/include/asm-arm/arch-s3c2410/system.h | 2 +- .../include/asm-arm/arch-s3c2410/uncompress.h | 145 +- .../include/asm-arm/arch-sa1100/jornada720.h | 27 + trunk/include/asm-arm/elf.h | 3 +- trunk/include/asm-arm/floppy.h | 18 +- trunk/include/asm-arm/hardware/iop3xx.h | 33 + trunk/include/asm-arm/pgtable-nommu.h | 3 +- trunk/include/asm-arm/plat-s3c/debug-macro.S | 75 + .../asm-arm/{arch-s3c2410 => plat-s3c}/iic.h | 0 trunk/include/asm-arm/plat-s3c/map.h | 40 + .../asm-arm/{arch-s3c2410 => plat-s3c}/nand.h | 0 .../{arch-s3c2410 => plat-s3c}/regs-ac97.h | 0 .../{arch-s3c2410 => plat-s3c}/regs-adc.h | 0 .../{arch-s3c2410 => plat-s3c}/regs-iic.h | 0 .../{arch-s3c2410 => plat-s3c}/regs-nand.h | 0 .../{arch-s3c2410 => plat-s3c}/regs-rtc.h | 0 .../{arch-s3c2410 => plat-s3c}/regs-serial.h | 8 +- .../{arch-s3c2410 => plat-s3c}/regs-timer.h | 16 +- .../regs-watchdog.h | 8 +- trunk/include/asm-arm/plat-s3c/uncompress.h | 155 + .../{arch-s3c2410 => plat-s3c24xx}/regs-iis.h | 0 .../{arch-s3c2410 => plat-s3c24xx}/regs-spi.h | 0 .../{arch-s3c2410 => plat-s3c24xx}/regs-udc.h | 0 .../{arch-s3c2410 => plat-s3c24xx}/udc.h | 0 trunk/include/asm-arm/system.h | 10 - trunk/include/asm-arm/thread_info.h | 1 - trunk/include/asm-arm/unistd.h | 1 - trunk/include/asm-arm/vfp.h | 4 +- trunk/include/asm-arm26/a.out.h | 1 + trunk/include/asm-arm26/system.h | 10 - trunk/include/asm-avr32/a.out.h | 1 + trunk/include/asm-avr32/arch-at32ap/board.h | 14 + trunk/include/asm-avr32/arch-at32ap/sm.h | 27 - trunk/include/asm-avr32/atomic.h | 4 +- trunk/include/asm-avr32/unaligned.h | 15 +- trunk/include/asm-cris/a.out.h | 1 + trunk/include/asm-frv/mem-layout.h | 1 + trunk/include/asm-generic/percpu.h | 8 + trunk/include/asm-generic/vmlinux.lds.h | 14 +- trunk/include/asm-h8300/a.out.h | 1 + trunk/include/asm-i386/a.out.h | 1 + trunk/include/asm-i386/alternative.h | 2 + trunk/include/asm-i386/cmpxchg.h | 16 +- trunk/include/asm-i386/e820.h | 8 + trunk/include/asm-i386/geode.h | 159 + trunk/include/asm-i386/hpet.h | 126 +- trunk/include/asm-i386/i8253.h | 16 +- trunk/include/asm-i386/irq.h | 1 + trunk/include/asm-i386/kprobes.h | 1 - .../include/asm-i386/mach-default/do_timer.h | 2 +- .../include/asm-i386/mach-default/io_ports.h | 5 - .../mach-default/irq_vectors_limits.h | 2 +- .../asm-i386/mach-default/mach_reboot.h | 25 +- .../include/asm-i386/mach-voyager/do_timer.h | 2 +- trunk/include/asm-i386/mc146818rtc.h | 5 +- trunk/include/asm-i386/mce.h | 4 + trunk/include/asm-i386/mmu_context.h | 2 + trunk/include/asm-i386/nmi.h | 2 + trunk/include/asm-i386/page.h | 1 - trunk/include/asm-i386/paravirt.h | 22 +- trunk/include/asm-i386/pci.h | 5 + trunk/include/asm-i386/percpu.h | 5 + trunk/include/asm-i386/pgalloc.h | 6 +- trunk/include/asm-i386/processor-cyrix.h | 30 + trunk/include/asm-i386/processor.h | 12 - trunk/include/asm-i386/required-features.h | 2 +- trunk/include/asm-i386/resume-trace.h | 13 + trunk/include/asm-i386/setup.h | 4 + trunk/include/asm-i386/smp.h | 5 + trunk/include/asm-i386/string.h | 243 +- trunk/include/asm-i386/system.h | 9 - trunk/include/asm-i386/timer.h | 34 +- trunk/include/asm-i386/tlbflush.h | 6 +- trunk/include/asm-i386/topology.h | 2 +- trunk/include/asm-i386/tsc.h | 1 + trunk/include/asm-i386/uaccess.h | 2 +- trunk/include/asm-i386/unistd.h | 3 +- trunk/include/asm-i386/vmi_time.h | 2 +- trunk/include/asm-i386/xen/hypercall.h | 413 ++ trunk/include/asm-i386/xen/hypervisor.h | 73 + trunk/include/asm-i386/xen/interface.h | 188 + trunk/include/asm-ia64/hw_irq.h | 18 +- trunk/include/asm-ia64/iosapic.h | 6 +- trunk/include/asm-ia64/irq.h | 9 +- trunk/include/asm-ia64/kprobes.h | 2 - trunk/include/asm-ia64/percpu.h | 10 + trunk/include/asm-ia64/processor.h | 4 +- trunk/include/asm-ia64/rwsem.h | 4 + trunk/include/asm-ia64/system.h | 1 - trunk/include/asm-ia64/unistd.h | 2 +- trunk/include/asm-ia64/ustack.h | 1 + trunk/include/asm-m32r/a.out.h | 1 + trunk/include/asm-m32r/system.h | 10 - trunk/include/asm-m68k/a.out.h | 1 + trunk/include/asm-m68k/io.h | 75 +- trunk/include/asm-m68k/raw_io.h | 8 +- trunk/include/asm-m68knommu/irq.h | 75 +- trunk/include/asm-m68knommu/irqnode.h | 36 - trunk/include/asm-m68knommu/m68360.h | 8 + trunk/include/asm-m68knommu/pgtable.h | 1 - trunk/include/asm-m68knommu/traps.h | 4 + trunk/include/asm-m68knommu/uaccess.h | 11 +- trunk/include/asm-mips/a.out.h | 1 + trunk/include/asm-mips/atomic.h | 33 +- trunk/include/asm-mips/barrier.h | 9 + trunk/include/asm-mips/bitops.h | 10 +- trunk/include/asm-mips/ds1216.h | 31 - trunk/include/asm-mips/futex.h | 8 +- trunk/include/asm-mips/gfx.h | 55 - .../mach-cobalt/cpu-feature-overrides.h | 4 +- .../mach-excite/cpu-feature-overrides.h | 3 + .../mach-ip22/cpu-feature-overrides.h | 4 +- .../mach-ip27/cpu-feature-overrides.h | 4 +- .../mach-ip32/cpu-feature-overrides.h | 4 +- .../mach-qemu/cpu-feature-overrides.h | 3 +- .../asm-mips/mach-rm/cpu-feature-overrides.h | 4 +- .../mach-sibyte/cpu-feature-overrides.h | 4 +- .../mach-yosemite/cpu-feature-overrides.h | 4 +- trunk/include/asm-mips/spinlock.h | 18 +- trunk/include/asm-mips/system.h | 20 +- trunk/include/asm-parisc/a.out.h | 1 + trunk/include/asm-parisc/system.h | 11 - trunk/include/asm-powerpc/a.out.h | 3 + trunk/include/asm-powerpc/kprobes.h | 2 - trunk/include/asm-powerpc/mpic.h | 3 + trunk/include/asm-powerpc/of_device.h | 22 +- trunk/include/asm-powerpc/of_platform.h | 38 +- trunk/include/asm-powerpc/oprofile_impl.h | 10 +- trunk/include/asm-powerpc/percpu.h | 7 + trunk/include/asm-powerpc/pmi.h | 8 +- trunk/include/asm-powerpc/prom.h | 52 +- trunk/include/asm-powerpc/spu.h | 62 +- trunk/include/asm-powerpc/spu_csa.h | 8 +- trunk/include/asm-powerpc/systbl.h | 1 + trunk/include/asm-powerpc/system.h | 10 - trunk/include/asm-powerpc/unistd.h | 3 +- trunk/include/asm-ppc/system.h | 11 +- trunk/include/asm-s390/a.out.h | 1 + trunk/include/asm-s390/kprobes.h | 2 - trunk/include/asm-s390/percpu.h | 7 + trunk/include/asm-s390/system.h | 10 - trunk/include/asm-sh/a.out.h | 1 + trunk/include/asm-sh/clock.h | 1 + trunk/include/asm-sh/hw_irq.h | 77 +- trunk/include/asm-sh/se7722.h | 40 +- trunk/include/asm-sh/system.h | 10 - trunk/include/asm-sh/unistd.h | 3 +- trunk/include/asm-sh64/a.out.h | 1 + trunk/include/asm-sh64/unistd.h | 3 +- trunk/include/asm-sparc/a.out.h | 1 + trunk/include/asm-sparc/device.h | 14 +- trunk/include/asm-sparc/fb.h | 9 + trunk/include/asm-sparc/irq.h | 168 +- trunk/include/asm-sparc/of_device.h | 49 +- trunk/include/asm-sparc/of_platform.h | 32 + trunk/include/asm-sparc/oplib.h | 26 - trunk/include/asm-sparc/pgtable.h | 3 +- trunk/include/asm-sparc/prom.h | 66 +- trunk/include/asm-sparc/system.h | 10 - trunk/include/asm-sparc/unistd.h | 6 +- trunk/include/asm-sparc64/a.out.h | 2 + trunk/include/asm-sparc64/fb.h | 9 + trunk/include/asm-sparc64/io.h | 5 - trunk/include/asm-sparc64/kprobes.h | 1 - trunk/include/asm-sparc64/mdesc.h | 10 + trunk/include/asm-sparc64/of_device.h | 50 +- trunk/include/asm-sparc64/of_platform.h | 33 + trunk/include/asm-sparc64/oplib.h | 28 +- trunk/include/asm-sparc64/parport.h | 233 +- trunk/include/asm-sparc64/percpu.h | 7 + trunk/include/asm-sparc64/power.h | 7 - trunk/include/asm-sparc64/prom.h | 66 +- trunk/include/asm-sparc64/system.h | 16 - trunk/include/asm-sparc64/unistd.h | 6 +- trunk/include/asm-sparc64/vio.h | 4 +- trunk/include/asm-um/a.out.h | 2 + trunk/include/asm-x86_64/a.out.h | 3 +- trunk/include/asm-x86_64/acpi.h | 11 + trunk/include/asm-x86_64/alternative.h | 2 + trunk/include/asm-x86_64/apic.h | 6 +- trunk/include/asm-x86_64/auxvec.h | 2 + trunk/include/asm-x86_64/calgary.h | 9 +- trunk/include/asm-x86_64/cmpxchg.h | 2 +- trunk/include/asm-x86_64/dmi.h | 5 +- trunk/include/asm-x86_64/elf.h | 13 + trunk/include/asm-x86_64/fixmap.h | 6 +- trunk/include/asm-x86_64/hpet.h | 62 +- trunk/include/asm-x86_64/hw_irq.h | 20 + trunk/include/asm-x86_64/hypertransport.h | 43 +- trunk/include/asm-x86_64/i8253.h | 6 + trunk/include/asm-x86_64/iommu.h | 29 + trunk/include/asm-x86_64/kprobes.h | 1 - trunk/include/asm-x86_64/mce.h | 5 + trunk/include/asm-x86_64/mmu.h | 1 + trunk/include/asm-x86_64/msidef.h | 48 +- trunk/include/asm-x86_64/nmi.h | 2 + trunk/include/asm-x86_64/pci.h | 19 + trunk/include/asm-x86_64/percpu.h | 7 + trunk/include/asm-x86_64/pgalloc.h | 73 +- trunk/include/asm-x86_64/pgtable.h | 3 +- trunk/include/asm-x86_64/processor.h | 12 - trunk/include/asm-x86_64/proto.h | 20 - trunk/include/asm-x86_64/ptrace.h | 1 + trunk/include/asm-x86_64/resume-trace.h | 13 + trunk/include/asm-x86_64/string.h | 5 +- trunk/include/asm-x86_64/system.h | 45 +- trunk/include/asm-x86_64/thread_info.h | 2 + trunk/include/asm-x86_64/timex.h | 1 - trunk/include/asm-x86_64/tlbflush.h | 6 +- trunk/include/asm-x86_64/topology.h | 2 +- trunk/include/asm-x86_64/unistd.h | 2 + trunk/include/asm-x86_64/vgtod.h | 29 + trunk/include/asm-x86_64/vsyscall.h | 3 +- trunk/include/asm-xtensa/a.out.h | 1 + trunk/include/linux/acpi.h | 7 +- trunk/include/linux/aio.h | 2 +- trunk/include/linux/async_tx.h | 6 - trunk/include/linux/ata.h | 9 + trunk/include/linux/audit.h | 32 +- trunk/include/linux/backlight.h | 11 +- trunk/include/linux/binfmts.h | 19 +- trunk/include/linux/buffer_head.h | 2 + trunk/include/linux/clockchips.h | 5 +- trunk/include/linux/clocksource.h | 6 + trunk/include/linux/coda_linux.h | 4 - trunk/include/linux/coda_proc.h | 76 - trunk/include/linux/coda_psdev.h | 15 +- trunk/include/linux/compiler-gcc4.h | 18 + trunk/include/linux/compiler.h | 9 + trunk/include/linux/dcookies.h | 1 + trunk/include/linux/device.h | 10 + trunk/include/linux/edac.h | 29 + trunk/include/linux/elf-em.h | 3 +- trunk/include/linux/elfnote.h | 22 +- trunk/include/linux/ext4_fs.h | 104 +- trunk/include/linux/ext4_fs_extents.h | 43 +- trunk/include/linux/ext4_fs_i.h | 5 + trunk/include/linux/ext4_fs_sb.h | 3 +- trunk/include/linux/falloc.h | 6 + trunk/include/linux/freezer.h | 9 +- trunk/include/linux/fs.h | 32 +- trunk/include/linux/fsl_devices.h | 1 + trunk/include/linux/genetlink.h | 13 + trunk/include/linux/highmem.h | 15 - trunk/include/linux/i2c-id.h | 7 +- trunk/include/linux/i2c-isa.h | 36 - trunk/include/linux/i2c.h | 1 - trunk/include/linux/i2o.h | 3 +- trunk/include/linux/ide.h | 31 +- trunk/include/linux/init.h | 8 +- trunk/include/linux/input.h | 3 +- trunk/include/linux/ioprio.h | 8 + trunk/include/linux/irda.h | 1 + trunk/include/linux/jbd2.h | 6 +- trunk/include/linux/kernel.h | 8 +- trunk/include/linux/kmod.h | 52 +- trunk/include/linux/kobject.h | 25 +- trunk/include/linux/kprobes.h | 6 +- trunk/include/linux/lcd.h | 14 +- trunk/include/linux/leds.h | 17 +- trunk/include/linux/lguest.h | 85 + trunk/include/linux/lguest_bus.h | 48 + trunk/include/linux/lguest_launcher.h | 73 + trunk/include/linux/libata.h | 35 +- trunk/include/linux/lockdep.h | 71 +- trunk/include/linux/major.h | 2 + trunk/include/linux/mm.h | 103 +- trunk/include/linux/namei.h | 4 +- trunk/include/linux/netdevice.h | 4 +- .../linux/netfilter_ipv4/ipt_iprange.h | 2 + trunk/include/linux/netlink.h | 2 + trunk/include/linux/nfs_fs.h | 4 +- trunk/include/linux/nfs_xdr.h | 32 +- trunk/include/linux/nfsd/export.h | 13 +- trunk/include/linux/notifier.h | 6 + trunk/include/linux/of.h | 61 + trunk/include/linux/of_device.h | 26 + trunk/include/linux/of_platform.h | 57 + trunk/include/linux/oprofile.h | 35 + trunk/include/linux/page-flags.h | 50 +- trunk/include/linux/pci_ids.h | 5 + trunk/include/linux/pm.h | 12 +- trunk/include/linux/reboot.h | 5 + trunk/include/linux/resume-trace.h | 19 +- trunk/include/linux/sched.h | 30 +- trunk/include/linux/serio.h | 1 + trunk/include/linux/signal.h | 3 + trunk/include/linux/slab.h | 5 +- trunk/include/linux/slub_def.h | 2 +- trunk/include/linux/spi/ads7846.h | 14 + trunk/include/linux/spinlock_types.h | 4 +- trunk/include/linux/spinlock_types_up.h | 9 +- trunk/include/linux/stacktrace.h | 2 +- trunk/include/linux/string.h | 4 + trunk/include/linux/sunrpc/xdr.h | 16 + trunk/include/linux/suspend.h | 52 +- trunk/include/linux/syscalls.h | 3 +- trunk/include/linux/time.h | 3 + trunk/include/linux/timex.h | 60 - trunk/include/linux/uio_driver.h | 91 + trunk/include/linux/user_namespace.h | 2 +- trunk/include/linux/videodev2.h | 1 + trunk/include/linux/vmalloc.h | 11 + trunk/include/media/saa7146.h | 6 +- trunk/include/media/tuner.h | 71 +- trunk/include/mtd/ubi-header.h | 101 +- trunk/include/net/genetlink.h | 22 + trunk/include/net/netlabel.h | 62 +- trunk/include/net/tcp.h | 6 +- trunk/include/net/xfrm.h | 1 - trunk/include/sound/ak4xxx-adda.h | 1 + trunk/include/sound/cs46xx.h | 4 + trunk/include/sound/cs46xx_dsp_spos.h | 2 + trunk/include/sound/emu10k1.h | 16 + trunk/include/sound/sb.h | 1 + trunk/include/sound/version.h | 2 +- trunk/include/sound/wavefront_fx.h | 9 - trunk/include/xen/events.h | 48 + trunk/include/xen/features.h | 23 + trunk/include/xen/grant_table.h | 107 + trunk/include/xen/hvc-console.h | 6 + trunk/include/xen/interface/elfnote.h | 133 + trunk/include/xen/interface/event_channel.h | 195 + trunk/include/xen/interface/features.h | 43 + trunk/include/xen/interface/grant_table.h | 375 ++ trunk/include/xen/interface/io/blkif.h | 94 + trunk/include/xen/interface/io/console.h | 23 + trunk/include/xen/interface/io/netif.h | 158 + trunk/include/xen/interface/io/ring.h | 260 ++ trunk/include/xen/interface/io/xenbus.h | 44 + trunk/include/xen/interface/io/xs_wire.h | 87 + trunk/include/xen/interface/memory.h | 145 + trunk/include/xen/interface/physdev.h | 145 + trunk/include/xen/interface/sched.h | 77 + trunk/include/xen/interface/vcpu.h | 167 + trunk/include/xen/interface/version.h | 60 + trunk/include/xen/interface/xen.h | 447 +++ trunk/include/xen/page.h | 179 + trunk/include/xen/xenbus.h | 234 ++ trunk/ipc/mqueue.c | 2 +- trunk/ipc/shm.c | 8 +- trunk/kernel/auditfilter.c | 13 +- trunk/kernel/auditsc.c | 135 +- trunk/kernel/cpuset.c | 2 +- trunk/kernel/exit.c | 3 + trunk/kernel/fork.c | 20 +- trunk/kernel/futex.c | 21 +- trunk/kernel/hrtimer.c | 15 +- trunk/kernel/irq/proc.c | 10 +- trunk/kernel/kmod.c | 303 +- trunk/kernel/kprobes.c | 9 + trunk/kernel/ksysfs.c | 28 + trunk/kernel/lockdep.c | 1725 ++++---- trunk/kernel/lockdep_proc.c | 301 +- trunk/kernel/mutex.c | 8 + trunk/kernel/nsproxy.c | 2 +- trunk/kernel/posix-timers.c | 2 +- trunk/kernel/power/Kconfig | 29 +- trunk/kernel/power/disk.c | 251 +- trunk/kernel/power/main.c | 108 +- trunk/kernel/power/power.h | 29 +- trunk/kernel/power/process.c | 90 +- trunk/kernel/power/swap.c | 20 +- trunk/kernel/power/user.c | 154 +- trunk/kernel/ptrace.c | 2 +- trunk/kernel/relay.c | 13 +- trunk/kernel/rwsem.c | 8 +- trunk/kernel/sched.c | 33 +- trunk/kernel/signal.c | 10 + trunk/kernel/spinlock.c | 32 +- trunk/kernel/sys.c | 91 +- trunk/kernel/sysctl.c | 66 +- trunk/kernel/time.c | 101 +- trunk/kernel/time/ntp.c | 69 +- trunk/kernel/time/tick-broadcast.c | 35 +- trunk/kernel/time/tick-common.c | 16 +- trunk/kernel/time/tick-oneshot.c | 15 +- trunk/kernel/time/tick-sched.c | 7 +- trunk/kernel/time/timekeeping.c | 8 +- trunk/kernel/timer.c | 212 +- trunk/kernel/user.c | 2 +- trunk/lib/Kconfig.debug | 11 + trunk/lib/Makefile | 2 +- trunk/lib/argv_split.c | 105 + trunk/lib/idr.c | 2 +- trunk/lib/kobject_uevent.c | 32 +- trunk/lib/radix-tree.c | 2 +- trunk/lib/swiotlb.c | 5 +- trunk/mm/filemap.c | 329 +- trunk/mm/filemap_xip.c | 41 +- trunk/mm/fremap.c | 179 +- trunk/mm/hugetlb.c | 46 +- trunk/mm/memory.c | 322 +- trunk/mm/mempolicy.c | 4 +- trunk/mm/mmap.c | 69 +- trunk/mm/mprotect.c | 2 +- trunk/mm/mremap.c | 2 +- trunk/mm/nommu.c | 50 +- trunk/mm/page-writeback.c | 22 +- trunk/mm/page_alloc.c | 11 +- trunk/mm/readahead.c | 516 +-- trunk/mm/rmap.c | 6 +- trunk/mm/shmem.c | 86 +- trunk/mm/slab.c | 23 +- trunk/mm/slob.c | 24 +- trunk/mm/slub.c | 6 +- trunk/mm/sparse.c | 2 +- trunk/mm/truncate.c | 15 +- trunk/mm/util.c | 26 +- trunk/mm/vmalloc.c | 59 +- trunk/net/atm/br2684.c | 4 - trunk/net/ax25/af_ax25.c | 2 +- trunk/net/bluetooth/hci_core.c | 2 +- trunk/net/bridge/br_fdb.c | 2 +- trunk/net/bridge/br_stp_if.c | 2 +- trunk/net/core/dev.c | 44 +- trunk/net/core/dev_mcast.c | 12 - trunk/net/core/flow.c | 2 +- trunk/net/core/gen_estimator.c | 81 +- trunk/net/core/neighbour.c | 2 +- trunk/net/core/rtnetlink.c | 2 +- trunk/net/core/skbuff.c | 4 +- trunk/net/core/sock.c | 32 +- trunk/net/dccp/ackvec.c | 4 +- trunk/net/dccp/ccid.c | 2 +- trunk/net/dccp/ccids/lib/loss_interval.c | 4 +- trunk/net/dccp/ccids/lib/packet_history.c | 4 +- trunk/net/dccp/probe.c | 2 +- trunk/net/dccp/proto.c | 2 +- trunk/net/decnet/dn_route.c | 2 +- trunk/net/decnet/dn_table.c | 2 +- trunk/net/ieee80211/ieee80211_wx.c | 7 +- trunk/net/ipv4/fib_frontend.c | 2 +- trunk/net/ipv4/fib_hash.c | 4 +- trunk/net/ipv4/fib_trie.c | 2 +- trunk/net/ipv4/inetpeer.c | 6 +- trunk/net/ipv4/ip_forward.c | 2 +- trunk/net/ipv4/ipmr.c | 2 +- trunk/net/ipv4/ipvs/ip_vs_conn.c | 2 +- .../nf_conntrack_l3proto_ipv4_compat.c | 3 +- trunk/net/ipv4/route.c | 2 +- trunk/net/ipv4/tcp.c | 2 +- trunk/net/ipv4/tcp_bic.c | 2 +- trunk/net/ipv4/tcp_cong.c | 3 +- trunk/net/ipv4/tcp_cubic.c | 2 +- trunk/net/ipv4/tcp_highspeed.c | 2 +- trunk/net/ipv4/tcp_htcp.c | 2 +- trunk/net/ipv4/tcp_hybla.c | 4 +- trunk/net/ipv4/tcp_illinois.c | 2 +- trunk/net/ipv4/tcp_input.c | 8 +- trunk/net/ipv4/tcp_lp.c | 5 +- trunk/net/ipv4/tcp_output.c | 2 +- trunk/net/ipv4/tcp_probe.c | 2 +- trunk/net/ipv4/tcp_scalable.c | 2 +- trunk/net/ipv4/tcp_vegas.c | 6 +- trunk/net/ipv4/tcp_veno.c | 6 +- trunk/net/ipv4/tcp_yeah.c | 2 +- trunk/net/ipv6/ip6_fib.c | 2 +- trunk/net/ipv6/ip6_tunnel.c | 4 +- trunk/net/ipv6/route.c | 2 +- trunk/net/ipv6/xfrm6_tunnel.c | 2 +- trunk/net/irda/af_irda.c | 2 +- trunk/net/irda/irda_device.c | 4 +- trunk/net/irda/iriap.c | 2 +- trunk/net/irda/irias_object.c | 43 +- trunk/net/irda/irlap.c | 2 +- trunk/net/irda/irlmp.c | 2 +- trunk/net/irda/irnetlink.c | 2 +- trunk/net/irda/irproc.c | 2 +- trunk/net/irda/irsysctl.c | 2 +- trunk/net/irda/irttp.c | 2 +- trunk/net/mac80211/Makefile | 1 + trunk/net/mac80211/debugfs_netdev.c | 9 +- trunk/net/mac80211/ieee80211.c | 7 +- trunk/net/mac80211/ieee80211_i.h | 5 +- trunk/net/mac80211/ieee80211_ioctl.c | 133 - trunk/net/mac80211/ieee80211_rate.c | 3 +- trunk/net/mac80211/ieee80211_sta.c | 9 +- trunk/net/mac80211/regdomain.c | 158 + trunk/net/netfilter/Kconfig | 1 + trunk/net/netfilter/nf_conntrack_core.c | 2 +- trunk/net/netfilter/nf_conntrack_expect.c | 2 +- trunk/net/netfilter/nf_conntrack_helper.c | 4 +- trunk/net/netfilter/nf_conntrack_standalone.c | 5 +- trunk/net/netfilter/nf_log.c | 2 +- trunk/net/netfilter/xt_hashlimit.c | 2 +- trunk/net/netlabel/netlabel_cipso_v4.c | 5 + trunk/net/netlabel/netlabel_kapi.c | 21 + trunk/net/netlabel/netlabel_mgmt.c | 65 + trunk/net/netlabel/netlabel_mgmt.h | 5 + trunk/net/netlink/af_netlink.c | 166 +- trunk/net/netlink/genetlink.c | 235 +- trunk/net/netrom/af_netrom.c | 2 +- trunk/net/packet/af_packet.c | 2 +- trunk/net/rfkill/rfkill-input.c | 2 +- trunk/net/rfkill/rfkill.c | 2 +- trunk/net/rose/af_rose.c | 2 +- trunk/net/rxrpc/af_rxrpc.c | 12 +- trunk/net/sched/Kconfig | 6 +- trunk/net/sched/sch_atm.c | 3 +- trunk/net/sctp/protocol.c | 4 +- trunk/net/sctp/sm_statefuns.c | 2 +- trunk/net/sctp/socket.c | 4 +- trunk/net/socket.c | 3 +- trunk/net/sunrpc/auth.c | 13 +- trunk/net/sunrpc/auth_gss/auth_gss.c | 21 +- trunk/net/sunrpc/auth_gss/gss_krb5_crypto.c | 2 +- trunk/net/sunrpc/rpc_pipe.c | 18 +- trunk/net/sunrpc/sched.c | 4 +- trunk/net/tipc/handler.c | 2 +- trunk/net/tipc/name_table.c | 3 +- trunk/net/tipc/socket.c | 12 +- trunk/net/xfrm/xfrm_input.c | 2 +- trunk/net/xfrm/xfrm_policy.c | 6 +- trunk/net/xfrm/xfrm_state.c | 2 +- trunk/scripts/Kbuild.include | 7 +- trunk/scripts/Lindent | 2 +- trunk/scripts/Makefile.build | 16 + trunk/scripts/Makefile.headersinst | 14 +- trunk/scripts/Makefile.modpost | 4 +- trunk/scripts/checkpatch.pl | 175 +- trunk/scripts/cleanfile | 54 +- trunk/scripts/cleanpatch | 58 +- trunk/scripts/gcc-version.sh | 15 +- trunk/scripts/gen_initramfs_list.sh | 12 +- trunk/scripts/kallsyms.c | 17 +- trunk/scripts/kconfig/Makefile | 35 +- trunk/scripts/kconfig/confdata.c | 37 +- trunk/scripts/kconfig/kxgettext.c | 4 +- .../kconfig/lxdialog/check-lxdialog.sh | 2 +- trunk/scripts/kconfig/mconf.c | 11 +- trunk/scripts/kernel-doc | 28 +- trunk/scripts/mod/modpost.c | 313 +- trunk/scripts/mod/modpost.h | 3 + trunk/security/commoncap.c | 2 +- trunk/security/dummy.c | 2 +- trunk/security/keys/key.c | 2 +- trunk/security/keys/request_key.c | 3 +- trunk/security/selinux/avc.c | 17 +- trunk/security/selinux/hooks.c | 23 +- trunk/security/selinux/netlabel.c | 49 +- trunk/security/selinux/ss/avtab.c | 2 +- trunk/sound/Kconfig | 2 + trunk/sound/Makefile | 2 +- trunk/sound/aoa/codecs/snd-aoa-codec-onyx.c | 4 +- trunk/sound/core/pcm_native.c | 2 +- trunk/sound/core/seq/seq_instr.c | 6 +- trunk/sound/core/seq/seq_virmidi.c | 3 +- trunk/sound/core/sound.c | 3 +- trunk/sound/core/timer.c | 27 +- trunk/sound/drivers/dummy.c | 2 +- trunk/sound/drivers/mpu401/mpu401.c | 2 +- trunk/sound/drivers/portman2x4.c | 2 +- trunk/sound/drivers/serial-u16550.c | 2 +- trunk/sound/drivers/virmidi.c | 2 +- trunk/sound/i2c/other/ak4xxx-adda.c | 24 +- trunk/sound/isa/Kconfig | 32 +- trunk/sound/isa/ad1848/ad1848_lib.c | 4 +- trunk/sound/isa/opl3sa2.c | 2 + trunk/sound/isa/opti9xx/opti92x-ad1848.c | 3 + trunk/sound/isa/sb/Makefile | 15 +- trunk/sound/isa/sb/sb16_main.c | 10 + trunk/sound/isa/sb/sb_common.c | 5 +- trunk/sound/isa/sb/sb_mixer.c | 3 + trunk/sound/isa/sscape.c | 4 +- trunk/sound/isa/wavefront/wavefront_synth.c | 2 +- trunk/sound/pci/Kconfig | 11 + trunk/sound/pci/Makefile | 2 + trunk/sound/pci/ali5451/ali5451.c | 7 +- trunk/sound/pci/als300.c | 7 +- trunk/sound/pci/ca0106/ca0106_main.c | 19 + trunk/sound/pci/cs46xx/cs46xx_lib.c | 77 +- trunk/sound/pci/cs46xx/cs46xx_lib.h | 3 + trunk/sound/pci/cs46xx/dsp_spos.c | 170 +- trunk/sound/pci/cs5530.c | 306 ++ trunk/sound/pci/emu10k1/emu10k1_main.c | 125 +- trunk/sound/pci/emu10k1/emufx.c | 78 +- trunk/sound/pci/emu10k1/emumixer.c | 16 + trunk/sound/pci/emu10k1/emupcm.c | 39 +- trunk/sound/pci/ens1370.c | 4 +- trunk/sound/pci/hda/hda_intel.c | 53 +- trunk/sound/pci/hda/hda_proc.c | 6 + trunk/sound/pci/hda/patch_analog.c | 630 ++- trunk/sound/pci/hda/patch_atihdmi.c | 1 + trunk/sound/pci/hda/patch_conexant.c | 2 + trunk/sound/pci/hda/patch_realtek.c | 961 ++++- trunk/sound/pci/hda/patch_si3054.c | 4 + trunk/sound/pci/hda/patch_sigmatel.c | 266 +- trunk/sound/pci/ice1712/revo.c | 7 +- trunk/sound/pci/nm256/nm256.c | 3 +- trunk/sound/pci/rme9652/rme9652.c | 2 +- trunk/sound/pci/via82xx.c | 4 +- trunk/sound/pci/via82xx_modem.c | 4 +- trunk/sound/ppc/Kconfig | 20 + trunk/sound/ppc/Makefile | 3 +- trunk/sound/ppc/snd_ps3.c | 1125 ++++++ trunk/sound/ppc/snd_ps3.h | 135 + trunk/sound/ppc/snd_ps3_reg.h | 891 +++++ trunk/sound/sh/Kconfig | 14 + trunk/sound/sh/Makefile | 8 + trunk/sound/sh/aica.c | 665 ++++ trunk/sound/sh/aica.h | 81 + trunk/sound/soc/Kconfig | 1 + trunk/sound/soc/Makefile | 2 +- trunk/sound/soc/s3c24xx/Kconfig | 27 + trunk/sound/soc/s3c24xx/Makefile | 9 + trunk/sound/soc/s3c24xx/lm4857.h | 32 + trunk/sound/soc/s3c24xx/neo1973_wm8753.c | 670 ++++ trunk/sound/soc/s3c24xx/s3c2443-ac97.c | 401 ++ trunk/sound/soc/s3c24xx/s3c24xx-ac97.h | 25 + trunk/sound/soc/s3c24xx/s3c24xx-i2s.c | 4 +- trunk/sound/soc/s3c24xx/smdk2443_wm9710.c | 85 + trunk/sound/soc/sh/Kconfig | 38 + trunk/sound/soc/sh/Makefile | 14 + trunk/sound/soc/sh/dma-sh7760.c | 354 ++ trunk/sound/soc/sh/hac.c | 322 ++ trunk/sound/soc/sh/sh7760-ac97.c | 92 + trunk/sound/soc/sh/ssi.c | 400 ++ trunk/sound/usb/usbaudio.c | 22 +- trunk/sound/usb/usbquirks.h | 72 +- trunk/sound/usb/usx2y/usbusx2yaudio.c | 7 +- trunk/usr/gen_init_cpio.c | 4 +- 2278 files changed, 111004 insertions(+), 36430 deletions(-) create mode 100644 trunk/Documentation/DocBook/uio-howto.tmpl create mode 100644 trunk/Documentation/dvb/opera-firmware.txt create mode 100644 trunk/Documentation/hwmon/abituguru3 create mode 100644 trunk/Documentation/hwmon/dme1737 create mode 100644 trunk/Documentation/hwmon/lm93 create mode 100644 trunk/Documentation/ja_JP/HOWTO create mode 100644 trunk/Documentation/ja_JP/stable_api_nonsense.txt create mode 100644 trunk/Documentation/lguest/Makefile create mode 100644 trunk/Documentation/lguest/lguest.c create mode 100644 trunk/Documentation/lguest/lguest.txt create mode 100644 trunk/Documentation/power/notifiers.txt delete mode 100644 trunk/Documentation/time_interpolators.txt create mode 100644 trunk/Documentation/zh_CN/HOWTO create mode 100644 trunk/Documentation/zh_CN/stable_api_nonsense.txt create mode 100644 trunk/arch/arm/configs/em_x270_defconfig create mode 100644 trunk/arch/arm/mach-iop32x/em7210.c create mode 100644 trunk/arch/arm/mach-mx3/Kconfig create mode 100644 trunk/arch/arm/mach-mx3/Makefile create mode 100644 trunk/arch/arm/mach-mx3/Makefile.boot create mode 100644 trunk/arch/arm/mach-mx3/mm.c create mode 100644 trunk/arch/arm/mach-mx3/mx31ads.c create mode 100644 trunk/arch/arm/mach-mx3/time.c create mode 100644 trunk/arch/arm/mach-pxa/em-x270.c create mode 100644 trunk/arch/arm/mach-sa1100/jornada720_ssp.c create mode 100644 trunk/arch/arm/plat-mxc/Kconfig create mode 100644 trunk/arch/arm/plat-mxc/Makefile create mode 100644 trunk/arch/arm/plat-mxc/irq.c create mode 100644 trunk/arch/arm/plat-s3c/Kconfig create mode 100644 trunk/arch/avr32/boards/atstk1000/Kconfig create mode 100644 trunk/arch/avr32/mach-at32ap/cpufreq.c create mode 100644 trunk/arch/avr32/mach-at32ap/pm.h delete mode 100644 trunk/arch/avr32/mach-at32ap/sm.h delete mode 100644 trunk/arch/i386/kernel/cpu/rise.c create mode 100644 trunk/arch/i386/kernel/geode.c create mode 100644 trunk/arch/i386/lib/string.c create mode 100644 trunk/arch/i386/xen/Kconfig create mode 100644 trunk/arch/i386/xen/Makefile create mode 100644 trunk/arch/i386/xen/enlighten.c create mode 100644 trunk/arch/i386/xen/events.c create mode 100644 trunk/arch/i386/xen/features.c create mode 100644 trunk/arch/i386/xen/manage.c create mode 100644 trunk/arch/i386/xen/mmu.c create mode 100644 trunk/arch/i386/xen/mmu.h create mode 100644 trunk/arch/i386/xen/multicalls.c create mode 100644 trunk/arch/i386/xen/multicalls.h create mode 100644 trunk/arch/i386/xen/setup.c create mode 100644 trunk/arch/i386/xen/smp.c create mode 100644 trunk/arch/i386/xen/time.c create mode 100644 trunk/arch/i386/xen/vdso.h create mode 100644 trunk/arch/i386/xen/xen-asm.S create mode 100644 trunk/arch/i386/xen/xen-head.S create mode 100644 trunk/arch/i386/xen/xen-ops.h create mode 100644 trunk/arch/ia64/kernel/fsyscall_gtod_data.h create mode 100644 trunk/arch/m68knommu/kernel/irq.c delete mode 100644 trunk/arch/m68knommu/platform/5307/ints.c create mode 100644 trunk/arch/powerpc/oprofile/cell/pr_util.h create mode 100644 trunk/arch/powerpc/oprofile/cell/spu_profiler.c create mode 100644 trunk/arch/powerpc/oprofile/cell/spu_task_sync.c create mode 100644 trunk/arch/powerpc/oprofile/cell/vma_map.c create mode 100644 trunk/arch/powerpc/platforms/cell/axon_msi.c create mode 100644 trunk/arch/powerpc/platforms/cell/cbe_cpufreq.h create mode 100644 trunk/arch/powerpc/platforms/cell/cbe_cpufreq_pervasive.c create mode 100644 trunk/arch/powerpc/platforms/cell/cbe_cpufreq_pmi.c create mode 100644 trunk/arch/powerpc/sysdev/axonram.c create mode 100644 trunk/arch/sh/cchips/hd6446x/Makefile rename trunk/arch/sh/cchips/hd6446x/{hd64461/setup.c => hd64461.c} (98%) delete mode 100644 trunk/arch/sh/cchips/hd6446x/hd64461/Makefile delete mode 100644 trunk/arch/sh/cchips/hd6446x/hd64461/io.c create mode 100644 trunk/arch/sh/kernel/cpu/irq/intc.c create mode 100644 trunk/arch/sparc/kernel/irq.h create mode 100644 trunk/arch/x86_64/vdso/Makefile create mode 100644 trunk/arch/x86_64/vdso/vclock_gettime.c create mode 100644 trunk/arch/x86_64/vdso/vdso-note.S create mode 100644 trunk/arch/x86_64/vdso/vdso-start.S create mode 100644 trunk/arch/x86_64/vdso/vdso.S create mode 100644 trunk/arch/x86_64/vdso/vdso.lds.S create mode 100644 trunk/arch/x86_64/vdso/vextern.h create mode 100644 trunk/arch/x86_64/vdso/vgetcpu.c create mode 100644 trunk/arch/x86_64/vdso/vma.c create mode 100644 trunk/arch/x86_64/vdso/voffset.h create mode 100644 trunk/arch/x86_64/vdso/vvar.c delete mode 100644 trunk/drivers/base/power/runtime.c create mode 100644 trunk/drivers/block/lguest_blk.c create mode 100644 trunk/drivers/block/ps3disk.c create mode 100644 trunk/drivers/block/xen-blkfront.c create mode 100644 trunk/drivers/char/hvc_lguest.c create mode 100644 trunk/drivers/char/hvc_xen.c create mode 100644 trunk/drivers/char/ps3flash.c create mode 100644 trunk/drivers/char/watchdog/iop_wdt.c rename trunk/drivers/edac/{edac_mc.h => edac_core.h} (50%) create mode 100644 trunk/drivers/edac/edac_device.c create mode 100644 trunk/drivers/edac/edac_device_sysfs.c create mode 100644 trunk/drivers/edac/edac_mc_sysfs.c create mode 100644 trunk/drivers/edac/edac_module.c create mode 100644 trunk/drivers/edac/edac_module.h create mode 100644 trunk/drivers/edac/edac_pci.c create mode 100644 trunk/drivers/edac/edac_pci_sysfs.c create mode 100644 trunk/drivers/edac/edac_stub.c create mode 100644 trunk/drivers/edac/i3000_edac.c create mode 100644 trunk/drivers/edac/i5000_edac.c create mode 100644 trunk/drivers/edac/i82443bxgx_edac.c create mode 100644 trunk/drivers/edac/i82975x_edac.c create mode 100644 trunk/drivers/edac/pasemi_edac.c create mode 100644 trunk/drivers/hwmon/abituguru3.c create mode 100644 trunk/drivers/hwmon/dme1737.c create mode 100644 trunk/drivers/hwmon/lm93.c delete mode 100644 trunk/drivers/i2c/busses/i2c-isa.c create mode 100644 trunk/drivers/input/touchscreen/fujitsu_ts.c create mode 100644 trunk/drivers/leds/leds-gpio.c create mode 100644 trunk/drivers/lguest/Kconfig create mode 100644 trunk/drivers/lguest/Makefile create mode 100644 trunk/drivers/lguest/core.c create mode 100644 trunk/drivers/lguest/hypercalls.c create mode 100644 trunk/drivers/lguest/interrupts_and_traps.c create mode 100644 trunk/drivers/lguest/io.c create mode 100644 trunk/drivers/lguest/lg.h create mode 100644 trunk/drivers/lguest/lguest.c create mode 100644 trunk/drivers/lguest/lguest_asm.S create mode 100644 trunk/drivers/lguest/lguest_bus.c create mode 100644 trunk/drivers/lguest/lguest_user.c create mode 100644 trunk/drivers/lguest/page_tables.c create mode 100644 trunk/drivers/lguest/segments.c create mode 100644 trunk/drivers/lguest/switcher.S create mode 100644 trunk/drivers/media/dvb/dvb-usb/af9005-fe.c create mode 100644 trunk/drivers/media/dvb/dvb-usb/af9005-remote.c create mode 100644 trunk/drivers/media/dvb/dvb-usb/af9005-script.h create mode 100644 trunk/drivers/media/dvb/dvb-usb/af9005.c create mode 100644 trunk/drivers/media/dvb/dvb-usb/af9005.h create mode 100644 trunk/drivers/media/video/tea5761.c create mode 100644 trunk/drivers/media/video/tuner-driver.h create mode 100644 trunk/drivers/net/bfin_mac.c create mode 100644 trunk/drivers/net/bfin_mac.h create mode 100644 trunk/drivers/net/irda/ep7211-sir.c create mode 100644 trunk/drivers/net/lguest_net.c create mode 100644 trunk/drivers/net/xen-netfront.c create mode 100644 trunk/drivers/of/Kconfig create mode 100644 trunk/drivers/of/Makefile create mode 100644 trunk/drivers/of/base.c create mode 100644 trunk/drivers/of/device.c create mode 100644 trunk/drivers/of/platform.c create mode 100644 trunk/drivers/rtc/rtc-stk17ta8.c create mode 100644 trunk/drivers/scsi/ps3rom.c create mode 100644 trunk/drivers/uio/Kconfig create mode 100644 trunk/drivers/uio/Makefile create mode 100644 trunk/drivers/uio/uio.c create mode 100644 trunk/drivers/uio/uio_cif.c create mode 100644 trunk/drivers/usb/gadget/amd5536udc.c create mode 100644 trunk/drivers/usb/gadget/amd5536udc.h create mode 100644 trunk/drivers/xen/Makefile create mode 100644 trunk/drivers/xen/grant-table.c create mode 100644 trunk/drivers/xen/xenbus/Makefile create mode 100644 trunk/drivers/xen/xenbus/xenbus_client.c create mode 100644 trunk/drivers/xen/xenbus/xenbus_comms.c create mode 100644 trunk/drivers/xen/xenbus/xenbus_comms.h create mode 100644 trunk/drivers/xen/xenbus/xenbus_probe.c create mode 100644 trunk/drivers/xen/xenbus/xenbus_probe.h create mode 100644 trunk/drivers/xen/xenbus/xenbus_xs.c create mode 100644 trunk/include/asm-arm/arch-mxc/board-mx31ads.h create mode 100644 trunk/include/asm-arm/arch-mxc/common.h create mode 100644 trunk/include/asm-arm/arch-mxc/dma.h create mode 100644 trunk/include/asm-arm/arch-mxc/entry-macro.S create mode 100644 trunk/include/asm-arm/arch-mxc/hardware.h create mode 100644 trunk/include/asm-arm/arch-mxc/io.h create mode 100644 trunk/include/asm-arm/arch-mxc/irqs.h create mode 100644 trunk/include/asm-arm/arch-mxc/memory.h create mode 100644 trunk/include/asm-arm/arch-mxc/mx31.h create mode 100644 trunk/include/asm-arm/arch-mxc/mxc.h create mode 100644 trunk/include/asm-arm/arch-mxc/system.h create mode 100644 trunk/include/asm-arm/arch-mxc/timex.h create mode 100644 trunk/include/asm-arm/arch-mxc/uncompress.h create mode 100644 trunk/include/asm-arm/arch-mxc/vmalloc.h create mode 100644 trunk/include/asm-arm/arch-s3c2400/map.h create mode 100644 trunk/include/asm-arm/arch-s3c2400/memory.h create mode 100644 trunk/include/asm-arm/arch-sa1100/jornada720.h create mode 100644 trunk/include/asm-arm/plat-s3c/debug-macro.S rename trunk/include/asm-arm/{arch-s3c2410 => plat-s3c}/iic.h (100%) create mode 100644 trunk/include/asm-arm/plat-s3c/map.h rename trunk/include/asm-arm/{arch-s3c2410 => plat-s3c}/nand.h (100%) rename trunk/include/asm-arm/{arch-s3c2410 => plat-s3c}/regs-ac97.h (100%) rename trunk/include/asm-arm/{arch-s3c2410 => plat-s3c}/regs-adc.h (100%) rename trunk/include/asm-arm/{arch-s3c2410 => plat-s3c}/regs-iic.h (100%) rename trunk/include/asm-arm/{arch-s3c2410 => plat-s3c}/regs-nand.h (100%) rename trunk/include/asm-arm/{arch-s3c2410 => plat-s3c}/regs-rtc.h (100%) rename trunk/include/asm-arm/{arch-s3c2410 => plat-s3c}/regs-serial.h (96%) rename trunk/include/asm-arm/{arch-s3c2410 => plat-s3c}/regs-timer.h (86%) rename trunk/include/asm-arm/{arch-s3c2410 => plat-s3c}/regs-watchdog.h (83%) create mode 100644 trunk/include/asm-arm/plat-s3c/uncompress.h rename trunk/include/asm-arm/{arch-s3c2410 => plat-s3c24xx}/regs-iis.h (100%) rename trunk/include/asm-arm/{arch-s3c2410 => plat-s3c24xx}/regs-spi.h (100%) rename trunk/include/asm-arm/{arch-s3c2410 => plat-s3c24xx}/regs-udc.h (100%) rename trunk/include/asm-arm/{arch-s3c2410 => plat-s3c24xx}/udc.h (100%) delete mode 100644 trunk/include/asm-avr32/arch-at32ap/sm.h create mode 100644 trunk/include/asm-i386/geode.h create mode 100644 trunk/include/asm-i386/processor-cyrix.h create mode 100644 trunk/include/asm-i386/resume-trace.h create mode 100644 trunk/include/asm-i386/xen/hypercall.h create mode 100644 trunk/include/asm-i386/xen/hypervisor.h create mode 100644 trunk/include/asm-i386/xen/interface.h delete mode 100644 trunk/include/asm-m68knommu/irqnode.h delete mode 100644 trunk/include/asm-mips/ds1216.h delete mode 100644 trunk/include/asm-mips/gfx.h create mode 100644 trunk/include/asm-sparc/of_platform.h create mode 100644 trunk/include/asm-sparc64/of_platform.h delete mode 100644 trunk/include/asm-sparc64/power.h create mode 100644 trunk/include/asm-x86_64/i8253.h create mode 100644 trunk/include/asm-x86_64/iommu.h create mode 100644 trunk/include/asm-x86_64/resume-trace.h create mode 100644 trunk/include/asm-x86_64/vgtod.h delete mode 100644 trunk/include/linux/coda_proc.h create mode 100644 trunk/include/linux/edac.h create mode 100644 trunk/include/linux/falloc.h delete mode 100644 trunk/include/linux/i2c-isa.h create mode 100644 trunk/include/linux/lguest.h create mode 100644 trunk/include/linux/lguest_bus.h create mode 100644 trunk/include/linux/lguest_launcher.h create mode 100644 trunk/include/linux/of.h create mode 100644 trunk/include/linux/of_device.h create mode 100644 trunk/include/linux/of_platform.h create mode 100644 trunk/include/linux/uio_driver.h delete mode 100644 trunk/include/sound/wavefront_fx.h create mode 100644 trunk/include/xen/events.h create mode 100644 trunk/include/xen/features.h create mode 100644 trunk/include/xen/grant_table.h create mode 100644 trunk/include/xen/hvc-console.h create mode 100644 trunk/include/xen/interface/elfnote.h create mode 100644 trunk/include/xen/interface/event_channel.h create mode 100644 trunk/include/xen/interface/features.h create mode 100644 trunk/include/xen/interface/grant_table.h create mode 100644 trunk/include/xen/interface/io/blkif.h create mode 100644 trunk/include/xen/interface/io/console.h create mode 100644 trunk/include/xen/interface/io/netif.h create mode 100644 trunk/include/xen/interface/io/ring.h create mode 100644 trunk/include/xen/interface/io/xenbus.h create mode 100644 trunk/include/xen/interface/io/xs_wire.h create mode 100644 trunk/include/xen/interface/memory.h create mode 100644 trunk/include/xen/interface/physdev.h create mode 100644 trunk/include/xen/interface/sched.h create mode 100644 trunk/include/xen/interface/vcpu.h create mode 100644 trunk/include/xen/interface/version.h create mode 100644 trunk/include/xen/interface/xen.h create mode 100644 trunk/include/xen/page.h create mode 100644 trunk/include/xen/xenbus.h create mode 100644 trunk/lib/argv_split.c create mode 100644 trunk/net/mac80211/regdomain.c create mode 100644 trunk/sound/pci/cs5530.c create mode 100644 trunk/sound/ppc/snd_ps3.c create mode 100644 trunk/sound/ppc/snd_ps3.h create mode 100644 trunk/sound/ppc/snd_ps3_reg.h create mode 100644 trunk/sound/sh/Kconfig create mode 100644 trunk/sound/sh/Makefile create mode 100644 trunk/sound/sh/aica.c create mode 100644 trunk/sound/sh/aica.h create mode 100644 trunk/sound/soc/s3c24xx/lm4857.h create mode 100644 trunk/sound/soc/s3c24xx/neo1973_wm8753.c create mode 100644 trunk/sound/soc/s3c24xx/s3c2443-ac97.c create mode 100644 trunk/sound/soc/s3c24xx/s3c24xx-ac97.h create mode 100644 trunk/sound/soc/s3c24xx/smdk2443_wm9710.c create mode 100644 trunk/sound/soc/sh/Kconfig create mode 100644 trunk/sound/soc/sh/Makefile create mode 100644 trunk/sound/soc/sh/dma-sh7760.c create mode 100644 trunk/sound/soc/sh/hac.c create mode 100644 trunk/sound/soc/sh/sh7760-ac97.c create mode 100644 trunk/sound/soc/sh/ssi.c diff --git a/[refs] b/[refs] index 7f064dc6e8c0..a4ee35e393d9 100644 --- a/[refs] +++ b/[refs] @@ -1,2 +1,2 @@ --- -refs/heads/master: b91421749a1840148d8c81637c03c0ace3f35269 +refs/heads/master: e6f194d8f6f50da6837af637b2fd839c34185f7a diff --git a/trunk/.gitignore b/trunk/.gitignore index 8d15830b883d..a232295b99ac 100644 --- a/trunk/.gitignore +++ b/trunk/.gitignore @@ -22,6 +22,7 @@ tags TAGS vmlinux* +!vmlinux.lds.S System.map Module.symvers diff --git a/trunk/CREDITS b/trunk/CREDITS index 79fd13dbb8e4..10c214dc95e7 100644 --- a/trunk/CREDITS +++ b/trunk/CREDITS @@ -2212,13 +2212,13 @@ S: 2300 Copenhagen S S: Denmark N: Claudio S. Matsuoka -E: claudio@conectiva.com -E: claudio@helllabs.org +E: cmatsuoka@gmail.com +E: claudio@mandriva.com W: http://helllabs.org/~claudio -D: V4L, OV511 driver hacks +D: V4L, OV511 and HDA-codec hacks S: Conectiva S.A. -S: R. Tocantins 89 -S: 80050-430 Curitiba PR +S: Souza Naves 1250 +S: 80050-040 Curitiba PR S: Brazil N: Heinz Mauelshagen diff --git a/trunk/Documentation/CodingStyle b/trunk/Documentation/CodingStyle index a667eb1fc26e..7f1730f1a1ae 100644 --- a/trunk/Documentation/CodingStyle +++ b/trunk/Documentation/CodingStyle @@ -633,12 +633,27 @@ covers RTL which is used frequently with assembly language in the kernel. Kernel developers like to be seen as literate. Do mind the spelling of kernel messages to make a good impression. Do not use crippled -words like "dont" and use "do not" or "don't" instead. +words like "dont"; use "do not" or "don't" instead. Make the messages +concise, clear, and unambiguous. Kernel messages do not have to be terminated with a period. Printing numbers in parentheses (%d) adds no value and should be avoided. +There are a number of driver model diagnostic macros in +which you should use to make sure messages are matched to the right device +and driver, and are tagged with the right level: dev_err(), dev_warn(), +dev_info(), and so forth. For messages that aren't associated with a +particular device, defines pr_debug() and pr_info(). + +Coming up with good debugging messages can be quite a challenge; and once +you have them, they can be a huge help for remote troubleshooting. Such +messages should be compiled out when the DEBUG symbol is not defined (that +is, by default they are not included). When you use dev_dbg() or pr_debug(), +that's automatic. Many subsystems have Kconfig options to turn on -DDEBUG. +A related convention uses VERBOSE_DEBUG to add dev_vdbg() messages to the +ones already enabled by DEBUG. + Chapter 14: Allocating memory @@ -790,4 +805,5 @@ Kernel CodingStyle, by greg@kroah.com at OLS 2002: http://www.kroah.com/linux/talks/ols_2002_kernel_codingstyle_talk/html/ -- -Last updated on 2006-December-06. +Last updated on 2007-July-13. + diff --git a/trunk/Documentation/DocBook/Makefile b/trunk/Documentation/DocBook/Makefile index 6fd1646d3204..08687e45e19d 100644 --- a/trunk/Documentation/DocBook/Makefile +++ b/trunk/Documentation/DocBook/Makefile @@ -15,11 +15,11 @@ DOCBOOKS := wanbook.xml z8530book.xml mcabook.xml videobook.xml \ ### # The build process is as follows (targets): -# (xmldocs) -# file.tmpl --> file.xml +--> file.ps (psdocs) -# +--> file.pdf (pdfdocs) -# +--> DIR=file (htmldocs) -# +--> man/ (mandocs) +# (xmldocs) [by docproc] +# file.tmpl --> file.xml +--> file.ps (psdocs) [by db2ps or xmlto] +# +--> file.pdf (pdfdocs) [by db2pdf or xmlto] +# +--> DIR=file (htmldocs) [by xmlto] +# +--> man/ (mandocs) [by xmlto] # for PDF and PS output you can choose between xmlto and docbook-utils tools diff --git a/trunk/Documentation/DocBook/kernel-api.tmpl b/trunk/Documentation/DocBook/kernel-api.tmpl index fd2ef4d29b6d..eb42bf9847cb 100644 --- a/trunk/Documentation/DocBook/kernel-api.tmpl +++ b/trunk/Documentation/DocBook/kernel-api.tmpl @@ -159,7 +159,6 @@ X!Ilib/string.c !Earch/i386/lib/usercopy.c More Memory Management Functions -!Iinclude/linux/rmap.h !Emm/readahead.c !Emm/filemap.c !Emm/memory.c @@ -408,6 +407,10 @@ X!Edrivers/pnp/system.c !Edrivers/pnp/manager.c !Edrivers/pnp/support.c + Userspace IO devices +!Edrivers/uio/uio.c +!Iinclude/linux/uio_driver.h + diff --git a/trunk/Documentation/DocBook/uio-howto.tmpl b/trunk/Documentation/DocBook/uio-howto.tmpl new file mode 100644 index 000000000000..e3bb29a8d8dd --- /dev/null +++ b/trunk/Documentation/DocBook/uio-howto.tmpl @@ -0,0 +1,611 @@ + + + + + +The Userspace I/O HOWTO + + + Hans-Jürgen + Koch + Linux developer, Linutronix + + + Linutronix + + +
+ hjk@linutronix.de +
+
+
+ +2006-12-11 + + + This HOWTO describes concept and usage of Linux kernel's + Userspace I/O system. + + + + + 0.3 + 2007-04-29 + hjk + Added section about userspace drivers. + + + 0.2 + 2007-02-13 + hjk + Update after multiple mappings were added. + + + 0.1 + 2006-12-11 + hjk + First draft. + + +
+ + + +About this document + + + +Copyright and License + + Copyright (c) 2006 by Hans-Jürgen Koch. + +This documentation is Free Software licensed under the terms of the +GPL version 2. + + + + + +Translations + +If you know of any translations for this document, or you are +interested in translating it, please email me +hjk@linutronix.de. + + + + +Preface + + For many types of devices, creating a Linux kernel driver is + overkill. All that is really needed is some way to handle an + interrupt and provide access to the memory space of the + device. The logic of controlling the device does not + necessarily have to be within the kernel, as the device does + not need to take advantage of any of other resources that the + kernel provides. One such common class of devices that are + like this are for industrial I/O cards. + + + To address this situation, the userspace I/O system (UIO) was + designed. For typical industrial I/O cards, only a very small + kernel module is needed. The main part of the driver will run in + user space. This simplifies development and reduces the risk of + serious bugs within a kernel module. + + + + +Acknowledgments + I'd like to thank Thomas Gleixner and Benedikt Spranger of + Linutronix, who have not only written most of the UIO code, but also + helped greatly writing this HOWTO by giving me all kinds of background + information. + + + +Feedback + Find something wrong with this document? (Or perhaps something + right?) I would love to hear from you. Please email me at + hjk@linutronix.de. + + + + + +About UIO + +If you use UIO for your card's driver, here's what you get: + + + + only one small kernel module to write and maintain. + + + develop the main part of your driver in user space, + with all the tools and libraries you're used to. + + + bugs in your driver won't crash the kernel. + + + updates of your driver can take place without recompiling + the kernel. + + + if you need to keep some parts of your driver closed source, + you can do so without violating the GPL license on the kernel. + + + + +How UIO works + + Each UIO device is accessed through a device file and several + sysfs attribute files. The device file will be called + /dev/uio0 for the first device, and + /dev/uio1, /dev/uio2 + and so on for subsequent devices. + + + /dev/uioX is used to access the + address space of the card. Just use + mmap() to access registers or RAM + locations of your card. + + + + Interrupts are handled by reading from + /dev/uioX. A blocking + read() from + /dev/uioX will return as soon as an + interrupt occurs. You can also use + select() on + /dev/uioX to wait for an interrupt. The + integer value read from /dev/uioX + represents the total interrupt count. You can use this number + to figure out if you missed some interrupts. + + + + To handle interrupts properly, your custom kernel module can + provide its own interrupt handler. It will automatically be + called by the built-in handler. + + + + For cards that don't generate interrupts but need to be + polled, there is the possibility to set up a timer that + triggers the interrupt handler at configurable time intervals. + See drivers/uio/uio_dummy.c for an + example of this technique. + + + + Each driver provides attributes that are used to read or write + variables. These attributes are accessible through sysfs + files. A custom kernel driver module can add its own + attributes to the device owned by the uio driver, but not added + to the UIO device itself at this time. This might change in the + future if it would be found to be useful. + + + + The following standard attributes are provided by the UIO + framework: + + + + + name: The name of your device. It is + recommended to use the name of your kernel module for this. + + + + + version: A version string defined by your + driver. This allows the user space part of your driver to deal + with different versions of the kernel module. + + + + + event: The total number of interrupts + handled by the driver since the last time the device node was + read. + + + + + These attributes appear under the + /sys/class/uio/uioX directory. Please + note that this directory might be a symlink, and not a real + directory. Any userspace code that accesses it must be able + to handle this. + + + Each UIO device can make one or more memory regions available for + memory mapping. This is necessary because some industrial I/O cards + require access to more than one PCI memory region in a driver. + + + Each mapping has its own directory in sysfs, the first mapping + appears as /sys/class/uio/uioX/maps/map0/. + Subsequent mappings create directories map1/, + map2/, and so on. These directories will only + appear if the size of the mapping is not 0. + + + Each mapX/ directory contains two read-only files + that show start address and size of the memory: + + + + + addr: The address of memory that can be mapped. + + + + + size: The size, in bytes, of the memory + pointed to by addr. + + + + + + From userspace, the different mappings are distinguished by adjusting + the offset parameter of the + mmap() call. To map the memory of mapping N, you + have to use N times the page size as your offset: + + +offset = N * getpagesize(); + + + + + + + +Using uio_dummy + + Well, there is no real use for uio_dummy. Its only purpose is + to test most parts of the UIO system (everything except + hardware interrupts), and to serve as an example for the + kernel module that you will have to write yourself. + + + +What uio_dummy does + + The kernel module uio_dummy.ko creates a + device that uses a timer to generate periodic interrupts. The + interrupt handler does nothing but increment a counter. The + driver adds two custom attributes, count + and freq, that appear under + /sys/devices/platform/uio_dummy/. + + + + The attribute count can be read and + written. The associated file + /sys/devices/platform/uio_dummy/count + appears as a normal text file and contains the total number of + timer interrupts. If you look at it (e.g. using + cat), you'll notice it is slowly counting + up. + + + + The attribute freq can be read and written. + The content of + /sys/devices/platform/uio_dummy/freq + represents the number of system timer ticks between two timer + interrupts. The default value of freq is + the value of the kernel variable HZ, which + gives you an interval of one second. Lower values will + increase the frequency. Try the following: + + +cd /sys/devices/platform/uio_dummy/ +echo 100 > freq + + + Use cat count to see how the interrupt + frequency changes. + + + + + + +Writing your own kernel module + + Please have a look at uio_dummy.c as an + example. The following paragraphs explain the different + sections of this file. + + + +struct uio_info + + This structure tells the framework the details of your driver, + Some of the members are required, others are optional. + + + + +char *name: Required. The name of your driver as +it will appear in sysfs. I recommend using the name of your module for this. + + + +char *version: Required. This string appears in +/sys/class/uio/uioX/version. + + + +struct uio_mem mem[ MAX_UIO_MAPS ]: Required if you +have memory that can be mapped with mmap(). For each +mapping you need to fill one of the uio_mem structures. +See the description below for details. + + + +long irq: Required. If your hardware generates an +interrupt, it's your modules task to determine the irq number during +initialization. If you don't have a hardware generated interrupt but +want to trigger the interrupt handler in some other way, set +irq to UIO_IRQ_CUSTOM. The +uio_dummy module does this as it triggers the event mechanism in a timer +routine. If you had no interrupt at all, you could set +irq to UIO_IRQ_NONE, though this +rarely makes sense. + + + +unsigned long irq_flags: Required if you've set +irq to a hardware interrupt number. The flags given +here will be used in the call to request_irq(). + + + +int (*mmap)(struct uio_info *info, struct vm_area_struct +*vma): Optional. If you need a special +mmap() function, you can set it here. If this +pointer is not NULL, your mmap() will be called +instead of the built-in one. + + + +int (*open)(struct uio_info *info, struct inode *inode) +: Optional. You might want to have your own +open(), e.g. to enable interrupts only when your +device is actually used. + + + +int (*release)(struct uio_info *info, struct inode *inode) +: Optional. If you define your own +open(), you will probably also want a custom +release() function. + + + + +Usually, your device will have one or more memory regions that can be mapped +to user space. For each region, you have to set up a +struct uio_mem in the mem[] array. +Here's a description of the fields of struct uio_mem: + + + + +int memtype: Required if the mapping is used. Set this to +UIO_MEM_PHYS if you you have physical memory on your +card to be mapped. Use UIO_MEM_LOGICAL for logical +memory (e.g. allocated with kmalloc()). There's also +UIO_MEM_VIRTUAL for virtual memory. + + + +unsigned long addr: Required if the mapping is used. +Fill in the address of your memory block. This address is the one that +appears in sysfs. + + + +unsigned long size: Fill in the size of the +memory block that addr points to. If size +is zero, the mapping is considered unused. Note that you +must initialize size with zero for +all unused mappings. + + + +void *internal_addr: If you have to access this memory +region from within your kernel module, you will want to map it internally by +using something like ioremap(). Addresses +returned by this function cannot be mapped to user space, so you must not +store it in addr. Use internal_addr +instead to remember such an address. + + + + +Please do not touch the kobj element of +struct uio_mem! It is used by the UIO framework +to set up sysfs files for this mapping. Simply leave it alone. + + + + +Adding an interrupt handler + + What you need to do in your interrupt handler depends on your + hardware and on how you want to handle it. You should try to + keep the amount of code in your kernel interrupt handler low. + If your hardware requires no action that you + have to perform after each interrupt, + then your handler can be empty. If, on the other + hand, your hardware needs some action to + be performed after each interrupt, then you + must do it in your kernel module. Note + that you cannot rely on the userspace part of your driver. Your + userspace program can terminate at any time, possibly leaving + your hardware in a state where proper interrupt handling is + still required. + + + + There might also be applications where you want to read data + from your hardware at each interrupt and buffer it in a piece + of kernel memory you've allocated for that purpose. With this + technique you could avoid loss of data if your userspace + program misses an interrupt. + + + + A note on shared interrupts: Your driver should support + interrupt sharing whenever this is possible. It is possible if + and only if your driver can detect whether your hardware has + triggered the interrupt or not. This is usually done by looking + at an interrupt status register. If your driver sees that the + IRQ bit is actually set, it will perform its actions, and the + handler returns IRQ_HANDLED. If the driver detects that it was + not your hardware that caused the interrupt, it will do nothing + and return IRQ_NONE, allowing the kernel to call the next + possible interrupt handler. + + + + If you decide not to support shared interrupts, your card + won't work in computers with no free interrupts. As this + frequently happens on the PC platform, you can save yourself a + lot of trouble by supporting interrupt sharing. + + + + + + + +Writing a driver in userspace + + Once you have a working kernel module for your hardware, you can + write the userspace part of your driver. You don't need any special + libraries, your driver can be written in any reasonable language, + you can use floating point numbers and so on. In short, you can + use all the tools and libraries you'd normally use for writing a + userspace application. + + + +Getting information about your UIO device + + Information about all UIO devices is available in sysfs. The + first thing you should do in your driver is check + name and version to + make sure your talking to the right device and that its kernel + driver has the version you expect. + + + You should also make sure that the memory mapping you need + exists and has the size you expect. + + + There is a tool called lsuio that lists + UIO devices and their attributes. It is available here: + + + + http://www.osadl.org/projects/downloads/UIO/user/ + + + With lsuio you can quickly check if your + kernel module is loaded and which attributes it exports. + Have a look at the manpage for details. + + + The source code of lsuio can serve as an + example for getting information about an UIO device. + The file uio_helper.c contains a lot of + functions you could use in your userspace driver code. + + + + +mmap() device memory + + After you made sure you've got the right device with the + memory mappings you need, all you have to do is to call + mmap() to map the device's memory + to userspace. + + + The parameter offset of the + mmap() call has a special meaning + for UIO devices: It is used to select which mapping of + your device you want to map. To map the memory of + mapping N, you have to use N times the page size as + your offset: + + + offset = N * getpagesize(); + + + N starts from zero, so if you've got only one memory + range to map, set offset = 0. + A drawback of this technique is that memory is always + mapped beginning with its start address. + + + + +Waiting for interrupts + + After you successfully mapped your devices memory, you + can access it like an ordinary array. Usually, you will + perform some initialization. After that, your hardware + starts working and will generate an interrupt as soon + as it's finished, has some data available, or needs your + attention because an error occured. + + + /dev/uioX is a read-only file. A + read() will always block until an + interrupt occurs. There is only one legal value for the + count parameter of + read(), and that is the size of a + signed 32 bit integer (4). Any other value for + count causes read() + to fail. The signed 32 bit integer read is the interrupt + count of your device. If the value is one more than the value + you read the last time, everything is OK. If the difference + is greater than one, you missed interrupts. + + + You can also use select() on + /dev/uioX. + + + + + + +Further information + + + + OSADL homepage. + + + + Linutronix homepage. + + + + +
diff --git a/trunk/Documentation/HOWTO b/trunk/Documentation/HOWTO index 98e2701c746f..f8cc3f8ed152 100644 --- a/trunk/Documentation/HOWTO +++ b/trunk/Documentation/HOWTO @@ -249,6 +249,9 @@ process is as follows: release a new -rc kernel every week. - Process continues until the kernel is considered "ready", the process should last around 6 weeks. + - A list of known regressions present in each -rc release is + tracked at the following URI: + http://kernelnewbies.org/known_regressions It is worth mentioning what Andrew Morton wrote on the linux-kernel mailing list about kernel releases: diff --git a/trunk/Documentation/connector/cn_test.c b/trunk/Documentation/connector/cn_test.c index 3e73231695b3..be7af146dd30 100644 --- a/trunk/Documentation/connector/cn_test.c +++ b/trunk/Documentation/connector/cn_test.c @@ -124,9 +124,8 @@ static void cn_test_timer_func(unsigned long __data) struct cn_msg *m; char data[32]; - m = kmalloc(sizeof(*m) + sizeof(data), GFP_ATOMIC); + m = kzalloc(sizeof(*m) + sizeof(data), GFP_ATOMIC); if (m) { - memset(m, 0, sizeof(*m) + sizeof(data)); memcpy(&m->id, &cn_test_id, sizeof(m->id)); m->seq = cn_test_timer_counter; diff --git a/trunk/Documentation/console/console.txt b/trunk/Documentation/console/console.txt index d3e17447321c..877a1b26cc3d 100644 --- a/trunk/Documentation/console/console.txt +++ b/trunk/Documentation/console/console.txt @@ -29,7 +29,7 @@ In newer kernels, the following are also available: If sysfs is enabled, the contents of /sys/class/vtconsole can be examined. This shows the console backends currently registered by the -system which are named vtcon where is an integer fro 0 to 15. Thus: +system which are named vtcon where is an integer from 0 to 15. Thus: ls /sys/class/vtconsole . .. vtcon0 vtcon1 diff --git a/trunk/Documentation/driver-model/devres.txt b/trunk/Documentation/driver-model/devres.txt index 6c8d8f27db34..8569072fa387 100644 --- a/trunk/Documentation/driver-model/devres.txt +++ b/trunk/Documentation/driver-model/devres.txt @@ -207,7 +207,7 @@ responsibility. This is usually non-issue because bus ops and resource allocations already do the job. For an example of single-instance devres type, read pcim_iomap_table() -in lib/iomap.c. +in lib/devres.c. All devres interface functions can be called without context if the right gfp mask is given. diff --git a/trunk/Documentation/drivers/edac/edac.txt b/trunk/Documentation/drivers/edac/edac.txt index 3c5a9e4297b4..a5c36842ecef 100644 --- a/trunk/Documentation/drivers/edac/edac.txt +++ b/trunk/Documentation/drivers/edac/edac.txt @@ -2,22 +2,42 @@ EDAC - Error Detection And Correction -Written by Doug Thompson +Written by Doug Thompson 7 Dec 2005 +17 Jul 2007 Updated -EDAC was written by: - Thayne Harbaugh, - modified by Dave Peterson, Doug Thompson, et al, - from the bluesmoke.sourceforge.net project. +EDAC is maintained and written by: + Doug Thompson, Dave Jiang, Dave Peterson et al, + original author: Thayne Harbaugh, + +Contact: + website: bluesmoke.sourceforge.net + mailing list: bluesmoke-devel@lists.sourceforge.net + +"bluesmoke" was the name for this device driver when it was "out-of-tree" +and maintained at sourceforge.net. When it was pushed into 2.6.16 for the +first time, it was renamed to 'EDAC'. + +The bluesmoke project at sourceforge.net is now utilized as a 'staging area' +for EDAC development, before it is sent upstream to kernel.org + +At the bluesmoke/EDAC project site, is a series of quilt patches against +recent kernels, stored in a SVN respository. For easier downloading, there +is also a tarball snapshot available. ============================================================================ EDAC PURPOSE The 'edac' kernel module goal is to detect and report errors that occur -within the computer system. In the initial release, memory Correctable Errors -(CE) and Uncorrectable Errors (UE) are the primary errors being harvested. +within the computer system running under linux. + +MEMORY + +In the initial release, memory Correctable Errors (CE) and Uncorrectable +Errors (UE) are the primary errors being harvested. These types of errors +are harvested by the 'edac_mc' class of device. Detecting CE events, then harvesting those events and reporting them, CAN be a predictor of future UE events. With CE events, the system can @@ -25,9 +45,27 @@ continue to operate, but with less safety. Preventive maintenance and proactive part replacement of memory DIMMs exhibiting CEs can reduce the likelihood of the dreaded UE events and system 'panics'. +NON-MEMORY + +A new feature for EDAC, the edac_device class of device, was added in +the 2.6.23 version of the kernel. + +This new device type allows for non-memory type of ECC hardware detectors +to have their states harvested and presented to userspace via the sysfs +interface. + +Some architectures have ECC detectors for L1, L2 and L3 caches, along with DMA +engines, fabric switches, main data path switches, interconnections, +and various other hardware data paths. If the hardware reports it, then +a edac_device device probably can be constructed to harvest and present +that to userspace. + + +PCI BUS SCANNING In addition, PCI Bus Parity and SERR Errors are scanned for on PCI devices in order to determine if errors are occurring on data transfers. + The presence of PCI Parity errors must be examined with a grain of salt. There are several add-in adapters that do NOT follow the PCI specification with regards to Parity generation and reporting. The specification says @@ -35,11 +73,17 @@ the vendor should tie the parity status bits to 0 if they do not intend to generate parity. Some vendors do not do this, and thus the parity bit can "float" giving false positives. -[There are patches in the kernel queue which will allow for storage of -quirks of PCI devices reporting false parity positives. The 2.6.18 -kernel should have those patches included. When that becomes available, -then EDAC will be patched to utilize that information to "skip" such -devices.] +In the kernel there is a pci device attribute located in sysfs that is +checked by the EDAC PCI scanning code. If that attribute is set, +PCI parity/error scannining is skipped for that device. The attribute +is: + + broken_parity_status + +as is located in /sys/devices/pci/0000:XX:YY.Z directorys for +PCI devices. + +FUTURE HARDWARE SCANNING EDAC will have future error detectors that will be integrated with EDAC or added to it, in the following list: @@ -57,13 +101,14 @@ and the like. ============================================================================ EDAC VERSIONING -EDAC is composed of a "core" module (edac_mc.ko) and several Memory +EDAC is composed of a "core" module (edac_core.ko) and several Memory Controller (MC) driver modules. On a given system, the CORE is loaded and one MC driver will be loaded. Both the CORE and -the MC driver have individual versions that reflect current release -level of their respective modules. Thus, to "report" on what version -a system is running, one must report both the CORE's and the -MC driver's versions. +the MC driver (or edac_device driver) have individual versions that reflect +current release level of their respective modules. + +Thus, to "report" on what version a system is running, one must report both +the CORE's and the MC driver's versions. LOADING @@ -88,8 +133,9 @@ EDAC sysfs INTERFACE EDAC presents a 'sysfs' interface for control, reporting and attribute reporting purposes. -EDAC lives in the /sys/devices/system/edac directory. Within this directory -there currently reside 2 'edac' components: +EDAC lives in the /sys/devices/system/edac directory. + +Within this directory there currently reside 2 'edac' components: mc memory controller(s) system pci PCI control and status system @@ -188,7 +234,7 @@ In directory 'mc' are EDAC system overall control and attribute files: Panic on UE control file: - 'panic_on_ue' + 'edac_mc_panic_on_ue' An uncorrectable error will cause a machine panic. This is usually desirable. It is a bad idea to continue when an uncorrectable error @@ -199,12 +245,12 @@ Panic on UE control file: LOAD TIME: module/kernel parameter: panic_on_ue=[0|1] - RUN TIME: echo "1" >/sys/devices/system/edac/mc/panic_on_ue + RUN TIME: echo "1" >/sys/devices/system/edac/mc/edac_mc_panic_on_ue Log UE control file: - 'log_ue' + 'edac_mc_log_ue' Generate kernel messages describing uncorrectable errors. These errors are reported through the system message log system. UE statistics @@ -212,12 +258,12 @@ Log UE control file: LOAD TIME: module/kernel parameter: log_ue=[0|1] - RUN TIME: echo "1" >/sys/devices/system/edac/mc/log_ue + RUN TIME: echo "1" >/sys/devices/system/edac/mc/edac_mc_log_ue Log CE control file: - 'log_ce' + 'edac_mc_log_ce' Generate kernel messages describing correctable errors. These errors are reported through the system message log system. @@ -225,12 +271,12 @@ Log CE control file: LOAD TIME: module/kernel parameter: log_ce=[0|1] - RUN TIME: echo "1" >/sys/devices/system/edac/mc/log_ce + RUN TIME: echo "1" >/sys/devices/system/edac/mc/edac_mc_log_ce Polling period control file: - 'poll_msec' + 'edac_mc_poll_msec' The time period, in milliseconds, for polling for error information. Too small a value wastes resources. Too large a value might delay @@ -241,7 +287,7 @@ Polling period control file: LOAD TIME: module/kernel parameter: poll_msec=[0|1] - RUN TIME: echo "1000" >/sys/devices/system/edac/mc/poll_msec + RUN TIME: echo "1000" >/sys/devices/system/edac/mc/edac_mc_poll_msec ============================================================================ @@ -587,3 +633,95 @@ Parity Count: ======================================================================= + + +EDAC_DEVICE type of device + +In the header file, edac_core.h, there is a series of edac_device structures +and APIs for the EDAC_DEVICE. + +User space access to an edac_device is through the sysfs interface. + +At the location /sys/devices/system/edac (sysfs) new edac_device devices will +appear. + +There is a three level tree beneath the above 'edac' directory. For example, +the 'test_device_edac' device (found at the bluesmoke.sourceforget.net website) +installs itself as: + + /sys/devices/systm/edac/test-instance + +in this directory are various controls, a symlink and one or more 'instance' +directorys. + +The standard default controls are: + + log_ce boolean to log CE events + log_ue boolean to log UE events + panic_on_ue boolean to 'panic' the system if an UE is encountered + (default off, can be set true via startup script) + poll_msec time period between POLL cycles for events + +The test_device_edac device adds at least one of its own custom control: + + test_bits which in the current test driver does nothing but + show how it is installed. A ported driver can + add one or more such controls and/or attributes + for specific uses. + One out-of-tree driver uses controls here to allow + for ERROR INJECTION operations to hardware + injection registers + +The symlink points to the 'struct dev' that is registered for this edac_device. + +INSTANCES + +One or more instance directories are present. For the 'test_device_edac' case: + + test-instance0 + + +In this directory there are two default counter attributes, which are totals of +counter in deeper subdirectories. + + ce_count total of CE events of subdirectories + ue_count total of UE events of subdirectories + +BLOCKS + +At the lowest directory level is the 'block' directory. There can be 0, 1 +or more blocks specified in each instance. + + test-block0 + + +In this directory the default attributes are: + + ce_count which is counter of CE events for this 'block' + of hardware being monitored + ue_count which is counter of UE events for this 'block' + of hardware being monitored + + +The 'test_device_edac' device adds 4 attributes and 1 control: + + test-block-bits-0 for every POLL cycle this counter + is incremented + test-block-bits-1 every 10 cycles, this counter is bumped once, + and test-block-bits-0 is set to 0 + test-block-bits-2 every 100 cycles, this counter is bumped once, + and test-block-bits-1 is set to 0 + test-block-bits-3 every 1000 cycles, this counter is bumped once, + and test-block-bits-2 is set to 0 + + + reset-counters writing ANY thing to this control will + reset all the above counters. + + +Use of the 'test_device_edac' driver should any others to create their own +unique drivers for their hardware systems. + +The 'test_device_edac' sample driver is located at the +bluesmoke.sourceforge.net project site for EDAC. + diff --git a/trunk/Documentation/dvb/bt8xx.txt b/trunk/Documentation/dvb/bt8xx.txt index 4e7614e606c5..ecb47adda063 100644 --- a/trunk/Documentation/dvb/bt8xx.txt +++ b/trunk/Documentation/dvb/bt8xx.txt @@ -9,19 +9,29 @@ for accessing the i2c bus and the gpio pins of the bt8xx chipset. Please see Documentation/dvb/cards.txt => o Cards based on the Conexant Bt8xx PCI bridge: Compiling kernel please enable: -a.)"Device drivers" => "Multimedia devices" => "Video For Linux" => "BT848 Video For Linux" -b.)"Device drivers" => "Multimedia devices" => "Digital Video Broadcasting Devices" - => "DVB for Linux" "DVB Core Support" "Bt8xx based PCI Cards" +a.)"Device drivers" => "Multimedia devices" => "Video For Linux" => "Enable Video for Linux API 1 (DEPRECATED)" +b.)"Device drivers" => "Multimedia devices" => "Video For Linux" => "Video Capture Adapters" => "BT848 Video For Linux" +c.)"Device drivers" => "Multimedia devices" => "Digital Video Broadcasting Devices" => "DVB for Linux" "DVB Core Support" "Bt8xx based PCI Cards" -2) Loading Modules -================== +Please use the following options with care as deselection of drivers which are in fact necessary +may result in DVB devices that cannot be tuned due to lack of driver support: +You can save RAM by deselecting every frontend module that your DVB card does not need. + +First please remove the static dependency of DVB card drivers on all frontend modules for all possible card variants by enabling: +d.) "Device drivers" => "Multimedia devices" => "Digital Video Broadcasting Devices" + => "DVB for Linux" "DVB Core Support" "Load and attach frontend modules as needed" -In default cases bttv is loaded automatically. -To load the backend either place dvb-bt8xx in etc/modules, or apply manually: +If you know the frontend driver that your card needs please enable: +e.)"Device drivers" => "Multimedia devices" => "Digital Video Broadcasting Devices" + => "DVB for Linux" "DVB Core Support" "Customise DVB Frontends" => "Customise the frontend modules to build" + Then please select your card-specific frontend module. - $ modprobe dvb-bt8xx +2) Loading Modules +================== -All frontends will be loaded automatically. +Regular case: If the bttv driver detects a bt8xx-based DVB card, all frontend and backend modules will be loaded automatically. +Exceptions are: +- Old TwinHan DST cards or clones with or without CA slot and not containing an Eeprom. People running udev please see Documentation/dvb/udev.txt. In the following cases overriding the PCI type detection for dvb-bt8xx might be necessary: @@ -30,7 +40,6 @@ In the following cases overriding the PCI type detection for dvb-bt8xx might be ------------------------------ $ modprobe bttv card=113 - $ modprobe dvb-bt8xx $ modprobe dst Useful parameters for verbosity level and debugging the dst module: @@ -65,10 +74,9 @@ DViCO FusionHDTV 5 Lite: 135 Notice: The order of the card ID should be uprising: Example: $ modprobe bttv card=113 card=135 - $ modprobe dvb-bt8xx For a full list of card ID's please see Documentation/video4linux/CARDLIST.bttv. -In case of further problems send questions to the mailing list: www.linuxdvb.org. +In case of further problems please subscribe and send questions to the mailing list: linux-dvb@linuxtv.org. Authors: Richard Walker, Jamie Honan, diff --git a/trunk/Documentation/dvb/get_dvb_firmware b/trunk/Documentation/dvb/get_dvb_firmware index 4820366b6ae8..b4d306ae9234 100644 --- a/trunk/Documentation/dvb/get_dvb_firmware +++ b/trunk/Documentation/dvb/get_dvb_firmware @@ -24,7 +24,8 @@ use IO::Handle; @components = ( "sp8870", "sp887x", "tda10045", "tda10046", "tda10046lifeview", "av7110", "dec2000t", "dec2540t", "dec3000s", "vp7041", "dibusb", "nxt2002", "nxt2004", - "or51211", "or51132_qam", "or51132_vsb", "bluebird"); + "or51211", "or51132_qam", "or51132_vsb", "bluebird", + "opera1"); # Check args syntax() if (scalar(@ARGV) != 1); @@ -56,7 +57,7 @@ syntax(); sub sp8870 { my $sourcefile = "tt_Premium_217g.zip"; - my $url = "http://www.technotrend.de/new/217g/$sourcefile"; + my $url = "http://www.softwarepatch.pl/9999ccd06a4813cb827dbb0005071c71/$sourcefile"; my $hash = "53970ec17a538945a6d8cb608a7b3899"; my $outfile = "dvb-fe-sp8870.fw"; my $tmpdir = tempdir(DIR => "/tmp", CLEANUP => 1); @@ -210,6 +211,45 @@ sub dec3000s { $outfile; } +sub opera1{ + my $tmpdir = tempdir(DIR => "/tmp", CLEANUP => 0); + + checkstandard(); + my $fwfile1="dvb-usb-opera1-fpga-01.fw"; + my $fwfile2="dvb-usb-opera-01.fw"; + extract("2830SCap2.sys", 0x62e8, 55024, "$tmpdir/opera1-fpga.fw"); + extract("2830SLoad2.sys",0x3178,0x3685-0x3178,"$tmpdir/fw1part1"); + extract("2830SLoad2.sys",0x0980,0x3150-0x0980,"$tmpdir/fw1part2"); + delzero("$tmpdir/fw1part1","$tmpdir/fw1part1-1"); + delzero("$tmpdir/fw1part2","$tmpdir/fw1part2-1"); + verify("$tmpdir/fw1part1-1","5e0909858fdf0b5b09ad48b9fe622e70"); + verify("$tmpdir/fw1part2-1","d6e146f321427e931df2c6fcadac37a1"); + verify("$tmpdir/opera1-fpga.fw","0f8133f5e9051f5f3c1928f7e5a1b07d"); + + my $RES1="\x01\x92\x7f\x00\x01\x00"; + my $RES0="\x01\x92\x7f\x00\x00\x00"; + my $DAT1="\x01\x00\xe6\x00\x01\x00"; + my $DAT0="\x01\x00\xe6\x00\x00\x00"; + open FW,">$tmpdir/opera.fw"; + print FW "$RES1"; + print FW "$DAT1"; + print FW "$RES1"; + print FW "$DAT1"; + appendfile(FW,"$tmpdir/fw1part1-1"); + print FW "$RES0"; + print FW "$DAT0"; + print FW "$RES1"; + print FW "$DAT1"; + appendfile(FW,"$tmpdir/fw1part2-1"); + print FW "$RES1"; + print FW "$DAT1"; + print FW "$RES0"; + print FW "$DAT0"; + copy ("$tmpdir/opera1-fpga.fw",$fwfile1); + copy ("$tmpdir/opera.fw",$fwfile2); + + $fwfile1.",".$fwfile2; +} sub vp7041 { my $sourcefile = "2.422.zip"; @@ -440,6 +480,25 @@ sub appendfile { close(INFILE); } +sub delzero{ + my ($infile,$outfile) =@_; + + open INFILE,"<$infile"; + open OUTFILE,">$outfile"; + while (1){ + $rcount=sysread(INFILE,$buf,22); + $len=ord(substr($buf,0,1)); + print OUTFILE substr($buf,0,1); + print OUTFILE substr($buf,2,$len+3); + last if ($rcount<1); + printf OUTFILE "%c",0; +#print $len." ".length($buf)."\n"; + + } + close(INFILE); + close(OUTFILE); +} + sub syntax() { print STDERR "syntax: get_dvb_firmware \n"; print STDERR "Supported components:\n"; diff --git a/trunk/Documentation/dvb/opera-firmware.txt b/trunk/Documentation/dvb/opera-firmware.txt new file mode 100644 index 000000000000..93e784c2607b --- /dev/null +++ b/trunk/Documentation/dvb/opera-firmware.txt @@ -0,0 +1,27 @@ +To extract the firmware for the Opera DVB-S1 USB-Box +you need to copy the files: + +2830SCap2.sys +2830SLoad2.sys + +from the windriver disk into this directory. + +Then run + +./get_dvb_firware opera1 + +and after that you have 2 files: + +dvb-usb-opera-01.fw +dvb-usb-opera1-fpga-01.fw + +in here. + +Copy them into /lib/firmware/ . + +After that the driver can load the firmware +(if you have enabled firmware loading +in kernel config and have hotplug running). + + +Marco Gittler \ No newline at end of file diff --git a/trunk/Documentation/feature-removal-schedule.txt b/trunk/Documentation/feature-removal-schedule.txt index d05e6243b4df..c175eedadb5f 100644 --- a/trunk/Documentation/feature-removal-schedule.txt +++ b/trunk/Documentation/feature-removal-schedule.txt @@ -26,9 +26,7 @@ Who: Hans Verkuil and --------------------------- -What: /sys/devices/.../power/state - dev->power.power_state - dpm_runtime_{suspend,resume)() +What: dev->power.power_state When: July 2007 Why: Broken design for runtime control over driver power states, confusing driver-internal runtime power management with: mechanisms to support @@ -53,6 +51,7 @@ Who: David Miller What: Video4Linux API 1 ioctls and video_decoder.h from Video devices. When: December 2006 Files: include/linux/video_decoder.h +Check: include/linux/video_decoder.h Why: V4L1 AP1 was replaced by V4L2 API. during migration from 2.4 to 2.6 series. The old API have lots of drawbacks and don't provide enough means to work with all video and audio standards. The newer API is @@ -86,7 +85,7 @@ Who: Dominik Brodowski What: remove EXPORT_SYMBOL(kernel_thread) When: August 2006 Files: arch/*/kernel/*_ksyms.c -Funcs: kernel_thread +Check: kernel_thread Why: kernel_thread is a low-level implementation detail. Drivers should use the API instead which shields them from implementation details and provides a higherlevel interface that @@ -137,6 +136,15 @@ Who: Greg Kroah-Hartman --------------------------- +What: vm_ops.nopage +When: Soon, provided in-kernel callers have been converted +Why: This interface is replaced by vm_ops.fault, but it has been around + forever, is used by a lot of drivers, and doesn't cost much to + maintain. +Who: Nick Piggin + +--------------------------- + What: Interrupt only SA_* flags When: September 2007 Why: The interrupt related SA_* flags are replaced by IRQF_* to move them @@ -156,15 +164,6 @@ Who: Kay Sievers --------------------------- -What: i2c-isa -When: December 2006 -Why: i2c-isa is a non-sense and doesn't fit in the device driver - model. Drivers relying on it are better implemented as platform - drivers. -Who: Jean Delvare - ---------------------------- - What: i2c_adapter.list When: July 2007 Why: Superfluous, this list duplicates the one maintained by the driver @@ -181,24 +180,11 @@ Who: Adrian Bunk --------------------------- -What: /sys/firmware/acpi/namespace -When: 2.6.21 -Why: The ACPI namespace is effectively the symbol list for - the BIOS. The device names are completely arbitrary - and have no place being exposed to user-space. - - For those interested in the BIOS ACPI namespace, - the BIOS can be extracted and disassembled with acpidump - and iasl as documented in the pmtools package here: - http://ftp.kernel.org/pub/linux/kernel/people/lenb/acpi/utils -Who: Len Brown - ---------------------------- - What: ACPI procfs interface -When: July 2007 -Why: After ACPI sysfs conversion, ACPI attributes will be duplicated - in sysfs and the ACPI procfs interface should be removed. +When: July 2008 +Why: ACPI sysfs conversion should be finished by January 2008. + ACPI procfs interface will be removed in July 2008 so that + there is enough time for the user space to catch up. Who: Zhang Rui --------------------------- @@ -310,3 +296,13 @@ Why: The arch/powerpc tree is the merged architecture for ppc32 and ppc64 Who: linuxppc-dev@ozlabs.org --------------------------- + +What: mthca driver's MSI support +When: January 2008 +Files: drivers/infiniband/hw/mthca/*.[ch] +Why: All mthca hardware also supports MSI-X, which provides + strictly more functionality than MSI. So there is no point in + having both MSI-X and MSI support in the driver. +Who: Roland Dreier + +--------------------------- diff --git a/trunk/Documentation/filesystems/Locking b/trunk/Documentation/filesystems/Locking index d866551be037..f0f825808ca4 100644 --- a/trunk/Documentation/filesystems/Locking +++ b/trunk/Documentation/filesystems/Locking @@ -510,13 +510,24 @@ More details about quota locking can be found in fs/dquot.c. prototypes: void (*open)(struct vm_area_struct*); void (*close)(struct vm_area_struct*); + int (*fault)(struct vm_area_struct*, struct vm_fault *); struct page *(*nopage)(struct vm_area_struct*, unsigned long, int *); + int (*page_mkwrite)(struct vm_area_struct *, struct page *); locking rules: - BKL mmap_sem + BKL mmap_sem PageLocked(page) open: no yes close: no yes +fault: no yes nopage: no yes +page_mkwrite: no yes no + + ->page_mkwrite() is called when a previously read-only page is +about to become writeable. The file system is responsible for +protecting against truncate races. Once appropriate action has been +taking to lock out truncate, the page range should be verified to be +within i_size. The page mapping should also be checked that it is not +NULL. ================================================================================ Dubious stuff diff --git a/trunk/Documentation/filesystems/configfs/configfs_example.c b/trunk/Documentation/filesystems/configfs/configfs_example.c index e56d49264b39..25151fd5c2c6 100644 --- a/trunk/Documentation/filesystems/configfs/configfs_example.c +++ b/trunk/Documentation/filesystems/configfs/configfs_example.c @@ -277,11 +277,10 @@ static struct config_item *simple_children_make_item(struct config_group *group, { struct simple_child *simple_child; - simple_child = kmalloc(sizeof(struct simple_child), GFP_KERNEL); + simple_child = kzalloc(sizeof(struct simple_child), GFP_KERNEL); if (!simple_child) return NULL; - memset(simple_child, 0, sizeof(struct simple_child)); config_item_init_type_name(&simple_child->item, name, &simple_child_type); @@ -364,12 +363,11 @@ static struct config_group *group_children_make_group(struct config_group *group { struct simple_children *simple_children; - simple_children = kmalloc(sizeof(struct simple_children), + simple_children = kzalloc(sizeof(struct simple_children), GFP_KERNEL); if (!simple_children) return NULL; - memset(simple_children, 0, sizeof(struct simple_children)); config_group_init_type_name(&simple_children->group, name, &simple_children_type); diff --git a/trunk/Documentation/filesystems/proc.txt b/trunk/Documentation/filesystems/proc.txt index ebffdffb3d99..4a37e25e694c 100644 --- a/trunk/Documentation/filesystems/proc.txt +++ b/trunk/Documentation/filesystems/proc.txt @@ -42,6 +42,7 @@ Table of Contents 2.12 /proc//oom_adj - Adjust the oom-killer score 2.13 /proc//oom_score - Display current oom-killer score 2.14 /proc//io - Display the IO accounting fields + 2.15 /proc//coredump_filter - Core dump filtering settings ------------------------------------------------------------------------------ Preface @@ -1065,6 +1066,13 @@ check the amount of free space (value is in seconds). Default settings are: 4, resume it if we have a value of 3 or more percent; consider information about the amount of free space valid for 30 seconds +audit_argv_kb +------------- + +The file contains a single value denoting the limit on the argv array size +for execve (in KiB). This limit is only applied when system call auditing for +execve is enabled, otherwise the value is ignored. + ctrl-alt-del ------------ @@ -2177,4 +2185,41 @@ those 64-bit counters, process A could see an intermediate result. More information about this can be found within the taskstats documentation in Documentation/accounting. +2.15 /proc//coredump_filter - Core dump filtering settings +--------------------------------------------------------------- +When a process is dumped, all anonymous memory is written to a core file as +long as the size of the core file isn't limited. But sometimes we don't want +to dump some memory segments, for example, huge shared memory. Conversely, +sometimes we want to save file-backed memory segments into a core file, not +only the individual files. + +/proc//coredump_filter allows you to customize which memory segments +will be dumped when the process is dumped. coredump_filter is a bitmask +of memory types. If a bit of the bitmask is set, memory segments of the +corresponding memory type are dumped, otherwise they are not dumped. + +The following 4 memory types are supported: + - (bit 0) anonymous private memory + - (bit 1) anonymous shared memory + - (bit 2) file-backed private memory + - (bit 3) file-backed shared memory + + Note that MMIO pages such as frame buffer are never dumped and vDSO pages + are always dumped regardless of the bitmask status. + +Default value of coredump_filter is 0x3; this means all anonymous memory +segments are dumped. + +If you don't want to dump all shared memory segments attached to pid 1234, +write 1 to the process's proc file. + + $ echo 0x1 > /proc/1234/coredump_filter + +When a new process is created, the process inherits the bitmask status from its +parent. It is useful to set up coredump_filter before the program runs. +For example: + + $ echo 0x7 > /proc/self/coredump_filter + $ ./some_program + ------------------------------------------------------------------------------ diff --git a/trunk/Documentation/gpio.txt b/trunk/Documentation/gpio.txt index 36af58eba136..218a8650f48d 100644 --- a/trunk/Documentation/gpio.txt +++ b/trunk/Documentation/gpio.txt @@ -75,6 +75,9 @@ using the include file: If you stick to this convention then it'll be easier for other developers to see what your code is doing, and help maintain it. +Note that these operations include I/O barriers on platforms which need to +use them; drivers don't need to add them explicitly. + Identifying GPIOs ----------------- diff --git a/trunk/Documentation/hwmon/abituguru b/trunk/Documentation/hwmon/abituguru index b2c0d61b39a2..87ffa0f5ec70 100644 --- a/trunk/Documentation/hwmon/abituguru +++ b/trunk/Documentation/hwmon/abituguru @@ -2,7 +2,7 @@ Kernel driver abituguru ======================= Supported chips: - * Abit uGuru revision 1-3 (Hardware Monitor part only) + * Abit uGuru revision 1 & 2 (Hardware Monitor part only) Prefix: 'abituguru' Addresses scanned: ISA 0x0E0 Datasheet: Not available, this driver is based on reverse engineering. @@ -20,8 +20,8 @@ Supported chips: uGuru 2.1.0.0 ~ 2.1.2.8 (AS8, AV8, AA8, AG8, AA8XE, AX8) uGuru 2.2.0.0 ~ 2.2.0.6 (AA8 Fatal1ty) uGuru 2.3.0.0 ~ 2.3.0.9 (AN8) - uGuru 3.0.0.0 ~ 3.0.1.2 (AW8, AL8, NI8) - uGuru 4.xxxxx? (AT8 32X) (2) + uGuru 3.0.0.0 ~ 3.0.x.x (AW8, AL8, AT8, NI8 SLI, AT8 32X, AN8 32X, + AW9D-MAX) (2) 1) For revisions 2 and 3 uGuru's the driver can autodetect the sensortype (Volt or Temp) for bank1 sensors, for revision 1 uGuru's this doesnot always work. For these uGuru's the autodection can @@ -30,8 +30,9 @@ Supported chips: bank1_types=1,1,0,0,0,0,0,2,0,0,0,0,2,0,0,1 You may also need to specify the fan_sensors option for these boards fan_sensors=5 - 2) The current version of the abituguru driver is known to NOT work - on these Motherboards + 2) There is a seperate abituguru3 driver for these motherboards, + the abituguru (without the 3 !) driver will not work on these + motherboards (and visa versa)! Authors: Hans de Goede , @@ -43,8 +44,10 @@ Module Parameters ----------------- * force: bool Force detection. Note this parameter only causes the - detection to be skipped, if the uGuru can't be read - the module initialization (insmod) will still fail. + detection to be skipped, and thus the insmod to + succeed. If the uGuru can't be read the actual hwmon + driver will not load and thus no hwmon device will get + registered. * bank1_types: int[] Bank1 sensortype autodetection override: -1 autodetect (default) 0 volt sensor @@ -69,13 +72,15 @@ dmesg | grep abituguru Description ----------- -This driver supports the hardware monitoring features of the Abit uGuru chip -found on Abit uGuru featuring motherboards (most modern Abit motherboards). +This driver supports the hardware monitoring features of the first and +second revision of the Abit uGuru chip found on Abit uGuru featuring +motherboards (most modern Abit motherboards). -The uGuru chip in reality is a Winbond W83L950D in disguise (despite Abit -claiming it is "a new microprocessor designed by the ABIT Engineers"). -Unfortunatly this doesn't help since the W83L950D is a generic -microcontroller with a custom Abit application running on it. +The first and second revision of the uGuru chip in reality is a Winbond +W83L950D in disguise (despite Abit claiming it is "a new microprocessor +designed by the ABIT Engineers"). Unfortunatly this doesn't help since the +W83L950D is a generic microcontroller with a custom Abit application running +on it. Despite Abit not releasing any information regarding the uGuru, Olle Sandberg has managed to reverse engineer the sensor part diff --git a/trunk/Documentation/hwmon/abituguru3 b/trunk/Documentation/hwmon/abituguru3 new file mode 100644 index 000000000000..fa598aac22fa --- /dev/null +++ b/trunk/Documentation/hwmon/abituguru3 @@ -0,0 +1,65 @@ +Kernel driver abituguru3 +======================== + +Supported chips: + * Abit uGuru revision 3 (Hardware Monitor part, reading only) + Prefix: 'abituguru3' + Addresses scanned: ISA 0x0E0 + Datasheet: Not available, this driver is based on reverse engineering. + Note: + The uGuru is a microcontroller with onboard firmware which programs + it to behave as a hwmon IC. There are many different revisions of the + firmware and thus effectivly many different revisions of the uGuru. + Below is an incomplete list with which revisions are used for which + Motherboards: + uGuru 1.00 ~ 1.24 (AI7, KV8-MAX3, AN7) + uGuru 2.0.0.0 ~ 2.0.4.2 (KV8-PRO) + uGuru 2.1.0.0 ~ 2.1.2.8 (AS8, AV8, AA8, AG8, AA8XE, AX8) + uGuru 2.3.0.0 ~ 2.3.0.9 (AN8) + uGuru 3.0.0.0 ~ 3.0.x.x (AW8, AL8, AT8, NI8 SLI, AT8 32X, AN8 32X, + AW9D-MAX) + The abituguru3 driver is only for revison 3.0.x.x motherboards, + this driver will not work on older motherboards. For older + motherboards use the abituguru (without the 3 !) driver. + +Authors: + Hans de Goede , + (Initial reverse engineering done by Louis Kruger) + + +Module Parameters +----------------- + +* force: bool Force detection. Note this parameter only causes the + detection to be skipped, and thus the insmod to + succeed. If the uGuru can't be read the actual hwmon + driver will not load and thus no hwmon device will get + registered. +* verbose: bool Should the driver be verbose? + 0/off/false normal output + 1/on/true + verbose error reporting (default) + Default: 1 (the driver is still in the testing phase) + +Description +----------- + +This driver supports the hardware monitoring features of the third revision of +the Abit uGuru chip, found on recent Abit uGuru featuring motherboards. + +The 3rd revision of the uGuru chip in reality is a Winbond W83L951G. +Unfortunatly this doesn't help since the W83L951G is a generic microcontroller +with a custom Abit application running on it. + +Despite Abit not releasing any information regarding the uGuru revision 3, +Louis Kruger has managed to reverse engineer the sensor part of the uGuru. +Without his work this driver would not have been possible. + +Known Issues +------------ + +The voltage and frequency control parts of the Abit uGuru are not supported, +neither is writing any of the sensor settings and writing / reading the +fanspeed control registers (FanEQ) + +If you encounter any problems please mail me and +include the output of: "dmesg | grep abituguru" diff --git a/trunk/Documentation/hwmon/dme1737 b/trunk/Documentation/hwmon/dme1737 new file mode 100644 index 000000000000..1a0f3d64ab80 --- /dev/null +++ b/trunk/Documentation/hwmon/dme1737 @@ -0,0 +1,257 @@ +Kernel driver dme1737 +===================== + +Supported chips: + * SMSC DME1737 and compatibles (like Asus A8000) + Prefix: 'dme1737' + Addresses scanned: I2C 0x2c, 0x2d, 0x2e + Datasheet: Provided by SMSC upon request and under NDA + +Authors: + Juerg Haefliger + + +Module Parameters +----------------- + +* force_start: bool Enables the monitoring of voltage, fan and temp inputs + and PWM output control functions. Using this parameter + shouldn't be required since the BIOS usually takes care + of this. + +Note that there is no need to use this parameter if the driver loads without +complaining. The driver will say so if it is necessary. + + +Description +----------- + +This driver implements support for the hardware monitoring capabilities of the +SMSC DME1737 and Asus A8000 (which are the same) Super-I/O chips. This chip +features monitoring of 3 temp sensors temp[1-3] (2 remote diodes and 1 +internal), 7 voltages in[0-6] (6 external and 1 internal) and 6 fan speeds +fan[1-6]. Additionally, the chip implements 5 PWM outputs pwm[1-3,5-6] for +controlling fan speeds both manually and automatically. + +Fan[3-6] and pwm[3,5-6] are optional features and their availability is +dependent on the configuration of the chip. The driver will detect which +features are present during initialization and create the sysfs attributes +accordingly. + + +Voltage Monitoring +------------------ + +The voltage inputs are sampled with 12-bit resolution and have internal +scaling resistors. The values returned by the driver therefore reflect true +millivolts and don't need scaling. The voltage inputs are mapped as follows +(the last column indicates the input ranges): + + in0: +5VTR (+5V standby) 0V - 6.64V + in1: Vccp (processor core) 0V - 3V + in2: VCC (internal +3.3V) 0V - 4.38V + in3: +5V 0V - 6.64V + in4: +12V 0V - 16V + in5: VTR (+3.3V standby) 0V - 4.38V + in6: Vbat (+3.0V) 0V - 4.38V + +Each voltage input has associated min and max limits which trigger an alarm +when crossed. + + +Temperature Monitoring +---------------------- + +Temperatures are measured with 12-bit resolution and reported in millidegree +Celsius. The chip also features offsets for all 3 temperature inputs which - +when programmed - get added to the input readings. The chip does all the +scaling by itself and the driver therefore reports true temperatures that don't +need any user-space adjustments. The temperature inputs are mapped as follows +(the last column indicates the input ranges): + + temp1: Remote diode 1 (3904 type) temperature -127C - +127C + temp2: DME1737 internal temperature -127C - +127C + temp3: Remote diode 2 (3904 type) temperature -127C - +127C + +Each temperature input has associated min and max limits which trigger an alarm +when crossed. Additionally, each temperature input has a fault attribute that +returns 1 when a faulty diode or an unconnected input is detected and 0 +otherwise. + + +Fan Monitoring +-------------- + +Fan RPMs are measured with 16-bit resolution. The chip provides inputs for 6 +fan tachometers. All 6 inputs have an associated min limit which triggers an +alarm when crossed. Fan inputs 1-4 provide type attributes that need to be set +to the number of pulses per fan revolution that the connected tachometer +generates. Supported values are 1, 2, and 4. Fan inputs 5-6 only support fans +that generate 2 pulses per revolution. Fan inputs 5-6 also provide a max +attribute that needs to be set to the maximum attainable RPM (fan at 100% duty- +cycle) of the input. The chip adjusts the sampling rate based on this value. + + +PWM Output Control +------------------ + +This chip features 5 PWM outputs. PWM outputs 1-3 are associated with fan +inputs 1-3 and PWM outputs 5-6 are associated with fan inputs 5-6. PWM outputs +1-3 can be configured to operate either in manual or automatic mode by setting +the appropriate enable attribute accordingly. PWM outputs 5-6 can only operate +in manual mode, their enable attributes are therefore read-only. When set to +manual mode, the fan speed is set by writing the duty-cycle value to the +appropriate PWM attribute. In automatic mode, the PWM attribute returns the +current duty-cycle as set by the fan controller in the chip. All PWM outputs +support the setting of the output frequency via the freq attribute. + +In automatic mode, the chip supports the setting of the PWM ramp rate which +defines how fast the PWM output is adjusting to changes of the associated +temperature input. Associating PWM outputs to temperature inputs is done via +temperature zones. The chip features 3 zones whose assignments to temperature +inputs is static and determined during initialization. These assignments can +be retrieved via the zone[1-3]_auto_channels_temp attributes. Each PWM output +is assigned to one (or hottest of multiple) temperature zone(s) through the +pwm[1-3]_auto_channels_zone attributes. Each PWM output has 3 distinct output +duty-cycles: full, low, and min. Full is internally hard-wired to 255 (100%) +and low and min can be programmed via pwm[1-3]_auto_point1_pwm and +pwm[1-3]_auto_pwm_min, respectively. The thermal thresholds of the zones are +programmed via zone[1-3]_auto_point[1-3]_temp and +zone[1-3]_auto_point1_temp_hyst: + + pwm[1-3]_auto_point2_pwm full-speed duty-cycle (255, i.e., 100%) + pwm[1-3]_auto_point1_pwm low-speed duty-cycle + pwm[1-3]_auto_pwm_min min-speed duty-cycle + + zone[1-3]_auto_point3_temp full-speed temp (all outputs) + zone[1-3]_auto_point2_temp full-speed temp + zone[1-3]_auto_point1_temp low-speed temp + zone[1-3]_auto_point1_temp_hyst min-speed temp + +The chip adjusts the output duty-cycle linearly in the range of auto_point1_pwm +to auto_point2_pwm if the temperature of the associated zone is between +auto_point1_temp and auto_point2_temp. If the temperature drops below the +auto_point1_temp_hyst value, the output duty-cycle is set to the auto_pwm_min +value which only supports two values: 0 or auto_point1_pwm. That means that the +fan either turns completely off or keeps spinning with the low-speed +duty-cycle. If any of the temperatures rise above the auto_point3_temp value, +all PWM outputs are set to 100% duty-cycle. + +Following is another representation of how the chip sets the output duty-cycle +based on the temperature of the associated thermal zone: + + Duty-Cycle Duty-Cycle + Temperature Rising Temp Falling Temp + ----------- ----------- ------------ + full-speed full-speed full-speed + + < linearly adjusted duty-cycle > + + low-speed low-speed low-speed + min-speed low-speed + min-speed min-speed min-speed + min-speed min-speed + + +Sysfs Attributes +---------------- + +Following is a list of all sysfs attributes that the driver provides, their +permissions and a short description: + +Name Perm Description +---- ---- ----------- +cpu0_vid RO CPU core reference voltage in + millivolts. +vrm RW Voltage regulator module version + number. + +in[0-6]_input RO Measured voltage in millivolts. +in[0-6]_min RW Low limit for voltage input. +in[0-6]_max RW High limit for voltage input. +in[0-6]_alarm RO Voltage input alarm. Returns 1 if + voltage input is or went outside the + associated min-max range, 0 otherwise. + +temp[1-3]_input RO Measured temperature in millidegree + Celsius. +temp[1-3]_min RW Low limit for temp input. +temp[1-3]_max RW High limit for temp input. +temp[1-3]_offset RW Offset for temp input. This value will + be added by the chip to the measured + temperature. +temp[1-3]_alarm RO Alarm for temp input. Returns 1 if temp + input is or went outside the associated + min-max range, 0 otherwise. +temp[1-3]_fault RO Temp input fault. Returns 1 if the chip + detects a faulty thermal diode or an + unconnected temp input, 0 otherwise. + +zone[1-3]_auto_channels_temp RO Temperature zone to temperature input + mapping. This attribute is a bitfield + and supports the following values: + 1: temp1 + 2: temp2 + 4: temp3 +zone[1-3]_auto_point1_temp_hyst RW Auto PWM temp point1 hysteresis. The + output of the corresponding PWM is set + to the pwm_auto_min value if the temp + falls below the auto_point1_temp_hyst + value. +zone[1-3]_auto_point[1-3]_temp RW Auto PWM temp points. Auto_point1 is + the low-speed temp, auto_point2 is the + full-speed temp, and auto_point3 is the + temp at which all PWM outputs are set + to full-speed (100% duty-cycle). + +fan[1-6]_input RO Measured fan speed in RPM. +fan[1-6]_min RW Low limit for fan input. +fan[1-6]_alarm RO Alarm for fan input. Returns 1 if fan + input is or went below the associated + min value, 0 otherwise. +fan[1-4]_type RW Type of attached fan. Expressed in + number of pulses per revolution that + the fan generates. Supported values are + 1, 2, and 4. +fan[5-6]_max RW Max attainable RPM at 100% duty-cycle. + Required for chip to adjust the + sampling rate accordingly. + +pmw[1-3,5-6] RO/RW Duty-cycle of PWM output. Supported + values are 0-255 (0%-100%). Only + writeable if the associated PWM is in + manual mode. +pwm[1-3]_enable RW Enable of PWM outputs 1-3. Supported + values are: + 0: turned off (output @ 100%) + 1: manual mode + 2: automatic mode +pwm[5-6]_enable RO Enable of PWM outputs 5-6. Always + returns 1 since these 2 outputs are + hard-wired to manual mode. +pmw[1-3,5-6]_freq RW Frequency of PWM output. Supported + values are in the range 11Hz-30000Hz + (default is 25000Hz). +pmw[1-3]_ramp_rate RW Ramp rate of PWM output. Determines how + fast the PWM duty-cycle will change + when the PWM is in automatic mode. + Expressed in ms per PWM step. Supported + values are in the range 0ms-206ms + (default is 0, which means the duty- + cycle changes instantly). +pwm[1-3]_auto_channels_zone RW PWM output to temperature zone mapping. + This attribute is a bitfield and + supports the following values: + 1: zone1 + 2: zone2 + 4: zone3 + 6: highest of zone[2-3] + 7: highest of zone[1-3] +pwm[1-3]_auto_pwm_min RW Auto PWM min pwm. Minimum PWM duty- + cycle. Supported values are 0 or + auto_point1_pwm. +pwm[1-3]_auto_point1_pwm RW Auto PWM pwm point. Auto_point1 is the + low-speed duty-cycle. +pwm[1-3]_auto_point2_pwm RO Auto PWM pwm point. Auto_point2 is the + full-speed duty-cycle which is hard- + wired to 255 (100% duty-cycle). diff --git a/trunk/Documentation/hwmon/f71805f b/trunk/Documentation/hwmon/f71805f index bfd0f154959c..94e0d2cbd3d2 100644 --- a/trunk/Documentation/hwmon/f71805f +++ b/trunk/Documentation/hwmon/f71805f @@ -5,11 +5,11 @@ Supported chips: * Fintek F71805F/FG Prefix: 'f71805f' Addresses scanned: none, address read from Super I/O config space - Datasheet: Provided by Fintek on request + Datasheet: Available from the Fintek website * Fintek F71872F/FG Prefix: 'f71872f' Addresses scanned: none, address read from Super I/O config space - Datasheet: Provided by Fintek on request + Datasheet: Available from the Fintek website Author: Jean Delvare @@ -128,7 +128,9 @@ it. When the PWM method is used, you can select the operating frequency, from 187.5 kHz (default) to 31 Hz. The best frequency depends on the fan model. As a rule of thumb, lower frequencies seem to give better -control, but may generate annoying high-pitch noise. Fintek recommends +control, but may generate annoying high-pitch noise. So a frequency just +above the audible range, such as 25 kHz, may be a good choice; if this +doesn't give you good linear control, try reducing it. Fintek recommends not going below 1 kHz, as the fan tachometers get confused by lower frequencies as well. @@ -136,16 +138,23 @@ When the DC method is used, Fintek recommends not going below 5 V, which corresponds to a pwm value of 106 for the driver. The driver doesn't enforce this limit though. -Three different fan control modes are supported: +Three different fan control modes are supported; the mode number is written +to the pwm_enable file. -* Manual mode - You ask for a specific PWM duty cycle or DC voltage. +* 1: Manual mode + You ask for a specific PWM duty cycle or DC voltage by writing to the + pwm file. -* Fan speed mode - You ask for a specific fan speed. This mode assumes that pwm1 - corresponds to fan1, pwm2 to fan2 and pwm3 to fan3. +* 2: Temperature mode + You define 3 temperature/fan speed trip points using the + pwm_auto_point_temp and _fan files. These define a staircase + relationship between temperature and fan speed with two additional points + interpolated between the values that you define. When the temperature + is below auto_point1_temp the fan is switched off. -* Temperature mode - You define 3 temperature/fan speed trip points, and the fan speed is - adjusted depending on the measured temperature, using interpolation. - This mode is not yet supported by the driver. +* 3: Fan speed mode + You ask for a specific fan speed by writing to the fan_target file. + +Both of the automatic modes require that pwm1 corresponds to fan1, pwm2 to +fan2 and pwm3 to fan3. Temperature mode also requires that temp1 corresponds +to pwm1 and fan1, etc. diff --git a/trunk/Documentation/hwmon/it87 b/trunk/Documentation/hwmon/it87 index c0528d6f9ace..81ecc7e41c50 100644 --- a/trunk/Documentation/hwmon/it87 +++ b/trunk/Documentation/hwmon/it87 @@ -12,11 +12,12 @@ Supported chips: Addresses scanned: from Super I/O config space (8 I/O ports) Datasheet: Publicly available at the ITE website http://www.ite.com.tw/ - * IT8716F + * IT8716F/IT8726F Prefix: 'it8716' Addresses scanned: from Super I/O config space (8 I/O ports) Datasheet: Publicly available at the ITE website http://www.ite.com.tw/product_info/file/pc/IT8716F_V0.3.ZIP + http://www.ite.com.tw/product_info/file/pc/IT8726F_V0.3.pdf * IT8718F Prefix: 'it8718' Addresses scanned: from Super I/O config space (8 I/O ports) @@ -68,7 +69,7 @@ Description ----------- This driver implements support for the IT8705F, IT8712F, IT8716F, -IT8718F and SiS950 chips. +IT8718F, IT8726F and SiS950 chips. These chips are 'Super I/O chips', supporting floppy disks, infrared ports, joysticks and other miscellaneous stuff. For hardware monitoring, they @@ -97,6 +98,10 @@ clock divider mess) but not compatible with the older chips and revisions. For now, the driver only uses the 16-bit mode on the IT8716F and IT8718F. +The IT8726F is just bit enhanced IT8716F with additional hardware +for AMD power sequencing. Therefore the chip will appear as IT8716F +to userspace applications. + Temperatures are measured in degrees Celsius. An alarm is triggered once when the Overtemperature Shutdown limit is crossed. diff --git a/trunk/Documentation/hwmon/lm90 b/trunk/Documentation/hwmon/lm90 index 438cb24cee5b..aa4a0ec20081 100644 --- a/trunk/Documentation/hwmon/lm90 +++ b/trunk/Documentation/hwmon/lm90 @@ -48,6 +48,18 @@ Supported chips: Addresses scanned: I2C 0x4c, 0x4d (unsupported 0x4e) Datasheet: Publicly available at the Maxim website http://www.maxim-ic.com/quick_view2.cfm/qv_pk/2578 + * Maxim MAX6680 + Prefix: 'max6680' + Addresses scanned: I2C 0x18, 0x19, 0x1a, 0x29, 0x2a, 0x2b, + 0x4c, 0x4d and 0x4e + Datasheet: Publicly available at the Maxim website + http://www.maxim-ic.com/quick_view2.cfm/qv_pk/3370 + * Maxim MAX6681 + Prefix: 'max6680' + Addresses scanned: I2C 0x18, 0x19, 0x1a, 0x29, 0x2a, 0x2b, + 0x4c, 0x4d and 0x4e + Datasheet: Publicly available at the Maxim website + http://www.maxim-ic.com/quick_view2.cfm/qv_pk/3370 Author: Jean Delvare @@ -59,11 +71,15 @@ Description The LM90 is a digital temperature sensor. It senses its own temperature as well as the temperature of up to one external diode. It is compatible with many other devices such as the LM86, the LM89, the LM99, the ADM1032, -the MAX6657, MAX6658 and the MAX6659 all of which are supported by this driver. -Note that there is no easy way to differentiate between the last three -variants. The extra address and features of the MAX6659 are not supported by -this driver. Additionally, the ADT7461 is supported if found in ADM1032 -compatibility mode. +the MAX6657, MAX6658, MAX6659, MAX6680 and the MAX6681 all of which are +supported by this driver. + +Note that there is no easy way to differentiate between the MAX6657, +MAX6658 and MAX6659 variants. The extra address and features of the +MAX6659 are not supported by this driver. The MAX6680 and MAX6681 only +differ in their pinout, therefore they obviously can't (and don't need to) +be distinguished. Additionally, the ADT7461 is supported if found in +ADM1032 compatibility mode. The specificity of this family of chipsets over the ADM1021/LM84 family is that it features critical limits with hysteresis, and an @@ -93,18 +109,22 @@ ADM1032: * ALERT is triggered by open remote sensor. * SMBus PEC support for Write Byte and Receive Byte transactions. -ADT7461 +ADT7461: * Extended temperature range (breaks compatibility) * Lower resolution for remote temperature MAX6657 and MAX6658: * Remote sensor type selection -MAX6659 +MAX6659: * Selectable address * Second critical temperature limit * Remote sensor type selection +MAX6680 and MAX6681: + * Selectable address + * Remote sensor type selection + All temperature values are given in degrees Celsius. Resolution is 1.0 degree for the local temperature, 0.125 degree for the remote temperature. @@ -141,7 +161,7 @@ SMBus Read Byte, and PEC will work properly. Additionally, the ADM1032 doesn't support SMBus Send Byte with PEC. Instead, it will try to write the PEC value to the register (because the SMBus Send Byte transaction with PEC is similar to a Write Byte transaction -without PEC), which is not what we want. Thus, PEC is explicitely disabled +without PEC), which is not what we want. Thus, PEC is explicitly disabled on SMBus Send Byte transactions in the lm90 driver. PEC on byte data transactions represents a significant increase in bandwidth diff --git a/trunk/Documentation/hwmon/lm93 b/trunk/Documentation/hwmon/lm93 new file mode 100644 index 000000000000..4e4a1dc1d2da --- /dev/null +++ b/trunk/Documentation/hwmon/lm93 @@ -0,0 +1,412 @@ +Kernel driver lm93 +================== + +Supported chips: + * National Semiconductor LM93 + Prefix 'lm93' + Addresses scanned: I2C 0x2c-0x2e + Datasheet: http://www.national.com/ds.cgi/LM/LM93.pdf + +Author: + Mark M. Hoffman + Ported to 2.6 by Eric J. Bowersox + Adapted to 2.6.20 by Carsten Emde + Modified for mainline integration by Hans J. Koch + +Module Parameters +----------------- + +(specific to LM93) +* init: integer + Set to non-zero to force some initializations (default is 0). +* disable_block: integer + A "0" allows SMBus block data transactions if the host supports them. A "1" + disables SMBus block data transactions. The default is 0. +* vccp_limit_type: integer array (2) + Configures in7 and in8 limit type, where 0 means absolute and non-zero + means relative. "Relative" here refers to "Dynamic Vccp Monitoring using + VID" from the datasheet. It greatly simplifies the interface to allow + only one set of limits (absolute or relative) to be in operation at a + time (even though the hardware is capable of enabling both). There's + not a compelling use case for enabling both at once, anyway. The default + is "0,0". +* vid_agtl: integer + A "0" configures the VID pins for V(ih) = 2.1V min, V(il) = 0.8V max. + A "1" configures the VID pins for V(ih) = 0.8V min, V(il) = 0.4V max. + (The latter setting is referred to as AGTL+ Compatible in the datasheet.) + I.e. this parameter controls the VID pin input thresholds; if your VID + inputs are not working, try changing this. The default value is "0". + +(common among sensor drivers) +* force: short array (min = 1, max = 48) + List of adapter,address pairs to assume to be present. Autodetection + of the target device will still be attempted. Use one of the more + specific force directives below if this doesn't detect the device. +* force_lm93: short array (min = 1, max = 48) + List of adapter,address pairs which are unquestionably assumed to contain + a 'lm93' chip +* ignore: short array (min = 1, max = 48) + List of adapter,address pairs not to scan +* ignore_range: short array (min = 1, max = 48) + List of adapter,start-addr,end-addr triples not to scan +* probe: short array (min = 1, max = 48) + List of adapter,address pairs to scan additionally +* probe_range: short array (min = 1, max = 48) + List of adapter,start-addr,end-addr triples to scan additionally + + +Hardware Description +-------------------- + +(from the datasheet) + +The LM93, hardware monitor, has a two wire digital interface compatible with +SMBus 2.0. Using an 8-bit ADC, the LM93 measures the temperature of two remote +diode connected transistors as well as its own die and 16 power supply +voltages. To set fan speed, the LM93 has two PWM outputs that are each +controlled by up to four temperature zones. The fancontrol algorithm is lookup +table based. The LM93 includes a digital filter that can be invoked to smooth +temperature readings for better control of fan speed. The LM93 has four +tachometer inputs to measure fan speed. Limit and status registers for all +measured values are included. The LM93 builds upon the functionality of +previous motherboard management ASICs and uses some of the LM85 s features +(i.e. smart tachometer mode). It also adds measurement and control support +for dynamic Vccp monitoring and PROCHOT. It is designed to monitor a dual +processor Xeon class motherboard with a minimum of external components. + + +Driver Description +------------------ + +This driver implements support for the National Semiconductor LM93. + + +User Interface +-------------- + +#PROCHOT: + +The LM93 can monitor two #PROCHOT signals. The results are found in the +sysfs files prochot1, prochot2, prochot1_avg, prochot2_avg, prochot1_max, +and prochot2_max. prochot1_max and prochot2_max contain the user limits +for #PROCHOT1 and #PROCHOT2, respectively. prochot1 and prochot2 contain +the current readings for the most recent complete time interval. The +value of prochot1_avg and prochot2_avg is something like a 2 period +exponential moving average (but not quite - check the datasheet). Note +that this third value is calculated by the chip itself. All values range +from 0-255 where 0 indicates no throttling, and 255 indicates > 99.6%. + +The monitoring intervals for the two #PROCHOT signals is also configurable. +These intervals can be found in the sysfs files prochot1_interval and +prochot2_interval. The values in these files specify the intervals for +#P1_PROCHOT and #P2_PROCHOT, respectively. Selecting a value not in this +list will cause the driver to use the next largest interval. The available +intervals are: + +#PROCHOT intervals: 0.73, 1.46, 2.9, 5.8, 11.7, 23.3, 46.6, 93.2, 186, 372 + +It is possible to configure the LM93 to logically short the two #PROCHOT +signals. I.e. when #P1_PROCHOT is asserted, the LM93 will automatically +assert #P2_PROCHOT, and vice-versa. This mode is enabled by writing a +non-zero integer to the sysfs file prochot_short. + +The LM93 can also override the #PROCHOT pins by driving a PWM signal onto +one or both of them. When overridden, the signal has a period of 3.56 mS, +a minimum pulse width of 5 clocks (at 22.5kHz => 6.25% duty cycle), and +a maximum pulse width of 80 clocks (at 22.5kHz => 99.88% duty cycle). + +The sysfs files prochot1_override and prochot2_override contain boolean +intgers which enable or disable the override function for #P1_PROCHOT and +#P2_PROCHOT, respectively. The sysfs file prochot_override_duty_cycle +contains a value controlling the duty cycle for the PWM signal used when +the override function is enabled. This value ranges from 0 to 15, with 0 +indicating minimum duty cycle and 15 indicating maximum. + +#VRD_HOT: + +The LM93 can monitor two #VRD_HOT signals. The results are found in the +sysfs files vrdhot1 and vrdhot2. There is one value per file: a boolean for +which 1 indicates #VRD_HOT is asserted and 0 indicates it is negated. These +files are read-only. + +Smart Tach Mode: + +(from the datasheet) + + If a fan is driven using a low-side drive PWM, the tachometer + output of the fan is corrupted. The LM93 includes smart tachometer + circuitry that allows an accurate tachometer reading to be + achieved despite the signal corruption. In smart tach mode all + four signals are measured within 4 seconds. + +Smart tach mode is enabled by the driver by writing 1 or 2 (associating the +the fan tachometer with a pwm) to the sysfs file fan_smart_tach. A zero +will disable the function for that fan. Note that Smart tach mode cannot be +enabled if the PWM output frequency is 22500 Hz (see below). + +Manual PWM: + +The LM93 has a fixed or override mode for the two PWM outputs (although, there +are still some conditions that will override even this mode - see section +15.10.6 of the datasheet for details.) The sysfs files pwm1_override +and pwm2_override are used to enable this mode; each is a boolean integer +where 0 disables and 1 enables the manual control mode. The sysfs files pwm1 +and pwm2 are used to set the manual duty cycle; each is an integer (0-255) +where 0 is 0% duty cycle, and 255 is 100%. Note that the duty cycle values +are constrained by the hardware. Selecting a value which is not available +will cause the driver to use the next largest value. Also note: when manual +PWM mode is disabled, the value of pwm1 and pwm2 indicates the current duty +cycle chosen by the h/w. + +PWM Output Frequency: + +The LM93 supports several different frequencies for the PWM output channels. +The sysfs files pwm1_freq and pwm2_freq are used to select the frequency. The +frequency values are constrained by the hardware. Selecting a value which is +not available will cause the driver to use the next largest value. Also note +that this parameter has implications for the Smart Tach Mode (see above). + +PWM Output Frequencies: 12, 36, 48, 60, 72, 84, 96, 22500 (h/w default) + +Automatic PWM: + +The LM93 is capable of complex automatic fan control, with many different +points of configuration. To start, each PWM output can be bound to any +combination of eight control sources. The final PWM is the largest of all +individual control sources to which the PWM output is bound. + +The eight control sources are: temp1-temp4 (aka "zones" in the datasheet), +#PROCHOT 1 & 2, and #VRDHOT 1 & 2. The bindings are expressed as a bitmask +in the sysfs files pwm_auto_channels, where a "1" enables the binding, and + a "0" disables it. The h/w default is 0x0f (all temperatures bound). + + 0x01 - Temp 1 + 0x02 - Temp 2 + 0x04 - Temp 3 + 0x08 - Temp 4 + 0x10 - #PROCHOT 1 + 0x20 - #PROCHOT 2 + 0x40 - #VRDHOT 1 + 0x80 - #VRDHOT 2 + +The function y = f(x) takes a source temperature x to a PWM output y. This +function of the LM93 is derived from a base temperature and a table of 12 +temperature offsets. The base temperature is expressed in degrees C in the +sysfs files temp_auto_base. The offsets are expressed in cumulative +degrees C, with the value of offset for temperature value being +contained in the file temp_auto_offset. E.g. if the base temperature +is 40C: + + offset # temp_auto_offset range pwm + 1 0 - 25.00% + 2 0 - 28.57% + 3 1 40C - 41C 32.14% + 4 1 41C - 42C 35.71% + 5 2 42C - 44C 39.29% + 6 2 44C - 46C 42.86% + 7 2 48C - 50C 46.43% + 8 2 50C - 52C 50.00% + 9 2 52C - 54C 53.57% + 10 2 54C - 56C 57.14% + 11 2 56C - 58C 71.43% + 12 2 58C - 60C 85.71% + > 60C 100.00% + +Valid offsets are in the range 0C <= x <= 7.5C in 0.5C increments. + +There is an independent base temperature for each temperature channel. Note, +however, there are only two tables of offsets: one each for temp[12] and +temp[34]. Therefore, any change to e.g. temp1_auto_offset will also +affect temp2_auto_offset. + +The LM93 can also apply hysteresis to the offset table, to prevent unwanted +oscillation between two steps in the offsets table. These values are found in +the sysfs files temp_auto_offset_hyst. The value in this file has the +same representation as in temp_auto_offset. + +If a temperature reading falls below the base value for that channel, the LM93 +will use the minimum PWM value. These values are found in the sysfs files +temp_auto_pwm_min. Note, there are only two minimums: one each for temp[12] +and temp[34]. Therefore, any change to e.g. temp1_auto_pwm_min will also +affect temp2_auto_pwm_min. + +PWM Spin-Up Cycle: + +A spin-up cycle occurs when a PWM output is commanded from 0% duty cycle to +some value > 0%. The LM93 supports a minimum duty cycle during spin-up. These +values are found in the sysfs files pwm_auto_spinup_min. The value in this +file has the same representation as other PWM duty cycle values. The +duration of the spin-up cycle is also configurable. These values are found in +the sysfs files pwm_auto_spinup_time. The value in this file is +the spin-up time in seconds. The available spin-up times are constrained by +the hardware. Selecting a value which is not available will cause the driver +to use the next largest value. + +Spin-up Durations: 0 (disabled, h/w default), 0.1, 0.25, 0.4, 0.7, 1.0, + 2.0, 4.0 + +#PROCHOT and #VRDHOT PWM Ramping: + +If the #PROCHOT or #VRDHOT signals are asserted while bound to a PWM output +channel, the LM93 will ramp the PWM output up to 100% duty cycle in discrete +steps. The duration of each step is configurable. There are two files, with +one value each in seconds: pwm_auto_prochot_ramp and pwm_auto_vrdhot_ramp. +The available ramp times are constrained by the hardware. Selecting a value +which is not available will cause the driver to use the next largest value. + +Ramp Times: 0 (disabled, h/w default) to 0.75 in 0.05 second intervals + +Fan Boost: + +For each temperature channel, there is a boost temperature: if the channel +exceeds this limit, the LM93 will immediately drive both PWM outputs to 100%. +This limit is expressed in degrees C in the sysfs files temp_auto_boost. +There is also a hysteresis temperature for this function: after the boost +limit is reached, the temperature channel must drop below this value before +the boost function is disabled. This temperature is also expressed in degrees +C in the sysfs files temp_auto_boost_hyst. + +GPIO Pins: + +The LM93 can monitor the logic level of four dedicated GPIO pins as well as the +four tach input pins. GPIO0-GPIO3 correspond to (fan) tach 1-4, respectively. +All eight GPIOs are read by reading the bitmask in the sysfs file gpio. The +LSB is GPIO0, and the MSB is GPIO7. + + +LM93 Unique sysfs Files +----------------------- + + file description + ------------------------------------------------------------- + + prochot current #PROCHOT % + + prochot_avg moving average #PROCHOT % + + prochot_max limit #PROCHOT % + + prochot_short enable or disable logical #PROCHOT pin short + + prochot_override force #PROCHOT assertion as PWM + + prochot_override_duty_cycle + duty cycle for the PWM signal used when + #PROCHOT is overridden + + prochot_interval #PROCHOT PWM sampling interval + + vrdhot 0 means negated, 1 means asserted + + fan_smart_tach enable or disable smart tach mode + + pwm_auto_channels select control sources for PWM outputs + + pwm_auto_spinup_min minimum duty cycle during spin-up + + pwm_auto_spinup_time duration of spin-up + + pwm_auto_prochot_ramp ramp time per step when #PROCHOT asserted + + pwm_auto_vrdhot_ramp ramp time per step when #VRDHOT asserted + + temp_auto_base temperature channel base + + temp_auto_offset[1-12] + temperature channel offsets + + temp_auto_offset_hyst + temperature channel offset hysteresis + + temp_auto_boost temperature channel boost (PWMs to 100%) limit + + temp_auto_boost_hyst temperature channel boost hysteresis + + gpio input state of 8 GPIO pins; read-only + + +Sample Configuration File +------------------------- + +Here is a sample LM93 chip config for sensors.conf: + +---------- cut here ---------- +chip "lm93-*" + +# VOLTAGE INPUTS + + # labels and scaling based on datasheet recommendations + label in1 "+12V1" + compute in1 @ * 12.945, @ / 12.945 + set in1_min 12 * 0.90 + set in1_max 12 * 1.10 + + label in2 "+12V2" + compute in2 @ * 12.945, @ / 12.945 + set in2_min 12 * 0.90 + set in2_max 12 * 1.10 + + label in3 "+12V3" + compute in3 @ * 12.945, @ / 12.945 + set in3_min 12 * 0.90 + set in3_max 12 * 1.10 + + label in4 "FSB_Vtt" + + label in5 "3GIO" + + label in6 "ICH_Core" + + label in7 "Vccp1" + + label in8 "Vccp2" + + label in9 "+3.3V" + set in9_min 3.3 * 0.90 + set in9_max 3.3 * 1.10 + + label in10 "+5V" + set in10_min 5.0 * 0.90 + set in10_max 5.0 * 1.10 + + label in11 "SCSI_Core" + + label in12 "Mem_Core" + + label in13 "Mem_Vtt" + + label in14 "Gbit_Core" + + # Assuming R1/R2 = 4.1143, and 3.3V reference + # -12V = (4.1143 + 1) * (@ - 3.3) + 3.3 + label in15 "-12V" + compute in15 @ * 5.1143 - 13.57719, (@ + 13.57719) / 5.1143 + set in15_min -12 * 0.90 + set in15_max -12 * 1.10 + + label in16 "+3.3VSB" + set in16_min 3.3 * 0.90 + set in16_max 3.3 * 1.10 + +# TEMPERATURE INPUTS + + label temp1 "CPU1" + label temp2 "CPU2" + label temp3 "LM93" + +# TACHOMETER INPUTS + + label fan1 "Fan1" + set fan1_min 3000 + label fan2 "Fan2" + set fan2_min 3000 + label fan3 "Fan3" + set fan3_min 3000 + label fan4 "Fan4" + set fan4_min 3000 + +# PWM OUTPUTS + + label pwm1 "CPU1" + label pwm2 "CPU2" + diff --git a/trunk/Documentation/hwmon/smsc47b397 b/trunk/Documentation/hwmon/smsc47b397 index 20682f15ae41..3a43b6948924 100644 --- a/trunk/Documentation/hwmon/smsc47b397 +++ b/trunk/Documentation/hwmon/smsc47b397 @@ -4,6 +4,7 @@ Kernel driver smsc47b397 Supported chips: * SMSC LPC47B397-NC * SMSC SCH5307-NS + * SMSC SCH5317 Prefix: 'smsc47b397' Addresses scanned: none, address read from Super I/O config space Datasheet: In this file @@ -18,8 +19,8 @@ The following specification describes the SMSC LPC47B397-NC[1] sensor chip provided by Craig Kelly (In-Store Broadcast Network) and edited/corrected by Mark M. Hoffman . -[1] And SMSC SCH5307-NS, which has a different device ID but is otherwise -compatible. +[1] And SMSC SCH5307-NS and SCH5317, which have different device IDs but are +otherwise compatible. * * * * * @@ -131,7 +132,7 @@ OUT DX,AL The registers of interest for identifying the SIO on the dc7100 are Device ID (0x20) and Device Rev (0x21). -The Device ID will read 0x6F (for SCH5307-NS, 0x81) +The Device ID will read 0x6F (0x81 for SCH5307-NS, and 0x85 for SCH5317) The Device Rev currently reads 0x01 Obtaining the HWM Base Address. diff --git a/trunk/Documentation/hwmon/sysfs-interface b/trunk/Documentation/hwmon/sysfs-interface index a9a18ad0d17a..b3a9e1b9dbda 100644 --- a/trunk/Documentation/hwmon/sysfs-interface +++ b/trunk/Documentation/hwmon/sysfs-interface @@ -172,11 +172,10 @@ pwm[1-*] Pulse width modulation fan control. 255 is max or 100%. pwm[1-*]_enable - Switch PWM on and off. - Not always present even if pwmN is. - 0: turn off - 1: turn on in manual mode - 2+: turn on in automatic mode + Fan speed control method: + 0: no fan speed control (i.e. fan at full speed) + 1: manual fan speed control enabled (using pwm[1-*]) + 2+: automatic fan speed control enabled Check individual chip documentation files for automatic mode details. RW @@ -343,9 +342,9 @@ to notify open diodes, unconnected fans etc. where the hardware supports it. When this boolean has value 1, the measurement for that channel should not be trusted. -in[0-*]_input_fault -fan[1-*]_input_fault -temp[1-*]_input_fault +in[0-*]_fault +fan[1-*]_fault +temp[1-*]_fault Input fault condition 0: no fault occured 1: fault condition diff --git a/trunk/Documentation/hwmon/w83627ehf b/trunk/Documentation/hwmon/w83627ehf index 030fac6cec7a..ccc2bcb61068 100644 --- a/trunk/Documentation/hwmon/w83627ehf +++ b/trunk/Documentation/hwmon/w83627ehf @@ -22,9 +22,9 @@ This driver implements support for the Winbond W83627EHF, W83627EHG, and W83627DHG super I/O chips. We will refer to them collectively as Winbond chips. The chips implement three temperature sensors, five fan rotation -speed sensors, ten analog voltage sensors (only nine for the 627DHG), alarms -with beep warnings (control unimplemented), and some automatic fan regulation -strategies (plus manual fan control mode). +speed sensors, ten analog voltage sensors (only nine for the 627DHG), one +VID (6 pins), alarms with beep warnings (control unimplemented), and +some automatic fan regulation strategies (plus manual fan control mode). Temperatures are measured in degrees Celsius and measurement resolution is 1 degC for temp1 and 0.5 degC for temp2 and temp3. An alarm is triggered when diff --git a/trunk/Documentation/ja_JP/HOWTO b/trunk/Documentation/ja_JP/HOWTO new file mode 100644 index 000000000000..b2446a090870 --- /dev/null +++ b/trunk/Documentation/ja_JP/HOWTO @@ -0,0 +1,650 @@ +NOTE: +This is Japanese translated version of "Documentation/HOWTO". +This one is maintained by Tsugikazu Shibata +and JF Project team . +If you find difference with original file or problem in translation, +please contact maintainer of this file or JF project. + +Please also note that purpose of this file is easier to read for non +English natives and not to be intended to fork. So, if you have any +comments or updates of this file, please try to update Original(English) +file at first. + +Last Updated: 2007/06/04 +================================== +ã“れã¯ã€ +linux-2.6.21/Documentation/HOWTO +ã®å’Œè¨³ã§ã™ã€‚ + +翻訳団体: JF プロジェクト < http://www.linux.or.jp/JF/ > +翻訳日: 2007/06/04 +翻訳者: Tsugikazu Shibata +校正者: æ¾å€‰ã•ã‚“ + å°æž— é›…å…¸ã•ã‚“ (Masanori Kobayasi) + 武井伸光ã•ん〠+ ã‹ã­ã“ã•ã‚“ (Seiji Kaneko) + 野å£ã•ã‚“ (Kenji Noguchi) + 河内ã•ã‚“ (Takayoshi Kochi) + 岩本ã•ã‚“ (iwamoto) +================================== + +Linux カーãƒãƒ«é–‹ç™ºã®ã‚„り方 +------------------------------- + +ã“れã¯ä¸Šã®ãƒˆãƒ”ック( Linux カーãƒãƒ«é–‹ç™ºã®ã‚„り方)ã®é‡è¦ãªäº‹æŸ„を網羅ã—㟠+ドキュメントã§ã™ã€‚ã“ã“ã«ã¯ Linux カーãƒãƒ«é–‹ç™ºè€…ã«ãªã‚‹ãŸã‚ã®æ–¹æ³•㨠+Linux カーãƒãƒ«é–‹ç™ºã‚³ãƒŸãƒ¥ãƒ‹ãƒ†ã‚£ã¨å…±ã«æ´»å‹•ã™ã‚‹ã‚„ã‚Šæ–¹ã‚’å­¦ã¶æ–¹æ³•ãŒå«ã¾ã‚Œã¦ +ã„ã¾ã™ã€‚カーãƒãƒ«ãƒ—ログラミングã«é–¢ã™ã‚‹æŠ€è¡“çš„ãªé …ç›®ã«é–¢ã™ã‚‹ã“ã¨ã¯ä½•ã‚‚å« +ã‚ãªã„よã†ã«ã—ã¦ã„ã¾ã™ãŒã€ã‚«ãƒ¼ãƒãƒ«é–‹ç™ºè€…ã¨ãªã‚‹ãŸã‚ã®æ­£ã—ã„æ–¹å‘ã«å‘ã‹ã† +手助ã‘ã«ãªã‚Šã¾ã™ã€‚ + +ã‚‚ã—ã€ã“ã®ãƒ‰ã‚­ãƒ¥ãƒ¡ãƒ³ãƒˆã®ã©ã“ã‹ãŒå¤ããªã£ã¦ã„ãŸå ´åˆã«ã¯ã€ã“ã®ãƒ‰ã‚­ãƒ¥ãƒ¡ãƒ³ +ãƒˆã®æœ€å¾Œã«ãƒªã‚¹ãƒˆã—ãŸãƒ¡ãƒ³ãƒ†ãƒŠãƒ¼ã«ãƒ‘ッãƒã‚’é€ã£ã¦ãã ã•ã„。 + +ã¯ã˜ã‚ã« +--------- + +ã‚ãªãŸã¯ã€€Linux カーãƒãƒ«ã®é–‹ç™ºè€…ã«ãªã‚‹æ–¹æ³•ã‚’å­¦ã³ãŸã„ã®ã§ã—ょã†ã‹ï¼Ÿã€€ã +れã¨ã‚‚ã‚ãªãŸã¯ä¸Šå¸ã‹ã‚‰ã€Œã“ã®ãƒ‡ãƒã‚¤ã‚¹ã® Linux ドライãƒã‚’書ãよã†ã«ã€ã¨ +言ã‚れã¦ã„ã‚‹ã®ã§ã—ょã†ã‹ï¼Ÿã€€ +ã“ã®æ–‡æ›¸ã®ç›®çš„ã¯ã€ã‚ãªãŸãŒè¸ã‚€ã¹ã手順ã¨ã€ã‚³ãƒŸãƒ¥ãƒ‹ãƒ†ã‚£ã¨ä¸€ç·’ã«ã†ã¾ãåƒ +ãヒントを書ã下ã™ã“ã¨ã§ã€ã‚ãªãŸãŒçŸ¥ã‚‹ã¹ãå…¨ã¦ã®ã“ã¨ã‚’æ•™ãˆã‚‹ã“ã¨ã§ã™ã€‚ +ã¾ãŸã€ã“ã®ã‚³ãƒŸãƒ¥ãƒ‹ãƒ†ã‚£ãŒãªãœä»Šã†ã¾ãã¾ã‚ã£ã¦ã„ã‚‹ã®ã‹ã¨ã„ã†ç†ç”±ã®ä¸€éƒ¨ã‚‚ +説明ã—よã†ã¨è©¦ã¿ã¦ã„ã¾ã™ã€‚ + +カーãƒãƒ«ã¯ å°‘é‡ã®ã‚¢ãƒ¼ã‚­ãƒ†ã‚¯ãƒãƒ£ä¾å­˜éƒ¨åˆ†ãŒã‚¢ã‚»ãƒ³ãƒ–ãƒªè¨€èªžã§æ›¸ã‹ã‚Œã¦ã„ã‚‹ +以外ã¯å¤§éƒ¨åˆ†ã¯ C è¨€èªžã§æ›¸ã‹ã‚Œã¦ã„ã¾ã™ã€‚C言語をよãç†è§£ã—ã¦ã„ã‚‹ã“ã¨ã¯ã‚«ãƒ¼ +ãƒãƒ«é–‹ç™ºè€…ã«ã¯å¿…è¦ã§ã™ã€‚アーキテクãƒãƒ£å‘ã‘ã®ä½Žãƒ¬ãƒ™ãƒ«éƒ¨åˆ†ã®é–‹ç™ºã‚’ã™ã‚‹ã® +ã§ãªã‘れã°ã€(ã©ã‚“ãªã‚¢ãƒ¼ã‚­ãƒ†ã‚¯ãƒãƒ£ã§ã‚‚)アセンブリ(訳注: 言語)ã¯å¿…è¦ã‚り +ã¾ã›ã‚“ã€‚ä»¥ä¸‹ã®æœ¬ã¯ã€C 言語ã®å分ãªçŸ¥è­˜ã‚„何年もã®çµŒé¨“ã«å–ã£ã¦ä»£ã‚ã‚‹ã‚‚ã® +ã§ã¯ã‚りã¾ã›ã‚“ãŒã€å°‘ãªãã¨ã‚‚リファレンスã¨ã—ã¦ã¯ã„ã„æœ¬ã§ã™ã€‚ + - "The C Programming Language" by Kernighan and Ritchie [Prentice Hall] + -『プログラミング言語C第2版ã€(B.W. カーニãƒãƒ³/D.M. リッãƒãƒ¼è‘— 石田晴久訳) [共立出版] + - "Practical C Programming" by Steve Oualline [O'Reilly] + - 『C実践プログラミング第3版ã€(Steve Ouallineè‘— 望月康å¸ç›£è¨³ è°·å£åŠŸè¨³) [オライリージャパン] + - "C: A Reference Manual" by Harbison and Steele [Prentice Hall] + - 『新・詳説 C 言語 H&S リファレンス〠+ (サミュエル P ãƒãƒ¼ãƒ“ソン/ガイ L スティール共著 斉藤 信男監訳)[ソフトãƒãƒ³ã‚¯] + +カーãƒãƒ«ã¯ GNU C 㨠GNU ツールãƒã‚§ã‚¤ãƒ³ã‚’使ã£ã¦æ›¸ã‹ã‚Œã¦ã„ã¾ã™ã€‚カーãƒãƒ« +㯠ISO C89 ä»•æ§˜ã«æº–æ‹ ã—ã¦æ›¸ã一方ã§ã€æ¨™æº–ã«ã¯ç„¡ã„言語拡張を多ã使ã£ã¦ +ã„ã¾ã™ã€‚カーãƒãƒ«ã¯æ¨™æº– C ライブラリã¨ã¯é–¢ä¿‚ãŒãªã„ã¨ã„ã£ãŸã€C 言語フリー +スタンディング環境ã§ã™ã€‚ãã®ãŸã‚ã€C ã®æ¨™æº–ã§ä½¿ãˆãªã„ã‚‚ã®ã‚‚ã‚りã¾ã™ã€‚ä»» +æ„ã® long long ã®é™¤ç®—ã‚„æµ®å‹•å°æ•°ç‚¹ã¯ä½¿ãˆã¾ã›ã‚“。 +ã¨ãã©ãã€ã‚«ãƒ¼ãƒãƒ«ãŒãƒ„ールãƒã‚§ã‚¤ãƒ³ã‚„ C 言語拡張ã«ç½®ã„ã¦ã„ã‚‹å‰æãŒã©ã† +ãªã£ã¦ã„ã‚‹ã®ã‹ã‚ã‹ã‚Šã«ãã„ã“ã¨ãŒã‚りã€ã¾ãŸã€æ®‹å¿µãªã“ã¨ã«æ±ºå®šçš„ãªãƒªãƒ•ã‚¡ +レンスã¯å­˜åœ¨ã—ã¾ã›ã‚“。情報を得るã«ã¯ã€gcc ã® info ページ( info gcc )ã‚’ +ã¿ã¦ãã ã•ã„。 + +ã‚ãªãŸã¯æ—¢å­˜ã®é–‹ç™ºã‚³ãƒŸãƒ¥ãƒ‹ãƒ†ã‚£ã¨ä¸€ç·’ã«ä½œæ¥­ã™ã‚‹æ–¹æ³•ã‚’å­¦ã¼ã†ã¨ã—ã¦ã„ã‚‹ã“ +ã¨ã«ç•™æ„ã—ã¦ãã ã•ã„。ãã®ã‚³ãƒŸãƒ¥ãƒ‹ãƒ†ã‚£ã¯ã€ã‚³ãƒ¼ãƒ‡ã‚£ãƒ³ã‚°ã€ã‚¹ã‚¿ã‚¤ãƒ«ã€ +開発手順ã«ã¤ã„ã¦é«˜åº¦ãªæ¨™æº–ã‚’æŒã¤ã€å¤šæ§˜ãªäººã®é›†ã¾ã‚Šã§ã™ã€‚ +地ç†çš„ã«åˆ†æ•£ã—ãŸå¤§è¦æ¨¡ãªãƒãƒ¼ãƒ ã«å¯¾ã—ã¦ã‚‚ã£ã¨ã‚‚ã†ã¾ãã„ãã¨ã‚ã‹ã£ãŸã“㨠+をベースã«ã—ãªãŒã‚‰ã€ã“ã‚Œã‚‰ã®æ¨™æº–ã¯é•·ã„時間をã‹ã‘ã¦ç¯‰ã‹ã‚Œã¦ãã¾ã—ãŸã€‚ +ã“れらã¯ãã¡ã‚“ã¨æ–‡æ›¸åŒ–ã•れã¦ã„ã¾ã™ã‹ã‚‰ã€äº‹å‰ã«ã“ã‚Œã‚‰ã®æ¨™æº–ã«ã¤ã„ã¦ã§ã +ã‚‹ã ã‘ãŸãã•ん学んã§ãã ã•ã„。ã¾ãŸçš†ãŒã‚ãªãŸã‚„ã‚ãªãŸã®ä¼šç¤¾ã®ã‚„り方ã«åˆã‚ +ã›ã¦ãã‚Œã‚‹ã¨æ€ã‚ãªã„ã§ãã ã•ã„。 + +法的å•題 +------------ + +Linux カーãƒãƒ«ã®ã‚½ãƒ¼ã‚¹ã‚³ãƒ¼ãƒ‰ã¯ GPL ライセンスã®ä¸‹ã§ãƒªãƒªãƒ¼ã‚¹ã•れã¦ã„ã¾ +ã™ã€‚ライセンスã®è©³ç´°ã«ã¤ã„ã¦ã¯ã€ã‚½ãƒ¼ã‚¹ãƒ„リーã®ãƒ¡ã‚¤ãƒ³ãƒ‡ã‚£ãƒ¬ã‚¯ãƒˆãƒªã«å­˜åœ¨ +ã™ã‚‹ã€COPYING ã®ãƒ•ァイルをã¿ã¦ãã ã•ã„。もã—ライセンスã«ã¤ã„ã¦ã•らã«è³ª +å•ãŒã‚れã°ã€Linux Kernel メーリングリストã«è³ªå•ã™ã‚‹ã®ã§ã¯ãªãã€ã©ã†ãž +法律家ã«ç›¸è«‡ã—ã¦ãã ã•ã„。メーリングリストã®äººé”ã¯æ³•律家ã§ã¯ãªãã€æ³•çš„ +å•題ã«ã¤ã„ã¦ã¯å½¼ã‚‰ã®å£°æ˜Žã¯ã‚ã¦ã«ã™ã‚‹ã¹ãã§ã¯ã‚りã¾ã›ã‚“。 + +GPL ã«é–¢ã™ã‚‹å…±é€šã®è³ªå•や回答ã«ã¤ã„ã¦ã¯ã€ä»¥ä¸‹ã‚’å‚ç…§ã—ã¦ãã ã•ã„。 + http://www.gnu.org/licenses/gpl-faq.html + +ドキュメント +------------ + +Linux カーãƒãƒ«ã‚½ãƒ¼ã‚¹ãƒ„リーã¯å¹…広ã„範囲ã®ãƒ‰ã‚­ãƒ¥ãƒ¡ãƒ³ãƒˆã‚’å«ã‚“ã§ãŠã‚Šã€ãれ +らã¯ã‚«ãƒ¼ãƒãƒ«ã‚³ãƒŸãƒ¥ãƒ‹ãƒ†ã‚£ã¨ä¼šè©±ã™ã‚‹æ–¹æ³•ã‚’å­¦ã¶ã®ã«éžå¸¸ã«è²´é‡ãªã‚‚ã®ã§ã™ã€‚ +æ–°ã—ã„æ©Ÿèƒ½ãŒã‚«ãƒ¼ãƒãƒ«ã«è¿½åŠ ã•れる場åˆã€ãã®æ©Ÿèƒ½ã®ä½¿ã„æ–¹ã«ã¤ã„ã¦èª¬æ˜Žã—㟠+æ–°ã—ã„ドキュメントファイルも追加ã™ã‚‹ã“ã¨ã‚’å‹§ã‚ã¾ã™ã€‚ +カーãƒãƒ«ã®å¤‰æ›´ãŒã€ã‚«ãƒ¼ãƒãƒ«ãŒãƒ¦ãƒ¼ã‚¶ç©ºé–“ã«å…¬é–‹ã—ã¦ã„るインターフェイス㮠+変更を引ãèµ·ã“ã™å ´åˆã€ãã®å¤‰æ›´ã‚’説明ã™ã‚‹ãƒžãƒ‹ãƒ¥ã‚¢ãƒ«ãƒšãƒ¼ã‚¸ã®ãƒ‘ッãƒã‚„情報 +をマニュアルページã®ãƒ¡ãƒ³ãƒ†ãƒŠ mtk-manpages@gmx.net ã«é€ã‚‹ã“ã¨ã‚’å‹§ã‚ã¾ã™ã€‚ + +以下ã¯ã‚«ãƒ¼ãƒãƒ«ã‚½ãƒ¼ã‚¹ãƒ„リーã«å«ã¾ã‚Œã¦ã„る読んã§ãŠãã¹ãファイルã®ä¸€è¦§ã§ +ã™- + + README + ã“ã®ãƒ•ァイル㯠Linuxカーãƒãƒ«ã®ç°¡å˜ãªèƒŒæ™¯ã¨ã‚«ãƒ¼ãƒãƒ«ã‚’設定(訳注 + configure )ã—ã€ç”Ÿæˆ(訳注 build )ã™ã‚‹ãŸã‚ã«å¿…è¦ãªã“ã¨ã¯ä½•ã‹ãŒæ›¸ã‹ã‚Œ + ã¦ã„ã¾ã™ã€‚カーãƒãƒ«ã«é–¢ã—ã¦åˆã‚ã¦ã®äººã¯ã“ã“ã‹ã‚‰ã‚¹ã‚¿ãƒ¼ãƒˆã™ã‚‹ã¨ã‚ˆã„ã§ + ã—ょã†ã€‚ + + Documentation/Changes + ã“ã®ãƒ•ァイルã¯ã‚«ãƒ¼ãƒãƒ«ã‚’ã†ã¾ã生æˆ(訳注 build )ã—ã€èµ°ã‚‰ã›ã‚‹ã®ã«æœ€ + å°é™ã®ãƒ¬ãƒ™ãƒ«ã§å¿…è¦ãªæ•°ã€…ã®ã‚½ãƒ•トウェアパッケージã®ä¸€è¦§ã‚’示ã—ã¦ã„ + ã¾ã™ã€‚ + + Documentation/CodingStyle + ã“れ㯠Linux カーãƒãƒ«ã®ã‚³ãƒ¼ãƒ‡ã‚£ãƒ³ã‚°ã‚¹ã‚¿ã‚¤ãƒ«ã¨èƒŒæ™¯ã«ã‚ã‚‹ç†ç”±ã‚’記述 + ã—ã¦ã„ã¾ã™ã€‚å…¨ã¦ã®æ–°ã—ã„コードã¯ã“ã®ãƒ‰ã‚­ãƒ¥ãƒ¡ãƒ³ãƒˆã«ã‚るガイドライン + ã«å¾“ã£ã¦ã„ã‚‹ã“ã¨ã‚’期待ã•れã¦ã„ã¾ã™ã€‚大部分ã®ãƒ¡ãƒ³ãƒ†ãƒŠãƒ¼ã¯ã“れらã®ãƒ«ãƒ¼ + ルã«å¾“ã£ã¦ã„ã‚‹ã‚‚ã®ã ã‘ã‚’å—ã‘付ã‘ã€å¤šãã®äººã¯æ­£ã—ã„スタイルã®ã‚³ãƒ¼ãƒ‰ + ã ã‘をレビューã—ã¾ã™ã€‚ + + Documentation/SubmittingPatches + Documentation/SubmittingDrivers + ã“れらã®ãƒ•ァイルã«ã¯ã€ã©ã†ã‚„ã£ã¦ã†ã¾ãパッãƒã‚’作ã£ã¦æŠ•稿ã™ã‚‹ã‹ã« + ã¤ã„ã¦éžå¸¸ã«è©³ã—ãæ›¸ã‹ã‚Œã¦ãŠã‚Šã€ä»¥ä¸‹ã‚’å«ã¿ã¾ã™(ã“れã ã‘ã«é™ã‚‰ãªã„ + ã‘れã©ã‚‚) + - Email ã«å«ã‚€ã“㨠+ - Email ã®å½¢å¼ + - ã ã‚Œã«é€ã‚‹ã‹ + ã“れらã®ãƒ«ãƒ¼ãƒ«ã«å¾“ãˆã°ã†ã¾ãã„ãã“ã¨ã‚’ä¿è¨¼ã™ã‚‹ã“ã¨ã§ã¯ã‚りã¾ã›ã‚“ + ㌠(ã™ã¹ã¦ã®ãƒ‘ッãƒã¯å†…容ã¨ã‚¹ã‚¿ã‚¤ãƒ«ã«ã¤ã„ã¦ç²¾æŸ»ã‚’å—ã‘ã‚‹ã®ã§)〠+ ルールã«å¾“ã‚ãªã‘れã°é–“é•ã„ãªãã†ã¾ãã„ã‹ãªã„ã§ã—ょã†ã€‚ + ã“ã®ä»–ã«ãƒ‘ッãƒã‚’作る方法ã«ã¤ã„ã¦ã®ã‚ˆãã§ããŸè¨˜è¿°ã¯- + + "The Perfect Patch" + http://www.zip.com.au/~akpm/linux/patches/stuff/tpp.txt + "Linux kernel patch submission format" + http://linux.yyz.us/patch-format.html + + Documentation/stable_api_nonsense.txt + ã“ã®ãƒ•ァイルã¯ã‚«ãƒ¼ãƒãƒ«ã®ä¸­ã«ä¸å¤‰ã®APIã‚’æŒãŸãªã„ã“ã¨ã«ã—ãŸæ„識的㪠+ 決断ã®èƒŒæ™¯ã«ã‚ã‚‹ç†ç”±ã«ã¤ã„ã¦æ›¸ã‹ã‚Œã¦ã„ã¾ã™ã€‚以下ã®ã‚ˆã†ãªã“ã¨ã‚’å« + ã‚“ã§ã„ã¾ã™- + - サブシステムã¨ã®é–“ã«å±¤ã‚’作るã“ã¨(コンパãƒãƒ“リティã®ãŸã‚?) + - オペレーティングシステム間ã®ãƒ‰ãƒ©ã‚¤ãƒã®ç§»æ¤æ€§ + - カーãƒãƒ«ã‚½ãƒ¼ã‚¹ãƒ„リーã®ç´ æ—©ã„変更をé…らã›ã‚‹(ã‚‚ã—ãã¯ç´ æ—©ã„変更 + を妨ã’ã‚‹) + ã“ã®ãƒ‰ã‚­ãƒ¥ãƒ¡ãƒ³ãƒˆã¯ Linux é–‹ç™ºã®æ€æƒ³ã‚’ç†è§£ã™ã‚‹ã®ã«éžå¸¸ã«é‡è¦ã§ã™ã€‚ + ãã—ã¦ã€ä»–ã®OSã§ã®é–‹ç™ºè€…㌠Linux ã«ç§»ã‚‹æ™‚ã«ã¨ã¦ã‚‚é‡è¦ã§ã™ã€‚ + + Documentation/SecurityBugs + ã‚‚ã— Linux カーãƒãƒ«ã§ã‚»ã‚­ãƒ¥ãƒªãƒ†ã‚£å•題を発見ã—ãŸã‚ˆã†ã«æ€ã£ãŸã‚‰ã€ã“ + ã®ãƒ‰ã‚­ãƒ¥ãƒ¡ãƒ³ãƒˆã®ã‚¹ãƒ†ãƒƒãƒ—ã«å¾“ã£ã¦ã‚«ãƒ¼ãƒãƒ«é–‹ç™ºè€…ã«é€£çµ¡ã—ã€å•題解決を + 支æ´ã—ã¦ãã ã•ã„。 + + Documentation/ManagementStyle + ã“ã®ãƒ‰ã‚­ãƒ¥ãƒ¡ãƒ³ãƒˆã¯ Linux カーãƒãƒ«ã®ãƒ¡ãƒ³ãƒ†ãƒŠãƒ¼é”ãŒã©ã†è¡Œå‹•ã™ã‚‹ã‹ã€ + å½¼ã‚‰ã®æ‰‹æ³•ã®èƒŒæ™¯ã«ã‚る共有ã•れã¦ã„る精神ã«ã¤ã„ã¦è¨˜è¿°ã—ã¦ã„ã¾ã™ã€‚ã“ + れã¯ã‚«ãƒ¼ãƒãƒ«é–‹ç™ºã®åˆå¿ƒè€…ãªã‚‰ï¼ˆã‚‚ã—ãã¯ã€å˜ã«èˆˆå‘³ãŒã‚ã‚‹ã ã‘ã®äººã§ã‚‚) + é‡è¦ã§ã™ã€‚ãªãœãªã‚‰ã“ã®ãƒ‰ã‚­ãƒ¥ãƒ¡ãƒ³ãƒˆã¯ã€ã‚«ãƒ¼ãƒãƒ«ãƒ¡ãƒ³ãƒ†ãƒŠãƒ¼é”ã®ç‹¬ç‰¹ãª + 行動ã«ã¤ã„ã¦ã®å¤šãã®èª¤è§£ã‚„混乱を解消ã™ã‚‹ã‹ã‚‰ã§ã™ã€‚ + + Documentation/stable_kernel_rules.txt + ã“ã®ãƒ•ァイルã¯ã©ã®ã‚ˆã†ã« stable カーãƒãƒ«ã®ãƒªãƒªãƒ¼ã‚¹ãŒè¡Œã‚れるã‹ã®ãƒ«ãƒ¼ + ルãŒè¨˜è¿°ã•れã¦ã„ã¾ã™ã€‚ãã—ã¦ã“れらã®ãƒªãƒªãƒ¼ã‚¹ã®ä¸­ã®ã©ã“ã‹ã§å¤‰æ›´ã‚’å– + り入れã¦ã‚‚らã„ãŸã„å ´åˆã«ä½•ã‚’ã™ã‚Œã°ã„ã„ã‹ãŒç¤ºã•れã¦ã„ã¾ã™ã€‚ + + Documentation/kernel-docs.txt +  カーãƒãƒ«é–‹ç™ºã«ä»˜éšã™ã‚‹å¤–部ドキュメントã®ãƒªã‚¹ãƒˆã§ã™ã€‚ã‚‚ã—ã‚ãªãŸãŒ + 探ã—ã¦ã„ã‚‹ã‚‚ã®ãŒã‚«ãƒ¼ãƒãƒ«å†…ã®ãƒ‰ã‚­ãƒ¥ãƒ¡ãƒ³ãƒˆã§ã¿ã¤ã‹ã‚‰ãªã‹ã£ãŸå ´åˆã€ + ã“ã®ãƒªã‚¹ãƒˆã‚’ã‚ãŸã£ã¦ã¿ã¦ãã ã•ã„。 + + Documentation/applying-patches.txt + パッãƒã¨ã¯ãªã«ã‹ã€ãƒ‘ッãƒã‚’ã©ã†ã‚„ã£ã¦æ§˜ã€…ãªã‚«ãƒ¼ãƒãƒ«ã®é–‹ç™ºãƒ–ランãƒã« + é©ç”¨ã™ã‚‹ã®ã‹ã«ã¤ã„ã¦æ­£ç¢ºã«è¨˜è¿°ã—ãŸè‰¯ã„入門書ã§ã™ã€‚ + +カーãƒãƒ«ã¯ã‚½ãƒ¼ã‚¹ã‚³ãƒ¼ãƒ‰ã‹ã‚‰è‡ªå‹•çš„ã«ç”Ÿæˆå¯èƒ½ãªå¤šæ•°ã®ãƒ‰ã‚­ãƒ¥ãƒ¡ãƒ³ãƒˆã‚’自分自 +身ã§ã‚‚ã£ã¦ã„ã¾ã™ã€‚ã“れã«ã¯ã‚«ãƒ¼ãƒãƒ«å†… API ã®ã™ã¹ã¦ã®è¨˜è¿°ã‚„ã€ã©ã†æ­£ã—ã +ロックをã‹ã‘ã‚‹ã‹ã®è¦å‰‡ãŒå«ã¾ã‚Œã¾ã™ã€‚ã“ã®ãƒ‰ã‚­ãƒ¥ãƒ¡ãƒ³ãƒˆã¯ +Documentation/DocBook/ ディレクトリã«ä½œã‚‰ã‚Œã€ä»¥ä¸‹ã®ã‚ˆã†ã« + make pdfdocs + make psdocs + make htmldocs + make mandocs +コマンドを実行ã™ã‚‹ã¨ãƒ¡ã‚¤ãƒ³ã‚«ãƒ¼ãƒãƒ«ã®ã‚½ãƒ¼ã‚¹ãƒ‡ã‚£ãƒ¬ã‚¯ãƒˆãƒªã‹ã‚‰ +ãれãžã‚Œã€PDF, Postscript, HTML, man page ã®å½¢å¼ã§ç”Ÿæˆã•れã¾ã™ã€‚ + +カーãƒãƒ«é–‹ç™ºè€…ã«ãªã‚‹ã«ã¯ +--------------------------- + +ã‚‚ã—ã‚ãªãŸãŒã€Linux カーãƒãƒ«é–‹ç™ºã«ã¤ã„ã¦ä½•も知らãªã„ãªã‚‰ã°ã€ +KernelNewbies プロジェクトを見るã¹ãã§ã™ + http://kernelnewbies.org + +ã“ã®ã‚µã‚¤ãƒˆã«ã¯å½¹ã«ç«‹ã¤ãƒ¡ãƒ¼ãƒªãƒ³ã‚°ãƒªã‚¹ãƒˆãŒã‚りã€åŸºæœ¬çš„ãªã‚«ãƒ¼ãƒãƒ«é–‹ç™ºã«é–¢ +ã™ã‚‹ã»ã¨ã‚“ã©ã©ã‚“ãªç¨®é¡žã®è³ªå•ã‚‚ã§ãã¾ã™ (æ—¢ã«å›žç­”ã•れã¦ã„るよã†ãªã“ã¨ã‚’ +èžãå‰ã«ã¾ãšã¯ã‚¢ãƒ¼ã‚«ã‚¤ãƒ–を調ã¹ã¦ãã ã•ã„)。 +ã¾ãŸã“ã“ã«ã¯ã€ãƒªã‚¢ãƒ«ã‚¿ã‚¤ãƒ ã§è³ªå•ã‚’èžãã“ã¨ãŒã§ãã‚‹ IRC ãƒãƒ£ãƒãƒ«ã‚„ã€Linux +カーãƒãƒ«ã®é–‹ç™ºã«é–¢ã—ã¦å­¦ã¶ã®ã«ä¾¿åˆ©ãªãŸãã•ã‚“ã®å½¹ã«ç«‹ã¤ãƒ‰ã‚­ãƒ¥ãƒ¡ãƒ³ãƒˆãŒã‚ +りã¾ã™ã€‚ + +web サイトã«ã¯ã€ã‚³ãƒ¼ãƒ‰ã®æ§‹æˆã€ã‚µãƒ–システムã€ç¾åœ¨å­˜åœ¨ã™ã‚‹ãƒ—ロジェクト(ツ +リーã«ã‚ã‚‹ã‚‚ã®ç„¡ã„ã‚‚ã®ã®ä¸¡æ–¹)ã®åŸºæœ¬çš„ãªç®¡ç†æƒ…å ±ãŒã‚りã¾ã™ã€‚ +ã“ã“ã«ã¯ã€ã¾ãŸã€ã‚«ãƒ¼ãƒãƒ«ã®ã‚³ãƒ³ãƒ‘イルã®ã‚„り方やパッãƒã®å½“ã¦æ–¹ãªã©ã®é–“接 +çš„ãªåŸºæœ¬æƒ…報も記述ã•れã¦ã„ã¾ã™ã€‚ + +ã‚ãªãŸãŒã©ã“ã‹ã‚‰ã‚¹ã‚¿ãƒ¼ãƒˆã—ã¦ã‚ˆã„ã‹ã‚ã‹ã‚‰ãªã„ãŒã€Linux カーãƒãƒ«é–‹ç™ºã‚³ãƒŸãƒ¥ +ニティã«å‚加ã—ã¦ä½•ã‹ã™ã‚‹ã“ã¨ã‚’ã•ãŒã—ã¦ã„ã‚‹å ´åˆã«ã¯ã€Linux kernel +Janitor's プロジェクトã«ã„ã‘ã°ã‚ˆã„ã§ã—ょㆠ- + http://janitor.kernelnewbies.org/ +ã“ã“ã¯ãã®ã‚ˆã†ãªã‚¹ã‚¿ãƒ¼ãƒˆã‚’ã™ã‚‹ã®ã«ã†ã£ã¦ã¤ã‘ã®å ´æ‰€ã§ã™ã€‚ã“ã“ã«ã¯ã€ +Linux カーãƒãƒ«ã‚½ãƒ¼ã‚¹ãƒ„リーã®ä¸­ã«å«ã¾ã‚Œã‚‹ã€ãれã„ã«ã—ã€ä¿®æ­£ã—ãªã‘れã°ãª +らãªã„ã€å˜ç´”ãªå•題ã®ãƒªã‚¹ãƒˆãŒè¨˜è¿°ã•れã¦ã„ã¾ã™ã€‚ã“ã®ãƒ—ロジェクトã«é–¢ã‚ã‚‹ +開発者ã¨ä¸€ç·’ã«ä½œæ¥­ã™ã‚‹ã“ã¨ã§ã€ã‚ãªãŸã®ãƒ‘ッãƒã‚’ Linuxカーãƒãƒ«ãƒ„リーã«å…¥ +れるãŸã‚ã®åŸºç¤Žã‚’å­¦ã¶ã“ã¨ãŒã§ãã€ãã—ã¦ã‚‚ã—ã‚ãªãŸãŒã¾ã ã‚¢ã‚¤ãƒ‡ã‚£ã‚¢ã‚’æŒã£ +ã¦ã„ãªã„å ´åˆã«ã¯ã€æ¬¡ã«ã‚„ã‚‹ä»•äº‹ã®æ–¹å‘性ãŒè¦‹ãˆã¦ãã‚‹ã‹ã‚‚ã—れã¾ã›ã‚“。 + +ã‚‚ã—ã‚ãªãŸãŒã€ã™ã§ã«ã²ã¨ã¾ã¨ã¾ã‚Šã‚³ãƒ¼ãƒ‰ã‚’書ã„ã¦ã„ã¦ã€ã‚«ãƒ¼ãƒãƒ«ãƒ„リーã«å…¥ +れãŸã„ã¨æ€ã£ã¦ã„ãŸã‚Šã€ãれã«é–¢ã™ã‚‹é©åˆ‡ãªæ”¯æ´ã‚’求ã‚ãŸã„å ´åˆã€ã‚«ãƒ¼ãƒãƒ« +メンターズプロジェクトã¯ãã®ã‚ˆã†ãªçš†ã•んを助ã‘ã‚‹ãŸã‚ã«ã§ãã¾ã—ãŸã€‚ +ã“ã“ã«ã¯ãƒ¡ãƒ¼ãƒªãƒ³ã‚°ãƒªã‚¹ãƒˆãŒã‚りã€ä»¥ä¸‹ã‹ã‚‰å‚ç…§ã§ãã¾ã™ + http://selenic.com/mailman/listinfo/kernel-mentors + +実際㫠Linux カーãƒãƒ«ã®ã‚³ãƒ¼ãƒ‰ã«ã¤ã„ã¦ä¿®æ­£ã‚’加ãˆã‚‹å‰ã«ã€ã©ã†ã‚„ã£ã¦ãã® +コードãŒå‹•作ã™ã‚‹ã®ã‹ã‚’ç†è§£ã™ã‚‹ã“ã¨ãŒå¿…è¦ã§ã™ã€‚ãã®ãŸã‚ã«ã¯ã€ç‰¹åˆ¥ãªãƒ„ー +ルã®åŠ©ã‘を借りã¦ã§ã‚‚ã€ãれを直接よã読むã“ã¨ãŒæœ€è‰¯ã®æ–¹æ³•ã§ã™(ã»ã¨ã‚“ã© +ã®ãƒˆãƒªãƒƒã‚­ãƒ¼ãªéƒ¨åˆ†ã¯å分ã«ã‚³ãƒ¡ãƒ³ãƒˆã—ã¦ã‚りã¾ã™ã‹ã‚‰)。ãã†ã„ã†ãƒ„ール㧠+特ã«ãŠã™ã™ã‚ãªã®ã¯ã€Linux クロスリファレンスプロジェクトã§ã™ã€‚ã“れã¯ã€ +自己å‚ç…§æ–¹å¼ã§ã€ç´¢å¼•ãŒã¤ã„㟠web å½¢å¼ã§ã€ã‚½ãƒ¼ã‚¹ã‚³ãƒ¼ãƒ‰ã‚’å‚ç…§ã™ã‚‹ã“ã¨ãŒ +ã§ãã¾ã™ã€‚ã“ã®æœ€æ–°ã®ç´ æ™´ã—ã„カーãƒãƒ«ã‚³ãƒ¼ãƒ‰ã®ãƒªãƒã‚¸ãƒˆãƒªã¯ä»¥ä¸‹ã§è¦‹ã¤ã‹ã‚Š +ã¾ã™- + http://sosdg.org/~coywolf/lxr/ + +開発プロセス +----------------------- + +Linux カーãƒãƒ«ã®é–‹ç™ºãƒ—ロセスã¯ç¾åœ¨å¹¾ã¤ã‹ã®ç•°ãªã‚‹ãƒ¡ã‚¤ãƒ³ã‚«ãƒ¼ãƒãƒ«ã€Œãƒ–ラン +ãƒã€ã¨å¤šæ•°ã®ã‚µãƒ–システム毎ã®ã‚«ãƒ¼ãƒãƒ«ãƒ–ランãƒã‹ã‚‰æ§‹æˆã•れã¾ã™ã€‚ +ã“れらã®ãƒ–ランãƒã¨ã¯- + - メイン㮠2.6.x カーãƒãƒ«ãƒ„リー + - 2.6.x.y -stable カーãƒãƒ«ãƒ„リー + - 2.6.x -git カーãƒãƒ«ãƒ‘ッム+ - 2.6.x -mm カーãƒãƒ«ãƒ‘ッム+ - サブシステム毎ã®ã‚«ãƒ¼ãƒãƒ«ãƒ„リーã¨ãƒ‘ッム+ +2.6.x カーãƒãƒ«ãƒ„リー +----------------- + +2.6.x カーãƒãƒ«ã¯ Linus Torvalds ã«ã‚ˆã£ã¦ãƒ¡ãƒ³ãƒ†ãƒŠãƒ³ã‚¹ã•れã€kernel.org +ã® pub/linux/kernel/v2.6/ ディレクトリã«å­˜åœ¨ã—ã¾ã™ã€‚ã“ã®é–‹ç™ºãƒ—ロセス㯠+以下ã®ã¨ãŠã‚Š- + + - æ–°ã—ã„カーãƒãƒ«ãŒãƒªãƒªãƒ¼ã‚¹ã•れãŸç›´å¾Œã«ã€2週間ã®ç‰¹åˆ¥æœŸé–“ãŒè¨­ã‘られ〠+ ã“ã®æœŸé–“中ã«ã€ãƒ¡ãƒ³ãƒ†ãƒŠãƒ¼é”㯠Linus ã«å¤§ããªå·®åˆ†ã‚’é€ã‚‹ã“ã¨ãŒã§ãã¾ + ã™ã€‚ã“ã®ã‚ˆã†ãªå·®åˆ†ã¯é€šå¸¸ -mm カーãƒãƒ«ã«æ•°é€±é–“å«ã¾ã‚Œã¦ããŸãƒ‘ッãƒã§ + ã™ã€‚ 大ããªå¤‰æ›´ã¯ git(カーãƒãƒ«ã®ã‚½ãƒ¼ã‚¹ç®¡ç†ãƒ„ールã€è©³ç´°ã¯ + http://git.or.cz/ å‚ç…§) を使ã£ã¦é€ã‚‹ã®ãŒå¥½ã¾ã—ã„やり方ã§ã™ãŒã€ãƒ‘ッ + ãƒãƒ•ァイルã®å½¢å¼ã®ã¾ã¾é€ã‚‹ã®ã§ã‚‚å分ã§ã™ã€‚ + + - 2週間後ã€-rc1 カーãƒãƒ«ãŒãƒªãƒªãƒ¼ã‚¹ã•れã€ã“ã®å¾Œã«ã¯ã‚«ãƒ¼ãƒãƒ«å…¨ä½“ã®å®‰å®š + 性ã«å½±éŸ¿ã‚’ã‚ãŸãˆã‚‹ã‚ˆã†ãªæ–°æ©Ÿèƒ½ã¯å«ã¾ãªã„類ã®ãƒ‘ッãƒã—ã‹å–り込むã“㨠+ ã¯ã§ãã¾ã›ã‚“。新ã—ã„ドライãƒ(ã‚‚ã—ãã¯ãƒ•ァイルシステム)ã®ãƒ‘ッãƒã¯ + -rc1 ã®å¾Œã§å—ã‘付ã‘られるã“ã¨ã‚‚ã‚ã‚‹ã“ã¨ã‚’覚ãˆã¦ãŠã„ã¦ãã ã•ã„。㪠+ ãœãªã‚‰ã€å¤‰æ›´ãŒç‹¬ç«‹ã—ã¦ã„ã¦ã€è¿½åŠ ã•れãŸã‚³ãƒ¼ãƒ‰ã®å¤–ã®é ˜åŸŸã«å½±éŸ¿ã‚’与㈠+ ãªã„é™ã‚Šã€é€€è¡Œã®ãƒªã‚¹ã‚¯ã¯ç„¡ã„ã‹ã‚‰ã§ã™ã€‚-rc1 ãŒãƒªãƒªãƒ¼ã‚¹ã•れãŸå¾Œã€ + Linus ã¸ãƒ‘ッãƒã‚’é€ä»˜ã™ã‚‹ã®ã« git を使ã†ã“ã¨ã‚‚ã§ãã¾ã™ãŒã€ãƒ‘ッãƒã¯ + レビューã®ãŸã‚ã«ã€ãƒ‘ブリックãªãƒ¡ãƒ¼ãƒªãƒ³ã‚°ãƒªã‚¹ãƒˆã¸ã‚‚åŒæ™‚ã«é€ã‚‹å¿…è¦ãŒ + ã‚りã¾ã™ã€‚ + + - æ–°ã—ã„ -rc 㯠Linus ãŒã€æœ€æ–°ã® git ツリーãŒãƒ†ã‚¹ãƒˆç›®çš„ã§ã‚れã°å分 + ã«å®‰å®šã—ãŸçŠ¶æ…‹ã«ã‚ã‚‹ã¨åˆ¤æ–­ã—ãŸã¨ãã«ãƒªãƒªãƒ¼ã‚¹ã•れã¾ã™ã€‚ç›®æ¨™ã¯æ¯Žé€±æ–° + ã—ã„ -rc カーãƒãƒ«ã‚’リリースã™ã‚‹ã“ã¨ã§ã™ã€‚ + + - ã“ã®ãƒ—ロセスã¯ã‚«ãƒ¼ãƒãƒ«ãŒ 「準備ãŒã§ããŸã€ã¨è€ƒãˆã‚‰ã‚Œã‚‹ã¾ã§ç¶™ç¶šã—ã¾ + ã™ã€‚ã“ã®ãƒ—ロセスã¯ã ã„ãŸã„ 6週間継続ã—ã¾ã™ã€‚ + +Andrew Morton ㌠Linux-kernel メーリングリストã«ã‚«ãƒ¼ãƒãƒ«ãƒªãƒªãƒ¼ã‚¹ã«ã¤ã„ +ã¦æ›¸ã„ãŸã“ã¨ã‚’ã“ã“ã§è¨€ã£ã¦ãŠãã“ã¨ã¯ä¾¡å€¤ãŒã‚りã¾ã™- + 「カーãƒãƒ«ãŒã„ã¤ãƒªãƒªãƒ¼ã‚¹ã•れるã‹ã¯èª°ã‚‚知りã¾ã›ã‚“。ãªãœãªã‚‰ã€ã“れã¯ç¾ + 実ã«èªè­˜ã•れãŸãƒã‚°ã®çжæ³ã«ã‚ˆã‚Šãƒªãƒªãƒ¼ã‚¹ã•れるã®ã§ã‚りã€å‰ã‚‚ã£ã¦æ±ºã‚ら + れãŸè¨ˆç”»ã«ã‚ˆã£ã¦ãƒªãƒªãƒ¼ã‚¹ã•れるもã®ã§ã¯ãªã„ã‹ã‚‰ã§ã™ã€‚〠+ +2.6.x.y -stable カーãƒãƒ«ãƒ„リー +--------------------------- + +ãƒãƒ¼ã‚¸ãƒ§ãƒ³ã«4ã¤ç›®ã®æ•°å­—ãŒã¤ã„ãŸã‚«ãƒ¼ãƒãƒ«ã¯ -stable カーãƒãƒ«ã§ã™ã€‚ã“れ㫠+ã¯ã€2.6.x カーãƒãƒ«ã§è¦‹ã¤ã‹ã£ãŸã‚»ã‚­ãƒ¥ãƒªãƒ†ã‚£å•題やé‡å¤§ãªå¾Œæˆ»ã‚Šã«å¯¾ã™ã‚‹æ¯” +較的å°ã•ã„é‡è¦ãªä¿®æ­£ãŒå«ã¾ã‚Œã¾ã™ã€‚ + +ã“れã¯ã€é–‹ç™º/実験的ãƒãƒ¼ã‚¸ãƒ§ãƒ³ã®ãƒ†ã‚¹ãƒˆã«å”力ã™ã‚‹ã“ã¨ã«èˆˆå‘³ãŒç„¡ã〠+最新ã®å®‰å®šã—ãŸã‚«ãƒ¼ãƒãƒ«ã‚’使ã„ãŸã„ãƒ¦ãƒ¼ã‚¶ã«æŽ¨å¥¨ã™ã‚‹ãƒ–ランãƒã§ã™ã€‚ + +ã‚‚ã—ã€2.6.x.y カーãƒãƒ«ãŒå­˜åœ¨ã—ãªã„å ´åˆã«ã¯ã€ç•ªå·ãŒä¸€ç•ªå¤§ãã„ 2.6.x +ãŒæœ€æ–°ã®å®‰å®šç‰ˆã‚«ãƒ¼ãƒãƒ«ã§ã™ã€‚ + +2.6.x.y 㯠"stable" ãƒãƒ¼ãƒ  ã§ãƒ¡ãƒ³ãƒ†ã•れã¦ãŠã‚Šã€ã  +ã„ãŸã„隔週ã§ãƒªãƒªãƒ¼ã‚¹ã•れã¦ã„ã¾ã™ã€‚ + +カーãƒãƒ«ãƒ„リーã«å…¥ã£ã¦ã„ã‚‹ã€Documentation/stable_kernel_rules.txt ファ +イルã«ã¯ã©ã®ã‚ˆã†ãªç¨®é¡žã®å¤‰æ›´ãŒ -stable ツリーã«å—ã‘入れå¯èƒ½ã‹ã€ã¾ãŸãƒª +リースプロセスãŒã©ã†å‹•ãã‹ãŒè¨˜è¿°ã•れã¦ã„ã¾ã™ã€‚ + +2.6.x -git パッム+------------------ + +git リãƒã‚¸ãƒˆãƒªã§ç®¡ç†ã•れã¦ã„ã‚‹Linus ã®ã‚«ãƒ¼ãƒãƒ«ãƒ„ãƒªãƒ¼ã®æ¯Žæ—¥ã®ã‚¹ãƒŠãƒƒãƒ— +ショットãŒã‚りã¾ã™ã€‚(ã ã‹ã‚‰ -git ã¨ã„ã†åå‰ãŒã¤ã„ã¦ã„ã¾ã™)。ã“れらã®ãƒ‘ッ +ãƒã¯ãŠãŠã‚€ã­æ¯Žæ—¥ãƒªãƒªãƒ¼ã‚¹ã•れã¦ãŠã‚Šã€Linus ã®ãƒ„リーã®ç¾çŠ¶ã‚’è¡¨ã—ã¾ã™ã€‚ã“ +れ㯠-rc カーãƒãƒ«ã¨æ¯”ã¹ã¦ã€ãƒ‘ッãƒãŒå¤§ä¸ˆå¤«ã‹ã©ã†ã‹ã‚‚確èªã—ãªã„ã§è‡ªå‹•çš„ +ã«ç”Ÿæˆã•れるã®ã§ã€ã‚ˆã‚Šå®Ÿé¨“çš„ã§ã™ã€‚ + +2.6.x -mm カーãƒãƒ«ãƒ‘ッム+------------------------ + +Andrew Morton ã«ã‚ˆã£ã¦ãƒªãƒªãƒ¼ã‚¹ã•れる実験的ãªã‚«ãƒ¼ãƒãƒ«ãƒ‘ッãƒç¾¤ã§ã™ã€‚ +Andrew ã¯å€‹åˆ¥ã®ã‚µãƒ–システムカーãƒãƒ«ãƒ„リーã¨ãƒ‘ッãƒã‚’å…¨ã¦é›†ã‚ã¦ã㦠+linux-kernel メーリングリストã§åŽé›†ã•れãŸå¤šæ•°ã®ãƒ‘ッãƒã¨åŒæ™‚ã«ä¸€ã¤ã«ã¾ +ã¨ã‚ã¾ã™ã€‚ +ã“ã®ãƒ„ãƒªãƒ¼ã¯æ–°æ©Ÿèƒ½ã¨ãƒ‘ッãƒãŒæ¤œè¨¼ã•れる場ã¨ãªã‚Šã¾ã™ã€‚ã‚る期間ã®é–“パッム+㌠-mm ã«å…¥ã£ã¦ä¾¡å€¤ã‚’証明ã•れãŸã‚‰ã€Andrew やサブシステムメンテナãŒã€ãƒ¡ +インラインã¸å…¥ã‚Œã‚‹ã‚ˆã†ã« Linus ã«ãƒ—ッシュã—ã¾ã™ã€‚ + +メインカーãƒãƒ«ãƒ„リーã«å«ã‚ã‚‹ãŸã‚ã« Linus ã«é€ã‚‹å‰ã«ã€ã™ã¹ã¦ã®æ–°ã—ã„パッ +ãƒãŒ -mm ツリーã§ãƒ†ã‚¹ãƒˆã•れるã“ã¨ãŒå¼·ã推奨ã•れã¾ã™ã€‚ + +ã“れらã®ã‚«ãƒ¼ãƒãƒ«ã¯å®‰å®šã—ã¦å‹•作ã™ã¹ãシステムã¨ã—ã¦ä½¿ã†ã®ã«ã¯é©åˆ‡ã§ã¯ã‚ +りã¾ã›ã‚“ã—ã€ã‚«ãƒ¼ãƒãƒ«ãƒ–ランãƒã®ä¸­ã§ã‚‚ã‚‚ã£ã¨ã‚‚動作ã«ãƒªã‚¹ã‚¯ãŒé«˜ã„ã‚‚ã®ã§ã™ã€‚ + +ã‚‚ã—ã‚ãªãŸãŒã€ã‚«ãƒ¼ãƒãƒ«é–‹ç™ºãƒ—ãƒ­ã‚»ã‚¹ã®æ”¯æ´ã‚’ã—ãŸã„ã¨æ€ã£ã¦ã„ã‚‹ã®ã§ã‚れã°ã€ +ã©ã†ãžã“れらã®ã‚«ãƒ¼ãƒãƒ«ãƒªãƒªãƒ¼ã‚¹ã‚’テストã«ä½¿ã£ã¦ã¿ã¦ã€ãã—ã¦ã‚‚ã—å•題ãŒã‚ +れã°ã€ã¾ãŸã‚‚ã—å…¨ã¦ãŒæ­£ã—ã動作ã—ãŸã¨ã—ã¦ã‚‚ã€linux-kernel メーリングリ +ストã«ãƒ•ィードãƒãƒƒã‚¯ã‚’æä¾›ã—ã¦ãã ã•ã„。 + +ã™ã¹ã¦ã®ä»–ã®å®Ÿé¨“的パッãƒã«åŠ ãˆã¦ã€ã“れらã®ã‚«ãƒ¼ãƒãƒ«ã¯é€šå¸¸ãƒªãƒªãƒ¼ã‚¹æ™‚点㧠+メインライン㮠-git カーãƒãƒ«ã«å«ã¾ã‚Œã‚‹å…¨ã¦ã®å¤‰æ›´ã‚‚å«ã‚“ã§ã„ã¾ã™ã€‚ + +-mm カーãƒãƒ«ã¯æ±ºã¾ã£ãŸã‚¹ã‚±ã‚¸ãƒ¥ãƒ¼ãƒ«ã§ã¯ãƒªãƒªãƒ¼ã‚¹ã•れã¾ã›ã‚“ã€ã—ã‹ã—通常幾 +ã¤ã‹ã® -mm カーãƒãƒ« (1 ã‹ã‚‰ 3 ãŒæ™®é€šï¼‰ãŒå„-rc カーãƒãƒ«ã®é–“ã«ãƒªãƒªãƒ¼ã‚¹ã• +れã¾ã™ã€‚ + +サブシステム毎ã®ã‚«ãƒ¼ãƒãƒ«ãƒ„リーã¨ãƒ‘ッム+------------------------------------------- + +カーãƒãƒ«ã®æ§˜ã€…ãªé ˜åŸŸã§ä½•ãŒèµ·ãã¦ã„ã‚‹ã‹ã‚’見られるよã†ã«ã™ã‚‹ãŸã‚ã€å¤šãã® +カーãƒãƒ«ã‚µãƒ–システム開発者ã¯å½¼ã‚‰ã®é–‹ç™ºãƒ„リーを公開ã—ã¦ã„ã¾ã™ã€‚ã“れら㮠+ツリーã¯èª¬æ˜Žã—ãŸã‚ˆã†ã« -mm カーãƒãƒ«ãƒªãƒªãƒ¼ã‚¹ã«å…¥ã‚Œè¾¼ã¾ã‚Œã¾ã™ã€‚ + +以下ã¯ã•ã¾ã–ã¾ãªã‚«ãƒ¼ãƒãƒ«ãƒ„リーã®ä¸­ã®ã„ãã¤ã‹ã®ãƒªã‚¹ãƒˆ- + + git ツリー- + - Kbuild ã®é–‹ç™ºãƒ„リーã€Sam Ravnborg + kernel.org:/pub/scm/linux/kernel/git/sam/kbuild.git + + - ACPI ã®é–‹ç™ºãƒ„リー〠Len Brown + kernel.org:/pub/scm/linux/kernel/git/lenb/linux-acpi-2.6.git + + - Block ã®é–‹ç™ºãƒ„リーã€Jens Axboe + kernel.org:/pub/scm/linux/kernel/git/axboe/linux-2.6-block.git + + - DRM ã®é–‹ç™ºãƒ„リーã€Dave Airlie + kernel.org:/pub/scm/linux/kernel/git/airlied/drm-2.6.git + + - ia64 ã®é–‹ç™ºãƒ„リーã€Tony Luck + kernel.org:/pub/scm/linux/kernel/git/aegl/linux-2.6.git + + - ieee1394 ã®é–‹ç™ºãƒ„リーã€Jody McIntyre + kernel.org:/pub/scm/linux/kernel/git/scjody/ieee1394.git + + - infiniband, Roland Dreier + kernel.org:/pub/scm/linux/kernel/git/roland/infiniband.git + + - libata, Jeff Garzik + kernel.org:/pub/scm/linux/kernel/git/jgarzik/libata-dev.git + + - ãƒãƒƒãƒˆãƒ¯ãƒ¼ã‚¯ãƒ‰ãƒ©ã‚¤ãƒ, Jeff Garzik + kernel.org:/pub/scm/linux/kernel/git/jgarzik/netdev-2.6.git + + - pcmcia, Dominik Brodowski + kernel.org:/pub/scm/linux/kernel/git/brodo/pcmcia-2.6.git + + - SCSI, James Bottomley + kernel.org:/pub/scm/linux/kernel/git/jejb/scsi-misc-2.6.git + + ãã®ä»–ã® git カーãƒãƒ«ãƒ„リー㯠http://kernel.org/git ã«ä¸€è¦§è¡¨ãŒã‚り㾠+ ã™ã€‚ + + quilt ツリー- + - USB, PCI ドライãƒã‚³ã‚¢ã¨ I2C, Greg Kroah-Hartman + kernel.org/pub/linux/kernel/people/gregkh/gregkh-2.6/ + +ãƒã‚°ãƒ¬ãƒãƒ¼ãƒˆ +------------- + +bugzilla.kernel.org 㯠Linux カーãƒãƒ«é–‹ç™ºè€…ãŒã‚«ãƒ¼ãƒãƒ«ã®ãƒã‚°ã‚’追跡ã™ã‚‹ +場所ã§ã™ã€‚ユーザã¯è¦‹ã¤ã‘ãŸãƒã‚°ã®å…¨ã¦ã‚’ã“ã®ãƒ„ールã§å ±å‘Šã™ã¹ãã§ã™ã€‚ +ã©ã† kernel bugzilla を使ã†ã‹ã®è©³ç´°ã¯ã€ä»¥ä¸‹ã‚’å‚ç…§ã—ã¦ãã ã•ã„- + http://test.kernel.org/bugzilla/faq.html + +メインカーãƒãƒ«ã‚½ãƒ¼ã‚¹ãƒ‡ã‚£ãƒ¬ã‚¯ãƒˆãƒªã«ã‚るファイル REPORTING-BUGS ã¯ã‚«ãƒ¼ãƒ +ルãƒã‚°ã‚‰ã—ã„ã‚‚ã®ã«ã¤ã„ã¦ã©ã†ãƒ¬ãƒãƒ¼ãƒˆã™ã‚‹ã‹ã®è‰¯ã„テンプレートã§ã‚りã€å• +題ã®è¿½è·¡ã‚’助ã‘ã‚‹ãŸã‚ã«ã‚«ãƒ¼ãƒãƒ«é–‹ç™ºè€…ã«ã¨ã£ã¦ã©ã‚“ãªæƒ…å ±ãŒå¿…è¦ãªã®ã‹ã®è©³ +ç´°ãŒæ›¸ã‹ã‚Œã¦ã„ã¾ã™ã€‚ + +メーリングリスト +------------- + +上ã®ã„ãã¤ã‹ã®ãƒ‰ã‚­ãƒ¥ãƒ¡ãƒ³ãƒˆã§è¿°ã¹ã¦ã„ã¾ã™ãŒã€ã‚³ã‚¢ã‚«ãƒ¼ãƒãƒ«é–‹ç™ºè€…ã®å¤§éƒ¨åˆ† +㯠Linux kernel メーリングリストã«å‚加ã—ã¦ã„ã¾ã™ã€‚ã“ã®ãƒªã‚¹ãƒˆã®ç™»éŒ²/脱 +é€€ã®æ–¹æ³•ã«ã¤ã„ã¦ã¯ä»¥ä¸‹ã‚’å‚ç…§ã—ã¦ãã ã•ã„- + http://vger.kernel.org/vger-lists.html#linux-kernel + +ã“ã®ãƒ¡ãƒ¼ãƒªãƒ³ã‚°ãƒªã‚¹ãƒˆã®ã‚¢ãƒ¼ã‚«ã‚¤ãƒ–㯠web 上ã®å¤šæ•°ã®å ´æ‰€ã«å­˜åœ¨ã—ã¾ã™ã€‚ã“ +れらã®ã‚¢ãƒ¼ã‚«ã‚¤ãƒ–を探ã™ã«ã¯ã‚µãƒ¼ãƒã‚¨ãƒ³ã‚¸ãƒ³ã‚’使ã„ã¾ã—ょã†ã€‚例ãˆã°- + http://dir.gmane.org/gmane.linux.kernel + +ãƒªã‚¹ãƒˆã«æŠ•ç¨¿ã™ã‚‹å‰ã«ã™ã§ã«ãã®è©±é¡ŒãŒã‚¢ãƒ¼ã‚«ã‚¤ãƒ–ã«å­˜åœ¨ã™ã‚‹ã‹ã©ã†ã‹ã‚’検索 +ã™ã‚‹ã“ã¨ã‚’是éžã‚„ã£ã¦ãã ã•ã„。多数ã®äº‹ãŒã™ã§ã«è©³ç´°ã«æ¸¡ã£ã¦è­°è«–ã•れ㦠+ãŠã‚Šã€ã‚¢ãƒ¼ã‚«ã‚¤ãƒ–ã«ã®ã¿è¨˜éŒ²ã•れã¦ã„ã¾ã™ã€‚ + +大部分ã®ã‚«ãƒ¼ãƒãƒ«ã‚µãƒ–システムも自分ã®å€‹åˆ¥ã®é–‹ç™ºã‚’実施ã™ã‚‹ãƒ¡ãƒ¼ãƒªãƒ³ã‚°ãƒªã‚¹ +トをæŒã£ã¦ã„ã¾ã™ã€‚個々ã®ã‚°ãƒ«ãƒ¼ãƒ—ãŒã©ã‚“ãªãƒªã‚¹ãƒˆã‚’æŒã£ã¦ã„ã‚‹ã‹ã¯ã€ +MAINTAINERS ファイルã«ãƒªã‚¹ãƒˆãŒã‚りã¾ã™ã®ã§å‚ç…§ã—ã¦ãã ã•ã„。 + +多ãã®ãƒªã‚¹ãƒˆã¯ kernel.org ã§ãƒ›ã‚¹ãƒˆã•れã¦ã„ã¾ã™ã€‚ã“ã‚Œã‚‰ã®æƒ…å ±ã¯ä»¥ä¸‹ã«ã‚ +りã¾ã™- + http://vger.kernel.org/vger-lists.html + +メーリングリストを使ã†å ´åˆã€è‰¯ã„行動習慣ã«å¾“ã†ã‚ˆã†ã«ã—ã¾ã—ょã†ã€‚ +å°‘ã—安ã£ã½ã„ãŒã€ä»¥ä¸‹ã® URL ã¯ä¸Šã®ãƒªã‚¹ãƒˆ(ã‚„ä»–ã®ãƒªã‚¹ãƒˆ)ã§ä¼šè©±ã™ã‚‹å ´åˆã® +シンプルãªã‚¬ã‚¤ãƒ‰ãƒ©ã‚¤ãƒ³ã‚’示ã—ã¦ã„ã¾ã™- + http://www.albion.com/netiquette/ + +ã‚‚ã—複数ã®äººãŒã‚ãªãŸã®ãƒ¡ãƒ¼ãƒ«ã«è¿”事をã—ãŸå ´åˆã€CC: ã§å—ã‘る人ã®ãƒªã‚¹ãƒˆã¯ +ã ã„ã¶å¤šããªã‚‹ã§ã—ょã†ã€‚良ã„ç†ç”±ãŒãªã„å ´åˆã€CC: リストã‹ã‚‰èª°ã‹ã‚’削除を +ã—ãªã„よã†ã«ã€ã¾ãŸã€ãƒ¡ãƒ¼ãƒªãƒ³ã‚°ãƒªã‚¹ãƒˆã®ã‚¢ãƒ‰ãƒ¬ã‚¹ã ã‘ã«ãƒªãƒ—ライã™ã‚‹ã“ã¨ã® +ãªã„よã†ã«ã—ã¾ã—ょã†ã€‚1ã¤ã¯é€ä¿¡è€…ã‹ã‚‰ã€ã‚‚ã†1ã¤ã¯ãƒªã‚¹ãƒˆã‹ã‚‰ã®ã‚ˆã†ã«ã€ãƒ¡ãƒ¼ +ルを2回å—ã‘ã‚‹ã“ã¨ã«ãªã£ã¦ã‚‚ãã‚Œã«æ…£ã‚Œã€ã—ゃれãŸãƒ¡ãƒ¼ãƒ«ãƒ˜ãƒƒãƒ€ãƒ¼ã‚’追加㗠+ã¦ã“ã®çŠ¶æ…‹ã‚’å¤‰ãˆã‚ˆã†ã¨ã—ãªã„よã†ã«ã€‚人々ã¯ãã®ã‚ˆã†ãªã“ã¨ã¯å¥½ã¿ã¾ã›ã‚“。 + +今ã¾ã§ã®ãƒ¡ãƒ¼ãƒ«ã§ã®ã‚„りã¨ã‚Šã¨ãã®é–“ã®ã‚ãªãŸã®ç™ºè¨€ã¯ãã®ã¾ã¾æ®‹ã—〠+"John Kernlehacker wrote ...:" ã®è¡Œã‚’ã‚ãªãŸã®ãƒªãƒ—ライã®å…ˆé ­è¡Œã«ã—ã¦ã€ +メールã®å…ˆé ­ã§ãªãã€å„引用行ã®é–“ã«ã‚ãªãŸã®è¨€ã„ãŸã„ã“ã¨ã‚’追加ã™ã‚‹ã¹ãã§ +ã™ã€‚ + +ã‚‚ã—パッãƒã‚’メールã«ä»˜ã‘ã‚‹å ´åˆã¯ã€Documentaion/SubmittingPatches ã«æ +示ã•れã¦ã„るよã†ã«ã€ãれ㯠プレーンãªå¯èª­ãƒ†ã‚­ã‚¹ãƒˆã«ã™ã‚‹ã“ã¨ã‚’忘れãªã„ +よã†ã«ã—ã¾ã—ょã†ã€‚カーãƒãƒ«é–‹ç™ºè€…㯠添付や圧縮ã—ãŸãƒ‘ッãƒã‚’扱ã„ãŸãŒã‚Šã¾ +ã›ã‚“- +彼らã¯ã‚ãªãŸã®ãƒ‘ッãƒã®è¡Œæ¯Žã«ã‚³ãƒ¡ãƒ³ãƒˆã‚’入れãŸã„ã®ã§ã€ãã®ãŸã‚ã«ã¯ãã†ã™ +ã‚‹ã—ã‹ã‚りã¾ã›ã‚“。ã‚ãªãŸã®ãƒ¡ãƒ¼ãƒ«ãƒ—ログラムãŒç©ºç™½ã‚„タブを圧縮ã—ãªã„よㆠ+ã«ç¢ºèªã—ãŸæ–¹ãŒã„ã„ã§ã™ã€‚最åˆã®è‰¯ã„テストã¨ã—ã¦ã¯ã€è‡ªåˆ†ã«ãƒ¡ãƒ¼ãƒ«ã‚’é€ã£ã¦ +ã¿ã¦ã€ãã®ãƒ‘ッãƒã‚’自分ã§å½“ã¦ã¦ã¿ã‚‹ã“ã¨ã§ã™ã€‚ã‚‚ã—ãれãŒã†ã¾ã行ã‹ãªã„㪠+らã€ã‚ãªãŸã®ãƒ¡ãƒ¼ãƒ«ãƒ—ログラムを直ã—ã¦ã‚‚らã†ã‹ã€æ­£ã—ãå‹•ãよã†ã«å¤‰ãˆã‚‹ã¹ +ãã§ã™ã€‚ + +ã¨ã‚Šã‚ã‘ã€ä»–ã®ç™»éŒ²è€…ã«å¯¾ã™ã‚‹å°Šæ•¬ã‚’表ã™ã‚ˆã†ã«ã™ã‚‹ã“ã¨ã‚’覚ãˆã¦ãŠã„ã¦ãã  +ã•ã„。 + +コミュニティã¨å…±ã«åƒãã“㨠+-------------------------- + +カーãƒãƒ«ã‚³ãƒŸãƒ¥ãƒ‹ãƒ†ã‚£ã®ã‚´ãƒ¼ãƒ«ã¯å¯èƒ½ãªã‹ãŽã‚Šæœ€é«˜ã®ã‚«ãƒ¼ãƒãƒ«ã‚’æä¾›ã™ã‚‹ã“㨠+ã§ã™ã€‚ã‚ãªãŸãŒãƒ‘ッãƒã‚’å—ã‘入れã¦ã‚‚らã†ãŸã‚ã«æŠ•ç¨¿ã—ãŸå ´åˆã€ãれã¯ã€æŠ€è¡“ +的メリットã ã‘ãŒãƒ¬ãƒ“ューã•れã¾ã™ã€‚ãã®éš›ã€ã‚ãªãŸã¯ä½•を予想ã™ã¹ãã§ã—ょ +ã†ã‹? + - 批判 + - コメント + - 変更ã®è¦æ±‚ + - パッãƒã®æ­£å½“性ã®è¨¼æ˜Žè¦æ±‚ + - 沈黙 + +æ€ã„出ã—ã¦ãã ã•ã„ã€ã“ã“ã¯ã‚ãªãŸã®ãƒ‘ッãƒã‚’カーãƒãƒ«ã«å…¥ã‚Œã‚‹è©±ã§ã™ã€‚ã‚ +ãªãŸã¯ã€ã‚ãªãŸã®ãƒ‘ッãƒã«å¯¾ã™ã‚‹æ‰¹åˆ¤ã¨ã‚³ãƒ¡ãƒ³ãƒˆã‚’å—ã‘入れるã¹ãã§ã€ãれら +を技術的レベルã§è©•価ã—ã¦ã€ãƒ‘ッãƒã‚’å†ä½œæˆã™ã‚‹ã‹ã€ãªãœãれらã®å¤‰æ›´ã‚’ã™ã¹ +ãã§ãªã„ã‹ã‚’明確ã§ç°¡æ½”ãªç†ç”±ã®èª¬æ˜Žã‚’æä¾›ã—ã¦ãã ã•ã„。 +ã‚‚ã—ã€ã‚ãªãŸã®ãƒ‘ッãƒã«ä½•ã‚‚å応ãŒãªã„å ´åˆã€ãŸã¾ã«ã¯ãƒ¡ãƒ¼ãƒ«ã®å±±ã«åŸ‹ã‚‚れ㦠+見逃ã•れã€ã‚ãªãŸã®æŠ•稿ãŒå¿˜ã‚Œã‚‰ã‚Œã¦ã—ã¾ã†ã“ã¨ã‚‚ã‚ã‚‹ã®ã§ã€æ•°æ—¥å¾…ã£ã¦å†åº¦ +投稿ã—ã¦ãã ã•ã„。 + +ã‚ãªãŸãŒã‚„ã‚‹ã¹ãã§ãªã„ã‚‚ã®ã¯? + - 質å•ãªã—ã«ã‚ãªãŸã®ãƒ‘ッãƒãŒå—ã‘å…¥ã‚Œã‚‰ã‚Œã‚‹ã¨æƒ³åƒã™ã‚‹ã“㨠+ - 守りã«å…¥ã‚‹ã“㨠+ - コメントを無視ã™ã‚‹ã“㨠+ - è¦æ±‚ã•れãŸå¤‰æ›´ã‚’何もã—ãªã„ã§ãƒ‘ッãƒã‚’出ã—ç›´ã™ã“㨠+ +å¯èƒ½ãªé™ã‚Šæœ€é«˜ã®æŠ€è¡“的解決を求ã‚ã¦ã„るコミュニティã§ã¯ã€ãƒ‘ッãƒãŒã©ã®ã +ã‚‰ã„æœ‰ç›Šãªã®ã‹ã«ã¤ã„ã¦ã¯å¸¸ã«ç•°ãªã‚‹æ„見ãŒã‚りã¾ã™ã€‚ã‚ãªãŸã¯å”調的ã§ã‚ã‚‹ +ã¹ãã§ã™ã—ã€ã¾ãŸã€ã‚ãªãŸã®ã‚¢ã‚¤ãƒ‡ã‚£ã‚¢ã‚’カーãƒãƒ«ã«å¯¾ã—ã¦ã†ã¾ãåˆã‚ã›ã‚‹ã‚ˆ +ã†ã«ã™ã‚‹ã“ã¨ãŒæœ›ã¾ã‚Œã¦ã„ã¾ã™ã€‚ã‚‚ã—ãã¯ã€æœ€ä½Žé™ã‚ãªãŸã®ã‚¢ã‚¤ãƒ‡ã‚£ã‚¢ãŒãれ +ã ã‘ã®ä¾¡å€¤ãŒã‚ã‚‹ã¨ã™ã™ã‚“ã§è¨¼æ˜Žã™ã‚‹ã‚ˆã†ã«ã—ãªã‘れã°ãªã‚Šã¾ã›ã‚“。 +æ­£ã—ã„解決ã«å‘ã‹ã£ã¦é€²ã‚‚ã†ã¨ã„ã†æ„å¿—ãŒã‚ã‚‹é™ã‚Šã€é–“é•ã†ã“ã¨ãŒã‚ã£ã¦ã‚‚許 +容ã•れるã“ã¨ã‚’忘れãªã„ã§ãã ã•ã„。 + +ã‚ãªãŸã®æœ€åˆã®ãƒ‘ッãƒã«å˜ã« 1ダースもã®ä¿®æ­£ã‚’求ã‚るリストã®è¿”ç­”ã«ãªã‚‹ã“ +ã¨ã‚‚普通ã®ã“ã¨ã§ã™ã€‚ã“れã¯ã‚ãªãŸã®ãƒ‘ッãƒãŒå—ã‘入れられãªã„ã¨ã„ã†ã“ã¨ã§ +㯠*ã‚りã¾ã›ã‚“*ã€ãã—ã¦ã‚ãªãŸè‡ªèº«ã«å対ã™ã‚‹ã“ã¨ã‚’æ„味ã™ã‚‹ã®ã§ã‚‚ *ã‚り㾠+ã›ã‚“*。å˜ã«è‡ªåˆ†ã®ãƒ‘ッãƒã«å¯¾ã—ã¦æŒ‡æ‘˜ã•れãŸå•題を全ã¦ä¿®æ­£ã—ã¦å†é€ã™ã‚Œã° +ã„ã„ã®ã§ã™ã€‚ + +カーãƒãƒ«ã‚³ãƒŸãƒ¥ãƒ‹ãƒ†ã‚£ã¨ä¼æ¥­çµ„ç¹”ã®ã¡ãŒã„ +----------------------------------------------------------------- + +カーãƒãƒ«ã‚³ãƒŸãƒ¥ãƒ‹ãƒ†ã‚£ã¯å¤§éƒ¨åˆ†ã®ä¼çµ±çš„ãªä¼šç¤¾ã®é–‹ç™ºç’°å¢ƒã¨ã¯ç•°ã£ãŸã‚„り方㧠+å‹•ã„ã¦ã„ã¾ã™ã€‚以下ã¯å•題をé¿ã‘ã‚‹ãŸã‚ã«ã§ãã‚‹ã¨ã‚ˆã„ã“ã¨ã®ã®ãƒªã‚¹ãƒˆã§ã™- + + ã‚ãªãŸã®ææ¡ˆã™ã‚‹å¤‰æ›´ã«ã¤ã„ã¦è¨€ã†ã¨ãã®ã†ã¾ã„è¨€ã„æ–¹ï¼š + + - "ã“れã¯è¤‡æ•°ã®å•題を解決ã—ã¾ã™" + - "ã“れã¯2000行ã®ã‚³ãƒ¼ãƒ‰ã‚’削除ã—ã¾ã™" + - "以下ã®ãƒ‘ッãƒã¯ã€ç§ãŒè¨€ãŠã†ã¨ã—ã¦ã„ã‚‹ã“ã¨ã‚’説明ã™ã‚‹ã‚‚ã®ã§ã™" + - "ç§ã¯ã“れを5ã¤ã®ç•°ãªã‚‹ã‚¢ãƒ¼ã‚­ãƒ†ã‚¯ãƒãƒ£ã§ãƒ†ã‚¹ãƒˆã—ãŸã®ã§ã™ãŒ..." + - "以下ã¯ä¸€é€£ã®å°ã•ãªãƒ‘ッãƒç¾¤ã§ã™ãŒ..." + - "ã“れã¯å…¸åž‹çš„ãªãƒžã‚·ãƒ³ã§ã®æ€§èƒ½ã‚’å‘上ã•ã›ã¾ã™.." + + ã‚„ã‚ãŸæ–¹ãŒã„ã„æ‚ªã„è¨€ã„æ–¹ï¼š + + - ã“ã®ã‚„り方㧠AIX/ptx/Solaris ã§ã¯ã§ããŸã®ã§ã€ã§ãã‚‹ã¯ãšã  + - ç§ã¯ã“れを20å¹´ã‚‚ã®é–“ã‚„ã£ã¦ããŸã€ã ã‹ã‚‰ + - ã“れã¯ã€ç§ã®ä¼šç¤¾ãŒé‡‘儲ã‘ã‚’ã™ã‚‹ãŸã‚ã«å¿…è¦ã  + - ã“ã‚Œã¯æˆ‘々ã®ã‚¨ãƒ³ã‚¿ãƒ¼ãƒ—ライズå‘ã‘商å“ラインã®ãŸã‚ã§ã‚ã‚‹ + - ã“れ㯠ç§ãŒè‡ªåˆ†ã®ã‚¢ã‚¤ãƒ‡ã‚£ã‚¢ã‚’記述ã—ãŸã€1000ページã®è¨­è¨ˆè³‡æ–™ã§ã‚ã‚‹ + - ç§ã¯ã“れã«ã¤ã„ã¦ã€6ケ月作業ã—ã¦ã„る。 + - 以下㯠... ã«é–¢ã™ã‚‹5000行ã®ãƒ‘ッãƒã§ã™ + - ç§ã¯ç¾åœ¨ã®ãã¡ã‚ƒãã¡ã‚ƒã‚’全部書ãç›´ã—ãŸã€ãれãŒä»¥ä¸‹ã§ã™... + - ç§ã¯ã€†åˆ‡ãŒã‚ã‚‹ã€ãã®ãŸã‚ã“ã®ãƒ‘ッãƒã¯ä»Šã™ãé©ç”¨ã•れる必è¦ãŒã‚ã‚‹ + +カーãƒãƒ«ã‚³ãƒŸãƒ¥ãƒ‹ãƒ†ã‚£ãŒå¤§éƒ¨åˆ†ã®ä¼çµ±çš„ãªã‚½ãƒ•トウェアエンジニアリングã®åŠ´ +åƒç’°å¢ƒã¨ç•°ãªã‚‹ã‚‚ã†ä¸€ã¤ã®ç‚¹ã¯ã€ã‚„りã¨ã‚Šã«é¡”ã‚’åˆã‚ã›ãªã„ã¨ã„ã†ã“ã¨ã§ã™ã€‚ +email 㨠irc を第一ã®ã‚³ãƒŸãƒ¥ãƒ‹ã‚±ãƒ¼ã‚·ãƒ§ãƒ³ã®å½¢ã¨ã™ã‚‹ä¸€ã¤ã®åˆ©ç‚¹ã¯ã€æ€§åˆ¥ã‚„ +æ°‘æ—ã®å·®åˆ¥ãŒãªã„ã“ã¨ã§ã™ã€‚Linux カーãƒãƒ«ã®è·å ´ç’°å¢ƒã¯å¥³æ€§ã‚„å°‘æ•°æ°‘æ—ã‚’å— +容ã—ã¾ã™ã€‚ãªãœãªã‚‰ã€email アドレスã«ã‚ˆã£ã¦ã®ã¿ã‚ãªãŸãŒèªè­˜ã•れるã‹ã‚‰ã§ +ã™ã€‚ +国際的ãªå´é¢ã‹ã‚‰ã‚‚活動領域をå‡ç­‰ã«ã™ã‚‹ã‚ˆã†ã«ã—ã¾ã™ã€‚ãªãœãªã‚‰ã°ã€ã‚ãªãŸ +ã¯äººã®åå‰ã§æ€§åˆ¥ã‚’想åƒã§ããªã„ã‹ã‚‰ã§ã™ã€‚ã‚る男性㌠アンドレアã¨ã„ã†å +å‰ã§ã€å¥³æ€§ã®åå‰ã¯ パット ã‹ã‚‚ã—れã¾ã›ã‚“ (訳注 Andrea ã¯ç±³å›½ã§ã¯å¥³æ€§ã€ +ãれ以外(欧州ãªã©)ã§ã¯ç”·æ€§åã¨ã—ã¦ä½¿ã‚れるã“ã¨ãŒå¤šã„ã€‚åŒæ§˜ã«ã€Pat 㯠+Patricia (主ã«å¥³æ€§å)ã‚„ Patrick (主ã«ç”·æ€§å)ã®ç•¥ç§°)。 +Linux カーãƒãƒ«ã®æ´»å‹•ã‚’ã—ã¦ã€æ„見を表明ã—ãŸã“ã¨ãŒã‚る大部分ã®å¥³æ€§ã¯ã€å‰ +å‘ããªçµŒé¨“ã‚’ã‚‚ã£ã¦ã„ã¾ã™ã€‚ + +言葉ã®å£ã¯è‹±èªžãŒå¾—æ„ã§ãªã„一部ã®äººã«ã¯å•題ã«ãªã‚Šã¾ã™ã€‚ +メーリングリストã®ä¸­ã§ãã¡ã‚“ã¨ã‚¢ã‚¤ãƒ‡ã‚£ã‚¢ã‚’交æ›ã™ã‚‹ã«ã¯ã€ç›¸å½“ã†ã¾ã英語 +ã‚’æ“れる必è¦ãŒã‚ã‚‹ã“ã¨ã‚‚ã‚りã¾ã™ã€‚ãã®ãŸã‚ã€ã‚ãªãŸã¯è‡ªåˆ†ã®ãƒ¡ãƒ¼ãƒ« +ã‚’é€ã‚‹å‰ã«è‹±èªžã§æ„味ãŒé€šã˜ã¦ã„ã‚‹ã‹ã‚’ãƒã‚§ãƒƒã‚¯ã™ã‚‹ã“ã¨ã‚’ãŠè–¦ã‚ã—ã¾ã™ã€‚ + +変更を分割ã™ã‚‹ +--------------------- + +Linux カーãƒãƒ«ã‚³ãƒŸãƒ¥ãƒ‹ãƒ†ã‚£ã¯ã€ä¸€åº¦ã«å¤§é‡ã®ã‚³ãƒ¼ãƒ‰ã®å¡Šã‚’喜んã§å—容ã™ã‚‹ã“ +ã¨ã¯ã‚りã¾ã›ã‚“ã€‚å¤‰æ›´ã¯æ­£ç¢ºã«èª¬æ˜Žã•れる必è¦ãŒã‚りã€è­°è«–ã•れã€å°ã•ã„ã€å€‹ +別ã®éƒ¨åˆ†ã«åˆ†å‰²ã™ã‚‹å¿…è¦ãŒã‚りã¾ã™ã€‚ã“れã¯ã“れã¾ã§å¤šãã®ä¼šç¤¾ãŒã‚„り慣れ㦠+ããŸã“ã¨ã¨å…¨ãæ­£å対ã®ã“ã¨ã§ã™ã€‚ã‚ãªãŸã®ãƒ—ロãƒãƒ¼ã‚¶ãƒ«ã¯ã€é–‹ç™ºãƒ—ロセスã®ã¨ +ã¦ã‚‚æ—©ã„æ®µéšŽã‹ã‚‰ç´¹ä»‹ã•れるã¹ãã§ã™ã€‚ãã†ã™ã‚Œã° ã‚ãªãŸã¯è‡ªåˆ†ã®ã‚„ã£ã¦ã„ +ã‚‹ã“ã¨ã«ãƒ•ィードãƒãƒƒã‚¯ã‚’得られã¾ã™ã€‚ã“れã¯ã€ã‚³ãƒŸãƒ¥ãƒ‹ãƒ†ã‚£ã‹ã‚‰ã¿ã‚Œã°ã€ã‚ +ãªãŸãŒå½¼ã‚‰ã¨ä¸€ç·’ã«ã‚„ã£ã¦ã„るよã†ã«æ„Ÿã˜ã‚‰ã‚Œã€å˜ã«ã‚ãªãŸã®ææ¡ˆã™ã‚‹æ©Ÿèƒ½ã® +ゴミæ¨ã¦å ´ã¨ã—ã¦ä½¿ã£ã¦ã„ã‚‹ã®ã§ã¯ãªã„ã€ã¨æ„Ÿã˜ã‚‰ã‚Œã‚‹ã§ã—ょã†ã€‚ +ã—ã‹ã—ã€ä¸€åº¦ã« 50 ã‚‚ã® email をメーリングリストã«é€ã‚Šã¤ã‘るよã†ãªã“ã¨ã¯ +ã‚„ã£ã¦ã¯ã„ã‘ã¾ã›ã‚“ã€ã‚ãªãŸã®ãƒ‘ッãƒç¾¤ã¯ã„ã¤ã‚‚ã©ã‚“ãªæ™‚ã§ã‚‚ãれよりã¯å°ã• +ããªã‘れã°ãªã‚Šã¾ã›ã‚“。 + +パッãƒã‚’分割ã™ã‚‹ç†ç”±ã¯ä»¥ä¸‹ã§ã™- + +1) å°ã•ã„パッãƒã¯ã‚ãªãŸã®ãƒ‘ッãƒãŒé©ç”¨ã•れる見込ã¿ã‚’大ããã—ã¾ã™ã€ã‚«ãƒ¼ + ãƒãƒ«ã®äººé”ã¯ãƒ‘ッãƒãŒæ­£ã—ã„ã‹ã©ã†ã‹ã‚’確èªã™ã‚‹æ™‚間や労力をã‹ã‘ãªã„ã‹ + らã§ã™ã€‚5行ã®ãƒ‘ッãƒã¯ãƒ¡ãƒ³ãƒ†ãƒŠãŒãŸã£ãŸ1秒見るã ã‘ã§é©ç”¨ã§ãã¾ã™ã€‚ã— + ã‹ã—ã€500行ã®ãƒ‘ッãƒã¯ã€æ­£ã—ã„ã“ã¨ã‚’レビューã™ã‚‹ã®ã«æ•°æ™‚é–“ã‹ã‹ã‚‹ã‹ã‚‚ + ã—れã¾ã›ã‚“(時間ã¯ãƒ‘ッãƒã®ã‚µã‚¤ã‚ºãªã©ã«ã‚ˆã‚ŠæŒ‡æ•°é–¢æ•°ã«æ¯”例ã—ã¦ã‹ã‹ã‚Šã¾ + ã™) + å°ã•ã„パッãƒã¯ä½•ã‹ã‚ã£ãŸã¨ãã«ãƒ‡ãƒãƒƒã‚°ã‚‚ã¨ã¦ã‚‚ç°¡å˜ã«ãªã‚Šã¾ã™ã€‚パッ + ãƒã‚’1個1個å–り除ãã®ã¯ã€ã¨ã¦ã‚‚大ããªãƒ‘ッãƒã‚’当ã¦ãŸå¾Œã«(ã‹ã¤ã€ä½•ã‹ãŠ + ã‹ã—ããªã£ãŸå¾Œã§)解剖ã™ã‚‹ã®ã«æ¯”ã¹ã‚Œã°ã¨ã¦ã‚‚ç°¡å˜ã§ã™ã€‚ + +2) å°ã•ã„パッãƒã‚’é€ã‚‹ã ã‘ã§ãªãã€é€ã‚‹ã¾ãˆã«ã€æ›¸ãç›´ã—ã¦ã€ã‚·ãƒ³ãƒ—ルã«ã™ + ã‚‹(ã‚‚ã—ãã¯ã€å˜ã«é †ç•ªã‚’変ãˆã‚‹ã ã‘ã§ã‚‚)ã“ã¨ã‚‚ã€ã¨ã¦ã‚‚é‡è¦ã§ã™ã€‚ + +以下ã¯ã‚«ãƒ¼ãƒãƒ«é–‹ç™ºè€…ã® Al Viro ã®ãŸã¨ãˆè©±ã—ã§ã™ï¼š + + "ç”Ÿå¾’ã®æ•°å­¦ã®å®¿é¡Œã‚’採点ã™ã‚‹å…ˆç”Ÿã®ã“ã¨ã‚’考ãˆã¦ã¿ã¦ãã ã•ã„ã€å…ˆ + 生ã¯ç”Ÿå¾’ãŒè§£ã«åˆ°é”ã™ã‚‹ã¾ã§ã®è©¦è¡ŒéŒ¯èª¤ã‚’ã¿ãŸã„ã¨ã¯æ€ã‚ãªã„ã§ã—ょ + ã†ã€‚先生ã¯ç°¡æ½”ãªæœ€é«˜ã®è§£ã‚’ã¿ãŸã„ã®ã§ã™ã€‚良ã„生徒ã¯ã“れを知ã£ã¦ + ãŠã‚Šã€ãã—ã¦æœ€çµ‚è§£ã®å‰ã®ä¸­é–“作業をæå‡ºã™ã‚‹ã“ã¨ã¯æ±ºã—ã¦ãªã„ã®ã§ + ã™" + カーãƒãƒ«é–‹ç™ºã§ã‚‚ã“れã¯åŒã˜ã§ã™ã€‚メンテナーé”ã¨ãƒ¬ãƒ“ューアé”ã¯ã€ + å•題を解決ã™ã‚‹è§£ã®èƒŒå¾Œã«ãªã‚‹æ€è€ƒãƒ—ロセスをã¿ãŸã„ã¨ã¯æ€ã„ã¾ã›ã‚“。 + 彼らã¯å˜ç´”ã§ã‚ã–ã‚„ã‹ãªè§£æ±ºæ–¹æ³•ã‚’ã¿ãŸã„ã®ã§ã™ã€‚ + +ã‚ã–ã‚„ã‹ãªè§£ã‚’説明ã™ã‚‹ã®ã¨ã€ã‚³ãƒŸãƒ¥ãƒ‹ãƒ†ã‚£ã¨å…±ã«ä»•事をã—ã€æœªè§£æ±ºã®ä»•事を +è­°è«–ã™ã‚‹ã“ã¨ã®ãƒãƒ©ãƒ³ã‚¹ã‚’キープã™ã‚‹ã®ã¯é›£ã—ã„ã‹ã‚‚ã—れã¾ã›ã‚“。 +ã§ã™ã‹ã‚‰ã€é–‹ç™ºãƒ—ãƒ­ã‚»ã‚¹ã®æ—©æœŸæ®µéšŽã§æ”¹å–„ã®ãŸã‚ã®ãƒ•ィードãƒãƒƒã‚¯ã‚’もらã†ã‚ˆ +ã†ã«ã™ã‚‹ã®ã‚‚ã„ã„ã§ã™ãŒã€å¤‰æ›´ç‚¹ã‚’å°ã•ã„部分ã«åˆ†å‰²ã—ã¦å…¨ä½“ã§ã¯ã¾ã å®Œæˆã— +ã¦ã„ãªã„仕事を(部分的ã«)å–り込んã§ã‚‚らãˆã‚‹ã‚ˆã†ã«ã™ã‚‹ã“ã¨ã‚‚ã„ã„ã“ã¨ã§ã™ã€‚ + +ã¾ãŸã€ã§ã上ãŒã£ã¦ã„ãªã„ã‚‚ã®ã‚„ã€"å°†æ¥ç›´ã™" よã†ãªãƒ‘ッãƒã‚’ã€æœ¬æµã«å«ã‚ +ã¦ã‚‚らã†ã‚ˆã†ã«é€ã£ã¦ã‚‚ã€ãれã¯å—ã‘付ã‘られãªã„ã“ã¨ã‚’ç†è§£ã—ã¦ãã ã•ã„。 + +ã‚ãªãŸã®å¤‰æ›´ã‚’正当化ã™ã‚‹ +------------------- + +ã‚ãªãŸã®ãƒ‘ッãƒã‚’分割ã™ã‚‹ã®ã¨åŒæ™‚ã«ã€ãªãœãã®å¤‰æ›´ã‚’追加ã—ãªã‘れã°ãªã‚‰ãª +ã„ã‹ã‚’ Linux コミュニティã«çŸ¥ã‚‰ã›ã‚‹ã“ã¨ã¯ã¨ã¦ã‚‚é‡è¦ã§ã™ã€‚新機能ã¯å¿…è¦ +æ€§ã¨æœ‰ç”¨æ€§ã§æ­£å½“化ã•れãªã‘れã°ãªã‚Šã¾ã›ã‚“。 + +ã‚ãªãŸã®å¤‰æ›´ã®èª¬æ˜Ž +-------------------- + +ã‚ãªãŸã®ãƒ‘ッãƒã‚’é€ä»˜ã™ã‚‹å ´åˆã«ã¯ã€ãƒ¡ãƒ¼ãƒ«ã®ä¸­ã®ãƒ†ã‚­ã‚¹ãƒˆã§ä½•を言ã†ã‹ã«ã¤ +ã„ã¦ã€ç‰¹åˆ¥ã«æ³¨æ„を払ã£ã¦ãã ã•ã„。ã“ã®æƒ…å ±ã¯ãƒ‘ッãƒã® ChangeLog ã«ä½¿ã‚ +れã€ã„ã¤ã‚‚皆ãŒã¿ã‚‰ã‚Œã‚‹ã‚ˆã†ã«ä¿ç®¡ã•れã¾ã™ã€‚ã“ã‚Œã¯æ¬¡ã®ã‚ˆã†ãªé …目をå«ã‚〠+パッãƒã‚’完全ã«è¨˜è¿°ã™ã‚‹ã¹ãã§ã™- + + - ãªãœå¤‰æ›´ãŒå¿…è¦ã‹ + - パッãƒå…¨ä½“ã®è¨­è¨ˆã‚¢ãƒ—ローム+ - 実装ã®è©³ç´° + - ãƒ†ã‚¹ãƒˆçµæžœ + +ã“れã«ã¤ã„ã¦å…¨ã¦ãŒã©ã®ã‚ˆã†ã«ã‚ã‚‹ã¹ãã‹ã«ã¤ã„ã¦ã®è©³ç´°ã¯ã€ä»¥ä¸‹ã®ãƒ‰ã‚­ãƒ¥ãƒ¡ +ント㮠ChangeLog セクションをã¿ã¦ãã ã•ã„- + "The Perfect Patch" + http://www.zip.com.au/~akpm/linux/patches/stuff/tpp.txt + +ã“れらã®ã©ã‚Œã‚‚ãŒã€æ™‚ã«ã¯ã¨ã¦ã‚‚困難ã§ã™ã€‚ã“ã‚Œã‚‰ã®æ…£ä¾‹ã‚’完璧ã«å®Ÿæ–½ã™ã‚‹ã« +ã¯æ•°å¹´ã‹ã‹ã‚‹ã‹ã‚‚ã—れã¾ã›ã‚“。ã“れã¯ç¶™ç¶šçš„ãªæ”¹å–„ã®ãƒ—ロセスã§ã‚りã€ãã®ãŸ +ã‚ã«ã¯å¤šæ•°ã®å¿è€ã¨æ±ºæ„ã‚’å¿…è¦ã¨ã™ã‚‹ã‚‚ã®ã§ã™ã€‚ã§ã‚‚ã€è«¦ã‚ãªã„ã§ã€ã“れã¯å¯ +能ãªã“ã¨ã§ã™ã€‚多数ã®äººãŒã™ã§ã«ã§ãã¦ã„ã¾ã™ã—ã€å½¼ã‚‰ã‚‚皆最åˆã¯ã‚ãªãŸã¨åŒ +ã˜ã¨ã“ã‚ã‹ã‚‰ã‚¹ã‚¿ãƒ¼ãƒˆã—ãŸã®ã§ã™ã‹ã‚‰ã€‚ + +Paolo Ciarrocchi ã«æ„Ÿè¬ã€å½¼ã¯å½¼ã®æ›¸ã„㟠"Development Process" +(http://linux.tar.bz/articles/2.6-development_process)セクショ +ンをã“ã®ãƒ†ã‚­ã‚¹ãƒˆã®åŽŸåž‹ã«ã™ã‚‹ã“ã¨ã‚’許å¯ã—ã¦ãれã¾ã—ãŸã€‚ +Rundy Dunlap 㨠Gerrit Huizenga ã¯ãƒ¡ãƒ¼ãƒªãƒ³ã‚°ãƒªã‚¹ãƒˆã§ã‚„ã‚‹ã¹ãã“ã¨ã¨ã‚„㣠+ã¦ã¯ã„ã‘ãªã„ã“ã¨ã®ãƒªã‚¹ãƒˆã‚’æä¾›ã—ã¦ãれã¾ã—ãŸã€‚ +以下ã®äººã€…ã®ãƒ¬ãƒ“ューã€ã‚³ãƒ¡ãƒ³ãƒˆã€è²¢çŒ®ã«æ„Ÿè¬ã€‚ +Pat Mochel, Hanna Linder, Randy Dunlap, Kay Sievers, +Vojtech Pavlik, Jan Kara, Josh Boyer, Kees Cook, Andrew Morton, Andi +Kleen, Vadim Lobanov, Jesper Juhl, Adrian Bunk, Keri Harris, Frans Pop, +David A. Wheeler, Junio Hamano, Michael Kerrisk, 㨠Alex Shepard +å½¼ã‚‰ã®æ”¯æ´ãªã—ã§ã¯ã€ã“ã®ãƒ‰ã‚­ãƒ¥ãƒ¡ãƒ³ãƒˆã¯ã§ããªã‹ã£ãŸã§ã—ょã†ã€‚ + +Maintainer: Greg Kroah-Hartman diff --git a/trunk/Documentation/ja_JP/stable_api_nonsense.txt b/trunk/Documentation/ja_JP/stable_api_nonsense.txt new file mode 100644 index 000000000000..b3f2b27f0881 --- /dev/null +++ b/trunk/Documentation/ja_JP/stable_api_nonsense.txt @@ -0,0 +1,263 @@ +NOTE: +This is a Japanese translated version of +"Documentation/stable_api_nonsense.txt". +This one is maintained by +IKEDA, Munehiro +and JF Project team . +If you find difference with original file or problem in translation, +please contact the maintainer of this file or JF project. + +Please also note that purpose of this file is easier to read for non +English natives and not to be intended to fork. So, if you have any +comments or updates of this file, please try to update +Original(English) file at first. + +================================== +ã“れã¯ã€ +linux-2.6.22-rc4/Documentation/stable_api_nonsense.txt ã®å’Œè¨³ +ã§ã™ã€‚ +翻訳団体: JF プロジェクト < http://www.linux.or.jp/JF/ > +翻訳日 : 2007/06/11 +原著作者: Greg Kroah-Hartman < greg at kroah dot com > +翻訳者 : æ± ç”° 宗広 < m-ikeda at ds dot jp dot nec dot com > +校正者 : Masanori Kobayashi ã•ã‚“ < zap03216 at nifty dot ne dot jp > + Seiji Kaneko ã•ã‚“ < skaneko at a2 dot mbn dot or dot jp > +================================== + + + +Linux カーãƒãƒ«ã®ãƒ‰ãƒ©ã‚¤ãƒã‚¤ãƒ³ã‚¿ãƒ¼ãƒ•ェース +(ã‚ãªãŸã®è³ªå•ã™ã¹ã¦ã«å¯¾ã™ã‚‹å›žç­”ã¨ãã®ä»–諸々) + +Greg Kroah-Hartman + + +ã“ã®æ–‡æ›¸ã¯ã€ãªãœ Linux ã§ã¯ãƒã‚¤ãƒŠãƒªã‚«ãƒ¼ãƒãƒ«ã‚¤ãƒ³ã‚¿ãƒ¼ãƒ•ェースãŒå®šç¾© +ã•れã¦ã„ãªã„ã®ã‹ã€ã¾ãŸã¯ãªãœä¸å¤‰ã®ã‚«ãƒ¼ãƒãƒ«ã‚¤ãƒ³ã‚¿ãƒ¼ãƒ•ェースをæŒãŸãª +ã„ã®ã‹ã€ã¨ã„ã†ã“ã¨ã‚’説明ã™ã‚‹ãŸã‚ã«æ›¸ã‹ã‚ŒãŸã€‚ã“ã“ã§ã®è©±é¡Œã¯ã€Œã‚«ãƒ¼ãƒ +ル内部ã®ã€ã‚¤ãƒ³ã‚¿ãƒ¼ãƒ•ェースã«ã¤ã„ã¦ã§ã‚りã€ãƒ¦ãƒ¼ã‚¶ãƒ¼ç©ºé–“ã¨ã®ã‚¤ãƒ³ã‚¿ãƒ¼ +フェースã§ã¯ãªã„ã“ã¨ã‚’ç†è§£ã—ã¦ã»ã—ã„。カーãƒãƒ«ã¨ãƒ¦ãƒ¼ã‚¶ãƒ¼ç©ºé–“ã¨ã®ã‚¤ +ンターフェースã¨ã¯ã‚¢ãƒ—リケーションプログラムãŒä½¿ç”¨ã™ã‚‹ã‚‚ã®ã§ã‚り〠+ã¤ã¾ã‚Šã‚·ã‚¹ãƒ†ãƒ ã‚³ãƒ¼ãƒ«ã®ã‚¤ãƒ³ã‚¿ãƒ¼ãƒ•ェースãŒã“れã«å½“ãŸã‚‹ã€‚ã“れã¯ä»Šã¾ã§ +é•·ãã«æ¸¡ã‚Šã€ã‹ã¤ä»Šå¾Œã‚‚「ã¾ã•ã—ãã€ä¸å¤‰ã§ã‚る。ç§ã¯ç¢ºã‹ 0.9 ã‹ä½•ã‹ +よりå‰ã®ã‚«ãƒ¼ãƒãƒ«ã‚’使ã£ã¦ãƒ“ルドã—ãŸå¤ã„プログラムをæŒã£ã¦ã„ã‚‹ãŒã€ã +ã‚Œã¯æœ€æ–°ã® 2.6 カーãƒãƒ«ã§ã‚‚ãã¡ã‚“ã¨å‹•作ã™ã‚‹ã€‚ユーザー空間ã¨ã®ã‚¤ãƒ³ +ターフェースã¯ã€ãƒ¦ãƒ¼ã‚¶ãƒ¼ã¨ã‚¢ãƒ—リケーションプログラマãŒä¸å¤‰æ€§ã‚’ä¿¡é ¼ +ã—ã¦ã‚ˆã„ã‚‚ã®ã®ä¸€ã¤ã§ã‚る。 + + +è¦æ—¨ +---- + +ã‚ãªãŸã¯ä¸å¤‰ã®ã‚«ãƒ¼ãƒãƒ«ã‚¤ãƒ³ã‚¿ãƒ¼ãƒ•ェースãŒå¿…è¦ã ã¨è€ƒãˆã¦ã„ã‚‹ã‹ã‚‚ã—れ +ãªã„ãŒã€å®Ÿéš›ã®ã¨ã“ã‚ã¯ãã†ã§ã¯ãªã„。ã‚ãªãŸã¯å¿…è¦ã¨ã—ã¦ã„ã‚‹ã‚‚ã®ãŒåˆ† +ã‹ã£ã¦ã„ãªã„。ã‚ãªãŸãŒå¿…è¦ã¨ã—ã¦ã„ã‚‹ã‚‚ã®ã¯å®‰å®šã—ã¦å‹•作ã™ã‚‹ãƒ‰ãƒ©ã‚¤ãƒ +ã§ã‚りã€ãれã¯ãƒ‰ãƒ©ã‚¤ãƒãŒãƒ¡ã‚¤ãƒ³ã®ã‚«ãƒ¼ãƒãƒ«ãƒ„リーã«å«ã¾ã‚Œã‚‹å ´åˆã®ã¿å¾— +ã‚‹ã“ã¨ãŒã§ãる。ドライãƒãŒãƒ¡ã‚¤ãƒ³ã®ã‚«ãƒ¼ãƒãƒ«ãƒ„リーã«å«ã¾ã‚Œã¦ã„ã‚‹ã¨ã€ +ä»–ã«ã‚‚多ãã®è‰¯ã„ã“ã¨ãŒã‚る。ãれã¯ã€Linux をより強固ã§ã€å®‰å®šãªã€æˆ +熟ã—ãŸã‚ªãƒšãƒ¬ãƒ¼ãƒ†ã‚£ãƒ³ã‚°ã‚·ã‚¹ãƒ†ãƒ ã«ã™ã‚‹ã“ã¨ãŒã§ãã‚‹ã¨ã„ã†ã“ã¨ã ã€‚ã“れ +ã“ãã€ãã‚‚ãã‚‚ã‚ãªãŸãŒ Linux を使ã†ç†ç”±ã®ã¯ãšã ã€‚ + + +ã¯ã˜ã‚ã« +-------- + +カーãƒãƒ«å†…部ã®ã‚¤ãƒ³ã‚¿ãƒ¼ãƒ•ェース変更を心é…ã—ãªã‘れã°ãªã‚‰ãªã„ドライム+を書ããŸã„ãªã©ã¨ã„ã†ã®ã¯ã€å¤‰ã‚り者ã ã‘ã ã€‚ã“ã®ä¸–界ã®ã»ã¨ã‚“ã©ã®äººã¯ã€ +ãã®ã‚ˆã†ãªãƒ‰ãƒ©ã‚¤ãƒãŒã©ã‚“ãªã‚¤ãƒ³ã‚¿ãƒ¼ãƒ•ェースを使ã£ã¦ã„ã‚‹ã‹ãªã©çŸ¥ã‚‰ãª +ã„ã—ã€ãã‚“ãªãƒ‰ãƒ©ã‚¤ãƒã®ã“ã¨ãªã©å…¨ãæ°—ã«ã‚‚ã‹ã‘ã¦ã„ãªã„。 + + +ã¾ãšåˆã‚ã«ã€ã‚¯ãƒ­ãƒ¼ã‚ºã‚½ãƒ¼ã‚¹ã¨ã‹ã€ã‚½ãƒ¼ã‚¹ã‚³ãƒ¼ãƒ‰ã®éš è”½ã¨ã‹ã€ãƒã‚¤ãƒŠãƒªã® +ã¿ãŒé…布ã•れる使ã„物ã«ãªã‚‰ãªã„代物[訳注(1)]ã¨ã‹ã€å®Ÿä½“ã¯ãƒã‚¤ãƒŠãƒª +コードã§ãれを読ã¿è¾¼ã‚€ãŸã‚ã®ãƒ©ãƒƒãƒ‘ー部分ã®ã¿ã‚½ãƒ¼ã‚¹ã‚³ãƒ¼ãƒ‰ãŒå…¬é–‹ã•れ +ã¦ã„ã‚‹ã¨ã‹ã€ãã®ä»–用語ã¯ä½•ã§ã‚れ GPL ã®ä¸‹ã«ã‚½ãƒ¼ã‚¹ã‚³ãƒ¼ãƒ‰ãŒãƒªãƒªãƒ¼ã‚¹ +ã•れã¦ã„ãªã„カーãƒãƒ«ãƒ‰ãƒ©ã‚¤ãƒã«é–¢ã™ã‚‹æ³•çš„ãªå•題ã«ã¤ã„ã¦ã€ç§ã¯ã€Œã„ã‹ +ãªã‚‹è­°è«–ã‚‚ã€è¡Œã†ã¤ã‚‚りãŒãªã„。法的ãªç–‘å•ãŒã‚ã‚‹ã®ãªã‚‰ã°ã€ãƒ—ログラマ +ã§ã‚ã‚‹ç§ã§ã¯ãªãã€å¼è­·å£«ã«ç›¸è«‡ã—ã¦æ¬²ã—ã„。ã“ã“ã§ã¯å˜ã«ã€æŠ€è¡“çš„ãªå• +題ã«ã¤ã„ã¦è¿°ã¹ã‚‹ã“ã¨ã«ã™ã‚‹ã€‚(法的ãªå•題を軽視ã—ã¦ã„ã‚‹ã‚ã‘ã§ã¯ãªã„。 +ãれらã¯å®Ÿéš›ã«å­˜åœ¨ã™ã‚‹ã—ã€ã‚ãªãŸã¯ãれをã„ã¤ã‚‚æ°—ã«ã‹ã‘ã¦ãŠãå¿…è¦ãŒ +ã‚る) + +訳注(1) +「使ã„物ã«ãªã‚‰ãªã„代物ã€ã®åŽŸæ–‡ã¯ "blob" + + +ã•ã¦ã“ã“ã§ã¯ã€ãƒã‚¤ãƒŠãƒªã‚«ãƒ¼ãƒãƒ«ã‚¤ãƒ³ã‚¿ãƒ¼ãƒ•ェースã«ã¤ã„ã¦ã¨ã€ã‚½ãƒ¼ã‚¹ãƒ¬ +ベルã§ã®ã‚¤ãƒ³ã‚¿ãƒ¼ãƒ•ェースã®ä¸å¤‰æ€§ã«ã¤ã„ã¦ã€ã¨ã„ã†äºŒã¤ã®è©±é¡Œã‚’å–り上 +ã’る。ã“ã®äºŒã¤ã¯äº’ã„ã«ä¾å­˜ã™ã‚‹é–¢ä¿‚ã«ã‚ã‚‹ãŒã€ã¾ãšã¯ãƒã‚¤ãƒŠãƒªã‚¤ãƒ³ã‚¿ãƒ¼ +フェースã«ã¤ã„ã¦è­°è«–を行ã„ã‚„ã£ã¤ã‘ã¦ã—ã¾ãŠã†ã€‚ + + +ãƒã‚¤ãƒŠãƒªã‚«ãƒ¼ãƒãƒ«ã‚¤ãƒ³ã‚¿ãƒ¼ãƒ•ェース +-------------------------------- + +ã‚‚ã—ソースレベルã§ã®ã‚¤ãƒ³ã‚¿ãƒ¼ãƒ•ェースãŒä¸å¤‰ãªã‚‰ã°ã€ãƒã‚¤ãƒŠãƒªã‚¤ãƒ³ã‚¿ãƒ¼ +フェースも当然ã®ã‚ˆã†ã«ä¸å¤‰ã§ã‚ã‚‹ã€ã¨ã„ã†ã®ã¯æ­£ã—ã„ã ã‚ã†ã‹ï¼Ÿæ­£ã—ã +ãªã„。Linux カーãƒãƒ«ã«é–¢ã™ã‚‹ä»¥ä¸‹ã®äº‹å®Ÿã‚’考ãˆã¦ã¿ã¦ã»ã—ã„。 + - ã‚ãªãŸãŒä½¿ç”¨ã™ã‚‹ï¼£ã‚³ãƒ³ãƒ‘イラã®ãƒãƒ¼ã‚¸ãƒ§ãƒ³ã«ã‚ˆã£ã¦ã€ã‚«ãƒ¼ãƒãƒ«å†…部 + ã®æ§‹é€ ä½“ã®é…置構造ã¯ç•°ãªã£ãŸã‚‚ã®ã«ãªã‚‹ã€‚ã¾ãŸã€é–¢æ•°ã¯ç•°ãªã£ãŸæ–¹ + 法ã§ã‚«ãƒ¼ãƒãƒ«ã«å«ã¾ã‚Œã‚‹ã“ã¨ã«ãªã‚‹ã‹ã‚‚ã—れãªã„(例ãˆã°ã‚¤ãƒ³ãƒ©ã‚¤ãƒ³ + 関数ã¨ã—ã¦æ‰±ã‚れãŸã‚Šã€æ‰±ã‚れãªã‹ã£ãŸã‚Šã™ã‚‹ï¼‰ã€‚個々ã®é–¢æ•°ãŒã©ã® + よã†ã«ã‚³ãƒ³ãƒ‘イルã•れるã‹ã¯ãれã»ã©é‡è¦ã§ã¯ãªã„ãŒã€æ§‹é€ ä½“ã®ãƒ‘デ + ィングãŒç•°ãªã‚‹ã¨ã„ã†ã®ã¯éžå¸¸ã«é‡è¦ã§ã‚る。 + - ã‚ãªãŸãŒã‚«ãƒ¼ãƒãƒ«ã®ãƒ“ルドオプションをã©ã®ã‚ˆã†ã«è¨­å®šã™ã‚‹ã‹ã«ã‚ˆã£ + ã¦ã€ã‚«ãƒ¼ãƒãƒ«ã«ã¯åºƒã„範囲ã§ç•°ãªã£ãŸäº‹æ…‹ãŒèµ·ã“り得る。 + - データ構造ã¯ç•°ãªã‚‹ãƒ‡ãƒ¼ã‚¿ãƒ•ィールドをæŒã¤ã‹ã‚‚ã—れãªã„ + - ã„ãã¤ã‹ã®é–¢æ•°ã¯å…¨ã実装ã•れã¦ã„ãªã„状態ã«ãªã‚Šå¾—ã‚‹ + (例:SMPå‘ã‘ã§ã¯ãªã„ビルドã§ã¯ã€ã„ãã¤ã‹ã®ãƒ­ãƒƒã‚¯ã¯ä¸­èº«ãŒ + カラã«ã‚³ãƒ³ãƒ‘イルã•れる) + - カーãƒãƒ«å†…ã®ãƒ¡ãƒ¢ãƒªã¯ã€ç•°ãªã£ãŸæ–¹æ³•ã§é…ç½®ã•れ得る。ã“れã¯ãƒ“ + ルドオプションã«ä¾å­˜ã—ã¦ã„る。 + - Linux ã¯æ§˜ã€…ãªç•°ãªã‚‹ãƒ—ロセッサアーキテクãƒãƒ£ä¸Šã§å‹•作ã™ã‚‹ã€‚ + ã‚るアーキテクãƒãƒ£ç”¨ã®ãƒã‚¤ãƒŠãƒªãƒ‰ãƒ©ã‚¤ãƒã‚’ã€ä»–ã®ã‚¢ãƒ¼ã‚­ãƒ†ã‚¯ãƒãƒ£ã§ + 正常ã«å‹•作ã•ã›ã‚‹æ–¹æ³•ã¯ãªã„。 + + +ã‚る特定ã®ã‚«ãƒ¼ãƒãƒ«è¨­å®šã‚’使用ã—ã€ã‚«ãƒ¼ãƒãƒ«ã‚’ビルドã—ãŸã®ã¨æ­£ç¢ºã«åŒã˜ +Cコンパイラを使用ã—ã¦å˜ã«ã‚«ãƒ¼ãƒãƒ«ãƒ¢ã‚¸ãƒ¥ãƒ¼ãƒ«ã‚’コンパイルã™ã‚‹ã ã‘ã§ +ã‚‚ã€ã‚ãªãŸã¯ã“れらã„ãã¤ã‚‚ã®å•題ã«ç›´é¢ã™ã‚‹ã“ã¨ã«ãªã‚‹ã€‚ã‚る特定㮠+Linux ディストリビューションã®ã€ã‚る特定ã®ãƒªãƒªãƒ¼ã‚¹ãƒãƒ¼ã‚¸ãƒ§ãƒ³ç”¨ã«ãƒ¢ +ジュールをæä¾›ã—よã†ã¨æ€ã£ãŸã ã‘ã§ã‚‚ã€ã“れらã®å•題を引ãèµ·ã“ã™ã«ã¯ +å分ã§ã‚る。ã«ã‚‚é–¢ã‚ら㚠Linux ãƒ‡ã‚£ã‚¹ãƒˆãƒªãƒ“ãƒ¥ãƒ¼ã‚·ãƒ§ãƒ³ã®æ•°ã¨ã€ã‚µ +ãƒãƒ¼ãƒˆã™ã‚‹ãƒ‡ã‚£ã‚¹ãƒˆãƒªãƒ“ューションã®ãƒªãƒªãƒ¼ã‚¹æ•°ã‚’掛ã‘ç®—ã—ã€ãれら一㤠+一ã¤ã«ã¤ã„ã¦ãƒ“ルドを行ã£ãŸã¨ã—ãŸã‚‰ã€ä»Šåº¦ã¯ãƒªãƒªãƒ¼ã‚¹ã”ã¨ã®ãƒ“ルドオプ +ションã®é•ã„ã¨ã„ã†æ‚ªå¤¢ã«ã™ãã•ã¾æ‚©ã¾ã•れるã“ã¨ã«ãªã‚‹ã€‚ã¾ãŸã€ãƒ‡ã‚£ã‚¹ +トリビューションã®å„リリースãƒãƒ¼ã‚¸ãƒ§ãƒ³ã«ã¯ã€ç•°ãªã‚‹ãƒãƒ¼ãƒ‰ã‚¦ã‚§ã‚¢ï¼ˆãƒ— +ロセッサタイプや種々ã®ã‚ªãƒ—ション)ã«å¯¾å¿œã™ã‚‹ãŸã‚ã€ä½•種類ã‹ã®ã‚«ãƒ¼ãƒ +ルãŒå«ã¾ã‚Œã¦ã„ã‚‹ã¨ã„ã†ã“ã¨ã‚‚ç†è§£ã—ã¦æ¬²ã—ã„。従ã£ã¦ã€ã‚る一ã¤ã®ãƒª +リースãƒãƒ¼ã‚¸ãƒ§ãƒ³ã ã‘ã®ãŸã‚ã«ãƒ¢ã‚¸ãƒ¥ãƒ¼ãƒ«ã‚’作æˆã™ã‚‹å ´åˆã§ã‚‚ã€ã‚ãªãŸã¯ +何ãƒãƒ¼ã‚¸ãƒ§ãƒ³ã‚‚ã®ãƒ¢ã‚¸ãƒ¥ãƒ¼ãƒ«ã‚’用æ„ã—ãªã‘れã°ãªã‚‰ãªã„。 + + +ä¿¡ã˜ã¦æ¬²ã—ã„。ã“ã®ã‚ˆã†ãªæ–¹æ³•ã§ã‚µãƒãƒ¼ãƒˆã‚’ç¶šã‘よã†ã¨ã™ã‚‹ãªã‚‰ã€ã‚ãªãŸ +ã¯ã„ãšã‚Œæ­£æ°—を失ã†ã ã‚ã†ã€‚é ã„昔ã€ç§ã¯ãれãŒã„ã‹ã«å›°é›£ãªã“ã¨ã‹ã€èº« +ã‚’ã‚‚ã£ã¦å­¦ã‚“ã ã®ã ãƒ»ãƒ»ãƒ» + + +ä¸å¤‰ã®ã‚«ãƒ¼ãƒãƒ«ã‚½ãƒ¼ã‚¹ãƒ¬ãƒ™ãƒ«ã‚¤ãƒ³ã‚¿ãƒ¼ãƒ•ェース +------------------------------------------ + +メインカーãƒãƒ«ãƒ„リーã«å«ã¾ã‚Œã¦ã„ãªã„ Linux カーãƒãƒ«ãƒ‰ãƒ©ã‚¤ãƒã‚’継続 +ã—ã¦ã‚µãƒãƒ¼ãƒˆã—ã¦ã„ã“ã†ã¨ã—ã¦ã„る人ãŸã¡ã¨ã®è­°è«–ã«ãŠã„ã¦ã¯ã€ã“ã‚Œã¯æ¥µ +ã‚ã¦ã€Œå¼•ç«æ€§ã®é«˜ã„ã€è©±é¡Œã§ã‚る。[訳注(2)] + +訳注(2) +ã€Œå¼•ç«æ€§ã®é«˜ã„ã€ã®åŽŸæ–‡ã¯ "volatile"。 +volatile ã«ã¯ã€Œæ®ç™ºæ€§ã®ã€ã€Œçˆ†ç™ºã—ã‚„ã™ã„ã€ã¨ã„ã†æ„味ã®ä»–ã€ã€Œå¤‰ã‚り +ã‚„ã™ã„ã€ã€Œç§»ã‚Šæ°—ãªã€ã¨ã„ã†æ„味ãŒã‚る。 +「(ã“ã®è©±é¡Œã¯ï¼‰çˆ†ç™ºçš„ã«æ¿€ã—ã„論争を巻ãèµ·ã“ã—ã‹ã­ãªã„ã€ã¨ã„ã†ã“㨠+ã‚’ã€ã€Œï¼ˆã‚«ãƒ¼ãƒãƒ«ã®ã‚½ãƒ¼ã‚¹ãƒ¬ãƒ™ãƒ«ã‚¤ãƒ³ã‚¿ãƒ¼ãƒ•ェースã¯ï¼‰ç§»ã‚ã„行ãã‚‚ã®ã§ +ã‚ã‚‹ã€ã¨ã„ã†ã“ã¨ã‚’連想ã•ã›ã‚‹ "volatile" ã¨ã„ã†å˜èªžã§è¡¨ç¾ã—ã¦ã„る。 + + +Linux カーãƒãƒ«ã®é–‹ç™ºã¯ç¶™ç¶šçš„ã«é€Ÿã„ペースã§è¡Œã‚ã‚Œã€æ±ºã—ã¦æ­©ã¿ã‚’ç·©ã‚ +ã‚‹ã“ã¨ãŒãªã„。ãã®ä¸­ã§ã‚«ãƒ¼ãƒãƒ«é–‹ç™ºè€…é”ã¯ã€ç¾çжã®ã‚¤ãƒ³ã‚¿ãƒ¼ãƒ•ェース㫠+ã‚ã‚‹ãƒã‚°ã‚’見ã¤ã‘ã€ã‚ˆã‚Šè‰¯ã„方法を考ãˆå‡ºã™ã€‚彼らã¯ã‚„ãŒã¦ã€ç¾çжã®ã‚¤ãƒ³ +ターフェースãŒã‚ˆã‚Šæ­£ã—ã動作ã™ã‚‹ã‚ˆã†ã«ä¿®æ­£ã‚’行ã†ã€‚ãã®éŽç¨‹ã§é–¢æ•°ã® +åå‰ã¯å¤‰æ›´ã•れるã‹ã‚‚ã—れãšã€æ§‹é€ ä½“ã¯å¤§ããã€ã¾ãŸã¯å°ã•ããªã‚‹ã‹ã‚‚ã— +れãšã€é–¢æ•°ã®å¼•æ•°ã¯æ¤œè¨Žã—ãªãŠã•れるã‹ã‚‚ã—れãªã„。ãã®ã‚ˆã†ãªå ´åˆã€å¼• +ãç¶šãå…¨ã¦ãŒæ­£å¸¸ã«å‹•作ã™ã‚‹ã‚ˆã†ã€ã‚«ãƒ¼ãƒãƒ«å†…ã§ã“れらã®ã‚¤ãƒ³ã‚¿ãƒ¼ãƒ•ェー +スを使用ã—ã¦ã„る個所も全ã¦åŒæ™‚ã«ä¿®æ­£ã•れる。 + + +具体的ãªä¾‹ã¨ã—ã¦ã€ã‚«ãƒ¼ãƒãƒ«å†…ã® USB インターフェースを挙ã’る。USB +サブシステムã¯ã“れã¾ã§ã«å°‘ãªãã¨ã‚‚ï¼“å›žã®æ›¸ãç›´ã—ãŒè¡Œã‚れã€ãã®çµæžœ +インターフェースãŒå¤‰æ›´ã•れãŸã€‚ã“ã‚Œã‚‰ã®æ›¸ãç›´ã—ã¯ã„ãã¤ã‹ã®ç•°ãªã£ãŸ +å•題を修正ã™ã‚‹ãŸã‚ã«è¡Œã‚れãŸã€‚ + - åŒæœŸçš„データストリームãŒéžåŒæœŸã«å¤‰æ›´ã•れãŸã€‚ã“れã«ã‚ˆã‚Šå¤šæ•°ã®ãƒ‰ + ライãƒã‚’å˜ç´”化ã§ãã€å…¨ã¦ã®ãƒ‰ãƒ©ã‚¤ãƒã®ã‚¹ãƒ«ãƒ¼ãƒ—ットãŒå‘上ã—ãŸã€‚今 + ã‚„ã»ã¨ã‚“ã©å…¨ã¦ã® USB デãƒã‚¤ã‚¹ã¯ã€è€ƒãˆã‚‰ã‚Œã‚‹æœ€é«˜ã®é€Ÿåº¦ã§å‹•作㗠+ ã¦ã„る。 + - USB ドライãƒãŒ USB サブシステムã®ã‚³ã‚¢ã‹ã‚‰è¡Œã†ã€ãƒ‡ãƒ¼ã‚¿ãƒ‘ケット + 用ã®ãƒ¡ãƒ¢ãƒªç¢ºä¿æ–¹æ³•ãŒå¤‰æ›´ã•れãŸã€‚ã“れã«ä¼´ã„ã€ã„ãã¤ã‚‚ã®æ–‡æ›¸åŒ–ã• + れãŸãƒ‡ãƒƒãƒ‰ãƒ­ãƒƒã‚¯æ¡ä»¶ã‚’回é¿ã™ã‚‹ãŸã‚ã€å…¨ã¦ã® USB ドライãƒã¯ã‚ˆã‚Š + 多ãã®æƒ…報を USB ã‚³ã‚¢ã«æä¾›ã—ãªã‘れã°ãªã‚‰ãªã„よã†ã«ãªã£ã¦ã„る。 + + +ã“ã®ã§ãã”ã¨ã¯ã€æ•°å¤šã存在ã™ã‚‹ã‚¯ãƒ­ãƒ¼ã‚ºã‚½ãƒ¼ã‚¹ã®ã‚ªãƒšãƒ¬ãƒ¼ãƒ†ã‚£ãƒ³ã‚°ã‚·ã‚¹ +テムã¨ã¯å…¨ã対照的ã ã€‚ãれらã¯é•·æœŸã«æ¸¡ã‚Šå¤ã„ USB インターフェース +をメンテナンスã—ãªã‘れã°ãªã‚‰ãªã„。å¤ã„ã‚¤ãƒ³ã‚¿ãƒ¼ãƒ•ã‚§ãƒ¼ã‚¹ãŒæ®‹ã‚‹ã“ã¨ã§ã€ +æ–°ãŸãªé–‹ç™ºè€…ãŒå¶ç„¶å¤ã„インターフェースを使ã„ã€æ­£ã—ããªã„方法ã§é–‹ç™º +を行ã£ã¦ã—ã¾ã†å¯èƒ½æ€§ãŒç”Ÿã˜ã‚‹ã€‚ã“れã«ã‚ˆã‚Šã‚·ã‚¹ãƒ†ãƒ ã®å®‰å®šæ€§ã¯å±é™ºã«ã• +らã•れるã“ã¨ã«ãªã‚‹ã€‚ + + +ä¸Šã«æŒ™ã’ãŸã©ã¡ã‚‰ã®ä¾‹ã«ãŠã„ã¦ã‚‚ã€é–‹ç™ºè€…é”ã¯ãã®å¤‰æ›´ãŒé‡è¦ã‹ã¤å¿…è¦ã§ +ã‚ã‚‹ã“ã¨ã«åˆæ„ã—ã€æ¯”較的楽ã«ãれを実行ã—ãŸã€‚ã‚‚ã— Linux ãŒã‚½ãƒ¼ã‚¹ãƒ¬ +ベルã§ã‚¤ãƒ³ã‚¿ãƒ¼ãƒ•ェースã®ä¸å¤‰æ€§ã‚’ä¿è¨¼ã—ãªã‘れã°ãªã‚‰ãªã„ã¨ã—ãŸã‚‰ã€æ–° +ã—ã„インターフェースを作るã¨åŒæ™‚ã«ã€å¤ã„ã€å•題ã®ã‚る方を今後ã¨ã‚‚メ +ンテナンスã™ã‚‹ã¨ã„ã†ä½™è¨ˆãªä»•事を USB ã®é–‹ç™ºè€…ã«ã•ã›ãªã‘れã°ãªã‚‰ãª +ã„。Linux ã® USB 開発者ã¯ã€è‡ªåˆ†ã®æ™‚間を使ã£ã¦ä»•事をã—ã¦ã„る。よ㣠+ã¦ã€ä¾¡å€¤ã®ãªã„余計ãªä»•事を報酬もãªã—ã«å®Ÿè¡Œã—ã‚ã¨è¨€ã†ã“ã¨ã¯ã§ããªã„。 + + +セキュリティå•題もã€Linux ã«ã¨ã£ã¦ã¯éžå¸¸ã«é‡è¦ã§ã‚る。ã²ã¨ãŸã³ã‚»ã‚­ +ュリティã«é–¢ã™ã‚‹å•題ãŒç™ºè¦‹ã•れれã°ã€ãã‚Œã¯æ¥µã‚ã¦çŸ­æœŸé–“ã®ã†ã¡ã«ä¿®æ­£ +ã•れる。セキュリティå•題ã®ç™ºç”Ÿã‚’防ããŸã‚ã®ä¿®æ­£ã¯ã€ã‚«ãƒ¼ãƒãƒ«ã®å†…部イ +ンターフェースã®å¤‰æ›´ã‚’何度も引ãèµ·ã“ã—ã¦ããŸã€‚ãã®éš›åŒæ™‚ã«ã€å¤‰æ›´ã• +れãŸã‚¤ãƒ³ã‚¿ãƒ¼ãƒ•ェースを使用ã™ã‚‹å…¨ã¦ã®ãƒ‰ãƒ©ã‚¤ãƒã‚‚ã¾ãŸå¤‰æ›´ã•れãŸã€‚ã“れ +ã«ã‚ˆã‚Šå•題ãŒè§£æ¶ˆã—ã€å°†æ¥å¶ç„¶ã«å•題ãŒå†ç™ºã—ã¦ã—ã¾ã‚ãªã„ã“ã¨ãŒä¿è¨¼ã• +れる。もã—内部インターフェースã®å¤‰æ›´ãŒè¨±ã•れãªã„ã¨ã—ãŸã‚‰ã€ã“ã®ã‚ˆã† +ã«ã‚»ã‚­ãƒ¥ãƒªãƒ†ã‚£å•題を修正ã—ã€å°†æ¥å†ç™ºã—ãªã„ã“ã¨ã‚’ä¿è¨¼ã™ã‚‹ã“ã¨ãªã©ä¸ +å¯èƒ½ãªã®ã ã€‚ + + +カーãƒãƒ«ã®ã‚¤ãƒ³ã‚¿ãƒ¼ãƒ•ã‚§ãƒ¼ã‚¹ã¯æ™‚ãŒçµŒã¤ã«ã¤ã‚Œã‚¯ãƒªãƒ¼ãƒ³ãƒŠãƒƒãƒ—ã‚’å—ã‘る。 +誰も使ã£ã¦ã„ãªã„インターフェースã¯å‰Šé™¤ã•れる。ã“れã«ã‚ˆã‚Šã€å¯èƒ½ãªé™ +りカーãƒãƒ«ãŒå°ã•ãä¿ãŸã‚Œã€ç¾å½¹ã®å…¨ã¦ã®ã‚¤ãƒ³ã‚¿ãƒ¼ãƒ•ェースãŒå¯èƒ½ãªé™ã‚Š +テストã•れるã“ã¨ã‚’ä¿è¨¼ã—ã¦ã„ã‚‹ã®ã ã€‚(使ã‚れã¦ã„ãªã„インターフェー +スã®å¦¥å½“性をテストã™ã‚‹ã“ã¨ã¯ä¸å¯èƒ½ã¨è¨€ã£ã¦ã„ã„ã ã‚ã†ï¼‰ + + + +ã“れã‹ã‚‰ä½•ã‚’ã™ã¹ãã‹ +----------------------- + +ã§ã¯ã€ã‚‚ã—メインã®ã‚«ãƒ¼ãƒãƒ«ãƒ„リーã«å«ã¾ã‚Œãªã„ Linux カーãƒãƒ«ãƒ‰ãƒ©ã‚¤ +ãƒãŒã‚ã£ãŸã¨ã—ã¦ã€ã‚ãªãŸã¯ã€ã¤ã¾ã‚Šé–‹ç™ºè€…ã¯ä½•ã‚’ã™ã‚‹ã¹ãã ã‚ã†ã‹ï¼Ÿå…¨ +ã¦ã®ãƒ‡ã‚£ã‚¹ãƒˆãƒªãƒ“ューションã®å…¨ã¦ã®ã‚«ãƒ¼ãƒãƒ«ãƒãƒ¼ã‚¸ãƒ§ãƒ³å‘ã‘ã«ãƒã‚¤ãƒŠãƒª +ã®ãƒ‰ãƒ©ã‚¤ãƒã‚’供給ã™ã‚‹ã“ã¨ã¯æ‚ªå¤¢ã§ã‚りã€ã‚«ãƒ¼ãƒãƒ«ã‚¤ãƒ³ã‚¿ãƒ¼ãƒ•ェースã®å¤‰ +更を追ã„ã‹ã‘ç¶šã‘ã‚‹ã“ã¨ã‚‚ã¾ãŸéŽé…·ãªä»•事ã ã€‚ + + +ç­”ãˆã¯ç°¡å˜ã€‚ãã®ãƒ‰ãƒ©ã‚¤ãƒã‚’メインã®ã‚«ãƒ¼ãƒãƒ«ãƒ„リーã«å…¥ã‚Œã¦ã—ã¾ãˆã°ã‚ˆ +ã„。(ã“ã“ã§è¨€åŠã—ã¦ã„ã‚‹ã®ã¯ã€GPL ã«å¾“ã£ã¦å…¬é–‹ã•れるドライãƒã®ã“㨠+ã ã¨ã„ã†ã“ã¨ã«æ³¨æ„ã—ã¦ã»ã—ã„。ã‚ãªãŸã®ã‚³ãƒ¼ãƒ‰ãŒãれã«è©²å½“ã—ãªã„ãªã‚‰ +ã°ã€ã•よãªã‚‰ã€‚幸é‹ã‚’祈りã¾ã™ã€‚ã”自分ã§ä½•ã¨ã‹ã—ã¦ãã ã•ã„。Andrew +㨠Linus ã‹ã‚‰ã®ã‚³ãƒ¡ãƒ³ãƒˆï¼œAndrew 㨠Linus ã®ã‚³ãƒ¡ãƒ³ãƒˆã¸ã®ãƒªãƒ³ã‚¯ã‚’ã“ +ã“ã«ç½®ã>をã©ã†ãžï¼‰ãƒ‰ãƒ©ã‚¤ãƒãŒãƒ¡ã‚¤ãƒ³ãƒ„リーã«å…¥ã‚Œã°ã€ã‚«ãƒ¼ãƒãƒ«ã®ã‚¤ãƒ³ +ターフェースãŒå¤‰æ›´ã•れãŸå ´åˆã€å¤‰æ›´ã‚’行ã£ãŸé–‹ç™ºè€…ã«ã‚ˆã£ã¦ãƒ‰ãƒ©ã‚¤ãƒã‚‚ +修正ã•れるã“ã¨ã«ãªã‚‹ã ã‚ã†ã€‚ã‚ãªãŸã¯ã»ã¨ã‚“ã©åŠ´åŠ›ã‚’æ‰•ã†ã“ã¨ãªã—ã«ã€ +常ã«ãƒ“ルドå¯èƒ½ã§ãã¡ã‚“ã¨å‹•作ã™ã‚‹ãƒ‰ãƒ©ã‚¤ãƒã‚’手ã«å…¥ã‚Œã‚‹ã“ã¨ãŒã§ãる。 + + +ドライãƒã‚’メインã®ã‚«ãƒ¼ãƒãƒ«ãƒ„リーã«å…¥ã‚Œã‚‹ã¨ã€éžå¸¸ã«å¥½ã¾ã—ã„以下ã®åй +æžœãŒã‚る。 + - ドライãƒã®å“質ãŒå‘上ã™ã‚‹ä¸€æ–¹ã§ã€ï¼ˆå…ƒã®é–‹ç™ºè€…ã«ã¨ã£ã¦ã®ï¼‰ãƒ¡ãƒ³ãƒ† + ナンスコストã¯ä¸‹ãŒã‚‹ã€‚ + - ã‚ãªãŸã®ãƒ‰ãƒ©ã‚¤ãƒã«ä»–ã®é–‹ç™ºè€…ãŒæ©Ÿèƒ½ã‚’追加ã—ã¦ãれる。 + - 誰ã‹ãŒã‚ãªãŸã®ãƒ‰ãƒ©ã‚¤ãƒã«ã‚ã‚‹ãƒã‚°ã‚’見ã¤ã‘ã€ä¿®æ­£ã—ã¦ãれる。 + - 誰ã‹ãŒã‚ãªãŸã®ãƒ‰ãƒ©ã‚¤ãƒã«ã‚る改善点を見ã¤ã‘ã¦ãれる。 + - 外部インターフェースãŒå¤‰æ›´ã•れドライãƒã®æ›´æ–°ãŒå¿…è¦ã«ãªã£ãŸå ´åˆã€ + 誰ã‹ãŒã‚ãªãŸã®ä»£ã‚ã‚Šã«æ›´æ–°ã—ã¦ãれる。 + - ドライãƒã‚’入れã¦ãれã¨ãƒ‡ã‚£ã‚¹ãƒˆãƒ­ã«é ¼ã¾ãªãã¦ã‚‚ã€ãã®ãƒ‰ãƒ©ã‚¤ãƒã¯ + å…¨ã¦ã® Linux ディストリビューションã«è‡ªå‹•çš„ã«å«ã¾ã‚Œã¦ãƒªãƒªãƒ¼ã‚¹ + ã•れる。 + + +Linux ã§ã¯ã€ä»–ã®ã©ã®ã‚ªãƒšãƒ¬ãƒ¼ãƒ†ã‚£ãƒ³ã‚°ã‚·ã‚¹ãƒ†ãƒ ã‚ˆã‚Šã‚‚数多ãã®ãƒ‡ãƒã‚¤ã‚¹ +ãŒã€Œãã®ã¾ã¾ã€ä½¿ç”¨ã§ãるよã†ã«ãªã£ãŸã€‚ã¾ãŸ Linux ã¯ã€ã©ã®ã‚ªãƒšãƒ¬ãƒ¼ +ティングシステムよりも数多ãã®ãƒ—ロセッサアーキテクãƒãƒ£ä¸Šã§ãれら㮠+デãƒã‚¤ã‚¹ã‚’使用ã™ã‚‹ã“ã¨ãŒã§ãるよã†ã«ã‚‚ãªã£ãŸã€‚ã“ã®ã‚ˆã†ã«ã€Linux ã® +開発モデルã¯å®Ÿè¨¼ã•れã¦ãŠã‚Šã€ä»Šå¾Œã‚‚é–“é•ã„ãªãæ­£ã—ã„æ–¹å‘ã¸ã¨é€²ã‚“ã§ã„ +ãã ã‚ã†ã€‚:) + + + +------ + +ã“ã®æ–‡æ›¸ã®åˆæœŸã®è‰ç¨¿ã«å¯¾ã—ã€Randy Dunlap, Andrew Morton, David +Brownell, Hanna Linder, Robert Love, Nishanth Aravamudan ã‹ã‚‰æŸ»èª­ +ã¨åŠ©è¨€ã‚’é ‚ãã¾ã—ãŸã€‚感è¬ç”³ã—上ã’ã¾ã™ã€‚ + diff --git a/trunk/Documentation/kbuild/makefiles.txt b/trunk/Documentation/kbuild/makefiles.txt index bb5306e9a5c3..e08ef8759a07 100644 --- a/trunk/Documentation/kbuild/makefiles.txt +++ b/trunk/Documentation/kbuild/makefiles.txt @@ -501,6 +501,20 @@ more details, with real examples. The third parameter may be a text as in this example, but it may also be an expanded variable or a macro. + cc-fullversion + cc-fullversion is useful when the exact version of gcc is needed. + One typical use-case is when a specific GCC version is broken. + cc-fullversion points out a more specific version than cc-version does. + + Example: + #arch/powerpc/Makefile + $(Q)if test "$(call cc-fullversion)" = "040200" ; then \ + echo -n '*** GCC-4.2.0 cannot compile the 64-bit powerpc ' ; \ + false ; \ + fi + + In this example for a specific GCC version the build will error out explaining + to the user why it stops. === 4 Host Program support diff --git a/trunk/Documentation/kernel-parameters.txt b/trunk/Documentation/kernel-parameters.txt index 9a541486fb7e..fb80e9ffea68 100644 --- a/trunk/Documentation/kernel-parameters.txt +++ b/trunk/Documentation/kernel-parameters.txt @@ -1154,6 +1154,8 @@ and is between 256 and 4096 characters. It is defined in the file nointroute [IA-64] + nojitter [IA64] Disables jitter checking for ITC timers. + nolapic [IA-32,APIC] Do not enable or use the local APIC. nolapic_timer [IA-32,APIC] Do not use the local APIC timer. @@ -1880,11 +1882,14 @@ and is between 256 and 4096 characters. It is defined in the file usbhid.mousepoll= [USBHID] The interval which mice are to be polled at. - vdso= [IA-32,SH] + vdso= [IA-32,SH,x86-64] vdso=2: enable compat VDSO (default with COMPAT_VDSO) vdso=1: enable VDSO (default) vdso=0: disable VDSO mapping + vector= [IA-64,SMP] + vector=percpu: enable percpu vector domain + video= [FB] Frame buffer configuration See Documentation/fb/modedb.txt. diff --git a/trunk/Documentation/kprobes.txt b/trunk/Documentation/kprobes.txt index da5404ab7569..cb12ae175aa2 100644 --- a/trunk/Documentation/kprobes.txt +++ b/trunk/Documentation/kprobes.txt @@ -247,12 +247,6 @@ control to Kprobes.) If the probed function is declared asmlinkage, fastcall, or anything else that affects how args are passed, the handler's declaration must match. -NOTE: A macro JPROBE_ENTRY is provided to handle architecture-specific -aliasing of jp->entry. In the interest of portability, it is advised -to use: - - jp->entry = JPROBE_ENTRY(handler); - register_jprobe() returns 0 on success, or a negative errno otherwise. 4.3 register_kretprobe @@ -518,7 +512,7 @@ long jdo_fork(unsigned long clone_flags, unsigned long stack_start, } static struct jprobe my_jprobe = { - .entry = JPROBE_ENTRY(jdo_fork) + .entry = jdo_fork }; static int __init jprobe_init(void) diff --git a/trunk/Documentation/lguest/Makefile b/trunk/Documentation/lguest/Makefile new file mode 100644 index 000000000000..b9b9427376e9 --- /dev/null +++ b/trunk/Documentation/lguest/Makefile @@ -0,0 +1,27 @@ +# This creates the demonstration utility "lguest" which runs a Linux guest. + +# For those people that have a separate object dir, look there for .config +KBUILD_OUTPUT := ../.. +ifdef O + ifeq ("$(origin O)", "command line") + KBUILD_OUTPUT := $(O) + endif +endif +# We rely on CONFIG_PAGE_OFFSET to know where to put lguest binary. +include $(KBUILD_OUTPUT)/.config +LGUEST_GUEST_TOP := ($(CONFIG_PAGE_OFFSET) - 0x08000000) + +CFLAGS:=-Wall -Wmissing-declarations -Wmissing-prototypes -O3 \ + -static -DLGUEST_GUEST_TOP="$(LGUEST_GUEST_TOP)" -Wl,-T,lguest.lds +LDLIBS:=-lz + +all: lguest.lds lguest + +# The linker script on x86 is so complex the only way of creating one +# which will link our binary in the right place is to mangle the +# default one. +lguest.lds: + $(LD) --verbose | awk '/^==========/ { PRINT=1; next; } /SIZEOF_HEADERS/ { gsub(/0x[0-9A-F]*/, "$(LGUEST_GUEST_TOP)") } { if (PRINT) print $$0; }' > $@ + +clean: + rm -f lguest.lds lguest diff --git a/trunk/Documentation/lguest/lguest.c b/trunk/Documentation/lguest/lguest.c new file mode 100644 index 000000000000..1432b502a2d9 --- /dev/null +++ b/trunk/Documentation/lguest/lguest.c @@ -0,0 +1,1012 @@ +/* Simple program to layout "physical" memory for new lguest guest. + * Linked high to avoid likely physical memory. */ +#define _LARGEFILE64_SOURCE +#define _GNU_SOURCE +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +typedef unsigned long long u64; +typedef uint32_t u32; +typedef uint16_t u16; +typedef uint8_t u8; +#include "../../include/linux/lguest_launcher.h" +#include "../../include/asm-i386/e820.h" + +#define PAGE_PRESENT 0x7 /* Present, RW, Execute */ +#define NET_PEERNUM 1 +#define BRIDGE_PFX "bridge:" +#ifndef SIOCBRADDIF +#define SIOCBRADDIF 0x89a2 /* add interface to bridge */ +#endif + +static bool verbose; +#define verbose(args...) \ + do { if (verbose) printf(args); } while(0) +static int waker_fd; + +struct device_list +{ + fd_set infds; + int max_infd; + + struct device *dev; + struct device **lastdev; +}; + +struct device +{ + struct device *next; + struct lguest_device_desc *desc; + void *mem; + + /* Watch this fd if handle_input non-NULL. */ + int fd; + bool (*handle_input)(int fd, struct device *me); + + /* Watch DMA to this key if handle_input non-NULL. */ + unsigned long watch_key; + u32 (*handle_output)(int fd, const struct iovec *iov, + unsigned int num, struct device *me); + + /* Device-specific data. */ + void *priv; +}; + +static int open_or_die(const char *name, int flags) +{ + int fd = open(name, flags); + if (fd < 0) + err(1, "Failed to open %s", name); + return fd; +} + +static void *map_zeroed_pages(unsigned long addr, unsigned int num) +{ + static int fd = -1; + + if (fd == -1) + fd = open_or_die("/dev/zero", O_RDONLY); + + if (mmap((void *)addr, getpagesize() * num, + PROT_READ|PROT_WRITE|PROT_EXEC, MAP_FIXED|MAP_PRIVATE, fd, 0) + != (void *)addr) + err(1, "Mmaping %u pages of /dev/zero @%p", num, (void *)addr); + return (void *)addr; +} + +/* Find magic string marking entry point, return entry point. */ +static unsigned long entry_point(void *start, void *end, + unsigned long page_offset) +{ + void *p; + + for (p = start; p < end; p++) + if (memcmp(p, "GenuineLguest", strlen("GenuineLguest")) == 0) + return (long)p + strlen("GenuineLguest") + page_offset; + + err(1, "Is this image a genuine lguest?"); +} + +/* Returns the entry point */ +static unsigned long map_elf(int elf_fd, const Elf32_Ehdr *ehdr, + unsigned long *page_offset) +{ + void *addr; + Elf32_Phdr phdr[ehdr->e_phnum]; + unsigned int i; + unsigned long start = -1UL, end = 0; + + /* Sanity checks. */ + if (ehdr->e_type != ET_EXEC + || ehdr->e_machine != EM_386 + || ehdr->e_phentsize != sizeof(Elf32_Phdr) + || ehdr->e_phnum < 1 || ehdr->e_phnum > 65536U/sizeof(Elf32_Phdr)) + errx(1, "Malformed elf header"); + + if (lseek(elf_fd, ehdr->e_phoff, SEEK_SET) < 0) + err(1, "Seeking to program headers"); + if (read(elf_fd, phdr, sizeof(phdr)) != sizeof(phdr)) + err(1, "Reading program headers"); + + *page_offset = 0; + /* We map the loadable segments at virtual addresses corresponding + * to their physical addresses (our virtual == guest physical). */ + for (i = 0; i < ehdr->e_phnum; i++) { + if (phdr[i].p_type != PT_LOAD) + continue; + + verbose("Section %i: size %i addr %p\n", + i, phdr[i].p_memsz, (void *)phdr[i].p_paddr); + + /* We expect linear address space. */ + if (!*page_offset) + *page_offset = phdr[i].p_vaddr - phdr[i].p_paddr; + else if (*page_offset != phdr[i].p_vaddr - phdr[i].p_paddr) + errx(1, "Page offset of section %i different", i); + + if (phdr[i].p_paddr < start) + start = phdr[i].p_paddr; + if (phdr[i].p_paddr + phdr[i].p_filesz > end) + end = phdr[i].p_paddr + phdr[i].p_filesz; + + /* We map everything private, writable. */ + addr = mmap((void *)phdr[i].p_paddr, + phdr[i].p_filesz, + PROT_READ|PROT_WRITE|PROT_EXEC, + MAP_FIXED|MAP_PRIVATE, + elf_fd, phdr[i].p_offset); + if (addr != (void *)phdr[i].p_paddr) + err(1, "Mmaping vmlinux seg %i gave %p not %p", + i, addr, (void *)phdr[i].p_paddr); + } + + return entry_point((void *)start, (void *)end, *page_offset); +} + +/* This is amazingly reliable. */ +static unsigned long intuit_page_offset(unsigned char *img, unsigned long len) +{ + unsigned int i, possibilities[256] = { 0 }; + + for (i = 0; i + 4 < len; i++) { + /* mov 0xXXXXXXXX,%eax */ + if (img[i] == 0xA1 && ++possibilities[img[i+4]] > 3) + return (unsigned long)img[i+4] << 24; + } + errx(1, "could not determine page offset"); +} + +static unsigned long unpack_bzimage(int fd, unsigned long *page_offset) +{ + gzFile f; + int ret, len = 0; + void *img = (void *)0x100000; + + f = gzdopen(fd, "rb"); + while ((ret = gzread(f, img + len, 65536)) > 0) + len += ret; + if (ret < 0) + err(1, "reading image from bzImage"); + + verbose("Unpacked size %i addr %p\n", len, img); + *page_offset = intuit_page_offset(img, len); + + return entry_point(img, img + len, *page_offset); +} + +static unsigned long load_bzimage(int fd, unsigned long *page_offset) +{ + unsigned char c; + int state = 0; + + /* Ugly brute force search for gzip header. */ + while (read(fd, &c, 1) == 1) { + switch (state) { + case 0: + if (c == 0x1F) + state++; + break; + case 1: + if (c == 0x8B) + state++; + else + state = 0; + break; + case 2 ... 8: + state++; + break; + case 9: + lseek(fd, -10, SEEK_CUR); + if (c != 0x03) /* Compressed under UNIX. */ + state = -1; + else + return unpack_bzimage(fd, page_offset); + } + } + errx(1, "Could not find kernel in bzImage"); +} + +static unsigned long load_kernel(int fd, unsigned long *page_offset) +{ + Elf32_Ehdr hdr; + + if (read(fd, &hdr, sizeof(hdr)) != sizeof(hdr)) + err(1, "Reading kernel"); + + if (memcmp(hdr.e_ident, ELFMAG, SELFMAG) == 0) + return map_elf(fd, &hdr, page_offset); + + return load_bzimage(fd, page_offset); +} + +static inline unsigned long page_align(unsigned long addr) +{ + return ((addr + getpagesize()-1) & ~(getpagesize()-1)); +} + +/* initrd gets loaded at top of memory: return length. */ +static unsigned long load_initrd(const char *name, unsigned long mem) +{ + int ifd; + struct stat st; + unsigned long len; + void *iaddr; + + ifd = open_or_die(name, O_RDONLY); + if (fstat(ifd, &st) < 0) + err(1, "fstat() on initrd '%s'", name); + + len = page_align(st.st_size); + iaddr = mmap((void *)mem - len, st.st_size, + PROT_READ|PROT_EXEC|PROT_WRITE, + MAP_FIXED|MAP_PRIVATE, ifd, 0); + if (iaddr != (void *)mem - len) + err(1, "Mmaping initrd '%s' returned %p not %p", + name, iaddr, (void *)mem - len); + close(ifd); + verbose("mapped initrd %s size=%lu @ %p\n", name, st.st_size, iaddr); + return len; +} + +static unsigned long setup_pagetables(unsigned long mem, + unsigned long initrd_size, + unsigned long page_offset) +{ + u32 *pgdir, *linear; + unsigned int mapped_pages, i, linear_pages; + unsigned int ptes_per_page = getpagesize()/sizeof(u32); + + /* If we can map all of memory above page_offset, we do so. */ + if (mem <= -page_offset) + mapped_pages = mem/getpagesize(); + else + mapped_pages = -page_offset/getpagesize(); + + /* Each linear PTE page can map ptes_per_page pages. */ + linear_pages = (mapped_pages + ptes_per_page-1)/ptes_per_page; + + /* We lay out top-level then linear mapping immediately below initrd */ + pgdir = (void *)mem - initrd_size - getpagesize(); + linear = (void *)pgdir - linear_pages*getpagesize(); + + for (i = 0; i < mapped_pages; i++) + linear[i] = ((i * getpagesize()) | PAGE_PRESENT); + + /* Now set up pgd so that this memory is at page_offset */ + for (i = 0; i < mapped_pages; i += ptes_per_page) { + pgdir[(i + page_offset/getpagesize())/ptes_per_page] + = (((u32)linear + i*sizeof(u32)) | PAGE_PRESENT); + } + + verbose("Linear mapping of %u pages in %u pte pages at %p\n", + mapped_pages, linear_pages, linear); + + return (unsigned long)pgdir; +} + +static void concat(char *dst, char *args[]) +{ + unsigned int i, len = 0; + + for (i = 0; args[i]; i++) { + strcpy(dst+len, args[i]); + strcat(dst+len, " "); + len += strlen(args[i]) + 1; + } + /* In case it's empty. */ + dst[len] = '\0'; +} + +static int tell_kernel(u32 pgdir, u32 start, u32 page_offset) +{ + u32 args[] = { LHREQ_INITIALIZE, + LGUEST_GUEST_TOP/getpagesize(), /* Just below us */ + pgdir, start, page_offset }; + int fd; + + fd = open_or_die("/dev/lguest", O_RDWR); + if (write(fd, args, sizeof(args)) < 0) + err(1, "Writing to /dev/lguest"); + return fd; +} + +static void set_fd(int fd, struct device_list *devices) +{ + FD_SET(fd, &devices->infds); + if (fd > devices->max_infd) + devices->max_infd = fd; +} + +/* When input arrives, we tell the kernel to kick lguest out with -EAGAIN. */ +static void wake_parent(int pipefd, int lguest_fd, struct device_list *devices) +{ + set_fd(pipefd, devices); + + for (;;) { + fd_set rfds = devices->infds; + u32 args[] = { LHREQ_BREAK, 1 }; + + select(devices->max_infd+1, &rfds, NULL, NULL, NULL); + if (FD_ISSET(pipefd, &rfds)) { + int ignorefd; + if (read(pipefd, &ignorefd, sizeof(ignorefd)) == 0) + exit(0); + FD_CLR(ignorefd, &devices->infds); + } else + write(lguest_fd, args, sizeof(args)); + } +} + +static int setup_waker(int lguest_fd, struct device_list *device_list) +{ + int pipefd[2], child; + + pipe(pipefd); + child = fork(); + if (child == -1) + err(1, "forking"); + + if (child == 0) { + close(pipefd[1]); + wake_parent(pipefd[0], lguest_fd, device_list); + } + close(pipefd[0]); + + return pipefd[1]; +} + +static void *_check_pointer(unsigned long addr, unsigned int size, + unsigned int line) +{ + if (addr >= LGUEST_GUEST_TOP || addr + size >= LGUEST_GUEST_TOP) + errx(1, "%s:%i: Invalid address %li", __FILE__, line, addr); + return (void *)addr; +} +#define check_pointer(addr,size) _check_pointer(addr, size, __LINE__) + +/* Returns pointer to dma->used_len */ +static u32 *dma2iov(unsigned long dma, struct iovec iov[], unsigned *num) +{ + unsigned int i; + struct lguest_dma *udma; + + udma = check_pointer(dma, sizeof(*udma)); + for (i = 0; i < LGUEST_MAX_DMA_SECTIONS; i++) { + if (!udma->len[i]) + break; + + iov[i].iov_base = check_pointer(udma->addr[i], udma->len[i]); + iov[i].iov_len = udma->len[i]; + } + *num = i; + return &udma->used_len; +} + +static u32 *get_dma_buffer(int fd, void *key, + struct iovec iov[], unsigned int *num, u32 *irq) +{ + u32 buf[] = { LHREQ_GETDMA, (u32)key }; + unsigned long udma; + u32 *res; + + udma = write(fd, buf, sizeof(buf)); + if (udma == (unsigned long)-1) + return NULL; + + /* Kernel stashes irq in ->used_len. */ + res = dma2iov(udma, iov, num); + *irq = *res; + return res; +} + +static void trigger_irq(int fd, u32 irq) +{ + u32 buf[] = { LHREQ_IRQ, irq }; + if (write(fd, buf, sizeof(buf)) != 0) + err(1, "Triggering irq %i", irq); +} + +static void discard_iovec(struct iovec *iov, unsigned int *num) +{ + static char discard_buf[1024]; + *num = 1; + iov->iov_base = discard_buf; + iov->iov_len = sizeof(discard_buf); +} + +static struct termios orig_term; +static void restore_term(void) +{ + tcsetattr(STDIN_FILENO, TCSANOW, &orig_term); +} + +struct console_abort +{ + int count; + struct timeval start; +}; + +/* We DMA input to buffer bound at start of console page. */ +static bool handle_console_input(int fd, struct device *dev) +{ + u32 irq = 0, *lenp; + int len; + unsigned int num; + struct iovec iov[LGUEST_MAX_DMA_SECTIONS]; + struct console_abort *abort = dev->priv; + + lenp = get_dma_buffer(fd, dev->mem, iov, &num, &irq); + if (!lenp) { + warn("console: no dma buffer!"); + discard_iovec(iov, &num); + } + + len = readv(dev->fd, iov, num); + if (len <= 0) { + warnx("Failed to get console input, ignoring console."); + len = 0; + } + + if (lenp) { + *lenp = len; + trigger_irq(fd, irq); + } + + /* Three ^C within one second? Exit. */ + if (len == 1 && ((char *)iov[0].iov_base)[0] == 3) { + if (!abort->count++) + gettimeofday(&abort->start, NULL); + else if (abort->count == 3) { + struct timeval now; + gettimeofday(&now, NULL); + if (now.tv_sec <= abort->start.tv_sec+1) { + /* Make sure waker is not blocked in BREAK */ + u32 args[] = { LHREQ_BREAK, 0 }; + close(waker_fd); + write(fd, args, sizeof(args)); + exit(2); + } + abort->count = 0; + } + } else + abort->count = 0; + + if (!len) { + restore_term(); + return false; + } + return true; +} + +static u32 handle_console_output(int fd, const struct iovec *iov, + unsigned num, struct device*dev) +{ + return writev(STDOUT_FILENO, iov, num); +} + +static u32 handle_tun_output(int fd, const struct iovec *iov, + unsigned num, struct device *dev) +{ + /* Now we've seen output, we should warn if we can't get buffers. */ + *(bool *)dev->priv = true; + return writev(dev->fd, iov, num); +} + +static unsigned long peer_offset(unsigned int peernum) +{ + return 4 * peernum; +} + +static bool handle_tun_input(int fd, struct device *dev) +{ + u32 irq = 0, *lenp; + int len; + unsigned num; + struct iovec iov[LGUEST_MAX_DMA_SECTIONS]; + + lenp = get_dma_buffer(fd, dev->mem+peer_offset(NET_PEERNUM), iov, &num, + &irq); + if (!lenp) { + if (*(bool *)dev->priv) + warn("network: no dma buffer!"); + discard_iovec(iov, &num); + } + + len = readv(dev->fd, iov, num); + if (len <= 0) + err(1, "reading network"); + if (lenp) { + *lenp = len; + trigger_irq(fd, irq); + } + verbose("tun input packet len %i [%02x %02x] (%s)\n", len, + ((u8 *)iov[0].iov_base)[0], ((u8 *)iov[0].iov_base)[1], + lenp ? "sent" : "discarded"); + return true; +} + +static u32 handle_block_output(int fd, const struct iovec *iov, + unsigned num, struct device *dev) +{ + struct lguest_block_page *p = dev->mem; + u32 irq, *lenp; + unsigned int len, reply_num; + struct iovec reply[LGUEST_MAX_DMA_SECTIONS]; + off64_t device_len, off = (off64_t)p->sector * 512; + + device_len = *(off64_t *)dev->priv; + + if (off >= device_len) + err(1, "Bad offset %llu vs %llu", off, device_len); + if (lseek64(dev->fd, off, SEEK_SET) != off) + err(1, "Bad seek to sector %i", p->sector); + + verbose("Block: %s at offset %llu\n", p->type ? "WRITE" : "READ", off); + + lenp = get_dma_buffer(fd, dev->mem, reply, &reply_num, &irq); + if (!lenp) + err(1, "Block request didn't give us a dma buffer"); + + if (p->type) { + len = writev(dev->fd, iov, num); + if (off + len > device_len) { + ftruncate(dev->fd, device_len); + errx(1, "Write past end %llu+%u", off, len); + } + *lenp = 0; + } else { + len = readv(dev->fd, reply, reply_num); + *lenp = len; + } + + p->result = 1 + (p->bytes != len); + trigger_irq(fd, irq); + return 0; +} + +static void handle_output(int fd, unsigned long dma, unsigned long key, + struct device_list *devices) +{ + struct device *i; + u32 *lenp; + struct iovec iov[LGUEST_MAX_DMA_SECTIONS]; + unsigned num = 0; + + lenp = dma2iov(dma, iov, &num); + for (i = devices->dev; i; i = i->next) { + if (i->handle_output && key == i->watch_key) { + *lenp = i->handle_output(fd, iov, num, i); + return; + } + } + warnx("Pending dma %p, key %p", (void *)dma, (void *)key); +} + +static void handle_input(int fd, struct device_list *devices) +{ + struct timeval poll = { .tv_sec = 0, .tv_usec = 0 }; + + for (;;) { + struct device *i; + fd_set fds = devices->infds; + + if (select(devices->max_infd+1, &fds, NULL, NULL, &poll) == 0) + break; + + for (i = devices->dev; i; i = i->next) { + if (i->handle_input && FD_ISSET(i->fd, &fds)) { + if (!i->handle_input(fd, i)) { + FD_CLR(i->fd, &devices->infds); + /* Tell waker to ignore it too... */ + write(waker_fd, &i->fd, sizeof(i->fd)); + } + } + } + } +} + +static struct lguest_device_desc *new_dev_desc(u16 type, u16 features, + u16 num_pages) +{ + static unsigned long top = LGUEST_GUEST_TOP; + struct lguest_device_desc *desc; + + desc = malloc(sizeof(*desc)); + desc->type = type; + desc->num_pages = num_pages; + desc->features = features; + desc->status = 0; + if (num_pages) { + top -= num_pages*getpagesize(); + map_zeroed_pages(top, num_pages); + desc->pfn = top / getpagesize(); + } else + desc->pfn = 0; + return desc; +} + +static struct device *new_device(struct device_list *devices, + u16 type, u16 num_pages, u16 features, + int fd, + bool (*handle_input)(int, struct device *), + unsigned long watch_off, + u32 (*handle_output)(int, + const struct iovec *, + unsigned, + struct device *)) +{ + struct device *dev = malloc(sizeof(*dev)); + + /* Append to device list. */ + *devices->lastdev = dev; + dev->next = NULL; + devices->lastdev = &dev->next; + + dev->fd = fd; + if (handle_input) + set_fd(dev->fd, devices); + dev->desc = new_dev_desc(type, features, num_pages); + dev->mem = (void *)(dev->desc->pfn * getpagesize()); + dev->handle_input = handle_input; + dev->watch_key = (unsigned long)dev->mem + watch_off; + dev->handle_output = handle_output; + return dev; +} + +static void setup_console(struct device_list *devices) +{ + struct device *dev; + + if (tcgetattr(STDIN_FILENO, &orig_term) == 0) { + struct termios term = orig_term; + term.c_lflag &= ~(ISIG|ICANON|ECHO); + tcsetattr(STDIN_FILENO, TCSANOW, &term); + atexit(restore_term); + } + + /* We don't currently require a page for the console. */ + dev = new_device(devices, LGUEST_DEVICE_T_CONSOLE, 0, 0, + STDIN_FILENO, handle_console_input, + LGUEST_CONSOLE_DMA_KEY, handle_console_output); + dev->priv = malloc(sizeof(struct console_abort)); + ((struct console_abort *)dev->priv)->count = 0; + verbose("device %p: console\n", + (void *)(dev->desc->pfn * getpagesize())); +} + +static void setup_block_file(const char *filename, struct device_list *devices) +{ + int fd; + struct device *dev; + off64_t *device_len; + struct lguest_block_page *p; + + fd = open_or_die(filename, O_RDWR|O_LARGEFILE|O_DIRECT); + dev = new_device(devices, LGUEST_DEVICE_T_BLOCK, 1, + LGUEST_DEVICE_F_RANDOMNESS, + fd, NULL, 0, handle_block_output); + device_len = dev->priv = malloc(sizeof(*device_len)); + *device_len = lseek64(fd, 0, SEEK_END); + p = dev->mem; + + p->num_sectors = *device_len/512; + verbose("device %p: block %i sectors\n", + (void *)(dev->desc->pfn * getpagesize()), p->num_sectors); +} + +/* We use fnctl locks to reserve network slots (autocleanup!) */ +static unsigned int find_slot(int netfd, const char *filename) +{ + struct flock fl; + + fl.l_type = F_WRLCK; + fl.l_whence = SEEK_SET; + fl.l_len = 1; + for (fl.l_start = 0; + fl.l_start < getpagesize()/sizeof(struct lguest_net); + fl.l_start++) { + if (fcntl(netfd, F_SETLK, &fl) == 0) + return fl.l_start; + } + errx(1, "No free slots in network file %s", filename); +} + +static void setup_net_file(const char *filename, + struct device_list *devices) +{ + int netfd; + struct device *dev; + + netfd = open(filename, O_RDWR, 0); + if (netfd < 0) { + if (errno == ENOENT) { + netfd = open(filename, O_RDWR|O_CREAT, 0600); + if (netfd >= 0) { + char page[getpagesize()]; + memset(page, 0, sizeof(page)); + write(netfd, page, sizeof(page)); + } + } + if (netfd < 0) + err(1, "cannot open net file '%s'", filename); + } + + dev = new_device(devices, LGUEST_DEVICE_T_NET, 1, + find_slot(netfd, filename)|LGUEST_NET_F_NOCSUM, + -1, NULL, 0, NULL); + + /* We overwrite the /dev/zero mapping with the actual file. */ + if (mmap(dev->mem, getpagesize(), PROT_READ|PROT_WRITE, + MAP_FIXED|MAP_SHARED, netfd, 0) != dev->mem) + err(1, "could not mmap '%s'", filename); + verbose("device %p: shared net %s, peer %i\n", + (void *)(dev->desc->pfn * getpagesize()), filename, + dev->desc->features & ~LGUEST_NET_F_NOCSUM); +} + +static u32 str2ip(const char *ipaddr) +{ + unsigned int byte[4]; + + sscanf(ipaddr, "%u.%u.%u.%u", &byte[0], &byte[1], &byte[2], &byte[3]); + return (byte[0] << 24) | (byte[1] << 16) | (byte[2] << 8) | byte[3]; +} + +/* adapted from libbridge */ +static void add_to_bridge(int fd, const char *if_name, const char *br_name) +{ + int ifidx; + struct ifreq ifr; + + if (!*br_name) + errx(1, "must specify bridge name"); + + ifidx = if_nametoindex(if_name); + if (!ifidx) + errx(1, "interface %s does not exist!", if_name); + + strncpy(ifr.ifr_name, br_name, IFNAMSIZ); + ifr.ifr_ifindex = ifidx; + if (ioctl(fd, SIOCBRADDIF, &ifr) < 0) + err(1, "can't add %s to bridge %s", if_name, br_name); +} + +static void configure_device(int fd, const char *devname, u32 ipaddr, + unsigned char hwaddr[6]) +{ + struct ifreq ifr; + struct sockaddr_in *sin = (struct sockaddr_in *)&ifr.ifr_addr; + + memset(&ifr, 0, sizeof(ifr)); + strcpy(ifr.ifr_name, devname); + sin->sin_family = AF_INET; + sin->sin_addr.s_addr = htonl(ipaddr); + if (ioctl(fd, SIOCSIFADDR, &ifr) != 0) + err(1, "Setting %s interface address", devname); + ifr.ifr_flags = IFF_UP; + if (ioctl(fd, SIOCSIFFLAGS, &ifr) != 0) + err(1, "Bringing interface %s up", devname); + + if (ioctl(fd, SIOCGIFHWADDR, &ifr) != 0) + err(1, "getting hw address for %s", devname); + + memcpy(hwaddr, ifr.ifr_hwaddr.sa_data, 6); +} + +static void setup_tun_net(const char *arg, struct device_list *devices) +{ + struct device *dev; + struct ifreq ifr; + int netfd, ipfd; + u32 ip; + const char *br_name = NULL; + + netfd = open_or_die("/dev/net/tun", O_RDWR); + memset(&ifr, 0, sizeof(ifr)); + ifr.ifr_flags = IFF_TAP | IFF_NO_PI; + strcpy(ifr.ifr_name, "tap%d"); + if (ioctl(netfd, TUNSETIFF, &ifr) != 0) + err(1, "configuring /dev/net/tun"); + ioctl(netfd, TUNSETNOCSUM, 1); + + /* You will be peer 1: we should create enough jitter to randomize */ + dev = new_device(devices, LGUEST_DEVICE_T_NET, 1, + NET_PEERNUM|LGUEST_DEVICE_F_RANDOMNESS, netfd, + handle_tun_input, peer_offset(0), handle_tun_output); + dev->priv = malloc(sizeof(bool)); + *(bool *)dev->priv = false; + + ipfd = socket(PF_INET, SOCK_DGRAM, IPPROTO_IP); + if (ipfd < 0) + err(1, "opening IP socket"); + + if (!strncmp(BRIDGE_PFX, arg, strlen(BRIDGE_PFX))) { + ip = INADDR_ANY; + br_name = arg + strlen(BRIDGE_PFX); + add_to_bridge(ipfd, ifr.ifr_name, br_name); + } else + ip = str2ip(arg); + + /* We are peer 0, ie. first slot. */ + configure_device(ipfd, ifr.ifr_name, ip, dev->mem); + + /* Set "promisc" bit: we want every single packet. */ + *((u8 *)dev->mem) |= 0x1; + + close(ipfd); + + verbose("device %p: tun net %u.%u.%u.%u\n", + (void *)(dev->desc->pfn * getpagesize()), + (u8)(ip>>24), (u8)(ip>>16), (u8)(ip>>8), (u8)ip); + if (br_name) + verbose("attached to bridge: %s\n", br_name); +} + +/* Now we know how much memory we have, we copy in device descriptors */ +static void map_device_descriptors(struct device_list *devs, unsigned long mem) +{ + struct device *i; + unsigned int num; + struct lguest_device_desc *descs; + + /* Device descriptor array sits just above top of normal memory */ + descs = map_zeroed_pages(mem, 1); + + for (i = devs->dev, num = 0; i; i = i->next, num++) { + if (num == LGUEST_MAX_DEVICES) + errx(1, "too many devices"); + verbose("Device %i: %s\n", num, + i->desc->type == LGUEST_DEVICE_T_NET ? "net" + : i->desc->type == LGUEST_DEVICE_T_CONSOLE ? "console" + : i->desc->type == LGUEST_DEVICE_T_BLOCK ? "block" + : "unknown"); + descs[num] = *i->desc; + free(i->desc); + i->desc = &descs[num]; + } +} + +static void __attribute__((noreturn)) +run_guest(int lguest_fd, struct device_list *device_list) +{ + for (;;) { + u32 args[] = { LHREQ_BREAK, 0 }; + unsigned long arr[2]; + int readval; + + /* We read from the /dev/lguest device to run the Guest. */ + readval = read(lguest_fd, arr, sizeof(arr)); + + if (readval == sizeof(arr)) { + handle_output(lguest_fd, arr[0], arr[1], device_list); + continue; + } else if (errno == ENOENT) { + char reason[1024] = { 0 }; + read(lguest_fd, reason, sizeof(reason)-1); + errx(1, "%s", reason); + } else if (errno != EAGAIN) + err(1, "Running guest failed"); + handle_input(lguest_fd, device_list); + if (write(lguest_fd, args, sizeof(args)) < 0) + err(1, "Resetting break"); + } +} + +static struct option opts[] = { + { "verbose", 0, NULL, 'v' }, + { "sharenet", 1, NULL, 's' }, + { "tunnet", 1, NULL, 't' }, + { "block", 1, NULL, 'b' }, + { "initrd", 1, NULL, 'i' }, + { NULL }, +}; +static void usage(void) +{ + errx(1, "Usage: lguest [--verbose] " + "[--sharenet=|--tunnet=(|bridge:)\n" + "|--block=|--initrd=]...\n" + " vmlinux [args...]"); +} + +int main(int argc, char *argv[]) +{ + unsigned long mem, pgdir, start, page_offset, initrd_size = 0; + int c, lguest_fd; + struct device_list device_list; + void *boot = (void *)0; + const char *initrd_name = NULL; + + device_list.max_infd = -1; + device_list.dev = NULL; + device_list.lastdev = &device_list.dev; + FD_ZERO(&device_list.infds); + + while ((c = getopt_long(argc, argv, "v", opts, NULL)) != EOF) { + switch (c) { + case 'v': + verbose = true; + break; + case 's': + setup_net_file(optarg, &device_list); + break; + case 't': + setup_tun_net(optarg, &device_list); + break; + case 'b': + setup_block_file(optarg, &device_list); + break; + case 'i': + initrd_name = optarg; + break; + default: + warnx("Unknown argument %s", argv[optind]); + usage(); + } + } + if (optind + 2 > argc) + usage(); + + /* We need a console device */ + setup_console(&device_list); + + /* First we map /dev/zero over all of guest-physical memory. */ + mem = atoi(argv[optind]) * 1024 * 1024; + map_zeroed_pages(0, mem / getpagesize()); + + /* Now we load the kernel */ + start = load_kernel(open_or_die(argv[optind+1], O_RDONLY), + &page_offset); + + /* Write the device descriptors into memory. */ + map_device_descriptors(&device_list, mem); + + /* Map the initrd image if requested */ + if (initrd_name) { + initrd_size = load_initrd(initrd_name, mem); + *(unsigned long *)(boot+0x218) = mem - initrd_size; + *(unsigned long *)(boot+0x21c) = initrd_size; + *(unsigned char *)(boot+0x210) = 0xFF; + } + + /* Set up the initial linar pagetables. */ + pgdir = setup_pagetables(mem, initrd_size, page_offset); + + /* E820 memory map: ours is a simple, single region. */ + *(char*)(boot+E820NR) = 1; + *((struct e820entry *)(boot+E820MAP)) + = ((struct e820entry) { 0, mem, E820_RAM }); + /* Command line pointer and command line (at 4096) */ + *(void **)(boot + 0x228) = boot + 4096; + concat(boot + 4096, argv+optind+2); + /* Paravirt type: 1 == lguest */ + *(int *)(boot + 0x23c) = 1; + + lguest_fd = tell_kernel(pgdir, start, page_offset); + waker_fd = setup_waker(lguest_fd, &device_list); + + run_guest(lguest_fd, &device_list); +} diff --git a/trunk/Documentation/lguest/lguest.txt b/trunk/Documentation/lguest/lguest.txt new file mode 100644 index 000000000000..821617bd6c04 --- /dev/null +++ b/trunk/Documentation/lguest/lguest.txt @@ -0,0 +1,129 @@ +Rusty's Remarkably Unreliable Guide to Lguest + - or, A Young Coder's Illustrated Hypervisor +http://lguest.ozlabs.org + +Lguest is designed to be a minimal hypervisor for the Linux kernel, for +Linux developers and users to experiment with virtualization with the +minimum of complexity. Nonetheless, it should have sufficient +features to make it useful for specific tasks, and, of course, you are +encouraged to fork and enhance it. + +Features: + +- Kernel module which runs in a normal kernel. +- Simple I/O model for communication. +- Simple program to create new guests. +- Logo contains cute puppies: http://lguest.ozlabs.org + +Developer features: + +- Fun to hack on. +- No ABI: being tied to a specific kernel anyway, you can change anything. +- Many opportunities for improvement or feature implementation. + +Running Lguest: + +- Lguest runs the same kernel as guest and host. You can configure + them differently, but usually it's easiest not to. + + You will need to configure your kernel with the following options: + + CONFIG_HIGHMEM64G=n ("High Memory Support" "64GB")[1] + CONFIG_TUN=y/m ("Universal TUN/TAP device driver support") + CONFIG_EXPERIMENTAL=y ("Prompt for development and/or incomplete code/drivers") + CONFIG_PARAVIRT=y ("Paravirtualization support (EXPERIMENTAL)") + CONFIG_LGUEST=y/m ("Linux hypervisor example code") + + and I recommend: + CONFIG_HZ=100 ("Timer frequency")[2] + +- A tool called "lguest" is available in this directory: type "make" + to build it. If you didn't build your kernel in-tree, use "make + O=". + +- Create or find a root disk image. There are several useful ones + around, such as the xm-test tiny root image at + http://xm-test.xensource.com/ramdisks/initrd-1.1-i386.img + + For more serious work, I usually use a distribution ISO image and + install it under qemu, then make multiple copies: + + dd if=/dev/zero of=rootfile bs=1M count=2048 + qemu -cdrom image.iso -hda rootfile -net user -net nic -boot d + +- "modprobe lg" if you built it as a module. + +- Run an lguest as root: + + Documentation/lguest/lguest 64m vmlinux --tunnet=192.168.19.1 --block=rootfile root=/dev/lgba + + Explanation: + 64m: the amount of memory to use. + + vmlinux: the kernel image found in the top of your build directory. You + can also use a standard bzImage. + + --tunnet=192.168.19.1: configures a "tap" device for networking with this + IP address. + + --block=rootfile: a file or block device which becomes /dev/lgba + inside the guest. + + root=/dev/lgba: this (and anything else on the command line) are + kernel boot parameters. + +- Configuring networking. I usually have the host masquerade, using + "iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE" and "echo 1 > + /proc/sys/net/ipv4/ip_forward". In this example, I would configure + eth0 inside the guest at 192.168.19.2. + + Another method is to bridge the tap device to an external interface + using --tunnet=bridge:, and perhaps run dhcp on the guest + to obtain an IP address. The bridge needs to be configured first: + this option simply adds the tap interface to it. + + A simple example on my system: + + ifconfig eth0 0.0.0.0 + brctl addbr lg0 + ifconfig lg0 up + brctl addif lg0 eth0 + dhclient lg0 + + Then use --tunnet=bridge:lg0 when launching the guest. + + See http://linux-net.osdl.org/index.php/Bridge for general information + on how to get bridging working. + +- You can also create an inter-guest network using + "--sharenet=": any two guests using the same file are on + the same network. This file is created if it does not exist. + +Lguest I/O model: + +Lguest uses a simplified DMA model plus shared memory for I/O. Guests +can communicate with each other if they share underlying memory +(usually by the lguest program mmaping the same file), but they can +use any non-shared memory to communicate with the lguest process. + +Guests can register DMA buffers at any key (must be a valid physical +address) using the LHCALL_BIND_DMA(key, dmabufs, num<<8|irq) +hypercall. "dmabufs" is the physical address of an array of "num" +"struct lguest_dma": each contains a used_len, and an array of +physical addresses and lengths. When a transfer occurs, the +"used_len" field of one of the buffers which has used_len 0 will be +set to the length transferred and the irq will fire. + +Using an irq value of 0 unbinds the dma buffers. + +To send DMA, the LHCALL_SEND_DMA(key, dma_physaddr) hypercall is used, +and the bytes used is written to the used_len field. This can be 0 if +noone else has bound a DMA buffer to that key or some other error. +DMA buffers bound by the same guest are ignored. + +Cheers! +Rusty Russell rusty@rustcorp.com.au. + +[1] These are on various places on the TODO list, waiting for you to + get annoyed enough at the limitation to fix it. +[2] Lguest is not yet tickless when idle. See [1]. diff --git a/trunk/Documentation/power/freezing-of-tasks.txt b/trunk/Documentation/power/freezing-of-tasks.txt index af1a282c71a3..04dc1cf9d215 100644 --- a/trunk/Documentation/power/freezing-of-tasks.txt +++ b/trunk/Documentation/power/freezing-of-tasks.txt @@ -155,6 +155,8 @@ Suppose, however, that the firmware file is located on a filesystem accessible only through another device that hasn't been resumed yet. In that case, request_firmware() will fail regardless of whether or not the freezing of tasks is used. Consequently, the problem is not really related to the freezing of -tasks, since it generally exists anyway. [The solution to this particular -problem is to keep the firmware in memory after it's loaded for the first time -and upload if from memory to the device whenever necessary.] +tasks, since it generally exists anyway. + +A driver must have all firmwares it may need in RAM before suspend() is called. +If keeping them is not practical, for example due to their size, they must be +requested early enough using the suspend notifier API described in notifiers.txt. diff --git a/trunk/Documentation/power/notifiers.txt b/trunk/Documentation/power/notifiers.txt new file mode 100644 index 000000000000..9293e4bc857c --- /dev/null +++ b/trunk/Documentation/power/notifiers.txt @@ -0,0 +1,50 @@ +Suspend notifiers + (C) 2007 Rafael J. Wysocki , GPL + +There are some operations that device drivers may want to carry out in their +.suspend() routines, but shouldn't, because they can cause the hibernation or +suspend to fail. For example, a driver may want to allocate a substantial amount +of memory (like 50 MB) in .suspend(), but that shouldn't be done after the +swsusp's memory shrinker has run. + +Also, there may be some operations, that subsystems want to carry out before a +hibernation/suspend or after a restore/resume, requiring the system to be fully +functional, so the drivers' .suspend() and .resume() routines are not suitable +for this purpose. For example, device drivers may want to upload firmware to +their devices after a restore from a hibernation image, but they cannot do it by +calling request_firmware() from their .resume() routines (user land processes +are frozen at this point). The solution may be to load the firmware into +memory before processes are frozen and upload it from there in the .resume() +routine. Of course, a hibernation notifier may be used for this purpose. + +The subsystems that have such needs can register suspend notifiers that will be +called upon the following events by the suspend core: + +PM_HIBERNATION_PREPARE The system is going to hibernate or suspend, tasks will + be frozen immediately. + +PM_POST_HIBERNATION The system memory state has been restored from a + hibernation image or an error occured during the + hibernation. Device drivers' .resume() callbacks have + been executed and tasks have been thawed. + +PM_SUSPEND_PREPARE The system is preparing for a suspend. + +PM_POST_SUSPEND The system has just resumed or an error occured during + the suspend. Device drivers' .resume() callbacks have + been executed and tasks have been thawed. + +It is generally assumed that whatever the notifiers do for +PM_HIBERNATION_PREPARE, should be undone for PM_POST_HIBERNATION. Analogously, +operations performed for PM_SUSPEND_PREPARE should be reversed for +PM_POST_SUSPEND. Additionally, all of the notifiers are called for +PM_POST_HIBERNATION if one of them fails for PM_HIBERNATION_PREPARE, and +all of the notifiers are called for PM_POST_SUSPEND if one of them fails for +PM_SUSPEND_PREPARE. + +The hibernation and suspend notifiers are called with pm_mutex held. They are +defined in the usual way, but their last argument is meaningless (it is always +NULL). To register and/or unregister a suspend notifier use the functions +register_pm_notifier() and unregister_pm_notifier(), respectively, defined in +include/linux/suspend.h . If you don't need to unregister the notifier, you can +also use the pm_notifier() macro defined in include/linux/suspend.h . diff --git a/trunk/Documentation/powerpc/booting-without-of.txt b/trunk/Documentation/powerpc/booting-without-of.txt index 0c2434822094..76733a3962f0 100644 --- a/trunk/Documentation/powerpc/booting-without-of.txt +++ b/trunk/Documentation/powerpc/booting-without-of.txt @@ -1250,6 +1250,12 @@ platforms are moved over to use the flattened-device-tree model. network device. This is used by the bootwrapper to interpret MAC addresses passed by the firmware when no information other than indices is available to associate an address with a device. + - phy-connection-type : a string naming the controller/PHY interface type, + i.e., "mii" (default), "rmii", "gmii", "rgmii", "rgmii-id", "sgmii", + "tbi", or "rtbi". This property is only really needed if the connection + is of type "rgmii-id", as all other connection types are detected by + hardware. + Example: diff --git a/trunk/Documentation/sound/alsa/ALSA-Configuration.txt b/trunk/Documentation/sound/alsa/ALSA-Configuration.txt index 355ff0a2bb7c..241e26c4ff92 100644 --- a/trunk/Documentation/sound/alsa/ALSA-Configuration.txt +++ b/trunk/Documentation/sound/alsa/ALSA-Configuration.txt @@ -467,7 +467,12 @@ Prior to version 0.9.0rc4 options had a 'snd_' prefix. This was removed. above explicitly. The power-management is supported. - + + Module snd-cs5530 + _________________ + + Module for Cyrix/NatSemi Geode 5530 chip. + Module snd-cs5535audio ---------------------- @@ -759,6 +764,7 @@ Prior to version 0.9.0rc4 options had a 'snd_' prefix. This was removed. model - force the model name position_fix - Fix DMA pointer (0 = auto, 1 = none, 2 = POSBUF, 3 = FIFO size) + probe_mask - Bitmask to probe codecs (default = -1, meaning all slots) single_cmd - Use single immediate commands to communicate with codecs (for debugging only) enable_msi - Enable Message Signaled Interrupt (MSI) (default = off) @@ -803,6 +809,8 @@ Prior to version 0.9.0rc4 options had a 'snd_' prefix. This was removed. hp-3013 HP machines (3013-variant) fujitsu Fujitsu S7020 acer Acer TravelMate + will Will laptops (PB V7900) + replacer Replacer 672V basic fixed pin assignment (old default model) auto auto-config reading BIOS (default) @@ -811,16 +819,31 @@ Prior to version 0.9.0rc4 options had a 'snd_' prefix. This was removed. hp-bpc HP xw4400/6400/8400/9400 laptops hp-bpc-d7000 HP BPC D7000 benq Benq ED8 + benq-t31 Benq T31 hippo Hippo (ATI) with jack detection, Sony UX-90s hippo_1 Hippo (Benq) with jack detection + sony-assamd Sony ASSAMD basic fixed pin assignment w/o SPDIF auto auto-config reading BIOS (default) + ALC268 + 3stack 3-stack model + auto auto-config reading BIOS (default) + + ALC662 + 3stack-dig 3-stack (2-channel) with SPDIF + 3stack-6ch 3-stack (6-channel) + 3stack-6ch-dig 3-stack (6-channel) with SPDIF + 6stack-dig 6-stack with SPDIF + lenovo-101e Lenovo laptop + auto auto-config reading BIOS (default) + ALC882/885 3stack-dig 3-jack with SPDIF I/O 6stack-dig 6-jack digital with SPDIF I/O arima Arima W820Di1 macpro MacPro support + imac24 iMac 24'' with jack detection w2jc ASUS W2JC auto auto-config reading BIOS (default) @@ -832,9 +855,15 @@ Prior to version 0.9.0rc4 options had a 'snd_' prefix. This was removed. 6stack-dig-demo 6-jack digital for Intel demo board acer Acer laptops (Travelmate 3012WTMi, Aspire 5600, etc) medion Medion Laptops + medion-md2 Medion MD2 targa-dig Targa/MSI targa-2ch-dig Targs/MSI with 2-channel laptop-eapd 3-jack with SPDIF I/O and EAPD (Clevo M540JE, M550JE) + lenovo-101e Lenovo 101E + lenovo-nb0763 Lenovo NB0763 + lenovo-ms7195-dig Lenovo MS7195 + 6stack-hp HP machines with 6stack (Nettle boards) + 3stack-hp HP machines with 3stack (Lucknow, Samba boards) auto auto-config reading BIOS (default) ALC861/660 @@ -853,7 +882,9 @@ Prior to version 0.9.0rc4 options had a 'snd_' prefix. This was removed. 3stack-dig 3-jack with SPDIF OUT 6stack-dig 6-jack with SPDIF OUT 3stack-660 3-jack (for ALC660VD) + 3stack-660-digout 3-jack with SPDIF OUT (for ALC660VD) lenovo Lenovo 3000 C200 + dallas Dallas laptops auto auto-config reading BIOS (default) CMI9880 @@ -864,12 +895,26 @@ Prior to version 0.9.0rc4 options had a 'snd_' prefix. This was removed. allout 5-jack in back, 2-jack in front, SPDIF out auto auto-config reading BIOS (default) + AD1882 + 3stack 3-stack mode (default) + 6stack 6-stack mode + + AD1884 + N/A + AD1981 basic 3-jack (default) hp HP nx6320 thinkpad Lenovo Thinkpad T60/X60/Z60 toshiba Toshiba U205 + AD1983 + N/A + + AD1984 + basic default configuration + thinkpad Lenovo Thinkpad T61/X61 + AD1986A 6stack 6-jack, separate surrounds (default) 3stack 3-stack, shared surrounds @@ -907,11 +952,18 @@ Prior to version 0.9.0rc4 options had a 'snd_' prefix. This was removed. ref Reference board 3stack D945 3stack 5stack D945 5stack + SPDIF - macmini Intel Mac Mini - macbook Intel Mac Book - macbook-pro-v1 Intel Mac Book Pro 1st generation - macbook-pro Intel Mac Book Pro 2nd generation - imac-intel Intel iMac + dell Dell XPS M1210 + intel-mac-v1 Intel Mac Type 1 + intel-mac-v2 Intel Mac Type 2 + intel-mac-v3 Intel Mac Type 3 + intel-mac-v4 Intel Mac Type 4 + intel-mac-v5 Intel Mac Type 5 + macmini Intel Mac Mini (equivalent with type 3) + macbook Intel Mac Book (eq. type 5) + macbook-pro-v1 Intel Mac Book Pro 1st generation (eq. type 3) + macbook-pro Intel Mac Book Pro 2nd generation (eq. type 3) + imac-intel Intel iMac (eq. type 2) + imac-intel-20 Intel iMac (newer version) (eq. type 3) STAC9202/9250/9251 ref Reference board, base config @@ -956,6 +1008,17 @@ Prior to version 0.9.0rc4 options had a 'snd_' prefix. This was removed. from the irq. Remember this is a last resort, and should be avoided as much as possible... + MORE NOTES ON "azx_get_response timeout" PROBLEMS: + On some hardwares, you may need to add a proper probe_mask option + to avoid the "azx_get_response timeout" problem above, instead. + This occurs when the access to non-existing or non-working codec slot + (likely a modem one) causes a stall of the communication via HD-audio + bus. You can see which codec slots are probed by enabling + CONFIG_SND_DEBUG_DETECT, or simply from the file name of the codec + proc files. Then limit the slots to probe by probe_mask option. + For example, probe_mask=1 means to probe only the first slot, and + probe_mask=4 means only the third slot. + The power-management is supported. Module snd-hdsp diff --git a/trunk/Documentation/sound/alsa/Audiophile-Usb.txt b/trunk/Documentation/sound/alsa/Audiophile-Usb.txt index e40cce83327c..2ad5e6306c44 100644 --- a/trunk/Documentation/sound/alsa/Audiophile-Usb.txt +++ b/trunk/Documentation/sound/alsa/Audiophile-Usb.txt @@ -1,4 +1,4 @@ - Guide to using M-Audio Audiophile USB with ALSA and Jack v1.3 + Guide to using M-Audio Audiophile USB with ALSA and Jack v1.5 ======================================================== Thibault Le Meur @@ -6,8 +6,19 @@ This document is a guide to using the M-Audio Audiophile USB (tm) device with ALSA and JACK. +History +======= +* v1.4 - Thibault Le Meur (2007-07-11) + - Added Low Endianness nature of 16bits-modes + found by Hakan Lennestal + - Modifying document structure +* v1.5 - Thibault Le Meur (2007-07-12) + - Added AC3/DTS passthru info + + 1 - Audiophile USB Specs and correct usage ========================================== + This part is a reminder of important facts about the functions and limitations of the device. @@ -25,18 +36,18 @@ The device has 4 audio interfaces, and 2 MIDI ports: The internal DAC/ADC has the following characteristics: * sample depth of 16 or 24 bits * sample rate from 8kHz to 96kHz -* Two ports can't use different sample depths at the same time. Moreover, the -Audiophile USB documentation gives the following Warning: "Please exit any -audio application running before switching between bit depths" +* Two interfaces can't use different sample depths at the same time. +Moreover, the Audiophile USB documentation gives the following Warning: +"Please exit any audio application running before switching between bit depths" Due to the USB 1.1 bandwidth limitation, a limited number of interfaces can be activated at the same time depending on the audio mode selected: - * 16-bit/48kHz ==> 4 channels in/4 channels out + * 16-bit/48kHz ==> 4 channels in + 4 channels out - Ai+Ao+Di+Do - * 24-bit/48kHz ==> 4 channels in/2 channels out, - or 2 channels in/4 channels out + * 24-bit/48kHz ==> 4 channels in + 2 channels out, + or 2 channels in + 4 channels out - Ai+Ao+Do or Ai+Di+Ao or Ai+Di+Do or Di+Ao+Do - * 24-bit/96kHz ==> 2 channels in, or 2 channels out (half duplex only) + * 24-bit/96kHz ==> 2 channels in _or_ 2 channels out (half duplex only) - Ai or Ao or Di or Do Important facts about the Digital interface: @@ -52,44 +63,56 @@ source is connected synchronization error (for instance sound played at an odd sample rate) -2 - Audiophile USB support in ALSA -================================== +2 - Audiophile USB MIDI support in ALSA +======================================= -2.1 - MIDI ports ----------------- -The Audiophile USB MIDI ports will be automatically supported once the +The Audiophile USB MIDI ports will be automatically supported once the following modules have been loaded: * snd-usb-audio * snd-seq-midi No additional setting is required. -2.2 - Audio ports ------------------ + +3 - Audiophile USB Audio support in ALSA +======================================== Audio functions of the Audiophile USB device are handled by the snd-usb-audio module. This module can work in a default mode (without any device-specific parameter), or in an "advanced" mode with the device-specific parameter called "device_setup". -2.2.1 - Default Alsa driver mode - -The default behavior of the snd-usb-audio driver is to parse the device -capabilities at startup and enable all functions inside the device (including -all ports at any supported sample rates and sample depths). This approach -has the advantage to let the driver easily switch from sample rates/depths -automatically according to the need of the application claiming the device. - -In this case the Audiophile ports are mapped to alsa pcm devices in the -following way (I suppose the device's index is 1): +3.1 - Default Alsa driver mode +------------------------------ + +The default behavior of the snd-usb-audio driver is to list the device +capabilities at startup and activate the required mode when required +by the applications: for instance if the user is recording in a +24bit-depth-mode and immediately after wants to switch to a 16bit-depth mode, +the snd-usb-audio module will reconfigure the device on the fly. + +This approach has the advantage to let the driver automatically switch from sample +rates/depths automatically according to the user's needs. However, those who +are using the device under windows know that this is not how the device is meant to +work: under windows applications must be closed before using the m-audio control +panel to switch the device working mode. Thus as we'll see in next section, this +Default Alsa driver mode can lead to device misconfigurations. + +Let's get back to the Default Alsa driver mode for now. In this case the +Audiophile interfaces are mapped to alsa pcm devices in the following +way (I suppose the device's index is 1): * hw:1,0 is Ao in playback and Di in capture * hw:1,1 is Do in playback and Ai in capture * hw:1,2 is Do in AC3/DTS passthrough mode -You must note as well that the device uses Big Endian byte encoding so that -supported audio format are S16_BE for 16-bit depth modes and S24_3BE for -24-bits depth mode. One exception is the hw:1,2 port which is Little Endian -compliant and thus uses S16_LE. +In this mode, the device uses Big Endian byte-encoding so that +supported audio format are S16_BE for 16-bit depth modes and S24_3BE for +24-bits depth mode. + +One exception is the hw:1,2 port which was reported to be Little Endian +compliant (supposedly supporting S16_LE) but processes in fact only S16_BE streams. +This has been fixed in kernel 2.6.23 and above and now the hw:1,2 interface +is reported to be big endian in this default driver mode. Examples: * playing a S24_3BE encoded raw file to the Ao port @@ -98,22 +121,26 @@ Examples: % arecord -D hw:1,1 -c2 -t raw -r48000 -fS24_3BE test.raw * playing a S16_BE encoded raw file to the Do port % aplay -D hw:1,1 -c2 -t raw -r48000 -fS16_BE test.raw + * playing an ac3 sample file to the Do port + % aplay -D hw:1,2 --channels=6 ac3_S16_BE_encoded_file.raw -If you're happy with the default Alsa driver setup and don't experience any +If you're happy with the default Alsa driver mode and don't experience any issue with this mode, then you can skip the following chapter. -2.2.2 - Advanced module setup +3.2 - Advanced module setup +--------------------------- Due to the hardware constraints described above, the device initialization made by the Alsa driver in default mode may result in a corrupted state of the device. For instance, a particularly annoying issue is that the sound captured -from the Ai port sounds distorted (as if boosted with an excessive high volume -gain). +from the Ai interface sounds distorted (as if boosted with an excessive high +volume gain). For people having this problem, the snd-usb-audio module has a new module -parameter called "device_setup". +parameter called "device_setup" (this parameter was introduced in kernel +release 2.6.17) -2.2.2.1 - Initializing the working mode of the Audiophile USB +3.2.1 - Initializing the working mode of the Audiophile USB As far as the Audiophile USB device is concerned, this value let the user specify: @@ -121,33 +148,57 @@ specify: * the sample rate * whether the Di port is used or not -Here is a list of supported device_setup values for this device: - * device_setup=0x00 (or omitted) - - Alsa driver default mode - - maintains backward compatibility with setups that do not use this - parameter by not introducing any change - - results sometimes in corrupted sound as described earlier +When initialized with "device_setup=0x00", the snd-usb-audio module has +the same behaviour as when the parameter is omitted (see paragraph "Default +Alsa driver mode" above) + +Others modes are described in the following subsections. + +3.2.1.1 - 16-bit modes + +The two supported modes are: + * device_setup=0x01 - 16bits 48kHz mode with Di disabled - Ai,Ao,Do can be used at the same time - hw:1,0 is not available in capture mode - hw:1,2 is not available + * device_setup=0x11 - 16bits 48kHz mode with Di enabled - Ai,Ao,Di,Do can be used at the same time - hw:1,0 is available in capture mode - hw:1,2 is not available + +In this modes the device operates only at 16bits-modes. Before kernel 2.6.23, +the devices where reported to be Big-Endian when in fact they were Little-Endian +so that playing a file was a matter of using: + % aplay -D hw:1,1 -c2 -t raw -r48000 -fS16_BE test_S16_LE.raw +where "test_S16_LE.raw" was in fact a little-endian sample file. + +Thanks to Hakan Lennestal (who discovered the Little-Endiannes of the device in +these modes) a fix has been committed (expected in kernel 2.6.23) and +Alsa now reports Little-Endian interfaces. Thus playing a file now is as simple as +using: + % aplay -D hw:1,1 -c2 -t raw -r48000 -fS16_LE test_S16_LE.raw + +3.2.1.2 - 24-bit modes + +The three supported modes are: + * device_setup=0x09 - 24bits 48kHz mode with Di disabled - Ai,Ao,Do can be used at the same time - hw:1,0 is not available in capture mode - hw:1,2 is not available + * device_setup=0x19 - 24bits 48kHz mode with Di enabled - 3 ports from {Ai,Ao,Di,Do} can be used at the same time - hw:1,0 is available in capture mode and an active digital source must be connected to Di - hw:1,2 is not available + * device_setup=0x0D or 0x10 - 24bits 96kHz mode - Di is enabled by default for this mode but does not need to be connected @@ -155,34 +206,64 @@ Here is a list of supported device_setup values for this device: - Only 1 port from {Ai,Ao,Di,Do} can be used at the same time - hw:1,0 is available in captured mode - hw:1,2 is not available + +In these modes the device is only Big-Endian compliant (see "Default Alsa driver +mode" above for an aplay command example) + +3.2.1.3 - AC3 w/ DTS passthru mode + +Thanks to Hakan Lennestal, I now have a report saying that this mode works. + * device_setup=0x03 - 16bits 48kHz mode with only the Do port enabled - - AC3 with DTS passthru (not tested) + - AC3 with DTS passthru - Caution with this setup the Do port is mapped to the pcm device hw:1,0 -2.2.2.2 - Setting and switching configurations with the device_setup parameter +The command line used to playback the AC3/DTS encoded .wav-files in this mode: + % aplay -D hw:1,0 --channels=6 ac3_S16_LE_encoded_file.raw + +3.2.2 - How to use the device_setup parameter +---------------------------------------------- The parameter can be given: + * By manually probing the device (as root): # modprobe -r snd-usb-audio # modprobe snd-usb-audio index=1 device_setup=0x09 + * Or while configuring the modules options in your modules configuration file - For Fedora distributions, edit the /etc/modprobe.conf file: alias snd-card-1 snd-usb-audio options snd-usb-audio index=1 device_setup=0x09 -IMPORTANT NOTE WHEN SWITCHING CONFIGURATION: -------------------------------------------- - * You may need to _first_ initialize the module with the correct device_setup - parameter and _only_after_ turn on the Audiophile USB device - * This is especially true when switching the sample depth: +CAUTION when initializaing the device +------------------------------------- + + * Correct initialization on the device requires that device_setup is given to + the module BEFORE the device is turned on. So, if you use the "manual probing" + method described above, take care to power-on the device AFTER this initialization. + + * Failing to respect this will lead in a misconfiguration of the device. In this case + turn off the device, unproble the snd-usb-audio module, then probe it again with + correct device_setup parameter and then (and only then) turn on the device again. + + * If you've correctly initialized the device in a valid mode and then want to switch + to another mode (possibly with another sample-depth), please use also the following + procedure: - first turn off the device - de-register the snd-usb-audio module (modprobe -r) - change the device_setup parameter by changing the device_setup option in /etc/modprobe.conf - turn on the device + * A workaround for this last issue has been applied to kernel 2.6.23, but it may not + be enough to ensure the 'stability' of the device initialization. -2.2.2.3 - Audiophile USB's device_setup structure +3.2.3 - Technical details for hackers +------------------------------------- +This section is for hackers, wanting to understand details about the device +internals and how Alsa supports it. + +3.2.3.1 - Audiophile USB's device_setup structure If you want to understand the device_setup magic numbers for the Audiophile USB, you need some very basic understanding of binary computation. However, @@ -228,12 +309,12 @@ Caution: - choosing b2 will prepare all interfaces for 24bits/96kHz but you'll only be able to use one at the same time -2.2.3 - USB implementation details for this device +3.2.3.2 - USB implementation details for this device You may safely skip this section if you're not interested in driver -development. +hacking. -This section describes some internal aspects of the device and summarize the +This section describes some internal aspects of the device and summarizes the data I got by usb-snooping the windows and Linux drivers. The M-Audio Audiophile USB has 7 USB Interfaces: @@ -293,43 +374,45 @@ parse_audio_endpoints function uses a quirk called "audiophile_skip_setting_quirk" in order to prevent AltSettings not corresponding to device_setup from being registered in the driver. -3 - Audiophile USB and Jack support +4 - Audiophile USB and Jack support =================================== This section deals with support of the Audiophile USB device in Jack. -The main issue regarding this support is that the device is Big Endian -compliant. -3.1 - Using the plug alsa plugin --------------------------------- +There are 2 main potential issues when using Jackd with the device: +* support for Big-Endian devices in 24-bit modes +* support for 4-in / 4-out channels + +4.1 - Direct support in Jackd +----------------------------- -Jack doesn't directly support big endian devices. Thus, one way to have support -for this device with Alsa is to use the Alsa "plug" converter. +Jack supports big endian devices only in recent versions (thanks to +Andreas Steinmetz for his first big-endian patch). I can't remember +extacly when this support was released into jackd, let's just say that +with jackd version 0.103.0 it's almost ok (just a small bug is affecting +16bits Big-Endian devices, but since you've read carefully the above +paragraphs, you're now using kernel >= 2.6.23 and your 16bits devices +are now Little Endians ;-) ). + +You can run jackd with the following command for playback with Ao and +record with Ai: + % jackd -R -dalsa -Phw:1,0 -r48000 -p128 -n2 -D -Chw:1,1 + +4.2 - Using Alsa plughw +----------------------- +If you don't have a recent Jackd installed, you can downgrade to using +the Alsa "plug" converter. For instance here is one way to run Jack with 2 playback channels on Ao and 2 capture channels from Ai: % jackd -R -dalsa -dplughw:1 -r48000 -p256 -n2 -D -Cplughw:1,1 - However you may see the following warning message: "You appear to be using the ALSA software "plug" layer, probably a result of using the "default" ALSA device. This is less efficient than it could be. Consider using a hardware device instead rather than using the plug layer." -3.2 - Patching alsa to use direct pcm device --------------------------------------------- -A patch for Jack by Andreas Steinmetz adds support for Big Endian devices. -However it has not been included in the CVS tree. - -You can find it at the following URL: -http://sourceforge.net/tracker/index.php?func=detail&aid=1289682&group_id=39687& -atid=425939 - -After having applied the patch you can run jackd with the following command -line: - % jackd -R -dalsa -Phw:1,0 -r48000 -p128 -n2 -D -Chw:1,1 - -3.2 - Getting 2 input and/or output interfaces in Jack +4.3 - Getting 2 input and/or output interfaces in Jack ------------------------------------------------------ As you can see, starting the Jack server this way will only enable 1 stereo @@ -339,6 +422,7 @@ This is due to the following restrictions: * Jack can only open one capture device and one playback device at a time * The Audiophile USB is seen as 2 (or three) Alsa devices: hw:1,0, hw:1,1 (and optionally hw:1,2) + If you want to get Ai+Di and/or Ao+Do support with Jack, you would need to combine the Alsa devices into one logical "complex" device. @@ -348,13 +432,11 @@ It is related to another device (ice1712) but can be adapted to suit the Audiophile USB. Enabling multiple Audiophile USB interfaces for Jackd will certainly require: -* patching Jack with the previously mentioned "Big Endian" patch -* patching Jackd with the MMAP_COMPLEX patch (see the ice1712 page) -* patching the alsa-lib/src/pcm/pcm_multi.c file (see the ice1712 page) +* Making sure your Jackd version has the MMAP_COMPLEX patch (see the ice1712 page) +* (maybe) patching the alsa-lib/src/pcm/pcm_multi.c file (see the ice1712 page) * define a multi device (combination of hw:1,0 and hw:1,1) in your .asoundrc file * start jackd with this device -I had no success in testing this for now, but this may be due to my OS -configuration. If you have any success with this kind of setup, please -drop me an email. +I had no success in testing this for now, if you have any success with this kind +of setup, please drop me an email. diff --git a/trunk/Documentation/sound/alsa/OSS-Emulation.txt b/trunk/Documentation/sound/alsa/OSS-Emulation.txt index ec2a02541d5b..bfa0c9aacb4b 100644 --- a/trunk/Documentation/sound/alsa/OSS-Emulation.txt +++ b/trunk/Documentation/sound/alsa/OSS-Emulation.txt @@ -278,6 +278,21 @@ current mixer configuration by reading and writing the whole file image. +Duplex Streams +============== + +Note that when attempting to use a single device file for playback and +capture, the OSS API provides no way to set the format, sample rate or +number of channels different in each direction. Thus + io_handle = open("device", O_RDWR) +will only function correctly if the values are the same in each direction. + +To use different values in the two directions, use both + input_handle = open("device", O_RDONLY) + output_handle = open("device", O_WRONLY) +and set the values for the corresponding handle. + + Unsupported Features ==================== diff --git a/trunk/Documentation/thinkpad-acpi.txt b/trunk/Documentation/thinkpad-acpi.txt index 9e6b94face4b..6711fbcf4080 100644 --- a/trunk/Documentation/thinkpad-acpi.txt +++ b/trunk/Documentation/thinkpad-acpi.txt @@ -1,11 +1,11 @@ ThinkPad ACPI Extras Driver - Version 0.14 - April 21st, 2007 + Version 0.15 + July 1st, 2007 Borislav Deianov - Henrique de Moraes Holschuh - http://ibm-acpi.sf.net/ + Henrique de Moraes Holschuh + http://ibm-acpi.sf.net/ This is a Linux driver for the IBM and Lenovo ThinkPad laptops. It @@ -134,54 +134,68 @@ end of this document. Changes to the sysfs interface done by the kernel subsystems are not documented here, nor are they tracked by this attribute. +Changes to the thinkpad-acpi sysfs interface are only considered +non-experimental when they are submitted to Linux mainline, at which +point the changes in this interface are documented and interface_version +may be updated. If you are using any thinkpad-acpi features not yet +sent to mainline for merging, you do so on your own risk: these features +may disappear, or be implemented in a different and incompatible way by +the time they are merged in Linux mainline. + +Changes that are backwards-compatible by nature (e.g. the addition of +attributes that do not change the way the other attributes work) do not +always warrant an update of interface_version. Therefore, one must +expect that an attribute might not be there, and deal with it properly +(an attribute not being there *is* a valid way to make it clear that a +feature is not available in sysfs). + Hot keys -------- procfs: /proc/acpi/ibm/hotkey sysfs device attribute: hotkey_* -Without this driver, only the Fn-F4 key (sleep button) generates an -ACPI event. With the driver loaded, the hotkey feature enabled and the -mask set (see below), the various hot keys generate ACPI events in the +In a ThinkPad, the ACPI HKEY handler is responsible for comunicating +some important events and also keyboard hot key presses to the operating +system. Enabling the hotkey functionality of thinkpad-acpi signals the +firmware that such a driver is present, and modifies how the ThinkPad +firmware will behave in many situations. + +When the hotkey feature is enabled and the hot key mask is set (see +below), the various hot keys either generate ACPI events in the following format: ibm/hotkey HKEY 00000080 0000xxxx -The last four digits vary depending on the key combination pressed. -All labeled Fn-Fx key combinations generate distinct events. In -addition, the lid microswitch and some docking station buttons may -also generate such events. - -The bit mask allows some control over which hot keys generate ACPI -events. Not all bits in the mask can be modified. Not all bits that -can be modified do anything. Not all hot keys can be individually -controlled by the mask. Most recent ThinkPad models honor the -following bits (assuming the hot keys feature has been enabled): - - key bit behavior when set behavior when unset - - Fn-F3 always generates ACPI event - Fn-F4 always generates ACPI event - Fn-F5 0010 generate ACPI event enable/disable Bluetooth - Fn-F7 0040 generate ACPI event switch LCD and external display - Fn-F8 0080 generate ACPI event expand screen or none - Fn-F9 0100 generate ACPI event none - Fn-F12 always generates ACPI event - -Some models do not support all of the above. For example, the T30 does -not support Fn-F5 and Fn-F9. Other models do not support the mask at -all. On those models, hot keys cannot be controlled individually. - -Note that enabling ACPI events for some keys prevents their default -behavior. For example, if events for Fn-F5 are enabled, that key will -no longer enable/disable Bluetooth by itself. This can still be done -from an acpid handler for the ibm/hotkey event. - -Note also that not all Fn key combinations are supported through -ACPI. For example, on the X40, the brightness, volume and "Access IBM" -buttons do not generate ACPI events even with this driver. They *can* -be used through the "ThinkPad Buttons" utility, see -http://www.nongnu.org/tpb/ +or events over the input layer. The input layer support accepts the +standard IOCTLs to remap the keycodes assigned to each hotkey. + +When the input device is open, the driver will suppress any ACPI hot key +events that get translated into a meaningful input layer event, in order +to avoid sending duplicate events to userspace. Hot keys that are +mapped to KEY_RESERVED in the keymap are not translated, and will always +generate an ACPI ibm/hotkey HKEY event, and no input layer events. + +The hot key bit mask allows some control over which hot keys generate +events. If a key is "masked" (bit set to 0 in the mask), the firmware +will handle it. If it is "unmasked", it signals the firmware that +thinkpad-acpi would prefer to handle it, if the firmware would be so +kind to allow it (and it often doesn't!). + +Not all bits in the mask can be modified. Not all bits that can be +modified do anything. Not all hot keys can be individually controlled +by the mask. Some models do not support the mask at all, and in those +models, hot keys cannot be controlled individually. The behaviour of +the mask is, therefore, higly dependent on the ThinkPad model. + +Note that unmasking some keys prevents their default behavior. For +example, if Fn+F5 is unmasked, that key will no longer enable/disable +Bluetooth by itself. + +Note also that not all Fn key combinations are supported through ACPI. +For example, on the X40, the brightness, volume and "Access IBM" buttons +do not generate ACPI events even with this driver. They *can* be used +through the "ThinkPad Buttons" utility, see http://www.nongnu.org/tpb/ procfs notes: @@ -189,9 +203,9 @@ The following commands can be written to the /proc/acpi/ibm/hotkey file: echo enable > /proc/acpi/ibm/hotkey -- enable the hot keys feature echo disable > /proc/acpi/ibm/hotkey -- disable the hot keys feature - echo 0xffff > /proc/acpi/ibm/hotkey -- enable all possible hot keys - echo 0x0000 > /proc/acpi/ibm/hotkey -- disable all possible hot keys - ... any other 4-hex-digit mask ... + echo 0xffffffff > /proc/acpi/ibm/hotkey -- enable all hot keys + echo 0 > /proc/acpi/ibm/hotkey -- disable all possible hot keys + ... any other 8-hex-digit mask ... echo reset > /proc/acpi/ibm/hotkey -- restore the original mask sysfs notes: @@ -202,7 +216,7 @@ sysfs notes: key feature status will be restored to this value. 0: hot keys were disabled - 1: hot keys were enabled + 1: hot keys were enabled (unusual) hotkey_bios_mask: Returns the hot keys mask when thinkpad-acpi was loaded. @@ -217,9 +231,182 @@ sysfs notes: 1: enables the hot keys feature / feature enabled hotkey_mask: - bit mask to enable ACPI event generation for each hot - key (see above). Returns the current status of the hot - keys mask, and allows one to modify it. + bit mask to enable driver-handling and ACPI event + generation for each hot key (see above). Returns the + current status of the hot keys mask, and allows one to + modify it. + + hotkey_all_mask: + bit mask that should enable event reporting for all + supported hot keys, when echoed to hotkey_mask above. + Unless you know which events need to be handled + passively (because the firmware *will* handle them + anyway), do *not* use hotkey_all_mask. Use + hotkey_recommended_mask, instead. You have been warned. + + hotkey_recommended_mask: + bit mask that should enable event reporting for all + supported hot keys, except those which are always + handled by the firmware anyway. Echo it to + hotkey_mask above, to use. + + hotkey_radio_sw: + if the ThinkPad has a hardware radio switch, this + attribute will read 0 if the switch is in the "radios + disabled" postition, and 1 if the switch is in the + "radios enabled" position. + +input layer notes: + +A Hot key is mapped to a single input layer EV_KEY event, possibly +followed by an EV_MSC MSC_SCAN event that shall contain that key's scan +code. An EV_SYN event will always be generated to mark the end of the +event block. + +Do not use the EV_MSC MSC_SCAN events to process keys. They are to be +used as a helper to remap keys, only. They are particularly useful when +remapping KEY_UNKNOWN keys. + +The events are available in an input device, with the following id: + + Bus: BUS_HOST + vendor: 0x1014 (PCI_VENDOR_ID_IBM) or + 0x17aa (PCI_VENDOR_ID_LENOVO) + product: 0x5054 ("TP") + version: 0x4101 + +The version will have its LSB incremented if the keymap changes in a +backwards-compatible way. The MSB shall always be 0x41 for this input +device. If the MSB is not 0x41, do not use the device as described in +this section, as it is either something else (e.g. another input device +exported by a thinkpad driver, such as HDAPS) or its functionality has +been changed in a non-backwards compatible way. + +Adding other event types for other functionalities shall be considered a +backwards-compatible change for this input device. + +Thinkpad-acpi Hot Key event map (version 0x4101): + +ACPI Scan +event code Key Notes + +0x1001 0x00 FN+F1 - +0x1002 0x01 FN+F2 IBM: battery (rare) + Lenovo: Screen lock + +0x1003 0x02 FN+F3 Many IBM models always report + this hot key, even with hot keys + disabled or with Fn+F3 masked + off + IBM: screen lock + Lenovo: battery + +0x1004 0x03 FN+F4 Sleep button (ACPI sleep button + semanthics, i.e. sleep-to-RAM). + It is always generate some kind + of event, either the hot key + event or a ACPI sleep button + event. The firmware may + refuse to generate further FN+F4 + key presses until a S3 or S4 ACPI + sleep cycle is performed or some + time passes. + +0x1005 0x04 FN+F5 Radio. Enables/disables + the internal BlueTooth hardware + and W-WAN card if left in control + of the firmware. Does not affect + the WLAN card. + Should be used to turn on/off all + radios (bluetooth+W-WAN+WLAN), + really. + +0x1006 0x05 FN+F6 - + +0x1007 0x06 FN+F7 Video output cycle. + Do you feel lucky today? + +0x1008 0x07 FN+F8 IBM: toggle screen expand + Lenovo: configure ultranav + +0x1009 0x08 FN+F9 - + .. .. .. +0x100B 0x0A FN+F11 - + +0x100C 0x0B FN+F12 Sleep to disk. You are always + supposed to handle it yourself, + either through the ACPI event, + or through a hotkey event. + The firmware may refuse to + generate further FN+F4 key + press events until a S3 or S4 + ACPI sleep cycle is performed, + or some time passes. + +0x100D 0x0C FN+BACKSPACE - +0x100E 0x0D FN+INSERT - +0x100F 0x0E FN+DELETE - + +0x1010 0x0F FN+HOME Brightness up. This key is + always handled by the firmware + in IBM ThinkPads, even when + unmasked. Just leave it alone. + For Lenovo ThinkPads with a new + BIOS, it has to be handled either + by the ACPI OSI, or by userspace. +0x1011 0x10 FN+END Brightness down. See brightness + up for details. + +0x1012 0x11 FN+PGUP Thinklight toggle. This key is + always handled by the firmware, + even when unmasked. + +0x1013 0x12 FN+PGDOWN - + +0x1014 0x13 FN+SPACE Zoom key + +0x1015 0x14 VOLUME UP Internal mixer volume up. This + key is always handled by the + firmware, even when unmasked. + NOTE: Lenovo seems to be changing + this. +0x1016 0x15 VOLUME DOWN Internal mixer volume up. This + key is always handled by the + firmware, even when unmasked. + NOTE: Lenovo seems to be changing + this. +0x1017 0x16 MUTE Mute internal mixer. This + key is always handled by the + firmware, even when unmasked. + +0x1018 0x17 THINKPAD Thinkpad/Access IBM/Lenovo key + +0x1019 0x18 unknown +.. .. .. +0x1020 0x1F unknown + +The ThinkPad firmware does not allow one to differentiate when most hot +keys are pressed or released (either that, or we don't know how to, yet). +For these keys, the driver generates a set of events for a key press and +immediately issues the same set of events for a key release. It is +unknown by the driver if the ThinkPad firmware triggered these events on +hot key press or release, but the firmware will do it for either one, not +both. + +If a key is mapped to KEY_RESERVED, it generates no input events at all, +and it may generate a legacy thinkpad-acpi ACPI hotkey event. + +If a key is mapped to KEY_UNKNOWN, it generates an input event that +includes an scan code, and it may also generate a legacy thinkpad-acpi +ACPI hotkey event. + +If a key is mapped to anything else, it will only generate legacy +thinkpad-acpi ACPI hotkey events if nobody has opened the input device. + +Non hot-key ACPI HKEY event map: +0x5001 Lid closed +0x5002 Lid opened +0x7000 Radio Switch may have changed state Bluetooth @@ -437,27 +624,34 @@ CMOS control procfs: /proc/acpi/ibm/cmos sysfs device attribute: cmos_command -This feature is used internally by the ACPI firmware to control the -ThinkLight on most newer ThinkPad models. It may also control LCD -brightness, sounds volume and more, but only on some models. +This feature is mostly used internally by the ACPI firmware to keep the legacy +CMOS NVRAM bits in sync with the current machine state, and to record this +state so that the ThinkPad will retain such settings across reboots. + +Some of these commands actually perform actions in some ThinkPad models, but +this is expected to disappear more and more in newer models. As an example, in +a T43 and in a X40, commands 12 and 13 still control the ThinkLight state for +real, but commands 0 to 2 don't control the mixer anymore (they have been +phased out) and just update the NVRAM. The range of valid cmos command numbers is 0 to 21, but not all have an effect and the behavior varies from model to model. Here is the behavior on the X40 (tpb is the ThinkPad Buttons utility): - 0 - no effect but tpb reports "Volume down" - 1 - no effect but tpb reports "Volume up" - 2 - no effect but tpb reports "Mute on" - 3 - simulate pressing the "Access IBM" button - 4 - LCD brightness up - 5 - LCD brightness down - 11 - toggle screen expansion - 12 - ThinkLight on - 13 - ThinkLight off - 14 - no effect but tpb reports ThinkLight status change + 0 - Related to "Volume down" key press + 1 - Related to "Volume up" key press + 2 - Related to "Mute on" key press + 3 - Related to "Access IBM" key press + 4 - Related to "LCD brightness up" key pess + 5 - Related to "LCD brightness down" key press + 11 - Related to "toggle screen expansion" key press/function + 12 - Related to "ThinkLight on" + 13 - Related to "ThinkLight off" + 14 - Related to "ThinkLight" key press (toggle thinklight) The cmos command interface is prone to firmware split-brain problems, as -in newer ThinkPads it is just a compatibility layer. +in newer ThinkPads it is just a compatibility layer. Do not use it, it is +exported just as a debug tool. LED control -- /proc/acpi/ibm/led --------------------------------- @@ -516,23 +710,15 @@ Temperature sensors procfs: /proc/acpi/ibm/thermal sysfs device attributes: (hwmon) temp*_input -Most ThinkPads include six or more separate temperature sensors but -only expose the CPU temperature through the standard ACPI methods. -This feature shows readings from up to eight different sensors on older -ThinkPads, and it has experimental support for up to sixteen different -sensors on newer ThinkPads. - -EXPERIMENTAL: The 16-sensors feature is marked EXPERIMENTAL because the -implementation directly accesses hardware registers and may not work as -expected. USE WITH CAUTION! To use this feature, you need to supply the -experimental=1 parameter when loading the module. When EXPERIMENTAL -mode is enabled, reading the first 8 sensors on newer ThinkPads will -also use an new experimental thermal sensor access mode. +Most ThinkPads include six or more separate temperature sensors but only +expose the CPU temperature through the standard ACPI methods. This +feature shows readings from up to eight different sensors on older +ThinkPads, and up to sixteen different sensors on newer ThinkPads. For example, on the X40, a typical output may be: temperatures: 42 42 45 41 36 -128 33 -128 -EXPERIMENTAL: On the T43/p, a typical output may be: +On the T43/p, a typical output may be: temperatures: 48 48 36 52 38 -128 31 -128 48 52 48 -128 -128 -128 -128 -128 The mapping of thermal sensors to physical locations varies depending on @@ -562,7 +748,8 @@ http://thinkwiki.org/wiki/Thermal_Sensors#ThinkPad_T43.2C_T43p 2: System board, left side (near PCMCIA slot), reported as HDAPS temp 3: PCMCIA slot 9: MCH (northbridge) to DRAM Bus -10: ICH (southbridge), under Mini-PCI card, under touchpad +10: Clock-generator, mini-pci card and ICH (southbridge), under Mini-PCI + card, under touchpad 11: Power regulator, underside of system board, below F2 key The A31 has a very atypical layout for the thermal sensors @@ -681,6 +868,12 @@ cannot be controlled. The backlight control has eight levels, ranging from 0 to 7. Some of the levels may not be distinct. +There are two interfaces to the firmware for brightness control, EC and CMOS. +To select which one should be used, use the brightness_mode module parameter: +brightness_mode=1 selects EC mode, brightness_mode=2 selects CMOS mode, +brightness_mode=3 selects both EC and CMOS. The driver tries to autodetect +which interface to use. + Procfs notes: The available commands are: @@ -976,3 +1169,9 @@ Sysfs interface changelog: 0x000100: Initial sysfs support, as a single platform driver and device. +0x000200: Hot key support for 32 hot keys, and radio slider switch + support. +0x010000: Hot keys are now handled by default over the input + layer, the radio switch generates input event EV_RADIO, + and the driver enables hot key handling by default in + the firmware. diff --git a/trunk/Documentation/time_interpolators.txt b/trunk/Documentation/time_interpolators.txt deleted file mode 100644 index e3b60854fbc2..000000000000 --- a/trunk/Documentation/time_interpolators.txt +++ /dev/null @@ -1,41 +0,0 @@ -Time Interpolators ------------------- - -Time interpolators are a base of time calculation between timer ticks and -allow an accurate determination of time down to the accuracy of the time -source in nanoseconds. - -The architecture specific code typically provides gettimeofday and -settimeofday under Linux. The time interpolator provides both if an arch -defines CONFIG_TIME_INTERPOLATION. The arch still must set up timer tick -operations and call the necessary functions to advance the clock. - -With the time interpolator a standardized interface exists for time -interpolation between ticks. The provided logic is highly scalable -and has been tested in SMP situations of up to 512 CPUs. - -If CONFIG_TIME_INTERPOLATION is defined then the architecture specific code -(or the device drivers - like HPET) may register time interpolators. -These are typically defined in the following way: - -static struct time_interpolator my_interpolator { - .frequency = MY_FREQUENCY, - .source = TIME_SOURCE_MMIO32, - .shift = 8, /* scaling for higher accuracy */ - .drift = -1, /* Unknown drift */ - .jitter = 0 /* time source is stable */ -}; - -void time_init(void) -{ - .... - /* Initialization of the timer *. - my_interpolator.address = &my_timer; - register_time_interpolator(&my_interpolator); - .... -} - -For more details see include/linux/timex.h and kernel/timer.c. - -Christoph Lameter , October 31, 2004 - diff --git a/trunk/Documentation/video4linux/CARDLIST.bttv b/trunk/Documentation/video4linux/CARDLIST.bttv index b60639130a51..177159c5f4c4 100644 --- a/trunk/Documentation/video4linux/CARDLIST.bttv +++ b/trunk/Documentation/video4linux/CARDLIST.bttv @@ -66,7 +66,7 @@ 65 -> Lifeview FlyVideo 2000S LR90 66 -> Terratec TValueRadio [153b:1135,153b:ff3b] 67 -> IODATA GV-BCTV4/PCI [10fc:4050] - 68 -> 3Dfx VoodooTV FM (Euro), VoodooTV 200 (USA) [121a:3000,10b4:2637] + 68 -> 3Dfx VoodooTV FM (Euro) [10b4:2637] 69 -> Active Imaging AIMMS 70 -> Prolink Pixelview PV-BT878P+ (Rev.4C,8E) 71 -> Lifeview FlyVideo 98EZ (capture only) LR51 [1851:1851] @@ -145,3 +145,5 @@ 144 -> MagicTV 145 -> SSAI Security Video Interface [4149:5353] 146 -> SSAI Ultrasound Video Interface [414a:5353] +147 -> VoodooTV 200 (USA) [121a:3000] +148 -> DViCO FusionHDTV 2 [dbc0:d200] diff --git a/trunk/Documentation/video4linux/CARDLIST.cx88 b/trunk/Documentation/video4linux/CARDLIST.cx88 index 60f838beb9c8..82ac8250e978 100644 --- a/trunk/Documentation/video4linux/CARDLIST.cx88 +++ b/trunk/Documentation/video4linux/CARDLIST.cx88 @@ -55,3 +55,4 @@ 54 -> Norwood Micro TV Tuner 55 -> Shenzhen Tungsten Ages Tech TE-DTV-250 / Swann OEM [c180:c980] 56 -> Hauppauge WinTV-HVR1300 DVB-T/Hybrid MPEG Encoder [0070:9600,0070:9601,0070:9602] + 57 -> ADS Tech Instant Video PCI [1421:0390] diff --git a/trunk/Documentation/video4linux/CARDLIST.saa7134 b/trunk/Documentation/video4linux/CARDLIST.saa7134 index 712e8c8333cc..3f8aeab50a10 100644 --- a/trunk/Documentation/video4linux/CARDLIST.saa7134 +++ b/trunk/Documentation/video4linux/CARDLIST.saa7134 @@ -114,3 +114,4 @@ 113 -> Elitegroup ECS TVP3XP FM1246 Tuner Card (PAL,FM) [1019:4cb6] 114 -> KWorld DVB-T 210 [17de:7250] 115 -> Sabrent PCMCIA TV-PCB05 [0919:2003] +116 -> 10MOONS TM300 TV Card [1131:2304] diff --git a/trunk/Documentation/video4linux/CARDLIST.tuner b/trunk/Documentation/video4linux/CARDLIST.tuner index 44134f04b82a..a88c02d23805 100644 --- a/trunk/Documentation/video4linux/CARDLIST.tuner +++ b/trunk/Documentation/video4linux/CARDLIST.tuner @@ -40,7 +40,7 @@ tuner=38 - Philips PAL/SECAM multi (FM1216ME MK3) tuner=39 - LG NTSC (newer TAPC series) tuner=40 - HITACHI V7-J180AT tuner=41 - Philips PAL_MK (FI1216 MK) -tuner=42 - Philips 1236D ATSC/NTSC dual in +tuner=42 - Philips FCV1236D ATSC/NTSC dual in tuner=43 - Philips NTSC MK3 (FM1236MK3 or FM1236/F) tuner=44 - Philips 4 in 1 (ATI TV Wonder Pro/Conexant) tuner=45 - Microtune 4049 FM5 @@ -72,3 +72,4 @@ tuner=70 - Samsung TCPN 2121P30A tuner=71 - Xceive xc3028 tuner=72 - Thomson FE6600 tuner=73 - Samsung TCPG 6121P30A +tuner=75 - Philips TEA5761 FM Radio diff --git a/trunk/Documentation/video4linux/sn9c102.txt b/trunk/Documentation/video4linux/sn9c102.txt index 279717c96f63..1ffad19ce891 100644 --- a/trunk/Documentation/video4linux/sn9c102.txt +++ b/trunk/Documentation/video4linux/sn9c102.txt @@ -436,7 +436,7 @@ HV7131D Hynix Semiconductor | Yes No No No HV7131R Hynix Semiconductor | No Yes Yes Yes MI-0343 Micron Technology | Yes No No No MI-0360 Micron Technology | No Yes Yes Yes -OV7630 OmniVision Technologies | Yes Yes No No +OV7630 OmniVision Technologies | Yes Yes Yes Yes OV7660 OmniVision Technologies | No No Yes Yes PAS106B PixArt Imaging | Yes No No No PAS202B PixArt Imaging | Yes Yes No No @@ -583,6 +583,7 @@ order): - Bertrik Sikken, who reverse-engineered and documented the Huffman compression algorithm used in the SN9C101, SN9C102 and SN9C103 controllers and implemented the first decoder; +- Ronny Standke for the donation of a webcam; - Mizuno Takafumi for the donation of a webcam; - an "anonymous" donator (who didn't want his name to be revealed) for the donation of a webcam. diff --git a/trunk/Documentation/video4linux/zr364xx.txt b/trunk/Documentation/video4linux/zr364xx.txt index c76992d0ff4d..4d9a0c33f2fd 100644 --- a/trunk/Documentation/video4linux/zr364xx.txt +++ b/trunk/Documentation/video4linux/zr364xx.txt @@ -62,4 +62,4 @@ Vendor Product Distributor Model 0x0784 0x0040 Traveler Slimline X5 0x06d6 0x0034 Trust Powerc@m 750 0x0a17 0x0062 Pentax Optio 50L - +0x06d6 0x003b Trust Powerc@m 970Z diff --git a/trunk/Documentation/x86_64/boot-options.txt b/trunk/Documentation/x86_64/boot-options.txt index 6177d881983f..945311840a10 100644 --- a/trunk/Documentation/x86_64/boot-options.txt +++ b/trunk/Documentation/x86_64/boot-options.txt @@ -14,9 +14,11 @@ Machine check mce=nobootlog Disable boot machine check logging. mce=tolerancelevel (number) - 0: always panic, 1: panic if deadlock possible, - 2: try to avoid panic, 3: never panic or exit (for testing) - default is 1 + 0: always panic on uncorrected errors, log corrected errors + 1: panic or SIGBUS on uncorrected errors, log corrected errors + 2: SIGBUS or log uncorrected errors, log corrected errors + 3: never panic or SIGBUS, log all errors (for testing only) + Default is 1 Can be also set using sysfs which is preferable. nomce (for compatibility with i386): same as mce=off @@ -134,12 +136,6 @@ Non Executable Mappings SMP - nosmp Only use a single CPU - - maxcpus=NUMBER only use upto NUMBER CPUs - - cpumask=MASK only use cpus with bits set in mask - additional_cpus=NUM Allow NUM more CPUs for hotplug (defaults are specified by the BIOS, see Documentation/x86_64/cpu-hotplug-spec) diff --git a/trunk/Documentation/x86_64/machinecheck b/trunk/Documentation/x86_64/machinecheck index feaeaf6f6e4d..a05e58e7b159 100644 --- a/trunk/Documentation/x86_64/machinecheck +++ b/trunk/Documentation/x86_64/machinecheck @@ -49,12 +49,14 @@ tolerant Since machine check exceptions can happen any time it is sometimes risky for the kernel to kill a process because it defies normal kernel locking rules. The tolerance level configures - how hard the kernel tries to recover even at some risk of deadlock. - - 0: always panic, - 1: panic if deadlock possible, - 2: try to avoid panic, - 3: never panic or exit (for testing only) + how hard the kernel tries to recover even at some risk of + deadlock. Higher tolerant values trade potentially better uptime + with the risk of a crash or even corruption (for tolerant >= 3). + + 0: always panic on uncorrected errors, log corrected errors + 1: panic or SIGBUS on uncorrected errors, log corrected errors + 2: SIGBUS or log uncorrected errors, log corrected errors + 3: never panic or SIGBUS, log all errors (for testing only) Default: 1 diff --git a/trunk/Documentation/zh_CN/HOWTO b/trunk/Documentation/zh_CN/HOWTO new file mode 100644 index 000000000000..48fc67bfbe3d --- /dev/null +++ b/trunk/Documentation/zh_CN/HOWTO @@ -0,0 +1,536 @@ +Chinese translated version of Documentation/HOWTO + +If you have any comment or update to the content, please contact the +original document maintainer directly. However, if you have problem +communicating in English you can also ask the Chinese maintainer for +help. Contact the Chinese maintainer, if this translation is outdated +or there is problem with translation. + +Maintainer: Greg Kroah-Hartman +Chinese maintainer: Li Yang +--------------------------------------------------------------------- +Documentation/HOWTO 的中文翻译 + +如果想评论或更新本文的内容,请直接è”系原文档的维护者。如果你使用英文 +äº¤æµæœ‰å›°éš¾çš„è¯ï¼Œä¹Ÿå¯ä»¥å‘中文版维护者求助。如果本翻译更新ä¸åŠæ—¶æˆ–者翻 +译存在问题,请è”系中文版维护者。 + +英文版维护者: Greg Kroah-Hartman +中文版维护者: æŽé˜³ Li Yang +中文版翻译者: æŽé˜³ Li Yang +中文版校译者: 钟宇 TripleX Chung + é™ˆç¦ Maggie Chen + çŽ‹èª Wang Cong + +以下为正文 +--------------------------------------------------------------------- + +如何å‚与Linuxå†…æ ¸å¼€å‘ +--------------------- + +这是一篇将如何å‚与Linux内核开å‘的相关问题一网打尽的终æžç§˜ç¬ˆã€‚它将指导你 +æˆä¸ºä¸€åLinux内核开å‘者,并且学会如何åŒLinux内核开å‘社区åˆä½œã€‚它尽å¯èƒ½ä¸ +包括任何关于内核编程的技术细节,但会给你指引一æ¡èŽ·å¾—è¿™äº›çŸ¥è¯†çš„æ­£ç¡®é€”å¾„ã€‚ + +如果这篇文章中的任何内容ä¸å†é€‚用,请给文末列出的文件维护者å‘é€è¡¥ä¸ã€‚ + + +入门 +---- + +你想了解如何æˆä¸ºä¸€åLinux内核开å‘è€…ï¼Ÿæˆ–è€…è€æ¿å©å’你“给这个设备写个Linux +驱动程åºâ€ï¼Ÿè¿™ç¯‡æ–‡ç« çš„目的就是教会你达æˆè¿™äº›ç›®æ ‡çš„全部诀çªï¼Œå®ƒå°†æè¿°ä½ éœ€ +è¦ç»è¿‡çš„æµç¨‹ä»¥åŠç»™å‡ºå¦‚何åŒå†…核社区åˆä½œçš„一些æç¤ºã€‚它还将试图解释内核社区 +为何这样è¿ä½œã€‚ + +Linux内核大部分是由C语言写æˆçš„,一些体系结构相关的代ç ç”¨åˆ°äº†æ±‡ç¼–è¯­è¨€ã€‚è¦ +å‚与内核开å‘,你必须精通C语言。除éžä½ æƒ³ä¸ºæŸä¸ªæž¶æž„å¼€å‘底层代ç ï¼Œå¦åˆ™ä½ å¹¶ +ä¸éœ€è¦äº†è§£ï¼ˆä»»ä½•体系结构的)汇编语言。下é¢åˆ—举的书ç±è™½ç„¶ä¸èƒ½æ›¿ä»£æ‰Žå®žçš„C +语言教育和多年的开å‘ç»éªŒï¼Œä½†å¦‚果需è¦çš„è¯ï¼Œåšä¸ºå‚考还是ä¸é”™çš„: + - "The C Programming Language" by Kernighan and Ritchie [Prentice Hall] + 《C程åºè®¾è®¡è¯­è¨€ï¼ˆç¬¬2版·新版)》(å¾å®æ–‡ æŽå¿— 译)[机械工业出版社] + - "Practical C Programming" by Steve Oualline [O'Reilly] + 《实用C语言编程(第三版)》(郭大海 译)[中国电力出版社] + - "C: A Reference Manual" by Harbison and Steele [Prentice Hall] + 《C语言å‚考手册(原书第5版)》(邱仲潘 等译)[机械工业出版社] + +Linux内核使用GNU Cå’ŒGNU工具链开å‘。虽然它éµå¾ªISO C89标准,但也用到了一些 +标准中没有定义的扩展。内核是自给自足的C环境,ä¸ä¾èµ–于标准C库的支æŒï¼Œæ‰€ä»¥ +并䏿”¯æŒC标准中的部分定义。比如long long类型的大数除法和浮点è¿ç®—å°±ä¸å…许 +ä½¿ç”¨ã€‚æœ‰æ—¶å€™ç¡®å®žå¾ˆéš¾å¼„æ¸…æ¥šå†…æ ¸å¯¹å·¥å…·é“¾çš„è¦æ±‚和它所使用的扩展,ä¸å¹¸çš„æ˜¯ç›® +å‰è¿˜æ²¡æœ‰æ˜Žç¡®çš„å‚考资料å¯ä»¥è§£é‡Šå®ƒä»¬ã€‚请查阅gccä¿¡æ¯é¡µï¼ˆä½¿ç”¨â€œinfo gccâ€å‘½ä»¤ +显示)获得一些这方é¢ä¿¡æ¯ã€‚ + +请记ä½ä½ æ˜¯åœ¨å­¦ä¹ æ€Žä¹ˆå’Œå·²ç»å­˜åœ¨çš„å¼€å‘社区打交é“。它由一群形形色色的人组æˆï¼Œ +他们对代ç ã€é£Žæ ¼å’Œè¿‡ç¨‹æœ‰ç€å¾ˆé«˜çš„æ ‡å‡†ã€‚这些标准是在长期实践中总结出æ¥çš„, +适应于地ç†ä¸Šåˆ†æ•£çš„大型开å‘团队。它们已ç»è¢«å¾ˆå¥½å¾—æ•´ç†æˆæ¡£ï¼Œå»ºè®®ä½ åœ¨å¼€å‘ +之å‰å°½å¯èƒ½å¤šçš„学习这些标准,而ä¸è¦æœŸæœ›åˆ«äººæ¥é€‚应你或者你公å¸çš„行为方å¼ã€‚ + + +法律问题 +-------- + +Linux内核æºä»£ç éƒ½æ˜¯åœ¨GPL(通用公共许å¯è¯ï¼‰çš„ä¿æŠ¤ä¸‹å‘布的。è¦äº†è§£è¿™ç§è®¸å¯ +的细节请查看æºä»£ç ä¸»ç›®å½•下的COPYING文件。如果你对它还有更深入问题请è”ç³» +律师,而ä¸è¦åœ¨Linux内核邮件组上æé—®ã€‚å› ä¸ºé‚®ä»¶ç»„é‡Œçš„äººå¹¶ä¸æ˜¯å¾‹å¸ˆï¼Œä¸è¦æœŸ +æœ›ä»–ä»¬çš„è¯æœ‰æ³•律效力。 + +对于GPL的常è§é—®é¢˜å’Œè§£ç­”,请访问以下链接: + http://www.gnu.org/licenses/gpl-faq.html + + +文档 +---- + +Linux内核代ç ä¸­åŒ…嫿œ‰å¤§é‡çš„æ–‡æ¡£ã€‚è¿™äº›æ–‡æ¡£å¯¹äºŽå­¦ä¹ å¦‚ä½•ä¸Žå†…æ ¸ç¤¾åŒºäº’åŠ¨æœ‰ç€ +ä¸å¯ä¼°é‡çš„价值。当一个新的功能被加入内核,最好把解释如何使用这个功能的文 +档也放进内核。当内核的改动导致é¢å‘用户空间的接å£å‘生å˜åŒ–时,最好将相关信 +æ¯æˆ–手册页(manpages)的补ä¸å‘到mtk-manpages@gmx.netï¼Œä»¥å‘æ‰‹å†Œé¡µ(manpages) +的维护者解释这些å˜åŒ–。 + +以下是内核代ç ä¸­éœ€è¦é˜…读的文档: + README + 文件简è¦ä»‹ç»äº†Linux内核的背景,并且æè¿°äº†å¦‚何é…置和编译内核。内核的 + 新用户应该从这里开始。 + + Documentation/Changes + 文件给出了用æ¥ç¼–译和使用内核所需è¦çš„æœ€å°è½¯ä»¶åŒ…列表。 + + Documentation/CodingStyle + æè¿°Linux内核的代ç é£Žæ ¼å’Œç†ç”±ã€‚所有新代ç éœ€è¦éµå®ˆè¿™ç¯‡æ–‡æ¡£ä¸­å®šä¹‰çš„è§„ + 范。大多数维护者åªä¼šæŽ¥æ”¶ç¬¦åˆè§„定的补ä¸ï¼Œå¾ˆå¤šäººä¹Ÿåªä¼šå¸®å¿™æ£€æŸ¥ç¬¦åˆé£Žæ ¼ + 的代ç ã€‚ + + Documentation/SubmittingPatches + Documentation/SubmittingDrivers + 这两份文档明确æè¿°å¦‚何创建和å‘é€è¡¥ä¸ï¼Œå…¶ä¸­åŒ…括(但ä¸ä»…é™äºŽ): + - 邮件内容 + - é‚®ä»¶æ ¼å¼ + - 选择收件人 + éµå®ˆè¿™äº›è§„定并ä¸èƒ½ä¿è¯æäº¤æˆåŠŸï¼ˆå› ä¸ºæ‰€æœ‰è¡¥ä¸éœ€è¦é€šè¿‡ä¸¥æ ¼çš„内容和风格 + 审查),但是忽视他们几乎就æ„味ç€å¤±è´¥ã€‚ + + 其他关于如何正确地生æˆè¡¥ä¸çš„优秀文档包括: + "The Perfect Patch" + http://www.zip.com.au/~akpm/linux/patches/stuff/tpp.txt + "Linux kernel patch submission format" + http://linux.yyz.us/patch-format.html + + Documentation/stable_api_nonsense.txt + 论è¯å†…核为什么特æ„ä¸åŒ…括稳定的内核内部API,也就是说ä¸åŒ…括åƒè¿™æ ·çš„特 + 性: + - å­ç³»ç»Ÿä¸­é—´å±‚(为了兼容性?) + - 在ä¸åŒæ“作系统间易于移æ¤çš„é©±åŠ¨ç¨‹åº + - å‡ç¼“(甚至阻止)内核代ç çš„快速å˜åŒ– + 这篇文档对于ç†è§£Linux的开å‘哲学至关é‡è¦ã€‚对于将开å‘å¹³å°ä»Žå…¶ä»–æ“作系 + 统转移到Linux的人æ¥è¯´ä¹Ÿå¾ˆé‡è¦ã€‚ + + Documentation/SecurityBugs + 如果你认为自己å‘现了Linux内核的安全性问题,请根æ®è¿™ç¯‡æ–‡æ¡£ä¸­çš„æ­¥éª¤æ¥ + æé†’其他内核开å‘者并帮助解决这个问题。 + + Documentation/ManagementStyle + æè¿°å†…核维护者的工作方法åŠå…¶å…±æœ‰ç‰¹ç‚¹ã€‚这对于刚刚接触内核开å‘(或者对 + 它感到好奇)的人æ¥è¯´å¾ˆé‡è¦ï¼Œå› ä¸ºå®ƒè§£é‡Šäº†å¾ˆå¤šå¯¹äºŽå†…核维护者独特行为的 + æ™®é误解与迷惑。 + + Documentation/stable_kernel_rules.txt + 解释了稳定版内核å‘布的规则,以åŠå¦‚何将改动放入这些版本的步骤。 + + Documentation/kernel-docs.txt + 有助于内核开å‘的外部文档列表。如果你在内核自带的文档中没有找到你想找 + 的内容,å¯ä»¥æŸ¥çœ‹è¿™äº›æ–‡æ¡£ã€‚ + + Documentation/applying-patches.txt + å…³äºŽè¡¥ä¸æ˜¯ä»€ä¹ˆä»¥åŠå¦‚何将它打在ä¸åŒå†…核开å‘åˆ†æ”¯ä¸Šçš„å¥½ä»‹ç» + +内核还拥有大é‡ä»Žä»£ç è‡ªåŠ¨ç”Ÿæˆçš„æ–‡æ¡£ã€‚它包å«å†…核内部API的全é¢ä»‹ç»ä»¥åŠå¦‚何 +妥善处ç†åŠ é”的规则。生æˆçš„æ–‡æ¡£ä¼šæ”¾åœ¨ Documentation/DocBook/目录下。在内 +æ ¸æºç çš„主目录中使用以下ä¸åŒå‘½ä»¤å°†ä¼šåˆ†åˆ«ç”ŸæˆPDFã€Postscriptã€HTML和手册 +页等ä¸åŒæ ¼å¼çš„æ–‡æ¡£ï¼š + make pdfdocs + make psdocs + make htmldocs + make mandocs + + +如何æˆä¸ºå†…核开å‘者 +------------------ +如果你对Linux内核开å‘一无所知,你应该访问“Linux内核新手â€è®¡åˆ’: + http://kernelnewbies.org +它拥有一个å¯ä»¥é—®å„ç§æœ€åŸºæœ¬çš„内核开å‘问题的邮件列表(在æé—®ä¹‹å‰ä¸€å®šè¦è®°å¾— +æŸ¥æ‰¾å·²å¾€çš„é‚®ä»¶ï¼Œç¡®è®¤æ˜¯å¦æœ‰äººå·²ç»å›žç­”过相åŒçš„问题)。它还拥有一个å¯ä»¥èŽ·å¾— +实时å馈的IRCèŠå¤©é¢‘é“,以åŠå¤§é‡å¯¹äºŽå­¦ä¹ Linux内核开å‘相当有帮助的文档。 + +网站简è¦ä»‹ç»äº†æºä»£ç ç»„织结构ã€å­ç³»ç»Ÿåˆ’分以åŠç›®å‰æ­£åœ¨è¿›è¡Œçš„项目(包括内核 +中的和å•独维护的)。它还æä¾›äº†ä¸€äº›åŸºæœ¬çš„帮助信æ¯ï¼Œæ¯”如如何编译内核和打补 +ä¸ã€‚ + +如果你想加入内核开å‘社区并å助完æˆä¸€äº›ä»»åŠ¡ï¼Œå´æ‰¾ä¸åˆ°ä»Žå“ªé‡Œå¼€å§‹ï¼Œå¯ä»¥è®¿é—® +“Linux内核房管员â€è®¡åˆ’: + http://janitor.kernelnewbies.org/ +这是æžä½³çš„起点。它æä¾›ä¸€ä¸ªç›¸å¯¹ç®€å•的任务列表,列出内核代ç ä¸­éœ€è¦è¢«é‡æ–° +æ•´ç†æˆ–者改正的地方。通过和负责这个计划的开å‘者们一åŒå·¥ä½œï¼Œä½ ä¼šå­¦åˆ°å°†è¡¥ä¸ +集æˆè¿›å†…核的基本原ç†ã€‚如果还没有决定下一步è¦åšä»€ä¹ˆçš„è¯ï¼Œä½ è¿˜å¯èƒ½ä¼šå¾—到方 +呿€§çš„æŒ‡ç‚¹ã€‚ + +å¦‚æžœä½ å·²ç»æœ‰ä¸€äº›çްæˆçš„ä»£ç æƒ³è¦æ”¾åˆ°å†…核中,但是需è¦ä¸€äº›å¸®åŠ©æ¥ä½¿å®ƒä»¬æ‹¥æœ‰æ­£ +确的格å¼ã€‚请访问“内核导师â€è®¡åˆ’。这个计划就是用æ¥å¸®åŠ©ä½ å®Œæˆè¿™ä¸ªç›®æ ‡çš„。它 +是一个邮件列表,地å€å¦‚下: + http://selenic.com/mailman/listinfo/kernel-mentors + +在真正动手修改内核代ç ä¹‹å‰ï¼Œç†è§£è¦ä¿®æ”¹çš„代ç å¦‚何è¿ä½œæ˜¯å¿…需的。è¦è¾¾åˆ°è¿™ä¸ª +ç›®çš„ï¼Œæ²¡ä»€ä¹ˆåŠžæ³•æ¯”ç›´æŽ¥è¯»ä»£ç æ›´æœ‰æ•ˆäº†ï¼ˆå¤§å¤šæ•°èŠ±æ‹›éƒ½ä¼šæœ‰ç›¸åº”çš„æ³¨é‡Šï¼‰ï¼Œè€Œä¸” +一些特制的工具还å¯ä»¥æä¾›å¸®åŠ©ã€‚ä¾‹å¦‚ï¼Œâ€œLinux代ç äº¤å‰å¼•用â€é¡¹ç›®å°±æ˜¯ä¸€ä¸ªå€¼å¾— +特别推è的帮助工具,它将æºä»£ç æ˜¾ç¤ºåœ¨æœ‰ç¼–ç›®å’Œç´¢å¼•çš„ç½‘é¡µä¸Šã€‚å…¶ä¸­ä¸€ä¸ªæ›´æ–°åŠ +时的内核æºç åº“,å¯ä»¥é€šè¿‡ä»¥ä¸‹åœ°å€è®¿é—®ï¼š + http://sosdg.org/~coywolf/lxr/ + + +开呿µç¨‹ +-------- + +ç›®å‰Linuxå†…æ ¸å¼€å‘æµç¨‹åŒ…括几个“主内核分支â€å’Œå¾ˆå¤šå­ç³»ç»Ÿç›¸å…³çš„内核分支。这 +些分支包括: + - 2.6.x主内核æºç æ ‘ + - 2.6.x.y -stable内核æºç æ ‘ + - 2.6.x -git内核补ä¸é›† + - 2.6.x -mm内核补ä¸é›† + - å­ç³»ç»Ÿç›¸å…³çš„内核æºç æ ‘和补ä¸é›† + + +2.6.x内核主æºç æ ‘ +----------------- +2.6.x内核是由Linus Torvalds(Linux的创造者)亲自维护的。你å¯ä»¥åœ¨ +kernel.org网站的pub/linux/kernel/v2.6/目录下找到它。它的开å‘éµå¾ªä»¥ä¸‹æ­¥ +骤: + - æ¯å½“一个新版本的内核被å‘布,为期两周的集æˆçª—å£å°†è¢«æ‰“开。在这段时间里 + 维护者å¯ä»¥å‘Linusæäº¤å¤§æ®µçš„修改,通常这些修改已ç»è¢«æ”¾åˆ°-mm内核中几个 + 星期了。æäº¤å¤§é‡ä¿®æ”¹çš„é¦–é€‰æ–¹å¼æ˜¯ä½¿ç”¨git工具(内核的代ç ç‰ˆæœ¬ç®¡ç†å·¥å…· + ,更多的信æ¯å¯ä»¥åœ¨http://git.or.cz/获å–),ä¸è¿‡ä½¿ç”¨æ™®é€šè¡¥ä¸ä¹Ÿæ˜¯å¯ä»¥ + 的。 + - 两个星期以åŽ-rc1版本内核å‘布。之åŽåªæœ‰ä¸åŒ…å«å¯èƒ½å½±å“整个内核稳定性的 + æ–°åŠŸèƒ½çš„è¡¥ä¸æ‰å¯èƒ½è¢«æŽ¥å—。请注æ„一个全新的驱动程åºï¼ˆæˆ–者文件系统)有 + å¯èƒ½åœ¨-rc1åŽè¢«æŽ¥å—是因为这样的修改完全独立,ä¸ä¼šå½±å“其他的代ç ï¼Œæ‰€ä»¥ + 没有造æˆå†…核退步的风险。在-rc1以åŽä¹Ÿå¯ä»¥ç”¨gitå‘Linusæäº¤è¡¥ä¸ï¼Œä¸è¿‡æ‰€ + 有的补ä¸éœ€è¦åŒæ—¶è¢«å‘é€åˆ°ç›¸åº”的公众邮件列表以å¾è¯¢æ„è§ã€‚ + - 当Linus认为当å‰çš„gitæºç æ ‘å·²ç»è¾¾åˆ°ä¸€ä¸ªåˆç†å¥å…¨çš„状æ€è¶³ä»¥å‘布供人测试 + 时,一个新的-rc版本就会被å‘布。计划是æ¯å‘¨éƒ½å‘布新的-rc版本。 + - 这个过程一直æŒç»­ä¸‹åŽ»ç›´åˆ°å†…æ ¸è¢«è®¤ä¸ºè¾¾åˆ°è¶³å¤Ÿç¨³å®šçš„çŠ¶æ€ï¼ŒæŒç»­æ—¶é—´å¤§æ¦‚是 + 6个星期。 + +关于内核å‘布,值得一æçš„æ˜¯Andrew Morton在linux-kernel邮件列表中如是说: + â€œæ²¡æœ‰äººçŸ¥é“æ–°å†…核何时会被å‘布,因为å‘布是根æ®å·²çŸ¥bug的情况æ¥å†³å®š + çš„ï¼Œè€Œä¸æ˜¯æ ¹æ®ä¸€ä¸ªäº‹å…ˆåˆ¶å®šå¥½çš„æ—¶é—´è¡¨ã€‚†+ + +2.6.x.y -stable(稳定版)内核æºç æ ‘ +----------------------------------- +ç”±4个数字组æˆçš„内核版本å·è¯´æ˜Žæ­¤å†…核是-stable版本。它们包å«åŸºäºŽ2.6.x版本 +内核的相对较å°ä¸”至关é‡è¦çš„修补,这些修补针对安全性问题或者严é‡çš„内核退步。 + +è¿™ç§ç‰ˆæœ¬çš„å†…æ ¸é€‚ç”¨äºŽé‚£äº›æœŸæœ›èŽ·å¾—æœ€æ–°çš„ç¨³å®šç‰ˆå†…æ ¸å¹¶ä¸”ä¸æƒ³å‚与测试开å‘版或 +者实验版的用户。 + +如果没有2.6.x.y版本内核存在,那么最新的2.6.x版本内核就相当于是当å‰çš„稳定 +版内核。 + +2.6.x.y版本由“稳定版â€å°ç»„(邮件地å€ï¼‰ç»´æŠ¤ï¼Œä¸€èˆ¬éš”å‘¨å‘ +布新版本。 + +内核æºç ä¸­çš„Documentation/stable_kernel_rules.txt文件具体æè¿°äº†å¯è¢«ç¨³å®š +版内核接å—的修改类型以åŠå‘布的æµç¨‹ã€‚ + + +2.6.x -gitè¡¥ä¸é›† +---------------- +Linus的内核æºç æ ‘çš„æ¯æ—¥å¿«ç…§ï¼Œè¿™ä¸ªæºç æ ‘是由git工具管ç†çš„(由此得å)。这 +些补ä¸é€šå¸¸æ¯å¤©æ›´æ–°ä»¥å映Linusçš„æºç æ ‘的最新状æ€ã€‚它们比-rc版本的内核æºç  +树更具试验性质,因为这个补ä¸é›†æ˜¯å…¨è‡ªåŠ¨ç”Ÿæˆçš„,没有任何人æ¥ç¡®è®¤å…¶æ˜¯å¦çœŸæ­£ +å¥å…¨ã€‚ + + +2.6.x -mmè¡¥ä¸é›† +--------------- +这是由Andrew Morton维护的试验性内核补ä¸é›†ã€‚Andrew将所有å­ç³»ç»Ÿçš„内核æºç  +å’Œè¡¥ä¸æ‹¼å‡‘到一起,并且加入了大é‡ä»Žlinux-kernel邮件列表中采集的补ä¸ã€‚这个 +æºç æ ‘是新功能和补ä¸çš„试炼场。当补ä¸åœ¨-mmè¡¥ä¸é›†é‡Œè¯æ˜Žäº†å…¶ä»·å€¼ä»¥åŽAndrew +或者相应å­ç³»ç»Ÿçš„维护者会将补ä¸å‘ç»™Linus以便集æˆè¿›ä¸»å†…æ ¸æºç æ ‘。 + +在将所有新补ä¸å‘ç»™Linus以集æˆåˆ°ä¸»å†…æ ¸æºç æ ‘之å‰ï¼Œæˆ‘们éžå¸¸é¼“励先把这些补 +䏿”¾åœ¨-mm版内核æºç æ ‘中进行测试。 + +这些内核版本ä¸é€‚åˆåœ¨éœ€è¦ç¨³å®šè¿è¡Œçš„系统上è¿è¡Œï¼Œå› ä¸ºè¿è¡Œå®ƒä»¬æ¯”è¿è¡Œä»»ä½•å…¶ä»– +内核分支都更具有风险。 + +如果你想为内核开å‘进程æä¾›å¸®åŠ©ï¼Œè¯·å°è¯•并使用这些内核版本,并在 +linux-kernel邮件列表中æä¾›å馈,告诉大家你é‡åˆ°äº†é—®é¢˜è¿˜æ˜¯ä¸€åˆ‡æ­£å¸¸ã€‚ + +通常-mm版补ä¸é›†ä¸å…‰åŒ…括这些é¢å¤–的试验性补ä¸ï¼Œè¿˜åŒ…括å‘布时-git版主æºç æ ‘ +中的改动。 + +-mm版内核没有固定的å‘布周期,但是通常在æ¯ä¸¤ä¸ª-rc版内核å‘布之间都会有若干 +个-mm版内核å‘布(一般是1至3个)。 + + +å­ç³»ç»Ÿç›¸å…³å†…æ ¸æºç æ ‘和补ä¸é›† +---------------------------- +相当一部分内核å­ç³»ç»Ÿå¼€å‘è€…ä¼šå…¬å¼€ä»–ä»¬è‡ªå·±çš„å¼€å‘æºç æ ‘,以便其他人能了解内 +核的ä¸åŒé¢†åŸŸæ­£åœ¨å‘生的事情。如上所述,这些æºç æ ‘会被集æˆåˆ°-mm版本内核中。 + +䏋颿˜¯ç›®å‰å¯ç”¨çš„一些内核æºç æ ‘的列表: + 通过git管ç†çš„æºç æ ‘: + - Kbuild开呿ºç æ ‘, Sam Ravnborg + git.kernel.org:/pub/scm/linux/kernel/git/sam/kbuild.git + + - ACPI开呿ºç æ ‘, Len Brown + git.kernel.org:/pub/scm/linux/kernel/git/lenb/linux-acpi-2.6.git + + - å—è®¾å¤‡å¼€å‘æºç æ ‘, Jens Axboe + git.kernel.org:/pub/scm/linux/kernel/git/axboe/linux-2.6-block.git + + - DRM开呿ºç æ ‘, Dave Airlie + git.kernel.org:/pub/scm/linux/kernel/git/airlied/drm-2.6.git + + - ia64开呿ºç æ ‘, Tony Luck + git.kernel.org:/pub/scm/linux/kernel/git/aegl/linux-2.6.git + + - ieee1394开呿ºç æ ‘, Jody McIntyre + git.kernel.org:/pub/scm/linux/kernel/git/scjody/ieee1394.git + + - infiniband开呿ºç æ ‘, Roland Dreier + git.kernel.org:/pub/scm/linux/kernel/git/roland/infiniband.git + + - libata开呿ºç æ ‘, Jeff Garzik + git.kernel.org:/pub/scm/linux/kernel/git/jgarzik/libata-dev.git + + - 网络驱动程åºå¼€å‘æºç æ ‘, Jeff Garzik + git.kernel.org:/pub/scm/linux/kernel/git/jgarzik/netdev-2.6.git + + - pcmcia开呿ºç æ ‘, Dominik Brodowski + git.kernel.org:/pub/scm/linux/kernel/git/brodo/pcmcia-2.6.git + + - SCSI开呿ºç æ ‘, James Bottomley + git.kernel.org:/pub/scm/linux/kernel/git/jejb/scsi-misc-2.6.git + + 使用quilt管ç†çš„è¡¥ä¸é›†ï¼š + - USB, PCI, é©±åŠ¨ç¨‹åºæ ¸å¿ƒå’ŒI2C, Greg Kroah-Hartman + kernel.org/pub/linux/kernel/people/gregkh/gregkh-2.6/ + - x86-64, 部分i386, Andi Kleen + ftp.firstfloor.org:/pub/ak/x86_64/quilt/ + + 其他内核æºç æ ‘å¯ä»¥åœ¨http://git.kernel.org的列表中和MAINTAINERS文件里 + 找到。 + +报告bug +------- + +bugzilla.kernel.org是Linux内核开å‘者们用æ¥è·Ÿè¸ªå†…æ ¸Bug的网站。我们鼓励用 +户在这个工具中报告找到的所有bug。如何使用内核bugzilla的细节请访问: + http://test.kernel.org/bugzilla/faq.html + +内核æºç ä¸»ç›®å½•中的REPORTING-BUGS文件里有一个很好的模æ¿ã€‚它指导用户如何报 +告å¯èƒ½çš„内核bug以åŠéœ€è¦æä¾›å“ªäº›ä¿¡æ¯æ¥å¸®åŠ©å†…æ ¸å¼€å‘者们找到问题的根æºã€‚ + + +利用bug报告 +----------- + +ç»ƒä¹ å†…æ ¸å¼€å‘æŠ€èƒ½çš„æœ€å¥½åŠžæ³•å°±æ˜¯ä¿®æ”¹å…¶ä»–äººæŠ¥å‘Šçš„bug。你ä¸å…‰å¯ä»¥å¸®åŠ©å†…æ ¸å˜ +得更加稳定,还å¯ä»¥å­¦ä¼šå¦‚何解决实际问题从而æé«˜è‡ªå·±çš„æŠ€èƒ½ï¼Œå¹¶ä¸”è®©å…¶ä»–å¼€å‘ +者感å—到你的存在。修改bug是赢得其他开å‘è€…èµžèª‰çš„æœ€å¥½åŠžæ³•ï¼Œå› ä¸ºå¹¶ä¸æ˜¯å¾ˆå¤š +人都喜欢浪费时间去修改别人报告的bug。 + +è¦å°è¯•修改已知的bug,请访问http://bugzilla.kernel.org网å€ã€‚如果你想获得 +最新bug的通知,å¯ä»¥è®¢é˜…bugme-newé‚®ä»¶åˆ—è¡¨ï¼ˆåªæœ‰æ–°çš„bug报告会被寄到这里) +或者订阅bugme-janitor邮件列表(所有bugzillaçš„å˜åŠ¨éƒ½ä¼šè¢«å¯„åˆ°è¿™é‡Œï¼‰ã€‚ + + http://lists.osdl.org/mailman/listinfo/bugme-new + http://lists.osdl.org/mailman/listinfo/bugme-janitors + + +邮件列表 +-------- + +正如上é¢çš„æ–‡æ¡£æ‰€æè¿°ï¼Œå¤§å¤šæ•°çš„骨干内核开å‘者都加入了Linux Kernel邮件列 +表。如何订阅和退订列表的细节å¯ä»¥åœ¨è¿™é‡Œæ‰¾åˆ°ï¼š + http://vger.kernel.org/vger-lists.html#linux-kernel +网上很多地方都有这个邮件列表的存档(archive)。å¯ä»¥ä½¿ç”¨æœç´¢å¼•æ“Žæ¥æ‰¾åˆ°è¿™äº› +存档。比如: + http://dir.gmane.org/gmane.linux.kernel +在å‘信之å‰ï¼Œæˆ‘们强烈建议你先在存档中æœç´¢ä½ æƒ³è¦è®¨è®ºçš„问题。很多已ç»è¢«è¯¦ç»† +讨论过的问题åªåœ¨é‚®ä»¶åˆ—表的存档中å¯ä»¥æ‰¾åˆ°ã€‚ + +大多数内核å­ç³»ç»Ÿä¹Ÿæœ‰è‡ªå·±ç‹¬ç«‹çš„邮件列表æ¥åè°ƒå„自的开å‘工作。从 +MAINTAINERS文件中å¯ä»¥æ‰¾åˆ°ä¸åŒè¯é¢˜å¯¹åº”的邮件列表。 + +很多邮件列表架设在kernel.orgæœåŠ¡å™¨ä¸Šã€‚è¿™äº›åˆ—è¡¨çš„ä¿¡æ¯å¯ä»¥åœ¨è¿™é‡Œæ‰¾åˆ°ï¼š + http://vger.kernel.org/vger-lists.html + +在使用这些邮件列表时,请记ä½ä¿æŒè‰¯å¥½çš„行为习惯。下é¢çš„链接æä¾›äº†ä¸Žè¿™äº›åˆ— +表(或任何其它邮件列表)交æµçš„一些简å•规则,虽然内容有点滥竽充数。 + http://www.albion.com/netiquette/ + +当有很多人回å¤ä½ çš„邮件时,邮件的抄é€åˆ—表会å˜å¾—很长。请ä¸è¦å°†ä»»ä½•äººä»ŽæŠ„é€ +列表中删除,除éžä½ æœ‰è¶³å¤Ÿçš„ç†ç”±è¿™ä¹ˆåšã€‚也ä¸è¦åªå›žå¤åˆ°é‚®ä»¶åˆ—è¡¨ã€‚è¯·ä¹ æƒ¯äºŽåŒ +一å°é‚®ä»¶æŽ¥æ”¶ä¸¤æ¬¡ï¼ˆä¸€å°æ¥è‡ªå‘é€è€…䏀尿¥è‡ªé‚®ä»¶åˆ—表),而ä¸è¦è¯•图通过添加一 +些奇特的邮件头æ¥è§£å†³è¿™ä¸ªé—®é¢˜ï¼Œäººä»¬ä¸ä¼šå–œæ¬¢çš„。 + +è®°ä½ä¿ç•™ä½ æ‰€å›žå¤å†…容的上下文和æºå¤´ã€‚在你回å¤é‚®ä»¶çš„顶部ä¿ç•™â€œæŸæŸæŸè¯´åˆ°â€¦â€¦â€ +这几行。将你的评论加在被引用的段è½ä¹‹é—´è€Œä¸è¦æ”¾åœ¨é‚®ä»¶çš„顶部。 + +如果你在邮件中附带补ä¸ï¼Œè¯·ç¡®è®¤å®ƒä»¬æ˜¯å¯ä»¥ç›´æŽ¥é˜…读的纯文本(如 +Documentation/SubmittingPatches文档中所述)。内核开å‘者们ä¸å¸Œæœ›é‡åˆ°é™„ä»¶ +或者被压缩了的补ä¸ã€‚åªæœ‰è¿™æ ·æ‰èƒ½ä¿è¯ä»–们å¯ä»¥ç›´æŽ¥è¯„论你的æ¯è¡Œä»£ç ã€‚è¯·ç¡®ä¿ +你使用的邮件å‘é€ç¨‹åºä¸ä¼šä¿®æ”¹ç©ºæ ¼å’Œåˆ¶è¡¨ç¬¦ã€‚一个防范性的测试方法是先将邮件 +å‘é€ç»™è‡ªå·±ï¼Œç„¶åŽè‡ªå·±å°è¯•是å¦å¯ä»¥é¡ºåˆ©åœ°æ‰“上收到的补ä¸ã€‚å¦‚æžœæµ‹è¯•ä¸æˆåŠŸï¼Œè¯· +调整或者更æ¢ä½ çš„邮件å‘é€ç¨‹åºç›´åˆ°å®ƒæ­£ç¡®å·¥ä½œä¸ºæ­¢ã€‚ + +总而言之,请尊é‡å…¶ä»–的邮件列表订阅者。 + + +åŒå†…核社区åˆä½œ +---------------- + +内核社区的目标就是æä¾›å°½å–„尽美的内核。所以当你æäº¤è¡¥ä¸æœŸæœ›è¢«æŽ¥å—进内核的 +时候,它的技术价值以åŠå…¶ä»–æ–¹é¢éƒ½å°†è¢«è¯„审。那么你å¯èƒ½ä¼šå¾—到什么呢? + - 批评 + - 评论 + - è¦æ±‚修改 + - è¦æ±‚è¯æ˜Žä¿®æ”¹çš„å¿…è¦æ€§ + - 沉默 + +è¦è®°ä½ï¼Œè¿™äº›æ˜¯æŠŠè¡¥ä¸æ”¾è¿›å†…核的正常情况。你必须学会å¬å–对补ä¸çš„æ‰¹è¯„和评论, +从技术层é¢è¯„估它们,然åŽè¦ä¹ˆé‡å†™ä½ çš„è¡¥ä¸è¦ä¹ˆç®€æ˜Žæ‰¼è¦åœ°è®ºè¯ä¿®æ”¹æ˜¯ä¸å¿…è¦ +的。如果你å‘的邮件没有得到任何回应,请过几天åŽå†è¯•一次,因为有时信件会湮 +没在茫茫信海中。 + +ä½ ä¸åº”该åšçš„事情: + - 期望自己的补ä¸ä¸å—ä»»ä½•è´¨ç–‘å°±ç›´æŽ¥è¢«æŽ¥å— + - 翻脸 + - 忽略别人的评论 + - æ²¡æœ‰æŒ‰ç…§åˆ«äººçš„è¦æ±‚åšä»»ä½•ä¿®æ”¹å°±é‡æ–°æäº¤ + +åœ¨ä¸€ä¸ªåŠªåŠ›è¿½å¯»æœ€å¥½æŠ€æœ¯æ–¹æ¡ˆçš„ç¤¾åŒºé‡Œï¼Œå¯¹äºŽä¸€ä¸ªè¡¥ä¸æœ‰å¤šå°‘好处总会有ä¸åŒçš„è§ +è§£ã€‚ä½ å¿…é¡»è¦æŠ±ç€åˆä½œçš„æ€åº¦ï¼Œæ„¿æ„æ”¹å˜è‡ªå·±çš„观点æ¥é€‚应内核的风格。或者至少 +æ„¿æ„åŽ»è¯æ˜Žä½ çš„æƒ³æ³•是有价值的。记ä½ï¼ŒçŠ¯é”™è¯¯æ˜¯å…许的,åªè¦ä½ æ„¿æ„æœç€æ­£ç¡®çš„ +方案去努力。 + +å¦‚æžœä½ çš„ç¬¬ä¸€ä¸ªè¡¥ä¸æ¢æ¥çš„æ˜¯ä¸€å †ä¿®æ”¹å»ºè®®ï¼Œè¿™æ˜¯å¾ˆæ­£å¸¸çš„。这并ä¸ä»£è¡¨ä½ çš„è¡¥ä¸ +ä¸ä¼šè¢«æŽ¥å—ï¼Œä¹Ÿä¸æ„å‘³ç€æœ‰äººå’Œä½ ä½œå¯¹ã€‚ä½ åªéœ€è¦æ”¹æ­£æ‰€æœ‰æå‡ºçš„问题然åŽé‡æ–°å‘ +é€ä½ çš„è¡¥ä¸ã€‚ + +å†…æ ¸ç¤¾åŒºå’Œå…¬å¸æ–‡åŒ–的差异 +------------------------ + +内核社区的工作模å¼åŒå¤§å¤šæ•°ä¼ ç»Ÿå…¬å¸å¼€å‘队ä¼çš„工作模å¼å¹¶ä¸ç›¸åŒã€‚下é¢è¿™äº›ä¾‹ +å­ï¼Œå¯ä»¥å¸®åЩ你é¿å…æŸäº›å¯èƒ½å‘生问题: + 用这些è¯ä»‹ç»ä½ çš„ä¿®æ”¹ææ¡ˆä¼šæœ‰å¥½å¤„: + - å®ƒåŒæ—¶è§£å†³äº†å¤šä¸ªé—®é¢˜ + - 它删除了2000è¡Œä»£ç  + - 这是补ä¸ï¼Œå®ƒå·²ç»è§£é‡Šäº†æˆ‘想è¦è¯´æ˜Žçš„ + - 我在5ç§ä¸åŒçš„体系结构上测试过它…… + - 这是一系列å°è¡¥ä¸ç”¨æ¥â€¦â€¦ + - 这个修改æé«˜äº†æ™®é€šæœºå™¨çš„æ€§èƒ½â€¦â€¦ + + 应该é¿å…如下的说法: + - 我们在AIX/ptx/Solaris就是这么åšçš„,所以这么åšè‚¯å®šæ˜¯å¥½çš„…… + - 我åšè¿™è¡Œå·²ç»20年了,所以…… + - 为了我们公å¸èµšé’±è€ƒè™‘å¿…é¡»è¿™ä¹ˆåš + - 这是我们的ä¼ä¸šäº§å“线所需è¦çš„ + - 这里是æè¿°æˆ‘观点的1000页设计文档 + - 这是一个5000行的补ä¸ç”¨æ¥â€¦â€¦ + - 我é‡å†™äº†çŽ°åœ¨ä¹±ä¸ƒå…«ç³Ÿçš„ä»£ç ï¼Œè¿™å°±æ˜¯â€¦â€¦ + - æˆ‘è¢«è§„å®šäº†æœ€åŽæœŸé™ï¼Œæ‰€ä»¥è¿™ä¸ªè¡¥ä¸éœ€è¦ç«‹åˆ»è¢«æŽ¥å— + +å¦å¤–一个内核社区与大部分传统公å¸çš„软件开å‘队ä¼ä¸åŒçš„地方是无法é¢å¯¹é¢åœ°äº¤ +æµã€‚使用电å­é‚®ä»¶å’ŒIRCèŠå¤©å·¥å…·åšä¸ºä¸»è¦æ²Ÿé€šå·¥å…·çš„ä¸€ä¸ªå¥½å¤„æ˜¯æ€§åˆ«å’Œç§æ—歧视 +将会更少。Linux内核的工作环境更能接å—妇女和少数æ—群,因为æ¯ä¸ªäººåœ¨åˆ«äººçœ¼ +é‡Œåªæ˜¯ä¸€ä¸ªé‚®ä»¶åœ°å€ã€‚å›½é™…åŒ–ä¹Ÿå¸®åŠ©äº†å…¬å¹³çš„å®žçŽ°ï¼Œå› ä¸ºä½ æ— æ³•é€šè¿‡å§“åæ¥åˆ¤æ–­äºº +的性别。男人有å¯èƒ½å«æŽä¸½ï¼Œå¥³äººä¹Ÿæœ‰å¯èƒ½å«çŽ‹åˆšã€‚å¤§å¤šæ•°åœ¨Linux内核上工作过 +并表达过看法的女性对在linux上工作的ç»åŽ†éƒ½ç»™å‡ºäº†æ­£é¢çš„评价。 + +对于一些ä¸ä¹ æƒ¯ä½¿ç”¨è‹±è¯­çš„人æ¥è¯´ï¼Œè¯­è¨€å¯èƒ½æ˜¯ä¸€ä¸ªå¼•起问题的障ç¢ã€‚在邮件列表 +ä¸­è¦æ­£ç¡®åœ°è¡¨è¾¾æƒ³æ³•必需良好地掌æ¡è¯­è¨€ï¼Œæ‰€ä»¥å»ºè®®ä½ åœ¨å‘é€é‚®ä»¶ä¹‹å‰æœ€å¥½æ£€æŸ¥ä¸€ +ä¸‹è‹±æ–‡å†™å¾—æ˜¯å¦æ­£ç¡®ã€‚ + + +拆分修改 +-------- + +Linux内核社区并ä¸å–œæ¬¢ä¸€ä¸‹æŽ¥æ”¶å¤§æ®µçš„代ç ã€‚修改需è¦è¢«æ°å½“地介ç»ã€è®¨è®ºå¹¶ä¸” +拆分æˆç‹¬ç«‹çš„å°æ®µã€‚这几乎完全和公å¸ä¸­çš„习惯背é“è€Œé©°ã€‚ä½ çš„æƒ³æ³•åº”è¯¥åœ¨å¼€å‘æœ€ +开始的阶段就让大家知é“,这样你就å¯ä»¥åŠæ—¶èŽ·å¾—å¯¹ä½ æ­£åœ¨è¿›è¡Œçš„å¼€å‘çš„å馈。这 +样也会让社区觉得你是在和他们åä½œï¼Œè€Œä¸æ˜¯ä»…仅把他们当作倾销新功能的对象。 +无论如何,你ä¸è¦ä¸€æ¬¡æ€§åœ°å‘邮件列表å‘é€50å°ä¿¡ï¼Œä½ çš„è¡¥ä¸åºåˆ—应该永远用ä¸åˆ° +这么多。 + +å°†è¡¥ä¸æ‹†å¼€çš„原因如下: + +1) å°çš„è¡¥ä¸æ›´æœ‰å¯èƒ½è¢«æŽ¥å—,因为它们ä¸éœ€è¦å¤ªå¤šçš„æ—¶é—´å’Œç²¾åŠ›åŽ»éªŒè¯å…¶æ­£ç¡®æ€§ã€‚ + 一个5行的补ä¸ï¼Œå¯èƒ½åœ¨ç»´æŠ¤è€…看了一眼以åŽå°±ä¼šè¢«æŽ¥å—。而500行的补ä¸åˆ™ + éœ€è¦æ•°ä¸ªå°æ—¶æ¥å®¡æŸ¥å…¶æ­£ç¡®æ€§ï¼ˆæ‰€éœ€æ—¶é—´éšè¡¥ä¸å¤§å°å¢žåŠ å¤§çº¦å‘ˆæŒ‡æ•°çº§å¢žé•¿ï¼‰ã€‚ + + 当出了问题的时候,å°çš„è¡¥ä¸ä¹Ÿä¼šè®©è°ƒè¯•å˜å¾—éžå¸¸å®¹æ˜“。一个一个补ä¸åœ°å›žæº¯ + 将会比仔细剖æžä¸€ä¸ªè¢«æ‰“上的大补ä¸ï¼ˆè¿™ä¸ªè¡¥ä¸ç ´å了其他东西)容易得多。 + +2)ä¸å…‰å‘é€å°çš„è¡¥ä¸å¾ˆé‡è¦ï¼Œåœ¨æäº¤ä¹‹å‰é‡æ–°ç¼–排ã€åŒ–ç®€ï¼ˆæˆ–è€…ä»…ä»…é‡æ–°æŽ’列) + è¡¥ä¸ä¹Ÿæ˜¯å¾ˆé‡è¦çš„。 + +这里有内核开å‘者Al Viro打的一个比方: + “想象一个è€å¸ˆæ­£åœ¨ç»™å­¦ç”Ÿæ‰¹æ”¹æ•°å­¦ä½œä¸šã€‚è€å¸ˆå¹¶ä¸å¸Œæœ›çœ‹åˆ°å­¦ç”Ÿä¸ºäº†å¾— + 到正确解法所进行的å°è¯•和产生的错误。他希望看到的是最干净最优雅的 + 解答。好学生了解这点,ç»ä¸ä¼šæŠŠæœ€ç»ˆè§£å†³ä¹‹å‰çš„中间方案æäº¤ä¸ŠåŽ»ã€‚â€ + + 内核开å‘也是这样。维护者和评审者ä¸å¸Œæœ›çœ‹åˆ°ä¸€ä¸ªäººåœ¨è§£å†³é—®é¢˜æ—¶çš„æ€ + 考过程。他们åªå¸Œæœ›çœ‹åˆ°ç®€å•和优雅的解决方案。 + +直接给出一æµçš„解决方案,和社区一起å作讨论尚未完æˆçš„工作,这两者之间似乎 +很难找到一个平衡点。所以最好尽早开始收集有利于你进行改进的åé¦ˆï¼›åŒæ—¶ä¹Ÿè¦ +ä¿è¯ä¿®æ”¹åˆ†æˆå¾ˆå¤šå°å—,这样在整个项目都准备好被包å«è¿›å†…核之å‰ï¼Œå…¶ä¸­çš„一部 +分å¯èƒ½ä¼šå…ˆè¢«æŽ¥æ”¶ã€‚ + +å¿…é¡»äº†è§£è¿™æ ·åšæ˜¯ä¸å¯æŽ¥å—的:试图将未完æˆçš„工作æäº¤è¿›å†…核,然åŽå†æ‰¾æ—¶é—´ä¿® +å¤ã€‚ + + +è¯æ˜Žä¿®æ”¹çš„å¿…è¦æ€§ +---------------- +é™¤äº†å°†è¡¥ä¸æ‹†æˆå°å—,很é‡è¦çš„一点是让Linux社区了解他们为什么需è¦è¿™æ ·ä¿®æ”¹ã€‚ +ä½ å¿…é¡»è¯æ˜Žæ–°åŠŸèƒ½æ˜¯æœ‰äººéœ€è¦çš„并且是有用的。 + + +记录修改 +-------- + +当你å‘é€è¡¥ä¸çš„æ—¶å€™ï¼Œéœ€è¦ç‰¹åˆ«ç•™æ„邮件正文的内容。因为这里的信æ¯å°†ä¼šåšä¸ºè¡¥ +ä¸çš„修改记录(ChangeLog),会被一直ä¿ç•™ä»¥å¤‡å¤§å®¶æŸ¥é˜…。它需è¦å®Œå…¨åœ°æè¿°è¡¥ä¸ï¼Œ +包括: + - 为什么需è¦è¿™ä¸ªä¿®æ”¹ + - è¡¥ä¸çš„æ€»ä½“设计 + - 实现细节 + - 测试结果 + +想了解它具体应该看起æ¥åƒä»€ä¹ˆï¼Œè¯·æŸ¥é˜…以下文档中的“ChangeLogâ€ç« èŠ‚ï¼š + “The Perfect Patch†+ http://www.zip.com.au/~akpm/linux/patches/stuff/tpp.txt + + +这些事情有时候åšèµ·æ¥å¾ˆéš¾ã€‚è¦åœ¨ä»»ä½•æ–¹é¢éƒ½åšåˆ°å®Œç¾Žå¯èƒ½éœ€è¦å¥½å‡ å¹´æ—¶é—´ã€‚这是 +一个æŒç»­æé«˜çš„过程,它需è¦å¤§é‡çš„è€å¿ƒå’Œå†³å¿ƒã€‚åªè¦ä¸æ”¾å¼ƒï¼Œä½ ä¸€å®šå¯ä»¥åšåˆ°ã€‚ +很多人已ç»åšåˆ°äº†ï¼Œè€Œä»–们都曾ç»å’ŒçŽ°åœ¨çš„ä½ ç«™åœ¨åŒæ ·çš„起点上。 + + +--------------- +感谢Paolo Ciarrocchiå…è®¸â€œå¼€å‘æµç¨‹â€éƒ¨åˆ†åŸºäºŽä»–所写的文章 +(http://linux.tar.bz/articles/2.6-development_process),感谢Randy +Dunlapå’ŒGerrit Huizenga完善了应该说和ä¸è¯¥è¯´çš„列表。感谢Pat Mochel, Hanna +Linder, Randy Dunlap, Kay Sievers, Vojtech Pavlik, Jan Kara, Josh Boyer, +Kees Cook, Andrew Morton, Andi Kleen, Vadim Lobanov, Jesper Juhl, Adrian +Bunk, Keri Harris, Frans Pop, David A. Wheeler, Junio Hamano, Michael +Kerriskå’ŒAlex Shepard的评审ã€å»ºè®®å’Œè´¡çŒ®ã€‚没有他们的帮助,这篇文档是ä¸å¯ +能完æˆçš„。 + + + +英文版维护者: Greg Kroah-Hartman diff --git a/trunk/Documentation/zh_CN/stable_api_nonsense.txt b/trunk/Documentation/zh_CN/stable_api_nonsense.txt new file mode 100644 index 000000000000..c26a27d1ee7d --- /dev/null +++ b/trunk/Documentation/zh_CN/stable_api_nonsense.txt @@ -0,0 +1,157 @@ +Chinese translated version of Documentation/stable_api_nonsense.txt + +If you have any comment or update to the content, please contact the +original document maintainer directly. However, if you have problem +communicating in English you can also ask the Chinese maintainer for help. +Contact the Chinese maintainer, if this translation is outdated or there +is problem with translation. + +Maintainer: Greg Kroah-Hartman +Chinese maintainer: TripleX Chung +--------------------------------------------------------------------- +Documentation/stable_api_nonsense.txt 的中文翻译 + +如果想评论或更新本文的内容,请直接è”系原文档的维护者。如果你使用英文 +äº¤æµæœ‰å›°éš¾çš„è¯ï¼Œä¹Ÿå¯ä»¥å‘中文版维护者求助。如果本翻译更新ä¸åŠæ—¶æˆ–者翻 +译存在问题,请è”系中文版维护者。 + +英文版维护者: Greg Kroah-Hartman +中文版维护者: 钟宇 TripleX Chung +中文版翻译者: 钟宇 TripleX Chung +中文版校译者: æŽé˜³ Li Yang +以下为正文 +--------------------------------------------------------------------- + +写作本文档的目的,是为了解释为什么Linux既没有二进制内核接å£ï¼Œä¹Ÿæ²¡æœ‰ç¨³å®š +的内核接å£ã€‚这里所说的内核接å£ï¼Œæ˜¯æŒ‡å†…核里的接å£ï¼Œè€Œä¸æ˜¯å†…核和用户空间 +的接å£ã€‚内核到用户空间的接å£ï¼Œæ˜¯æä¾›ç»™åº”用程åºä½¿ç”¨çš„系统调用,系统调用 +在历å²ä¸Šå‡ ä¹Žæ²¡æœ‰è¿‡å˜åŒ–,将æ¥ä¹Ÿä¸ä¼šæœ‰å˜åŒ–。我有一些è€åº”ç”¨ç¨‹åºæ˜¯åœ¨0.9版本 +或者更早版本的内核上编译的,在使用2.6版本内核的Linuxå‘布上ä¾ç„¶ç”¨å¾—很好 +。用户和应用程åºä½œè€…å¯ä»¥å°†è¿™ä¸ªæŽ¥å£çœ‹æˆæ˜¯ç¨³å®šçš„。 + + +æ‰§è¡Œçº²è¦ +-------- + +你也许以为自己想è¦ç¨³å®šçš„内核接å£ï¼Œä½†æ˜¯ä½ ä¸æ¸…楚你è¦çš„å®žé™…ä¸Šä¸æ˜¯å®ƒã€‚你需 +è¦çš„其实是稳定的驱动程åºï¼Œè€Œä½ åªæœ‰å°†é©±åŠ¨ç¨‹åºæ”¾åˆ°å…¬ç‰ˆå†…核的æºä»£ç æ ‘里, +æ‰æœ‰å¯èƒ½è¾¾åˆ°è¿™ä¸ªç›®çš„。而且这样åšè¿˜æœ‰å¾ˆå¤šå…¶å®ƒå¥½å¤„,正是因为这些好处使得 +Linux能æˆä¸ºå¼ºå£®ï¼Œç¨³å®šï¼Œæˆç†Ÿçš„æ“ä½œç³»ç»Ÿï¼Œè¿™ä¹Ÿæ˜¯ä½ æœ€å¼€å§‹é€‰æ‹©Linux的原因。 + + +入门 +----- + +åªæœ‰é‚£äº›å†™é©±åŠ¨ç¨‹åºçš„â€œæ€ªäººâ€æ‰ä¼šæ‹…心内核接å£çš„æ”¹å˜ï¼Œå¯¹å¹¿å¤§ç”¨æˆ·æ¥è¯´ï¼Œæ—¢ +看ä¸åˆ°å†…核接å£ï¼Œä¹Ÿä¸éœ€è¦åŽ»å…³å¿ƒå®ƒã€‚ + +é¦–å…ˆï¼Œæˆ‘ä¸æ‰“算讨论关于任何éžGPL许å¯çš„内核驱动的法律问题,这些éžGPLè®¸å¯ +的驱动程åºåŒ…括ä¸å…¬å¼€æºä»£ç ï¼Œéšè—æºä»£ç ï¼ŒäºŒè¿›åˆ¶æˆ–者是用æºä»£ç åŒ…装,或者 +是其它任何形å¼çš„ä¸èƒ½ä»¥GPL许å¯å…¬å¼€æºä»£ç çš„驱动程åºã€‚如果有法律问题,请咨 +è¯¢å¾‹å¸ˆï¼Œæˆ‘åªæ˜¯ä¸€ä¸ªç¨‹åºå‘˜ï¼Œæ‰€ä»¥æˆ‘åªæ‰“ç®—æŽ¢è®¨æŠ€æœ¯é—®é¢˜ï¼ˆä¸æ˜¯å°çœ‹æ³•律问题, +法律问题很实际,并且需è¦ä¸€ç›´å…³æ³¨ï¼‰ã€‚ + +既然åªè°ˆæŠ€æœ¯é—®é¢˜ï¼Œæˆ‘们就有了下é¢ä¸¤ä¸ªä¸»é¢˜ï¼šäºŒè¿›åˆ¶å†…核接å£å’Œç¨³å®šçš„å†…æ ¸æº +ä»£ç æŽ¥å£ã€‚这两个问题是互相关è”的,让我们先解决掉二进制接å£çš„问题。 + + +äºŒè¿›åˆ¶å†…æ ¸æŽ¥å£ +-------------- +å‡å¦‚我们有一个稳定的内核æºä»£ç æŽ¥å£ï¼Œé‚£ä¹ˆè‡ªç„¶è€Œç„¶çš„,我们就拥有了稳定的 +二进制接å£ï¼Œæ˜¯è¿™æ ·çš„å—?错。让我们看看关于Linux内核的几点事实: + - å–决于所用的C编译器的版本,ä¸åŒçš„内核数æ®ç»“æž„é‡Œçš„ç»“æž„ä½“çš„å¯¹é½æ–¹ +å¼ä¼šæœ‰å·®åˆ«ï¼Œä»£ç ä¸­ä¸åŒå‡½æ•°çš„表现形å¼ä¹Ÿä¸ä¸€æ ·ï¼ˆå‡½æ•°æ˜¯ä¸æ˜¯è¢«inlineç¼–è¯‘å– +决于编译器行为)。ä¸åŒçš„函数的表现形å¼å¹¶ä¸é‡è¦ï¼Œä½†æ˜¯æ•°æ®ç»“æž„å†…éƒ¨çš„å¯¹é½ +æ–¹å¼å¾ˆå…³é”®ã€‚ + - å–决于内核的é…置选项,ä¸åŒçš„选项会让内核的很多东西å‘生改å˜ï¼š + - åŒä¸€ä¸ªç»“构体å¯èƒ½åŒ…å«ä¸åŒçš„æˆå‘˜å˜é‡ + - 有的函数å¯èƒ½æ ¹æœ¬ä¸ä¼šè¢«å®žçŽ°ï¼ˆæ¯”å¦‚ç¼–è¯‘çš„æ—¶å€™æ²¡æœ‰é€‰æ‹©SMPæ”¯æŒ +,一些é”函数就会被定义æˆç©ºå‡½æ•°ï¼‰ã€‚ + - 内核使用的内存会以ä¸åŒçš„æ–¹å¼å¯¹é½ï¼Œè¿™å–决于ä¸åŒçš„内核é…置选 +项。 + - Linuxå¯ä»¥åœ¨å¾ˆå¤šçš„ä¸åŒä½“系结构的处ç†å™¨ä¸Šè¿è¡Œã€‚在æŸä¸ªä½“系结构上编 +译好的二进制驱动程åºï¼Œä¸å¯èƒ½åœ¨å¦å¤–一个体系结构上正确的è¿è¡Œã€‚ + +对于一个特定的内核,满足这些æ¡ä»¶å¹¶ä¸éš¾ï¼Œä½¿ç”¨åŒä¸€ä¸ªCç¼–è¯‘å™¨å’ŒåŒæ ·çš„å†…æ ¸é… +置选项æ¥ç¼–è¯‘é©±åŠ¨ç¨‹åºæ¨¡å—å°±å¯ä»¥äº†ã€‚这对于给一个特定Linuxå‘布的特定版本æ +供驱动程åºï¼Œæ˜¯å®Œå…¨å¯ä»¥æ»¡è¶³éœ€æ±‚的。但是如果你è¦ç»™ä¸åŒå‘布的ä¸åŒç‰ˆæœ¬éƒ½å‘ +布一个驱动程åºï¼Œå°±éœ€è¦åœ¨æ¯ä¸ªå‘布上用ä¸åŒçš„å†…æ ¸è®¾ç½®å‚æ•°éƒ½ç¼–译一次内核, +è¿™ç®€ç›´è·Ÿå™©æ¢¦ä¸€æ ·ã€‚è€Œä¸”è¿˜è¦æ³¨æ„到,æ¯ä¸ªLinuxå‘布还æä¾›ä¸åŒçš„Linux内核, +这些内核都针对ä¸åŒçš„硬件类型进行了优化(有很多ç§ä¸åŒçš„处ç†å™¨ï¼Œè¿˜æœ‰ä¸åŒ +的内核设置选项)。所以æ¯å‘布一次驱动程åºï¼Œéƒ½éœ€è¦æä¾›å¾ˆå¤šä¸åŒç‰ˆæœ¬çš„内核 +模å—。 + +相信我,如果你真的è¦é‡‡å–è¿™ç§å‘布方å¼ï¼Œä¸€å®šä¼šæ…¢æ…¢ç–¯æŽ‰ï¼Œæˆ‘很久以å‰å°±æœ‰è¿‡ +深刻的教训... + + +稳定的内核æºä»£ç æŽ¥å£ +-------------------- + +如果有人ä¸å°†ä»–的内核驱动程åºï¼Œæ”¾å…¥å…¬ç‰ˆå†…核的æºä»£ç æ ‘ï¼Œè€Œåˆæƒ³è®©é©±åŠ¨ç¨‹åº +ä¸€ç›´ä¿æŒåœ¨æœ€æ–°çš„内核中å¯ç”¨ï¼Œé‚£ä¹ˆè¿™ä¸ªè¯é¢˜å°†ä¼šå˜å¾—没完没了。 + å†…æ ¸å¼€å‘æ˜¯æŒç»­è€Œä¸”快节å¥çš„,从æ¥éƒ½ä¸ä¼šæ…¢ä¸‹æ¥ã€‚内核开å‘äººå‘˜åœ¨å½“å‰æŽ¥å£ä¸­ +找到bug,或者找到更好的实现方å¼ã€‚一旦å‘现这些,他们就很快会去修改当å‰çš„ +接å£ã€‚ä¿®æ”¹æŽ¥å£æ„味ç€ï¼Œå‡½æ•°åå¯èƒ½ä¼šæ”¹å˜ï¼Œç»“构体å¯èƒ½è¢«æ‰©å……或者删å‡ï¼Œå‡½æ•° +çš„å‚æ•°ä¹Ÿå¯èƒ½å‘生改å˜ã€‚一旦接å£è¢«ä¿®æ”¹ï¼Œå†…核中使用这些接å£çš„地方需è¦åŒæ—¶ +修正,这样æ‰èƒ½ä¿è¯æ‰€æœ‰çš„东西继续工作。 + +举一个例å­ï¼Œå†…核的USBé©±åŠ¨ç¨‹åºæŽ¥å£åœ¨USBå­ç³»ç»Ÿçš„æ•´ä¸ªç”Ÿå‘½å‘¨æœŸä¸­ï¼Œè‡³å°‘ç»åކ +了三次é‡å†™ã€‚这些é‡å†™è§£å†³ä»¥ä¸‹é—®é¢˜ï¼š + - æŠŠæ•°æ®æµä»ŽåŒæ­¥æ¨¡å¼æ”¹æˆéžåŒæ­¥æ¨¡å¼ï¼Œè¿™ä¸ªæ”¹åЍå‡å°‘了一些驱动程åºçš„ +夿‚度,æé«˜äº†æ‰€æœ‰USB驱动程åºçš„åžå率,这样几乎所有的USB设备都能以最大 +速率工作了。 + - 修改了USB核心代ç ä¸­ä¸ºUSBé©±åŠ¨åˆ†é…æ•°æ®åŒ…内存的方å¼ï¼Œæ‰€æœ‰çš„驱动都 +éœ€è¦æä¾›æ›´å¤šçš„å‚æ•°ç»™USB核心,以修正了很多已ç»è¢«è®°å½•在案的死é”。 + +这和一些å°é—­æºä»£ç çš„æ“ä½œç³»ç»Ÿå½¢æˆé²œæ˜Žçš„对比,在那些æ“作系统上,ä¸å¾—ä¸é¢ +外的维护旧的USB接å£ã€‚这导致了一个å¯èƒ½æ€§ï¼Œæ–°çš„å¼€å‘者ä¾ç„¶ä¼šä¸å°å¿ƒä½¿ç”¨æ—§çš„ +接å£ï¼Œä»¥ä¸æ°å½“的方å¼ç¼–写代ç ï¼Œè¿›è€Œå½±å“到æ“作系统的稳定性。 + 在上é¢çš„例å­ä¸­ï¼Œæ‰€æœ‰çš„å¼€å‘è€…éƒ½åŒæ„这些é‡è¦çš„æ”¹åŠ¨ï¼Œåœ¨è¿™æ ·çš„æƒ…å†µä¸‹ä¿®æ”¹ä»£ +价很低。如果Linuxä¿æŒä¸€ä¸ªç¨³å®šçš„内核æºä»£ç æŽ¥å£ï¼Œé‚£ä¹ˆå°±å¾—åˆ›å»ºä¸€ä¸ªæ–°çš„æŽ¥å£ +;旧的,有问题的接å£å¿…须一直维护,给Linux USBå¼€å‘者带æ¥é¢å¤–的工作。既然 +所有的Linux USBé©±åŠ¨çš„ä½œè€…éƒ½æ˜¯åˆ©ç”¨è‡ªå·±çš„æ—¶é—´å·¥ä½œï¼Œé‚£ä¹ˆè¦æ±‚ä»–ä»¬åŽ»åšæ¯«æ— æ„ +义的å…è´¹é¢å¤–工作,是ä¸å¯èƒ½çš„。 + 安全问题对Linuxæ¥è¯´å分é‡è¦ã€‚一个安全问题被å‘现,就会在短时间内得到修 +正。在很多情况下,这将导致Linux内核中的一些接å£è¢«é‡å†™ï¼Œä»¥ä»Žæ ¹æœ¬ä¸Šé¿å…安 +全问题。一旦接å£è¢«é‡å†™ï¼Œæ‰€æœ‰ä½¿ç”¨è¿™äº›æŽ¥å£çš„驱动程åºï¼Œå¿…é¡»åŒæ—¶å¾—到修正, +以确定安全问题已ç»å¾—到修å¤å¹¶ä¸”ä¸å¯èƒ½åœ¨æœªæ¥è¿˜æœ‰åŒæ ·çš„安全问题。如果内核 +内部接å£ä¸å…许改å˜ï¼Œé‚£ä¹ˆå°±ä¸å¯èƒ½ä¿®å¤è¿™æ ·çš„安全问题,也ä¸å¯èƒ½ç¡®è®¤è¿™æ ·çš„ +安全问题以åŽä¸ä¼šå‘生。 +å¼€å‘者一直在清ç†å†…核接å£ã€‚å¦‚æžœä¸€ä¸ªæŽ¥å£æ²¡æœ‰äººåœ¨ä½¿ç”¨äº†ï¼Œå®ƒå°±ä¼šè¢«åˆ é™¤ã€‚è¿™ +æ ·å¯ä»¥ç¡®ä¿å†…核尽å¯èƒ½çš„å°ï¼Œè€Œä¸”所有潜在的接å£éƒ½ä¼šå¾—到尽å¯èƒ½å®Œæ•´çš„æµ‹è¯• +ï¼ˆæ²¡æœ‰äººä½¿ç”¨çš„æŽ¥å£æ˜¯ä¸å¯èƒ½å¾—到良好的测试的)。 + + +è¦åšä»€ä¹ˆ +------- + +如果你写了一个Linux内核驱动,但是它还ä¸åœ¨Linuxæºä»£ç æ ‘é‡Œï¼Œä½œä¸ºä¸€ä¸ªå¼€å‘ +者,你应该怎么åšï¼Ÿä¸ºæ¯ä¸ªå‘布的æ¯ä¸ªç‰ˆæœ¬æä¾›ä¸€ä¸ªäºŒè¿›åˆ¶é©±åŠ¨ï¼Œé‚£ç®€ç›´æ˜¯ä¸€ä¸ª +噩梦,è¦è·Ÿä¸Šæ°¸è¿œå¤„于å˜åŒ–之中的内核接å£ï¼Œä¹Ÿæ˜¯ä¸€ä»¶è¾›è‹¦æ´»ã€‚ +很简å•,让你的驱动进入内核æºä»£ç æ ‘(è¦è®°å¾—我们在谈论的是以GPL许å¯å‘行 +的驱动,如果你的代ç ä¸ç¬¦åˆGPL,那么ç¥ä½ å¥½è¿ï¼Œä½ åªèƒ½è‡ªå·±è§£å†³è¿™ä¸ªé—®é¢˜äº†ï¼Œ +你这个å¸è¡€é¬¼<把Andrewå’ŒLinus对å¸è¡€é¬¼çš„定义链接到这里>)。当你的代ç åŠ å…¥ +公版内核æºä»£ç æ ‘之åŽï¼Œå¦‚æžœä¸€ä¸ªå†…æ ¸æŽ¥å£æ”¹å˜ï¼Œä½ çš„驱动会直接被修改接å£çš„ +那个人修改。ä¿è¯ä½ çš„驱动永远都å¯ä»¥ç¼–译通过,并且一直工作,你几乎ä¸éœ€è¦ +åšä»€ä¹ˆäº‹æƒ…。 + +把驱动放到内核æºä»£ç æ ‘里会有很多的好处: + - 驱动的质é‡ä¼šæå‡ï¼Œè€Œç»´æŠ¤æˆæœ¬ï¼ˆå¯¹åŽŸå§‹ä½œè€…æ¥è¯´ï¼‰ä¼šä¸‹é™ã€‚ + - 其他人会给驱动添加新特性。 + - 其他人会找到驱动中的bugå¹¶ä¿®å¤ã€‚ + - 其他人会在驱动中找到性能优化的机会。 + - 当外部的接å£çš„æ”¹å˜éœ€è¦ä¿®æ”¹é©±åŠ¨ç¨‹åºçš„æ—¶å€™ï¼Œå…¶ä»–äººä¼šä¿®æ”¹é©±åŠ¨ç¨‹åº +。 + - ä¸éœ€è¦è”系任何å‘行商,这个驱动会自动的éšç€æ‰€æœ‰çš„Linuxå‘å¸ƒä¸€èµ·å‘ +布。 + +和别的æ“作系统相比,Linux为更多ä¸åŒçš„设备æä¾›çްæˆçš„é©±åŠ¨ï¼Œè€Œä¸”èƒ½åœ¨æ›´å¤šä¸ +åŒä½“系结构的处ç†å™¨ä¸Šæ”¯æŒè¿™äº›è®¾å¤‡ã€‚这个ç»è¿‡è€ƒéªŒçš„开呿¨¡å¼ï¼Œå¿…然是错ä¸äº† +çš„ :) + +------------- +感谢 Randy Dunlap, Andrew Morton, David Brownell, Hanna Linder, +Robert Love, and Nishanth Aravamudan 对于本文档早期版本的评审和建议。 + +英文版维护者: Greg Kroah-Hartman diff --git a/trunk/Kbuild b/trunk/Kbuild index 163f8cb020a4..56b8edf6a3bc 100644 --- a/trunk/Kbuild +++ b/trunk/Kbuild @@ -13,6 +13,7 @@ offsets-file := include/asm-$(ARCH)/asm-offsets.h always := $(offsets-file) targets := $(offsets-file) targets += arch/$(ARCH)/kernel/asm-offsets.s +clean-files := $(addprefix $(objtree)/,$(targets)) # Default sed regexp - multiline due to syntax constraints define sed-y diff --git a/trunk/MAINTAINERS b/trunk/MAINTAINERS index a9615a567da6..01f222e51871 100644 --- a/trunk/MAINTAINERS +++ b/trunk/MAINTAINERS @@ -225,15 +225,15 @@ T: git kernel.org:/pub/scm/linux/kernel/git/lenb/linux-acpi-2.6.git S: Supported ACPI BATTERY DRIVERS -P: Vladimir P. Lebedev -M: vladimir.p.lebedev@intel.com +P: Alexey Starikovskiy +M: astarikovskiy@suse.de L: linux-acpi@vger.kernel.org W: http://acpi.sourceforge.net/ S: Supported ACPI EC DRIVER P: Alexey Starikovskiy -M: alexey.y.starikovskiy@linux.intel.com +M: astarikovskiy@suse.de L: linux-acpi@vger.kernel.org W: http://acpi.sourceforge.net/ S: Supported @@ -329,6 +329,12 @@ P: Ivan Kokshaysky M: ink@jurassic.park.msu.ru S: Maintained for 2.4; PCI support for 2.6. +AMD GEODE CS5536 USB DEVICE CONTROLLER DRIVER +P: Thomas Dahlmann +M: thomas.dahlmann@amd.com +L: info-linux@geode.amd.com +S: Supported + AMD GEODE PROCESSOR/CHIPSET SUPPORT P: Jordan Crouse M: info-linux@geode.amd.com @@ -457,7 +463,7 @@ S: Maintained ARM/HP JORNADA 7XX MACHINE SUPPORT P: Kristoffer Ericson -M: kristoffer_e1@hotmail.com +M: kristoffer.ericson@gmail.com W: www.jlime.com S: Maintained @@ -607,6 +613,12 @@ W: http://sourceforge.net/projects/acpi4asus W: http://xf.iksaif.net/acpi4asus S: Maintained +ASUS ASB100 HARDWARE MONITOR DRIVER +P: Mark M. Hoffman +M: mhoffman@lightlink.com +L: lm-sensors@lm-sensors.org +S: Maintained + ASUS LAPTOP EXTRAS DRIVER P: Corentin Chary M: corentincj@iksaif.net @@ -639,7 +651,12 @@ W: http://linux-atm.sourceforge.net S: Maintained ATMEL AT91 MCI DRIVER -S: Orphan +P: Nicolas Ferre +M: nicolas.ferre@rfo.atmel.com +L: linux-arm-kernel@lists.arm.linux.org.uk (subscribers-only) +W: http://www.atmel.com/products/AT91/ +W: http://www.at91.com/ +S: Maintained ATMEL MACB ETHERNET DRIVER P: Haavard Skinnemoen @@ -732,6 +749,13 @@ L: uclinux-dist-devel@blackfin.uclinux.org (subscribers-only) W: http://blackfin.uclinux.org S: Supported +BLACKFIN EMAC DRIVER +P: Bryan Wu +M: bryan.wu@analog.com +L: uclinux-dist-devel@blackfin.uclinux.org (subscribers-only) +W: http://blackfin.uclinux.org +S: Supported + BLACKFIN RTC DRIVER P: Mike Frysinger M: michael.frysinger@analog.com @@ -1266,6 +1290,12 @@ M: shannon.nelson@intel.com L: linux-kernel@vger.kernel.org S: Maintained +DME1737 HARDWARE MONITOR DRIVER +P: Juerg Haefliger +M: juergh@gmail.com +L: lm-sensors@lm-sensors.org +S: Maintained + DOCBOOK FOR DOCUMENTATION P: Randy Dunlap M: rdunlap@xenotime.net @@ -1345,21 +1375,60 @@ S: Supported EDAC-CORE P: Doug Thompson -M: norsk5@xmission.com +M: dougthompson@xmission.com L: bluesmoke-devel@lists.sourceforge.net W: bluesmoke.sourceforge.net S: Supported EDAC-E752X P: Mark Gross +P: Doug Thompson M: mark.gross@intel.com +M: dougthompson@xmission.com L: bluesmoke-devel@lists.sourceforge.net W: bluesmoke.sourceforge.net S: Maintained EDAC-E7XXX P: Doug Thompson -M: norsk5@xmission.com +M: dougthompson@xmission.com +L: bluesmoke-devel@lists.sourceforge.net +W: bluesmoke.sourceforge.net +S: Maintained + +EDAC-I82443BXGX +P: Tim Small +M: tim@buttersideup.com +L: bluesmoke-devel@lists.sourceforge.net +W: bluesmoke.sourceforge.net +S: Maintained + +EDAC-I3000 +P: Jason Uhlenkott +M: juhlenko@akamai.com +L: bluesmoke-devel@lists.sourceforge.net +W: bluesmoke.sourceforge.net +S: Maintained + +EDAC-I5000 +P: Doug Thompson +M: dougthompson@xmission.com +L: bluesmoke-devel@lists.sourceforge.net +W: bluesmoke.sourceforge.net +S: Maintained + +EDAC-I82975X +P: Ranganathan Desikan +P: Arvind R. +M: rdesikan@jetzbroadband.com +M: arvind@acarlab.com +L: bluesmoke-devel@lists.sourceforge.net +W: bluesmoke.sourceforge.net +S: Maintained + +EDAC-PASEMI +P: Egor Martovetsky +M: egor@pasemi.com L: bluesmoke-devel@lists.sourceforge.net W: bluesmoke.sourceforge.net S: Maintained @@ -1577,11 +1646,11 @@ W: http://gigaset307x.sourceforge.net/ S: Maintained HARDWARE MONITORING -P: Jean Delvare -M: khali@linux-fr.org +P: Mark M. Hoffman +M: mhoffman@lightlink.com L: lm-sensors@lm-sensors.org W: http://www.lm-sensors.org/ -T: quilt http://khali.linux-fr.org/devel/linux-2.6/jdelvare-hwmon/ +T: git lm-sensors.org:/kernel/mhoffman/hwmon-2.6.git S: Maintained HARDWARE RANDOM NUMBER GENERATOR CORE @@ -1717,6 +1786,12 @@ P: William Irwin M: wli@holomorphy.com S: Maintained +I2C/SMBUS STUB DRIVER +P: Mark M. Hoffman +M: mhoffman@lightlink.com +L: lm-sensors@lm-sensors.org +S: Maintained + I2C SUBSYSTEM P: Jean Delvare M: khali@linux-fr.org @@ -1740,6 +1815,7 @@ S: Maintained i386 SETUP CODE / CPU ERRATA WORKAROUNDS P: H. Peter Anvin M: hpa@zytor.com +T: git.kernel.org:/pub/scm/linux/kernel/git/hpa/linux-2.6-x86setup.git S: Maintained IA64 (Itanium) PLATFORM @@ -2393,7 +2469,7 @@ P: Artem Bityutskiy M: dedekind@infradead.org W: http://www.linux-mtd.infradead.org/ L: linux-mtd@lists.infradead.org -T: git git://git.infradead.org/ubi-2.6.git +T: git git://git.infradead.org/~dedekind/ubi-2.6.git S: Maintained MICROTEK X6 SCANNER @@ -2849,8 +2925,8 @@ L: linux-kernel@vger.kernel.org S: Maintained POSIX CLOCKS and TIMERS -P: George Anzinger -M: george@mvista.com +P: Thomas Gleixner +M: tglx@linutronix.de L: linux-kernel@vger.kernel.org S: Supported @@ -3245,6 +3321,12 @@ W: http://www.brownhat.org/sis900.html L: netdev@vger.kernel.org S: Maintained +SIS 96X I2C/SMBUS DRIVER +P: Mark M. Hoffman +M: mhoffman@lightlink.com +L: lm-sensors@lm-sensors.org +S: Maintained + SIS FRAMEBUFFER DRIVER P: Thomas Winischhofer M: thomas@winischhofer.net @@ -3262,6 +3344,12 @@ P: Nicolas Pitre M: nico@cam.org S: Maintained +SMSC47B397 HARDWARE MONITOR DRIVER +P: Mark M. Hoffman +M: mhoffman@lightlink.com +L: lm-sensors@lm-sensors.org +S: Maintained + SOFTMAC LAYER (IEEE 802.11) P: Johannes Berg M: johannes@sipsolutions.net @@ -3281,9 +3369,19 @@ M: neilb@suse.de L: linux-raid@vger.kernel.org S: Supported -SOFTWARE SUSPEND: +HIBERNATION (aka Software Suspend, aka swsusp): +P: Pavel Machek +M: pavel@suse.cz +P: Rafael J. Wysocki +M: rjw@sisk.pl +L: linux-pm@lists.linux-foundation.org +S: Supported + +SUSPEND TO RAM: P: Pavel Machek M: pavel@suse.cz +P: Rafael J. Wysocki +M: rjw@sisk.pl L: linux-pm@lists.linux-foundation.org S: Maintained diff --git a/trunk/Makefile b/trunk/Makefile index ddbfcac299c1..284d07202b63 100644 --- a/trunk/Makefile +++ b/trunk/Makefile @@ -492,7 +492,7 @@ endif include $(srctree)/arch/$(ARCH)/Makefile ifdef CONFIG_FRAME_POINTER -CFLAGS += -fno-omit-frame-pointer $(call cc-option,-fno-optimize-sibling-calls,) +CFLAGS += -fno-omit-frame-pointer -fno-optimize-sibling-calls else CFLAGS += -fomit-frame-pointer endif @@ -514,6 +514,12 @@ CFLAGS += $(call cc-option,-Wdeclaration-after-statement,) # disable pointer signed / unsigned warnings in gcc 4.0 CFLAGS += $(call cc-option,-Wno-pointer-sign,) +# Use --build-id when available. +LDFLAGS_BUILD_ID = $(patsubst -Wl$(comma)%,%,\ + $(call ld-option, -Wl$(comma)--build-id,)) +LDFLAGS_MODULE += $(LDFLAGS_BUILD_ID) +LDFLAGS_vmlinux += $(LDFLAGS_BUILD_ID) + # Default kernel image to build when no specific target is given. # KBUILD_IMAGE may be overruled on the command line or # set in the environment @@ -612,7 +618,7 @@ quiet_cmd_vmlinux__ ?= LD $@ cmd_vmlinux__ ?= $(LD) $(LDFLAGS) $(LDFLAGS_vmlinux) -o $@ \ -T $(vmlinux-lds) $(vmlinux-init) \ --start-group $(vmlinux-main) --end-group \ - $(filter-out $(vmlinux-lds) $(vmlinux-init) $(vmlinux-main) FORCE ,$^) + $(filter-out $(vmlinux-lds) $(vmlinux-init) $(vmlinux-main) vmlinux.o FORCE ,$^) # Generate new vmlinux version quiet_cmd_vmlinux_version = GEN .version @@ -736,15 +742,31 @@ debug_kallsyms: .tmp_map$(last_kallsyms) endif # ifdef CONFIG_KALLSYMS +# Do modpost on a prelinked vmlinux. The finally linked vmlinux has +# relevant sections renamed as per the linker script. +quiet_cmd_vmlinux-modpost = LD $@ + cmd_vmlinux-modpost = $(LD) $(LDFLAGS) -r -o $@ \ + $(vmlinux-init) --start-group $(vmlinux-main) --end-group \ + $(filter-out $(vmlinux-init) $(vmlinux-main) $(vmlinux-lds) FORCE ,$^) +define rule_vmlinux-modpost + : + +$(call cmd,vmlinux-modpost) + $(Q)$(MAKE) -f $(srctree)/scripts/Makefile.modpost $@ + $(Q)echo 'cmd_$@ := $(cmd_vmlinux-modpost)' > $(dot-target).cmd +endef + # vmlinux image - including updated kernel symbols -vmlinux: $(vmlinux-lds) $(vmlinux-init) $(vmlinux-main) $(kallsyms.o) FORCE +vmlinux: $(vmlinux-lds) $(vmlinux-init) $(vmlinux-main) $(kallsyms.o) vmlinux.o FORCE ifdef CONFIG_HEADERS_CHECK $(Q)$(MAKE) -f $(srctree)/Makefile headers_check endif + $(call vmlinux-modpost) $(call if_changed_rule,vmlinux__) - $(Q)$(MAKE) -f $(srctree)/scripts/Makefile.modpost $@ $(Q)rm -f .old_version +vmlinux.o: $(vmlinux-lds) $(vmlinux-init) $(vmlinux-main) $(kallsyms.o) FORCE + $(call if_changed_rule,vmlinux-modpost) + # The actual objects are generated when descending, # make sure no implicit rule kicks in $(sort $(vmlinux-init) $(vmlinux-main)) $(vmlinux-lds): $(vmlinux-dirs) ; @@ -1317,7 +1339,7 @@ define xtags -I __initdata,__exitdata,__acquires,__releases \ -I EXPORT_SYMBOL,EXPORT_SYMBOL_GPL \ --extra=+f --c-kinds=+px \ - --regex-asm='/ENTRY\(([^)]*)\).*/\1/'; \ + --regex-asm='/^ENTRY\(([^)]*)\).*/\1/'; \ $(all-kconfigs) | xargs $1 -a \ --langdef=kconfig \ --language-force=kconfig \ diff --git a/trunk/arch/alpha/kernel/module.c b/trunk/arch/alpha/kernel/module.c index bd03dc94c72b..026ba9af6d6a 100644 --- a/trunk/arch/alpha/kernel/module.c +++ b/trunk/arch/alpha/kernel/module.c @@ -119,8 +119,7 @@ module_frob_arch_sections(Elf64_Ehdr *hdr, Elf64_Shdr *sechdrs, } nsyms = symtab->sh_size / sizeof(Elf64_Sym); - chains = kmalloc(nsyms * sizeof(struct got_entry), GFP_KERNEL); - memset(chains, 0, nsyms * sizeof(struct got_entry)); + chains = kcalloc(nsyms, sizeof(struct got_entry), GFP_KERNEL); got->sh_size = 0; got->sh_addralign = 8; diff --git a/trunk/arch/alpha/kernel/vmlinux.lds.S b/trunk/arch/alpha/kernel/vmlinux.lds.S index 449e76f118d3..fe13daa5cb2c 100644 --- a/trunk/arch/alpha/kernel/vmlinux.lds.S +++ b/trunk/arch/alpha/kernel/vmlinux.lds.S @@ -3,7 +3,7 @@ OUTPUT_FORMAT("elf64-alpha") OUTPUT_ARCH(alpha) ENTRY(__start) -PHDRS { kernel PT_LOAD ; } +PHDRS { kernel PT_LOAD; note PT_NOTE; } jiffies = jiffies_64; SECTIONS { @@ -28,6 +28,9 @@ SECTIONS __ex_table : { *(__ex_table) } __stop___ex_table = .; + NOTES :kernel :note + .dummy : { *(.dummy) } :kernel + RODATA /* Will be freed after init */ @@ -69,10 +72,7 @@ SECTIONS . = ALIGN(8); SECURITY_INIT - . = ALIGN(8192); - __per_cpu_start = .; - .data.percpu : { *(.data.percpu) } - __per_cpu_end = .; + PERCPU(8192) . = ALIGN(2*8192); __init_end = .; diff --git a/trunk/arch/alpha/mm/fault.c b/trunk/arch/alpha/mm/fault.c index f5862792a167..a0e18da594d9 100644 --- a/trunk/arch/alpha/mm/fault.c +++ b/trunk/arch/alpha/mm/fault.c @@ -148,21 +148,17 @@ do_page_fault(unsigned long address, unsigned long mmcsr, the fault. */ fault = handle_mm_fault(mm, vma, address, cause > 0); up_read(&mm->mmap_sem); - - switch (fault) { - case VM_FAULT_MINOR: - current->min_flt++; - break; - case VM_FAULT_MAJOR: - current->maj_flt++; - break; - case VM_FAULT_SIGBUS: - goto do_sigbus; - case VM_FAULT_OOM: - goto out_of_memory; - default: + if (unlikely(fault & VM_FAULT_ERROR)) { + if (fault & VM_FAULT_OOM) + goto out_of_memory; + else if (fault & VM_FAULT_SIGBUS) + goto do_sigbus; BUG(); } + if (fault & VM_FAULT_MAJOR) + current->maj_flt++; + else + current->min_flt++; return; /* Something tried to access memory that isn't in our memory map. diff --git a/trunk/arch/arm/Kconfig b/trunk/arch/arm/Kconfig index a44c6da9bf83..85016313bd11 100644 --- a/trunk/arch/arm/Kconfig +++ b/trunk/arch/arm/Kconfig @@ -324,6 +324,12 @@ config ARCH_NS9XXX +config ARCH_MXC + bool "Freescale MXC/iMX-based" + select ARCH_MTD_XIP + help + Support for Freescale MXC/iMX-based family of processors + config ARCH_PNX4008 bool "Philips Nexperia PNX4008 Mobile" help @@ -432,6 +438,7 @@ source "arch/arm/mach-omap1/Kconfig" source "arch/arm/mach-omap2/Kconfig" source "arch/arm/plat-s3c24xx/Kconfig" +source "arch/arm/plat-s3c/Kconfig" if ARCH_S3C2410 source "arch/arm/mach-s3c2400/Kconfig" @@ -456,6 +463,8 @@ source "arch/arm/mach-realview/Kconfig" source "arch/arm/mach-at91/Kconfig" +source "arch/arm/plat-mxc/Kconfig" + source "arch/arm/mach-netx/Kconfig" source "arch/arm/mach-ns9xxx/Kconfig" diff --git a/trunk/arch/arm/Kconfig.debug b/trunk/arch/arm/Kconfig.debug index 40c5eb1f55c7..18101f5f5f24 100644 --- a/trunk/arch/arm/Kconfig.debug +++ b/trunk/arch/arm/Kconfig.debug @@ -82,24 +82,24 @@ config DEBUG_CLPS711X_UART2 output to the second serial port on these devices. Saying N will cause the debug messages to appear on the first serial port. -config DEBUG_S3C2410_PORT - depends on DEBUG_LL && ARCH_S3C2410 - bool "Kernel low-level debugging messages via S3C2410 UART" +config DEBUG_S3C_PORT + depends on DEBUG_LL && PLAT_S3C + bool "Kernel low-level debugging messages via S3C UART" help Say Y here if you want debug print routines to go to one of the - S3C2410 internal UARTs. The chosen UART must have been configured + S3C internal UARTs. The chosen UART must have been configured before it is used. -config DEBUG_S3C2410_UART - depends on ARCH_S3C2410 - int "S3C2410 UART to use for low-level debug" +config DEBUG_S3C_UART + depends on PLAT_S3C + int "S3C UART to use for low-level debug" default "0" help - Choice for UART for kernel low-level using S3C2410 UARTS, + Choice for UART for kernel low-level using S3C UARTS, should be between zero and two. The port must have been initialised by the boot-loader before use. The uncompressor code port configuration is now handled - by CONFIG_S3C2410_LOWLEVEL_UART_PORT. + by CONFIG_S3C_LOWLEVEL_UART_PORT. endmenu diff --git a/trunk/arch/arm/Makefile b/trunk/arch/arm/Makefile index cbd5010d3bc3..fa4ea9ff0797 100644 --- a/trunk/arch/arm/Makefile +++ b/trunk/arch/arm/Makefile @@ -137,6 +137,8 @@ endif textofs-$(CONFIG_ARCH_NS9XXX) := 0x00108000 machine-$(CONFIG_ARCH_DAVINCI) := davinci machine-$(CONFIG_ARCH_KS8695) := ks8695 + incdir-$(CONFIG_ARCH_MXC) := mxc + machine-$(CONFIG_ARCH_MX3) := mx3 ifeq ($(CONFIG_ARCH_EBSA110),y) # This is what happens if you forget the IOCS16 line. @@ -183,6 +185,7 @@ core-$(CONFIG_VFP) += arch/arm/vfp/ core-$(CONFIG_PLAT_IOP) += arch/arm/plat-iop/ core-$(CONFIG_ARCH_OMAP) += arch/arm/plat-omap/ core-$(CONFIG_PLAT_S3C24XX) += arch/arm/plat-s3c24xx/ +core-$(CONFIG_ARCH_MXC) += arch/arm/plat-mxc/ drivers-$(CONFIG_OPROFILE) += arch/arm/oprofile/ drivers-$(CONFIG_ARCH_CLPS7500) += drivers/acorn/char/ diff --git a/trunk/arch/arm/boot/Makefile b/trunk/arch/arm/boot/Makefile index ec9c400c7f82..25f12303b106 100644 --- a/trunk/arch/arm/boot/Makefile +++ b/trunk/arch/arm/boot/Makefile @@ -91,4 +91,12 @@ zinstall: $(obj)/zImage $(CONFIG_SHELL) $(srctree)/$(src)/install.sh $(KERNELRELEASE) \ $(obj)/zImage System.map "$(INSTALL_PATH)" +zi: + $(CONFIG_SHELL) $(srctree)/$(src)/install.sh $(KERNELRELEASE) \ + $(obj)/zImage System.map "$(INSTALL_PATH)" + +i: + $(CONFIG_SHELL) $(srctree)/$(src)/install.sh $(KERNELRELEASE) \ + $(obj)/Image System.map "$(INSTALL_PATH)" + subdir- := bootp compressed diff --git a/trunk/arch/arm/boot/compressed/Makefile b/trunk/arch/arm/boot/compressed/Makefile index a1f1691b67fe..6b8cbd69f249 100644 --- a/trunk/arch/arm/boot/compressed/Makefile +++ b/trunk/arch/arm/boot/compressed/Makefile @@ -73,7 +73,7 @@ SEDFLAGS = s/TEXT_START/$(ZTEXTADDR)/;s/BSS_START/$(ZBSSADDR)/ targets := vmlinux vmlinux.lds piggy.gz piggy.o font.o font.c \ head.o misc.o $(OBJS) -EXTRA_CFLAGS := -fpic +EXTRA_CFLAGS := -fpic -fno-builtin EXTRA_AFLAGS := # Supply ZRELADDR, INITRD_PHYS and PARAMS_PHYS to the decompressor via diff --git a/trunk/arch/arm/boot/compressed/head.S b/trunk/arch/arm/boot/compressed/head.S index d7fb5ee1637e..b9b03eda70e5 100644 --- a/trunk/arch/arm/boot/compressed/head.S +++ b/trunk/arch/arm/boot/compressed/head.S @@ -55,7 +55,7 @@ #elif defined(CONFIG_ARCH_S3C2410) .macro loadsp, rb mov \rb, #0x50000000 - add \rb, \rb, #0x4000 * CONFIG_S3C2410_LOWLEVEL_UART_PORT + add \rb, \rb, #0x4000 * CONFIG_S3C_LOWLEVEL_UART_PORT .endm #else .macro loadsp, rb diff --git a/trunk/arch/arm/configs/badge4_defconfig b/trunk/arch/arm/configs/badge4_defconfig index 821865f75605..b2bbf217c707 100644 --- a/trunk/arch/arm/configs/badge4_defconfig +++ b/trunk/arch/arm/configs/badge4_defconfig @@ -708,7 +708,6 @@ CONFIG_I2C_ALGOPCF=m # I2C Hardware Bus support # CONFIG_I2C_ELEKTOR=m -# CONFIG_I2C_ISA is not set # CONFIG_I2C_PARPORT is not set # CONFIG_I2C_PARPORT_LIGHT is not set # CONFIG_I2C_STUB is not set diff --git a/trunk/arch/arm/configs/clps7500_defconfig b/trunk/arch/arm/configs/clps7500_defconfig index af9ae5389131..49e9f9d8b3d1 100644 --- a/trunk/arch/arm/configs/clps7500_defconfig +++ b/trunk/arch/arm/configs/clps7500_defconfig @@ -536,7 +536,6 @@ CONFIG_I2C_ALGOBIT=y # I2C Hardware Bus support # # CONFIG_I2C_ELEKTOR is not set -# CONFIG_I2C_ISA is not set # CONFIG_I2C_PARPORT is not set # CONFIG_I2C_PARPORT_LIGHT is not set # CONFIG_I2C_PCA_ISA is not set diff --git a/trunk/arch/arm/configs/em_x270_defconfig b/trunk/arch/arm/configs/em_x270_defconfig new file mode 100644 index 000000000000..6bea0901bdf0 --- /dev/null +++ b/trunk/arch/arm/configs/em_x270_defconfig @@ -0,0 +1,1265 @@ +# +# Automatically generated make config: don't edit +# Linux kernel version: 2.6.22 +# Mon Jul 9 15:18:20 2007 +# +CONFIG_ARM=y +CONFIG_SYS_SUPPORTS_APM_EMULATION=y +CONFIG_GENERIC_GPIO=y +CONFIG_GENERIC_TIME=y +# CONFIG_GENERIC_CLOCKEVENTS is not set +CONFIG_MMU=y +# CONFIG_NO_IOPORT is not set +CONFIG_GENERIC_HARDIRQS=y +CONFIG_STACKTRACE_SUPPORT=y +CONFIG_LOCKDEP_SUPPORT=y +CONFIG_TRACE_IRQFLAGS_SUPPORT=y +CONFIG_HARDIRQS_SW_RESEND=y +CONFIG_GENERIC_IRQ_PROBE=y +CONFIG_RWSEM_GENERIC_SPINLOCK=y +# CONFIG_ARCH_HAS_ILOG2_U32 is not set +# CONFIG_ARCH_HAS_ILOG2_U64 is not set +CONFIG_GENERIC_HWEIGHT=y +CONFIG_GENERIC_CALIBRATE_DELAY=y +CONFIG_ZONE_DMA=y +CONFIG_ARCH_MTD_XIP=y +CONFIG_VECTORS_BASE=0xffff0000 +CONFIG_DEFCONFIG_LIST="/lib/modules/$UNAME_RELEASE/.config" + +# +# Code maturity level options +# +CONFIG_EXPERIMENTAL=y +CONFIG_BROKEN_ON_SMP=y +CONFIG_INIT_ENV_ARG_LIMIT=32 + +# +# General setup +# +CONFIG_LOCALVERSION="-em-x270" +# CONFIG_LOCALVERSION_AUTO is not set +CONFIG_SWAP=y +CONFIG_SYSVIPC=y +# CONFIG_IPC_NS is not set +CONFIG_SYSVIPC_SYSCTL=y +# CONFIG_POSIX_MQUEUE is not set +# CONFIG_BSD_PROCESS_ACCT is not set +# CONFIG_TASKSTATS is not set +# CONFIG_UTS_NS is not set +# CONFIG_AUDIT is not set +CONFIG_IKCONFIG=y +CONFIG_IKCONFIG_PROC=y +CONFIG_LOG_BUF_SHIFT=17 +CONFIG_SYSFS_DEPRECATED=y +# CONFIG_RELAY is not set +CONFIG_BLK_DEV_INITRD=y +CONFIG_INITRAMFS_SOURCE="" +CONFIG_CC_OPTIMIZE_FOR_SIZE=y +CONFIG_SYSCTL=y +CONFIG_EMBEDDED=y +CONFIG_UID16=y +CONFIG_SYSCTL_SYSCALL=y +CONFIG_KALLSYMS=y +# CONFIG_KALLSYMS_ALL is not set +# CONFIG_KALLSYMS_EXTRA_PASS is not set +CONFIG_HOTPLUG=y +CONFIG_PRINTK=y +CONFIG_BUG=y +CONFIG_ELF_CORE=y +CONFIG_BASE_FULL=y +CONFIG_FUTEX=y +CONFIG_ANON_INODES=y +CONFIG_EPOLL=y +CONFIG_SIGNALFD=y +CONFIG_TIMERFD=y +CONFIG_EVENTFD=y +CONFIG_SHMEM=y +CONFIG_VM_EVENT_COUNTERS=y +CONFIG_SLAB=y +# CONFIG_SLUB is not set +# CONFIG_SLOB is not set +CONFIG_RT_MUTEXES=y +# CONFIG_TINY_SHMEM is not set +CONFIG_BASE_SMALL=0 + +# +# Loadable module support +# +CONFIG_MODULES=y +CONFIG_MODULE_UNLOAD=y +CONFIG_MODULE_FORCE_UNLOAD=y +# CONFIG_MODVERSIONS is not set +# CONFIG_MODULE_SRCVERSION_ALL is not set +CONFIG_KMOD=y + +# +# Block layer +# +CONFIG_BLOCK=y +# CONFIG_LBD is not set +# CONFIG_BLK_DEV_IO_TRACE is not set +# CONFIG_LSF is not set + +# +# IO Schedulers +# +CONFIG_IOSCHED_NOOP=y +CONFIG_IOSCHED_AS=y +CONFIG_IOSCHED_DEADLINE=y +CONFIG_IOSCHED_CFQ=y +CONFIG_DEFAULT_AS=y +# CONFIG_DEFAULT_DEADLINE is not set +# CONFIG_DEFAULT_CFQ is not set +# CONFIG_DEFAULT_NOOP is not set +CONFIG_DEFAULT_IOSCHED="anticipatory" + +# +# System Type +# +# CONFIG_ARCH_AAEC2000 is not set +# CONFIG_ARCH_INTEGRATOR is not set +# CONFIG_ARCH_REALVIEW is not set +# CONFIG_ARCH_VERSATILE is not set +# CONFIG_ARCH_AT91 is not set +# CONFIG_ARCH_CLPS7500 is not set +# CONFIG_ARCH_CLPS711X is not set +# CONFIG_ARCH_CO285 is not set +# CONFIG_ARCH_EBSA110 is not set +# CONFIG_ARCH_EP93XX is not set +# CONFIG_ARCH_FOOTBRIDGE is not set +# CONFIG_ARCH_NETX is not set +# CONFIG_ARCH_H720X is not set +# CONFIG_ARCH_IMX is not set +# CONFIG_ARCH_IOP13XX is not set +# CONFIG_ARCH_IOP32X is not set +# CONFIG_ARCH_IOP33X is not set +# CONFIG_ARCH_IXP23XX is not set +# CONFIG_ARCH_IXP2000 is not set +# CONFIG_ARCH_IXP4XX is not set +# CONFIG_ARCH_L7200 is not set +# CONFIG_ARCH_KS8695 is not set +# CONFIG_ARCH_NS9XXX is not set +# CONFIG_ARCH_PNX4008 is not set +CONFIG_ARCH_PXA=y +# CONFIG_ARCH_RPC is not set +# CONFIG_ARCH_SA1100 is not set +# CONFIG_ARCH_S3C2410 is not set +# CONFIG_ARCH_SHARK is not set +# CONFIG_ARCH_LH7A40X is not set +# CONFIG_ARCH_DAVINCI is not set +# CONFIG_ARCH_OMAP is not set + +# +# Intel PXA2xx Implementations +# +# CONFIG_ARCH_LUBBOCK is not set +# CONFIG_MACH_LOGICPD_PXA270 is not set +# CONFIG_MACH_MAINSTONE is not set +# CONFIG_ARCH_PXA_IDP is not set +# CONFIG_PXA_SHARPSL is not set +# CONFIG_MACH_TRIZEPS4 is not set +CONFIG_MACH_EM_X270=y +CONFIG_PXA27x=y + +# +# Processor Type +# +CONFIG_CPU_32=y +CONFIG_CPU_XSCALE=y +CONFIG_CPU_32v5=y +CONFIG_CPU_ABRT_EV5T=y +CONFIG_CPU_CACHE_VIVT=y +CONFIG_CPU_TLB_V4WBI=y +CONFIG_CPU_CP15=y +CONFIG_CPU_CP15_MMU=y + +# +# Processor Features +# +CONFIG_ARM_THUMB=y +# CONFIG_CPU_DCACHE_DISABLE is not set +# CONFIG_OUTER_CACHE is not set +CONFIG_IWMMXT=y +CONFIG_XSCALE_PMU=y + +# +# Bus support +# +# CONFIG_ARCH_SUPPORTS_MSI is not set + +# +# PCCARD (PCMCIA/CardBus) support +# +# CONFIG_PCCARD is not set + +# +# Kernel Features +# +# CONFIG_TICK_ONESHOT is not set +# CONFIG_PREEMPT is not set +# CONFIG_NO_IDLE_HZ is not set +CONFIG_HZ=100 +CONFIG_AEABI=y +CONFIG_OABI_COMPAT=y +# CONFIG_ARCH_DISCONTIGMEM_ENABLE is not set +CONFIG_SELECT_MEMORY_MODEL=y +CONFIG_FLATMEM_MANUAL=y +# CONFIG_DISCONTIGMEM_MANUAL is not set +# CONFIG_SPARSEMEM_MANUAL is not set +CONFIG_FLATMEM=y +CONFIG_FLAT_NODE_MEM_MAP=y +# CONFIG_SPARSEMEM_STATIC is not set +CONFIG_SPLIT_PTLOCK_CPUS=4096 +# CONFIG_RESOURCES_64BIT is not set +CONFIG_ZONE_DMA_FLAG=1 +CONFIG_ALIGNMENT_TRAP=y + +# +# Boot options +# +CONFIG_ZBOOT_ROM_TEXT=0x0 +CONFIG_ZBOOT_ROM_BSS=0x0 +CONFIG_CMDLINE="" +# CONFIG_XIP_KERNEL is not set +# CONFIG_KEXEC is not set + +# +# Floating point emulation +# + +# +# At least one emulation must be selected +# +CONFIG_FPE_NWFPE=y +# CONFIG_FPE_NWFPE_XP is not set +# CONFIG_FPE_FASTFPE is not set + +# +# Userspace binary formats +# +CONFIG_BINFMT_ELF=y +# CONFIG_BINFMT_AOUT is not set +# CONFIG_BINFMT_MISC is not set + +# +# Power management options +# +CONFIG_PM=y +CONFIG_PM_LEGACY=y +# CONFIG_PM_DEBUG is not set +# CONFIG_PM_SYSFS_DEPRECATED is not set +CONFIG_APM_EMULATION=m + +# +# Networking +# +CONFIG_NET=y + +# +# Networking options +# +CONFIG_PACKET=y +# CONFIG_PACKET_MMAP is not set +CONFIG_UNIX=y +CONFIG_XFRM=y +# CONFIG_XFRM_USER is not set +# CONFIG_XFRM_SUB_POLICY is not set +# CONFIG_XFRM_MIGRATE is not set +# CONFIG_NET_KEY is not set +CONFIG_INET=y +# CONFIG_IP_MULTICAST is not set +# CONFIG_IP_ADVANCED_ROUTER is not set +CONFIG_IP_FIB_HASH=y +CONFIG_IP_PNP=y +CONFIG_IP_PNP_DHCP=y +CONFIG_IP_PNP_BOOTP=y +# CONFIG_IP_PNP_RARP is not set +# CONFIG_NET_IPIP is not set +# CONFIG_NET_IPGRE is not set +# CONFIG_ARPD is not set +# CONFIG_SYN_COOKIES is not set +# CONFIG_INET_AH is not set +# CONFIG_INET_ESP is not set +# CONFIG_INET_IPCOMP is not set +# CONFIG_INET_XFRM_TUNNEL is not set +# CONFIG_INET_TUNNEL is not set +CONFIG_INET_XFRM_MODE_TRANSPORT=y +CONFIG_INET_XFRM_MODE_TUNNEL=y +CONFIG_INET_XFRM_MODE_BEET=y +CONFIG_INET_DIAG=y +CONFIG_INET_TCP_DIAG=y +# CONFIG_TCP_CONG_ADVANCED is not set +CONFIG_TCP_CONG_CUBIC=y +CONFIG_DEFAULT_TCP_CONG="cubic" +# CONFIG_TCP_MD5SIG is not set +# CONFIG_IPV6 is not set +# CONFIG_INET6_XFRM_TUNNEL is not set +# CONFIG_INET6_TUNNEL is not set +# CONFIG_NETWORK_SECMARK is not set +# CONFIG_NETFILTER is not set +# CONFIG_IP_DCCP is not set +# CONFIG_IP_SCTP is not set +# CONFIG_TIPC is not set +# CONFIG_ATM is not set +# CONFIG_BRIDGE is not set +# CONFIG_VLAN_8021Q is not set +# CONFIG_DECNET is not set +# CONFIG_LLC2 is not set +# CONFIG_IPX is not set +# CONFIG_ATALK is not set +# CONFIG_X25 is not set +# CONFIG_LAPB is not set +# CONFIG_ECONET is not set +# CONFIG_WAN_ROUTER is not set + +# +# QoS and/or fair queueing +# +# CONFIG_NET_SCHED is not set + +# +# Network testing +# +# CONFIG_NET_PKTGEN is not set +# CONFIG_HAMRADIO is not set +# CONFIG_IRDA is not set +CONFIG_BT=m +CONFIG_BT_L2CAP=m +CONFIG_BT_SCO=m +CONFIG_BT_RFCOMM=m +# CONFIG_BT_RFCOMM_TTY is not set +CONFIG_BT_BNEP=m +# CONFIG_BT_BNEP_MC_FILTER is not set +# CONFIG_BT_BNEP_PROTO_FILTER is not set +CONFIG_BT_HIDP=m + +# +# Bluetooth device drivers +# +CONFIG_BT_HCIUSB=m +# CONFIG_BT_HCIUSB_SCO is not set +CONFIG_BT_HCIUART=m +# CONFIG_BT_HCIUART_H4 is not set +# CONFIG_BT_HCIUART_BCSP is not set +CONFIG_BT_HCIBCM203X=m +CONFIG_BT_HCIBPA10X=m +CONFIG_BT_HCIBFUSB=m +# CONFIG_BT_HCIVHCI is not set +# CONFIG_AF_RXRPC is not set + +# +# Wireless +# +# CONFIG_CFG80211 is not set +# CONFIG_WIRELESS_EXT is not set +# CONFIG_MAC80211 is not set +CONFIG_IEEE80211=m +# CONFIG_IEEE80211_DEBUG is not set +CONFIG_IEEE80211_CRYPT_WEP=m +CONFIG_IEEE80211_CRYPT_CCMP=m +# CONFIG_IEEE80211_CRYPT_TKIP is not set +# CONFIG_IEEE80211_SOFTMAC is not set +# CONFIG_RFKILL is not set + +# +# Device Drivers +# + +# +# Generic Driver Options +# +CONFIG_STANDALONE=y +CONFIG_PREVENT_FIRMWARE_BUILD=y +CONFIG_FW_LOADER=y +# CONFIG_DEBUG_DRIVER is not set +# CONFIG_DEBUG_DEVRES is not set +# CONFIG_SYS_HYPERVISOR is not set + +# +# Connector - unified userspace <-> kernelspace linker +# +# CONFIG_CONNECTOR is not set +CONFIG_MTD=y +# CONFIG_MTD_DEBUG is not set +CONFIG_MTD_CONCAT=y +CONFIG_MTD_PARTITIONS=y +# CONFIG_MTD_REDBOOT_PARTS is not set +# CONFIG_MTD_CMDLINE_PARTS is not set +# CONFIG_MTD_AFS_PARTS is not set + +# +# User Modules And Translation Layers +# +CONFIG_MTD_CHAR=y +CONFIG_MTD_BLKDEVS=y +CONFIG_MTD_BLOCK=y +# CONFIG_FTL is not set +# CONFIG_NFTL is not set +# CONFIG_INFTL is not set +# CONFIG_RFD_FTL is not set +# CONFIG_SSFDC is not set + +# +# RAM/ROM/Flash chip drivers +# +# CONFIG_MTD_CFI is not set +# CONFIG_MTD_JEDECPROBE is not set +# CONFIG_MTD_CFI_NOSWAP is not set +# CONFIG_MTD_CFI_BE_BYTE_SWAP is not set +# CONFIG_MTD_CFI_LE_BYTE_SWAP is not set +CONFIG_MTD_MAP_BANK_WIDTH_1=y +CONFIG_MTD_MAP_BANK_WIDTH_2=y +CONFIG_MTD_MAP_BANK_WIDTH_4=y +# CONFIG_MTD_MAP_BANK_WIDTH_8 is not set +# CONFIG_MTD_MAP_BANK_WIDTH_16 is not set +# CONFIG_MTD_MAP_BANK_WIDTH_32 is not set +CONFIG_MTD_CFI_I1=y +CONFIG_MTD_CFI_I2=y +# CONFIG_MTD_CFI_I4 is not set +# CONFIG_MTD_CFI_I8 is not set +# CONFIG_MTD_RAM is not set +# CONFIG_MTD_ROM is not set +# CONFIG_MTD_ABSENT is not set + +# +# Mapping drivers for chip access +# +# CONFIG_MTD_COMPLEX_MAPPINGS is not set +# CONFIG_MTD_SHARP_SL is not set +# CONFIG_MTD_PLATRAM is not set + +# +# Self-contained MTD device drivers +# +# CONFIG_MTD_SLRAM is not set +# CONFIG_MTD_PHRAM is not set +# CONFIG_MTD_MTDRAM is not set +# CONFIG_MTD_BLOCK2MTD is not set + +# +# Disk-On-Chip Device Drivers +# +# CONFIG_MTD_DOC2000 is not set +# CONFIG_MTD_DOC2001 is not set +# CONFIG_MTD_DOC2001PLUS is not set +CONFIG_MTD_NAND=y +# CONFIG_MTD_NAND_VERIFY_WRITE is not set +# CONFIG_MTD_NAND_ECC_SMC is not set +# CONFIG_MTD_NAND_MUSEUM_IDS is not set +# CONFIG_MTD_NAND_H1900 is not set +CONFIG_MTD_NAND_IDS=y +# CONFIG_MTD_NAND_DISKONCHIP is not set +# CONFIG_MTD_NAND_SHARPSL is not set +# CONFIG_MTD_NAND_NANDSIM is not set +CONFIG_MTD_NAND_PLATFORM=y +# CONFIG_MTD_ONENAND is not set + +# +# UBI - Unsorted block images +# +# CONFIG_MTD_UBI is not set + +# +# Parallel port support +# +# CONFIG_PARPORT is not set + +# +# Plug and Play support +# +# CONFIG_PNPACPI is not set + +# +# Block devices +# +# CONFIG_BLK_DEV_COW_COMMON is not set +CONFIG_BLK_DEV_LOOP=y +# CONFIG_BLK_DEV_CRYPTOLOOP is not set +# CONFIG_BLK_DEV_NBD is not set +# CONFIG_BLK_DEV_UB is not set +CONFIG_BLK_DEV_RAM=y +CONFIG_BLK_DEV_RAM_COUNT=16 +CONFIG_BLK_DEV_RAM_SIZE=12000 +CONFIG_BLK_DEV_RAM_BLOCKSIZE=1024 +# CONFIG_CDROM_PKTCDVD is not set +# CONFIG_ATA_OVER_ETH is not set +# CONFIG_IDE is not set + +# +# SCSI device support +# +# CONFIG_RAID_ATTRS is not set +CONFIG_SCSI=y +# CONFIG_SCSI_TGT is not set +# CONFIG_SCSI_NETLINK is not set +# CONFIG_SCSI_PROC_FS is not set + +# +# SCSI support type (disk, tape, CD-ROM) +# +CONFIG_BLK_DEV_SD=y +# CONFIG_CHR_DEV_ST is not set +# CONFIG_CHR_DEV_OSST is not set +# CONFIG_BLK_DEV_SR is not set +# CONFIG_CHR_DEV_SG is not set +# CONFIG_CHR_DEV_SCH is not set + +# +# Some SCSI devices (e.g. CD jukebox) support multiple LUNs +# +# CONFIG_SCSI_MULTI_LUN is not set +# CONFIG_SCSI_CONSTANTS is not set +# CONFIG_SCSI_LOGGING is not set +# CONFIG_SCSI_SCAN_ASYNC is not set +CONFIG_SCSI_WAIT_SCAN=m + +# +# SCSI Transports +# +# CONFIG_SCSI_SPI_ATTRS is not set +# CONFIG_SCSI_FC_ATTRS is not set +# CONFIG_SCSI_ISCSI_ATTRS is not set +# CONFIG_SCSI_SAS_ATTRS is not set +# CONFIG_SCSI_SAS_LIBSAS is not set + +# +# SCSI low-level drivers +# +# CONFIG_ISCSI_TCP is not set +# CONFIG_SCSI_DEBUG is not set +# CONFIG_ATA is not set + +# +# Multi-device support (RAID and LVM) +# +# CONFIG_MD is not set + +# +# Network device support +# +CONFIG_NETDEVICES=y +# CONFIG_DUMMY is not set +# CONFIG_BONDING is not set +# CONFIG_EQUALIZER is not set +# CONFIG_TUN is not set +# CONFIG_PHYLIB is not set + +# +# Ethernet (10 or 100Mbit) +# +CONFIG_NET_ETHERNET=y +CONFIG_MII=y +# CONFIG_SMC91X is not set +CONFIG_DM9000=y +# CONFIG_SMC911X is not set +# CONFIG_NETDEV_1000 is not set +# CONFIG_NETDEV_10000 is not set + +# +# Wireless LAN +# +# CONFIG_WLAN_PRE80211 is not set +# CONFIG_WLAN_80211 is not set + +# +# USB Network Adapters +# +# CONFIG_USB_CATC is not set +# CONFIG_USB_KAWETH is not set +# CONFIG_USB_PEGASUS is not set +# CONFIG_USB_RTL8150 is not set +# CONFIG_USB_USBNET_MII is not set +# CONFIG_USB_USBNET is not set +# CONFIG_WAN is not set +# CONFIG_PPP is not set +# CONFIG_SLIP is not set +# CONFIG_SHAPER is not set +# CONFIG_NETCONSOLE is not set +# CONFIG_NETPOLL is not set +# CONFIG_NET_POLL_CONTROLLER is not set + +# +# ISDN subsystem +# +# CONFIG_ISDN is not set + +# +# Input device support +# +CONFIG_INPUT=y +# CONFIG_INPUT_FF_MEMLESS is not set +# CONFIG_INPUT_POLLDEV is not set + +# +# Userland interfaces +# +CONFIG_INPUT_MOUSEDEV=y +# CONFIG_INPUT_MOUSEDEV_PSAUX is not set +CONFIG_INPUT_MOUSEDEV_SCREEN_X=1024 +CONFIG_INPUT_MOUSEDEV_SCREEN_Y=768 +# CONFIG_INPUT_JOYDEV is not set +# CONFIG_INPUT_TSDEV is not set +CONFIG_INPUT_EVDEV=y +# CONFIG_INPUT_EVBUG is not set + +# +# Input Device Drivers +# +CONFIG_INPUT_KEYBOARD=y +# CONFIG_KEYBOARD_ATKBD is not set +# CONFIG_KEYBOARD_SUNKBD is not set +# CONFIG_KEYBOARD_LKKBD is not set +# CONFIG_KEYBOARD_XTKBD is not set +# CONFIG_KEYBOARD_NEWTON is not set +# CONFIG_KEYBOARD_STOWAWAY is not set +CONFIG_KEYBOARD_PXA27x=m +# CONFIG_KEYBOARD_GPIO is not set +# CONFIG_INPUT_MOUSE is not set +# CONFIG_INPUT_JOYSTICK is not set +# CONFIG_INPUT_TABLET is not set +CONFIG_INPUT_TOUCHSCREEN=y +# CONFIG_TOUCHSCREEN_GUNZE is not set +# CONFIG_TOUCHSCREEN_ELO is not set +# CONFIG_TOUCHSCREEN_MTOUCH is not set +# CONFIG_TOUCHSCREEN_MK712 is not set +# CONFIG_TOUCHSCREEN_PENMOUNT is not set +# CONFIG_TOUCHSCREEN_TOUCHRIGHT is not set +# CONFIG_TOUCHSCREEN_TOUCHWIN is not set +# CONFIG_TOUCHSCREEN_UCB1400 is not set +# CONFIG_TOUCHSCREEN_USB_COMPOSITE is not set +# CONFIG_INPUT_MISC is not set + +# +# Hardware I/O ports +# +CONFIG_SERIO=y +# CONFIG_SERIO_SERPORT is not set +CONFIG_SERIO_LIBPS2=y +# CONFIG_SERIO_RAW is not set +# CONFIG_GAMEPORT is not set + +# +# Character devices +# +CONFIG_VT=y +CONFIG_VT_CONSOLE=y +CONFIG_HW_CONSOLE=y +# CONFIG_VT_HW_CONSOLE_BINDING is not set +# CONFIG_SERIAL_NONSTANDARD is not set + +# +# Serial drivers +# +# CONFIG_SERIAL_8250 is not set + +# +# Non-8250 serial port support +# +CONFIG_SERIAL_PXA=y +CONFIG_SERIAL_PXA_CONSOLE=y +CONFIG_SERIAL_CORE=y +CONFIG_SERIAL_CORE_CONSOLE=y +CONFIG_UNIX98_PTYS=y +CONFIG_LEGACY_PTYS=y +CONFIG_LEGACY_PTY_COUNT=256 + +# +# IPMI +# +# CONFIG_IPMI_HANDLER is not set +# CONFIG_WATCHDOG is not set +CONFIG_HW_RANDOM=m +# CONFIG_NVRAM is not set +# CONFIG_R3964 is not set +# CONFIG_RAW_DRIVER is not set + +# +# TPM devices +# +# CONFIG_TCG_TPM is not set +# CONFIG_I2C is not set + +# +# SPI support +# +# CONFIG_SPI is not set +# CONFIG_SPI_MASTER is not set + +# +# Dallas's 1-wire bus +# +# CONFIG_W1 is not set +# CONFIG_HWMON is not set + +# +# Misc devices +# + +# +# Multifunction device drivers +# +# CONFIG_MFD_SM501 is not set + +# +# LED devices +# +# CONFIG_NEW_LEDS is not set + +# +# LED drivers +# + +# +# LED Triggers +# + +# +# Multimedia devices +# +# CONFIG_VIDEO_DEV is not set +# CONFIG_DVB_CORE is not set +# CONFIG_DAB is not set + +# +# Graphics support +# +# CONFIG_BACKLIGHT_LCD_SUPPORT is not set + +# +# Display device support +# +# CONFIG_DISPLAY_SUPPORT is not set +# CONFIG_VGASTATE is not set +CONFIG_FB=y +# CONFIG_FIRMWARE_EDID is not set +# CONFIG_FB_DDC is not set +CONFIG_FB_CFB_FILLRECT=y +CONFIG_FB_CFB_COPYAREA=y +CONFIG_FB_CFB_IMAGEBLIT=y +# CONFIG_FB_SYS_FILLRECT is not set +# CONFIG_FB_SYS_COPYAREA is not set +# CONFIG_FB_SYS_IMAGEBLIT is not set +# CONFIG_FB_SYS_FOPS is not set +CONFIG_FB_DEFERRED_IO=y +# CONFIG_FB_SVGALIB is not set +# CONFIG_FB_MACMODES is not set +# CONFIG_FB_BACKLIGHT is not set +# CONFIG_FB_MODE_HELPERS is not set +# CONFIG_FB_TILEBLITTING is not set + +# +# Frame buffer hardware drivers +# +# CONFIG_FB_S1D13XXX is not set +CONFIG_FB_PXA=y +# CONFIG_FB_PXA_PARAMETERS is not set +# CONFIG_FB_MBX is not set +# CONFIG_FB_VIRTUAL is not set + +# +# Console display driver support +# +# CONFIG_VGA_CONSOLE is not set +CONFIG_DUMMY_CONSOLE=y +CONFIG_FRAMEBUFFER_CONSOLE=y +# CONFIG_FRAMEBUFFER_CONSOLE_ROTATION is not set +# CONFIG_FONTS is not set +CONFIG_FONT_8x8=y +CONFIG_FONT_8x16=y +CONFIG_LOGO=y +CONFIG_LOGO_LINUX_MONO=y +CONFIG_LOGO_LINUX_VGA16=y +CONFIG_LOGO_LINUX_CLUT224=y + +# +# Sound +# +CONFIG_SOUND=m + +# +# Advanced Linux Sound Architecture +# +CONFIG_SND=m +CONFIG_SND_TIMER=m +CONFIG_SND_PCM=m +# CONFIG_SND_SEQUENCER is not set +CONFIG_SND_OSSEMUL=y +CONFIG_SND_MIXER_OSS=m +CONFIG_SND_PCM_OSS=m +CONFIG_SND_PCM_OSS_PLUGINS=y +# CONFIG_SND_DYNAMIC_MINORS is not set +CONFIG_SND_SUPPORT_OLD_API=y +CONFIG_SND_VERBOSE_PROCFS=y +# CONFIG_SND_VERBOSE_PRINTK is not set +# CONFIG_SND_DEBUG is not set + +# +# Generic devices +# +CONFIG_SND_AC97_CODEC=m +# CONFIG_SND_DUMMY is not set +# CONFIG_SND_MTPAV is not set +# CONFIG_SND_SERIAL_U16550 is not set +# CONFIG_SND_MPU401 is not set + +# +# ALSA ARM devices +# +CONFIG_SND_PXA2XX_PCM=m +CONFIG_SND_PXA2XX_AC97=m + +# +# USB devices +# +# CONFIG_SND_USB_AUDIO is not set +# CONFIG_SND_USB_CAIAQ is not set + +# +# System on Chip audio support +# +# CONFIG_SND_SOC is not set + +# +# Open Sound System +# +# CONFIG_SOUND_PRIME is not set +CONFIG_AC97_BUS=m + +# +# HID Devices +# +CONFIG_HID=y +# CONFIG_HID_DEBUG is not set + +# +# USB Input Devices +# +CONFIG_USB_HID=y +# CONFIG_USB_HIDINPUT_POWERBOOK is not set +# CONFIG_HID_FF is not set +# CONFIG_USB_HIDDEV is not set + +# +# USB support +# +CONFIG_USB_ARCH_HAS_HCD=y +CONFIG_USB_ARCH_HAS_OHCI=y +# CONFIG_USB_ARCH_HAS_EHCI is not set +CONFIG_USB=y +# CONFIG_USB_DEBUG is not set + +# +# Miscellaneous USB options +# +CONFIG_USB_DEVICEFS=y +# CONFIG_USB_DEVICE_CLASS is not set +# CONFIG_USB_DYNAMIC_MINORS is not set +# CONFIG_USB_SUSPEND is not set +# CONFIG_USB_OTG is not set + +# +# USB Host Controller Drivers +# +# CONFIG_USB_ISP116X_HCD is not set +CONFIG_USB_OHCI_HCD=y +# CONFIG_USB_OHCI_BIG_ENDIAN_DESC is not set +# CONFIG_USB_OHCI_BIG_ENDIAN_MMIO is not set +CONFIG_USB_OHCI_LITTLE_ENDIAN=y +# CONFIG_USB_SL811_HCD is not set + +# +# USB Device Class drivers +# +# CONFIG_USB_ACM is not set +# CONFIG_USB_PRINTER is not set + +# +# NOTE: USB_STORAGE enables SCSI, and 'SCSI disk support' +# + +# +# may also be needed; see USB_STORAGE Help for more information +# +CONFIG_USB_STORAGE=y +# CONFIG_USB_STORAGE_DEBUG is not set +# CONFIG_USB_STORAGE_DATAFAB is not set +# CONFIG_USB_STORAGE_FREECOM is not set +# CONFIG_USB_STORAGE_DPCM is not set +# CONFIG_USB_STORAGE_USBAT is not set +# CONFIG_USB_STORAGE_SDDR09 is not set +# CONFIG_USB_STORAGE_SDDR55 is not set +# CONFIG_USB_STORAGE_JUMPSHOT is not set +# CONFIG_USB_STORAGE_ALAUDA is not set +# CONFIG_USB_STORAGE_KARMA is not set +# CONFIG_USB_LIBUSUAL is not set + +# +# USB Imaging devices +# +# CONFIG_USB_MDC800 is not set +# CONFIG_USB_MICROTEK is not set +# CONFIG_USB_MON is not set + +# +# USB port drivers +# + +# +# USB Serial Converter support +# +# CONFIG_USB_SERIAL is not set + +# +# USB Miscellaneous drivers +# +# CONFIG_USB_EMI62 is not set +# CONFIG_USB_EMI26 is not set +# CONFIG_USB_ADUTUX is not set +# CONFIG_USB_AUERSWALD is not set +# CONFIG_USB_RIO500 is not set +# CONFIG_USB_LEGOTOWER is not set +# CONFIG_USB_LCD is not set +# CONFIG_USB_BERRY_CHARGE is not set +# CONFIG_USB_LED is not set +# CONFIG_USB_CYPRESS_CY7C63 is not set +# CONFIG_USB_CYTHERM is not set +# CONFIG_USB_PHIDGET is not set +# CONFIG_USB_IDMOUSE is not set +# CONFIG_USB_FTDI_ELAN is not set +# CONFIG_USB_APPLEDISPLAY is not set +# CONFIG_USB_LD is not set +# CONFIG_USB_TRANCEVIBRATOR is not set +# CONFIG_USB_IOWARRIOR is not set +# CONFIG_USB_TEST is not set + +# +# USB DSL modem support +# + +# +# USB Gadget Support +# +# CONFIG_USB_GADGET is not set +CONFIG_MMC=m +# CONFIG_MMC_DEBUG is not set +# CONFIG_MMC_UNSAFE_RESUME is not set + +# +# MMC/SD Card Drivers +# +CONFIG_MMC_BLOCK=m + +# +# MMC/SD Host Controller Drivers +# +CONFIG_MMC_PXA=m + +# +# Real Time Clock +# +CONFIG_RTC_LIB=y +CONFIG_RTC_CLASS=m + +# +# RTC interfaces +# +CONFIG_RTC_INTF_SYSFS=y +CONFIG_RTC_INTF_PROC=y +CONFIG_RTC_INTF_DEV=y +# CONFIG_RTC_INTF_DEV_UIE_EMUL is not set +# CONFIG_RTC_DRV_TEST is not set + +# +# I2C RTC drivers +# + +# +# SPI RTC drivers +# + +# +# Platform RTC drivers +# +# CONFIG_RTC_DRV_CMOS is not set +# CONFIG_RTC_DRV_DS1553 is not set +# CONFIG_RTC_DRV_DS1742 is not set +# CONFIG_RTC_DRV_M48T86 is not set +CONFIG_RTC_DRV_V3020=m + +# +# on-CPU RTC drivers +# +CONFIG_RTC_DRV_SA1100=m + +# +# File systems +# +CONFIG_EXT2_FS=y +# CONFIG_EXT2_FS_XATTR is not set +# CONFIG_EXT2_FS_XIP is not set +CONFIG_EXT3_FS=y +CONFIG_EXT3_FS_XATTR=y +# CONFIG_EXT3_FS_POSIX_ACL is not set +# CONFIG_EXT3_FS_SECURITY is not set +# CONFIG_EXT4DEV_FS is not set +CONFIG_JBD=y +# CONFIG_JBD_DEBUG is not set +CONFIG_FS_MBCACHE=y +# CONFIG_REISERFS_FS is not set +# CONFIG_JFS_FS is not set +# CONFIG_FS_POSIX_ACL is not set +# CONFIG_XFS_FS is not set +# CONFIG_GFS2_FS is not set +# CONFIG_OCFS2_FS is not set +# CONFIG_MINIX_FS is not set +# CONFIG_ROMFS_FS is not set +CONFIG_INOTIFY=y +CONFIG_INOTIFY_USER=y +# CONFIG_QUOTA is not set +CONFIG_DNOTIFY=y +# CONFIG_AUTOFS_FS is not set +# CONFIG_AUTOFS4_FS is not set +# CONFIG_FUSE_FS is not set + +# +# CD-ROM/DVD Filesystems +# +# CONFIG_ISO9660_FS is not set +# CONFIG_UDF_FS is not set + +# +# DOS/FAT/NT Filesystems +# +CONFIG_FAT_FS=y +CONFIG_MSDOS_FS=y +CONFIG_VFAT_FS=y +CONFIG_FAT_DEFAULT_CODEPAGE=437 +CONFIG_FAT_DEFAULT_IOCHARSET="iso8859-1" +# CONFIG_NTFS_FS is not set + +# +# Pseudo filesystems +# +CONFIG_PROC_FS=y +CONFIG_PROC_SYSCTL=y +CONFIG_SYSFS=y +CONFIG_TMPFS=y +# CONFIG_TMPFS_POSIX_ACL is not set +# CONFIG_HUGETLB_PAGE is not set +CONFIG_RAMFS=y +# CONFIG_CONFIGFS_FS is not set + +# +# Miscellaneous filesystems +# +# CONFIG_ADFS_FS is not set +# CONFIG_AFFS_FS is not set +# CONFIG_HFS_FS is not set +# CONFIG_HFSPLUS_FS is not set +# CONFIG_BEFS_FS is not set +# CONFIG_BFS_FS is not set +# CONFIG_EFS_FS is not set +CONFIG_JFFS2_FS=y +CONFIG_JFFS2_FS_DEBUG=0 +CONFIG_JFFS2_FS_WRITEBUFFER=y +CONFIG_JFFS2_SUMMARY=y +# CONFIG_JFFS2_FS_XATTR is not set +# CONFIG_JFFS2_COMPRESSION_OPTIONS is not set +CONFIG_JFFS2_ZLIB=y +CONFIG_JFFS2_RTIME=y +# CONFIG_JFFS2_RUBIN is not set +# CONFIG_CRAMFS is not set +# CONFIG_VXFS_FS is not set +# CONFIG_HPFS_FS is not set +# CONFIG_QNX4FS_FS is not set +# CONFIG_SYSV_FS is not set +# CONFIG_UFS_FS is not set + +# +# Network File Systems +# +CONFIG_NFS_FS=y +CONFIG_NFS_V3=y +# CONFIG_NFS_V3_ACL is not set +# CONFIG_NFS_V4 is not set +# CONFIG_NFS_DIRECTIO is not set +# CONFIG_NFSD is not set +CONFIG_ROOT_NFS=y +CONFIG_LOCKD=y +CONFIG_LOCKD_V4=y +CONFIG_NFS_COMMON=y +CONFIG_SUNRPC=y +# CONFIG_SUNRPC_BIND34 is not set +# CONFIG_RPCSEC_GSS_KRB5 is not set +# CONFIG_RPCSEC_GSS_SPKM3 is not set +CONFIG_SMB_FS=y +# CONFIG_SMB_NLS_DEFAULT is not set +# CONFIG_CIFS is not set +# CONFIG_NCP_FS is not set +# CONFIG_CODA_FS is not set +# CONFIG_AFS_FS is not set +# CONFIG_9P_FS is not set + +# +# Partition Types +# +# CONFIG_PARTITION_ADVANCED is not set +CONFIG_MSDOS_PARTITION=y + +# +# Native Language Support +# +CONFIG_NLS=y +CONFIG_NLS_DEFAULT="iso8859-1" +CONFIG_NLS_CODEPAGE_437=y +# CONFIG_NLS_CODEPAGE_737 is not set +# CONFIG_NLS_CODEPAGE_775 is not set +# CONFIG_NLS_CODEPAGE_850 is not set +# CONFIG_NLS_CODEPAGE_852 is not set +# CONFIG_NLS_CODEPAGE_855 is not set +# CONFIG_NLS_CODEPAGE_857 is not set +# CONFIG_NLS_CODEPAGE_860 is not set +# CONFIG_NLS_CODEPAGE_861 is not set +# CONFIG_NLS_CODEPAGE_862 is not set +# CONFIG_NLS_CODEPAGE_863 is not set +# CONFIG_NLS_CODEPAGE_864 is not set +# CONFIG_NLS_CODEPAGE_865 is not set +# CONFIG_NLS_CODEPAGE_866 is not set +# CONFIG_NLS_CODEPAGE_869 is not set +# CONFIG_NLS_CODEPAGE_936 is not set +# CONFIG_NLS_CODEPAGE_950 is not set +# CONFIG_NLS_CODEPAGE_932 is not set +# CONFIG_NLS_CODEPAGE_949 is not set +# CONFIG_NLS_CODEPAGE_874 is not set +# CONFIG_NLS_ISO8859_8 is not set +# CONFIG_NLS_CODEPAGE_1250 is not set +# CONFIG_NLS_CODEPAGE_1251 is not set +# CONFIG_NLS_ASCII is not set +CONFIG_NLS_ISO8859_1=y +# CONFIG_NLS_ISO8859_2 is not set +# CONFIG_NLS_ISO8859_3 is not set +# CONFIG_NLS_ISO8859_4 is not set +# CONFIG_NLS_ISO8859_5 is not set +# CONFIG_NLS_ISO8859_6 is not set +# CONFIG_NLS_ISO8859_7 is not set +# CONFIG_NLS_ISO8859_9 is not set +# CONFIG_NLS_ISO8859_13 is not set +# CONFIG_NLS_ISO8859_14 is not set +# CONFIG_NLS_ISO8859_15 is not set +# CONFIG_NLS_KOI8_R is not set +# CONFIG_NLS_KOI8_U is not set +CONFIG_NLS_UTF8=y + +# +# Distributed Lock Manager +# +# CONFIG_DLM is not set + +# +# Profiling support +# +# CONFIG_PROFILING is not set + +# +# Kernel hacking +# +# CONFIG_PRINTK_TIME is not set +CONFIG_ENABLE_MUST_CHECK=y +CONFIG_MAGIC_SYSRQ=y +# CONFIG_UNUSED_SYMBOLS is not set +# CONFIG_DEBUG_FS is not set +# CONFIG_HEADERS_CHECK is not set +CONFIG_DEBUG_KERNEL=y +# CONFIG_DEBUG_SHIRQ is not set +# CONFIG_DETECT_SOFTLOCKUP is not set +# CONFIG_SCHEDSTATS is not set +# CONFIG_TIMER_STATS is not set +# CONFIG_DEBUG_SLAB is not set +# CONFIG_DEBUG_RT_MUTEXES is not set +# CONFIG_RT_MUTEX_TESTER is not set +# CONFIG_DEBUG_SPINLOCK is not set +# CONFIG_DEBUG_MUTEXES is not set +# CONFIG_DEBUG_LOCK_ALLOC is not set +# CONFIG_PROVE_LOCKING is not set +# CONFIG_DEBUG_SPINLOCK_SLEEP is not set +# CONFIG_DEBUG_LOCKING_API_SELFTESTS is not set +# CONFIG_DEBUG_KOBJECT is not set +# CONFIG_DEBUG_BUGVERBOSE is not set +CONFIG_DEBUG_INFO=y +# CONFIG_DEBUG_VM is not set +# CONFIG_DEBUG_LIST is not set +CONFIG_FRAME_POINTER=y +CONFIG_FORCED_INLINING=y +# CONFIG_RCU_TORTURE_TEST is not set +# CONFIG_FAULT_INJECTION is not set +CONFIG_DEBUG_USER=y +CONFIG_DEBUG_ERRORS=y +CONFIG_DEBUG_LL=y +# CONFIG_DEBUG_ICEDCC is not set + +# +# Security options +# +# CONFIG_KEYS is not set +# CONFIG_SECURITY is not set + +# +# Cryptographic options +# +CONFIG_CRYPTO=y +CONFIG_CRYPTO_ALGAPI=m +CONFIG_CRYPTO_BLKCIPHER=m +CONFIG_CRYPTO_MANAGER=m +# CONFIG_CRYPTO_HMAC is not set +# CONFIG_CRYPTO_XCBC is not set +# CONFIG_CRYPTO_NULL is not set +# CONFIG_CRYPTO_MD4 is not set +# CONFIG_CRYPTO_MD5 is not set +# CONFIG_CRYPTO_SHA1 is not set +# CONFIG_CRYPTO_SHA256 is not set +# CONFIG_CRYPTO_SHA512 is not set +# CONFIG_CRYPTO_WP512 is not set +# CONFIG_CRYPTO_TGR192 is not set +# CONFIG_CRYPTO_GF128MUL is not set +CONFIG_CRYPTO_ECB=m +CONFIG_CRYPTO_CBC=m +CONFIG_CRYPTO_PCBC=m +# CONFIG_CRYPTO_LRW is not set +# CONFIG_CRYPTO_CRYPTD is not set +# CONFIG_CRYPTO_DES is not set +# CONFIG_CRYPTO_FCRYPT is not set +# CONFIG_CRYPTO_BLOWFISH is not set +# CONFIG_CRYPTO_TWOFISH is not set +# CONFIG_CRYPTO_SERPENT is not set +CONFIG_CRYPTO_AES=m +# CONFIG_CRYPTO_CAST5 is not set +# CONFIG_CRYPTO_CAST6 is not set +# CONFIG_CRYPTO_TEA is not set +CONFIG_CRYPTO_ARC4=m +# CONFIG_CRYPTO_KHAZAD is not set +# CONFIG_CRYPTO_ANUBIS is not set +# CONFIG_CRYPTO_DEFLATE is not set +# CONFIG_CRYPTO_MICHAEL_MIC is not set +# CONFIG_CRYPTO_CRC32C is not set +# CONFIG_CRYPTO_CAMELLIA is not set +# CONFIG_CRYPTO_TEST is not set + +# +# Hardware crypto devices +# + +# +# Library routines +# +CONFIG_BITREVERSE=y +# CONFIG_CRC_CCITT is not set +# CONFIG_CRC16 is not set +# CONFIG_CRC_ITU_T is not set +CONFIG_CRC32=y +# CONFIG_LIBCRC32C is not set +CONFIG_ZLIB_INFLATE=y +CONFIG_ZLIB_DEFLATE=y +CONFIG_PLIST=y +CONFIG_HAS_IOMEM=y +CONFIG_HAS_IOPORT=y +CONFIG_HAS_DMA=y diff --git a/trunk/arch/arm/configs/footbridge_defconfig b/trunk/arch/arm/configs/footbridge_defconfig index 2a612d23120b..299dc22294a0 100644 --- a/trunk/arch/arm/configs/footbridge_defconfig +++ b/trunk/arch/arm/configs/footbridge_defconfig @@ -748,7 +748,6 @@ CONFIG_I2C=m # CONFIG_I2C_ELEKTOR is not set # CONFIG_I2C_I801 is not set # CONFIG_I2C_I810 is not set -# CONFIG_I2C_ISA is not set # CONFIG_I2C_NFORCE2 is not set # CONFIG_I2C_PARPORT is not set # CONFIG_I2C_PARPORT_LIGHT is not set diff --git a/trunk/arch/arm/configs/neponset_defconfig b/trunk/arch/arm/configs/neponset_defconfig index e86794a10fc0..92ccdc6492f7 100644 --- a/trunk/arch/arm/configs/neponset_defconfig +++ b/trunk/arch/arm/configs/neponset_defconfig @@ -698,7 +698,6 @@ CONFIG_I2C_ALGOBIT=y # I2C Hardware Bus support # # CONFIG_I2C_ELEKTOR is not set -# CONFIG_I2C_ISA is not set # CONFIG_I2C_PARPORT_LIGHT is not set # CONFIG_I2C_STUB is not set # CONFIG_I2C_PCA_ISA is not set diff --git a/trunk/arch/arm/configs/picotux200_defconfig b/trunk/arch/arm/configs/picotux200_defconfig index 339c48953a62..3c0c4f192dc1 100644 --- a/trunk/arch/arm/configs/picotux200_defconfig +++ b/trunk/arch/arm/configs/picotux200_defconfig @@ -735,7 +735,6 @@ CONFIG_I2C_CHARDEV=m # I2C Hardware Bus support # CONFIG_I2C_AT91=m -CONFIG_I2C_ISA=m # CONFIG_I2C_OCORES is not set # CONFIG_I2C_PARPORT_LIGHT is not set # CONFIG_I2C_STUB is not set diff --git a/trunk/arch/arm/configs/rpc_defconfig b/trunk/arch/arm/configs/rpc_defconfig index bc091264d354..8452dc8c7cc3 100644 --- a/trunk/arch/arm/configs/rpc_defconfig +++ b/trunk/arch/arm/configs/rpc_defconfig @@ -558,7 +558,6 @@ CONFIG_I2C_ALGOBIT=y # # I2C Hardware Bus support # -# CONFIG_I2C_ISA is not set # CONFIG_I2C_PARPORT is not set # CONFIG_I2C_PARPORT_LIGHT is not set # CONFIG_I2C_STUB is not set diff --git a/trunk/arch/arm/configs/s3c2410_defconfig b/trunk/arch/arm/configs/s3c2410_defconfig index a850da377a29..f8a1645b3d4a 100644 --- a/trunk/arch/arm/configs/s3c2410_defconfig +++ b/trunk/arch/arm/configs/s3c2410_defconfig @@ -138,11 +138,11 @@ CONFIG_ARCH_S3C2410=y CONFIG_PLAT_S3C24XX=y CONFIG_CPU_S3C244X=y CONFIG_PM_SIMTEC=y -# CONFIG_S3C2410_BOOT_WATCHDOG is not set -# CONFIG_S3C2410_BOOT_ERROR_RESET is not set +# CONFIG_S3C_BOOT_WATCHDOG is not set +# CONFIG_S3C_BOOT_ERROR_RESET is not set # CONFIG_S3C2410_PM_DEBUG is not set # CONFIG_S3C2410_PM_CHECK is not set -CONFIG_S3C2410_LOWLEVEL_UART_PORT=0 +CONFIG_S3C_LOWLEVEL_UART_PORT=0 CONFIG_S3C2410_DMA=y # CONFIG_S3C2410_DMA_DEBUG is not set CONFIG_MACH_SMDK=y @@ -826,7 +826,6 @@ CONFIG_I2C_ALGOBIT=m # I2C Hardware Bus support # # CONFIG_I2C_ELEKTOR is not set -CONFIG_I2C_ISA=m # CONFIG_I2C_OCORES is not set # CONFIG_I2C_PARPORT is not set # CONFIG_I2C_PARPORT_LIGHT is not set @@ -1393,8 +1392,8 @@ CONFIG_DEBUG_USER=y # CONFIG_DEBUG_ERRORS is not set CONFIG_DEBUG_LL=y # CONFIG_DEBUG_ICEDCC is not set -CONFIG_DEBUG_S3C2410_PORT=y -CONFIG_DEBUG_S3C2410_UART=0 +CONFIG_DEBUG_S3C_PORT=y +CONFIG_DEBUG_S3C_UART=0 # # Security options diff --git a/trunk/arch/arm/kernel/vmlinux.lds.S b/trunk/arch/arm/kernel/vmlinux.lds.S index 2b7a8f5d8cf2..5ff5406666b4 100644 --- a/trunk/arch/arm/kernel/vmlinux.lds.S +++ b/trunk/arch/arm/kernel/vmlinux.lds.S @@ -66,6 +66,7 @@ SECTIONS . = ALIGN(4096); __per_cpu_start = .; *(.data.percpu) + *(.data.percpu.shared_aligned) __per_cpu_end = .; #ifndef CONFIG_XIP_KERNEL __init_begin = _stext; diff --git a/trunk/arch/arm/mach-at91/at91rm9200_devices.c b/trunk/arch/arm/mach-at91/at91rm9200_devices.c index 70599bcf451c..0417c165d50d 100644 --- a/trunk/arch/arm/mach-at91/at91rm9200_devices.c +++ b/trunk/arch/arm/mach-at91/at91rm9200_devices.c @@ -477,7 +477,7 @@ void __init at91_add_device_i2c(void) {} * SPI * -------------------------------------------------------------------- */ -#if defined(CONFIG_SPI_AT91) || defined(CONFIG_SPI_AT91_MODULE) || defined(CONFIG_AT91_SPI) || defined(CONFIG_AT91_SPI_MODULE) +#if defined(CONFIG_SPI_ATMEL) || defined(CONFIG_SPI_ATMEL_MODULE) static u64 spi_dmamask = 0xffffffffUL; static struct resource spi_resources[] = { @@ -494,7 +494,7 @@ static struct resource spi_resources[] = { }; static struct platform_device at91rm9200_spi_device = { - .name = "at91_spi", + .name = "atmel_spi", .id = 0, .dev = { .dma_mask = &spi_dmamask, @@ -522,18 +522,14 @@ void __init at91_add_device_spi(struct spi_board_info *devices, int nr_devices) else cs_pin = spi_standard_cs[devices[i].chip_select]; -#ifdef CONFIG_SPI_AT91_MANUAL_CS + /* enable chip-select pin */ at91_set_gpio_output(cs_pin, 1); -#else - at91_set_A_periph(cs_pin, 0); -#endif /* pass chip-select pin to driver */ devices[i].controller_data = (void *) cs_pin; } spi_register_board_info(devices, nr_devices); - at91_clock_associate("spi_clk", &at91rm9200_spi_device.dev, "spi"); platform_device_register(&at91rm9200_spi_device); } #else diff --git a/trunk/arch/arm/mach-davinci/time.c b/trunk/arch/arm/mach-davinci/time.c index 4d8425de6922..e96a3dcdc1a7 100644 --- a/trunk/arch/arm/mach-davinci/time.c +++ b/trunk/arch/arm/mach-davinci/time.c @@ -285,6 +285,8 @@ static void davinci_set_mode(enum clock_event_mode mode, case CLOCK_EVT_MODE_SHUTDOWN: t->opts = TIMER_OPTS_DISABLED; break; + case CLOCK_EVT_MODE_RESUME: + break; } } diff --git a/trunk/arch/arm/mach-imx/time.c b/trunk/arch/arm/mach-imx/time.c index 010f6fa984a6..d86d124aea22 100644 --- a/trunk/arch/arm/mach-imx/time.c +++ b/trunk/arch/arm/mach-imx/time.c @@ -159,6 +159,7 @@ static void imx_set_mode(enum clock_event_mode mode, struct clock_event_device * break; case CLOCK_EVT_MODE_SHUTDOWN: case CLOCK_EVT_MODE_UNUSED: + case CLOCK_EVT_MODE_RESUME: /* Left event sources disabled, no more interrupts appears */ break; } diff --git a/trunk/arch/arm/mach-iop13xx/pci.c b/trunk/arch/arm/mach-iop13xx/pci.c index 9d63d7f260ca..99d94cb1bafd 100644 --- a/trunk/arch/arm/mach-iop13xx/pci.c +++ b/trunk/arch/arm/mach-iop13xx/pci.c @@ -1002,11 +1002,10 @@ int iop13xx_pci_setup(int nr, struct pci_sys_data *sys) if (nr > 1) return 0; - res = kmalloc(sizeof(struct resource) * 2, GFP_KERNEL); + res = kcalloc(2, sizeof(struct resource), GFP_KERNEL); if (!res) panic("PCI: unable to alloc resources"); - memset(res, 0, sizeof(struct resource) * 2); /* 'nr' assumptions: * ATUX is always 0 diff --git a/trunk/arch/arm/mach-iop32x/Kconfig b/trunk/arch/arm/mach-iop32x/Kconfig index 9bb02b6d7ae1..dbe07c9472ed 100644 --- a/trunk/arch/arm/mach-iop32x/Kconfig +++ b/trunk/arch/arm/mach-iop32x/Kconfig @@ -42,6 +42,13 @@ config IOP3XX_ATU Say N if the IOP is an add in card, the host system owns the PCI bus in this case. +config MACH_EM7210 + bool "Enable support for the Lanner EM7210" + help + Say Y here if you want to run your kernel on the Lanner EM7210 + board. Say also Y here if you have a SS4000e Baxter Creek NAS + appliance." + endmenu endif diff --git a/trunk/arch/arm/mach-iop32x/Makefile b/trunk/arch/arm/mach-iop32x/Makefile index 7b05b37e1f94..cfdf8a137c2b 100644 --- a/trunk/arch/arm/mach-iop32x/Makefile +++ b/trunk/arch/arm/mach-iop32x/Makefile @@ -11,3 +11,4 @@ obj-$(CONFIG_MACH_GLANTANK) += glantank.o obj-$(CONFIG_ARCH_IQ80321) += iq80321.o obj-$(CONFIG_ARCH_IQ31244) += iq31244.o obj-$(CONFIG_MACH_N2100) += n2100.o +obj-$(CONFIG_MACH_EM7210) += em7210.o diff --git a/trunk/arch/arm/mach-iop32x/em7210.c b/trunk/arch/arm/mach-iop32x/em7210.c new file mode 100644 index 000000000000..c947152f9a3c --- /dev/null +++ b/trunk/arch/arm/mach-iop32x/em7210.c @@ -0,0 +1,215 @@ +/* + * arch/arm/mach-iop32x/em7210.c + * + * Board support code for the Lanner EM7210 platforms. + * + * Based on arch/arm/mach-iop32x/iq31244.c file. + * + * Copyright (C) 2007 Arnaud Patard + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License version 2 as + * published by the Free Software Foundation. + * + */ + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +static void __init em7210_timer_init(void) +{ + /* http://www.kwaak.net/fotos/fotos-nas/slide_24.html */ + /* 33.333 MHz crystal. */ + iop_init_time(200000000); +} + +static struct sys_timer em7210_timer = { + .init = em7210_timer_init, + .offset = iop_gettimeoffset, +}; + +/* + * EM7210 RTC + */ +static struct i2c_board_info __initdata em7210_i2c_devices[] = { + { + I2C_BOARD_INFO("rtc-rs5c372", 0x32), + .type = "rs5c372a", + }, +}; + +/* + * EM7210 I/O + */ +static struct map_desc em7210_io_desc[] __initdata = { + { /* on-board devices */ + .virtual = IQ31244_UART, + .pfn = __phys_to_pfn(IQ31244_UART), + .length = 0x00100000, + .type = MT_DEVICE, + }, +}; + +void __init em7210_map_io(void) +{ + iop3xx_map_io(); + iotable_init(em7210_io_desc, ARRAY_SIZE(em7210_io_desc)); +} + + +/* + * EM7210 PCI + */ +#define INTA IRQ_IOP32X_XINT0 +#define INTB IRQ_IOP32X_XINT1 +#define INTC IRQ_IOP32X_XINT2 +#define INTD IRQ_IOP32X_XINT3 + +static int __init +em7210_pci_map_irq(struct pci_dev *dev, u8 slot, u8 pin) +{ + static int pci_irq_table[][4] = { + /* + * PCI IDSEL/INTPIN->INTLINE + * A B C D + */ + {INTB, INTB, INTB, INTB}, /* console / uart */ + {INTA, INTA, INTA, INTA}, /* 1st 82541 */ + {INTD, INTD, INTD, INTD}, /* 2nd 82541 */ + {INTC, INTC, INTC, INTC}, /* GD31244 */ + {INTD, INTA, INTA, INTA}, /* mini-PCI */ + {INTD, INTC, INTA, INTA}, /* NEC USB */ + }; + + if (pin < 1 || pin > 4) + return -1; + + return pci_irq_table[slot % 6][pin - 1]; +} + +static struct hw_pci em7210_pci __initdata = { + .swizzle = pci_std_swizzle, + .nr_controllers = 1, + .setup = iop3xx_pci_setup, + .preinit = iop3xx_pci_preinit, + .scan = iop3xx_pci_scan_bus, + .map_irq = em7210_pci_map_irq, +}; + +static int __init em7210_pci_init(void) +{ + if (machine_is_em7210()) + pci_common_init(&em7210_pci); + + return 0; +} + +subsys_initcall(em7210_pci_init); + + +/* + * EM7210 Flash + */ +static struct physmap_flash_data em7210_flash_data = { + .width = 2, +}; + +static struct resource em7210_flash_resource = { + .start = 0xf0000000, + .end = 0xf1ffffff, + .flags = IORESOURCE_MEM, +}; + +static struct platform_device em7210_flash_device = { + .name = "physmap-flash", + .id = 0, + .dev = { + .platform_data = &em7210_flash_data, + }, + .num_resources = 1, + .resource = &em7210_flash_resource, +}; + + +/* + * EM7210 UART + * The physical address of the serial port is 0xfe800000, + * so it can be used for physical and virtual address. + */ +static struct plat_serial8250_port em7210_serial_port[] = { + { + .mapbase = IQ31244_UART, + .membase = (char *)IQ31244_UART, + .irq = IRQ_IOP32X_XINT1, + .flags = UPF_SKIP_TEST, + .iotype = UPIO_MEM, + .regshift = 0, + .uartclk = 1843200, + }, + { }, +}; + +static struct resource em7210_uart_resource = { + .start = IQ31244_UART, + .end = IQ31244_UART + 7, + .flags = IORESOURCE_MEM, +}; + +static struct platform_device em7210_serial_device = { + .name = "serial8250", + .id = PLAT8250_DEV_PLATFORM, + .dev = { + .platform_data = em7210_serial_port, + }, + .num_resources = 1, + .resource = &em7210_uart_resource, +}; + +void em7210_power_off(void) +{ + *IOP3XX_GPOE &= 0xfe; + *IOP3XX_GPOD |= 0x01; +} + +static void __init em7210_init_machine(void) +{ + platform_device_register(&em7210_serial_device); + platform_device_register(&iop3xx_i2c0_device); + platform_device_register(&iop3xx_i2c1_device); + platform_device_register(&em7210_flash_device); + platform_device_register(&iop3xx_dma_0_channel); + platform_device_register(&iop3xx_dma_1_channel); + + i2c_register_board_info(0, em7210_i2c_devices, + ARRAY_SIZE(em7210_i2c_devices)); + + + pm_power_off = em7210_power_off; +} + +MACHINE_START(EM7210, "Lanner EM7210") + .phys_io = IQ31244_UART, + .io_pg_offst = ((IQ31244_UART) >> 18) & 0xfffc, + .boot_params = 0xa0000100, + .map_io = em7210_map_io, + .init_irq = iop32x_init_irq, + .timer = &em7210_timer, + .init_machine = em7210_init_machine, +MACHINE_END diff --git a/trunk/arch/arm/mach-iop32x/irq.c b/trunk/arch/arm/mach-iop32x/irq.c index c971171c2905..55cf0162e8c1 100644 --- a/trunk/arch/arm/mach-iop32x/irq.c +++ b/trunk/arch/arm/mach-iop32x/irq.c @@ -63,7 +63,8 @@ void __init iop32x_init_irq(void) if (machine_is_glantank() || machine_is_iq80321() || machine_is_iq31244() || - machine_is_n2100()) + machine_is_n2100() || + machine_is_em7210()) *IOP3XX_PCIIRSR = 0x0f; for (i = 0; i < NR_IRQS; i++) { diff --git a/trunk/arch/arm/mach-ixp4xx/common.c b/trunk/arch/arm/mach-ixp4xx/common.c index 8112f726ffa0..c1271c449246 100644 --- a/trunk/arch/arm/mach-ixp4xx/common.c +++ b/trunk/arch/arm/mach-ixp4xx/common.c @@ -188,7 +188,7 @@ static int ixp4xx_set_irq_type(unsigned int irq, unsigned int type) *int_reg |= (int_style << (line * IXP4XX_GPIO_STYLE_SIZE)); /* Configure the line as an input */ - gpio_line_config(line, IXP4XX_GPIO_IN); + gpio_line_config(irq2gpio[irq], IXP4XX_GPIO_IN); return 0; } @@ -459,6 +459,8 @@ static void ixp4xx_set_mode(enum clock_event_mode mode, default: osrt = opts = 0; break; + case CLOCK_EVT_MODE_RESUME: + break; } *IXP4XX_OSRT1 = osrt | opts; diff --git a/trunk/arch/arm/mach-ks8695/irq.c b/trunk/arch/arm/mach-ks8695/irq.c index 2407bba00547..4c3ab43e1046 100644 --- a/trunk/arch/arm/mach-ks8695/irq.c +++ b/trunk/arch/arm/mach-ks8695/irq.c @@ -23,7 +23,6 @@ #include #include #include -#include #include #include diff --git a/trunk/arch/arm/mach-mx3/Kconfig b/trunk/arch/arm/mach-mx3/Kconfig new file mode 100644 index 000000000000..5fe8606cac08 --- /dev/null +++ b/trunk/arch/arm/mach-mx3/Kconfig @@ -0,0 +1,12 @@ +menu "MX3 Options" + depends on ARCH_MX3 + +config MACH_MX31ADS + bool "Support MX31ADS platforms" + default y + help + Include support for MX31ADS platform. This includes specific + configurations for the board and its peripherals. + +endmenu + diff --git a/trunk/arch/arm/mach-mx3/Makefile b/trunk/arch/arm/mach-mx3/Makefile new file mode 100644 index 000000000000..cbec997f332a --- /dev/null +++ b/trunk/arch/arm/mach-mx3/Makefile @@ -0,0 +1,8 @@ +# +# Makefile for the linux kernel. +# + +# Object file lists. + +obj-y := mm.o time.o +obj-$(CONFIG_MACH_MX31ADS) += mx31ads.o diff --git a/trunk/arch/arm/mach-mx3/Makefile.boot b/trunk/arch/arm/mach-mx3/Makefile.boot new file mode 100644 index 000000000000..e1dd366f836b --- /dev/null +++ b/trunk/arch/arm/mach-mx3/Makefile.boot @@ -0,0 +1,3 @@ + zreladdr-y := 0x80008000 +params_phys-y := 0x80000100 +initrd_phys-y := 0x80800000 diff --git a/trunk/arch/arm/mach-mx3/mm.c b/trunk/arch/arm/mach-mx3/mm.c new file mode 100644 index 000000000000..41dad485ded9 --- /dev/null +++ b/trunk/arch/arm/mach-mx3/mm.c @@ -0,0 +1,64 @@ +/* + * Copyright (C) 1999,2000 Arm Limited + * Copyright (C) 2000 Deep Blue Solutions Ltd + * Copyright (C) 2002 Shane Nay (shane@minirl.com) + * Copyright 2005-2007 Freescale Semiconductor, Inc. All Rights Reserved. + * - add MX31 specific definitions + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + */ + +#include +#include +#include +#include +#include +#include + +/*! + * @file mm.c + * + * @brief This file creates static virtual to physical mappings, common to all MX3 boards. + * + * @ingroup Memory + */ + +/*! + * This table defines static virtual address mappings for I/O regions. + * These are the mappings common across all MX3 boards. + */ +static struct map_desc mxc_io_desc[] __initdata = { + { + .virtual = X_MEMC_BASE_ADDR_VIRT, + .pfn = __phys_to_pfn(X_MEMC_BASE_ADDR), + .length = X_MEMC_SIZE, + .type = MT_DEVICE + }, { + .virtual = AVIC_BASE_ADDR_VIRT, + .pfn = __phys_to_pfn(AVIC_BASE_ADDR), + .length = AVIC_SIZE, + .type = MT_NONSHARED_DEVICE + }, +}; + +/*! + * This function initializes the memory map. It is called during the + * system startup to create static physical to virtual memory mappings + * for the IO modules. + */ +void __init mxc_map_io(void) +{ + iotable_init(mxc_io_desc, ARRAY_SIZE(mxc_io_desc)); +} diff --git a/trunk/arch/arm/mach-mx3/mx31ads.c b/trunk/arch/arm/mach-mx3/mx31ads.c new file mode 100644 index 000000000000..7e89bdc23a9f --- /dev/null +++ b/trunk/arch/arm/mach-mx3/mx31ads.c @@ -0,0 +1,142 @@ +/* + * Copyright (C) 2000 Deep Blue Solutions Ltd + * Copyright (C) 2002 Shane Nay (shane@minirl.com) + * Copyright 2005-2007 Freescale Semiconductor, Inc. All Rights Reserved. + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + */ + +#include +#include +#include +#include + +#include +#include +#include +#include +#include +#include + +/*! + * @file mx31ads.c + * + * @brief This file contains the board-specific initialization routines. + * + * @ingroup System + */ + +#if defined(CONFIG_SERIAL_8250) || defined(CONFIG_SERIAL_8250_MODULE) +/*! + * The serial port definition structure. + */ +static struct plat_serial8250_port serial_platform_data[] = { + { + .membase = (void *)(PBC_BASE_ADDRESS + PBC_SC16C652_UARTA), + .mapbase = (unsigned long)(CS4_BASE_ADDR + PBC_SC16C652_UARTA), + .irq = EXPIO_INT_XUART_INTA, + .uartclk = 14745600, + .regshift = 0, + .iotype = UPIO_MEM, + .flags = UPF_BOOT_AUTOCONF | UPF_SKIP_TEST | UPF_AUTO_IRQ, + }, { + .membase = (void *)(PBC_BASE_ADDRESS + PBC_SC16C652_UARTB), + .mapbase = (unsigned long)(CS4_BASE_ADDR + PBC_SC16C652_UARTB), + .irq = EXPIO_INT_XUART_INTB, + .uartclk = 14745600, + .regshift = 0, + .iotype = UPIO_MEM, + .flags = UPF_BOOT_AUTOCONF | UPF_SKIP_TEST | UPF_AUTO_IRQ, + }, + {}, +}; + +static struct platform_device serial_device = { + .name = "serial8250", + .id = 0, + .dev = { + .platform_data = serial_platform_data, + }, +}; + +static int __init mxc_init_extuart(void) +{ + return platform_device_register(&serial_device); +} +#else +static inline int mxc_init_extuart(void) +{ + return 0; +} +#endif + +/*! + * This structure defines static mappings for the i.MX31ADS board. + */ +static struct map_desc mx31ads_io_desc[] __initdata = { + { + .virtual = AIPS1_BASE_ADDR_VIRT, + .pfn = __phys_to_pfn(AIPS1_BASE_ADDR), + .length = AIPS1_SIZE, + .type = MT_NONSHARED_DEVICE + }, { + .virtual = SPBA0_BASE_ADDR_VIRT, + .pfn = __phys_to_pfn(SPBA0_BASE_ADDR), + .length = SPBA0_SIZE, + .type = MT_NONSHARED_DEVICE + }, { + .virtual = AIPS2_BASE_ADDR_VIRT, + .pfn = __phys_to_pfn(AIPS2_BASE_ADDR), + .length = AIPS2_SIZE, + .type = MT_NONSHARED_DEVICE + }, { + .virtual = CS4_BASE_ADDR_VIRT, + .pfn = __phys_to_pfn(CS4_BASE_ADDR), + .length = CS4_SIZE / 2, + .type = MT_DEVICE + }, +}; + +/*! + * Set up static virtual mappings. + */ +void __init mx31ads_map_io(void) +{ + mxc_map_io(); + iotable_init(mx31ads_io_desc, ARRAY_SIZE(mx31ads_io_desc)); +} + +/*! + * Board specific initialization. + */ +static void __init mxc_board_init(void) +{ + mxc_init_extuart(); +} + +/* + * The following uses standard kernel macros defined in arch.h in order to + * initialize __mach_desc_MX31ADS data structure. + */ +MACHINE_START(MX31ADS, "Freescale MX31ADS") + /* Maintainer: Freescale Semiconductor, Inc. */ + .phys_io = AIPS1_BASE_ADDR, + .io_pg_offst = ((AIPS1_BASE_ADDR_VIRT) >> 18) & 0xfffc, + .boot_params = PHYS_OFFSET + 0x100, + .map_io = mx31ads_map_io, + .init_irq = mxc_init_irq, + .init_machine = mxc_board_init, + .timer = &mxc_timer, +MACHINE_END diff --git a/trunk/arch/arm/mach-mx3/time.c b/trunk/arch/arm/mach-mx3/time.c new file mode 100644 index 000000000000..e81fb5c5d7c3 --- /dev/null +++ b/trunk/arch/arm/mach-mx3/time.c @@ -0,0 +1,152 @@ +/* + * System Timer Interrupt reconfigured to run in free-run mode. + * Author: Vitaly Wool + * Copyright 2004 MontaVista Software Inc. + * Copyright 2004-2007 Freescale Semiconductor, Inc. All Rights Reserved. + */ + +/* + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License version 2 as + * published by the Free Software Foundation. + */ + +/*! + * @file time.c + * @brief This file contains OS tick and wdog timer implementations. + * + * This file contains OS tick and wdog timer implementations. + * + * @ingroup Timers + */ + +#include +#include +#include +#include +#include +#include +#include +#include + +/*! + * This is the timer interrupt service routine to do required tasks. + * It also services the WDOG timer at the frequency of twice per WDOG + * timeout value. For example, if the WDOG's timeout value is 4 (2 + * seconds since the WDOG runs at 0.5Hz), it will be serviced once + * every 2/2=1 second. + * + * @param irq GPT interrupt source number (not used) + * @param dev_id this parameter is not used + * @return always returns \b IRQ_HANDLED as defined in + * include/linux/interrupt.h. + */ +static irqreturn_t mxc_timer_interrupt(int irq, void *dev_id) +{ + unsigned int next_match; + + write_seqlock(&xtime_lock); + + if (__raw_readl(MXC_GPT_GPTSR) & GPTSR_OF1) { + do { + timer_tick(); + next_match = __raw_readl(MXC_GPT_GPTOCR1) + LATCH; + __raw_writel(GPTSR_OF1, MXC_GPT_GPTSR); + __raw_writel(next_match, MXC_GPT_GPTOCR1); + } while ((signed long)(next_match - + __raw_readl(MXC_GPT_GPTCNT)) <= 0); + } + + write_sequnlock(&xtime_lock); + + return IRQ_HANDLED; +} + +/*! + * This function is used to obtain the number of microseconds since the last + * timer interrupt. Note that interrupts is disabled by do_gettimeofday(). + * + * @return the number of microseconds since the last timer interrupt. + */ +static unsigned long mxc_gettimeoffset(void) +{ + unsigned long ticks_to_match, elapsed, usec, tick_usec, i; + + /* Get ticks before next timer match */ + ticks_to_match = + __raw_readl(MXC_GPT_GPTOCR1) - __raw_readl(MXC_GPT_GPTCNT); + + /* We need elapsed ticks since last match */ + elapsed = LATCH - ticks_to_match; + + /* Now convert them to usec */ + /* Insure no overflow when calculating the usec below */ + for (i = 1, tick_usec = tick_nsec / 1000;; i *= 2) { + tick_usec /= i; + if ((0xFFFFFFFF / tick_usec) > elapsed) + break; + } + usec = (unsigned long)(elapsed * tick_usec) / (LATCH / i); + + return usec; +} + +/*! + * The OS tick timer interrupt structure. + */ +static struct irqaction timer_irq = { + .name = "MXC Timer Tick", + .flags = IRQF_DISABLED | IRQF_TIMER, + .handler = mxc_timer_interrupt +}; + +/*! + * This function is used to initialize the GPT to produce an interrupt + * based on HZ. It is called by start_kernel() during system startup. + */ +void __init mxc_init_time(void) +{ + u32 reg, v; + reg = __raw_readl(MXC_GPT_GPTCR); + reg &= ~GPTCR_ENABLE; + __raw_writel(reg, MXC_GPT_GPTCR); + reg |= GPTCR_SWR; + __raw_writel(reg, MXC_GPT_GPTCR); + + while ((__raw_readl(MXC_GPT_GPTCR) & GPTCR_SWR) != 0) + cpu_relax(); + + reg = GPTCR_FRR | GPTCR_CLKSRC_HIGHFREQ; + __raw_writel(reg, MXC_GPT_GPTCR); + + /* TODO: get timer rate from clk driver */ + v = 66500000; + + __raw_writel((v / CLOCK_TICK_RATE) - 1, MXC_GPT_GPTPR); + + if ((v % CLOCK_TICK_RATE) != 0) { + pr_info("\nWARNING: Can't generate CLOCK_TICK_RATE at %d Hz\n", + CLOCK_TICK_RATE); + } + pr_info("Actual CLOCK_TICK_RATE is %d Hz\n", + v / ((__raw_readl(MXC_GPT_GPTPR) & 0xFFF) + 1)); + + reg = __raw_readl(MXC_GPT_GPTCNT); + reg += LATCH; + __raw_writel(reg, MXC_GPT_GPTOCR1); + + setup_irq(MXC_INT_GPT, &timer_irq); + + reg = __raw_readl(MXC_GPT_GPTCR); + reg = + GPTCR_FRR | GPTCR_CLKSRC_HIGHFREQ | GPTCR_STOPEN | GPTCR_DOZEN | + GPTCR_WAITEN | GPTCR_ENMOD | GPTCR_ENABLE; + __raw_writel(reg, MXC_GPT_GPTCR); + + __raw_writel(GPTIR_OF1IE, MXC_GPT_GPTIR); +} + +struct sys_timer mxc_timer = { + .init = mxc_init_time, + .offset = mxc_gettimeoffset, +}; diff --git a/trunk/arch/arm/mach-ns9xxx/Makefile b/trunk/arch/arm/mach-ns9xxx/Makefile index 53213a69f601..4476411b8140 100644 --- a/trunk/arch/arm/mach-ns9xxx/Makefile +++ b/trunk/arch/arm/mach-ns9xxx/Makefile @@ -1,6 +1,7 @@ obj-y := irq.o time.o generic.o obj-$(CONFIG_MACH_CC9P9360DEV) += mach-cc9p9360dev.o +obj-$(CONFIG_MACH_CC9P9360JS) += mach-cc9p9360js.o obj-$(CONFIG_BOARD_A9M9750DEV) += board-a9m9750dev.o obj-$(CONFIG_BOARD_JSCC9P9360) += board-jscc9p9360.o diff --git a/trunk/arch/arm/mach-ns9xxx/board-a9m9750dev.c b/trunk/arch/arm/mach-ns9xxx/board-a9m9750dev.c index 25289884a607..925048e7adfe 100644 --- a/trunk/arch/arm/mach-ns9xxx/board-a9m9750dev.c +++ b/trunk/arch/arm/mach-ns9xxx/board-a9m9750dev.c @@ -77,7 +77,7 @@ static void a9m9750dev_fpga_demux_handler(unsigned int irq, desc = irq_desc + FPGA_IRQ(irqno); - desc_handle_irq(irqno, desc); + desc_handle_irq(FPGA_IRQ(irqno), desc); } } @@ -91,7 +91,7 @@ void __init board_a9m9750dev_init_irq(void) * use GPIO 11, because GPIO 32 is used for the LCD */ /* XXX: proper GPIO handling */ - BBU_GC(2) &= ~0x2000; + BBU_GCONFb1(1) &= ~0x2000; for (i = FPGA_IRQ(0); i <= FPGA_IRQ(7); ++i) { set_irq_chip(i, &a9m9750dev_fpga_chip); @@ -178,7 +178,7 @@ void __init board_a9m9750dev_init_machine(void) /* setup static CS0: memory configuration */ reg = MEM_SMC(0); - REGSET(reg, MEM_SMC, WSMC, OFF); + REGSET(reg, MEM_SMC, PSMC, OFF); REGSET(reg, MEM_SMC, BSMC, OFF); REGSET(reg, MEM_SMC, EW, OFF); REGSET(reg, MEM_SMC, PB, 1); @@ -196,4 +196,3 @@ void __init board_a9m9750dev_init_machine(void) platform_add_devices(board_a9m9750dev_devices, ARRAY_SIZE(board_a9m9750dev_devices)); } - diff --git a/trunk/arch/arm/mach-ns9xxx/generic.c b/trunk/arch/arm/mach-ns9xxx/generic.c index 83e2b6532b22..d742c921e34d 100644 --- a/trunk/arch/arm/mach-ns9xxx/generic.c +++ b/trunk/arch/arm/mach-ns9xxx/generic.c @@ -18,6 +18,8 @@ #include #include +#include "generic.h" + static struct map_desc standard_io_desc[] __initdata = { { /* BBus */ .virtual = io_p2v(0x90000000), diff --git a/trunk/arch/arm/mach-ns9xxx/irq.c b/trunk/arch/arm/mach-ns9xxx/irq.c index 83d92724a971..b8c7b00522e6 100644 --- a/trunk/arch/arm/mach-ns9xxx/irq.c +++ b/trunk/arch/arm/mach-ns9xxx/irq.c @@ -21,6 +21,15 @@ static void ns9xxx_ack_irq_timer(unsigned int irq) { u32 tc = SYS_TC(irq - IRQ_TIMER0); + /* + * If the timer is programmed to halt on terminal count, the + * timer must be disabled before clearing the interrupt. + */ + if (REGGET(tc, SYS_TCx, REN) == 0) { + REGSET(tc, SYS_TCx, TEN, DIS); + SYS_TC(irq - IRQ_TIMER0) = tc; + } + REGSET(tc, SYS_TCx, INTC, SET); SYS_TC(irq - IRQ_TIMER0) = tc; @@ -28,7 +37,7 @@ static void ns9xxx_ack_irq_timer(unsigned int irq) SYS_TC(irq - IRQ_TIMER0) = tc; } -void (*ns9xxx_ack_irq_functions[NR_IRQS])(unsigned int) = { +static void (*ns9xxx_ack_irq_functions[NR_IRQS])(unsigned int) = { [IRQ_TIMER0] = ns9xxx_ack_irq_timer, [IRQ_TIMER1] = ns9xxx_ack_irq_timer, [IRQ_TIMER2] = ns9xxx_ack_irq_timer, diff --git a/trunk/arch/arm/mach-ns9xxx/mach-cc9p9360js.c b/trunk/arch/arm/mach-ns9xxx/mach-cc9p9360js.c index d09d5fa5620a..85c8b41105c9 100644 --- a/trunk/arch/arm/mach-ns9xxx/mach-cc9p9360js.c +++ b/trunk/arch/arm/mach-ns9xxx/mach-cc9p9360js.c @@ -20,7 +20,7 @@ static void __init mach_cc9p9360js_init_machine(void) board_jscc9p9360_init_machine(); } -MACHINE_START(CC9P9360DEV, "Digi ConnectCore 9P 9360 on an JSCC9P9360 Devboard") +MACHINE_START(CC9P9360JS, "Digi ConnectCore 9P 9360 on an JSCC9P9360 Devboard") .map_io = ns9xxx_map_io, .init_irq = ns9xxx_init_irq, .init_machine = mach_cc9p9360js_init_machine, diff --git a/trunk/arch/arm/mach-omap1/time.c b/trunk/arch/arm/mach-omap1/time.c index 3705d20c4e5c..237651ebae5d 100644 --- a/trunk/arch/arm/mach-omap1/time.c +++ b/trunk/arch/arm/mach-omap1/time.c @@ -156,6 +156,7 @@ static void omap_mpu_set_mode(enum clock_event_mode mode, break; case CLOCK_EVT_MODE_UNUSED: case CLOCK_EVT_MODE_SHUTDOWN: + case CLOCK_EVT_MODE_RESUME: break; } } diff --git a/trunk/arch/arm/mach-pxa/Kconfig b/trunk/arch/arm/mach-pxa/Kconfig index 5c0a10041cd1..5ebec6d88b51 100644 --- a/trunk/arch/arm/mach-pxa/Kconfig +++ b/trunk/arch/arm/mach-pxa/Kconfig @@ -37,6 +37,10 @@ config MACH_TRIZEPS4 bool "Keith und Koep Trizeps4 DIMM-Module" select PXA27x +config MACH_EM_X270 + bool "CompuLab EM-x270 platform" + select PXA27x + endchoice if PXA_SHARPSL diff --git a/trunk/arch/arm/mach-pxa/Makefile b/trunk/arch/arm/mach-pxa/Makefile index 9093eb1c94eb..7d6ab5c59ab9 100644 --- a/trunk/arch/arm/mach-pxa/Makefile +++ b/trunk/arch/arm/mach-pxa/Makefile @@ -18,6 +18,7 @@ obj-$(CONFIG_PXA_SHARP_Cxx00) += spitz.o corgi_ssp.o corgi_lcd.o sharpsl_pm.o sp obj-$(CONFIG_MACH_AKITA) += akita-ioexp.o obj-$(CONFIG_MACH_POODLE) += poodle.o corgi_ssp.o obj-$(CONFIG_MACH_TOSA) += tosa.o +obj-$(CONFIG_MACH_EM_X270) += em-x270.o # Support for blinky lights led-y := leds.o diff --git a/trunk/arch/arm/mach-pxa/devices.h b/trunk/arch/arm/mach-pxa/devices.h index 9a6faff8e5a7..636fdb1c049c 100644 --- a/trunk/arch/arm/mach-pxa/devices.h +++ b/trunk/arch/arm/mach-pxa/devices.h @@ -1,11 +1,11 @@ -extern struct platform_device pxamci_device; -extern struct platform_device pxaudc_device; -extern struct platform_device pxafb_device; -extern struct platform_device ffuart_device; -extern struct platform_device btuart_device; -extern struct platform_device stuart_device; -extern struct platform_device hwuart_device; -extern struct platform_device pxai2c_device; -extern struct platform_device pxai2s_device; -extern struct platform_device pxaficp_device; -extern struct platform_device pxartc_device; +extern struct platform_device pxa_device_mci; +extern struct platform_device pxa_device_udc; +extern struct platform_device pxa_device_fb; +extern struct platform_device pxa_device_ffuart; +extern struct platform_device pxa_device_btuart; +extern struct platform_device pxa_device_stuart; +extern struct platform_device pxa_device_hwuart; +extern struct platform_device pxa_device_i2c; +extern struct platform_device pxa_device_i2s; +extern struct platform_device pxa_device_ficp; +extern struct platform_device pxa_device_rtc; diff --git a/trunk/arch/arm/mach-pxa/em-x270.c b/trunk/arch/arm/mach-pxa/em-x270.c new file mode 100644 index 000000000000..3d0ad5065ee5 --- /dev/null +++ b/trunk/arch/arm/mach-pxa/em-x270.c @@ -0,0 +1,354 @@ +/* + * Support for CompuLab EM-x270 platform + * + * Copyright (C) 2007 CompuLab, Ltd. + * Author: Mike Rapoport + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License version 2 as + * published by the Free Software Foundation. + */ + +#include +#include + +#include +#include + +#include +#include + +#include + +#include + +#include +#include +#include +#include +#include + +#include "generic.h" + +/* GPIO IRQ usage */ +#define EM_X270_MMC_PD (105) +#define EM_X270_ETHIRQ IRQ_GPIO(41) +#define EM_X270_MMC_IRQ IRQ_GPIO(13) + +static struct resource em_x270_dm9k_resource[] = { + [0] = { + .start = PXA_CS2_PHYS, + .end = PXA_CS2_PHYS + 3, + .flags = IORESOURCE_MEM, + }, + [1] = { + .start = PXA_CS2_PHYS + 8, + .end = PXA_CS2_PHYS + 8 + 0x3f, + .flags = IORESOURCE_MEM, + }, + [2] = { + .start = EM_X270_ETHIRQ, + .end = EM_X270_ETHIRQ, + .flags = IORESOURCE_IRQ, + } +}; + +/* for the moment we limit ourselves to 32bit IO until some + * better IO routines can be written and tested + */ +static struct dm9000_plat_data em_x270_dm9k_platdata = { + .flags = DM9000_PLATF_32BITONLY, +}; + +/* Ethernet device */ +static struct platform_device em_x270_dm9k = { + .name = "dm9000", + .id = 0, + .num_resources = ARRAY_SIZE(em_x270_dm9k_resource), + .resource = em_x270_dm9k_resource, + .dev = { + .platform_data = &em_x270_dm9k_platdata, + } +}; + +/* audio device */ +static struct platform_device em_x270_audio = { + .name = "pxa2xx-ac97", + .id = -1, +}; + +/* WM9712 touchscreen controller. Hopefully the driver will make it to + * the mainstream sometime */ +static struct platform_device em_x270_ts = { + .name = "wm97xx-ts", + .id = -1, +}; + +/* RTC */ +static struct resource em_x270_v3020_resource[] = { + [0] = { + .start = PXA_CS4_PHYS, + .end = PXA_CS4_PHYS + 3, + .flags = IORESOURCE_MEM, + }, +}; + +static struct v3020_platform_data em_x270_v3020_platdata = { + .leftshift = 0, +}; + +static struct platform_device em_x270_rtc = { + .name = "v3020", + .num_resources = ARRAY_SIZE(em_x270_v3020_resource), + .resource = em_x270_v3020_resource, + .id = -1, + .dev = { + .platform_data = &em_x270_v3020_platdata, + } +}; + +/* NAND flash */ +#define GPIO_NAND_CS (11) +#define GPIO_NAND_RB (56) + +static inline void nand_cs_on(void) +{ + GPCR(GPIO_NAND_CS) = GPIO_bit(GPIO_NAND_CS); +} + +static void nand_cs_off(void) +{ + dsb(); + + GPSR(GPIO_NAND_CS) = GPIO_bit(GPIO_NAND_CS); +} + +/* hardware specific access to control-lines */ +static void em_x270_nand_cmd_ctl(struct mtd_info *mtd, int dat, + unsigned int ctrl) +{ + struct nand_chip *this = mtd->priv; + unsigned long nandaddr = (unsigned long)this->IO_ADDR_W; + + dsb(); + + if (ctrl & NAND_CTRL_CHANGE) { + if (ctrl & NAND_ALE) + nandaddr |= (1 << 3); + else + nandaddr &= ~(1 << 3); + if (ctrl & NAND_CLE) + nandaddr |= (1 << 2); + else + nandaddr &= ~(1 << 2); + if (ctrl & NAND_NCE) + nand_cs_on(); + else + nand_cs_off(); + } + + dsb(); + this->IO_ADDR_W = (void __iomem *)nandaddr; + if (dat != NAND_CMD_NONE) + writel(dat, this->IO_ADDR_W); + + dsb(); +} + +/* read device ready pin */ +static int em_x270_nand_device_ready(struct mtd_info *mtd) +{ + dsb(); + + return GPLR(GPIO_NAND_RB) & GPIO_bit(GPIO_NAND_RB); +} + +static struct mtd_partition em_x270_partition_info[] = { + [0] = { + .name = "em_x270-0", + .offset = 0, + .size = SZ_4M, + }, + [1] = { + .name = "em_x270-1", + .offset = MTDPART_OFS_APPEND, + .size = MTDPART_SIZ_FULL + }, +}; + +static const char *em_x270_part_probes[] = { "cmdlinepart", NULL }; + +struct platform_nand_data em_x270_nand_platdata = { + .chip = { + .nr_chips = 1, + .chip_offset = 0, + .nr_partitions = ARRAY_SIZE(em_x270_partition_info), + .partitions = em_x270_partition_info, + .chip_delay = 20, + .part_probe_types = em_x270_part_probes, + }, + .ctrl = { + .hwcontrol = 0, + .dev_ready = em_x270_nand_device_ready, + .select_chip = 0, + .cmd_ctrl = em_x270_nand_cmd_ctl, + }, +}; + +static struct resource em_x270_nand_resource[] = { + [0] = { + .start = PXA_CS1_PHYS, + .end = PXA_CS1_PHYS + 12, + .flags = IORESOURCE_MEM, + }, +}; + +static struct platform_device em_x270_nand = { + .name = "gen_nand", + .num_resources = ARRAY_SIZE(em_x270_nand_resource), + .resource = em_x270_nand_resource, + .id = -1, + .dev = { + .platform_data = &em_x270_nand_platdata, + } +}; + +/* platform devices */ +static struct platform_device *platform_devices[] __initdata = { + &em_x270_dm9k, + &em_x270_audio, + &em_x270_ts, + &em_x270_rtc, + &em_x270_nand, +}; + + +/* PXA27x OHCI controller setup */ +static int em_x270_ohci_init(struct device *dev) +{ + /* Set the Power Control Polarity Low */ + UHCHR = (UHCHR | UHCHR_PCPL) & + ~(UHCHR_SSEP1 | UHCHR_SSEP2 | UHCHR_SSE); + + /* enable port 2 transiever */ + UP2OCR = UP2OCR_HXS | UP2OCR_HXOE; + + return 0; +} + +static struct pxaohci_platform_data em_x270_ohci_platform_data = { + .port_mode = PMM_PERPORT_MODE, + .init = em_x270_ohci_init, +}; + + +static int em_x270_mci_init(struct device *dev, + irq_handler_t em_x270_detect_int, + void *data) +{ + int err; + + /* setup GPIO for PXA27x MMC controller */ + pxa_gpio_mode(GPIO32_MMCCLK_MD); + pxa_gpio_mode(GPIO112_MMCCMD_MD); + pxa_gpio_mode(GPIO92_MMCDAT0_MD); + pxa_gpio_mode(GPIO109_MMCDAT1_MD); + pxa_gpio_mode(GPIO110_MMCDAT2_MD); + pxa_gpio_mode(GPIO111_MMCDAT3_MD); + + /* EM-X270 uses GPIO13 as SD power enable */ + pxa_gpio_mode(EM_X270_MMC_PD | GPIO_OUT); + + err = request_irq(EM_X270_MMC_IRQ, em_x270_detect_int, + IRQF_DISABLED | IRQF_TRIGGER_FALLING, + "MMC card detect", data); + if (err) { + printk(KERN_ERR "%s: can't request MMC card detect IRQ: %d\n", + __FUNCTION__, err); + return err; + } + + return 0; +} + +static void em_x270_mci_setpower(struct device *dev, unsigned int vdd) +{ + /* + FIXME: current hardware implementation does not allow to + enable/disable MMC power. This will be fixed in next HW releases, + and we'll need to add implmentation here. + */ + return; +} + +static void em_x270_mci_exit(struct device *dev, void *data) +{ + free_irq(EM_X270_MMC_IRQ, data); +} + +static struct pxamci_platform_data em_x270_mci_platform_data = { + .ocr_mask = MMC_VDD_28_29|MMC_VDD_29_30|MMC_VDD_30_31, + .init = em_x270_mci_init, + .setpower = em_x270_mci_setpower, + .exit = em_x270_mci_exit, +}; + +/* LCD 480x640 */ +static struct pxafb_mode_info em_x270_lcd_mode = { + .pixclock = 50000, + .bpp = 16, + .xres = 480, + .yres = 640, + .hsync_len = 8, + .vsync_len = 2, + .left_margin = 8, + .upper_margin = 0, + .right_margin = 24, + .lower_margin = 4, + .cmap_greyscale = 0, +}; + +static struct pxafb_mach_info em_x270_lcd = { + .modes = &em_x270_lcd_mode, + .num_modes = 1, + .cmap_inverse = 0, + .cmap_static = 0, + .lccr0 = LCCR0_PAS, + .lccr3 = LCCR3_PixClkDiv(0x01) | LCCR3_Acb(0xff), +}; + +static void __init em_x270_init(void) +{ + /* setup LCD */ + set_pxa_fb_info(&em_x270_lcd); + + /* register EM-X270 platform devices */ + platform_add_devices(platform_devices, ARRAY_SIZE(platform_devices)); + + /* set MCI and OHCI platform parameters */ + pxa_set_mci_info(&em_x270_mci_platform_data); + pxa_set_ohci_info(&em_x270_ohci_platform_data); + + /* setup STUART GPIOs */ + pxa_gpio_mode(GPIO46_STRXD_MD); + pxa_gpio_mode(GPIO47_STTXD_MD); + + /* setup BTUART GPIOs */ + pxa_gpio_mode(GPIO42_BTRXD_MD); + pxa_gpio_mode(GPIO43_BTTXD_MD); + pxa_gpio_mode(GPIO44_BTCTS_MD); + pxa_gpio_mode(GPIO45_BTRTS_MD); + + /* Setup interrupt for dm9000 */ + set_irq_type(EM_X270_ETHIRQ, IRQT_RISING); +} + +MACHINE_START(EM_X270, "Compulab EM-x270") + .boot_params = 0xa0000100, + .phys_io = 0x40000000, + .io_pg_offst = (io_p2v(0x40000000) >> 18) & 0xfffc, + .map_io = pxa_map_io, + .init_irq = pxa27x_init_irq, + .timer = &pxa_timer, + .init_machine = em_x270_init, +MACHINE_END diff --git a/trunk/arch/arm/mach-pxa/generic.c b/trunk/arch/arm/mach-pxa/generic.c index 296539b6359c..5510f6fdce55 100644 --- a/trunk/arch/arm/mach-pxa/generic.c +++ b/trunk/arch/arm/mach-pxa/generic.c @@ -243,7 +243,7 @@ static struct resource pxamci_resources[] = { static u64 pxamci_dmamask = 0xffffffffUL; -struct platform_device pxamci_device = { +struct platform_device pxa_device_mci = { .name = "pxa2xx-mci", .id = -1, .dev = { @@ -256,7 +256,7 @@ struct platform_device pxamci_device = { void __init pxa_set_mci_info(struct pxamci_platform_data *info) { - pxamci_device.dev.platform_data = info; + pxa_device_mci.dev.platform_data = info; } @@ -282,7 +282,7 @@ static struct resource pxa2xx_udc_resources[] = { static u64 udc_dma_mask = ~(u32)0; -struct platform_device pxaudc_device = { +struct platform_device pxa_device_udc = { .name = "pxa2xx-udc", .id = -1, .resource = pxa2xx_udc_resources, @@ -308,7 +308,7 @@ static struct resource pxafb_resources[] = { static u64 fb_dma_mask = ~(u64)0; -struct platform_device pxafb_device = { +struct platform_device pxa_device_fb = { .name = "pxa2xx-fb", .id = -1, .dev = { @@ -321,27 +321,27 @@ struct platform_device pxafb_device = { void __init set_pxa_fb_info(struct pxafb_mach_info *info) { - pxafb_device.dev.platform_data = info; + pxa_device_fb.dev.platform_data = info; } void __init set_pxa_fb_parent(struct device *parent_dev) { - pxafb_device.dev.parent = parent_dev; + pxa_device_fb.dev.parent = parent_dev; } -struct platform_device ffuart_device = { +struct platform_device pxa_device_ffuart= { .name = "pxa2xx-uart", .id = 0, }; -struct platform_device btuart_device = { +struct platform_device pxa_device_btuart = { .name = "pxa2xx-uart", .id = 1, }; -struct platform_device stuart_device = { +struct platform_device pxa_device_stuart = { .name = "pxa2xx-uart", .id = 2, }; -struct platform_device hwuart_device = { +struct platform_device pxa_device_hwuart = { .name = "pxa2xx-uart", .id = 3, }; @@ -358,7 +358,7 @@ static struct resource pxai2c_resources[] = { }, }; -struct platform_device pxai2c_device = { +struct platform_device pxa_device_i2c = { .name = "pxa2xx-i2c", .id = 0, .resource = pxai2c_resources, @@ -367,7 +367,7 @@ struct platform_device pxai2c_device = { void __init pxa_set_i2c_info(struct i2c_pxa_platform_data *info) { - pxai2c_device.dev.platform_data = info; + pxa_device_i2c.dev.platform_data = info; } static struct resource pxai2s_resources[] = { @@ -382,7 +382,7 @@ static struct resource pxai2s_resources[] = { }, }; -struct platform_device pxai2s_device = { +struct platform_device pxa_device_i2s = { .name = "pxa2xx-i2s", .id = -1, .resource = pxai2s_resources, @@ -391,7 +391,7 @@ struct platform_device pxai2s_device = { static u64 pxaficp_dmamask = ~(u32)0; -struct platform_device pxaficp_device = { +struct platform_device pxa_device_ficp = { .name = "pxa2xx-ir", .id = -1, .dev = { @@ -402,10 +402,10 @@ struct platform_device pxaficp_device = { void __init pxa_set_ficp_info(struct pxaficp_platform_data *info) { - pxaficp_device.dev.platform_data = info; + pxa_device_ficp.dev.platform_data = info; } -struct platform_device pxartc_device = { +struct platform_device pxa_device_rtc = { .name = "sa1100-rtc", .id = -1, }; diff --git a/trunk/arch/arm/mach-pxa/pm.c b/trunk/arch/arm/mach-pxa/pm.c index e66dbc26add1..b59a81a8e7d3 100644 --- a/trunk/arch/arm/mach-pxa/pm.c +++ b/trunk/arch/arm/mach-pxa/pm.c @@ -24,61 +24,13 @@ #include #include - -/* - * Debug macros - */ -#undef DEBUG - -#define SAVE(x) sleep_save[SLEEP_SAVE_##x] = x -#define RESTORE(x) x = sleep_save[SLEEP_SAVE_##x] - -#define RESTORE_GPLEVEL(n) do { \ - GPSR##n = sleep_save[SLEEP_SAVE_GPLR##n]; \ - GPCR##n = ~sleep_save[SLEEP_SAVE_GPLR##n]; \ -} while (0) - -/* - * List of global PXA peripheral registers to preserve. - * More ones like CP and general purpose register values are preserved - * with the stack pointer in sleep.S. - */ -enum { SLEEP_SAVE_START = 0, - - SLEEP_SAVE_GPLR0, SLEEP_SAVE_GPLR1, SLEEP_SAVE_GPLR2, SLEEP_SAVE_GPLR3, - SLEEP_SAVE_GPDR0, SLEEP_SAVE_GPDR1, SLEEP_SAVE_GPDR2, SLEEP_SAVE_GPDR3, - SLEEP_SAVE_GRER0, SLEEP_SAVE_GRER1, SLEEP_SAVE_GRER2, SLEEP_SAVE_GRER3, - SLEEP_SAVE_GFER0, SLEEP_SAVE_GFER1, SLEEP_SAVE_GFER2, SLEEP_SAVE_GFER3, - SLEEP_SAVE_PGSR0, SLEEP_SAVE_PGSR1, SLEEP_SAVE_PGSR2, SLEEP_SAVE_PGSR3, - - SLEEP_SAVE_GAFR0_L, SLEEP_SAVE_GAFR0_U, - SLEEP_SAVE_GAFR1_L, SLEEP_SAVE_GAFR1_U, - SLEEP_SAVE_GAFR2_L, SLEEP_SAVE_GAFR2_U, - SLEEP_SAVE_GAFR3_L, SLEEP_SAVE_GAFR3_U, - - SLEEP_SAVE_PSTR, - - SLEEP_SAVE_ICMR, - SLEEP_SAVE_CKEN, - -#ifdef CONFIG_PXA27x - SLEEP_SAVE_MDREFR, - SLEEP_SAVE_PWER, SLEEP_SAVE_PCFR, SLEEP_SAVE_PRER, - SLEEP_SAVE_PFER, SLEEP_SAVE_PKWR, -#endif - - SLEEP_SAVE_CKSUM, - - SLEEP_SAVE_SIZE -}; - +struct pxa_cpu_pm_fns *pxa_cpu_pm_fns; +static unsigned long *sleep_save; int pxa_pm_enter(suspend_state_t state) { - unsigned long sleep_save[SLEEP_SAVE_SIZE]; - unsigned long checksum = 0; + unsigned long sleep_save_checksum = 0, checksum = 0; int i; - extern void pxa_cpu_pm_enter(suspend_state_t state); #ifdef CONFIG_IWMMXT /* force any iWMMXt context to ram **/ @@ -86,100 +38,35 @@ int pxa_pm_enter(suspend_state_t state) iwmmxt_task_disable(NULL); #endif - SAVE(GPLR0); SAVE(GPLR1); SAVE(GPLR2); - SAVE(GPDR0); SAVE(GPDR1); SAVE(GPDR2); - SAVE(GRER0); SAVE(GRER1); SAVE(GRER2); - SAVE(GFER0); SAVE(GFER1); SAVE(GFER2); - SAVE(PGSR0); SAVE(PGSR1); SAVE(PGSR2); - - SAVE(GAFR0_L); SAVE(GAFR0_U); - SAVE(GAFR1_L); SAVE(GAFR1_U); - SAVE(GAFR2_L); SAVE(GAFR2_U); - -#ifdef CONFIG_PXA27x - SAVE(MDREFR); - SAVE(GPLR3); SAVE(GPDR3); SAVE(GRER3); SAVE(GFER3); SAVE(PGSR3); - SAVE(GAFR3_L); SAVE(GAFR3_U); - SAVE(PWER); SAVE(PCFR); SAVE(PRER); - SAVE(PFER); SAVE(PKWR); -#endif - - SAVE(ICMR); - ICMR = 0; - - SAVE(CKEN); - SAVE(PSTR); - - /* Note: wake up source are set up in each machine specific files */ - - /* clear GPIO transition detect bits */ - GEDR0 = GEDR0; GEDR1 = GEDR1; GEDR2 = GEDR2; -#ifdef CONFIG_PXA27x - GEDR3 = GEDR3; -#endif + pxa_cpu_pm_fns->save(sleep_save); /* Clear sleep reset status */ RCSR = RCSR_SMR; /* before sleeping, calculate and save a checksum */ - for (i = 0; i < SLEEP_SAVE_SIZE - 1; i++) - checksum += sleep_save[i]; - sleep_save[SLEEP_SAVE_CKSUM] = checksum; + for (i = 0; i < pxa_cpu_pm_fns->save_size - 1; i++) + sleep_save_checksum += sleep_save[i]; /* *** go zzz *** */ - pxa_cpu_pm_enter(state); - + pxa_cpu_pm_fns->enter(state); cpu_init(); /* after sleeping, validate the checksum */ - checksum = 0; - for (i = 0; i < SLEEP_SAVE_SIZE - 1; i++) + for (i = 0; i < pxa_cpu_pm_fns->save_size - 1; i++) checksum += sleep_save[i]; /* if invalid, display message and wait for a hardware reset */ - if (checksum != sleep_save[SLEEP_SAVE_CKSUM]) { + if (checksum != sleep_save_checksum) { #ifdef CONFIG_ARCH_LUBBOCK LUB_HEXLED = 0xbadbadc5; #endif while (1) - pxa_cpu_pm_enter(state); + pxa_cpu_pm_fns->enter(state); } - /* ensure not to come back here if it wasn't intended */ - PSPR = 0; - - /* restore registers */ - RESTORE_GPLEVEL(0); RESTORE_GPLEVEL(1); RESTORE_GPLEVEL(2); - RESTORE(GPDR0); RESTORE(GPDR1); RESTORE(GPDR2); - RESTORE(GAFR0_L); RESTORE(GAFR0_U); - RESTORE(GAFR1_L); RESTORE(GAFR1_U); - RESTORE(GAFR2_L); RESTORE(GAFR2_U); - RESTORE(GRER0); RESTORE(GRER1); RESTORE(GRER2); - RESTORE(GFER0); RESTORE(GFER1); RESTORE(GFER2); - RESTORE(PGSR0); RESTORE(PGSR1); RESTORE(PGSR2); - -#ifdef CONFIG_PXA27x - RESTORE(MDREFR); - RESTORE_GPLEVEL(3); RESTORE(GPDR3); - RESTORE(GAFR3_L); RESTORE(GAFR3_U); - RESTORE(GRER3); RESTORE(GFER3); RESTORE(PGSR3); - RESTORE(PWER); RESTORE(PCFR); RESTORE(PRER); - RESTORE(PFER); RESTORE(PKWR); -#endif - - PSSR = PSSR_RDH | PSSR_PH; - - RESTORE(CKEN); - - ICLR = 0; - ICCR = 1; - RESTORE(ICMR); + pxa_cpu_pm_fns->restore(sleep_save); - RESTORE(PSTR); - -#ifdef DEBUG - printk(KERN_DEBUG "*** made it back from resume\n"); -#endif + pr_debug("*** made it back from resume\n"); return 0; } @@ -190,3 +77,35 @@ unsigned long sleep_phys_sp(void *sp) { return virt_to_phys(sp); } + +static int pxa_pm_valid(suspend_state_t state) +{ + if (pxa_cpu_pm_fns) + return pxa_cpu_pm_fns->valid(state); + + return -EINVAL; +} + +static struct pm_ops pxa_pm_ops = { + .valid = pxa_pm_valid, + .enter = pxa_pm_enter, +}; + +static int __init pxa_pm_init(void) +{ + if (!pxa_cpu_pm_fns) { + printk(KERN_ERR "no valid pxa_cpu_pm_fns defined\n"); + return -EINVAL; + } + + sleep_save = kmalloc(pxa_cpu_pm_fns->save_size, GFP_KERNEL); + if (!sleep_save) { + printk(KERN_ERR "failed to alloc memory for pm save\n"); + return -ENOMEM; + } + + pm_set_ops(&pxa_pm_ops); + return 0; +} + +device_initcall(pxa_pm_init); diff --git a/trunk/arch/arm/mach-pxa/pxa25x.c b/trunk/arch/arm/mach-pxa/pxa25x.c index f36ca448338e..6dfcca72e90f 100644 --- a/trunk/arch/arm/mach-pxa/pxa25x.c +++ b/trunk/arch/arm/mach-pxa/pxa25x.c @@ -110,26 +110,99 @@ EXPORT_SYMBOL(get_lcdclk_frequency_10khz); #ifdef CONFIG_PM -void pxa_cpu_pm_enter(suspend_state_t state) +#define SAVE(x) sleep_save[SLEEP_SAVE_##x] = x +#define RESTORE(x) x = sleep_save[SLEEP_SAVE_##x] + +#define RESTORE_GPLEVEL(n) do { \ + GPSR##n = sleep_save[SLEEP_SAVE_GPLR##n]; \ + GPCR##n = ~sleep_save[SLEEP_SAVE_GPLR##n]; \ +} while (0) + +/* + * List of global PXA peripheral registers to preserve. + * More ones like CP and general purpose register values are preserved + * with the stack pointer in sleep.S. + */ +enum { SLEEP_SAVE_START = 0, + + SLEEP_SAVE_GPLR0, SLEEP_SAVE_GPLR1, SLEEP_SAVE_GPLR2, + SLEEP_SAVE_GPDR0, SLEEP_SAVE_GPDR1, SLEEP_SAVE_GPDR2, + SLEEP_SAVE_GRER0, SLEEP_SAVE_GRER1, SLEEP_SAVE_GRER2, + SLEEP_SAVE_GFER0, SLEEP_SAVE_GFER1, SLEEP_SAVE_GFER2, + SLEEP_SAVE_PGSR0, SLEEP_SAVE_PGSR1, SLEEP_SAVE_PGSR2, + + SLEEP_SAVE_GAFR0_L, SLEEP_SAVE_GAFR0_U, + SLEEP_SAVE_GAFR1_L, SLEEP_SAVE_GAFR1_U, + SLEEP_SAVE_GAFR2_L, SLEEP_SAVE_GAFR2_U, + + SLEEP_SAVE_PSTR, + + SLEEP_SAVE_ICMR, + SLEEP_SAVE_CKEN, + + SLEEP_SAVE_SIZE +}; + + +static void pxa25x_cpu_pm_save(unsigned long *sleep_save) +{ + SAVE(GPLR0); SAVE(GPLR1); SAVE(GPLR2); + SAVE(GPDR0); SAVE(GPDR1); SAVE(GPDR2); + SAVE(GRER0); SAVE(GRER1); SAVE(GRER2); + SAVE(GFER0); SAVE(GFER1); SAVE(GFER2); + SAVE(PGSR0); SAVE(PGSR1); SAVE(PGSR2); + + SAVE(GAFR0_L); SAVE(GAFR0_U); + SAVE(GAFR1_L); SAVE(GAFR1_U); + SAVE(GAFR2_L); SAVE(GAFR2_U); + + SAVE(ICMR); + SAVE(CKEN); + SAVE(PSTR); +} + +static void pxa25x_cpu_pm_restore(unsigned long *sleep_save) { - extern void pxa_cpu_suspend(unsigned int); - extern void pxa_cpu_resume(void); + /* restore registers */ + RESTORE_GPLEVEL(0); RESTORE_GPLEVEL(1); RESTORE_GPLEVEL(2); + RESTORE(GPDR0); RESTORE(GPDR1); RESTORE(GPDR2); + RESTORE(GAFR0_L); RESTORE(GAFR0_U); + RESTORE(GAFR1_L); RESTORE(GAFR1_U); + RESTORE(GAFR2_L); RESTORE(GAFR2_U); + RESTORE(GRER0); RESTORE(GRER1); RESTORE(GRER2); + RESTORE(GFER0); RESTORE(GFER1); RESTORE(GFER2); + RESTORE(PGSR0); RESTORE(PGSR1); RESTORE(PGSR2); + + RESTORE(CKEN); + RESTORE(ICMR); + RESTORE(PSTR); +} +static void pxa25x_cpu_pm_enter(suspend_state_t state) +{ CKEN = 0; switch (state) { case PM_SUSPEND_MEM: /* set resume return address */ PSPR = virt_to_phys(pxa_cpu_resume); - pxa_cpu_suspend(PWRMODE_SLEEP); + pxa25x_cpu_suspend(PWRMODE_SLEEP); break; } } -static struct pm_ops pxa25x_pm_ops = { - .enter = pxa_pm_enter, +static struct pxa_cpu_pm_fns pxa25x_cpu_pm_fns = { + .save_size = SLEEP_SAVE_SIZE, .valid = pm_valid_only_mem, + .save = pxa25x_cpu_pm_save, + .restore = pxa25x_cpu_pm_restore, + .enter = pxa25x_cpu_pm_enter, }; + +static void __init pxa25x_init_pm(void) +{ + pxa_cpu_pm_fns = &pxa25x_cpu_pm_fns; +} #endif void __init pxa25x_init_irq(void) @@ -139,16 +212,16 @@ void __init pxa25x_init_irq(void) } static struct platform_device *pxa25x_devices[] __initdata = { - &pxamci_device, - &pxaudc_device, - &pxafb_device, - &ffuart_device, - &btuart_device, - &stuart_device, - &pxai2c_device, - &pxai2s_device, - &pxaficp_device, - &pxartc_device, + &pxa_device_mci, + &pxa_device_udc, + &pxa_device_fb, + &pxa_device_ffuart, + &pxa_device_btuart, + &pxa_device_stuart, + &pxa_device_i2c, + &pxa_device_i2s, + &pxa_device_ficp, + &pxa_device_rtc, }; static int __init pxa25x_init(void) @@ -159,14 +232,14 @@ static int __init pxa25x_init(void) if ((ret = pxa_init_dma(16))) return ret; #ifdef CONFIG_PM - pm_set_ops(&pxa25x_pm_ops); + pxa25x_init_pm(); #endif ret = platform_add_devices(pxa25x_devices, ARRAY_SIZE(pxa25x_devices)); } /* Only add HWUART for PXA255/26x; PXA210/250/27x do not have it. */ if (cpu_is_pxa25x()) - ret = platform_device_register(&hwuart_device); + ret = platform_device_register(&pxa_device_hwuart); return ret; } diff --git a/trunk/arch/arm/mach-pxa/pxa27x.c b/trunk/arch/arm/mach-pxa/pxa27x.c index aa5bb02c897b..203371ab19db 100644 --- a/trunk/arch/arm/mach-pxa/pxa27x.c +++ b/trunk/arch/arm/mach-pxa/pxa27x.c @@ -126,14 +126,107 @@ EXPORT_SYMBOL(get_lcdclk_frequency_10khz); #ifdef CONFIG_PM -void pxa_cpu_pm_enter(suspend_state_t state) +#define SAVE(x) sleep_save[SLEEP_SAVE_##x] = x +#define RESTORE(x) x = sleep_save[SLEEP_SAVE_##x] + +#define RESTORE_GPLEVEL(n) do { \ + GPSR##n = sleep_save[SLEEP_SAVE_GPLR##n]; \ + GPCR##n = ~sleep_save[SLEEP_SAVE_GPLR##n]; \ +} while (0) + +/* + * List of global PXA peripheral registers to preserve. + * More ones like CP and general purpose register values are preserved + * with the stack pointer in sleep.S. + */ +enum { SLEEP_SAVE_START = 0, + + SLEEP_SAVE_GPLR0, SLEEP_SAVE_GPLR1, SLEEP_SAVE_GPLR2, SLEEP_SAVE_GPLR3, + SLEEP_SAVE_GPDR0, SLEEP_SAVE_GPDR1, SLEEP_SAVE_GPDR2, SLEEP_SAVE_GPDR3, + SLEEP_SAVE_GRER0, SLEEP_SAVE_GRER1, SLEEP_SAVE_GRER2, SLEEP_SAVE_GRER3, + SLEEP_SAVE_GFER0, SLEEP_SAVE_GFER1, SLEEP_SAVE_GFER2, SLEEP_SAVE_GFER3, + SLEEP_SAVE_PGSR0, SLEEP_SAVE_PGSR1, SLEEP_SAVE_PGSR2, SLEEP_SAVE_PGSR3, + + SLEEP_SAVE_GAFR0_L, SLEEP_SAVE_GAFR0_U, + SLEEP_SAVE_GAFR1_L, SLEEP_SAVE_GAFR1_U, + SLEEP_SAVE_GAFR2_L, SLEEP_SAVE_GAFR2_U, + SLEEP_SAVE_GAFR3_L, SLEEP_SAVE_GAFR3_U, + + SLEEP_SAVE_PSTR, + + SLEEP_SAVE_ICMR, + SLEEP_SAVE_CKEN, + + SLEEP_SAVE_MDREFR, + SLEEP_SAVE_PWER, SLEEP_SAVE_PCFR, SLEEP_SAVE_PRER, + SLEEP_SAVE_PFER, SLEEP_SAVE_PKWR, + + SLEEP_SAVE_SIZE +}; + +void pxa27x_cpu_pm_save(unsigned long *sleep_save) +{ + SAVE(GPLR0); SAVE(GPLR1); SAVE(GPLR2); SAVE(GPLR3); + SAVE(GPDR0); SAVE(GPDR1); SAVE(GPDR2); SAVE(GPDR3); + SAVE(GRER0); SAVE(GRER1); SAVE(GRER2); SAVE(GRER3); + SAVE(GFER0); SAVE(GFER1); SAVE(GFER2); SAVE(GFER3); + SAVE(PGSR0); SAVE(PGSR1); SAVE(PGSR2); SAVE(PGSR3); + + SAVE(GAFR0_L); SAVE(GAFR0_U); + SAVE(GAFR1_L); SAVE(GAFR1_U); + SAVE(GAFR2_L); SAVE(GAFR2_U); + SAVE(GAFR3_L); SAVE(GAFR3_U); + + SAVE(MDREFR); + SAVE(PWER); SAVE(PCFR); SAVE(PRER); + SAVE(PFER); SAVE(PKWR); + + SAVE(ICMR); ICMR = 0; + SAVE(CKEN); + SAVE(PSTR); + + /* Clear GPIO transition detect bits */ + GEDR0 = GEDR0; GEDR1 = GEDR1; GEDR2 = GEDR2; GEDR3 = GEDR3; +} + +void pxa27x_cpu_pm_restore(unsigned long *sleep_save) +{ + /* ensure not to come back here if it wasn't intended */ + PSPR = 0; + + /* restore registers */ + RESTORE_GPLEVEL(0); RESTORE_GPLEVEL(1); + RESTORE_GPLEVEL(2); RESTORE_GPLEVEL(3); + RESTORE(GPDR0); RESTORE(GPDR1); RESTORE(GPDR2); RESTORE(GPDR3); + RESTORE(GAFR0_L); RESTORE(GAFR0_U); + RESTORE(GAFR1_L); RESTORE(GAFR1_U); + RESTORE(GAFR2_L); RESTORE(GAFR2_U); + RESTORE(GAFR3_L); RESTORE(GAFR3_U); + RESTORE(GRER0); RESTORE(GRER1); RESTORE(GRER2); RESTORE(GRER3); + RESTORE(GFER0); RESTORE(GFER1); RESTORE(GFER2); RESTORE(GFER3); + RESTORE(PGSR0); RESTORE(PGSR1); RESTORE(PGSR2); RESTORE(PGSR3); + + RESTORE(MDREFR); + RESTORE(PWER); RESTORE(PCFR); RESTORE(PRER); + RESTORE(PFER); RESTORE(PKWR); + + PSSR = PSSR_RDH | PSSR_PH; + + RESTORE(CKEN); + + ICLR = 0; + ICCR = 1; + RESTORE(ICMR); + RESTORE(PSTR); +} + +void pxa27x_cpu_pm_enter(suspend_state_t state) { extern void pxa_cpu_standby(void); - extern void pxa_cpu_suspend(unsigned int); - extern void pxa_cpu_resume(void); if (state == PM_SUSPEND_STANDBY) - CKEN = (1 << CKEN_MEMC) | (1 << CKEN_OSTIMER) | (1 << CKEN_LCD) | (1 << CKEN_PWM0); + CKEN = (1 << CKEN_MEMC) | (1 << CKEN_OSTIMER) | + (1 << CKEN_LCD) | (1 << CKEN_PWM0); else CKEN = (1 << CKEN_MEMC) | (1 << CKEN_OSTIMER); @@ -150,20 +243,28 @@ void pxa_cpu_pm_enter(suspend_state_t state) case PM_SUSPEND_MEM: /* set resume return address */ PSPR = virt_to_phys(pxa_cpu_resume); - pxa_cpu_suspend(PWRMODE_SLEEP); + pxa27x_cpu_suspend(PWRMODE_SLEEP); break; } } -static int pxa27x_pm_valid(suspend_state_t state) +static int pxa27x_cpu_pm_valid(suspend_state_t state) { return state == PM_SUSPEND_MEM || state == PM_SUSPEND_STANDBY; } -static struct pm_ops pxa27x_pm_ops = { - .enter = pxa_pm_enter, - .valid = pxa27x_pm_valid, +static struct pxa_cpu_pm_fns pxa27x_cpu_pm_fns = { + .save_size = SLEEP_SAVE_SIZE, + .save = pxa27x_cpu_pm_save, + .restore = pxa27x_cpu_pm_restore, + .valid = pxa27x_cpu_pm_valid, + .enter = pxa27x_cpu_pm_enter, }; + +static void __init pxa27x_init_pm(void) +{ + pxa_cpu_pm_fns = &pxa27x_cpu_pm_fns; +} #endif /* @@ -185,7 +286,7 @@ static struct resource pxa27x_ohci_resources[] = { }, }; -static struct platform_device pxaohci_device = { +static struct platform_device pxa27x_device_ohci = { .name = "pxa27x-ohci", .id = -1, .dev = { @@ -198,7 +299,7 @@ static struct platform_device pxaohci_device = { void __init pxa_set_ohci_info(struct pxaohci_platform_data *info) { - pxaohci_device.dev.platform_data = info; + pxa27x_device_ohci.dev.platform_data = info; } static struct resource i2c_power_resources[] = { @@ -213,7 +314,7 @@ static struct resource i2c_power_resources[] = { }, }; -static struct platform_device pxai2c_power_device = { +static struct platform_device pxa27x_device_i2c_power = { .name = "pxa2xx-i2c", .id = 1, .resource = i2c_power_resources, @@ -221,18 +322,18 @@ static struct platform_device pxai2c_power_device = { }; static struct platform_device *devices[] __initdata = { - &pxamci_device, - &pxaudc_device, - &pxafb_device, - &ffuart_device, - &btuart_device, - &stuart_device, - &pxai2c_device, - &pxai2c_power_device, - &pxai2s_device, - &pxaficp_device, - &pxartc_device, - &pxaohci_device, + &pxa_device_mci, + &pxa_device_udc, + &pxa_device_fb, + &pxa_device_ffuart, + &pxa_device_btuart, + &pxa_device_stuart, + &pxa_device_i2c, + &pxa_device_i2s, + &pxa_device_ficp, + &pxa_device_rtc, + &pxa27x_device_i2c_power, + &pxa27x_device_ohci, }; void __init pxa27x_init_irq(void) @@ -249,7 +350,7 @@ static int __init pxa27x_init(void) if ((ret = pxa_init_dma(32))) return ret; #ifdef CONFIG_PM - pm_set_ops(&pxa27x_pm_ops); + pxa27x_init_pm(); #endif ret = platform_add_devices(devices, ARRAY_SIZE(devices)); } diff --git a/trunk/arch/arm/mach-pxa/sleep.S b/trunk/arch/arm/mach-pxa/sleep.S index 15874b360e51..aff71fec618a 100644 --- a/trunk/arch/arm/mach-pxa/sleep.S +++ b/trunk/arch/arm/mach-pxa/sleep.S @@ -17,28 +17,12 @@ #include -#ifdef CONFIG_PXA27x // workaround for Errata 50 #define MDREFR_KDIV 0x200a4000 // all banks #define CCCR_SLEEP 0x00000107 // L=7 2N=2 A=0 PPDIS=0 CPDIS=0 -#endif .text -/* - * pxa_cpu_suspend() - * - * Forces CPU into sleep state. - * - * r0 = value for PWRMODE M field for desired sleep state - */ - -ENTRY(pxa_cpu_suspend) - -#ifndef CONFIG_IWMMXT - mra r2, r3, acc0 -#endif - stmfd sp!, {r2 - r12, lr} @ save registers on stack - +pxa_cpu_save_cp: @ get coprocessor registers mrc p14, 0, r3, c6, c0, 0 @ clock configuration, for turbo mode mrc p15, 0, r4, c15, c1, 0 @ CP access reg @@ -54,12 +38,36 @@ ENTRY(pxa_cpu_suspend) mov r10, sp stmfd sp!, {r3 - r10} - mov r5, r0 @ save sleep mode + mov pc, lr + +pxa_cpu_save_sp: @ preserve phys address of stack mov r0, sp + mov r2, lr bl sleep_phys_sp ldr r1, =sleep_save_sp str r0, [r1] + mov pc, r2 + +/* + * pxa27x_cpu_suspend() + * + * Forces CPU into sleep state. + * + * r0 = value for PWRMODE M field for desired sleep state + */ + +ENTRY(pxa27x_cpu_suspend) + +#ifndef CONFIG_IWMMXT + mra r2, r3, acc0 +#endif + stmfd sp!, {r2 - r12, lr} @ save registers on stack + + bl pxa_cpu_save_cp + + mov r5, r0 @ save sleep mode + bl pxa_cpu_save_sp @ clean data cache bl xscale_flush_kern_cache_all @@ -80,13 +88,55 @@ ENTRY(pxa_cpu_suspend) @ enable SDRAM self-refresh mode orr r5, r5, #MDREFR_SLFRSH -#ifdef CONFIG_PXA27x @ set SDCLKx divide-by-2 bits (this is part of a workaround for Errata 50) ldr r6, =MDREFR_KDIV orr r5, r5, r6 -#endif -#ifdef CONFIG_PXA25x + @ Intel PXA270 Specification Update notes problems sleeping + @ with core operating above 91 MHz + @ (see Errata 50, ...processor does not exit from sleep...) + + ldr r6, =CCCR + ldr r8, [r6] @ keep original value for resume + + ldr r7, =CCCR_SLEEP @ prepare CCCR sleep value + mov r0, #0x2 @ prepare value for CLKCFG + + @ align execution to a cache line + b pxa_cpu_do_suspend + +/* + * pxa27x_cpu_suspend() + * + * Forces CPU into sleep state. + * + * r0 = value for PWRMODE M field for desired sleep state + */ + +ENTRY(pxa25x_cpu_suspend) + stmfd sp!, {r2 - r12, lr} @ save registers on stack + + bl pxa_cpu_save_cp + + mov r5, r0 @ save sleep mode + bl pxa_cpu_save_sp + + @ clean data cache + bl xscale_flush_kern_cache_all + + @ prepare value for sleep mode + mov r1, r5 @ sleep mode + + @ prepare pointer to physical address 0 (virtual mapping in generic.c) + mov r2, #UNCACHED_PHYS_0 + + @ prepare SDRAM refresh settings + ldr r4, =MDREFR + ldr r5, [r4] + + @ enable SDRAM self-refresh mode + orr r5, r5, #MDREFR_SLFRSH + @ Intel PXA255 Specification Update notes problems @ about suspending with PXBus operating above 133MHz @ (see Errata 31, GPIO output signals, ... unpredictable in sleep @@ -118,30 +168,15 @@ ENTRY(pxa_cpu_suspend) mov r0, #0 mcr p14, 0, r0, c6, c0, 0 orr r0, r0, #2 @ initiate change bit -#endif -#ifdef CONFIG_PXA27x - @ Intel PXA270 Specification Update notes problems sleeping - @ with core operating above 91 MHz - @ (see Errata 50, ...processor does not exit from sleep...) - - ldr r6, =CCCR - ldr r8, [r6] @ keep original value for resume - - ldr r7, =CCCR_SLEEP @ prepare CCCR sleep value - mov r0, #0x2 @ prepare value for CLKCFG -#endif - - @ align execution to a cache line - b 1f + b pxa_cpu_do_suspend .ltorg .align 5 -1: +pxa_cpu_do_suspend: @ All needed values are now in registers. @ These last instructions should be in cache -#if defined(CONFIG_PXA25x) || defined(CONFIG_PXA27x) @ initiate the frequency change... str r7, [r6] mcr p14, 0, r0, c6, c0, 0 @@ -155,7 +190,6 @@ ENTRY(pxa_cpu_suspend) mov r0, #42 10: subs r0, r0, #1 bne 10b -#endif @ Do not reorder... @ Intel PXA270 Specification Update notes problems performing diff --git a/trunk/arch/arm/mach-pxa/time.c b/trunk/arch/arm/mach-pxa/time.c index 6f91fd2d061a..98d27e646b09 100644 --- a/trunk/arch/arm/mach-pxa/time.c +++ b/trunk/arch/arm/mach-pxa/time.c @@ -1,9 +1,11 @@ /* * arch/arm/mach-pxa/time.c * - * Author: Nicolas Pitre - * Created: Jun 15, 2001 - * Copyright: MontaVista Software Inc. + * PXA clocksource, clockevents, and OST interrupt handlers. + * Copyright (c) 2007 by Bill Gatliff . + * + * Derived from Nicolas Pitre's PXA timer handler Copyright (c) 2001 + * by MontaVista Software, Inc. (Nico, your code rocks!) * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License version 2 as @@ -12,164 +14,160 @@ #include #include -#include #include -#include -#include -#include -#include -#include - -#include -#include -#include -#include -#include +#include + #include #include #include - -static int pxa_set_rtc(void) -{ - unsigned long current_time = xtime.tv_sec; - - if (RTSR & RTSR_ALE) { - /* make sure not to forward the clock over an alarm */ - unsigned long alarm = RTAR; - if (current_time >= alarm && alarm >= RCNR) - return -ERESTARTSYS; - } - RCNR = current_time; - return 0; -} - -#ifdef CONFIG_NO_IDLE_HZ -static unsigned long initial_match; -static int match_posponed; -#endif - static irqreturn_t -pxa_timer_interrupt(int irq, void *dev_id) +pxa_ost0_interrupt(int irq, void *dev_id) { int next_match; - - write_seqlock(&xtime_lock); - -#ifdef CONFIG_NO_IDLE_HZ - if (match_posponed) { - match_posponed = 0; - OSMR0 = initial_match; - } -#endif - - /* Loop until we get ahead of the free running timer. - * This ensures an exact clock tick count and time accuracy. - * Since IRQs are disabled at this point, coherence between - * lost_ticks(updated in do_timer()) and the match reg value is - * ensured, hence we can use do_gettimeofday() from interrupt - * handlers. - * - * HACK ALERT: it seems that the PXA timer regs aren't updated right - * away in all cases when a write occurs. We therefore compare with - * 8 instead of 0 in the while() condition below to avoid missing a - * match if OSCR has already reached the next OSMR value. - * Experience has shown that up to 6 ticks are needed to work around - * this problem, but let's use 8 to be conservative. Note that this - * affect things only when the timer IRQ has been delayed by nearly - * exactly one tick period which should be a pretty rare event. + struct clock_event_device *c = dev_id; + + if (c->mode == CLOCK_EVT_MODE_ONESHOT) { + /* Disarm the compare/match, signal the event. */ + OIER &= ~OIER_E0; + c->event_handler(c); + } else if (c->mode == CLOCK_EVT_MODE_PERIODIC) { + /* Call the event handler as many times as necessary + * to recover missed events, if any (if we update + * OSMR0 and OSCR0 is still ahead of us, we've missed + * the event). As we're dealing with that, re-arm the + * compare/match for the next event. + * + * HACK ALERT: + * + * There's a latency between the instruction that + * writes to OSMR0 and the actual commit to the + * physical hardware, because the CPU doesn't (have + * to) run at bus speed, there's a write buffer + * between the CPU and the bus, etc. etc. So if the + * target OSCR0 is "very close", to the OSMR0 load + * value, the update to OSMR0 might not get to the + * hardware in time and we'll miss that interrupt. + * + * To be safe, if the new OSMR0 is "very close" to the + * target OSCR0 value, we call the event_handler as + * though the event actually happened. According to + * Nico's comment in the previous version of this + * code, experience has shown that 6 OSCR ticks is + * "very close" but he went with 8. We will use 16, + * based on the results of testing on PXA270. + * + * To be doubly sure, we also tell clkevt via + * clockevents_register_device() not to ask for + * anything that might put us "very close". */ +#define MIN_OSCR_DELTA 16 do { - timer_tick(); - OSSR = OSSR_M0; /* Clear match on timer 0 */ + OSSR = OSSR_M0; next_match = (OSMR0 += LATCH); - } while( (signed long)(next_match - OSCR) <= 8 ); - - write_sequnlock(&xtime_lock); + c->event_handler(c); + } while (((signed long)(next_match - OSCR) <= MIN_OSCR_DELTA) + && (c->mode == CLOCK_EVT_MODE_PERIODIC)); + } return IRQ_HANDLED; } -static struct irqaction pxa_timer_irq = { - .name = "PXA Timer Tick", - .flags = IRQF_DISABLED | IRQF_TIMER | IRQF_IRQPOLL, - .handler = pxa_timer_interrupt, +static int +pxa_osmr0_set_next_event(unsigned long delta, struct clock_event_device *dev) +{ + unsigned long irqflags; + + raw_local_irq_save(irqflags); + OSMR0 = OSCR + delta; + OSSR = OSSR_M0; + OIER |= OIER_E0; + raw_local_irq_restore(irqflags); + return 0; +} + +static void +pxa_osmr0_set_mode(enum clock_event_mode mode, struct clock_event_device *dev) +{ + unsigned long irqflags; + + switch (mode) { + case CLOCK_EVT_MODE_PERIODIC: + raw_local_irq_save(irqflags); + OSMR0 = OSCR + LATCH; + OSSR = OSSR_M0; + OIER |= OIER_E0; + raw_local_irq_restore(irqflags); + break; + + case CLOCK_EVT_MODE_ONESHOT: + raw_local_irq_save(irqflags); + OIER &= ~OIER_E0; + raw_local_irq_restore(irqflags); + break; + + case CLOCK_EVT_MODE_UNUSED: + case CLOCK_EVT_MODE_SHUTDOWN: + /* initializing, released, or preparing for suspend */ + raw_local_irq_save(irqflags); + OIER &= ~OIER_E0; + raw_local_irq_restore(irqflags); + break; + } +} + +static struct clock_event_device ckevt_pxa_osmr0 = { + .name = "osmr0", + .features = CLOCK_EVT_FEAT_PERIODIC | CLOCK_EVT_FEAT_ONESHOT, + .shift = 32, + .rating = 200, + .cpumask = CPU_MASK_CPU0, + .set_next_event = pxa_osmr0_set_next_event, + .set_mode = pxa_osmr0_set_mode, }; -static cycle_t pxa_get_cycles(void) +static cycle_t pxa_read_oscr(void) { return OSCR; } -static struct clocksource clocksource_pxa = { - .name = "pxa_timer", +static struct clocksource cksrc_pxa_oscr0 = { + .name = "oscr0", .rating = 200, - .read = pxa_get_cycles, + .read = pxa_read_oscr, .mask = CLOCKSOURCE_MASK(32), .shift = 20, .flags = CLOCK_SOURCE_IS_CONTINUOUS, }; +static struct irqaction pxa_ost0_irq = { + .name = "ost0", + .flags = IRQF_DISABLED | IRQF_TIMER | IRQF_IRQPOLL, + .handler = pxa_ost0_interrupt, + .dev_id = &ckevt_pxa_osmr0, +}; + static void __init pxa_timer_init(void) { - struct timespec tv; - unsigned long flags; + OIER = 0; + OSSR = OSSR_M0 | OSSR_M1 | OSSR_M2 | OSSR_M3; - set_rtc = pxa_set_rtc; + ckevt_pxa_osmr0.mult = + div_sc(CLOCK_TICK_RATE, NSEC_PER_SEC, ckevt_pxa_osmr0.shift); + ckevt_pxa_osmr0.max_delta_ns = + clockevent_delta2ns(0x7fffffff, &ckevt_pxa_osmr0); + ckevt_pxa_osmr0.min_delta_ns = + clockevent_delta2ns(MIN_OSCR_DELTA, &ckevt_pxa_osmr0) + 1; - OIER = 0; /* disable any timer interrupts */ - OSSR = 0xf; /* clear status on all timers */ - setup_irq(IRQ_OST0, &pxa_timer_irq); - local_irq_save(flags); - OIER = OIER_E0; /* enable match on timer 0 to cause interrupts */ - OSMR0 = OSCR + LATCH; /* set initial match */ - local_irq_restore(flags); - - /* - * OSCR runs continuously on PXA and is not written to, - * so we can use it as clock source directly. - */ - clocksource_pxa.mult = - clocksource_hz2mult(CLOCK_TICK_RATE, clocksource_pxa.shift); - clocksource_register(&clocksource_pxa); -} - -#ifdef CONFIG_NO_IDLE_HZ -static int pxa_dyn_tick_enable_disable(void) -{ - /* nothing to do */ - return 0; -} + cksrc_pxa_oscr0.mult = + clocksource_hz2mult(CLOCK_TICK_RATE, cksrc_pxa_oscr0.shift); -static void pxa_dyn_tick_reprogram(unsigned long ticks) -{ - if (ticks > 1) { - initial_match = OSMR0; - OSMR0 = initial_match + ticks * LATCH; - match_posponed = 1; - } -} + setup_irq(IRQ_OST0, &pxa_ost0_irq); -static irqreturn_t -pxa_dyn_tick_handler(int irq, void *dev_id) -{ - if (match_posponed) { - match_posponed = 0; - OSMR0 = initial_match; - if ( (signed long)(initial_match - OSCR) <= 8 ) - return pxa_timer_interrupt(irq, dev_id); - } - return IRQ_NONE; + clocksource_register(&cksrc_pxa_oscr0); + clockevents_register_device(&ckevt_pxa_osmr0); } -static struct dyn_tick_timer pxa_dyn_tick = { - .enable = pxa_dyn_tick_enable_disable, - .disable = pxa_dyn_tick_enable_disable, - .reprogram = pxa_dyn_tick_reprogram, - .handler = pxa_dyn_tick_handler, -}; -#endif - #ifdef CONFIG_PM static unsigned long osmr[4], oier; @@ -191,7 +189,10 @@ static void pxa_timer_resume(void) OIER = oier; /* - * OSMR0 is the system timer: make sure OSCR is sufficiently behind + * OSCR0 is the system timer, which has to increase + * monotonically until it rolls over in hardware. The value + * (OSMR0 - LATCH) is OSCR0 at the most recent system tick, + * which is a handy value to restore to OSCR0. */ OSCR = OSMR0 - LATCH; } @@ -204,7 +205,4 @@ struct sys_timer pxa_timer = { .init = pxa_timer_init, .suspend = pxa_timer_suspend, .resume = pxa_timer_resume, -#ifdef CONFIG_NO_IDLE_HZ - .dyn_tick = &pxa_dyn_tick, -#endif }; diff --git a/trunk/arch/arm/mach-rpc/riscpc.c b/trunk/arch/arm/mach-rpc/riscpc.c index 570cf937e73b..a454451c97c3 100644 --- a/trunk/arch/arm/mach-rpc/riscpc.c +++ b/trunk/arch/arm/mach-rpc/riscpc.c @@ -87,7 +87,7 @@ static void __init rpc_map_io(void) /* * Turn off floppy. */ - outb(0xc, 0x3f2); + writeb(0xc, PCIO_BASE + (0x3f2 << 2)); /* * RiscPC can't handle half-word loads and stores diff --git a/trunk/arch/arm/mach-s3c2410/Kconfig b/trunk/arch/arm/mach-s3c2410/Kconfig index d4b013b283c3..e2079cf9266f 100644 --- a/trunk/arch/arm/mach-s3c2410/Kconfig +++ b/trunk/arch/arm/mach-s3c2410/Kconfig @@ -9,6 +9,7 @@ config CPU_S3C2410 depends on ARCH_S3C2410 select S3C2410_CLOCK select S3C2410_GPIO + select CPU_LLSERIAL_S3C2410 select S3C2410_PM if PM help Support for S3C2410 and S3C2410A family from the S3C24XX line diff --git a/trunk/arch/arm/mach-s3c2410/clock.c b/trunk/arch/arm/mach-s3c2410/clock.c index 5b4831c4c1d8..cab9d6265e9e 100644 --- a/trunk/arch/arm/mach-s3c2410/clock.c +++ b/trunk/arch/arm/mach-s3c2410/clock.c @@ -37,7 +37,7 @@ #include #include -#include +#include #include #include diff --git a/trunk/arch/arm/mach-s3c2410/dma.c b/trunk/arch/arm/mach-s3c2410/dma.c index 67d1ad363973..80d83739ab9f 100644 --- a/trunk/arch/arm/mach-s3c2410/dma.c +++ b/trunk/arch/arm/mach-s3c2410/dma.c @@ -23,14 +23,14 @@ #include #include -#include +#include #include -#include +#include #include #include #include -#include -#include +#include +#include static struct s3c24xx_dma_map __initdata s3c2410_dma_mappings[] = { [DMACH_XD0] = { diff --git a/trunk/arch/arm/mach-s3c2410/mach-amlm5900.c b/trunk/arch/arm/mach-s3c2410/mach-amlm5900.c index 435adcce6482..43bb5e106302 100644 --- a/trunk/arch/arm/mach-s3c2410/mach-amlm5900.c +++ b/trunk/arch/arm/mach-s3c2410/mach-amlm5900.c @@ -48,7 +48,7 @@ #include #include -#include +#include #include #include diff --git a/trunk/arch/arm/mach-s3c2410/mach-bast.c b/trunk/arch/arm/mach-s3c2410/mach-bast.c index 8b52ea95d4f6..bc926992b4e4 100644 --- a/trunk/arch/arm/mach-s3c2410/mach-bast.c +++ b/trunk/arch/arm/mach-s3c2410/mach-bast.c @@ -36,13 +36,13 @@ #include //#include -#include +#include #include #include #include -#include -#include +#include +#include #include #include diff --git a/trunk/arch/arm/mach-s3c2410/mach-h1940.c b/trunk/arch/arm/mach-s3c2410/mach-h1940.c index 5c9bcea74767..9a172b4ad720 100644 --- a/trunk/arch/arm/mach-s3c2410/mach-h1940.c +++ b/trunk/arch/arm/mach-s3c2410/mach-h1940.c @@ -30,7 +30,7 @@ #include #include -#include +#include #include #include #include @@ -38,7 +38,7 @@ #include #include #include -#include +#include #include #include diff --git a/trunk/arch/arm/mach-s3c2410/mach-n30.c b/trunk/arch/arm/mach-s3c2410/mach-n30.c index 412e50c3d28a..621f548da610 100644 --- a/trunk/arch/arm/mach-s3c2410/mach-n30.c +++ b/trunk/arch/arm/mach-s3c2410/mach-n30.c @@ -33,9 +33,9 @@ #include #include -#include +#include #include -#include +#include #include #include diff --git a/trunk/arch/arm/mach-s3c2410/mach-otom.c b/trunk/arch/arm/mach-s3c2410/mach-otom.c index 1f899fa588df..717af40e4477 100644 --- a/trunk/arch/arm/mach-s3c2410/mach-otom.c +++ b/trunk/arch/arm/mach-s3c2410/mach-otom.c @@ -29,7 +29,7 @@ #include #include -#include +#include #include #include diff --git a/trunk/arch/arm/mach-s3c2410/mach-qt2410.c b/trunk/arch/arm/mach-s3c2410/mach-qt2410.c index d86e6f18bac9..e670b1e1631b 100644 --- a/trunk/arch/arm/mach-s3c2410/mach-qt2410.c +++ b/trunk/arch/arm/mach-s3c2410/mach-qt2410.c @@ -49,10 +49,10 @@ #include #include -#include +#include #include -#include -#include +#include +#include #include #include diff --git a/trunk/arch/arm/mach-s3c2410/mach-smdk2410.c b/trunk/arch/arm/mach-s3c2410/mach-smdk2410.c index 5852d300d52f..226550504c85 100644 --- a/trunk/arch/arm/mach-s3c2410/mach-smdk2410.c +++ b/trunk/arch/arm/mach-s3c2410/mach-smdk2410.c @@ -47,7 +47,7 @@ #include #include -#include +#include #include #include diff --git a/trunk/arch/arm/mach-s3c2410/mach-vr1000.c b/trunk/arch/arm/mach-s3c2410/mach-vr1000.c index 7b624bb00490..9f43f3f124f5 100644 --- a/trunk/arch/arm/mach-s3c2410/mach-vr1000.c +++ b/trunk/arch/arm/mach-s3c2410/mach-vr1000.c @@ -39,7 +39,7 @@ #include #include -#include +#include #include #include diff --git a/trunk/arch/arm/mach-s3c2410/s3c2410.c b/trunk/arch/arm/mach-s3c2410/s3c2410.c index 1a86a9803753..e580303cb0ab 100644 --- a/trunk/arch/arm/mach-s3c2410/s3c2410.c +++ b/trunk/arch/arm/mach-s3c2410/s3c2410.c @@ -29,7 +29,7 @@ #include #include -#include +#include #include #include @@ -40,7 +40,6 @@ static struct map_desc s3c2410_iodesc[] __initdata = { IODESC_ENT(CLKPWR), - IODESC_ENT(LCD), IODESC_ENT(TIMER), IODESC_ENT(WATCHDOG), }; diff --git a/trunk/arch/arm/mach-s3c2410/sleep.S b/trunk/arch/arm/mach-s3c2410/sleep.S index d1eeed2ad47c..8a9c5a2bb252 100644 --- a/trunk/arch/arm/mach-s3c2410/sleep.S +++ b/trunk/arch/arm/mach-s3c2410/sleep.S @@ -32,7 +32,7 @@ #include #include #include -#include +#include /* s3c2410_cpu_suspend * diff --git a/trunk/arch/arm/mach-s3c2412/Kconfig b/trunk/arch/arm/mach-s3c2412/Kconfig index d5be5d053264..8e8fe48ea47f 100644 --- a/trunk/arch/arm/mach-s3c2412/Kconfig +++ b/trunk/arch/arm/mach-s3c2412/Kconfig @@ -7,6 +7,7 @@ config CPU_S3C2412 bool depends on ARCH_S3C2410 + select CPU_LLSERIAL_S3C2440 select S3C2412_PM if PM select S3C2412_DMA if S3C2410_DMA help diff --git a/trunk/arch/arm/mach-s3c2412/clock.c b/trunk/arch/arm/mach-s3c2412/clock.c index 6a8e4448770b..8543dd6df391 100644 --- a/trunk/arch/arm/mach-s3c2412/clock.c +++ b/trunk/arch/arm/mach-s3c2412/clock.c @@ -37,7 +37,7 @@ #include #include -#include +#include #include #include diff --git a/trunk/arch/arm/mach-s3c2412/dma.c b/trunk/arch/arm/mach-s3c2412/dma.c index 668cccefe7b0..4b9425c1bf72 100644 --- a/trunk/arch/arm/mach-s3c2412/dma.c +++ b/trunk/arch/arm/mach-s3c2412/dma.c @@ -24,14 +24,14 @@ #include #include -#include +#include #include -#include +#include #include #include #include -#include -#include +#include +#include #define MAP(x) { (x)| DMA_CH_VALID, (x)| DMA_CH_VALID, (x)| DMA_CH_VALID, (x)| DMA_CH_VALID } diff --git a/trunk/arch/arm/mach-s3c2412/mach-smdk2413.c b/trunk/arch/arm/mach-s3c2412/mach-smdk2413.c index 063af09f899d..b126a530daa6 100644 --- a/trunk/arch/arm/mach-s3c2412/mach-smdk2413.c +++ b/trunk/arch/arm/mach-s3c2412/mach-smdk2413.c @@ -32,12 +32,12 @@ #include //#include -#include +#include #include #include #include -#include +#include #include #include diff --git a/trunk/arch/arm/mach-s3c2412/mach-vstms.c b/trunk/arch/arm/mach-s3c2412/mach-vstms.c index f2fbd65956ac..32982547cd63 100644 --- a/trunk/arch/arm/mach-s3c2412/mach-vstms.c +++ b/trunk/arch/arm/mach-s3c2412/mach-vstms.c @@ -33,14 +33,14 @@ #include #include -#include +#include #include #include #include #include -#include +#include #include #include diff --git a/trunk/arch/arm/mach-s3c2412/s3c2412.c b/trunk/arch/arm/mach-s3c2412/s3c2412.c index 782b5814ced2..e0ccb404623f 100644 --- a/trunk/arch/arm/mach-s3c2412/s3c2412.c +++ b/trunk/arch/arm/mach-s3c2412/s3c2412.c @@ -34,12 +34,12 @@ #include #include -#include +#include #include #include #include #include -#include +#include #include #include @@ -63,7 +63,6 @@ static inline void s3c2412_init_gpio2(void) static struct map_desc s3c2412_iodesc[] __initdata = { IODESC_ENT(CLKPWR), - IODESC_ENT(LCD), IODESC_ENT(TIMER), IODESC_ENT(WATCHDOG), }; diff --git a/trunk/arch/arm/mach-s3c2440/Kconfig b/trunk/arch/arm/mach-s3c2440/Kconfig index e3bfda098c0f..f1915bd61d15 100644 --- a/trunk/arch/arm/mach-s3c2440/Kconfig +++ b/trunk/arch/arm/mach-s3c2440/Kconfig @@ -12,6 +12,7 @@ config CPU_S3C2440 select S3C2410_GPIO select S3C2440_DMA if S3C2410_DMA select CPU_S3C244X + select CPU_LLSERIAL_S3C2440 help Support for S3C2440 Samsung Mobile CPU based systems. diff --git a/trunk/arch/arm/mach-s3c2440/dma.c b/trunk/arch/arm/mach-s3c2440/dma.c index cd035a3ec878..f509f062e749 100644 --- a/trunk/arch/arm/mach-s3c2440/dma.c +++ b/trunk/arch/arm/mach-s3c2440/dma.c @@ -23,14 +23,14 @@ #include #include -#include +#include #include -#include +#include #include #include #include -#include -#include +#include +#include static struct s3c24xx_dma_map __initdata s3c2440_dma_mappings[] = { [DMACH_XD0] = { diff --git a/trunk/arch/arm/mach-s3c2440/mach-anubis.c b/trunk/arch/arm/mach-s3c2440/mach-anubis.c index 29c163d300d4..3d3dfa95db8e 100644 --- a/trunk/arch/arm/mach-s3c2440/mach-anubis.c +++ b/trunk/arch/arm/mach-s3c2440/mach-anubis.c @@ -34,11 +34,11 @@ #include #include -#include +#include #include #include #include -#include +#include #include #include diff --git a/trunk/arch/arm/mach-s3c2440/mach-nexcoder.c b/trunk/arch/arm/mach-s3c2440/mach-nexcoder.c index 5e61f2166c76..afe0d7b7e389 100644 --- a/trunk/arch/arm/mach-s3c2440/mach-nexcoder.c +++ b/trunk/arch/arm/mach-s3c2440/mach-nexcoder.c @@ -36,7 +36,7 @@ //#include #include -#include +#include #include #include diff --git a/trunk/arch/arm/mach-s3c2440/mach-osiris.c b/trunk/arch/arm/mach-s3c2440/mach-osiris.c index 89f4c9c5777b..0ba7e9060c7b 100644 --- a/trunk/arch/arm/mach-s3c2440/mach-osiris.c +++ b/trunk/arch/arm/mach-s3c2440/mach-osiris.c @@ -31,11 +31,11 @@ #include #include -#include +#include #include #include #include -#include +#include #include #include diff --git a/trunk/arch/arm/mach-s3c2440/mach-rx3715.c b/trunk/arch/arm/mach-s3c2440/mach-rx3715.c index 866ff71c01dd..b59e6d39f2f2 100644 --- a/trunk/arch/arm/mach-s3c2440/mach-rx3715.c +++ b/trunk/arch/arm/mach-s3c2440/mach-rx3715.c @@ -38,12 +38,12 @@ #include #include -#include +#include #include #include #include -#include +#include #include #include diff --git a/trunk/arch/arm/mach-s3c2440/mach-smdk2440.c b/trunk/arch/arm/mach-s3c2440/mach-smdk2440.c index e167254e232e..670115b8a12e 100644 --- a/trunk/arch/arm/mach-s3c2440/mach-smdk2440.c +++ b/trunk/arch/arm/mach-s3c2440/mach-smdk2440.c @@ -31,7 +31,7 @@ #include #include -#include +#include #include #include diff --git a/trunk/arch/arm/mach-s3c2442/Kconfig b/trunk/arch/arm/mach-s3c2442/Kconfig index bf8d87abfab3..88d5fd34fe3b 100644 --- a/trunk/arch/arm/mach-s3c2442/Kconfig +++ b/trunk/arch/arm/mach-s3c2442/Kconfig @@ -11,6 +11,7 @@ config CPU_S3C2442 select S3C2410_GPIO select S3C2410_PM if PM select CPU_S3C244X + select CPU_LLSERIAL_S3C2440 help Support for S3C2442 Samsung Mobile CPU based systems. diff --git a/trunk/arch/arm/mach-s3c2443/Kconfig b/trunk/arch/arm/mach-s3c2443/Kconfig index c649bb2e7ce8..14252f573754 100644 --- a/trunk/arch/arm/mach-s3c2443/Kconfig +++ b/trunk/arch/arm/mach-s3c2443/Kconfig @@ -8,6 +8,7 @@ config CPU_S3C2443 bool depends on ARCH_S3C2410 select S3C2443_DMA if S3C2410_DMA + select CPU_LLSERIAL_S3C2440 help Support for the S3C2443 SoC from the S3C24XX line diff --git a/trunk/arch/arm/mach-s3c2443/dma.c b/trunk/arch/arm/mach-s3c2443/dma.c index f70e8ccffc3d..fc3ede82af8f 100644 --- a/trunk/arch/arm/mach-s3c2443/dma.c +++ b/trunk/arch/arm/mach-s3c2443/dma.c @@ -24,14 +24,14 @@ #include #include -#include +#include #include -#include +#include #include #include #include -#include -#include +#include +#include #define MAP(x) { \ [0] = (x) | DMA_CH_VALID, \ diff --git a/trunk/arch/arm/mach-s3c2443/mach-smdk2443.c b/trunk/arch/arm/mach-s3c2443/mach-smdk2443.c index b1eb709ee65a..8cd93130ef36 100644 --- a/trunk/arch/arm/mach-s3c2443/mach-smdk2443.c +++ b/trunk/arch/arm/mach-s3c2443/mach-smdk2443.c @@ -31,7 +31,7 @@ #include #include -#include +#include #include #include diff --git a/trunk/arch/arm/mach-sa1100/Kconfig b/trunk/arch/arm/mach-sa1100/Kconfig index cd67ab1b217b..f99d9013905f 100644 --- a/trunk/arch/arm/mach-sa1100/Kconfig +++ b/trunk/arch/arm/mach-sa1100/Kconfig @@ -101,6 +101,16 @@ config SA1100_JORNADA720 handheld computer. See for details. +config SA1100_JORNADA720_SSP + bool "HP Jornada 720 Extended SSP driver" + select SA1100_SSP + depends on SA1100_JORNADA720 + help + Say Y here if you have a HP Jornada 7xx handheld computer and you + want to access devices connected to the MCU. Those include the + keyboard, touchscreen, backlight and battery. This driver also activates + the generic SSP which it extends. + config SA1100_HACKKIT bool "HackKit Core CPU Board" help @@ -145,8 +155,7 @@ config SA1100_SSP help Say Y here to enable support for the generic PIO SSP driver. This isn't for audio support, but for attached sensors and - other devices, eg for BadgePAD 4 sensor support, or Jornada - 720 touchscreen support. + other devices, eg for BadgePAD 4 sensor support. config H3600_SLEEVE tristate "Compaq iPAQ Handheld sleeve support" diff --git a/trunk/arch/arm/mach-sa1100/Makefile b/trunk/arch/arm/mach-sa1100/Makefile index e27f15042a22..7a61e8d33ab7 100644 --- a/trunk/arch/arm/mach-sa1100/Makefile +++ b/trunk/arch/arm/mach-sa1100/Makefile @@ -31,6 +31,7 @@ obj-$(CONFIG_SA1100_HACKKIT) += hackkit.o led-$(CONFIG_SA1100_HACKKIT) += leds-hackkit.o obj-$(CONFIG_SA1100_JORNADA720) += jornada720.o +obj-$(CONFIG_SA1100_JORNADA720_SSP) += jornada720_ssp.o obj-$(CONFIG_SA1100_LART) += lart.o led-$(CONFIG_SA1100_LART) += leds-lart.o @@ -51,3 +52,4 @@ obj-$(CONFIG_LEDS) += $(led-y) # Miscelaneous functions obj-$(CONFIG_PM) += pm.o sleep.o obj-$(CONFIG_SA1100_SSP) += ssp.o + diff --git a/trunk/arch/arm/mach-sa1100/jornada720_ssp.c b/trunk/arch/arm/mach-sa1100/jornada720_ssp.c new file mode 100644 index 000000000000..0a45e1ac8ad6 --- /dev/null +++ b/trunk/arch/arm/mach-sa1100/jornada720_ssp.c @@ -0,0 +1,201 @@ +/** + * arch/arm/mac-sa1100/jornada720_ssp.c + * + * Copyright (C) 2006/2007 Kristoffer Ericson + * Copyright (C) 2006 Filip Zyzniewski + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License version 2 as + * published by the Free Software Foundation. + * + * SSP driver for the HP Jornada 710/720/728 + */ + +#include +#include +#include +#include +#include +#include +#include +#include + +#include +#include +#include + +static DEFINE_SPINLOCK(jornada_ssp_lock); +static unsigned long jornada_ssp_flags; + +/** + * jornada_ssp_reverse - reverses input byte + * + * we need to reverse all data we recieve from the mcu due to its physical location + * returns : 01110111 -> 11101110 + */ +u8 inline jornada_ssp_reverse(u8 byte) +{ + return + ((0x80 & byte) >> 7) | + ((0x40 & byte) >> 5) | + ((0x20 & byte) >> 3) | + ((0x10 & byte) >> 1) | + ((0x08 & byte) << 1) | + ((0x04 & byte) << 3) | + ((0x02 & byte) << 5) | + ((0x01 & byte) << 7); +}; +EXPORT_SYMBOL(jornada_ssp_reverse); + +/** + * jornada_ssp_byte - waits for ready ssp bus and sends byte + * + * waits for fifo buffer to clear and then transmits, if it doesn't then we will + * timeout after rounds. Needs mcu running before its called. + * + * returns : %mcu output on success + * : %-ETIMEOUT on timeout + */ +int jornada_ssp_byte(u8 byte) +{ + int timeout = 400000; + u16 ret; + + while ((GPLR & GPIO_GPIO10)) { + if (!--timeout) { + printk(KERN_WARNING "SSP: timeout while waiting for transmit\n"); + return -ETIMEDOUT; + } + cpu_relax(); + } + + ret = jornada_ssp_reverse(byte) << 8; + + ssp_write_word(ret); + ssp_read_word(&ret); + + return jornada_ssp_reverse(ret); +}; +EXPORT_SYMBOL(jornada_ssp_byte); + +/** + * jornada_ssp_inout - decide if input is command or trading byte + * + * returns : (jornada_ssp_byte(byte)) on success + * : %-ETIMEOUT on timeout failure + */ +int jornada_ssp_inout(u8 byte) +{ + int ret, i; + + /* true means command byte */ + if (byte != TXDUMMY) { + ret = jornada_ssp_byte(byte); + /* Proper return to commands is TxDummy */ + if (ret != TXDUMMY) { + for (i = 0; i < 256; i++)/* flushing bus */ + if (jornada_ssp_byte(TXDUMMY) == -1) + break; + return -ETIMEDOUT; + } + } else /* Exchange TxDummy for data */ + ret = jornada_ssp_byte(TXDUMMY); + + return ret; +}; +EXPORT_SYMBOL(jornada_ssp_inout); + +/** + * jornada_ssp_start - enable mcu + * + */ +int jornada_ssp_start() +{ + spin_lock_irqsave(&jornada_ssp_lock, jornada_ssp_flags); + GPCR = GPIO_GPIO25; + udelay(50); + return 0; +}; +EXPORT_SYMBOL(jornada_ssp_start); + +/** + * jornada_ssp_end - disable mcu and turn off lock + * + */ +int jornada_ssp_end() +{ + GPSR = GPIO_GPIO25; + spin_unlock_irqrestore(&jornada_ssp_lock, jornada_ssp_flags); + return 0; +}; +EXPORT_SYMBOL(jornada_ssp_end); + +static int __init jornada_ssp_probe(struct platform_device *dev) +{ + int ret; + + GPSR = GPIO_GPIO25; + + ret = ssp_init(); + + /* worked fine, lets not bother with anything else */ + if (!ret) { + printk(KERN_INFO "SSP: device initialized with irq\n"); + return ret; + } + + printk(KERN_WARNING "SSP: initialization failed, trying non-irq solution \n"); + + /* init of Serial 4 port */ + Ser4MCCR0 = 0; + Ser4SSCR0 = 0x0387; + Ser4SSCR1 = 0x18; + + /* clear out any left over data */ + ssp_flush(); + + /* enable MCU */ + jornada_ssp_start(); + + /* see if return value makes sense */ + ret = jornada_ssp_inout(GETBRIGHTNESS); + + /* seems like it worked, just feed it with TxDummy to get rid of data */ + if (ret == TxDummy) + jornada_ssp_inout(TXDUMMY); + + jornada_ssp_end(); + + /* failed, lets just kill everything */ + if (ret == -ETIMEDOUT) { + printk(KERN_WARNING "SSP: attempts failed, bailing\n"); + ssp_exit(); + return -ENODEV; + } + + /* all fine */ + printk(KERN_INFO "SSP: device initialized\n"); + return 0; +}; + +static int jornada_ssp_remove(struct platform_device *dev) +{ + /* Note that this doesnt actually remove the driver, since theres nothing to remove + * It just makes sure everything is turned off */ + GPSR = GPIO_GPIO25; + ssp_exit(); + return 0; +}; + +struct platform_driver jornadassp_driver = { + .probe = jornada_ssp_probe, + .remove = jornada_ssp_remove, + .driver = { + .name = "jornada_ssp", + }, +}; + +static int __init jornada_ssp_init(void) +{ + return platform_driver_register(&jornadassp_driver); +} diff --git a/trunk/arch/arm/mach-sa1100/neponset.c b/trunk/arch/arm/mach-sa1100/neponset.c index 3a0a1ee2542d..9f1ed1509301 100644 --- a/trunk/arch/arm/mach-sa1100/neponset.c +++ b/trunk/arch/arm/mach-sa1100/neponset.c @@ -292,6 +292,8 @@ static struct platform_device *devices[] __initdata = { &smc91x_device, }; +extern void sa1110_mb_disable(void); + static int __init neponset_init(void) { platform_driver_register(&neponset_device_driver); diff --git a/trunk/arch/arm/mm/Kconfig b/trunk/arch/arm/mm/Kconfig index e7904bc92c73..12161ae445da 100644 --- a/trunk/arch/arm/mm/Kconfig +++ b/trunk/arch/arm/mm/Kconfig @@ -345,13 +345,14 @@ config CPU_XSC3 # ARMv6 config CPU_V6 bool "Support ARM V6 processor" - depends on ARCH_INTEGRATOR || MACH_REALVIEW_EB || ARCH_OMAP2 + depends on ARCH_INTEGRATOR || MACH_REALVIEW_EB || ARCH_OMAP2 || ARCH_MX3 + default y if ARCH_MX3 select CPU_32v6 select CPU_ABRT_EV6 select CPU_CACHE_V6 select CPU_CACHE_VIPT select CPU_CP15_MMU - select CPU_HAS_ASID + select CPU_HAS_ASID if MMU select CPU_COPY_V6 if MMU select CPU_TLB_V6 if MMU @@ -359,7 +360,7 @@ config CPU_V6 config CPU_32v6K bool "Support ARM V6K processor extensions" if !SMP depends on CPU_V6 - default y if SMP + default y if SMP && !ARCH_MX3 help Say Y here if your ARMv6 processor supports the 'K' extension. This enables the kernel to use some instructions not present @@ -377,7 +378,7 @@ config CPU_V7 select CPU_CACHE_V7 select CPU_CACHE_VIPT select CPU_CP15_MMU - select CPU_HAS_ASID + select CPU_HAS_ASID if MMU select CPU_COPY_V6 if MMU select CPU_TLB_V7 if MMU @@ -405,6 +406,7 @@ config CPU_32v5 config CPU_32v6 bool + select TLS_REG_EMUL if !CPU_32v6K && !MMU config CPU_32v7 bool @@ -598,7 +600,7 @@ config CPU_DCACHE_SIZE config CPU_DCACHE_WRITETHROUGH bool "Force write through D-cache" - depends on (CPU_ARM740T || CPU_ARM920T || CPU_ARM922T || CPU_ARM925T || CPU_ARM926T || CPU_ARM940T || CPU_ARM946E || CPU_ARM1020 || CPU_V6) && !CPU_DCACHE_DISABLE + depends on (CPU_ARM740T || CPU_ARM920T || CPU_ARM922T || CPU_ARM925T || CPU_ARM926T || CPU_ARM940T || CPU_ARM946E || CPU_ARM1020) && !CPU_DCACHE_DISABLE default y if CPU_ARM925T help Say Y here to use the data cache in writethrough mode. Unless you @@ -611,12 +613,6 @@ config CPU_CACHE_ROUND_ROBIN Say Y here to use the predictable round-robin cache replacement policy. Unless you specifically require this or are unsure, say N. -config CPU_L2CACHE_DISABLE - bool "Disable level 2 cache" - depends on CPU_V7 - help - Say Y here to disable the level 2 cache. If unsure, say N. - config CPU_BPREDICT_DISABLE bool "Disable branch prediction" depends on CPU_ARM1020 || CPU_V6 || CPU_XSC3 || CPU_V7 diff --git a/trunk/arch/arm/mm/cache-l2x0.c b/trunk/arch/arm/mm/cache-l2x0.c index 08a36f1b35d2..b4e9b734e0bd 100644 --- a/trunk/arch/arm/mm/cache-l2x0.c +++ b/trunk/arch/arm/mm/cache-l2x0.c @@ -17,6 +17,7 @@ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ #include +#include #include #include @@ -25,14 +26,19 @@ #define CACHE_LINE_SIZE 32 static void __iomem *l2x0_base; +static DEFINE_SPINLOCK(l2x0_lock); static inline void sync_writel(unsigned long val, unsigned long reg, unsigned long complete_mask) { + unsigned long flags; + + spin_lock_irqsave(&l2x0_lock, flags); writel(val, l2x0_base + reg); /* wait for the operation to complete */ while (readl(l2x0_base + reg) & complete_mask) ; + spin_unlock_irqrestore(&l2x0_lock, flags); } static inline void cache_sync(void) diff --git a/trunk/arch/arm/mm/fault.c b/trunk/arch/arm/mm/fault.c index 75d491448e45..846cce48e2b7 100644 --- a/trunk/arch/arm/mm/fault.c +++ b/trunk/arch/arm/mm/fault.c @@ -145,8 +145,8 @@ void do_bad_area(unsigned long addr, unsigned int fsr, struct pt_regs *regs) __do_kernel_fault(mm, addr, fsr, regs); } -#define VM_FAULT_BADMAP (-20) -#define VM_FAULT_BADACCESS (-21) +#define VM_FAULT_BADMAP 0x010000 +#define VM_FAULT_BADACCESS 0x020000 static int __do_page_fault(struct mm_struct *mm, unsigned long addr, unsigned int fsr, @@ -183,20 +183,20 @@ __do_page_fault(struct mm_struct *mm, unsigned long addr, unsigned int fsr, */ survive: fault = handle_mm_fault(mm, vma, addr & PAGE_MASK, fsr & (1 << 11)); - - /* - * Handle the "normal" cases first - successful and sigbus - */ - switch (fault) { - case VM_FAULT_MAJOR: + if (unlikely(fault & VM_FAULT_ERROR)) { + if (fault & VM_FAULT_OOM) + goto out_of_memory; + else if (fault & VM_FAULT_SIGBUS) + return fault; + BUG(); + } + if (fault & VM_FAULT_MAJOR) tsk->maj_flt++; - return fault; - case VM_FAULT_MINOR: + else tsk->min_flt++; - case VM_FAULT_SIGBUS: - return fault; - } + return fault; +out_of_memory: if (!is_init(tsk)) goto out; @@ -249,7 +249,7 @@ do_page_fault(unsigned long addr, unsigned int fsr, struct pt_regs *regs) /* * Handle the "normal" case first - VM_FAULT_MAJOR / VM_FAULT_MINOR */ - if (fault >= VM_FAULT_MINOR) + if (likely(!(fault & (VM_FAULT_ERROR | VM_FAULT_BADMAP | VM_FAULT_BADACCESS)))) return 0; /* @@ -259,8 +259,7 @@ do_page_fault(unsigned long addr, unsigned int fsr, struct pt_regs *regs) if (!user_mode(regs)) goto no_context; - switch (fault) { - case VM_FAULT_OOM: + if (fault & VM_FAULT_OOM) { /* * We ran out of memory, or some other thing * happened to us that made us unable to handle @@ -269,17 +268,15 @@ do_page_fault(unsigned long addr, unsigned int fsr, struct pt_regs *regs) printk("VM: killing process %s\n", tsk->comm); do_exit(SIGKILL); return 0; - - case VM_FAULT_SIGBUS: + } + if (fault & VM_FAULT_SIGBUS) { /* * We had some memory, but were unable to * successfully fix up this page fault. */ sig = SIGBUS; code = BUS_ADRERR; - break; - - default: + } else { /* * Something tried to access memory that * isn't in our memory map.. @@ -287,7 +284,6 @@ do_page_fault(unsigned long addr, unsigned int fsr, struct pt_regs *regs) sig = SIGSEGV; code = fault == VM_FAULT_BADACCESS ? SEGV_ACCERR : SEGV_MAPERR; - break; } __do_user_fault(tsk, addr, fsr, sig, code, regs); diff --git a/trunk/arch/arm/mm/mmu.c b/trunk/arch/arm/mm/mmu.c index 3b5e47dc0c97..e5d61ee3d4a1 100644 --- a/trunk/arch/arm/mm/mmu.c +++ b/trunk/arch/arm/mm/mmu.c @@ -114,6 +114,10 @@ static void __init early_cachepolicy(char **p) } if (i == ARRAY_SIZE(cache_policies)) printk(KERN_ERR "ERROR: unknown or unsupported cache policy\n"); + if (cpu_architecture() >= CPU_ARCH_ARMv6) { + printk(KERN_WARNING "Only cachepolicy=writeback supported on ARMv6 and later\n"); + cachepolicy = CPOLICY_WRITEBACK; + } flush_cache_all(); set_cr(cr_alignment); } @@ -252,13 +256,15 @@ static void __init build_mem_type_table(void) int cpu_arch = cpu_architecture(); int i; + if (cpu_arch < CPU_ARCH_ARMv6) { #if defined(CONFIG_CPU_DCACHE_DISABLE) - if (cachepolicy > CPOLICY_BUFFERED) - cachepolicy = CPOLICY_BUFFERED; + if (cachepolicy > CPOLICY_BUFFERED) + cachepolicy = CPOLICY_BUFFERED; #elif defined(CONFIG_CPU_DCACHE_WRITETHROUGH) - if (cachepolicy > CPOLICY_WRITETHROUGH) - cachepolicy = CPOLICY_WRITETHROUGH; + if (cachepolicy > CPOLICY_WRITETHROUGH) + cachepolicy = CPOLICY_WRITETHROUGH; #endif + } if (cpu_arch < CPU_ARCH_ARMv5) { if (cachepolicy >= CPOLICY_WRITEALLOC) cachepolicy = CPOLICY_WRITEBACK; diff --git a/trunk/arch/arm/mm/proc-syms.c b/trunk/arch/arm/mm/proc-syms.c index 9f396b4fa0b7..2b5ba396e3a6 100644 --- a/trunk/arch/arm/mm/proc-syms.c +++ b/trunk/arch/arm/mm/proc-syms.c @@ -31,12 +31,14 @@ EXPORT_SYMBOL(__cpuc_coherent_kern_range); EXPORT_SYMBOL(cpu_cache); #endif +#ifdef CONFIG_MMU #ifndef MULTI_USER EXPORT_SYMBOL(__cpu_clear_user_page); EXPORT_SYMBOL(__cpu_copy_user_page); #else EXPORT_SYMBOL(cpu_user); #endif +#endif /* * No module should need to touch the TLB (and currently diff --git a/trunk/arch/arm/mm/proc-v7.S b/trunk/arch/arm/mm/proc-v7.S index 718f4782ee8b..e0acc5ae6f6f 100644 --- a/trunk/arch/arm/mm/proc-v7.S +++ b/trunk/arch/arm/mm/proc-v7.S @@ -77,6 +77,7 @@ ENTRY(cpu_v7_dcache_clean_area) * - we are not using split page tables */ ENTRY(cpu_v7_switch_mm) +#ifdef CONFIG_MMU mov r2, #0 ldr r1, [r1, #MM_CONTEXT_ID] @ get mm->context.id orr r0, r0, #TTB_RGN_OC_WB @ mark PTWs outer cacheable, WB @@ -86,6 +87,7 @@ ENTRY(cpu_v7_switch_mm) isb mcr p15, 0, r1, c13, c0, 1 @ set context ID isb +#endif mov pc, lr /* @@ -109,6 +111,7 @@ ENTRY(cpu_v7_switch_mm) * 1111 0 1 1 r/w r/w */ ENTRY(cpu_v7_set_pte_ext) +#ifdef CONFIG_MMU str r1, [r0], #-2048 @ linux version bic r3, r1, #0x000003f0 @@ -136,6 +139,7 @@ ENTRY(cpu_v7_set_pte_ext) str r3, [r0] mcr p15, 0, r0, c7, c10, 1 @ flush_pte +#endif mov pc, lr cpu_v7_name: @@ -169,6 +173,7 @@ __v7_setup: mcr p15, 0, r10, c7, c5, 0 @ I+BTB cache invalidate #endif dsb +#ifdef CONFIG_MMU mcr p15, 0, r10, c8, c7, 0 @ invalidate I + D TLBs mcr p15, 0, r10, c2, c0, 2 @ TTB control register orr r4, r4, #TTB_RGN_OC_WB @ mark PTWs outer cacheable, WB @@ -176,21 +181,12 @@ __v7_setup: mcr p15, 0, r4, c2, c0, 1 @ load TTB1 mov r10, #0x1f @ domains 0, 1 = manager mcr p15, 0, r10, c3, c0, 0 @ load domain access register -#ifndef CONFIG_CPU_L2CACHE_DISABLE - @ L2 cache configuration in the L2 aux control register - mrc p15, 1, r10, c9, c0, 2 - bic r10, r10, #(1 << 16) @ L2 outer cache - mcr p15, 1, r10, c9, c0, 2 - @ L2 cache is enabled in the aux control register - mrc p15, 0, r10, c1, c0, 1 - orr r10, r10, #2 - mcr p15, 0, r10, c1, c0, 1 #endif - mrc p15, 0, r0, c1, c0, 0 @ read control register - ldr r10, cr1_clear @ get mask for bits to clear - bic r0, r0, r10 @ clear bits them - ldr r10, cr1_set @ get mask for bits to set - orr r0, r0, r10 @ set them + adr r5, v7_crval + ldmia r5, {r5, r6} + mrc p15, 0, r0, c1, c0, 0 @ read control register + bic r0, r0, r5 @ clear bits them + orr r0, r0, r6 @ set them mov pc, lr @ return to head.S:__ret /* @@ -199,12 +195,9 @@ __v7_setup: * rrrr rrrx xxx0 0101 xxxx xxxx x111 xxxx < forced * 0 110 0011 1.00 .111 1101 < we want */ - .type cr1_clear, #object - .type cr1_set, #object -cr1_clear: - .word 0x0120c302 -cr1_set: - .word 0x00c0387d + .type v7_crval, #object +v7_crval: + crval clear=0x0120c302, mmuset=0x00c0387d, ucset=0x00c0187c __v7_setup_stack: .space 4 * 11 @ 11 registers diff --git a/trunk/arch/arm/plat-iop/time.c b/trunk/arch/arm/plat-iop/time.c index 100d57ad98ed..ba3d21d8fba3 100644 --- a/trunk/arch/arm/plat-iop/time.c +++ b/trunk/arch/arm/plat-iop/time.c @@ -78,6 +78,13 @@ static struct irqaction iop_timer_irq = { .flags = IRQF_DISABLED | IRQF_TIMER | IRQF_IRQPOLL, }; +static unsigned long iop_tick_rate; +unsigned long get_iop_tick_rate(void) +{ + return iop_tick_rate; +} +EXPORT_SYMBOL(get_iop_tick_rate); + void __init iop_init_time(unsigned long tick_rate) { u32 timer_ctl; @@ -85,6 +92,7 @@ void __init iop_init_time(unsigned long tick_rate) ticks_per_jiffy = (tick_rate + HZ/2) / HZ; ticks_per_usec = tick_rate / 1000000; next_jiffy_time = 0xffffffff; + iop_tick_rate = tick_rate; timer_ctl = IOP_TMR_EN | IOP_TMR_PRIVILEGED | IOP_TMR_RELOAD | IOP_TMR_RATIO_1_1; diff --git a/trunk/arch/arm/plat-mxc/Kconfig b/trunk/arch/arm/plat-mxc/Kconfig new file mode 100644 index 000000000000..03a65c0dfb60 --- /dev/null +++ b/trunk/arch/arm/plat-mxc/Kconfig @@ -0,0 +1,20 @@ +if ARCH_MXC + +menu "Freescale MXC Implementations" + +choice + prompt "MXC/iMX System Type" + default 0 + +config ARCH_MX3 + bool "MX3-based" + help + This enables support for systems based on the Freescale i.MX3 family + +endchoice + +source "arch/arm/mach-mx3/Kconfig" + +endmenu + +endif diff --git a/trunk/arch/arm/plat-mxc/Makefile b/trunk/arch/arm/plat-mxc/Makefile new file mode 100644 index 000000000000..66ad9c2b6d64 --- /dev/null +++ b/trunk/arch/arm/plat-mxc/Makefile @@ -0,0 +1,10 @@ +# +# Makefile for the linux kernel. +# + +# Common support +obj-y := irq.o + +obj-m := +obj-n := +obj- := diff --git a/trunk/arch/arm/plat-mxc/irq.c b/trunk/arch/arm/plat-mxc/irq.c new file mode 100644 index 000000000000..87d253bc3d3c --- /dev/null +++ b/trunk/arch/arm/plat-mxc/irq.c @@ -0,0 +1,83 @@ +/* + * Copyright 2004-2007 Freescale Semiconductor, Inc. All Rights Reserved. + */ + +/* + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License version 2 as + * published by the Free Software Foundation. + */ + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +/*! + * Disable interrupt number "irq" in the AVIC + * + * @param irq interrupt source number + */ +static void mxc_mask_irq(unsigned int irq) +{ + __raw_writel(irq, AVIC_INTDISNUM); +} + +/*! + * Enable interrupt number "irq" in the AVIC + * + * @param irq interrupt source number + */ +static void mxc_unmask_irq(unsigned int irq) +{ + __raw_writel(irq, AVIC_INTENNUM); +} + +static struct irq_chip mxc_avic_chip = { + .mask_ack = mxc_mask_irq, + .mask = mxc_mask_irq, + .unmask = mxc_unmask_irq, +}; + +/*! + * This function initializes the AVIC hardware and disables all the + * interrupts. It registers the interrupt enable and disable functions + * to the kernel for each interrupt source. + */ +void __init mxc_init_irq(void) +{ + int i; + u32 reg; + + /* put the AVIC into the reset value with + * all interrupts disabled + */ + __raw_writel(0, AVIC_INTCNTL); + __raw_writel(0x1f, AVIC_NIMASK); + + /* disable all interrupts */ + __raw_writel(0, AVIC_INTENABLEH); + __raw_writel(0, AVIC_INTENABLEL); + + /* all IRQ no FIQ */ + __raw_writel(0, AVIC_INTTYPEH); + __raw_writel(0, AVIC_INTTYPEL); + for (i = 0; i < MXC_MAX_INT_LINES; i++) { + set_irq_chip(i, &mxc_avic_chip); + set_irq_handler(i, handle_level_irq); + set_irq_flags(i, IRQF_VALID); + } + + /* Set WDOG2's interrupt the highest priority level (bit 28-31) */ + reg = __raw_readl(AVIC_NIPRIORITY6); + reg |= (0xF << 28); + __raw_writel(reg, AVIC_NIPRIORITY6); + + printk(KERN_INFO "MXC IRQ initialized\n"); +} diff --git a/trunk/arch/arm/plat-omap/timer32k.c b/trunk/arch/arm/plat-omap/timer32k.c index 2feceec8eccd..b0af014b0e2c 100644 --- a/trunk/arch/arm/plat-omap/timer32k.c +++ b/trunk/arch/arm/plat-omap/timer32k.c @@ -156,6 +156,8 @@ static void omap_32k_timer_set_mode(enum clock_event_mode mode, case CLOCK_EVT_MODE_SHUTDOWN: omap_32k_timer_stop(); break; + case CLOCK_EVT_MODE_RESUME: + break; } } diff --git a/trunk/arch/arm/plat-s3c/Kconfig b/trunk/arch/arm/plat-s3c/Kconfig new file mode 100644 index 000000000000..31656c33e05e --- /dev/null +++ b/trunk/arch/arm/plat-s3c/Kconfig @@ -0,0 +1,104 @@ +# arch/arm/plat-s3c/Kconfig +# +# Copyright 2007 Simtec Electronics +# +# Licensed under GPLv2 + +config PLAT_S3C + bool + depends on ARCH_S3C2410 + default y if ARCH_S3C2410 + select NO_IOPORT + help + Base platform code for any Samsung S3C device + +# low-level serial option nodes + +config CPU_LLSERIAL_S3C2410_ONLY + bool + depends on ARCH_S3C2410 + default y if CPU_LLSERIAL_S3C2410 && !CPU_LLSERIAL_S3C2440 + +config CPU_LLSERIAL_S3C2440_ONLY + bool + depends on ARCH_S3C2410 + default y if CPU_LLSERIAL_S3C2440 && !CPU_LLSERIAL_S3C2410 + +config CPU_LLSERIAL_S3C2410 + bool + depends on ARCH_S3C2410 + help + Selected if there is an S3C2410 (or register compatible) serial + low-level implementation needed + +config CPU_LLSERIAL_S3C2440 + bool + depends on ARCH_S3C2410 + help + Selected if there is an S3C2440 (or register compatible) serial + low-level implementation needed + +# boot configurations + +comment "Boot options" + +config S3C_BOOT_WATCHDOG + bool "S3C Initialisation watchdog" + depends on PLAT_S3C && S3C2410_WATCHDOG + help + Say y to enable the watchdog during the kernel decompression + stage. If the kernel fails to uncompress, then the watchdog + will trigger a reset and the system should restart. + +config S3C_BOOT_ERROR_RESET + bool "S3C Reboot on decompression error" + depends on PLAT_S3C + help + Say y here to use the watchdog to reset the system if the + kernel decompressor detects an error during decompression. + +comment "Power management" + +config S3C2410_PM_DEBUG + bool "S3C2410 PM Suspend debug" + depends on PLAT_S3C && PM + help + Say Y here if you want verbose debugging from the PM Suspend and + Resume code. See + for more information. + +config S3C2410_PM_CHECK + bool "S3C2410 PM Suspend Memory CRC" + depends on PLAT_S3C && PM && CRC32 + help + Enable the PM code's memory area checksum over sleep. This option + will generate CRCs of all blocks of memory, and store them before + going to sleep. The blocks are then checked on resume for any + errors. + + Note, this can take several seconds depending on memory size + and CPU speed. + + See + +config S3C2410_PM_CHECK_CHUNKSIZE + int "S3C2410 PM Suspend CRC Chunksize (KiB)" + depends on PLAT_S3C && PM && S3C2410_PM_CHECK + default 64 + help + Set the chunksize in Kilobytes of the CRC for checking memory + corruption over suspend and resume. A smaller value will mean that + the CRC data block will take more memory, but wil identify any + faults with better precision. + + See + +config S3C_LOWLEVEL_UART_PORT + int "S3C UART to use for low-level messages" + depends on PLAT_S3C + default 0 + help + Choice of which UART port to use for the low-level messages, + such as the `Uncompressing...` at start time. The value of + this configuration should be between zero and two. The port + must have been initialised by the boot-loader before use. diff --git a/trunk/arch/arm/plat-s3c24xx/Kconfig b/trunk/arch/arm/plat-s3c24xx/Kconfig index b972f36d547c..b66fb3c4e228 100644 --- a/trunk/arch/arm/plat-s3c24xx/Kconfig +++ b/trunk/arch/arm/plat-s3c24xx/Kconfig @@ -10,7 +10,7 @@ config PLAT_S3C24XX default y if ARCH_S3C2410 select NO_IOPORT help - Base platform code for any Samsung S3C device + Base platform code for any Samsung S3C24XX device if PLAT_S3C24XX @@ -26,64 +26,6 @@ config PM_SIMTEC Common power management code for systems that are compatible with the Simtec style of power management -config S3C2410_BOOT_WATCHDOG - bool "S3C2410 Initialisation watchdog" - depends on ARCH_S3C2410 && S3C2410_WATCHDOG - help - Say y to enable the watchdog during the kernel decompression - stage. If the kernel fails to uncompress, then the watchdog - will trigger a reset and the system should restart. - -config S3C2410_BOOT_ERROR_RESET - bool "S3C2410 Reboot on decompression error" - depends on ARCH_S3C2410 - help - Say y here to use the watchdog to reset the system if the - kernel decompressor detects an error during decompression. - -config S3C2410_PM_DEBUG - bool "S3C2410 PM Suspend debug" - depends on ARCH_S3C2410 && PM - help - Say Y here if you want verbose debugging from the PM Suspend and - Resume code. See - for more information. - -config S3C2410_PM_CHECK - bool "S3C2410 PM Suspend Memory CRC" - depends on ARCH_S3C2410 && PM && CRC32 - help - Enable the PM code's memory area checksum over sleep. This option - will generate CRCs of all blocks of memory, and store them before - going to sleep. The blocks are then checked on resume for any - errors. - - Note, this can take several seconds depending on memory size - and CPU speed. - - See - -config S3C2410_PM_CHECK_CHUNKSIZE - int "S3C2410 PM Suspend CRC Chunksize (KiB)" - depends on ARCH_S3C2410 && PM && S3C2410_PM_CHECK - default 64 - help - Set the chunksize in Kilobytes of the CRC for checking memory - corruption over suspend and resume. A smaller value will mean that - the CRC data block will take more memory, but wil identify any - faults with better precision. - - See - -config S3C2410_LOWLEVEL_UART_PORT - int "S3C2410 UART to use for low-level messages" - default 0 - help - Choice of which UART port to use for the low-level messages, - such as the `Uncompressing...` at start time. The value of - this configuration should be between zero and two. The port - must have been initialised by the boot-loader before use. - config S3C2410_DMA bool "S3C2410 DMA support" depends on ARCH_S3C2410 diff --git a/trunk/arch/arm/plat-s3c24xx/common-smdk.c b/trunk/arch/arm/plat-s3c24xx/common-smdk.c index 7ed19b23ce56..398c7ac25296 100644 --- a/trunk/arch/arm/plat-s3c24xx/common-smdk.c +++ b/trunk/arch/arm/plat-s3c24xx/common-smdk.c @@ -38,7 +38,7 @@ #include #include -#include +#include #include #include diff --git a/trunk/arch/arm/plat-s3c24xx/cpu.c b/trunk/arch/arm/plat-s3c24xx/cpu.c index 8ce4904d3131..f513ab083b8f 100644 --- a/trunk/arch/arm/plat-s3c24xx/cpu.c +++ b/trunk/arch/arm/plat-s3c24xx/cpu.c @@ -38,7 +38,7 @@ #include #include -#include +#include #include #include diff --git a/trunk/arch/arm/plat-s3c24xx/devs.c b/trunk/arch/arm/plat-s3c24xx/devs.c index 5875da0ae0eb..e546e933b3f7 100644 --- a/trunk/arch/arm/plat-s3c24xx/devs.c +++ b/trunk/arch/arm/plat-s3c24xx/devs.c @@ -28,12 +28,12 @@ #include #include -#include -#include +#include +#include #include #include -#include +#include /* Serial port registrations */ diff --git a/trunk/arch/arm/plat-s3c24xx/dma.c b/trunk/arch/arm/plat-s3c24xx/dma.c index 08d80f2f51f2..6d048490c559 100644 --- a/trunk/arch/arm/plat-s3c24xx/dma.c +++ b/trunk/arch/arm/plat-s3c24xx/dma.c @@ -1333,7 +1333,7 @@ int __init s3c24xx_dma_init(unsigned int channels, unsigned int irq, dma_kmem = kmem_cache_create("dma_desc", sizeof(struct s3c2410_dma_buf), 0, SLAB_HWCACHE_ALIGN, - s3c2410_dma_cache_ctor, NULL); + s3c2410_dma_cache_ctor); if (dma_kmem == NULL) { printk(KERN_ERR "dma failed to make kmem cache\n"); diff --git a/trunk/arch/arm/plat-s3c24xx/pm.c b/trunk/arch/arm/plat-s3c24xx/pm.c index 5692eccdf4d1..eab1850616d8 100644 --- a/trunk/arch/arm/plat-s3c24xx/pm.c +++ b/trunk/arch/arm/plat-s3c24xx/pm.c @@ -40,7 +40,7 @@ #include #include -#include +#include #include #include #include diff --git a/trunk/arch/arm/plat-s3c24xx/s3c244x.c b/trunk/arch/arm/plat-s3c24xx/s3c244x.c index 767f2e9a3a55..3444b13afac5 100644 --- a/trunk/arch/arm/plat-s3c24xx/s3c244x.c +++ b/trunk/arch/arm/plat-s3c24xx/s3c244x.c @@ -30,7 +30,7 @@ #include #include -#include +#include #include #include #include @@ -47,7 +47,6 @@ static struct map_desc s3c244x_iodesc[] __initdata = { IODESC_ENT(CLKPWR), IODESC_ENT(TIMER), IODESC_ENT(WATCHDOG), - IODESC_ENT(LCD), }; /* uart initialisation */ diff --git a/trunk/arch/arm/plat-s3c24xx/sleep.S b/trunk/arch/arm/plat-s3c24xx/sleep.S index 7b7ae790b00d..d47113bbc34c 100644 --- a/trunk/arch/arm/plat-s3c24xx/sleep.S +++ b/trunk/arch/arm/plat-s3c24xx/sleep.S @@ -32,7 +32,7 @@ #include #include #include -#include +#include /* CONFIG_DEBUG_RESUME is dangerous if your bootloader does not * reset the UART configuration, only enable if you really need this! diff --git a/trunk/arch/arm/plat-s3c24xx/time.c b/trunk/arch/arm/plat-s3c24xx/time.c index b7667375bcec..2ec1daaa0e53 100644 --- a/trunk/arch/arm/plat-s3c24xx/time.c +++ b/trunk/arch/arm/plat-s3c24xx/time.c @@ -33,7 +33,7 @@ #include #include #include -#include +#include #include #include diff --git a/trunk/arch/arm/vfp/vfphw.S b/trunk/arch/arm/vfp/vfphw.S index d4b7b229631d..0ac022f800a1 100644 --- a/trunk/arch/arm/vfp/vfphw.S +++ b/trunk/arch/arm/vfp/vfphw.S @@ -74,14 +74,14 @@ vfp_support_entry: VFPFMRX r1, FPEXC @ Is the VFP enabled? DBGSTR1 "fpexc %08x", r1 - tst r1, #FPEXC_ENABLE + tst r1, #FPEXC_EN bne look_for_VFP_exceptions @ VFP is already enabled DBGSTR1 "enable %x", r10 ldr r3, last_VFP_context_address - orr r1, r1, #FPEXC_ENABLE @ user FPEXC has the enable bit set + orr r1, r1, #FPEXC_EN @ user FPEXC has the enable bit set ldr r4, [r3, r11, lsl #2] @ last_VFP_context pointer - bic r5, r1, #FPEXC_EXCEPTION @ make sure exceptions are disabled + bic r5, r1, #FPEXC_EX @ make sure exceptions are disabled cmp r4, r10 beq check_for_exception @ we are returning to the same @ process, so the registers are @@ -124,7 +124,7 @@ no_old_VFP_process: VFPFMXR FPSCR, r5 @ restore status check_for_exception: - tst r1, #FPEXC_EXCEPTION + tst r1, #FPEXC_EX bne process_exception @ might as well handle the pending @ exception before retrying branch @ out before setting an FPEXC that @@ -136,10 +136,10 @@ check_for_exception: look_for_VFP_exceptions: - tst r1, #FPEXC_EXCEPTION + tst r1, #FPEXC_EX bne process_exception VFPFMRX r5, FPSCR - tst r5, #FPSCR_IXE @ IXE doesn't set FPEXC_EXCEPTION ! + tst r5, #FPSCR_IXE @ IXE doesn't set FPEXC_EX ! bne process_exception @ Fall into hand on to next handler - appropriate coproc instr diff --git a/trunk/arch/arm/vfp/vfpmodule.c b/trunk/arch/arm/vfp/vfpmodule.c index 1106b5f9cf19..04ddab2bd876 100644 --- a/trunk/arch/arm/vfp/vfpmodule.c +++ b/trunk/arch/arm/vfp/vfpmodule.c @@ -53,7 +53,7 @@ static int vfp_notifier(struct notifier_block *self, unsigned long cmd, void *v) * case the thread migrates to a different CPU. The * restoring is done lazily. */ - if ((fpexc & FPEXC_ENABLE) && last_VFP_context[cpu]) { + if ((fpexc & FPEXC_EN) && last_VFP_context[cpu]) { vfp_save_state(last_VFP_context[cpu], fpexc); last_VFP_context[cpu]->hard.cpu = cpu; } @@ -70,7 +70,7 @@ static int vfp_notifier(struct notifier_block *self, unsigned long cmd, void *v) * Always disable VFP so we can lazily save/restore the * old state. */ - fmxr(FPEXC, fpexc & ~FPEXC_ENABLE); + fmxr(FPEXC, fpexc & ~FPEXC_EN); return NOTIFY_DONE; } @@ -81,13 +81,13 @@ static int vfp_notifier(struct notifier_block *self, unsigned long cmd, void *v) */ memset(vfp, 0, sizeof(union vfp_state)); - vfp->hard.fpexc = FPEXC_ENABLE; + vfp->hard.fpexc = FPEXC_EN; vfp->hard.fpscr = FPSCR_ROUND_NEAREST; /* * Disable VFP to ensure we initialise it first. */ - fmxr(FPEXC, fmrx(FPEXC) & ~FPEXC_ENABLE); + fmxr(FPEXC, fmrx(FPEXC) & ~FPEXC_EN); } /* flush and release case: Per-thread VFP cleanup. */ @@ -229,7 +229,7 @@ void VFP9_bounce(u32 trigger, u32 fpexc, struct pt_regs *regs) /* * Enable access to the VFP so we can handle the bounce. */ - fmxr(FPEXC, fpexc & ~(FPEXC_EXCEPTION|FPEXC_INV|FPEXC_UFC|FPEXC_IOC)); + fmxr(FPEXC, fpexc & ~(FPEXC_EX|FPEXC_INV|FPEXC_UFC|FPEXC_IOC)); orig_fpscr = fpscr = fmrx(FPSCR); @@ -248,7 +248,7 @@ void VFP9_bounce(u32 trigger, u32 fpexc, struct pt_regs *regs) /* * Modify fpscr to indicate the number of iterations remaining */ - if (fpexc & FPEXC_EXCEPTION) { + if (fpexc & FPEXC_EX) { u32 len; len = fpexc + (1 << FPEXC_LENGTH_BIT); diff --git a/trunk/arch/arm26/mm/fault.c b/trunk/arch/arm26/mm/fault.c index 93c0cee0fb5e..dec638a0c8d9 100644 --- a/trunk/arch/arm26/mm/fault.c +++ b/trunk/arch/arm26/mm/fault.c @@ -170,20 +170,20 @@ __do_page_fault(struct mm_struct *mm, unsigned long addr, unsigned int fsr, */ survive: fault = handle_mm_fault(mm, vma, addr & PAGE_MASK, DO_COW(fsr)); - - /* - * Handle the "normal" cases first - successful and sigbus - */ - switch (fault) { - case VM_FAULT_MAJOR: + if (unlikely(fault & VM_FAULT_ERROR)) { + if (fault & VM_FAULT_OOM) + goto out_of_memory; + else if (fault & VM_FAULT_SIGBUS) + return fault; + BUG(); + } + if (fault & VM_FAULT_MAJOR) tsk->maj_flt++; - return fault; - case VM_FAULT_MINOR: + else tsk->min_flt++; - case VM_FAULT_SIGBUS: - return fault; - } + return fault; +out_of_memory: fault = -3; /* out of memory */ if (!is_init(tsk)) goto out; @@ -225,13 +225,11 @@ int do_page_fault(unsigned long addr, unsigned int fsr, struct pt_regs *regs) /* * Handle the "normal" case first */ - switch (fault) { - case VM_FAULT_MINOR: - case VM_FAULT_MAJOR: + if (likely(!(fault & VM_FAULT_ERROR))) return 0; - case VM_FAULT_SIGBUS: + if (fault & VM_FAULT_SIGBUS) goto do_sigbus; - } + /* else VM_FAULT_OOM */ /* * If we are in kernel mode at this point, we diff --git a/trunk/arch/arm26/mm/memc.c b/trunk/arch/arm26/mm/memc.c index 42505541a9b1..ffecd8578247 100644 --- a/trunk/arch/arm26/mm/memc.c +++ b/trunk/arch/arm26/mm/memc.c @@ -176,9 +176,9 @@ void __init pgtable_cache_init(void) { pte_cache = kmem_cache_create("pte-cache", sizeof(pte_t) * PTRS_PER_PTE, - 0, SLAB_PANIC, pte_cache_ctor, NULL); + 0, SLAB_PANIC, pte_cache_ctor); pgd_cache = kmem_cache_create("pgd-cache", MEMC_TABLE_SIZE + sizeof(pgd_t) * PTRS_PER_PGD, - 0, SLAB_PANIC, pgd_cache_ctor, NULL); + 0, SLAB_PANIC, pgd_cache_ctor); } diff --git a/trunk/arch/avr32/Kconfig b/trunk/arch/avr32/Kconfig index 3ec76586877e..d12346aaa88b 100644 --- a/trunk/arch/avr32/Kconfig +++ b/trunk/arch/avr32/Kconfig @@ -113,6 +113,10 @@ config BOARD_ATNGW100 bool "ATNGW100 Network Gateway" endchoice +if BOARD_ATSTK1000 +source "arch/avr32/boards/atstk1000/Kconfig" +endif + choice prompt "Boot loader type" default LOADER_U_BOOT @@ -185,6 +189,27 @@ config CMDLINE endmenu +menu "Power managment options" + +menu "CPU Frequency scaling" + +source "drivers/cpufreq/Kconfig" + +config CPU_FREQ_AT32AP + bool "CPU frequency driver for AT32AP" + depends on CPU_FREQ && PLATFORM_AT32AP + default n + help + This enables the CPU frequency driver for AT32AP processors. + + For details, take a look in . + + If in doubt, say N. + +endmenu + +endmenu + menu "Bus options" config PCI diff --git a/trunk/arch/avr32/boards/atngw100/setup.c b/trunk/arch/avr32/boards/atngw100/setup.c index 6c4dc0a00e9f..2edcecdea8bd 100644 --- a/trunk/arch/avr32/boards/atngw100/setup.c +++ b/trunk/arch/avr32/boards/atngw100/setup.c @@ -13,6 +13,7 @@ #include #include #include +#include #include #include @@ -21,6 +22,7 @@ #include #include #include +#include /* Initialized by bootloader-specific startup code. */ struct tag *bootloader_tags __initdata; @@ -100,8 +102,31 @@ void __init setup_board(void) at32_setup_serial_console(0); } +static const struct gpio_led ngw_leds[] = { + { .name = "sys", .gpio = GPIO_PIN_PA(16), .active_low = 1, + .default_trigger = "heartbeat", + }, + { .name = "a", .gpio = GPIO_PIN_PA(19), .active_low = 1, }, + { .name = "b", .gpio = GPIO_PIN_PE(19), .active_low = 1, }, +}; + +static const struct gpio_led_platform_data ngw_led_data = { + .num_leds = ARRAY_SIZE(ngw_leds), + .leds = (void *) ngw_leds, +}; + +static struct platform_device ngw_gpio_leds = { + .name = "leds-gpio", + .id = -1, + .dev = { + .platform_data = (void *) &ngw_led_data, + } +}; + static int __init atngw100_init(void) { + unsigned i; + /* * ATNGW100 uses 16-bit SDRAM interface, so we don't need to * reserve any pins for it. @@ -116,6 +141,12 @@ static int __init atngw100_init(void) at32_add_device_spi(0, spi0_board_info, ARRAY_SIZE(spi0_board_info)); + for (i = 0; i < ARRAY_SIZE(ngw_leds); i++) { + at32_select_gpio(ngw_leds[i].gpio, + AT32_GPIOF_OUTPUT | AT32_GPIOF_HIGH); + } + platform_device_register(&ngw_gpio_leds); + return 0; } postcore_initcall(atngw100_init); diff --git a/trunk/arch/avr32/boards/atstk1000/Kconfig b/trunk/arch/avr32/boards/atstk1000/Kconfig new file mode 100644 index 000000000000..71bc7d364fb7 --- /dev/null +++ b/trunk/arch/avr32/boards/atstk1000/Kconfig @@ -0,0 +1,53 @@ +# STK1000 customization + +if BOARD_ATSTK1002 + +config BOARD_ATSTK1002_CUSTOM + bool "Non-default STK-1002 jumper settings" + help + You will normally leave the jumpers on the CPU card at their + default settings. If you need to use certain peripherals, + you will need to change some of those jumpers. + +if BOARD_ATSTK1002_CUSTOM + +config BOARD_ATSTK1002_SW1_CUSTOM + bool "SW1: use SSC1 (not SPI0)" + help + This also prevents using the external DAC as an audio interface, + and means you can't initialize the on-board QVGA display. + +config BOARD_ATSTK1002_SW2_CUSTOM + bool "SW2: use IRDA or TIMER0 (not UART-A, MMC/SD, and PS2-A)" + help + If you change this you'll want an updated boot loader putting + the console on UART-C not UART-A. + +config BOARD_ATSTK1002_SW3_CUSTOM + bool "SW3: use TIMER1 (not SSC0 and GCLK)" + help + This also prevents using the external DAC as an audio interface. + +config BOARD_ATSTK1002_SW4_CUSTOM + bool "SW4: use ISI/Camera (not GPIOs, SPI1, and PS2-B)" + help + To use the camera interface you'll need a custom card (on the + PCI-format connector) connect a video sensor. + +config BOARD_ATSTK1002_SW5_CUSTOM + bool "SW5: use MACB1 (not LCDC)" + +config BOARD_ATSTK1002_SW6_CUSTOM + bool "SW6: more GPIOs (not MACB0)" + +endif # custom + +config BOARD_ATSTK1002_SPI1 + bool "Configure SPI1 controller" + depends on !BOARD_ATSTK1002_SW4_CUSTOM + help + All the signals for the second SPI controller are available on + GPIO lines and accessed through the J1 jumper block. Say "y" + here to configure that SPI controller. + +endif # stk 1002 diff --git a/trunk/arch/avr32/boards/atstk1000/atstk1002.c b/trunk/arch/avr32/boards/atstk1000/atstk1002.c index e253e86a1a39..cb93eabb9c6c 100644 --- a/trunk/arch/avr32/boards/atstk1000/atstk1002.c +++ b/trunk/arch/avr32/boards/atstk1000/atstk1002.c @@ -27,15 +27,27 @@ #include "atstk1000.h" -#define SW2_DEFAULT /* MMCI and UART_A available */ struct eth_addr { u8 addr[6]; }; static struct eth_addr __initdata hw_addr[2]; -static struct eth_platform_data __initdata eth_data[2]; +static struct eth_platform_data __initdata eth_data[2] = { + { + /* + * The MDIO pullups on STK1000 are a bit too weak for + * the autodetection to work properly, so we have to + * mask out everything but the correct address. + */ + .phy_mask = ~(1U << 16), + }, + { + .phy_mask = ~(1U << 17), + }, +}; +#ifndef CONFIG_BOARD_ATSTK1002_SW1_CUSTOM static struct spi_board_info spi0_board_info[] __initdata = { { /* QVGA display */ @@ -45,6 +57,13 @@ static struct spi_board_info spi0_board_info[] __initdata = { .mode = SPI_MODE_3, }, }; +#endif + +#ifdef CONFIG_BOARD_ATSTK1002_SPI1 +static struct spi_board_info spi1_board_info[] __initdata = { { + /* patch in custom entries here */ +} }; +#endif /* * The next two functions should go away as the boot loader is @@ -103,10 +122,10 @@ static void __init set_hw_addr(struct platform_device *pdev) void __init setup_board(void) { -#ifdef SW2_DEFAULT - at32_map_usart(1, 0); /* USART 1/A: /dev/ttyS0, DB9 */ -#else +#ifdef CONFIG_BOARD_ATSTK1002_SW2_CUSTOM at32_map_usart(0, 1); /* USART 0/B: /dev/ttyS1, IRDA */ +#else + at32_map_usart(1, 0); /* USART 1/A: /dev/ttyS0, DB9 */ #endif /* USART 2/unused: expansion connector */ at32_map_usart(3, 2); /* USART 3/C: /dev/ttyS2, DB9 */ @@ -140,18 +159,31 @@ static int __init atstk1002_init(void) at32_add_system_devices(); -#ifdef SW2_DEFAULT - at32_add_device_usart(0); -#else +#ifdef CONFIG_BOARD_ATSTK1002_SW2_CUSTOM at32_add_device_usart(1); +#else + at32_add_device_usart(0); #endif at32_add_device_usart(2); +#ifndef CONFIG_BOARD_ATSTK1002_SW6_CUSTOM set_hw_addr(at32_add_device_eth(0, ð_data[0])); - +#endif +#ifndef CONFIG_BOARD_ATSTK1002_SW1_CUSTOM at32_add_device_spi(0, spi0_board_info, ARRAY_SIZE(spi0_board_info)); +#endif +#ifdef CONFIG_BOARD_ATSTK1002_SPI1 + at32_add_device_spi(1, spi1_board_info, ARRAY_SIZE(spi1_board_info)); +#endif +#ifdef CONFIG_BOARD_ATSTK1002_SW5_CUSTOM + set_hw_addr(at32_add_device_eth(1, ð_data[1])); +#else at32_add_device_lcdc(0, &atstk1000_lcdc_data, fbmem_start, fbmem_size); +#endif +#ifndef CONFIG_BOARD_ATSTK1002_SW3_CUSTOM + at32_add_device_ssc(0, ATMEL_SSC_TX); +#endif return 0; } diff --git a/trunk/arch/avr32/configs/atngw100_defconfig b/trunk/arch/avr32/configs/atngw100_defconfig index 49493ad3b5a9..b799a68ffd97 100644 --- a/trunk/arch/avr32/configs/atngw100_defconfig +++ b/trunk/arch/avr32/configs/atngw100_defconfig @@ -712,7 +712,21 @@ CONFIG_SPI_ATMEL=y # # LED devices # -# CONFIG_NEW_LEDS is not set +CONFIG_NEW_LEDS=y +CONFIG_LEDS_CLASS=y + +# +# LED drivers +# +CONFIG_LEDS_GPIO=y + +# +# LED Triggers +# +CONFIG_LEDS_TRIGGERS=y +CONFIG_LEDS_TRIGGER_TIMER=y +CONFIG_LEDS_TRIGGER_HEARTBEAT=y + # # LED drivers diff --git a/trunk/arch/avr32/kernel/setup.c b/trunk/arch/avr32/kernel/setup.c index b279d66acf5f..d08b0bc6b2bb 100644 --- a/trunk/arch/avr32/kernel/setup.c +++ b/trunk/arch/avr32/kernel/setup.c @@ -313,7 +313,7 @@ __tagtable(ATAG_MEM, parse_tag_mem); static int __init parse_tag_rdimg(struct tag *tag) { -#ifdef CONFIG_INITRD +#ifdef CONFIG_BLK_DEV_INITRD struct tag_mem_range *mem = &tag->u.mem_range; int ret; @@ -323,7 +323,7 @@ static int __init parse_tag_rdimg(struct tag *tag) return 0; } - ret = add_reserved_region(mem->start, mem->start + mem->size - 1, + ret = add_reserved_region(mem->addr, mem->addr + mem->size - 1, "initrd"); if (ret) { printk(KERN_WARNING diff --git a/trunk/arch/avr32/mach-at32ap/Makefile b/trunk/arch/avr32/mach-at32ap/Makefile index f1d395724ac6..a8b445046e3e 100644 --- a/trunk/arch/avr32/mach-at32ap/Makefile +++ b/trunk/arch/avr32/mach-at32ap/Makefile @@ -1,3 +1,4 @@ obj-y += at32ap.o clock.o intc.o extint.o pio.o hsmc.o obj-$(CONFIG_CPU_AT32AP7000) += at32ap7000.o obj-$(CONFIG_CPU_AT32AP7000) += time-tc.o +obj-$(CONFIG_CPU_FREQ_AT32AP) += cpufreq.o diff --git a/trunk/arch/avr32/mach-at32ap/at32ap.c b/trunk/arch/avr32/mach-at32ap/at32ap.c index 90f207e8e96d..7c4987f3287a 100644 --- a/trunk/arch/avr32/mach-at32ap/at32ap.c +++ b/trunk/arch/avr32/mach-at32ap/at32ap.c @@ -11,41 +11,10 @@ #include #include -#include - #include -#include - -struct at32_sm system_manager; - -static int __init at32_sm_init(void) -{ - struct resource *regs; - struct at32_sm *sm = &system_manager; - int ret = -ENXIO; - - regs = platform_get_resource(&at32_sm_device, IORESOURCE_MEM, 0); - if (!regs) - goto fail; - - spin_lock_init(&sm->lock); - sm->pdev = &at32_sm_device; - - ret = -ENOMEM; - sm->regs = ioremap(regs->start, regs->end - regs->start + 1); - if (!sm->regs) - goto fail; - - return 0; - -fail: - printk(KERN_ERR "Failed to initialize System Manager: %d\n", ret); - return ret; -} void __init setup_platform(void) { - at32_sm_init(); at32_clock_init(); at32_portmux_init(); } diff --git a/trunk/arch/avr32/mach-at32ap/at32ap7000.c b/trunk/arch/avr32/mach-at32ap/at32ap7000.c index 4dda42d3f6d5..64cc5583ddfb 100644 --- a/trunk/arch/avr32/mach-at32ap/at32ap7000.c +++ b/trunk/arch/avr32/mach-at32ap/at32ap7000.c @@ -17,14 +17,20 @@ #include #include #include -#include #include