Merge git://git.linux-nfs.org/pub/linux/nfs-2.6
Linus Torvalds [Sun, 25 Jun 2006 17:54:14 +0000 (10:54 -0700)]
* git://git.linux-nfs.org/pub/linux/nfs-2.6: (51 commits)
  nfs: remove nfs_put_link()
  nfs-build-fix-99
  git-nfs-build-fixes
  Merge branch 'odirect'
  NFS: alloc nfs_read/write_data as direct I/O is scheduled
  NFS: Eliminate nfs_get_user_pages()
  NFS: refactor nfs_direct_free_user_pages
  NFS: remove user_addr, user_count, and pos from nfs_direct_req
  NFS: "open code" the NFS direct write rescheduler
  NFS: Separate functions for counting outstanding NFS direct I/Os
  NLM: Fix reclaim races
  NLM: sem to mutex conversion
  locks.c: add the fl_owner to nlm_compare_locks
  NFS: Display the chosen RPCSEC_GSS security flavour in /proc/mounts
  NFS: Split fs/nfs/inode.c
  NFS: Fix typo in nfs_do_clone_mount()
  NFS: Fix compile errors introduced by referrals patches
  NFSv4: Ensure that referral mounts bind to a reserved port
  NFSv4: A root pathname is sent as a zero component4
  NFSv4: Follow a referral
  ...

658 files changed:
CREDITS
Documentation/DocBook/kernel-api.tmpl
Documentation/RCU/checklist.txt
Documentation/RCU/whatisRCU.txt
Documentation/devices.txt
Documentation/filesystems/fuse.txt
Documentation/filesystems/ramfs-rootfs-initramfs.txt
Documentation/kdump/kdump.txt
Documentation/memory-barriers.txt
Documentation/rtc.txt
Documentation/sysrq.txt
Documentation/video4linux/CARDLIST.bttv
Documentation/video4linux/CARDLIST.cx88
Documentation/video4linux/CARDLIST.saa7134
Documentation/video4linux/CARDLIST.tuner
Documentation/video4linux/CQcam.txt
Documentation/video4linux/Zoran
Documentation/video4linux/bttv/CONTRIBUTORS
Documentation/video4linux/cx2341x/fw-calling.txt [new file with mode: 0644]
Documentation/video4linux/cx2341x/fw-decoder-api.txt [new file with mode: 0644]
Documentation/video4linux/cx2341x/fw-dma.txt [new file with mode: 0644]
Documentation/video4linux/cx2341x/fw-encoder-api.txt [new file with mode: 0644]
Documentation/video4linux/cx2341x/fw-memory.txt [new file with mode: 0644]
Documentation/video4linux/cx2341x/fw-osd-api.txt [new file with mode: 0644]
Documentation/video4linux/cx2341x/fw-upload.txt [new file with mode: 0644]
Documentation/video4linux/cx88/hauppauge-wintv-cx88-ir.txt [new file with mode: 0644]
Documentation/video4linux/et61x251.txt
Documentation/video4linux/ibmcam.txt
Documentation/video4linux/ov511.txt
Documentation/video4linux/sn9c102.txt
Documentation/video4linux/v4lgrab.c [new file with mode: 0644]
Documentation/video4linux/w9968cf.txt
Documentation/video4linux/zc0301.txt
arch/arm/kernel/bios32.c
arch/arm/mach-ixp4xx/nas100d-power.c
arch/arm/mach-ixp4xx/nslu2-power.c
arch/cris/arch-v32/drivers/pci/bios.c
arch/i386/kernel/cpu/cpufreq/acpi-cpufreq.c
arch/i386/kernel/cpu/cpufreq/speedstep-centrino.c
arch/i386/kernel/crash.c
arch/i386/kernel/doublefault.c
arch/i386/kernel/setup.c
arch/i386/kernel/smpboot.c
arch/i386/lib/usercopy.c
arch/i386/mach-default/setup.c
arch/i386/mach-visws/setup.c
arch/i386/mach-voyager/setup.c
arch/i386/pci/i386.c
arch/ia64/kernel/topology.c
arch/ia64/pci/pci.c
arch/m68k/amiga/amiga_ksyms.c
arch/m68k/amiga/amiints.c
arch/m68k/amiga/cia.c
arch/m68k/amiga/config.c
arch/m68k/apollo/Makefile
arch/m68k/apollo/config.c
arch/m68k/apollo/dn_ints.c
arch/m68k/atari/ataints.c
arch/m68k/atari/config.c
arch/m68k/bvme6000/Makefile
arch/m68k/bvme6000/bvmeints.c [deleted file]
arch/m68k/bvme6000/config.c
arch/m68k/hp300/Makefile
arch/m68k/hp300/config.c
arch/m68k/hp300/ints.c [deleted file]
arch/m68k/hp300/ints.h [deleted file]
arch/m68k/hp300/time.c
arch/m68k/kernel/Makefile
arch/m68k/kernel/dma.c [new file with mode: 0644]
arch/m68k/kernel/entry.S
arch/m68k/kernel/ints.c
arch/m68k/kernel/m68k_ksyms.c
arch/m68k/kernel/setup.c
arch/m68k/kernel/traps.c
arch/m68k/mac/baboon.c
arch/m68k/mac/config.c
arch/m68k/mac/iop.c
arch/m68k/mac/macints.c
arch/m68k/mac/oss.c
arch/m68k/mac/psc.c
arch/m68k/mac/via.c
arch/m68k/mm/kmap.c
arch/m68k/mvme147/147ints.c [deleted file]
arch/m68k/mvme147/Makefile
arch/m68k/mvme147/config.c
arch/m68k/mvme16x/16xints.c [deleted file]
arch/m68k/mvme16x/Makefile
arch/m68k/mvme16x/config.c
arch/m68k/q40/config.c
arch/m68k/q40/q40ints.c
arch/m68k/sun3/config.c
arch/m68k/sun3/sun3ints.c
arch/m68k/sun3x/config.c
arch/mips/kernel/irixsig.c
arch/mips/kernel/sysirix.c
arch/powerpc/kernel/pci_32.c
arch/powerpc/kernel/pci_64.c
arch/powerpc/kernel/proc_ppc64.c
arch/powerpc/kernel/traps.c
arch/powerpc/platforms/cell/cbe_regs.c
arch/powerpc/platforms/cell/interrupt.c
arch/powerpc/platforms/powermac/backlight.c
arch/powerpc/xmon/xmon.c
arch/ppc/kernel/pci.c
arch/s390/kernel/setup.c
arch/um/drivers/mconsole_kern.c
arch/um/include/sysdep-x86_64/syscalls.h
arch/x86_64/kernel/setup.c
arch/xtensa/kernel/pci.c
drivers/block/amiflop.c
drivers/block/cciss.c
drivers/block/cciss.h
drivers/block/cpqarray.c
drivers/block/loop.c
drivers/block/nbd.c
drivers/cdrom/mcdx.c
drivers/char/Kconfig
drivers/char/applicom.c
drivers/char/cyclades.c
drivers/char/esp.c
drivers/char/ip2/ip2main.c
drivers/char/isicom.c
drivers/char/keyboard.c
drivers/char/mmtimer.c
drivers/char/mxser.c
drivers/char/n_r3964.c
drivers/char/pcmcia/synclink_cs.c
drivers/char/rocket.c
drivers/char/specialix.c
drivers/char/synclink_gt.c
drivers/char/synclinkmp.c
drivers/firmware/Kconfig
drivers/firmware/dmi_scan.c
drivers/ide/ide-cd.c
drivers/ide/ide-floppy.c
drivers/ide/ide-io.c
drivers/ide/ide-tape.c
drivers/ieee1394/Kconfig
drivers/ieee1394/nodemgr.c
drivers/input/touchscreen/ads7846.c
drivers/input/touchscreen/h3600_ts_input.c
drivers/leds/Kconfig
drivers/leds/Makefile
drivers/leds/ledtrig-heartbeat.c [new file with mode: 0644]
drivers/macintosh/Kconfig
drivers/macintosh/Makefile
drivers/macintosh/adbhid.c
drivers/macintosh/via-pmu-backlight.c [new file with mode: 0644]
drivers/macintosh/via-pmu.c
drivers/media/Kconfig
drivers/media/common/Makefile
drivers/media/common/ir-functions.c
drivers/media/common/ir-keymaps.c
drivers/media/common/saa7146_fops.c
drivers/media/common/saa7146_hlp.c
drivers/media/common/saa7146_video.c
drivers/media/common/saa7146_vv_ksyms.c [deleted file]
drivers/media/dvb/b2c2/flexcop-fe-tuner.c
drivers/media/dvb/b2c2/flexcop-pci.c
drivers/media/dvb/b2c2/flexcop-usb.c
drivers/media/dvb/b2c2/flexcop.c
drivers/media/dvb/bt8xx/bt878.c
drivers/media/dvb/bt8xx/dst.c
drivers/media/dvb/bt8xx/dst_ca.c
drivers/media/dvb/bt8xx/dst_common.h
drivers/media/dvb/bt8xx/dvb-bt8xx.c
drivers/media/dvb/bt8xx/dvb-bt8xx.h
drivers/media/dvb/cinergyT2/Kconfig
drivers/media/dvb/cinergyT2/cinergyT2.c
drivers/media/dvb/dvb-core/Makefile
drivers/media/dvb/dvb-core/dmxdev.c
drivers/media/dvb/dvb-core/dvb_ca_en50221.c
drivers/media/dvb/dvb-core/dvb_demux.c
drivers/media/dvb/dvb-core/dvb_frontend.c
drivers/media/dvb/dvb-core/dvb_frontend.h
drivers/media/dvb/dvb-core/dvb_math.c [new file with mode: 0644]
drivers/media/dvb/dvb-core/dvb_math.h [new file with mode: 0644]
drivers/media/dvb/dvb-core/dvb_net.c
drivers/media/dvb/dvb-core/dvbdev.c
drivers/media/dvb/dvb-core/dvbdev.h
drivers/media/dvb/dvb-usb/Kconfig
drivers/media/dvb/dvb-usb/Makefile
drivers/media/dvb/dvb-usb/cxusb.c
drivers/media/dvb/dvb-usb/dibusb-common.c
drivers/media/dvb/dvb-usb/dibusb-mb.c
drivers/media/dvb/dvb-usb/digitv.c
drivers/media/dvb/dvb-usb/dtt200u-fe.c
drivers/media/dvb/dvb-usb/dvb-usb-dvb.c
drivers/media/dvb/dvb-usb/dvb-usb-i2c.c
drivers/media/dvb/dvb-usb/dvb-usb-ids.h
drivers/media/dvb/dvb-usb/dvb-usb.h
drivers/media/dvb/dvb-usb/gp8psk-fe.c [new file with mode: 0644]
drivers/media/dvb/dvb-usb/gp8psk.c [new file with mode: 0644]
drivers/media/dvb/dvb-usb/gp8psk.h [new file with mode: 0644]
drivers/media/dvb/dvb-usb/umt-010.c
drivers/media/dvb/dvb-usb/vp702x-fe.c
drivers/media/dvb/dvb-usb/vp7045-fe.c
drivers/media/dvb/frontends/Kconfig
drivers/media/dvb/frontends/Makefile
drivers/media/dvb/frontends/bcm3510.c
drivers/media/dvb/frontends/bsbe1.h
drivers/media/dvb/frontends/bsru6.h
drivers/media/dvb/frontends/cx22700.c
drivers/media/dvb/frontends/cx22700.h
drivers/media/dvb/frontends/cx22702.c
drivers/media/dvb/frontends/cx22702.h
drivers/media/dvb/frontends/cx24110.c
drivers/media/dvb/frontends/cx24110.h
drivers/media/dvb/frontends/cx24123.c
drivers/media/dvb/frontends/cx24123.h
drivers/media/dvb/frontends/dib3000-common.h
drivers/media/dvb/frontends/dib3000.h
drivers/media/dvb/frontends/dib3000mb.c
drivers/media/dvb/frontends/dib3000mc.c
drivers/media/dvb/frontends/dvb-pll.c
drivers/media/dvb/frontends/dvb-pll.h
drivers/media/dvb/frontends/dvb_dummy_fe.c
drivers/media/dvb/frontends/isl6421.c [new file with mode: 0644]
drivers/media/dvb/frontends/isl6421.h [new file with mode: 0644]
drivers/media/dvb/frontends/l64781.c
drivers/media/dvb/frontends/l64781.h
drivers/media/dvb/frontends/lg_h06xf.h [new file with mode: 0644]
drivers/media/dvb/frontends/lgdt330x.c
drivers/media/dvb/frontends/lgdt330x.h
drivers/media/dvb/frontends/lnbp21.c [new file with mode: 0644]
drivers/media/dvb/frontends/lnbp21.h
drivers/media/dvb/frontends/mt312.c
drivers/media/dvb/frontends/mt312.h
drivers/media/dvb/frontends/mt352.c
drivers/media/dvb/frontends/mt352.h
drivers/media/dvb/frontends/nxt200x.c
drivers/media/dvb/frontends/nxt200x.h
drivers/media/dvb/frontends/nxt6000.c
drivers/media/dvb/frontends/nxt6000.h
drivers/media/dvb/frontends/or51132.c
drivers/media/dvb/frontends/or51132.h
drivers/media/dvb/frontends/or51211.c
drivers/media/dvb/frontends/s5h1420.c
drivers/media/dvb/frontends/s5h1420.h
drivers/media/dvb/frontends/sp8870.c
drivers/media/dvb/frontends/sp8870.h
drivers/media/dvb/frontends/sp887x.c
drivers/media/dvb/frontends/sp887x.h
drivers/media/dvb/frontends/stv0297.c
drivers/media/dvb/frontends/stv0297.h
drivers/media/dvb/frontends/stv0299.c
drivers/media/dvb/frontends/stv0299.h
drivers/media/dvb/frontends/tda10021.c
drivers/media/dvb/frontends/tda10021.h
drivers/media/dvb/frontends/tda1004x.c
drivers/media/dvb/frontends/tda1004x.h
drivers/media/dvb/frontends/tda8083.c
drivers/media/dvb/frontends/tda8083.h
drivers/media/dvb/frontends/ves1820.c
drivers/media/dvb/frontends/ves1820.h
drivers/media/dvb/frontends/ves1x93.c
drivers/media/dvb/frontends/ves1x93.h
drivers/media/dvb/frontends/zl10353.c
drivers/media/dvb/frontends/zl10353.h
drivers/media/dvb/pluto2/pluto2.c
drivers/media/dvb/ttpci/Kconfig
drivers/media/dvb/ttpci/Makefile
drivers/media/dvb/ttpci/av7110.c
drivers/media/dvb/ttpci/budget-av.c
drivers/media/dvb/ttpci/budget-ci.c
drivers/media/dvb/ttpci/budget-core.c
drivers/media/dvb/ttpci/budget-patch.c
drivers/media/dvb/ttpci/budget.c
drivers/media/dvb/ttusb-budget/Kconfig
drivers/media/dvb/ttusb-budget/dvb-ttusb-budget.c
drivers/media/dvb/ttusb-dec/ttusb_dec.c
drivers/media/dvb/ttusb-dec/ttusbdecfe.c
drivers/media/radio/Kconfig
drivers/media/radio/Makefile
drivers/media/radio/miropcm20-radio.c
drivers/media/radio/miropcm20-rds-core.c
drivers/media/radio/miropcm20-rds.c
drivers/media/radio/radio-aimslab.c
drivers/media/radio/radio-aztech.c
drivers/media/radio/radio-cadet.c
drivers/media/radio/radio-gemtek-pci.c
drivers/media/radio/radio-gemtek.c
drivers/media/radio/radio-maestro.c
drivers/media/radio/radio-maxiradio.c
drivers/media/radio/radio-rtrack2.c
drivers/media/radio/radio-sf16fmi.c
drivers/media/radio/radio-sf16fmr2.c
drivers/media/radio/radio-terratec.c
drivers/media/radio/radio-trust.c
drivers/media/radio/radio-typhoon.c
drivers/media/radio/radio-zoltrix.c
drivers/media/video/Kconfig
drivers/media/video/Makefile
drivers/media/video/arv.c
drivers/media/video/bt866.c [new file with mode: 0644]
drivers/media/video/bt8xx/bttv-cards.c
drivers/media/video/bt8xx/bttv-gpio.c
drivers/media/video/bt8xx/bttv-input.c
drivers/media/video/bt8xx/bttv.h
drivers/media/video/bt8xx/bttvp.h
drivers/media/video/bw-qcam.c
drivers/media/video/c-qcam.c
drivers/media/video/cpia.c
drivers/media/video/cpia.h
drivers/media/video/cpia2/cpia2.h
drivers/media/video/cpia2/cpia2_v4l.c
drivers/media/video/cpia_pp.c
drivers/media/video/cpia_usb.c
drivers/media/video/cx2341x.c [new file with mode: 0644]
drivers/media/video/cx25840/cx25840-audio.c
drivers/media/video/cx25840/cx25840-core.c
drivers/media/video/cx25840/cx25840-core.h
drivers/media/video/cx25840/cx25840-vbi.c
drivers/media/video/cx88/Kconfig
drivers/media/video/cx88/cx88-alsa.c
drivers/media/video/cx88/cx88-blackbird.c
drivers/media/video/cx88/cx88-cards.c
drivers/media/video/cx88/cx88-core.c
drivers/media/video/cx88/cx88-dvb.c
drivers/media/video/cx88/cx88-i2c.c
drivers/media/video/cx88/cx88-input.c
drivers/media/video/cx88/cx88-mpeg.c
drivers/media/video/cx88/cx88-tvaudio.c
drivers/media/video/cx88/cx88-vbi.c
drivers/media/video/cx88/cx88.h
drivers/media/video/dsbr100.c
drivers/media/video/em28xx/em28xx-cards.c
drivers/media/video/em28xx/em28xx-core.c
drivers/media/video/em28xx/em28xx-i2c.c
drivers/media/video/em28xx/em28xx-input.c
drivers/media/video/em28xx/em28xx-video.c
drivers/media/video/em28xx/em28xx.h
drivers/media/video/et61x251/et61x251_core.c
drivers/media/video/ir-kbd-i2c.c
drivers/media/video/ks0127.c [new file with mode: 0644]
drivers/media/video/ks0127.h [new file with mode: 0644]
drivers/media/video/meye.c
drivers/media/video/msp3400-driver.c
drivers/media/video/msp3400-kthreads.c
drivers/media/video/ov511.c
drivers/media/video/ov511.h
drivers/media/video/planb.c
drivers/media/video/pms.c
drivers/media/video/pwc/Kconfig
drivers/media/video/pwc/Makefile
drivers/media/video/pwc/pwc-ctrl.c
drivers/media/video/pwc/pwc-dec1.c [new file with mode: 0644]
drivers/media/video/pwc/pwc-dec1.h [new file with mode: 0644]
drivers/media/video/pwc/pwc-dec23.c [new file with mode: 0644]
drivers/media/video/pwc/pwc-dec23.h [new file with mode: 0644]
drivers/media/video/pwc/pwc-if.c
drivers/media/video/pwc/pwc-kiara.c
drivers/media/video/pwc/pwc-kiara.h
drivers/media/video/pwc/pwc-misc.c
drivers/media/video/pwc/pwc-timon.c
drivers/media/video/pwc/pwc-timon.h
drivers/media/video/pwc/pwc-uncompress.c
drivers/media/video/pwc/pwc-uncompress.h
drivers/media/video/pwc/pwc-v4l.c [new file with mode: 0644]
drivers/media/video/pwc/pwc.h
drivers/media/video/saa5246a.c
drivers/media/video/saa5249.c
drivers/media/video/saa7110.c
drivers/media/video/saa7115.c
drivers/media/video/saa7127.c
drivers/media/video/saa7134/saa6752hs.c
drivers/media/video/saa7134/saa7134-alsa.c
drivers/media/video/saa7134/saa7134-cards.c
drivers/media/video/saa7134/saa7134-dvb.c
drivers/media/video/saa7134/saa7134-empress.c
drivers/media/video/saa7134/saa7134-input.c
drivers/media/video/saa7134/saa7134.h
drivers/media/video/se401.h
drivers/media/video/sn9c102/sn9c102_core.c
drivers/media/video/stradis.c
drivers/media/video/stv680.c
drivers/media/video/tda9875.c
drivers/media/video/tda9887.c
drivers/media/video/tea5767.c
drivers/media/video/tlv320aic23b.c [new file with mode: 0644]
drivers/media/video/tuner-3036.c
drivers/media/video/tuner-core.c
drivers/media/video/tuner-simple.c
drivers/media/video/tuner-types.c
drivers/media/video/tveeprom.c
drivers/media/video/tvmixer.c
drivers/media/video/tvp5150.c
drivers/media/video/usbvideo/Kconfig
drivers/media/video/usbvideo/Makefile
drivers/media/video/usbvideo/quickcam_messenger.c [new file with mode: 0644]
drivers/media/video/usbvideo/quickcam_messenger.h [new file with mode: 0644]
drivers/media/video/usbvideo/usbvideo.h
drivers/media/video/v4l1-compat.c
drivers/media/video/v4l2-common.c
drivers/media/video/video-buf-dvb.c
drivers/media/video/videodev.c
drivers/media/video/vino.c
drivers/media/video/vivi.c
drivers/media/video/vpx3220.c
drivers/media/video/w9966.c
drivers/media/video/zc0301/Kconfig
drivers/media/video/zc0301/Makefile
drivers/media/video/zc0301/zc0301_core.c
drivers/media/video/zc0301/zc0301_pas202bcb.c
drivers/media/video/zc0301/zc0301_pb0330.c [new file with mode: 0644]
drivers/media/video/zc0301/zc0301_sensor.h
drivers/media/video/zoran.h
drivers/media/video/zoran_card.c
drivers/media/video/zoran_device.c
drivers/media/video/zoran_driver.c
drivers/media/video/zoran_procfs.c
drivers/net/irda/irda-usb.c
drivers/net/sun3lance.c
drivers/net/wan/sdla.c
drivers/oprofile/buffer_sync.c
drivers/oprofile/event_buffer.c
drivers/oprofile/event_buffer.h
drivers/oprofile/oprof.c
drivers/parport/Kconfig
drivers/parport/Makefile
drivers/parport/daisy.c
drivers/parport/parport_ax88796.c [new file with mode: 0644]
drivers/parport/share.c
drivers/pnp/card.c
drivers/rtc/Kconfig
drivers/rtc/Makefile
drivers/rtc/class.c
drivers/rtc/interface.c
drivers/rtc/rtc-at91.c [new file with mode: 0644]
drivers/rtc/rtc-dev.c
drivers/rtc/rtc-ds1307.c [new file with mode: 0644]
drivers/rtc/rtc-ds1553.c [new file with mode: 0644]
drivers/rtc/rtc-ds1742.c [new file with mode: 0644]
drivers/rtc/rtc-lib.c
drivers/rtc/rtc-max6902.c [new file with mode: 0644]
drivers/rtc/rtc-pcf8583.c [new file with mode: 0644]
drivers/rtc/rtc-pl031.c [new file with mode: 0644]
drivers/rtc/rtc-sa1100.c
drivers/rtc/rtc-v3020.c [new file with mode: 0644]
drivers/rtc/rtc-vr41xx.c
drivers/s390/char/sclp_quiesce.c
drivers/sbus/char/flash.c
drivers/sbus/char/vfc_dev.c
drivers/scsi/advansys.c
drivers/scsi/mac_esp.c
drivers/scsi/mac_scsi.c
drivers/scsi/megaraid/megaraid_mbox.c
drivers/scsi/sun3x_esp.c
drivers/scsi/wd7000.c
drivers/video/Kconfig
drivers/video/aty/Makefile
drivers/video/aty/aty128fb.c
drivers/video/aty/atyfb.h
drivers/video/aty/atyfb_base.c
drivers/video/aty/radeon_backlight.c [new file with mode: 0644]
drivers/video/aty/radeon_base.c
drivers/video/aty/radeonfb.h
drivers/video/chipsfb.c
drivers/video/fbsysfs.c
drivers/video/igafb.c
drivers/video/matrox/matroxfb_base.c
drivers/video/nvidia/Makefile
drivers/video/nvidia/nv_backlight.c [new file with mode: 0644]
drivers/video/nvidia/nv_proto.h
drivers/video/nvidia/nvidia.c
drivers/video/riva/fbdev.c
drivers/video/tridentfb.c
fs/9p/vfs_inode.c
fs/Kconfig
fs/affs/super.c
fs/autofs4/expire.c
fs/compat_ioctl.c
fs/dcache.c
fs/eventpoll.c
fs/ext2/Makefile
fs/ext2/balloc.c
fs/ext2/bitmap.c [deleted file]
fs/ext2/dir.c
fs/ext2/fsync.c
fs/ext2/ialloc.c
fs/ext2/super.c
fs/ext3/balloc.c
fs/ext3/ialloc.c
fs/ext3/inode.c
fs/ext3/ioctl.c
fs/ext3/namei.c
fs/ext3/resize.c
fs/ext3/super.c
fs/ext3/xattr.c
fs/freevxfs/vxfs.h
fs/freevxfs/vxfs_fshead.c
fs/fuse/Makefile
fs/fuse/control.c [new file with mode: 0644]
fs/fuse/dev.c
fs/fuse/dir.c
fs/fuse/file.c
fs/fuse/fuse_i.h
fs/fuse/inode.c
fs/jbd/recovery.c
fs/namei.c
fs/ntfs/file.c
fs/open.c
fs/openpromfs/inode.c
fs/select.c
fs/smbfs/smbiod.c
fs/ufs/balloc.c
fs/ufs/cylinder.c
fs/ufs/dir.c
fs/ufs/file.c
fs/ufs/ialloc.c
fs/ufs/inode.c
fs/ufs/namei.c
fs/ufs/super.c
fs/ufs/truncate.c
fs/ufs/util.c
fs/ufs/util.h
include/asm-alpha/floppy.h
include/asm-arm/floppy.h
include/asm-arm26/floppy.h
include/asm-generic/bug.h
include/asm-generic/percpu.h
include/asm-i386/floppy.h
include/asm-i386/mach-default/setup_arch.h [moved from include/asm-i386/mach-default/setup_arch_pre.h with 100% similarity]
include/asm-i386/mach-default/setup_arch_post.h [deleted file]
include/asm-i386/mach-visws/setup_arch.h [moved from include/asm-i386/mach-visws/setup_arch_pre.h with 100% similarity]
include/asm-i386/mach-visws/setup_arch_post.h [deleted file]
include/asm-i386/mach-voyager/setup_arch.h [moved from include/asm-i386/mach-voyager/setup_arch_pre.h with 97% similarity]
include/asm-i386/mach-voyager/setup_arch_post.h [deleted file]
include/asm-i386/setup.h
include/asm-i386/uaccess.h
include/asm-ia64/percpu.h
include/asm-m68k/amigaints.h
include/asm-m68k/apollohw.h
include/asm-m68k/atari_stdma.h
include/asm-m68k/atariints.h
include/asm-m68k/bvme6000hw.h
include/asm-m68k/cacheflush.h
include/asm-m68k/dma-mapping.h
include/asm-m68k/irq.h
include/asm-m68k/mac_oss.h
include/asm-m68k/machdep.h
include/asm-m68k/macintosh.h
include/asm-m68k/macints.h
include/asm-m68k/mvme147hw.h
include/asm-m68k/mvme16xhw.h
include/asm-m68k/scatterlist.h
include/asm-m68k/signal.h
include/asm-m68k/sun3ints.h
include/asm-m68k/traps.h
include/asm-m68k/uaccess.h
include/asm-mips/compat.h
include/asm-mips/mach-generic/floppy.h
include/asm-mips/mach-jazz/floppy.h
include/asm-parisc/floppy.h
include/asm-powerpc/backlight.h
include/asm-powerpc/floppy.h
include/asm-powerpc/percpu.h
include/asm-ppc/floppy.h
include/asm-s390/percpu.h
include/asm-sh/floppy.h
include/asm-sparc64/percpu.h
include/asm-x86_64/floppy.h
include/asm-x86_64/percpu.h
include/linux/acct.h
include/linux/bio.h
include/linux/console.h
include/linux/cpumask.h
include/linux/dvb/dmx.h
include/linux/eventpoll.h
include/linux/ext3_fs.h
include/linux/ext3_fs_i.h
include/linux/fb.h
include/linux/fcntl.h
include/linux/fuse.h
include/linux/hrtimer.h
include/linux/i2c-id.h
include/linux/ide.h
include/linux/kernel.h
include/linux/kthread.h
include/linux/ktime.h
include/linux/list.h
include/linux/loop.h
include/linux/migrate.h
include/linux/mm.h
include/linux/nbd.h
include/linux/parport.h
include/linux/pmu.h
include/linux/reboot.h
include/linux/resource.h
include/linux/rtc-v3020.h [new file with mode: 0644]
include/linux/rtc.h
include/linux/sched.h
include/linux/synclink.h
include/linux/sysctl.h
include/linux/ufs_fs.h
include/linux/ufs_fs_i.h
include/linux/videodev.h
include/linux/videodev2.h
include/media/cx2341x.h [new file with mode: 0644]
include/media/ir-common.h
include/media/ir-kbd-i2c.h
include/media/ovcamchip.h
include/media/pwc-ioctl.h [new file with mode: 0644]
include/media/saa7115.h
include/media/saa7146_vv.h
include/media/tuner.h
include/media/tvp5150.h [new file with mode: 0644]
include/media/v4l2-common.h
include/media/v4l2-dev.h [new file with mode: 0644]
include/media/video-buf-dvb.h
include/media/video-buf.h
include/sound/tea575x-tuner.h
init/Kconfig
kernel/acct.c
kernel/compat.c
kernel/exit.c
kernel/fork.c
kernel/hrtimer.c
kernel/kthread.c
kernel/module.c
kernel/power/Kconfig
kernel/power/disk.c
kernel/power/main.c
kernel/printk.c
kernel/sched.c
kernel/softirq.c
kernel/softlockup.c
kernel/stop_machine.c
kernel/sys.c
kernel/sysctl.c
kernel/timer.c
kernel/workqueue.c
lib/bitmap.c
lib/crc-ccitt.c
lib/crc16.c
lib/crc32.c
lib/idr.c
lib/libcrc32c.c
lib/radix-tree.c
lib/reed_solomon/reed_solomon.c
lib/vsprintf.c
mm/filemap.c
mm/filemap.h
mm/mempolicy.c
mm/migrate.c
mm/page_alloc.c
mm/pdflush.c
mm/readahead.c
mm/rmap.c
net/ipv4/netfilter/ip_tables.c
net/ipv4/route.c
scripts/bloat-o-meter
scripts/checkstack.pl
scripts/kernel-doc
sound/oss/Kconfig
sound/oss/au1550_ac97.c
sound/oss/emu10k1/midi.c
sound/oss/msnd.c

diff --git a/CREDITS b/CREDITS
index 9bf714a..1d35f10 100644 (file)
--- a/CREDITS
+++ b/CREDITS
@@ -1573,12 +1573,8 @@ S: 160 00 Praha 6
 S: Czech Republic
 
 N: Niels Kristian Bech Jensen
-E: nkbj@image.dk
-W: http://www.image.dk/~nkbj
+E: nkbj1970@hotmail.com
 D: Miscellaneous kernel updates and fixes.
-S: Dr. Holsts Vej 34, lejl. 164
-S: DK-8230 Åbyhøj
-S: Denmark
 
 N: Michael K. Johnson
 E: johnsonm@redhat.com
index 31b727c..3630a0d 100644 (file)
@@ -62,6 +62,8 @@
      <sect1><title>Internal Functions</title>
 !Ikernel/exit.c
 !Ikernel/signal.c
+!Iinclude/linux/kthread.h
+!Ekernel/kthread.c
      </sect1>
 
      <sect1><title>Kernel objects manipulation</title>
@@ -114,6 +116,29 @@ X!Ilib/string.c
      </sect1>
   </chapter>
 
+  <chapter id="kernel-lib">
+     <title>Basic Kernel Library Functions</title>
+
+     <para>
+       The Linux kernel provides more basic utility functions.
+     </para>
+
+     <sect1><title>Bitmap Operations</title>
+!Elib/bitmap.c
+!Ilib/bitmap.c
+     </sect1>
+
+     <sect1><title>Command-line Parsing</title>
+!Elib/cmdline.c
+     </sect1>
+
+     <sect1><title>CRC Functions</title>
+!Elib/crc16.c
+!Elib/crc32.c
+!Elib/crc-ccitt.c
+     </sect1>
+  </chapter>
+
   <chapter id="mm">
      <title>Memory Management in Linux</title>
      <sect1><title>The Slab Cache</title>
@@ -281,12 +306,13 @@ X!Ekernel/module.c
      <sect1><title>MTRR Handling</title>
 !Earch/i386/kernel/cpu/mtrr/main.c
      </sect1>
+
      <sect1><title>PCI Support Library</title>
 !Edrivers/pci/pci.c
 !Edrivers/pci/pci-driver.c
 !Edrivers/pci/remove.c
 !Edrivers/pci/pci-acpi.c
-<!-- kerneldoc does not understand to __devinit
+<!-- kerneldoc does not understand __devinit
 X!Edrivers/pci/search.c
  -->
 !Edrivers/pci/msi.c
@@ -315,6 +341,13 @@ X!Earch/i386/kernel/mca.c
      </sect1>
   </chapter>
 
+  <chapter id="firmware">
+     <title>Firmware Interfaces</title>
+     <sect1><title>DMI Interfaces</title>
+!Edrivers/firmware/dmi_scan.c
+     </sect1>
+  </chapter>
+
   <chapter id="devfs">
      <title>The Device File System</title>
 !Efs/devfs/base.c
@@ -403,7 +436,6 @@ X!Edrivers/pnp/system.c
      </sect1>
   </chapter>
 
-
   <chapter id="blkdev">
      <title>Block Devices</title>
 !Eblock/ll_rw_blk.c
@@ -414,6 +446,14 @@ X!Edrivers/pnp/system.c
 !Edrivers/char/misc.c
   </chapter>
 
+  <chapter id="parportdev">
+     <title>Parallel Port Devices</title>
+!Iinclude/linux/parport.h
+!Edrivers/parport/ieee1284.c
+!Edrivers/parport/share.c
+!Idrivers/parport/daisy.c
+  </chapter>
+
   <chapter id="viddev">
      <title>Video4Linux</title>
 !Edrivers/media/video/videodev.c
index 49e27cc..1d50cf0 100644 (file)
@@ -144,9 +144,47 @@ over a rather long period of time, but improvements are always welcome!
        whether the increased speed is worth it.
 
 8.     Although synchronize_rcu() is a bit slower than is call_rcu(),
-       it usually results in simpler code.  So, unless update performance
-       is important or the updaters cannot block, synchronize_rcu()
-       should be used in preference to call_rcu().
+       it usually results in simpler code.  So, unless update
+       performance is critically important or the updaters cannot block,
+       synchronize_rcu() should be used in preference to call_rcu().
+
+       An especially important property of the synchronize_rcu()
+       primitive is that it automatically self-limits: if grace periods
+       are delayed for whatever reason, then the synchronize_rcu()
+       primitive will correspondingly delay updates.  In contrast,
+       code using call_rcu() should explicitly limit update rate in
+       cases where grace periods are delayed, as failing to do so can
+       result in excessive realtime latencies or even OOM conditions.
+
+       Ways of gaining this self-limiting property when using call_rcu()
+       include:
+
+       a.      Keeping a count of the number of data-structure elements
+               used by the RCU-protected data structure, including those
+               waiting for a grace period to elapse.  Enforce a limit
+               on this number, stalling updates as needed to allow
+               previously deferred frees to complete.
+
+               Alternatively, limit only the number awaiting deferred
+               free rather than the total number of elements.
+
+       b.      Limiting update rate.  For example, if updates occur only
+               once per hour, then no explicit rate limiting is required,
+               unless your system is already badly broken.  The dcache
+               subsystem takes this approach -- updates are guarded
+               by a global lock, limiting their rate.
+
+       c.      Trusted update -- if updates can only be done manually by
+               superuser or some other trusted user, then it might not
+               be necessary to automatically limit them.  The theory
+               here is that superuser already has lots of ways to crash
+               the machine.
+
+       d.      Use call_rcu_bh() rather than call_rcu(), in order to take
+               advantage of call_rcu_bh()'s faster grace periods.
+
+       e.      Periodically invoke synchronize_rcu(), permitting a limited
+               number of updates per grace period.
 
 9.     All RCU list-traversal primitives, which include
        list_for_each_rcu(), list_for_each_entry_rcu(),
index 6e45942..4f41a60 100644 (file)
@@ -184,7 +184,17 @@ synchronize_rcu()
        blocking, it registers a function and argument which are invoked
        after all ongoing RCU read-side critical sections have completed.
        This callback variant is particularly useful in situations where
-       it is illegal to block.
+       it is illegal to block or where update-side performance is
+       critically important.
+
+       However, the call_rcu() API should not be used lightly, as use
+       of the synchronize_rcu() API generally results in simpler code.
+       In addition, the synchronize_rcu() API has the nice property
+       of automatically limiting update rate should grace periods
+       be delayed.  This property results in system resilience in face
+       of denial-of-service attacks.  Code using call_rcu() should limit
+       update rate in order to gain this same sort of resilience.  See
+       checklist.txt for some approaches to limiting the update rate.
 
 rcu_assign_pointer()
 
index b2f593f..4aaf68f 100644 (file)
@@ -3,7 +3,7 @@
 
             Maintained by Torben Mathiasen <device@lanana.org>
 
-                     Last revised: 01 March 2006
+                     Last revised: 15 May 2006
 
 This list is the Linux Device List, the official registry of allocated
 device numbers and /dev directory nodes for the Linux operating
@@ -2791,6 +2791,7 @@ Your cooperation is appreciated.
                 170 = /dev/ttyNX0              Hilscher netX serial port 0
                    ...
                 185 = /dev/ttyNX15             Hilscher netX serial port 15
+                186 = /dev/ttyJ0               JTAG1 DCC protocol based serial port emulation
 
 205 char       Low-density serial ports (alternate device)
                  0 = /dev/culu0                Callout device for ttyLU0
@@ -3108,6 +3109,10 @@ Your cooperation is appreciated.
                  ...
                240 = /dev/rfdp         16th RFD FTL layer
 
+257 char       Phoenix Technologies Cryptographic Services Driver
+                 0 = /dev/ptlsec       Crypto Services Driver
+
+
 
  ****  ADDITIONAL /dev DIRECTORY ENTRIES
 
index 33f7431..a584f05 100644 (file)
@@ -18,6 +18,14 @@ Non-privileged mount (or user mount):
   user.  NOTE: this is not the same as mounts allowed with the "user"
   option in /etc/fstab, which is not discussed here.
 
+Filesystem connection:
+
+  A connection between the filesystem daemon and the kernel.  The
+  connection exists until either the daemon dies, or the filesystem is
+  umounted.  Note that detaching (or lazy umounting) the filesystem
+  does _not_ break the connection, in this case it will exist until
+  the last reference to the filesystem is released.
+
 Mount owner:
 
   The user who does the mounting.
@@ -86,16 +94,20 @@ Mount options
   The default is infinite.  Note that the size of read requests is
   limited anyway to 32 pages (which is 128kbyte on i386).
 
-Sysfs
-~~~~~
+Control filesystem
+~~~~~~~~~~~~~~~~~~
+
+There's a control filesystem for FUSE, which can be mounted by:
 
-FUSE sets up the following hierarchy in sysfs:
+  mount -t fusectl none /sys/fs/fuse/connections
 
-  /sys/fs/fuse/connections/N/
+Mounting it under the '/sys/fs/fuse/connections' directory makes it
+backwards compatible with earlier versions.
 
-where N is an increasing number allocated to each new connection.
+Under the fuse control filesystem each connection has a directory
+named by a unique number.
 
-For each connection the following attributes are defined:
+For each connection the following files exist within this directory:
 
  'waiting'
 
@@ -110,7 +122,47 @@ For each connection the following attributes are defined:
   connection.  This means that all waiting requests will be aborted an
   error returned for all aborted and new requests.
 
-Only a privileged user may read or write these attributes.
+Only the owner of the mount may read or write these files.
+
+Interrupting filesystem operations
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+
+If a process issuing a FUSE filesystem request is interrupted, the
+following will happen:
+
+  1) If the request is not yet sent to userspace AND the signal is
+     fatal (SIGKILL or unhandled fatal signal), then the request is
+     dequeued and returns immediately.
+
+  2) If the request is not yet sent to userspace AND the signal is not
+     fatal, then an 'interrupted' flag is set for the request.  When
+     the request has been successfully transfered to userspace and
+     this flag is set, an INTERRUPT request is queued.
+
+  3) If the request is already sent to userspace, then an INTERRUPT
+     request is queued.
+
+INTERRUPT requests take precedence over other requests, so the
+userspace filesystem will receive queued INTERRUPTs before any others.
+
+The userspace filesystem may ignore the INTERRUPT requests entirely,
+or may honor them by sending a reply to the _original_ request, with
+the error set to EINTR.
+
+It is also possible that there's a race between processing the
+original request and it's INTERRUPT request.  There are two possibilities:
+
+  1) The INTERRUPT request is processed before the original request is
+     processed
+
+  2) The INTERRUPT request is processed after the original request has
+     been answered
+
+If the filesystem cannot find the original request, it should wait for
+some timeout and/or a number of new requests to arrive, after which it
+should reply to the INTERRUPT request with an EAGAIN error.  In case
+1) the INTERRUPT request will be requeued.  In case 2) the INTERRUPT
+reply will be ignored.
 
 Aborting a filesystem connection
 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
@@ -139,8 +191,8 @@ the filesystem.  There are several ways to do this:
   - Use forced umount (umount -f).  Works in all cases but only if
     filesystem is still attached (it hasn't been lazy unmounted)
 
-  - Abort filesystem through the sysfs interface.  Most powerful
-    method, always works.
+  - Abort filesystem through the FUSE control filesystem.  Most
+    powerful method, always works.
 
 How do non-privileged mounts work?
 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
@@ -304,25 +356,7 @@ Scenario 1 -  Simple deadlock
  |                                    |     for "file"]
  |                                    |    *DEADLOCK*
 
-The solution for this is to allow requests to be interrupted while
-they are in userspace:
-
- |      [interrupted by signal]       |
- |    <fuse_unlink()                  |
- |    [release semaphore]             |    [semaphore acquired]
- |  <sys_unlink()                     |
- |                                    |    >fuse_unlink()
- |                                    |      [queue req on fc->pending]
- |                                    |      [wake up fc->waitq]
- |                                    |      [sleep on req->waitq]
-
-If the filesystem daemon was single threaded, this will stop here,
-since there's no other thread to dequeue and execute the request.
-In this case the solution is to kill the FUSE daemon as well.  If
-there are multiple serving threads, you just have to kill them as
-long as any remain.
-
-Moral: a filesystem which deadlocks, can soon find itself dead.
+The solution for this is to allow the filesystem to be aborted.
 
 Scenario 2 - Tricky deadlock
 ----------------------------
@@ -355,24 +389,14 @@ but is caused by a pagefault.
  |                                    |           [lock page]
  |                                    |           * DEADLOCK *
 
-Solution is again to let the the request be interrupted (not
-elaborated further).
-
-An additional problem is that while the write buffer is being
-copied to the request, the request must not be interrupted.  This
-is because the destination address of the copy may not be valid
-after the request is interrupted.
-
-This is solved with doing the copy atomically, and allowing
-interruption while the page(s) belonging to the write buffer are
-faulted with get_user_pages().  The 'req->locked' flag indicates
-when the copy is taking place, and interruption is delayed until
-this flag is unset.
+Solution is basically the same as above.
 
-Scenario 3 - Tricky deadlock with asynchronous read
----------------------------------------------------
+An additional problem is that while the write buffer is being copied
+to the request, the request must not be interrupted/aborted.  This is
+because the destination address of the copy may not be valid after the
+request has returned.
 
-The same situation as above, except thread-1 will wait on page lock
-and hence it will be uninterruptible as well.  The solution is to
-abort the connection with forced umount (if mount is attached) or
-through the abort attribute in sysfs.
+This is solved with doing the copy atomically, and allowing abort
+while the page(s) belonging to the write buffer are faulted with
+get_user_pages().  The 'req->locked' flag indicates when the copy is
+taking place, and abort is delayed until this flag is unset.
index 60ab61e..25981e2 100644 (file)
@@ -70,11 +70,13 @@ tmpfs mounts.  See Documentation/filesystems/tmpfs.txt for more information.
 What is rootfs?
 ---------------
 
-Rootfs is a special instance of ramfs, which is always present in 2.6 systems.
-(It's used internally as the starting and stopping point for searches of the
-kernel's doubly-linked list of mount points.)
+Rootfs is a special instance of ramfs (or tmpfs, if that's enabled), which is
+always present in 2.6 systems.  You can't unmount rootfs for approximately the
+same reason you can't kill the init process; rather than having special code
+to check for and handle an empty list, it's smaller and simpler for the kernel
+to just make sure certain lists can't become empty.
 
-Most systems just mount another filesystem over it and ignore it.  The
+Most systems just mount another filesystem over rootfs and ignore it.  The
 amount of space an empty instance of ramfs takes up is tiny.
 
 What is initramfs?
@@ -92,14 +94,16 @@ out of that.
 
 All this differs from the old initrd in several ways:
 
-  - The old initrd was a separate file, while the initramfs archive is linked
-    into the linux kernel image.  (The directory linux-*/usr is devoted to
-    generating this archive during the build.)
+  - The old initrd was always a separate file, while the initramfs archive is
+    linked into the linux kernel image.  (The directory linux-*/usr is devoted
+    to generating this archive during the build.)
 
   - The old initrd file was a gzipped filesystem image (in some file format,
-    such as ext2, that had to be built into the kernel), while the new
+    such as ext2, that needed a driver built into the kernel), while the new
     initramfs archive is a gzipped cpio archive (like tar only simpler,
-    see cpio(1) and Documentation/early-userspace/buffer-format.txt).
+    see cpio(1) and Documentation/early-userspace/buffer-format.txt).  The
+    kernel's cpio extraction code is not only extremely small, it's also
+    __init data that can be discarded during the boot process.
 
   - The program run by the old initrd (which was called /initrd, not /init) did
     some setup and then returned to the kernel, while the init program from
@@ -124,13 +128,14 @@ Populating initramfs:
 
 The 2.6 kernel build process always creates a gzipped cpio format initramfs
 archive and links it into the resulting kernel binary.  By default, this
-archive is empty (consuming 134 bytes on x86).  The config option
-CONFIG_INITRAMFS_SOURCE (for some reason buried under devices->block devices
-in menuconfig, and living in usr/Kconfig) can be used to specify a source for
-the initramfs archive, which will automatically be incorporated into the
-resulting binary.  This option can point to an existing gzipped cpio archive, a
-directory containing files to be archived, or a text file specification such
-as the following example:
+archive is empty (consuming 134 bytes on x86).
+
+The config option CONFIG_INITRAMFS_SOURCE (for some reason buried under
+devices->block devices in menuconfig, and living in usr/Kconfig) can be used
+to specify a source for the initramfs archive, which will automatically be
+incorporated into the resulting binary.  This option can point to an existing
+gzipped cpio archive, a directory containing files to be archived, or a text
+file specification such as the following example:
 
   dir /dev 755 0 0
   nod /dev/console 644 0 0 c 5 1
@@ -146,23 +151,84 @@ as the following example:
 Run "usr/gen_init_cpio" (after the kernel build) to get a usage message
 documenting the above file format.
 
-One advantage of the text file is that root access is not required to
+One advantage of the configuration file is that root access is not required to
 set permissions or create device nodes in the new archive.  (Note that those
 two example "file" entries expect to find files named "init.sh" and "busybox" in
 a directory called "initramfs", under the linux-2.6.* directory.  See
 Documentation/early-userspace/README for more details.)
 
-The kernel does not depend on external cpio tools, gen_init_cpio is created
-from usr/gen_init_cpio.c which is entirely self-contained, and the kernel's
-boot-time extractor is also (obviously) self-contained.  However, if you _do_
-happen to have cpio installed, the following command line can extract the
-generated cpio image back into its component files:
+The kernel does not depend on external cpio tools.  If you specify a
+directory instead of a configuration file, the kernel's build infrastructure
+creates a configuration file from that directory (usr/Makefile calls
+scripts/gen_initramfs_list.sh), and proceeds to package up that directory
+using the config file (by feeding it to usr/gen_init_cpio, which is created
+from usr/gen_init_cpio.c).  The kernel's build-time cpio creation code is
+entirely self-contained, and the kernel's boot-time extractor is also
+(obviously) self-contained.
+
+The one thing you might need external cpio utilities installed for is creating
+or extracting your own preprepared cpio files to feed to the kernel build
+(instead of a config file or directory).
+
+The following command line can extract a cpio image (either by the above script
+or by the kernel build) back into its component files:
 
   cpio -i -d -H newc -F initramfs_data.cpio --no-absolute-filenames
 
+The following shell script can create a prebuilt cpio archive you can
+use in place of the above config file:
+
+  #!/bin/sh
+
+  # Copyright 2006 Rob Landley <rob@landley.net> and TimeSys Corporation.
+  # Licensed under GPL version 2
+
+  if [ $# -ne 2 ]
+  then
+    echo "usage: mkinitramfs directory imagename.cpio.gz"
+    exit 1
+  fi
+
+  if [ -d "$1" ]
+  then
+    echo "creating $2 from $1"
+    (cd "$1"; find . | cpio -o -H newc | gzip) > "$2"
+  else
+    echo "First argument must be a directory"
+    exit 1
+  fi
+
+Note: The cpio man page contains some bad advice that will break your initramfs
+archive if you follow it.  It says "A typical way to generate the list
+of filenames is with the find command; you should give find the -depth option
+to minimize problems with permissions on directories that are unwritable or not
+searchable."  Don't do this when creating initramfs.cpio.gz images, it won't
+work.  The Linux kernel cpio extractor won't create files in a directory that
+doesn't exist, so the directory entries must go before the files that go in
+those directories.  The above script gets them in the right order.
+
+External initramfs images:
+--------------------------
+
+If the kernel has initrd support enabled, an external cpio.gz archive can also
+be passed into a 2.6 kernel in place of an initrd.  In this case, the kernel
+will autodetect the type (initramfs, not initrd) and extract the external cpio
+archive into rootfs before trying to run /init.
+
+This has the memory efficiency advantages of initramfs (no ramdisk block
+device) but the separate packaging of initrd (which is nice if you have
+non-GPL code you'd like to run from initramfs, without conflating it with
+the GPL licensed Linux kernel binary).
+
+It can also be used to supplement the kernel's built-in initamfs image.  The
+files in the external archive will overwrite any conflicting files in
+the built-in initramfs archive.  Some distributors also prefer to customize
+a single kernel image with task-specific initramfs images, without recompiling.
+
 Contents of initramfs:
 ----------------------
 
+An initramfs archive is a complete self-contained root filesystem for Linux.
 If you don't already understand what shared libraries, devices, and paths
 you need to get a minimal root filesystem up and running, here are some
 references:
@@ -176,13 +242,36 @@ code against, along with some related utilities.  It is BSD licensed.
 
 I use uClibc (http://www.uclibc.org) and busybox (http://www.busybox.net)
 myself.  These are LGPL and GPL, respectively.  (A self-contained initramfs
-package is planned for the busybox 1.2 release.)
+package is planned for the busybox 1.3 release.)
 
 In theory you could use glibc, but that's not well suited for small embedded
 uses like this.  (A "hello world" program statically linked against glibc is
 over 400k.  With uClibc it's 7k.  Also note that glibc dlopens libnss to do
 name lookups, even when otherwise statically linked.)
 
+A good first step is to get initramfs to run a statically linked "hello world"
+program as init, and test it under an emulator like qemu (www.qemu.org) or
+User Mode Linux, like so:
+
+  cat > hello.c << EOF
+  #include <stdio.h>
+  #include <unistd.h>
+
+  int main(int argc, char *argv[])
+  {
+    printf("Hello world!\n");
+    sleep(999999999);
+  }
+  EOF
+  gcc -static hello2.c -o init
+  echo init | cpio -o -H newc | gzip > test.cpio.gz
+  # Testing external initramfs using the initrd loading mechanism.
+  qemu -kernel /boot/vmlinuz -initrd test.cpio.gz /dev/zero
+
+When debugging a normal root filesystem, it's nice to be able to boot with
+"init=/bin/sh".  The initramfs equivalent is "rdinit=/bin/sh", and it's
+just as useful.
+
 Why cpio rather than tar?
 -------------------------
 
@@ -241,7 +330,7 @@ the above threads) is:
 Future directions:
 ------------------
 
-Today (2.6.14), initramfs is always compiled in, but not always used.  The
+Today (2.6.16), initramfs is always compiled in, but not always used.  The
 kernel falls back to legacy boot code that is reached only if initramfs does
 not contain an /init program.  The fallback is legacy code, there to ensure a
 smooth transition and allowing early boot functionality to gradually move to
@@ -258,8 +347,9 @@ and so on.
 
 This kind of complexity (which inevitably includes policy) is rightly handled
 in userspace.  Both klibc and busybox/uClibc are working on simple initramfs
-packages to drop into a kernel build, and when standard solutions are ready
-and widely deployed, the kernel's legacy early boot code will become obsolete
-and a candidate for the feature removal schedule.
+packages to drop into a kernel build.
 
-But that's a while off yet.
+The klibc package has now been accepted into Andrew Morton's 2.6.17-mm tree.
+The kernel's current early boot code (partition detection, etc) will probably
+be migrated into a default initramfs, automatically created and used by the
+kernel build.
index 212cf3c..08bafa8 100644 (file)
-Documentation for kdump - the kexec-based crash dumping solution
+================================================================
+Documentation for Kdump - The kexec-based Crash Dumping Solution
 ================================================================
 
-DESIGN
-======
+This document includes overview, setup and installation, and analysis
+information.
 
-Kdump uses kexec to reboot to a second kernel whenever a dump needs to be
-taken. This second kernel is booted with very little memory. The first kernel
-reserves the section of memory that the second kernel uses. This ensures that
-on-going DMA from the first kernel does not corrupt the second kernel.
+Overview
+========
 
-All the necessary information about Core image is encoded in ELF format and
-stored in reserved area of memory before crash. Physical address of start of
-ELF header is passed to new kernel through command line parameter elfcorehdr=.
+Kdump uses kexec to quickly boot to a dump-capture kernel whenever a
+dump of the system kernel's memory needs to be taken (for example, when
+the system panics). The system kernel's memory image is preserved across
+the reboot and is accessible to the dump-capture kernel.
 
-On i386, the first 640 KB of physical memory is needed to boot, irrespective
-of where the kernel loads. Hence, this region is backed up by kexec just before
-rebooting into the new kernel.
+You can use common Linux commands, such as cp and scp, to copy the
+memory image to a dump file on the local disk, or across the network to
+a remote system.
 
-In the second kernel, "old memory" can be accessed in two ways.
+Kdump and kexec are currently supported on the x86, x86_64, and ppc64
+architectures.
 
-- The first one is through a /dev/oldmem device interface. A capture utility
-  can read the device file and write out the memory in raw format. This is raw
-  dump of memory and analysis/capture tool should be intelligent enough to
-  determine where to look for the right information. ELF headers (elfcorehdr=)
-  can become handy here.
+When the system kernel boots, it reserves a small section of memory for
+the dump-capture kernel. This ensures that ongoing Direct Memory Access
+(DMA) from the system kernel does not corrupt the dump-capture kernel.
+The kexec -p command loads the dump-capture kernel into this reserved
+memory.
 
-- The second interface is through /proc/vmcore. This exports the dump as an ELF
-  format file which can be written out using any file copy command
-  (cp, scp, etc). Further, gdb can be used to perform limited debugging on
-  the dump file. This method ensures methods ensure that there is correct
-  ordering of the dump pages (corresponding to the first 640 KB that has been
-  relocated).
+On x86 machines, the first 640 KB of physical memory is needed to boot,
+regardless of where the kernel loads. Therefore, kexec backs up this
+region just before rebooting into the dump-capture kernel.
 
-SETUP
-=====
+All of the necessary information about the system kernel's core image is
+encoded in the ELF format, and stored in a reserved area of memory
+before a crash. The physical address of the start of the ELF header is
+passed to the dump-capture kernel through the elfcorehdr= boot
+parameter.
+
+With the dump-capture kernel, you can access the memory image, or "old
+memory," in two ways:
+
+- Through a /dev/oldmem device interface. A capture utility can read the
+  device file and write out the memory in raw format. This is a raw dump
+  of memory. Analysis and capture tools must be intelligent enough to
+  determine where to look for the right information.
+
+- Through /proc/vmcore. This exports the dump as an ELF-format file that
+  you can write out using file copy commands such as cp or scp. Further,
+  you can use analysis tools such as the GNU Debugger (GDB) and the Crash
+  tool to debug the dump file. This method ensures that the dump pages are
+  correctly ordered.
+
+
+Setup and Installation
+======================
+
+Install kexec-tools and the Kdump patch
+---------------------------------------
+
+1) Login as the root user.
+
+2) Download the kexec-tools user-space package from the following URL:
+
+   http://www.xmission.com/~ebiederm/files/kexec/kexec-tools-1.101.tar.gz
+
+3) Unpack the tarball with the tar command, as follows:
+
+   tar xvpzf kexec-tools-1.101.tar.gz
+
+4) Download the latest consolidated Kdump patch from the following URL:
+
+   http://lse.sourceforge.net/kdump/
+
+   (This location is being used until all the user-space Kdump patches
+   are integrated with the kexec-tools package.)
+
+5) Change to the kexec-tools-1.101 directory, as follows:
+
+   cd kexec-tools-1.101
+
+6) Apply the consolidated patch to the kexec-tools-1.101 source tree
+   with the patch command, as follows. (Modify the path to the downloaded
+   patch as necessary.)
+
+   patch -p1 < /path-to-kdump-patch/kexec-tools-1.101-kdump.patch
+
+7) Configure the package, as follows:
+
+   ./configure
+
+8) Compile the package, as follows:
+
+   make
+
+9) Install the package, as follows:
+
+   make install
+
+
+Download and build the system and dump-capture kernels
+------------------------------------------------------
+
+Download the mainline (vanilla) kernel source code (2.6.13-rc1 or newer)
+from http://www.kernel.org. Two kernels must be built: a system kernel
+and a dump-capture kernel. Use the following steps to configure these
+kernels with the necessary kexec and Kdump features:
+
+System kernel
+-------------
+
+1) Enable "kexec system call" in "Processor type and features."
+
+   CONFIG_KEXEC=y
+
+2) Enable "sysfs file system support" in "Filesystem" -> "Pseudo
+   filesystems." This is usually enabled by default.
+
+   CONFIG_SYSFS=y
+
+   Note that "sysfs file system support" might not appear in the "Pseudo
+   filesystems" menu if "Configure standard kernel features (for small
+   systems)" is not enabled in "General Setup." In this case, check the
+   .config file itself to ensure that sysfs is turned on, as follows:
+
+   grep 'CONFIG_SYSFS' .config
+
+3) Enable "Compile the kernel with debug info" in "Kernel hacking."
+
+   CONFIG_DEBUG_INFO=Y
+
+   This causes the kernel to be built with debug symbols. The dump
+   analysis tools require a vmlinux with debug symbols in order to read
+   and analyze a dump file.
+
+4) Make and install the kernel and its modules. Update the boot loader
+   (such as grub, yaboot, or lilo) configuration files as necessary.
+
+5) Boot the system kernel with the boot parameter "crashkernel=Y@X",
+   where Y specifies how much memory to reserve for the dump-capture kernel
+   and X specifies the beginning of this reserved memory. For example,
+   "crashkernel=64M@16M" tells the system kernel to reserve 64 MB of memory
+   starting at physical address 0x01000000 for the dump-capture kernel.
+
+   On x86 and x86_64, use "crashkernel=64M@16M".
+
+   On ppc64, use "crashkernel=128M@32M".
+
+
+The dump-capture kernel
+-----------------------
 
-1) Download the upstream kexec-tools userspace package from
-   http://www.xmission.com/~ebiederm/files/kexec/kexec-tools-1.101.tar.gz.
-
-   Apply the latest consolidated kdump patch on top of kexec-tools-1.101
-   from http://lse.sourceforge.net/kdump/. This arrangment has been made
-   till all the userspace patches supporting kdump are integrated with
-   upstream kexec-tools userspace.
-
-2) Download and build the appropriate (2.6.13-rc1 onwards) vanilla kernels.
-   Two kernels need to be built in order to get this feature working.
-   Following are the steps to properly configure the two kernels specific
-   to kexec and kdump features:
-
-  A) First kernel or regular kernel:
-  ----------------------------------
-   a) Enable "kexec system call" feature (in Processor type and features).
-      CONFIG_KEXEC=y
-   b) Enable "sysfs file system support" (in Pseudo filesystems).
-      CONFIG_SYSFS=y
-   c) make
-   d) Boot into first kernel with the command line parameter "crashkernel=Y@X".
-      Use appropriate values for X and Y. Y denotes how much memory to reserve
-      for the second kernel, and X denotes at what physical address the
-      reserved memory section starts. For example: "crashkernel=64M@16M".
-
-
-  B) Second kernel or dump capture kernel:
-  ---------------------------------------
-   a) For i386 architecture enable Highmem support
-      CONFIG_HIGHMEM=y
-   b) Enable "kernel crash dumps" feature (under "Processor type and features")
-      CONFIG_CRASH_DUMP=y
-   c) Make sure a suitable value for "Physical address where the kernel is
-      loaded" (under "Processor type and features"). By default this value
-      is 0x1000000 (16MB) and it should be same as X (See option d above),
-      e.g., 16 MB or 0x1000000.
-      CONFIG_PHYSICAL_START=0x1000000
-   d) Enable "/proc/vmcore support" (Optional, under "Pseudo filesystems").
-      CONFIG_PROC_VMCORE=y
-
-3) After booting to regular kernel or first kernel, load the second kernel
-   using the following command:
-
-   kexec -p <second-kernel> --args-linux --elf32-core-headers
-   --append="root=<root-dev> init 1 irqpoll maxcpus=1"
-
-   Notes:
-   ======
-     i) <second-kernel> has to be a vmlinux image ie uncompressed elf image.
-        bzImage will not work, as of now.
-    ii) --args-linux has to be speicfied as if kexec it loading an elf image,
-        it needs to know that the arguments supplied are of linux type.
-   iii) By default ELF headers are stored in ELF64 format to support systems
-        with more than 4GB memory. Option --elf32-core-headers forces generation
-        of ELF32 headers. The reason for this option being, as of now gdb can
-        not open vmcore file with ELF64 headers on a 32 bit systems. So ELF32
-        headers can be used if one has non-PAE systems and hence memory less
-        than 4GB.
-    iv) Specify "irqpoll" as command line parameter. This reduces driver
-         initialization failures in second kernel due to shared interrupts.
-     v) <root-dev> needs to be specified in a format corresponding to the root
-        device name in the output of mount command.
-    vi) If you have built the drivers required to mount root file system as
-        modules in <second-kernel>, then, specify
-        --initrd=<initrd-for-second-kernel>.
-   vii) Specify maxcpus=1 as, if during first kernel run, if panic happens on
-        non-boot cpus, second kernel doesn't seem to be boot up all the cpus.
-        The other option is to always built the second kernel without SMP
-        support ie CONFIG_SMP=n
-
-4) After successfully loading the second kernel as above, if a panic occurs
-   system reboots into the second kernel. A module can be written to force
-   the panic or "ALT-SysRq-c" can be used initiate a crash dump for testing
-   purposes.
-
-5) Once the second kernel has booted, write out the dump file using
+1) Under "General setup," append "-kdump" to the current string in
+   "Local version."
+
+2) On x86, enable high memory support under "Processor type and
+   features":
+
+   CONFIG_HIGHMEM64G=y
+   or
+   CONFIG_HIGHMEM4G
+
+3) On x86 and x86_64, disable symmetric multi-processing support
+   under "Processor type and features":
+
+   CONFIG_SMP=n
+   (If CONFIG_SMP=y, then specify maxcpus=1 on the kernel command line
+   when loading the dump-capture kernel, see section "Load the Dump-capture
+   Kernel".)
+
+4) On ppc64, disable NUMA support and enable EMBEDDED support:
+
+   CONFIG_NUMA=n
+   CONFIG_EMBEDDED=y
+   CONFIG_EEH=N for the dump-capture kernel
+
+5) Enable "kernel crash dumps" support under "Processor type and
+   features":
+
+   CONFIG_CRASH_DUMP=y
+
+6) Use a suitable value for "Physical address where the kernel is
+   loaded" (under "Processor type and features"). This only appears when
+   "kernel crash dumps" is enabled. By default this value is 0x1000000
+   (16MB). It should be the same as X in the "crashkernel=Y@X" boot
+   parameter discussed above.
+
+   On x86 and x86_64, use "CONFIG_PHYSICAL_START=0x1000000".
+
+   On ppc64 the value is automatically set at 32MB when
+   CONFIG_CRASH_DUMP is set.
+
+6) Optionally enable "/proc/vmcore support" under "Filesystems" ->
+   "Pseudo filesystems".
+
+   CONFIG_PROC_VMCORE=y
+   (CONFIG_PROC_VMCORE is set by default when CONFIG_CRASH_DUMP is selected.)
+
+7) Make and install the kernel and its modules. DO NOT add this kernel
+   to the boot loader configuration files.
+
+
+Load the Dump-capture Kernel
+============================
+
+After booting to the system kernel, load the dump-capture kernel using
+the following command:
+
+   kexec -p <dump-capture-kernel> \
+   --initrd=<initrd-for-dump-capture-kernel> --args-linux \
+   --append="root=<root-dev> init 1 irqpoll"
+
+
+Notes on loading the dump-capture kernel:
+
+* <dump-capture-kernel> must be a vmlinux image (that is, an
+  uncompressed ELF image). bzImage does not work at this time.
+
+* By default, the ELF headers are stored in ELF64 format to support
+  systems with more than 4GB memory. The --elf32-core-headers option can
+  be used to force the generation of ELF32 headers. This is necessary
+  because GDB currently cannot open vmcore files with ELF64 headers on
+  32-bit systems. ELF32 headers can be used on non-PAE systems (that is,
+  less than 4GB of memory).
+
+* The "irqpoll" boot parameter reduces driver initialization failures
+  due to shared interrupts in the dump-capture kernel.
+
+* You must specify <root-dev> in the format corresponding to the root
+  device name in the output of mount command.
+
+* "init 1" boots the dump-capture kernel into single-user mode without
+  networking. If you want networking, use "init 3."
+
+
+Kernel Panic
+============
+
+After successfully loading the dump-capture kernel as previously
+described, the system will reboot into the dump-capture kernel if a
+system crash is triggered.  Trigger points are located in panic(),
+die(), die_nmi() and in the sysrq handler (ALT-SysRq-c).
+
+The following conditions will execute a crash trigger point:
+
+If a hard lockup is detected and "NMI watchdog" is configured, the system
+will boot into the dump-capture kernel ( die_nmi() ).
+
+If die() is called, and it happens to be a thread with pid 0 or 1, or die()
+is called inside interrupt context or die() is called and panic_on_oops is set,
+the system will boot into the dump-capture kernel.
+
+On powererpc systems when a soft-reset is generated, die() is called by all cpus and the system system will boot into the dump-capture kernel.
+
+For testing purposes, you can trigger a crash by using "ALT-SysRq-c",
+"echo c > /proc/sysrq-trigger or write a module to force the panic.
+
+Write Out the Dump File
+=======================
+
+After the dump-capture kernel is booted, write out the dump file with
+the following command:
 
    cp /proc/vmcore <dump-file>
 
-   Dump memory can also be accessed as a /dev/oldmem device for a linear/raw
-   view.  To create the device, type:
+You can also access dumped memory as a /dev/oldmem device for a linear
+and raw view. To create the device, use the following command:
 
-   mknod /dev/oldmem c 1 12
+    mknod /dev/oldmem c 1 12
 
-   Use "dd" with suitable options for count, bs and skip to access specific
-   portions of the dump.
+Use the dd command with suitable options for count, bs, and skip to
+access specific portions of the dump.
 
-   Entire memory:  dd if=/dev/oldmem of=oldmem.001
+To see the entire memory, use the following command:
 
+   dd if=/dev/oldmem of=oldmem.001
 
-ANALYSIS
+
+Analysis
 ========
-Limited analysis can be done using gdb on the dump file copied out of
-/proc/vmcore. Use vmlinux built with -g and run
 
-  gdb vmlinux <dump-file>
+Before analyzing the dump image, you should reboot into a stable kernel.
+
+You can do limited analysis using GDB on the dump file copied out of
+/proc/vmcore. Use the debug vmlinux built with -g and run the following
+command:
+
+   gdb vmlinux <dump-file>
 
-Stack trace for the task on processor 0, register display, memory display
-work fine.
+Stack trace for the task on processor 0, register display, and memory
+display work fine.
 
-Note: gdb cannot analyse core files generated in ELF64 format for i386.
+Note: GDB cannot analyze core files generated in ELF64 format for x86.
+On systems with a maximum of 4GB of memory, you can generate
+ELF32-format headers using the --elf32-core-headers kernel option on the
+dump kernel.
 
-Latest "crash" (crash-4.0-2.18) as available on Dave Anderson's site
-http://people.redhat.com/~anderson/ works well with kdump format.
+You can also use the Crash utility to analyze dump files in Kdump
+format. Crash is available on Dave Anderson's site at the following URL:
 
+   http://people.redhat.com/~anderson/
+
+
+To Do
+=====
 
-TODO
-====
-1) Provide a kernel pages filtering mechanism so that core file size is not
-   insane on systems having huge memory banks.
-2) Relocatable kernel can help in maintaining multiple kernels for crashdump
-   and same kernel as the first kernel can be used to capture the dump.
+1) Provide a kernel pages filtering mechanism, so core file size is not
+   extreme on systems with huge memory banks.
 
+2) Relocatable kernel can help in maintaining multiple kernels for
+   crash_dump, and the same kernel as the system kernel can be used to
+   capture the dump.
 
-CONTACT
+
+Contact
 =======
+
 Vivek Goyal (vgoyal@in.ibm.com)
 Maneesh Soni (maneesh@in.ibm.com)
+
+
+Trademark
+=========
+
+Linux is a trademark of Linus Torvalds in the United States, other
+countries, or both.
index 4710845..cf0d541 100644 (file)
@@ -262,9 +262,14 @@ What is required is some way of intervening to instruct the compiler and the
 CPU to restrict the order.
 
 Memory barriers are such interventions.  They impose a perceived partial
-ordering between the memory operations specified on either side of the barrier.
-They request that the sequence of memory events generated appears to other
-parts of the system as if the barrier is effective on that CPU.
+ordering over the memory operations on either side of the barrier.
+
+Such enforcement is important because the CPUs and other devices in a system
+can use a variety of tricks to improve performance - including reordering,
+deferral and combination of memory operations; speculative loads; speculative
+branch prediction and various types of caching.  Memory barriers are used to
+override or suppress these tricks, allowing the code to sanely control the
+interaction of multiple CPUs and/or devices.
 
 
 VARIETIES OF MEMORY BARRIER
@@ -282,7 +287,7 @@ Memory barriers come in four basic varieties:
      A write barrier is a partial ordering on stores only; it is not required
      to have any effect on loads.
 
-     A CPU can be viewed as as commiting a sequence of store operations to the
+     A CPU can be viewed as committing a sequence of store operations to the
      memory system as time progresses.  All stores before a write barrier will
      occur in the sequence _before_ all the stores after the write barrier.
 
@@ -413,7 +418,7 @@ There are certain things that the Linux kernel memory barriers do not guarantee:
      indirect effect will be the order in which the second CPU sees the effects
      of the first CPU's accesses occur, but see the next point:
 
- (*) There is no guarantee that the a CPU will see the correct order of effects
+ (*) There is no guarantee that a CPU will see the correct order of effects
      from a second CPU's accesses, even _if_ the second CPU uses a memory
      barrier, unless the first CPU _also_ uses a matching memory barrier (see
      the subsection on "SMP Barrier Pairing").
@@ -461,8 +466,8 @@ Whilst this may seem like a failure of coherency or causality maintenance, it
 isn't, and this behaviour can be observed on certain real CPUs (such as the DEC
 Alpha).
 
-To deal with this, a data dependency barrier must be inserted between the
-address load and the data load:
+To deal with this, a data dependency barrier or better must be inserted
+between the address load and the data load:
 
        CPU 1           CPU 2
        =============== ===============
@@ -484,7 +489,7 @@ lines.  The pointer P might be stored in an odd-numbered cache line, and the
 variable B might be stored in an even-numbered cache line.  Then, if the
 even-numbered bank of the reading CPU's cache is extremely busy while the
 odd-numbered bank is idle, one can see the new value of the pointer P (&B),
-but the old value of the variable B (1).
+but the old value of the variable B (2).
 
 
 Another example of where data dependency barriers might by required is where a
@@ -744,7 +749,7 @@ some effectively random order, despite the write barrier issued by CPU 1:
                                                :       :
 
 
-If, however, a read barrier were to be placed between the load of E and the
+If, however, a read barrier were to be placed between the load of B and the
 load of A on CPU 2:
 
        CPU 1                   CPU 2
@@ -1461,9 +1466,8 @@ instruction itself is complete.
 
 On a UP system - where this wouldn't be a problem - the smp_mb() is just a
 compiler barrier, thus making sure the compiler emits the instructions in the
-right order without actually intervening in the CPU.  Since there there's only
-one CPU, that CPU's dependency ordering logic will take care of everything
-else.
+right order without actually intervening in the CPU.  Since there's only one
+CPU, that CPU's dependency ordering logic will take care of everything else.
 
 
 ATOMIC OPERATIONS
@@ -1640,9 +1644,9 @@ functions:
 
      The PCI bus, amongst others, defines an I/O space concept - which on such
      CPUs as i386 and x86_64 cpus readily maps to the CPU's concept of I/O
-     space.  However, it may also mapped as a virtual I/O space in the CPU's
-     memory map, particularly on those CPUs that don't support alternate
-     I/O spaces.
+     space.  However, it may also be mapped as a virtual I/O space in the CPU's
+     memory map, particularly on those CPUs that don't support alternate I/O
+     spaces.
 
      Accesses to this space may be fully synchronous (as on i386), but
      intermediary bridges (such as the PCI host bridge) may not fully honour
index 95d17b3..2a58f98 100644 (file)
@@ -44,8 +44,10 @@ normal timer interrupt, which is 100Hz.
 Programming and/or enabling interrupt frequencies greater than 64Hz is
 only allowed by root. This is perhaps a bit conservative, but we don't want
 an evil user generating lots of IRQs on a slow 386sx-16, where it might have
-a negative impact on performance.  Note that the interrupt handler is only
-a few lines of code to minimize any possibility of this effect.
+a negative impact on performance. This 64Hz limit can be changed by writing
+a different value to /proc/sys/dev/rtc/max-user-freq. Note that the
+interrupt handler is only a few lines of code to minimize any possibility
+of this effect.
 
 Also, if the kernel time is synchronized with an external source, the 
 kernel will write the time back to the CMOS clock every 11 minutes. In 
@@ -81,6 +83,7 @@ that will be using this driver.
  */
 
 #include <stdio.h>
+#include <stdlib.h>
 #include <linux/rtc.h>
 #include <sys/ioctl.h>
 #include <sys/time.h>
index ad0bedf..e0188a2 100644 (file)
@@ -115,8 +115,9 @@ trojan program is running at console and which could grab your password
 when you would try to login. It will kill all programs on given console
 and thus letting you make sure that the login prompt you see is actually
 the one from init, not some trojan program.
-IMPORTANT:In its true form it is not a true SAK like the one in   :IMPORTANT
-IMPORTANT:c2 compliant systems, and it should be mistook as such. :IMPORTANT
+IMPORTANT: In its true form it is not a true SAK like the one in a :IMPORTANT
+IMPORTANT: c2 compliant system, and it should not be mistaken as   :IMPORTANT
+IMPORTANT: such.                                                   :IMPORTANT
        It seems other find it useful as (System Attention Key) which is
 useful when you want to exit a program that will not let you switch consoles.
 (For example, X or a svgalib program.)
index b72706c..4efa464 100644 (file)
@@ -87,7 +87,7 @@
  86 -> Osprey 101/151 w/ svid
  87 -> Osprey 200/201/250/251
  88 -> Osprey 200/250                                      [0070:ff01]
- 89 -> Osprey 210/220
+ 89 -> Osprey 210/220/230
  90 -> Osprey 500                                          [0070:ff02]
  91 -> Osprey 540                                          [0070:ff04]
  92 -> Osprey 2000                                         [0070:ff03]
 110 -> IVC-100                                             [ff00:a132]
 111 -> IVC-120G                                            [ff00:a182,ff01:a182,ff02:a182,ff03:a182,ff04:a182,ff05:a182,ff06:a182,ff07:a182,ff08:a182,ff09:a182,ff0a:a182,ff0b:a182,ff0c:a182,ff0d:a182,ff0e:a182,ff0f:a182]
 112 -> pcHDTV HD-2000 TV                                   [7063:2000]
-113 -> Twinhan DST + clones                                [11bd:0026,1822:0001,270f:fc00]
+113 -> Twinhan DST + clones                                [11bd:0026,1822:0001,270f:fc00,1822:0026]
 114 -> Winfast VC100                                       [107d:6607]
 115 -> Teppro TEV-560/InterVision IV-560
 116 -> SIMUS GVC1100                                       [aa6a:82b2]
index 3b39a91..6cb63dd 100644 (file)
@@ -15,7 +15,7 @@
  14 -> KWorld/VStream XPert DVB-T                          [17de:08a6]
  15 -> DViCO FusionHDTV DVB-T1                             [18ac:db00]
  16 -> KWorld LTV883RF
- 17 -> DViCO FusionHDTV 3 Gold-Q                           [18ac:d810]
+ 17 -> DViCO FusionHDTV 3 Gold-Q                           [18ac:d810,18ac:d800]
  18 -> Hauppauge Nova-T DVB-T                              [0070:9002,0070:9001]
  19 -> Conexant DVB-T reference design                     [14f1:0187]
  20 -> Provideo PV259                                      [1540:2580]
  39 -> KWorld DVB-S 100                                    [17de:08b2]
  40 -> Hauppauge WinTV-HVR1100 DVB-T/Hybrid                [0070:9400,0070:9402]
  41 -> Hauppauge WinTV-HVR1100 DVB-T/Hybrid (Low Profile)  [0070:9800,0070:9802]
- 42 -> digitalnow DNTV Live! DVB-T Pro                     [1822:0025]
+ 42 -> digitalnow DNTV Live! DVB-T Pro                     [1822:0025,1822:0019]
  43 -> KWorld/VStream XPert DVB-T with cx22702             [17de:08a1]
  44 -> DViCO FusionHDTV DVB-T Dual Digital                 [18ac:db50,18ac:db54]
  45 -> KWorld HardwareMpegTV XPert                         [17de:0840]
  46 -> DViCO FusionHDTV DVB-T Hybrid                       [18ac:db40,18ac:db44]
+ 47 -> pcHDTV HD5500 HDTV                                  [7063:5500]
+ 48 -> Kworld MCE 200 Deluxe                               [17de:0841]
+ 49 -> PixelView PlayTV P7000                              [1554:4813]
+ 50 -> NPG Tech Real TV FM Top 10                          [14f1:0842]
+ 51 -> WinFast DTV2000 H                                   [107d:665e]
index bca5090..9068b66 100644 (file)
@@ -93,3 +93,4 @@
  92 -> AVerMedia A169 B1                        [1461:6360]
  93 -> Medion 7134 Bridge #2                    [16be:0005]
  94 -> LifeView FlyDVB-T Hybrid Cardbus         [5168:3306,5168:3502]
+ 95 -> LifeView FlyVIDEO3000 (NTSC)             [5169:0138]
index 1bcdac6..44134f0 100644 (file)
@@ -62,7 +62,7 @@ tuner=60 - Thomson DTT 761X (ATSC/NTSC)
 tuner=61 - Tena TNF9533-D/IF/TNF9533-B/DF
 tuner=62 - Philips TEA5767HN FM Radio
 tuner=63 - Philips FMD1216ME MK3 Hybrid Tuner
-tuner=64 - LG TDVS-H062F/TUA6034
+tuner=64 - LG TDVS-H06xF
 tuner=65 - Ymec TVF66T5-B/DFF
 tuner=66 - LG TALN series
 tuner=67 - Philips TD1316 Hybrid Tuner
@@ -71,3 +71,4 @@ tuner=69 - Tena TNF 5335 and similar models
 tuner=70 - Samsung TCPN 2121P30A
 tuner=71 - Xceive xc3028
 tuner=72 - Thomson FE6600
+tuner=73 - Samsung TCPG 6121P30A
index 464e4ce..ade8651 100644 (file)
@@ -185,207 +185,10 @@ this work is documented at the video4linux2 site listed below.
 
 9.0 --- A sample program using v4lgrabber,
 
-This program is a simple image grabber that will copy a frame from the
+v4lgrab is a simple image grabber that will copy a frame from the
 first video device, /dev/video0 to standard output in portable pixmap
-format (.ppm)  Using this like: 'v4lgrab | convert - c-qcam.jpg'
-produced this picture of me at
-    http://mug.sys.virginia.edu/~drf5n/extras/c-qcam.jpg
-
--------------------- 8< ---------------- 8< -----------------------------
-
-/* Simple Video4Linux image grabber. */
-/*
- *     Video4Linux Driver Test/Example Framegrabbing Program
- *
- *     Compile with:
- *             gcc -s -Wall -Wstrict-prototypes v4lgrab.c -o v4lgrab
- *      Use as:
- *              v4lgrab >image.ppm
- *
- *     Copyright (C) 1998-05-03, Phil Blundell <philb@gnu.org>
- *      Copied from http://www.tazenda.demon.co.uk/phil/vgrabber.c
- *      with minor modifications (Dave Forrest, drf5n@virginia.edu).
- *
- */
-
-#include <unistd.h>
-#include <sys/types.h>
-#include <sys/stat.h>
-#include <fcntl.h>
-#include <stdio.h>
-#include <sys/ioctl.h>
-#include <stdlib.h>
-
-#include <linux/types.h>
-#include <linux/videodev.h>
-
-#define FILE "/dev/video0"
-
-/* Stole this from tvset.c */
-
-#define READ_VIDEO_PIXEL(buf, format, depth, r, g, b)                   \
-{                                                                       \
-       switch (format)                                                 \
-       {                                                               \
-               case VIDEO_PALETTE_GREY:                                \
-                       switch (depth)                                  \
-                       {                                               \
-                               case 4:                                 \
-                               case 6:                                 \
-                               case 8:                                 \
-                                       (r) = (g) = (b) = (*buf++ << 8);\
-                                       break;                          \
-                                                                       \
-                               case 16:                                \
-                                       (r) = (g) = (b) =               \
-                                               *((unsigned short *) buf);      \
-                                       buf += 2;                       \
-                                       break;                          \
-                       }                                               \
-                       break;                                          \
-                                                                       \
-                                                                       \
-               case VIDEO_PALETTE_RGB565:                              \
-               {                                                       \
-                       unsigned short tmp = *(unsigned short *)buf;    \
-                       (r) = tmp&0xF800;                               \
-                       (g) = (tmp<<5)&0xFC00;                          \
-                       (b) = (tmp<<11)&0xF800;                         \
-                       buf += 2;                                       \
-               }                                                       \
-               break;                                                  \
-                                                                       \
-               case VIDEO_PALETTE_RGB555:                              \
-                       (r) = (buf[0]&0xF8)<<8;                         \
-                       (g) = ((buf[0] << 5 | buf[1] >> 3)&0xF8)<<8;    \
-                       (b) = ((buf[1] << 2 ) & 0xF8)<<8;               \
-                       buf += 2;                                       \
-                       break;                                          \
-                                                                       \
-               case VIDEO_PALETTE_RGB24:                               \
-                       (r) = buf[0] << 8; (g) = buf[1] << 8;           \
-                       (b) = buf[2] << 8;                              \
-                       buf += 3;                                       \
-                       break;                                          \
-                                                                       \
-               default:                                                \
-                       fprintf(stderr,                                 \
-                               "Format %d not yet supported\n",        \
-                               format);                                \
-       }                                                               \
-}
-
-int get_brightness_adj(unsigned char *image, long size, int *brightness) {
-  long i, tot = 0;
-  for (i=0;i<size*3;i++)
-    tot += image[i];
-  *brightness = (128 - tot/(size*3))/3;
-  return !((tot/(size*3)) >= 126 && (tot/(size*3)) <= 130);
-}
-
-int main(int argc, char ** argv)
-{
-  int fd = open(FILE, O_RDONLY), f;
-  struct video_capability cap;
-  struct video_window win;
-  struct video_picture vpic;
-
-  unsigned char *buffer, *src;
-  int bpp = 24, r, g, b;
-  unsigned int i, src_depth;
-
-  if (fd < 0) {
-    perror(FILE);
-    exit(1);
-  }
-
-  if (ioctl(fd, VIDIOCGCAP, &cap) < 0) {
-    perror("VIDIOGCAP");
-    fprintf(stderr, "(" FILE " not a video4linux device?)\n");
-    close(fd);
-    exit(1);
-  }
-
-  if (ioctl(fd, VIDIOCGWIN, &win) < 0) {
-    perror("VIDIOCGWIN");
-    close(fd);
-    exit(1);
-  }
-
-  if (ioctl(fd, VIDIOCGPICT, &vpic) < 0) {
-    perror("VIDIOCGPICT");
-    close(fd);
-    exit(1);
-  }
-
-  if (cap.type & VID_TYPE_MONOCHROME) {
-    vpic.depth=8;
-    vpic.palette=VIDEO_PALETTE_GREY;    /* 8bit grey */
-    if(ioctl(fd, VIDIOCSPICT, &vpic) < 0) {
-      vpic.depth=6;
-      if(ioctl(fd, VIDIOCSPICT, &vpic) < 0) {
-       vpic.depth=4;
-       if(ioctl(fd, VIDIOCSPICT, &vpic) < 0) {
-         fprintf(stderr, "Unable to find a supported capture format.\n");
-         close(fd);
-         exit(1);
-       }
-      }
-    }
-  } else {
-    vpic.depth=24;
-    vpic.palette=VIDEO_PALETTE_RGB24;
-
-    if(ioctl(fd, VIDIOCSPICT, &vpic) < 0) {
-      vpic.palette=VIDEO_PALETTE_RGB565;
-      vpic.depth=16;
-
-      if(ioctl(fd, VIDIOCSPICT, &vpic)==-1) {
-       vpic.palette=VIDEO_PALETTE_RGB555;
-       vpic.depth=15;
-
-       if(ioctl(fd, VIDIOCSPICT, &vpic)==-1) {
-         fprintf(stderr, "Unable to find a supported capture format.\n");
-         return -1;
-       }
-      }
-    }
-  }
-
-  buffer = malloc(win.width * win.height * bpp);
-  if (!buffer) {
-    fprintf(stderr, "Out of memory.\n");
-    exit(1);
-  }
-
-  do {
-    int newbright;
-    read(fd, buffer, win.width * win.height * bpp);
-    f = get_brightness_adj(buffer, win.width * win.height, &newbright);
-    if (f) {
-      vpic.brightness += (newbright << 8);
-      if(ioctl(fd, VIDIOCSPICT, &vpic)==-1) {
-       perror("VIDIOSPICT");
-       break;
-      }
-    }
-  } while (f);
-
-  fprintf(stdout, "P6\n%d %d 255\n", win.width, win.height);
-
-  src = buffer;
-
-  for (i = 0; i < win.width * win.height; i++) {
-    READ_VIDEO_PIXEL(src, vpic.palette, src_depth, r, g, b);
-    fputc(r>>8, stdout);
-    fputc(g>>8, stdout);
-    fputc(b>>8, stdout);
-  }
-
-  close(fd);
-  return 0;
-}
--------------------- 8< ---------------- 8< -----------------------------
+format (.ppm)  To produce .jpg output, you can use it like this:
+'v4lgrab | convert - c-qcam.jpg'
 
 
 10.0 --- Other Information
index be9f21b..040a2c8 100644 (file)
@@ -33,6 +33,21 @@ Inputs/outputs: Composite and S-video
 Norms: PAL, SECAM (720x576 @ 25 fps), NTSC (720x480 @ 29.97 fps)
 Card number: 7
 
+AverMedia 6 Eyes AVS6EYES:
+* Zoran zr36067 PCI controller
+* Zoran zr36060 MJPEG codec
+* Samsung ks0127 TV decoder
+* Conexant bt866  TV encoder
+Drivers to use: videodev, i2c-core, i2c-algo-bit,
+               videocodec, ks0127, bt866, zr36060, zr36067
+Inputs/outputs: Six physical inputs. 1-6 are composite,
+               1-2, 3-4, 5-6 doubles as S-video,
+               1-3 triples as component.
+               One composite output.
+Norms: PAL, SECAM (720x576 @ 25 fps), NTSC (720x480 @ 29.97 fps)
+Card number: 8
+Not autodetected, card=8 is necessary.
+
 Linux Media Labs LML33:
 * Zoran zr36067 PCI controller
 * Zoran zr36060 MJPEG codec
@@ -192,6 +207,10 @@ Micronas vpx3220a TV decoder
 was introduced in 1996, is used in the DC30 and DC30+ and
 can handle: PAL B/G/H/I, PAL N, PAL M, NTSC M, NTSC 44, PAL 60, SECAM,NTSC Comb
 
+Samsung ks0127 TV decoder
+is used in the AVS6EYES card and
+can handle: NTSC-M/N/44, PAL-M/N/B/G/H/I/D/K/L and SECAM
+
 ===========================
 
 1.2 What the TV encoder can do an what not
@@ -221,6 +240,10 @@ ITT mse3000 TV encoder
 was introduced in 1991, is used in the DC10 old
 can generate: PAL , NTSC , SECAM
 
+Conexant bt866 TV encoder
+is used in AVS6EYES, and
+can generate: NTSC/PAL, PAL­M, PAL­N
+
 The adv717x, should be able to produce PAL N. But you find nothing PAL N
 specific in the registers. Seem that you have to reuse a other standard
 to generate PAL N, maybe it would work if you use the PAL M settings.
index aef49db..8aad6dd 100644 (file)
@@ -1,4 +1,4 @@
-Contributors to bttv: 
+Contributors to bttv:
 
 Michael Chu <mmchu@pobox.com>
   AverMedia fix and more flexible card recognition
@@ -8,8 +8,8 @@ Alan Cox <alan@redhat.com>
 
 Chris Kleitsch
   Hardware I2C
-  
-Gerd Knorr <kraxel@cs.tu-berlin.de> 
+
+Gerd Knorr <kraxel@cs.tu-berlin.de>
   Radio card (ITT sound processor)
 
 bigfoot <bigfoot@net-way.net>
@@ -18,7 +18,7 @@ Ragnar Hojland Espinosa <ragnar@macula.net>
 
 
 + many more (please mail me if you are missing in this list and would
-             like to be mentioned)
+            like to be mentioned)
 
 
 
diff --git a/Documentation/video4linux/cx2341x/fw-calling.txt b/Documentation/video4linux/cx2341x/fw-calling.txt
new file mode 100644 (file)
index 0000000..8d21181
--- /dev/null
@@ -0,0 +1,69 @@
+This page describes how to make calls to the firmware api.
+
+How to call
+===========
+
+The preferred calling convention is known as the firmware mailbox. The
+mailboxes are basically a fixed length array that serves as the call-stack.
+
+Firmware mailboxes can be located by searching the encoder and decoder memory
+for a 16 byte signature. That signature will be located on a 256-byte boundary.
+
+Signature:
+0x78, 0x56, 0x34, 0x12, 0x12, 0x78, 0x56, 0x34,
+0x34, 0x12, 0x78, 0x56, 0x56, 0x34, 0x12, 0x78
+
+The firmware implements 20 mailboxes of 20 32-bit words. The first 10 are
+reserved for API calls. The second 10 are used by the firmware for event
+notification.
+
+  Index  Name
+  -----  ----
+  0      Flags
+  1      Command
+  2      Return value
+  3      Timeout
+  4-19   Parameter/Result
+
+
+The flags are defined in the following table. The direction is from the
+perspective of the firmware.
+
+  Bit  Direction  Purpose
+  ---  ---------  -------
+  2    O          Firmware has processed the command.
+  1    I          Driver has finished setting the parameters.
+  0    I          Driver is using this mailbox.
+
+
+The command is a 32-bit enumerator. The API specifics may be found in the
+fw-*-api.txt documents.
+
+The return value is a 32-bit enumerator. Only two values are currently defined:
+0=success and -1=command undefined.
+
+There are 16 parameters/results 32-bit fields. The driver populates these fields
+with values for all the parameters required by the call. The driver overwrites
+these fields with result values returned by the call. The API specifics may be
+found in the fw-*-api.txt documents.
+
+The timeout value protects the card from a hung driver thread. If the driver
+doesn't handle the completed call within the timeout specified, the firmware
+will reset that mailbox.
+
+To make an API call, the driver iterates over each mailbox looking for the
+first one available (bit 0 has been cleared). The driver sets that bit, fills
+in the command enumerator, the timeout value and any required parameters. The
+driver then sets the parameter ready bit (bit 1). The firmware scans the
+mailboxes for pending commands, processes them, sets the result code, populates
+the result value array with that call's return values and sets the call
+complete bit (bit 2). Once bit 2 is set, the driver should retrieve the results
+and clear all the flags. If the driver does not perform this task within the
+time set in the timeout register, the firmware will reset that mailbox.
+
+Event notifications are sent from the firmware to the host. The host tells the
+firmware which events it is interested in via an API call. That call tells the
+firmware which notification mailbox to use. The firmware signals the host via
+an interrupt. Only the 16 Results fields are used, the Flags, Command, Return
+value and Timeout words are not used.
+
diff --git a/Documentation/video4linux/cx2341x/fw-decoder-api.txt b/Documentation/video4linux/cx2341x/fw-decoder-api.txt
new file mode 100644 (file)
index 0000000..9df4fb3
--- /dev/null
@@ -0,0 +1,319 @@
+Decoder firmware API description
+================================
+
+Note: this API is part of the decoder firmware, so it's cx23415 only.
+
+-------------------------------------------------------------------------------
+
+Name   CX2341X_DEC_PING_FW
+Enum   0/0x00
+Description
+       This API call does nothing. It may be used to check if the firmware
+       is responding.
+
+-------------------------------------------------------------------------------
+
+Name   CX2341X_DEC_START_PLAYBACK
+Enum   1/0x01
+Description
+       Begin or resume playback.
+Param[0]
+       0 based frame number in GOP to begin playback from.
+Param[1]
+       Specifies the number of muted audio frames to play before normal
+       audio resumes.
+
+-------------------------------------------------------------------------------
+
+Name   CX2341X_DEC_STOP_PLAYBACK
+Enum   2/0x02
+Description
+       Ends playback and clears all decoder buffers. If PTS is not zero,
+       playback stops at specified PTS.
+Param[0]
+       Display 0=last frame, 1=black
+Param[1]
+       PTS low
+Param[2]
+       PTS high
+
+-------------------------------------------------------------------------------
+
+Name   CX2341X_DEC_SET_PLAYBACK_SPEED
+Enum   3/0x03
+Description
+       Playback stream at speed other than normal. There are two modes of
+       operation:
+           Smooth: host transfers entire stream and firmware drops unused
+                   frames.
+           Coarse: host drops frames based on indexing as required to achieve
+                   desired speed.
+Param[0]
+       Bitmap:
+           0:7  0 normal
+                1 fast only "1.5 times"
+                n nX fast, 1/nX slow
+           30   Framedrop:
+                    '0' during 1.5 times play, every other B frame is dropped
+                    '1' during 1.5 times play, stream is unchanged (bitrate
+                        must not exceed 8mbps)
+           31   Speed:
+                    '0' slow
+                    '1' fast
+Param[1]
+       Direction: 0=forward, 1=reverse
+Param[2]
+       Picture mask:
+           1=I frames
+           3=I, P frames
+           7=I, P, B frames
+Param[3]
+       B frames per GOP (for reverse play only)
+Param[4]
+       Mute audio: 0=disable, 1=enable
+Param[5]
+       Display 0=frame, 1=field
+Param[6]
+       Specifies the number of muted audio frames to play before normal audio
+       resumes.
+
+-------------------------------------------------------------------------------
+
+Name   CX2341X_DEC_STEP_VIDEO
+Enum   5/0x05
+Description
+       Each call to this API steps the playback to the next unit defined below
+       in the current playback direction.
+Param[0]
+       0=frame, 1=top field, 2=bottom field
+
+-------------------------------------------------------------------------------
+
+Name   CX2341X_DEC_SET_DMA_BLOCK_SIZE
+Enum   8/0x08
+Description
+       Set DMA transfer block size. Counterpart to API 0xC9
+Param[0]
+       DMA transfer block size in bytes. A different size may be specified
+       when issuing the DMA transfer command.
+
+-------------------------------------------------------------------------------
+
+Name   CX2341X_DEC_GET_XFER_INFO
+Enum   9/0x09
+Description
+       This API call may be used to detect an end of stream condtion.
+Result[0]
+       Stream type
+Result[1]
+       Address offset
+Result[2]
+       Maximum bytes to transfer
+Result[3]
+       Buffer fullness
+
+-------------------------------------------------------------------------------
+
+Name   CX2341X_DEC_GET_DMA_STATUS
+Enum   10/0x0A
+Description
+       Status of the last DMA transfer
+Result[0]
+       Bit 1 set means transfer complete
+       Bit 2 set means DMA error
+       Bit 3 set means linked list error
+Result[1]
+       DMA type: 0=MPEG, 1=OSD, 2=YUV
+
+-------------------------------------------------------------------------------
+
+Name   CX2341X_DEC_SCHED_DMA_FROM_HOST
+Enum   11/0x0B
+Description
+       Setup DMA from host operation. Counterpart to API 0xCC
+Param[0]
+       Memory address of link list
+Param[1]
+       Total # of bytes to transfer
+Param[2]
+       DMA type (0=MPEG, 1=OSD, 2=YUV)
+
+-------------------------------------------------------------------------------
+
+Name   CX2341X_DEC_PAUSE_PLAYBACK
+Enum   13/0x0D
+Description
+       Freeze playback immediately. In this mode, when internal buffers are
+       full, no more data will be accepted and data request IRQs will be
+       masked.
+Param[0]
+       Display: 0=last frame, 1=black
+
+-------------------------------------------------------------------------------
+
+Name   CX2341X_DEC_HALT_FW
+Enum   14/0x0E
+Description
+       The firmware is halted and no further API calls are serviced until
+       the firmware is uploaded again.
+
+-------------------------------------------------------------------------------
+
+Name   CX2341X_DEC_SET_STANDARD
+Enum   16/0x10
+Description
+       Selects display standard
+Param[0]
+       0=NTSC, 1=PAL
+
+-------------------------------------------------------------------------------
+
+Name   CX2341X_DEC_GET_VERSION
+Enum   17/0x11
+Description
+       Returns decoder firmware version information
+Result[0]
+       Version bitmask:
+           Bits  0:15 build
+           Bits 16:23 minor
+           Bits 24:31 major
+
+-------------------------------------------------------------------------------
+
+Name   CX2341X_DEC_SET_STREAM_INPUT
+Enum   20/0x14
+Description
+       Select decoder stream input port
+Param[0]
+       0=memory (default), 1=streaming
+
+-------------------------------------------------------------------------------
+
+Name   CX2341X_DEC_GET_TIMING_INFO
+Enum   21/0x15
+Description
+       Returns timing information from start of playback
+Result[0]
+       Frame count by decode order
+Result[1]
+       Video PTS bits 0:31 by display order
+Result[2]
+       Video PTS bit 32 by display order
+Result[3]
+       SCR bits 0:31 by display order
+Result[4]
+       SCR bit 32 by display order
+
+-------------------------------------------------------------------------------
+
+Name   CX2341X_DEC_SET_AUDIO_MODE
+Enum   22/0x16
+Description
+       Select audio mode
+Param[0]
+       Dual mono mode action
+Param[1]
+       Stereo mode action:
+           0=Stereo, 1=Left, 2=Right, 3=Mono, 4=Swap, -1=Unchanged
+
+-------------------------------------------------------------------------------
+
+Name   CX2341X_DEC_SET_EVENT_NOTIFICATION
+Enum   23/0x17
+Description
+       Setup firmware to notify the host about a particular event.
+       Counterpart to API 0xD5
+Param[0]
+       Event: 0=Audio mode change between stereo and dual channel
+Param[1]
+       Notification 0=disabled, 1=enabled
+Param[2]
+       Interrupt bit
+Param[3]
+       Mailbox slot, -1 if no mailbox required.
+
+-------------------------------------------------------------------------------
+
+Name   CX2341X_DEC_SET_DISPLAY_BUFFERS
+Enum   24/0x18
+Description
+       Number of display buffers. To decode all frames in reverse playback you
+       must use nine buffers.
+Param[0]
+       0=six buffers, 1=nine buffers
+
+-------------------------------------------------------------------------------
+
+Name   CX2341X_DEC_EXTRACT_VBI
+Enum   25/0x19
+Description
+       Extracts VBI data
+Param[0]
+       0=extract from extension & user data, 1=extract from private packets
+Result[0]
+       VBI table location
+Result[1]
+       VBI table size
+
+-------------------------------------------------------------------------------
+
+Name   CX2341X_DEC_SET_DECODER_SOURCE
+Enum   26/0x1A
+Description
+       Selects decoder source. Ensure that the parameters passed to this
+       API match the encoder settings.
+Param[0]
+       Mode: 0=MPEG from host, 1=YUV from encoder, 2=YUV from host
+Param[1]
+       YUV picture width
+Param[2]
+       YUV picture height
+Param[3]
+       Bitmap: see Param[0] of API 0xBD
+
+-------------------------------------------------------------------------------
+
+Name   CX2341X_DEC_SET_AUDIO_OUTPUT
+Enum   27/0x1B
+Description
+       Select audio output format
+Param[0]
+       Bitmask:
+            0:1  Data size:
+                     '00' 16 bit
+                     '01' 20 bit
+                     '10' 24 bit
+            2:7  Unused
+            8:9  Mode:
+                     '00' 2 channels
+                     '01' 4 channels
+                     '10' 6 channels
+                     '11' 6 channels with one line data mode
+                          (for left justified MSB first mode, 20 bit only)
+           10:11 Unused
+           12:13 Channel format:
+                     '00' right justified MSB first mode
+                     '01' left justified MSB first mode
+                     '10' I2S mode
+           14:15 Unused
+           16:21 Right justify bit count
+           22:31 Unused
+
+-------------------------------------------------------------------------------
+
+Name   CX2341X_DEC_SET_AV_DELAY
+Enum   28/0x1C
+Description
+       Set audio/video delay in 90Khz ticks
+Param[0]
+       0=A/V in sync, negative=audio lags, positive=video lags
+
+-------------------------------------------------------------------------------
+
+Name   CX2341X_DEC_SET_PREBUFFERING
+Enum   30/0x1E
+Description
+       Decoder prebuffering, when enabled up to 128KB are buffered for
+       streams <8mpbs or 640KB for streams >8mbps
+Param[0]
+       0=off, 1=on
diff --git a/Documentation/video4linux/cx2341x/fw-dma.txt b/Documentation/video4linux/cx2341x/fw-dma.txt
new file mode 100644 (file)
index 0000000..8123e26
--- /dev/null
@@ -0,0 +1,94 @@
+This page describes the structures and procedures used by the cx2341x DMA
+engine.
+
+Introduction
+============
+
+The cx2341x PCI interface is busmaster capable. This means it has a DMA
+engine to efficiently transfer large volumes of data between the card and main
+memory without requiring help from a CPU. Like most hardware, it must operate
+on contiguous physical memory. This is difficult to come by in large quantities
+on virtual memory machines.
+
+Therefore, it also supports a technique called "scatter-gather". The card can
+transfer multiple buffers in one operation. Instead of allocating one large
+contiguous buffer, the driver can allocate several smaller buffers.
+
+In practice, I've seen the average transfer to be roughly 80K, but transfers
+above 128K were not uncommon, particularly at startup. The 128K figure is
+important, because that is the largest block that the kernel can normally
+allocate. Even still, 128K blocks are hard to come by, so the driver writer is
+urged to choose a smaller block size and learn the scatter-gather technique.
+
+Mailbox #10 is reserved for DMA transfer information.
+
+Flow
+====
+
+This section describes, in general, the order of events when handling DMA
+transfers. Detailed information follows this section.
+
+- The card raises the Encoder interrupt.
+- The driver reads the transfer type, offset and size from Mailbox #10.
+- The driver constructs the scatter-gather array from enough free dma buffers
+  to cover the size.
+- The driver schedules the DMA transfer via the ScheduleDMAtoHost API call.
+- The card raises the DMA Complete interrupt.
+- The driver checks the DMA status register for any errors.
+- The driver post-processes the newly transferred buffers.
+
+NOTE! It is possible that the Encoder and DMA Complete interrupts get raised
+simultaneously. (End of the last, start of the next, etc.)
+
+Mailbox #10
+===========
+
+The Flags, Command, Return Value and Timeout fields are ignored.
+
+Name:       Mailbox #10
+Results[0]: Type: 0: MPEG.
+Results[1]: Offset: The position relative to the card's memory space.
+Results[2]: Size: The exact number of bytes to transfer.
+
+My speculation is that since the StartCapture API has a capture type of "RAW"
+available, that the type field will have other values that correspond to YUV
+and PCM data.
+
+Scatter-Gather Array
+====================
+
+The scatter-gather array is a contiguously allocated block of memory that
+tells the card the source and destination of each data-block to transfer.
+Card "addresses" are derived from the offset supplied by Mailbox #10. Host
+addresses are the physical memory location of the target DMA buffer.
+
+Each S-G array element is a struct of three 32-bit words. The first word is
+the source address, the second is the destination address. Both take up the
+entire 32 bits. The lowest 16 bits of the third word is the transfer byte
+count. The high-bit of the third word is the "last" flag. The last-flag tells
+the card to raise the DMA_DONE interrupt. From hard personal experience, if
+you forget to set this bit, the card will still "work" but the stream will
+most likely get corrupted.
+
+The transfer count must be a multiple of 256. Therefore, the driver will need
+to track how much data in the target buffer is valid and deal with it
+accordingly.
+
+Array Element:
+
+- 32-bit Source Address
+- 32-bit Destination Address
+- 16-bit reserved (high bit is the last flag)
+- 16-bit byte count
+
+DMA Transfer Status
+===================
+
+Register 0x0004 holds the DMA Transfer Status:
+
+Bit
+4   Scatter-Gather array error
+3   DMA write error
+2   DMA read error
+1   write completed
+0   read completed
diff --git a/Documentation/video4linux/cx2341x/fw-encoder-api.txt b/Documentation/video4linux/cx2341x/fw-encoder-api.txt
new file mode 100644 (file)
index 0000000..001c686
--- /dev/null
@@ -0,0 +1,694 @@
+Encoder firmware API description
+================================
+
+-------------------------------------------------------------------------------
+
+Name   CX2341X_ENC_PING_FW
+Enum   128/0x80
+Description
+       Does nothing. Can be used to check if the firmware is responding.
+
+-------------------------------------------------------------------------------
+
+Name   CX2341X_ENC_START_CAPTURE
+Enum   129/0x81
+Description
+       Commences the capture of video, audio and/or VBI data. All encoding
+       parameters must be initialized prior to this API call. Captures frames
+       continuously or until a predefined number of frames have been captured.
+Param[0]
+       Capture stream type:
+           0=MPEG
+           1=Raw
+           2=Raw passthrough
+           3=VBI
+
+Param[1]
+       Bitmask:
+           Bit 0 when set, captures YUV
+           Bit 1 when set, captures PCM audio
+           Bit 2 when set, captures VBI (same as param[0]=3)
+           Bit 3 when set, the capture destination is the decoder
+               (same as param[0]=2)
+           Bit 4 when set, the capture destination is the host
+       Note: this parameter is only meaningful for RAW capture type.
+
+-------------------------------------------------------------------------------
+
+Name   CX2341X_ENC_STOP_CAPTURE
+Enum   130/0x82
+Description
+       Ends a capture in progress
+Param[0]
+       0=stop at end of GOP (generates IRQ)
+       1=stop immediate (no IRQ)
+Param[1]
+       Stream type to stop, see param[0] of API 0x81
+Param[2]
+       Subtype, see param[1] of API 0x81
+
+-------------------------------------------------------------------------------
+
+Name   CX2341X_ENC_SET_AUDIO_ID
+Enum   137/0x89
+Description
+       Assigns the transport stream ID of the encoded audio stream
+Param[0]
+       Audio Stream ID
+
+-------------------------------------------------------------------------------
+
+Name   CX2341X_ENC_SET_VIDEO_ID
+Enum   139/0x8B
+Description
+       Set video transport stream ID
+Param[0]
+       Video stream ID
+
+-------------------------------------------------------------------------------
+
+Name   CX2341X_ENC_SET_PCR_ID
+Enum   141/0x8D
+Description
+       Assigns the transport stream ID for PCR packets
+Param[0]
+       PCR Stream ID
+
+-------------------------------------------------------------------------------
+
+Name   CX2341X_ENC_SET_FRAME_RATE
+Enum   143/0x8F
+Description
+       Set video frames per second. Change occurs at start of new GOP.
+Param[0]
+       0=30fps
+       1=25fps
+
+-------------------------------------------------------------------------------
+
+Name   CX2341X_ENC_SET_FRAME_SIZE
+Enum   145/0x91
+Description
+       Select video stream encoding resolution.
+Param[0]
+       Height in lines. Default 480
+Param[1]
+       Width in pixels. Default 720
+
+-------------------------------------------------------------------------------
+
+Name   CX2341X_ENC_SET_BIT_RATE
+Enum   149/0x95
+Description
+       Assign average video stream bitrate. Note on the last three params:
+       Param[3] and [4] seem to be always 0, param [5] doesn't seem to be used.
+Param[0]
+       0=variable bitrate, 1=constant bitrate
+Param[1]
+       bitrate in bits per second
+Param[2]
+       peak bitrate in bits per second, divided by 400
+Param[3]
+       Mux bitrate in bits per second, divided by 400. May be 0 (default).
+Param[4]
+       Rate Control VBR Padding
+Param[5]
+       VBV Buffer used by encoder
+
+-------------------------------------------------------------------------------
+
+Name   CX2341X_ENC_SET_GOP_PROPERTIES
+Enum   151/0x97
+Description
+       Setup the GOP structure
+Param[0]
+       GOP size (maximum is 34)
+Param[1]
+       Number of B frames between the I and P frame, plus 1.
+       For example: IBBPBBPBBPBB --> GOP size: 12, number of B frames: 2+1 = 3
+       Note that GOP size must be a multiple of (B-frames + 1).
+
+-------------------------------------------------------------------------------
+
+Name   CX2341X_ENC_SET_ASPECT_RATIO
+Enum   153/0x99
+Description
+       Sets the encoding aspect ratio. Changes in the aspect ratio take effect
+       at the start of the next GOP.
+Param[0]
+       '0000' forbidden
+       '0001' 1:1 square
+       '0010' 4:3
+       '0011' 16:9
+       '0100' 2.21:1
+       '0101' reserved
+        ....
+       '1111' reserved
+
+-------------------------------------------------------------------------------
+
+Name   CX2341X_ENC_SET_DNR_FILTER_MODE
+Enum   155/0x9B
+Description
+       Assign Dynamic Noise Reduction operating mode
+Param[0]
+       Bit0: Spatial filter, set=auto, clear=manual
+       Bit1: Temporal filter, set=auto, clear=manual
+Param[1]
+       Median filter:
+           0=Disabled
+           1=Horizontal
+           2=Vertical
+           3=Horiz/Vert
+           4=Diagonal
+
+-------------------------------------------------------------------------------
+
+Name   CX2341X_ENC_SET_DNR_FILTER_PROPS
+Enum   157/0x9D
+Description
+       These Dynamic Noise Reduction filter values are only meaningful when
+       the respective filter is set to "manual" (See API 0x9B)
+Param[0]
+       Spatial filter: default 0, range 0:15
+Param[1]
+       Temporal filter: default 0, range 0:31
+
+-------------------------------------------------------------------------------
+
+Name   CX2341X_ENC_SET_CORING_LEVELS
+Enum   159/0x9F
+Description
+       Assign Dynamic Noise Reduction median filter properties.
+Param[0]
+       Threshold above which the luminance median filter is enabled.
+       Default: 0, range 0:255
+Param[1]
+       Threshold below which the luminance median filter is enabled.
+       Default: 255, range 0:255
+Param[2]
+       Threshold above which the chrominance median filter is enabled.
+       Default: 0, range 0:255
+Param[3]
+       Threshold below which the chrominance median filter is enabled.
+       Default: 255, range 0:255
+
+-------------------------------------------------------------------------------
+
+Name   CX2341X_ENC_SET_SPATIAL_FILTER_TYPE
+Enum   161/0xA1
+Description
+       Assign spatial prefilter parameters
+Param[0]
+       Luminance filter
+           0=Off
+           1=1D Horizontal
+           2=1D Vertical
+           3=2D H/V Separable (default)
+           4=2D Symmetric non-separable
+Param[1]
+       Chrominance filter
+           0=Off
+           1=1D Horizontal (default)
+
+-------------------------------------------------------------------------------
+
+Name   CX2341X_ENC_SET_3_2_PULLDOWN
+Enum   177/0xB1
+Description
+       3:2 pulldown properties
+Param[0]
+       0=enabled
+       1=disabled
+
+-------------------------------------------------------------------------------
+
+Name   CX2341X_ENC_SET_VBI_LINE
+Enum   183/0xB7
+Description
+       Selects VBI line number.
+Param[0]
+       Bits 0:4        line number
+       Bit  31         0=top_field, 1=bottom_field
+       Bits 0:31       all set specifies "all lines"
+Param[1]
+       VBI line information features: 0=disabled, 1=enabled
+Param[2]
+       Slicing: 0=None, 1=Closed Caption
+       Almost certainly not implemented. Set to 0.
+Param[3]
+       Luminance samples in this line.
+       Almost certainly not implemented. Set to 0.
+Param[4]
+       Chrominance samples in this line
+       Almost certainly not implemented. Set to 0.
+
+-------------------------------------------------------------------------------
+
+Name   CX2341X_ENC_SET_STREAM_TYPE
+Enum   185/0xB9
+Description
+       Assign stream type
+       Note: Transport stream is not working in recent firmwares.
+       And in older firmwares the timestamps in the TS seem to be
+       unreliable.
+Param[0]
+        0=Program stream
+        1=Transport stream
+        2=MPEG1 stream
+        3=PES A/V stream
+        5=PES Video stream
+        7=PES Audio stream
+       10=DVD stream
+       11=VCD stream
+       12=SVCD stream
+       13=DVD_S1 stream
+       14=DVD_S2 stream
+
+-------------------------------------------------------------------------------
+
+Name   CX2341X_ENC_SET_OUTPUT_PORT
+Enum   187/0xBB
+Description
+       Assign stream output port. Normally 0 when the data is copied through
+       the PCI bus (DMA), and 1 when the data is streamed to another chip
+       (pvrusb and cx88-blackbird).
+Param[0]
+       0=Memory (default)
+       1=Streaming
+       2=Serial
+Param[1]
+       Unknown, but leaving this to 0 seems to work best. Indications are that
+       this might have to do with USB support, although passing anything but 0
+       onl breaks things.
+
+-------------------------------------------------------------------------------
+
+Name   CX2341X_ENC_SET_AUDIO_PROPERTIES
+Enum   189/0xBD
+Description
+       Set audio stream properties, may be called while encoding is in progress.
+       Note: all bitfields are consistent with ISO11172 documentation except
+       bits 2:3 which ISO docs define as:
+               '11' Layer I
+               '10' Layer II
+               '01' Layer III
+               '00' Undefined
+       This discrepancy may indicate a possible error in the documentation.
+       Testing indicated that only Layer II is actually working, and that
+       the minimum bitrate should be 192 kbps.
+Param[0]
+       Bitmask:
+          0:1  '00' 44.1Khz
+               '01' 48Khz
+               '10' 32Khz
+               '11' reserved
+
+          2:3  '01'=Layer I
+               '10'=Layer II
+
+          4:7  Bitrate:
+                    Index | Layer I     | Layer II
+                    ------+-------------+------------
+                   '0000' | free format | free format
+                   '0001' |  32 kbit/s  |  32 kbit/s
+                   '0010' |  64 kbit/s  |  48 kbit/s
+                   '0011' |  96 kbit/s  |  56 kbit/s
+                   '0100' | 128 kbit/s  |  64 kbit/s
+                   '0101' | 160 kbit/s  |  80 kbit/s
+                   '0110' | 192 kbit/s  |  96 kbit/s
+                   '0111' | 224 kbit/s  | 112 kbit/s
+                   '1000' | 256 kbit/s  | 128 kbit/s
+                   '1001' | 288 kbit/s  | 160 kbit/s
+                   '1010' | 320 kbit/s  | 192 kbit/s
+                   '1011' | 352 kbit/s  | 224 kbit/s
+                   '1100' | 384 kbit/s  | 256 kbit/s
+                   '1101' | 416 kbit/s  | 320 kbit/s
+                   '1110' | 448 kbit/s  | 384 kbit/s
+               Note: For Layer II, not all combinations of total bitrate
+               and mode are allowed. See ISO11172-3 3-Annex B, Table 3-B.2
+
+          8:9  '00'=Stereo
+               '01'=JointStereo
+               '10'=Dual
+               '11'=Mono
+               Note: testing seems to indicate that Mono and possibly
+               JointStereo are not working (default to stereo).
+               Dual does work, though.
+
+         10:11 Mode Extension used in joint_stereo mode.
+               In Layer I and II they indicate which subbands are in
+               intensity_stereo. All other subbands are coded in stereo.
+                   '00' subbands 4-31 in intensity_stereo, bound==4
+                   '01' subbands 8-31 in intensity_stereo, bound==8
+                   '10' subbands 12-31 in intensity_stereo, bound==12
+                   '11' subbands 16-31 in intensity_stereo, bound==16
+
+         12:13 Emphasis:
+                   '00' None
+                   '01' 50/15uS
+                   '10' reserved
+                   '11' CCITT J.17
+
+         14    CRC:
+                   '0' off
+                   '1' on
+
+         15    Copyright:
+                   '0' off
+                   '1' on
+
+         16    Generation:
+                   '0' copy
+                   '1' original
+
+-------------------------------------------------------------------------------
+
+Name   CX2341X_ENC_HALT_FW
+Enum   195/0xC3
+Description
+       The firmware is halted and no further API calls are serviced until the
+       firmware is uploaded again.
+
+-------------------------------------------------------------------------------
+
+Name   CX2341X_ENC_GET_VERSION
+Enum   196/0xC4
+Description
+       Returns the version of the encoder firmware.
+Result[0]
+       Version bitmask:
+           Bits  0:15 build
+           Bits 16:23 minor
+           Bits 24:31 major
+
+-------------------------------------------------------------------------------
+
+Name   CX2341X_ENC_SET_GOP_CLOSURE
+Enum   197/0xC5
+Description
+       Assigns the GOP open/close property.
+Param[0]
+       0=Open
+       1=Closed
+
+-------------------------------------------------------------------------------
+
+Name   CX2341X_ENC_GET_SEQ_END
+Enum   198/0xC6
+Description
+       Obtains the sequence end code of the encoder's buffer. When a capture
+       is started a number of interrupts are still generated, the last of
+       which will have Result[0] set to 1 and Result[1] will contain the size
+       of the buffer.
+Result[0]
+       State of the transfer (1 if last buffer)
+Result[1]
+       If Result[0] is 1, this contains the size of the last buffer, undefined
+       otherwise.
+
+-------------------------------------------------------------------------------
+
+Name   CX2341X_ENC_SET_PGM_INDEX_INFO
+Enum   199/0xC7
+Description
+       Sets the Program Index Information.
+Param[0]
+       Picture Mask:
+           0=No index capture
+           1=I frames
+           3=I,P frames
+           7=I,P,B frames
+Param[1]
+       Elements requested (up to 400)
+Result[0]
+       Offset in SDF memory of the table.
+Result[1]
+       Number of allocated elements up to a maximum of Param[1]
+
+-------------------------------------------------------------------------------
+
+Name   CX2341X_ENC_SET_VBI_CONFIG
+Enum   200/0xC8
+Description
+       Configure VBI settings
+Param[0]
+       Bitmap:
+           0    Mode '0' Sliced, '1' Raw
+           1:3  Insertion:
+                    '000' insert in extension & user data
+                    '001' insert in private packets
+                    '010' separate stream and user data
+                    '111' separate stream and private data
+           8:15 Stream ID (normally 0xBD)
+Param[1]
+       Frames per interrupt (max 8). Only valid in raw mode.
+Param[2]
+       Total raw VBI frames. Only valid in raw mode.
+Param[3]
+       Start codes
+Param[4]
+       Stop codes
+Param[5]
+       Lines per frame
+Param[6]
+       Byte per line
+Result[0]
+       Observed frames per interrupt in raw mode only. Rage 1 to Param[1]
+Result[1]
+       Observed number of frames in raw mode. Range 1 to Param[2]
+Result[2]
+       Memory offset to start or raw VBI data
+
+-------------------------------------------------------------------------------
+
+Name   CX2341X_ENC_SET_DMA_BLOCK_SIZE
+Enum   201/0xC9
+Description
+       Set DMA transfer block size
+Param[0]
+       DMA transfer block size in bytes or frames. When unit is bytes,
+       supported block sizes are 2^7, 2^8 and 2^9 bytes.
+Param[1]
+       Unit: 0=bytes, 1=frames
+
+-------------------------------------------------------------------------------
+
+Name   CX2341X_ENC_GET_PREV_DMA_INFO_MB_10
+Enum   202/0xCA
+Description
+       Returns information on the previous DMA transfer in conjunction with
+       bit 27 of the interrupt mask. Uses mailbox 10.
+Result[0]
+       Type of stream
+Result[1]
+       Address Offset
+Result[2]
+       Maximum size of transfer
+
+-------------------------------------------------------------------------------
+
+Name   CX2341X_ENC_GET_PREV_DMA_INFO_MB_9
+Enum   203/0xCB
+Description
+       Returns information on the previous DMA transfer in conjunction with
+       bit 27 of the interrupt mask. Uses mailbox 9.
+Result[0]
+       Status bits:
+           Bit 0 set indicates transfer complete
+           Bit 2 set indicates transfer error
+           Bit 4 set indicates linked list error
+Result[1]
+       DMA type
+Result[2]
+       Presentation Time Stamp bits 0..31
+Result[3]
+       Presentation Time Stamp bit 32
+
+-------------------------------------------------------------------------------
+
+Name   CX2341X_ENC_SCHED_DMA_TO_HOST
+Enum   204/0xCC
+Description
+       Setup DMA to host operation
+Param[0]
+       Memory address of link list
+Param[1]
+       Length of link list (wtf: what units ???)
+Param[2]
+       DMA type (0=MPEG)
+
+-------------------------------------------------------------------------------
+
+Name   CX2341X_ENC_INITIALIZE_INPUT
+Enum   205/0xCD
+Description
+       Initializes the video input
+
+-------------------------------------------------------------------------------
+
+Name   CX2341X_ENC_SET_FRAME_DROP_RATE
+Enum   208/0xD0
+Description
+       For each frame captured, skip specified number of frames.
+Param[0]
+       Number of frames to skip
+
+-------------------------------------------------------------------------------
+
+Name   CX2341X_ENC_PAUSE_ENCODER
+Enum   210/0xD2
+Description
+       During a pause condition, all frames are dropped instead of being encoded.
+Param[0]
+       0=Pause encoding
+       1=Continue encoding
+
+-------------------------------------------------------------------------------
+
+Name   CX2341X_ENC_REFRESH_INPUT
+Enum   211/0xD3
+Description
+       Refreshes the video input
+
+-------------------------------------------------------------------------------
+
+Name   CX2341X_ENC_SET_COPYRIGHT
+Enum   212/0xD4
+Description
+       Sets stream copyright property
+Param[0]
+       0=Stream is not copyrighted
+       1=Stream is copyrighted
+
+-------------------------------------------------------------------------------
+
+Name   CX2341X_ENC_SET_EVENT_NOTIFICATION
+Enum   213/0xD5
+Description
+       Setup firmware to notify the host about a particular event. Host must
+       unmask the interrupt bit.
+Param[0]
+       Event (0=refresh encoder input)
+Param[1]
+       Notification 0=disabled 1=enabled
+Param[2]
+       Interrupt bit
+Param[3]
+       Mailbox slot, -1 if no mailbox required.
+
+-------------------------------------------------------------------------------
+
+Name   CX2341X_ENC_SET_NUM_VSYNC_LINES
+Enum   214/0xD6
+Description
+       Depending on the analog video decoder used, this assigns the number
+       of lines for field 1 and 2.
+Param[0]
+       Field 1 number of lines:
+           0x00EF for SAA7114
+           0x00F0 for SAA7115
+           0x0105 for Micronas
+Param[1]
+       Field 2 number of lines:
+           0x00EF for SAA7114
+           0x00F0 for SAA7115
+           0x0106 for Micronas
+
+-------------------------------------------------------------------------------
+
+Name   CX2341X_ENC_SET_PLACEHOLDER
+Enum   215/0xD7
+Description
+       Provides a mechanism of inserting custom user data in the MPEG stream.
+Param[0]
+       0=extension & user data
+       1=private packet with stream ID 0xBD
+Param[1]
+       Rate at which to insert data, in units of frames (for private packet)
+       or GOPs (for ext. & user data)
+Param[2]
+       Number of data DWORDs (below) to insert
+Param[3]
+       Custom data 0
+Param[4]
+       Custom data 1
+Param[5]
+       Custom data 2
+Param[6]
+       Custom data 3
+Param[7]
+       Custom data 4
+Param[8]
+       Custom data 5
+Param[9]
+       Custom data 6
+Param[10]
+       Custom data 7
+Param[11]
+       Custom data 8
+
+-------------------------------------------------------------------------------
+
+Name   CX2341X_ENC_MUTE_VIDEO
+Enum   217/0xD9
+Description
+       Video muting
+Param[0]
+       Bit usage:
+        0      '0'=video not muted
+               '1'=video muted, creates frames with the YUV color defined below
+        1:7    Unused
+        8:15   V chrominance information
+       16:23   U chrominance information
+       24:31   Y luminance information
+
+-------------------------------------------------------------------------------
+
+Name   CX2341X_ENC_MUTE_AUDIO
+Enum   218/0xDA
+Description
+       Audio muting
+Param[0]
+       0=audio not muted
+       1=audio muted (produces silent mpeg audio stream)
+
+-------------------------------------------------------------------------------
+
+Name   CX2341X_ENC_UNKNOWN
+Enum   219/0xDB
+Description
+       Unknown API, it's used by Hauppauge though.
+Param[0]
+       0 This is the value Hauppauge uses, Unknown what it means.
+
+-------------------------------------------------------------------------------
+
+Name   CX2341X_ENC_MISC
+Enum   220/0xDC
+Description
+       Miscellaneous actions. Not known for 100% what it does. It's really a
+       sort of ioctl call. The first parameter is a command number, the second
+       the value.
+Param[0]
+       Command number:
+        1=set initial SCR value when starting encoding.
+        2=set quality mode (apparently some test setting).
+        3=setup advanced VIM protection handling (supposedly only for the cx23416
+          for raw YUV).
+          Actually it looks like this should be 0 for saa7114/5 based card and 1
+          for cx25840 based cards.
+        4=generate artificial PTS timestamps
+        5=USB flush mode
+        6=something to do with the quantization matrix
+        7=set navigation pack insertion for DVD
+        8=enable scene change detection (seems to be a failure)
+        9=set history parameters of the video input module
+       10=set input field order of VIM
+       11=set quantization matrix
+       12=reset audio interface
+       13=set audio volume delay
+       14=set audio delay
+
+Param[1]
+       Command value.
diff --git a/Documentation/video4linux/cx2341x/fw-memory.txt b/Documentation/video4linux/cx2341x/fw-memory.txt
new file mode 100644 (file)
index 0000000..ef0aad3
--- /dev/null
@@ -0,0 +1,141 @@
+This document describes the cx2341x memory map and documents some of the register
+space.
+
+Warning! This information was figured out from searching through the memory and
+registers, this information may not be correct and is certainly not complete, and
+was not derived from anything more than searching through the memory space with
+commands like:
+
+       ivtvctl -O min=0x02000000,max=0x020000ff
+
+So take this as is, I'm always searching for more stuff, it's a large
+register space :-).
+
+Memory Map
+==========
+
+The cx2341x exposes its entire 64M memory space to the PCI host via the PCI BAR0
+(Base Address Register 0). The addresses here are offsets relative to the
+address held in BAR0.
+
+0x00000000-0x00ffffff Encoder memory space
+0x00000000-0x0003ffff Encode.rom
+      ???-???         MPEG buffer(s)
+      ???-???         Raw video capture buffer(s)
+      ???-???         Raw audio capture buffer(s)
+      ???-???         Display buffers (6 or 9)
+
+0x01000000-0x01ffffff Decoder memory space
+0x01000000-0x0103ffff Decode.rom
+      ???-???         MPEG buffers(s)
+0x0114b000-0x0115afff Audio.rom (deprecated?)
+
+0x02000000-0x0200ffff Register Space
+
+Registers
+=========
+
+The registers occupy the 64k space starting at the 0x02000000 offset from BAR0.
+All of these registers are 32 bits wide.
+
+DMA Registers 0x000-0xff:
+
+ 0x00 - Control:
+       0=reset/cancel, 1=read, 2=write, 4=stop
+ 0x04 - DMA status:
+       1=read busy, 2=write busy, 4=read error, 8=write error, 16=link list error
+ 0x08 - pci DMA pointer for read link list
+ 0x0c - pci DMA pointer for write link list
+ 0x10 - read/write DMA enable:
+       1=read enable, 2=write enable
+ 0x14 - always 0xffffffff, if set any lower instability occurs, 0x00 crashes
+ 0x18 - ??
+ 0x1c - always 0x20 or 32, smaller values slow down DMA transactions
+ 0x20 - always value of 0x780a010a
+ 0x24-0x3c - usually just random values???
+ 0x40 - Interrupt status
+ 0x44 - Write a bit here and shows up in Interrupt status 0x40
+ 0x48 - Interrupt Mask
+ 0x4C - always value of 0xfffdffff,
+       if changed to 0xffffffff DMA write interrupts break.
+ 0x50 - always 0xffffffff
+ 0x54 - always 0xffffffff (0x4c, 0x50, 0x54 seem like interrupt masks, are
+       3 processors on chip, Java ones, VPU, SPU, APU, maybe these are the
+       interrupt masks???).
+ 0x60-0x7C - random values
+ 0x80 - first write linked list reg, for Encoder Memory addr
+ 0x84 - first write linked list reg, for pci memory addr
+ 0x88 - first write linked list reg, for length of buffer in memory addr
+       (|0x80000000 or this for last link)
+ 0x8c-0xcc - rest of write linked list reg, 8 sets of 3 total, DMA goes here
+       from linked list addr in reg 0x0c, firmware must push through or
+       something.
+ 0xe0 - first (and only) read linked list reg, for pci memory addr
+ 0xe4 - first (and only) read linked list reg, for Decoder memory addr
+ 0xe8 - first (and only) read linked list reg, for length of buffer
+ 0xec-0xff - Nothing seems to be in these registers, 0xec-f4 are 0x00000000.
+
+Memory locations for Encoder Buffers 0x700-0x7ff:
+
+These registers show offsets of memory locations pertaining to each
+buffer area used for encoding, have to shift them by <<1 first.
+
+0x07F8: Encoder SDRAM refresh
+0x07FC: Encoder SDRAM pre-charge
+
+Memory locations for Decoder Buffers 0x800-0x8ff:
+
+These registers show offsets of memory locations pertaining to each
+buffer area used for decoding, have to shift them by <<1 first.
+
+0x08F8: Decoder SDRAM refresh
+0x08FC: Decoder SDRAM pre-charge
+
+Other memory locations:
+
+0x2800: Video Display Module control
+0x2D00: AO (audio output?) control
+0x2D24: Bytes Flushed
+0x7000: LSB I2C write clock bit (inverted)
+0x7004: LSB I2C write data bit (inverted)
+0x7008: LSB I2C read clock bit
+0x700c: LSB I2C read data bit
+0x9008: GPIO get input state
+0x900c: GPIO set output state
+0x9020: GPIO direction (Bit7 (GPIO 0..7) - 0:input, 1:output)
+0x9050: SPU control
+0x9054: Reset HW blocks
+0x9058: VPU control
+0xA018: Bit6: interrupt pending?
+0xA064: APU command
+
+
+Interrupt Status Register
+=========================
+
+The definition of the bits in the interrupt status register 0x0040, and the
+interrupt mask 0x0048. If a bit is cleared in the mask, then we want our ISR to
+execute.
+
+Bit
+31 Encoder Start Capture
+30 Encoder EOS
+29 Encoder VBI capture
+28 Encoder Video Input Module reset event
+27 Encoder DMA complete
+26
+25 Decoder copy protect detection event
+24 Decoder audio mode change detection event
+23
+22 Decoder data request
+21 Decoder I-Frame? done
+20 Decoder DMA complete
+19 Decoder VBI re-insertion
+18 Decoder DMA err (linked-list bad)
+
+Missing
+Encoder API call completed
+Decoder API call completed
+Encoder API post(?)
+Decoder API post(?)
+Decoder VTRACE event
diff --git a/Documentation/video4linux/cx2341x/fw-osd-api.txt b/Documentation/video4linux/cx2341x/fw-osd-api.txt
new file mode 100644 (file)
index 0000000..da98ae3
--- /dev/null
@@ -0,0 +1,342 @@
+OSD firmware API description
+============================
+
+Note: this API is part of the decoder firmware, so it's cx23415 only.
+
+-------------------------------------------------------------------------------
+
+Name   CX2341X_OSD_GET_FRAMEBUFFER
+Enum   65/0x41
+Description
+       Return base and length of contiguous OSD memory.
+Result[0]
+       OSD base address
+Result[1]
+       OSD length
+
+-------------------------------------------------------------------------------
+
+Name   CX2341X_OSD_GET_PIXEL_FORMAT
+Enum   66/0x42
+Description
+       Query OSD format
+Result[0]
+       0=8bit index, 4=AlphaRGB 8:8:8:8
+
+-------------------------------------------------------------------------------
+
+Name   CX2341X_OSD_SET_PIXEL_FORMAT
+Enum   67/0x43
+Description
+       Assign pixel format
+Param[0]
+       0=8bit index, 4=AlphaRGB 8:8:8:8
+
+-------------------------------------------------------------------------------
+
+Name   CX2341X_OSD_GET_STATE
+Enum   68/0x44
+Description
+       Query OSD state
+Result[0]
+       Bit  0   0=off, 1=on
+       Bits 1:2 alpha control
+       Bits 3:5 pixel format
+
+-------------------------------------------------------------------------------
+
+Name   CX2341X_OSD_SET_STATE
+Enum   69/0x45
+Description
+       OSD switch
+Param[0]
+       0=off, 1=on
+
+-------------------------------------------------------------------------------
+
+Name   CX2341X_OSD_GET_OSD_COORDS
+Enum   70/0x46
+Description
+       Retrieve coordinates of OSD area blended with video
+Result[0]
+       OSD buffer address
+Result[1]
+       Stride in pixels
+Result[2]
+       Lines in OSD buffer
+Result[3]
+       Horizontal offset in buffer
+Result[4]
+       Vertical offset in buffer
+
+-------------------------------------------------------------------------------
+
+Name   CX2341X_OSD_SET_OSD_COORDS
+Enum   71/0x47
+Description
+       Assign the coordinates of the OSD area to blend with video
+Param[0]
+       buffer address
+Param[1]
+       buffer stride in pixels
+Param[2]
+       lines in buffer
+Param[3]
+       horizontal offset
+Param[4]
+       vertical offset
+
+-------------------------------------------------------------------------------
+
+Name   CX2341X_OSD_GET_SCREEN_COORDS
+Enum   72/0x48
+Description
+       Retrieve OSD screen area coordinates
+Result[0]
+       top left horizontal offset
+Result[1]
+       top left vertical offset
+Result[2]
+       bottom right hotizontal offset
+Result[3]
+       bottom right vertical offset
+
+-------------------------------------------------------------------------------
+
+Name   CX2341X_OSD_SET_SCREEN_COORDS
+Enum   73/0x49
+Description
+       Assign the coordinates of the screen area to blend with video
+Param[0]
+       top left horizontal offset
+Param[1]
+       top left vertical offset
+Param[2]
+       bottom left horizontal offset
+Param[3]
+       bottom left vertical offset
+
+-------------------------------------------------------------------------------
+
+Name   CX2341X_OSD_GET_GLOBAL_ALPHA
+Enum   74/0x4A
+Description
+       Retrieve OSD global alpha
+Result[0]
+       global alpha: 0=off, 1=on
+Result[1]
+       bits 0:7 global alpha
+
+-------------------------------------------------------------------------------
+
+Name   CX2341X_OSD_SET_GLOBAL_ALPHA
+Enum   75/0x4B
+Description
+       Update global alpha
+Param[0]
+       global alpha: 0=off, 1=on
+Param[1]
+       global alpha (8 bits)
+Param[2]
+       local alpha: 0=on, 1=off
+
+-------------------------------------------------------------------------------
+
+Name   CX2341X_OSD_SET_BLEND_COORDS
+Enum   78/0x4C
+Description
+       Move start of blending area within display buffer
+Param[0]
+       horizontal offset in buffer
+Param[1]
+       vertical offset in buffer
+
+-------------------------------------------------------------------------------
+
+Name   CX2341X_OSD_GET_FLICKER_STATE
+Enum   79/0x4F
+Description
+       Retrieve flicker reduction module state
+Result[0]
+       flicker state: 0=off, 1=on
+
+-------------------------------------------------------------------------------
+
+Name   CX2341X_OSD_SET_FLICKER_STATE
+Enum   80/0x50
+Description
+       Set flicker reduction module state
+Param[0]
+       State: 0=off, 1=on
+
+-------------------------------------------------------------------------------
+
+Name   CX2341X_OSD_BLT_COPY
+Enum   82/0x52
+Description
+       BLT copy
+Param[0]
+'0000'  zero
+'0001' ~destination AND ~source
+'0010' ~destination AND  source
+'0011' ~destination
+'0100'  destination AND ~source
+'0101'                  ~source
+'0110'  destination XOR  source
+'0111' ~destination OR  ~source
+'1000' ~destination AND ~source
+'1001'  destination XNOR source
+'1010'                   source
+'1011' ~destination OR   source
+'1100'  destination
+'1101'  destination OR  ~source
+'1110'  destination OR   source
+'1111'  one
+
+Param[1]
+       Resulting alpha blending
+           '01' source_alpha
+           '10' destination_alpha
+           '11' source_alpha*destination_alpha+1
+                (zero if both source and destination alpha are zero)
+Param[2]
+       '00' output_pixel = source_pixel
+
+       '01' if source_alpha=0:
+                output_pixel = destination_pixel
+            if 256 > source_alpha > 1:
+                output_pixel = ((source_alpha + 1)*source_pixel +
+                                (255 - source_alpha)*destination_pixel)/256
+
+       '10' if destination_alpha=0:
+                output_pixel = source_pixel
+             if 255 > destination_alpha > 0:
+                output_pixel = ((255 - destination_alpha)*source_pixel +
+                                (destination_alpha + 1)*destination_pixel)/256
+
+       '11' if source_alpha=0:
+                source_temp = 0
+            if source_alpha=255:
+                source_temp = source_pixel*256
+            if 255 > source_alpha > 0:
+                source_temp = source_pixel*(source_alpha + 1)
+            if destination_alpha=0:
+                destination_temp = 0
+            if destination_alpha=255:
+                destination_temp = destination_pixel*256
+            if 255 > destination_alpha > 0:
+                destination_temp = destination_pixel*(destination_alpha + 1)
+            output_pixel = (source_temp + destination_temp)/256
+Param[3]
+       width
+Param[4]
+       height
+Param[5]
+       destination pixel mask
+Param[6]
+       destination rectangle start address
+Param[7]
+       destination stride in dwords
+Param[8]
+       source stride in dwords
+Param[9]
+       source rectangle start address
+
+-------------------------------------------------------------------------------
+
+Name   CX2341X_OSD_BLT_FILL
+Enum   83/0x53
+Description
+       BLT fill color
+Param[0]
+       Same as Param[0] on API 0x52
+Param[1]
+       Same as Param[1] on API 0x52
+Param[2]
+       Same as Param[2] on API 0x52
+Param[3]
+       width
+Param[4]
+       height
+Param[5]
+       destination pixel mask
+Param[6]
+       destination rectangle start address
+Param[7]
+       destination stride in dwords
+Param[8]
+       color fill value
+
+-------------------------------------------------------------------------------
+
+Name   CX2341X_OSD_BLT_TEXT
+Enum   84/0x54
+Description
+       BLT for 8 bit alpha text source
+Param[0]
+       Same as Param[0] on API 0x52
+Param[1]
+       Same as Param[1] on API 0x52
+Param[2]
+       Same as Param[2] on API 0x52
+Param[3]
+       width
+Param[4]
+       height
+Param[5]
+       destination pixel mask
+Param[6]
+       destination rectangle start address
+Param[7]
+       destination stride in dwords
+Param[8]
+       source stride in dwords
+Param[9]
+       source rectangle start address
+Param[10]
+       color fill value
+
+-------------------------------------------------------------------------------
+
+Name   CX2341X_OSD_SET_FRAMEBUFFER_WINDOW
+Enum   86/0x56
+Description
+       Positions the main output window on the screen. The coordinates must be
+       such that the entire window fits on the screen.
+Param[0]
+       window width
+Param[1]
+       window height
+Param[2]
+       top left window corner horizontal offset
+Param[3]
+       top left window corner vertical offset
+
+-------------------------------------------------------------------------------
+
+Name   CX2341X_OSD_SET_CHROMA_KEY
+Enum   96/0x60
+Description
+       Chroma key switch and color
+Param[0]
+       state: 0=off, 1=on
+Param[1]
+       color
+
+-------------------------------------------------------------------------------
+
+Name   CX2341X_OSD_GET_ALPHA_CONTENT_INDEX
+Enum   97/0x61
+Description
+       Retrieve alpha content index
+Result[0]
+       alpha content index, Range 0:15
+
+-------------------------------------------------------------------------------
+
+Name   CX2341X_OSD_SET_ALPHA_CONTENT_INDEX
+Enum   98/0x62
+Description
+       Assign alpha content index
+Param[0]
+       alpha content index, range 0:15
diff --git a/Documentation/video4linux/cx2341x/fw-upload.txt b/Documentation/video4linux/cx2341x/fw-upload.txt
new file mode 100644 (file)
index 0000000..60c502c
--- /dev/null
@@ -0,0 +1,49 @@
+This document describes how to upload the cx2341x firmware to the card.
+
+How to find
+===========
+
+See the web pages of the various projects that uses this chip for information
+on how to obtain the firmware.
+
+The firmware stored in a Windows driver can be detected as follows:
+
+- Each firmware image is 256k bytes.
+- The 1st 32-bit word of the Encoder image is 0x0000da7
+- The 1st 32-bit word of the Decoder image is 0x00003a7
+- The 2nd 32-bit word of both images is 0xaa55bb66
+
+How to load
+===========
+
+- Issue the FWapi command to stop the encoder if it is running. Wait for the
+  command to complete.
+- Issue the FWapi command to stop the decoder if it is running. Wait for the
+  command to complete.
+- Issue the I2C command to the digitizer to stop emitting VSYNC events.
+- Issue the FWapi command to halt the encoder's firmware.
+- Sleep for 10ms.
+- Issue the FWapi command to halt the decoder's firmware.
+- Sleep for 10ms.
+- Write 0x00000000 to register 0x2800 to stop the Video Display Module.
+- Write 0x00000005 to register 0x2D00 to stop the AO (audio output?).
+- Write 0x00000000 to register 0xA064 to ping? the APU.
+- Write 0xFFFFFFFE to register 0x9058 to stop the VPU.
+- Write 0xFFFFFFFF to register 0x9054 to reset the HW blocks.
+- Write 0x00000001 to register 0x9050 to stop the SPU.
+- Sleep for 10ms.
+- Write 0x0000001A to register 0x07FC to init the Encoder SDRAM's pre-charge.
+- Write 0x80000640 to register 0x07F8 to init the Encoder SDRAM's refresh to 1us.
+- Write 0x0000001A to register 0x08FC to init the Decoder SDRAM's pre-charge.
+- Write 0x80000640 to register 0x08F8 to init the Decoder SDRAM's refresh to 1us.
+- Sleep for 512ms. (600ms is recommended)
+- Transfer the encoder's firmware image to offset 0 in Encoder memory space.
+- Transfer the decoder's firmware image to offset 0 in Decoder memory space.
+- Use a read-modify-write operation to Clear bit 0 of register 0x9050 to
+  re-enable the SPU.
+- Sleep for 1 second.
+- Use a read-modify-write operation to Clear bits 3 and 0 of register 0x9058
+  to re-enable the VPU.
+- Sleep for 1 second.
+- Issue status API commands to both firmware images to verify.
+
diff --git a/Documentation/video4linux/cx88/hauppauge-wintv-cx88-ir.txt b/Documentation/video4linux/cx88/hauppauge-wintv-cx88-ir.txt
new file mode 100644 (file)
index 0000000..93fec32
--- /dev/null
@@ -0,0 +1,54 @@
+The controls for the mux are GPIO [0,1] for source, and GPIO 2 for muting.
+
+GPIO0  GPIO1
+  0        0    TV Audio
+  1        0    FM radio
+  0        1    Line-In
+  1        1    Mono tuner bypass or CD passthru (tuner specific)
+
+GPIO 16(i believe) is tied to the IR port (if present).
+
+------------------------------------------------------------------------------------
+
+>From the data sheet:
+ Register 24'h20004  PCI Interrupt Status
+  bit [18]  IR_SMP_INT Set when 32 input samples have been collected over
+  gpio[16] pin into GP_SAMPLE register.
+
+What's missing from the data sheet:
+
+Setup 4KHz sampling rate (roughly 2x oversampled; good enough for our RC5
+compat remote)
+set register 0x35C050 to  0xa80a80
+
+enable sampling
+set register 0x35C054 to 0x5
+
+Of course, enable the IRQ bit 18 in the interrupt mask register .(and
+provide for a handler)
+
+GP_SAMPLE register is at 0x35C058
+
+Bits are then right shifted into the GP_SAMPLE register at the specified
+rate; you get an interrupt when a full DWORD is recieved.
+You need to recover the actual RC5 bits out of the (oversampled) IR sensor
+bits. (Hint: look for the 0/1and 1/0 crossings of the RC5 bi-phase data)  An
+actual raw RC5 code will span 2-3 DWORDS, depending on the actual alignment.
+
+I'm pretty sure when no IR signal is present the receiver is always in a
+marking state(1); but stray light, etc can cause intermittent noise values
+as well.  Remember, this is a free running sample of the IR receiver state
+over time, so don't assume any sample starts at any particular place.
+
+http://www.atmel.com/dyn/resources/prod_documents/doc2817.pdf
+This data sheet (google search) seems to have a lovely description of the
+RC5 basics
+
+http://users.pandora.be/nenya/electronics/rc5/  and more data
+
+http://www.ee.washington.edu/circuit_archive/text/ir_decode.txt
+and even a reference to how to decode a bi-phase data stream.
+
+http://www.xs4all.nl/~sbp/knowledge/ir/rc5.htm
+still more info
+
index 2934028..cd584f2 100644 (file)
@@ -1,9 +1,9 @@
 
-                       ET61X[12]51 PC Camera Controllers
-                                Driver for Linux
-                       =================================
+                      ET61X[12]51 PC Camera Controllers
+                               Driver for Linux
+                      =================================
 
-                               - Documentation -
+                              - Documentation -
 
 
 Index
@@ -156,46 +156,46 @@ Name:           video_nr
 Type:           short array (min = 0, max = 64)
 Syntax:         <-1|n[,...]>
 Description:    Specify V4L2 minor mode number:
-                -1 = use next available
-                 n = use minor number n
-                You can specify up to 64 cameras this way.
-                For example:
-                video_nr=-1,2,-1 would assign minor number 2 to the second
-                registered camera and use auto for the first one and for every
-                other camera.
+               -1 = use next available
+                n = use minor number n
+               You can specify up to 64 cameras this way.
+               For example:
+               video_nr=-1,2,-1 would assign minor number 2 to the second
+               registered camera and use auto for the first one and for every
+               other camera.
 Default:        -1
 -------------------------------------------------------------------------------
 Name:           force_munmap
 Type:           bool array (min = 0, max = 64)
 Syntax:         <0|1[,...]>
 Description:    Force the application to unmap previously mapped buffer memory
-                before calling any VIDIOC_S_CROP or VIDIOC_S_FMT ioctl's. Not
-                all the applications support this feature. This parameter is
-                specific for each detected camera.
-                0 = do not force memory unmapping
-                1 = force memory unmapping (save memory)
+               before calling any VIDIOC_S_CROP or VIDIOC_S_FMT ioctl's. Not
+               all the applications support this feature. This parameter is
+               specific for each detected camera.
+               0 = do not force memory unmapping
+               1 = force memory unmapping (save memory)
 Default:        0
 -------------------------------------------------------------------------------
 Name:           frame_timeout
 Type:           uint array (min = 0, max = 64)
 Syntax:         <n[,...]>
 Description:    Timeout for a video frame in seconds. This parameter is
-                specific for each detected camera. This parameter can be
-                changed at runtime thanks to the /sys filesystem interface.
+               specific for each detected camera. This parameter can be
+               changed at runtime thanks to the /sys filesystem interface.
 Default:        2
 -------------------------------------------------------------------------------
 Name:           debug
 Type:           ushort
 Syntax:         <n>
 Description:    Debugging information level, from 0 to 3:
-                0 = none (use carefully)
-                1 = critical errors
-                2 = significant informations
-                3 = more verbose messages
-                Level 3 is useful for testing only, when only one device
-                is used at the same time. It also shows some more informations
-                about the hardware being detected. This module parameter can be
-                changed at runtime thanks to the /sys filesystem interface.
+               0 = none (use carefully)
+               1 = critical errors
+               2 = significant informations
+               3 = more verbose messages
+               Level 3 is useful for testing only, when only one device
+               is used at the same time. It also shows some more informations
+               about the hardware being detected. This module parameter can be
+               changed at runtime thanks to the /sys filesystem interface.
 Default:        2
 -------------------------------------------------------------------------------
 
index 4a40a2e..397a94e 100644 (file)
@@ -21,7 +21,7 @@ Internal interface: Video For Linux (V4L)
 Supported controls:
 - by V4L: Contrast,  Brightness, Color, Hue
 - by driver options: frame rate, lighting conditions, video format,
-                     default picture settings, sharpness.
+                    default picture settings, sharpness.
 
 SUPPORTED CAMERAS:
 
@@ -191,66 +191,66 @@ init_model2_sat Integer         0..255 [0x34]   init_model2_sat=65
 init_model2_yb  Integer         0..255 [0xa0]   init_model2_yb=200
 
 debug           You don't need this option unless you are a developer.
-                If you are a developer then you will see in the code
-                what values do what. 0=off.
+               If you are a developer then you will see in the code
+               what values do what. 0=off.
 
 flags           This is a bit mask, and you can combine any number of
-                bits to produce what you want. Usually you don't want
-                any of extra features this option provides:
-
-                FLAGS_RETRY_VIDIOCSYNC  1  This bit allows to retry failed
-                                           VIDIOCSYNC ioctls without failing.
-                                           Will work with xawtv, will not
-                                           with xrealproducer. Default is
-                                           not set.
-                FLAGS_MONOCHROME        2  Activates monochrome (b/w) mode.
-                FLAGS_DISPLAY_HINTS     4  Shows colored pixels which have
-                                           magic meaning to developers.
-                FLAGS_OVERLAY_STATS     8  Shows tiny numbers on screen,
-                                           useful only for debugging.
-                FLAGS_FORCE_TESTPATTERN 16 Shows blue screen with numbers.
-                FLAGS_SEPARATE_FRAMES   32 Shows each frame separately, as
-                                           it was received from the camera.
-                                           Default (not set) is to mix the
-                                           preceding frame in to compensate
-                                           for occasional loss of Isoc data
-                                           on high frame rates.
-                FLAGS_CLEAN_FRAMES      64 Forces "cleanup" of each frame
-                                           prior to use; relevant only if
-                                           FLAGS_SEPARATE_FRAMES is set.
-                                           Default is not to clean frames,
-                                           this is a little faster but may
-                                           produce flicker if frame rate is
-                                           too high and Isoc data gets lost.
-                FLAGS_NO_DECODING      128 This flag turns the video stream
-                                           decoder off, and dumps the raw
-                                           Isoc data from the camera into
-                                           the reading process. Useful to
-                                           developers, but not to users.
+               bits to produce what you want. Usually you don't want
+               any of extra features this option provides:
+
+               FLAGS_RETRY_VIDIOCSYNC  1  This bit allows to retry failed
+                                          VIDIOCSYNC ioctls without failing.
+                                          Will work with xawtv, will not
+                                          with xrealproducer. Default is
+                                          not set.
+               FLAGS_MONOCHROME        2  Activates monochrome (b/w) mode.
+               FLAGS_DISPLAY_HINTS     4  Shows colored pixels which have
+                                          magic meaning to developers.
+               FLAGS_OVERLAY_STATS     8  Shows tiny numbers on screen,
+                                          useful only for debugging.
+               FLAGS_FORCE_TESTPATTERN 16 Shows blue screen with numbers.
+               FLAGS_SEPARATE_FRAMES   32 Shows each frame separately, as
+                                          it was received from the camera.
+                                          Default (not set) is to mix the
+                                          preceding frame in to compensate
+                                          for occasional loss of Isoc data
+                                          on high frame rates.
+               FLAGS_CLEAN_FRAMES      64 Forces "cleanup" of each frame
+                                          prior to use; relevant only if
+                                          FLAGS_SEPARATE_FRAMES is set.
+                                          Default is not to clean frames,
+                                          this is a little faster but may
+                                          produce flicker if frame rate is
+                                          too high and Isoc data gets lost.
+               FLAGS_NO_DECODING      128 This flag turns the video stream
+                                          decoder off, and dumps the raw
+                                          Isoc data from the camera into
+                                          the reading process. Useful to
+                                          developers, but not to users.
 
 framerate       This setting controls frame rate of the camera. This is
-                an approximate setting (in terms of "worst" ... "best")
-                because camera changes frame rate depending on amount
-                of light available. Setting 0 is slowest, 6 is fastest.
-                Beware - fast settings are very demanding and may not
-                work well with all video sizes. Be conservative.
+               an approximate setting (in terms of "worst" ... "best")
+               because camera changes frame rate depending on amount
+               of light available. Setting 0 is slowest, 6 is fastest.
+               Beware - fast settings are very demanding and may not
+               work well with all video sizes. Be conservative.
 
 hue_correction  This highly optional setting allows to adjust the
-                hue of the image in a way slightly different from
-                what usual "hue" control does. Both controls affect
-                YUV colorspace: regular "hue" control adjusts only
-                U component, and this "hue_correction" option similarly
-                adjusts only V component. However usually it is enough
-                to tweak only U or V to compensate for colored light or
-                color temperature; this option simply allows more
-                complicated correction when and if it is necessary.
+               hue of the image in a way slightly different from
+               what usual "hue" control does. Both controls affect
+               YUV colorspace: regular "hue" control adjusts only
+               U component, and this "hue_correction" option similarly
+               adjusts only V component. However usually it is enough
+               to tweak only U or V to compensate for colored light or
+               color temperature; this option simply allows more
+               complicated correction when and if it is necessary.
 
 init_brightness These settings specify _initial_ values which will be
 init_contrast   used to set up the camera. If your V4L application has
 init_color      its own controls to adjust the picture then these
 init_hue        controls will be used too. These options allow you to
-                preconfigure the camera when it gets connected, before
-                any V4L application connects to it. Good for webcams.
+               preconfigure the camera when it gets connected, before
+               any V4L application connects to it. Good for webcams.
 
 init_model2_rg  These initial settings alter color balance of the
 init_model2_rg2 camera on hardware level. All four settings may be used
@@ -258,47 +258,47 @@ init_model2_sat to tune the camera to specific lighting conditions. These
 init_model2_yb  settings only apply to Model 2 cameras.
 
 lighting        This option selects one of three hardware-defined
-                photosensitivity settings of the camera. 0=bright light,
-                1=Medium (default), 2=Low light. This setting affects
-                frame rate: the dimmer the lighting the lower the frame
-                rate (because longer exposition time is needed). The
-                Model 2 cameras allow values more than 2 for this option,
-                thus enabling extremely high sensitivity at cost of frame
-                rate, color saturation and imaging sensor noise.
+               photosensitivity settings of the camera. 0=bright light,
+               1=Medium (default), 2=Low light. This setting affects
+               frame rate: the dimmer the lighting the lower the frame
+               rate (because longer exposition time is needed). The
+               Model 2 cameras allow values more than 2 for this option,
+               thus enabling extremely high sensitivity at cost of frame
+               rate, color saturation and imaging sensor noise.
 
 sharpness       This option controls smoothing (noise reduction)
-                made by camera. Setting 0 is most smooth, setting 6
-                is most sharp. Be aware that CMOS sensor used in the
-                camera is pretty noisy, so if you choose 6 you will
-                be greeted with "snowy" image. Default is 4. Model 2
-                cameras do not support this feature.
+               made by camera. Setting 0 is most smooth, setting 6
+               is most sharp. Be aware that CMOS sensor used in the
+               camera is pretty noisy, so if you choose 6 you will
+               be greeted with "snowy" image. Default is 4. Model 2
+               cameras do not support this feature.
 
 size            This setting chooses one of several image sizes that are
-                supported by this driver. Cameras may support more, but
-                it's difficult to reverse-engineer all formats.
-                Following video sizes are supported:
-
-                size=0     128x96  (Model 1 only)
-                size=1     160x120
-                size=2     176x144
-                size=3     320x240 (Model 2 only)
-                size=4     352x240 (Model 2 only)
-                size=5     352x288
-                size=6     640x480 (Model 3 only)
-
-                The 352x288 is the native size of the Model 1 sensor
-                array, so it's the best resolution the camera can
-                yield. The best resolution of Model 2 is 176x144, and
-                larger images are produced by stretching the bitmap.
-                Model 3 has sensor with 640x480 grid, and it works too,
-                but the frame rate will be exceptionally low (1-2 FPS);
-                it may be still OK for some applications, like security.
-                Choose the image size you need. The smaller image can
-                support faster frame rate. Default is 352x288.
+               supported by this driver. Cameras may support more, but
+               it's difficult to reverse-engineer all formats.
+               Following video sizes are supported:
+
+               size=0     128x96  (Model 1 only)
+               size=1     160x120
+               size=2     176x144
+               size=3     320x240 (Model 2 only)
+               size=4     352x240 (Model 2 only)
+               size=5     352x288
+               size=6     640x480 (Model 3 only)
+
+               The 352x288 is the native size of the Model 1 sensor
+               array, so it's the best resolution the camera can
+               yield. The best resolution of Model 2 is 176x144, and
+               larger images are produced by stretching the bitmap.
+               Model 3 has sensor with 640x480 grid, and it works too,
+               but the frame rate will be exceptionally low (1-2 FPS);
+               it may be still OK for some applications, like security.
+               Choose the image size you need. The smaller image can
+               support faster frame rate. Default is 352x288.
 
 For more information and the Troubleshooting FAQ visit this URL:
 
-                http://www.linux-usb.org/ibmcam/
+               http://www.linux-usb.org/ibmcam/
 
 WHAT NEEDS TO BE DONE:
 
index 142741e..79af610 100644 (file)
@@ -81,7 +81,7 @@ MODULE PARAMETERS:
   TYPE: integer (Boolean)
   DEFAULT: 1
   DESC: Brightness is normally under automatic control and can't be set
-        manually by the video app. Set to 0 for manual control.
+       manually by the video app. Set to 0 for manual control.
 
   NAME: autogain
   TYPE: integer (Boolean)
@@ -97,13 +97,13 @@ MODULE PARAMETERS:
   TYPE: integer (0-6)
   DEFAULT: 3
   DESC: Sets the threshold for printing debug messages. The higher the value,
-        the more is printed. The levels are cumulative, and are as follows:
-          0=no debug messages
-          1=init/detection/unload and other significant messages
-          2=some warning messages
-          3=config/control function calls
-          4=most function calls and data parsing messages
-          5=highly repetitive mesgs
+       the more is printed. The levels are cumulative, and are as follows:
+         0=no debug messages
+         1=init/detection/unload and other significant messages
+         2=some warning messages
+         3=config/control function calls
+         4=most function calls and data parsing messages
+         5=highly repetitive mesgs
 
   NAME: snapshot
   TYPE: integer (Boolean)
@@ -116,24 +116,24 @@ MODULE PARAMETERS:
   TYPE: integer (1-4 for OV511, 1-31 for OV511+)
   DEFAULT: 1
   DESC: Number of cameras allowed to stream simultaneously on a single bus.
-        Values higher than 1 reduce the data rate of each camera, allowing two
-        or more to be used at once. If you have a complicated setup involving
-        both OV511 and OV511+ cameras, trial-and-error may be necessary for
-        finding the optimum setting.
+       Values higher than 1 reduce the data rate of each camera, allowing two
+       or more to be used at once. If you have a complicated setup involving
+       both OV511 and OV511+ cameras, trial-and-error may be necessary for
+       finding the optimum setting.
 
   NAME: compress
   TYPE: integer (Boolean)
   DEFAULT: 0
   DESC: Set this to 1 to turn on the camera's compression engine. This can
-        potentially increase the frame rate at the expense of quality, if you
-        have a fast CPU. You must load the proper compression module for your
-        camera before starting your application (ov511_decomp or ov518_decomp).
+       potentially increase the frame rate at the expense of quality, if you
+       have a fast CPU. You must load the proper compression module for your
+       camera before starting your application (ov511_decomp or ov518_decomp).
 
   NAME: testpat
   TYPE: integer (Boolean)
   DEFAULT: 0
   DESC: This configures the camera's sensor to transmit a colored test-pattern
-        instead of an image. This does not work correctly yet.
+       instead of an image. This does not work correctly yet.
 
   NAME: dumppix
   TYPE: integer (0-2)
index 142920b..1d20895 100644 (file)
@@ -1,9 +1,9 @@
 
-                         SN9C10x PC Camera Controllers
-                                Driver for Linux
-                         =============================
+                        SN9C10x PC Camera Controllers
+                               Driver for Linux
+                        =============================
 
-                               - Documentation -
+                              - Documentation -
 
 
 Index
@@ -176,46 +176,46 @@ Name:           video_nr
 Type:           short array (min = 0, max = 64)
 Syntax:         <-1|n[,...]>
 Description:    Specify V4L2 minor mode number:
-                -1 = use next available
-                 n = use minor number n
-                You can specify up to 64 cameras this way.
-                For example:
-                video_nr=-1,2,-1 would assign minor number 2 to the second
-                recognized camera and use auto for the first one and for every
-                other camera.
+               -1 = use next available
+                n = use minor number n
+               You can specify up to 64 cameras this way.
+               For example:
+               video_nr=-1,2,-1 would assign minor number 2 to the second
+               recognized camera and use auto for the first one and for every
+               other camera.
 Default:        -1
 -------------------------------------------------------------------------------
 Name:           force_munmap
 Type:           bool array (min = 0, max = 64)
 Syntax:         <0|1[,...]>
 Description:    Force the application to unmap previously mapped buffer memory
-                before calling any VIDIOC_S_CROP or VIDIOC_S_FMT ioctl's. Not
-                all the applications support this feature. This parameter is
-                specific for each detected camera.
-                0 = do not force memory unmapping
-                1 = force memory unmapping (save memory)
+               before calling any VIDIOC_S_CROP or VIDIOC_S_FMT ioctl's. Not
+               all the applications support this feature. This parameter is
+               specific for each detected camera.
+               0 = do not force memory unmapping
+               1 = force memory unmapping (save memory)
 Default:        0
 -------------------------------------------------------------------------------
 Name:           frame_timeout
 Type:           uint array (min = 0, max = 64)
 Syntax:         <n[,...]>
 Description:    Timeout for a video frame in seconds. This parameter is
-                specific for each detected camera. This parameter can be
-                changed at runtime thanks to the /sys filesystem interface.
+               specific for each detected camera. This parameter can be
+               changed at runtime thanks to the /sys filesystem interface.
 Default:        2
 -------------------------------------------------------------------------------
 Name:           debug
 Type:           ushort
 Syntax:         <n>
 Description:    Debugging information level, from 0 to 3:
-                0 = none (use carefully)
-                1 = critical errors
-                2 = significant informations
-                3 = more verbose messages
-                Level 3 is useful for testing only, when only one device
-                is used. It also shows some more informations about the
-                hardware being detected. This parameter can be changed at
-                runtime thanks to the /sys filesystem interface.
+               0 = none (use carefully)
+               1 = critical errors
+               2 = significant informations
+               3 = more verbose messages
+               Level 3 is useful for testing only, when only one device
+               is used. It also shows some more informations about the
+               hardware being detected. This parameter can be changed at
+               runtime thanks to the /sys filesystem interface.
 Default:        2
 -------------------------------------------------------------------------------
 
@@ -280,24 +280,24 @@ Byte #  Value         Description
 0x04    0xC4          Frame synchronisation pattern.
 0x05    0x96          Frame synchronisation pattern.
 0x06    0xXX          Unknown meaning. The exact value depends on the chip;
-                      possible values are 0x00, 0x01 and 0x20.
+                     possible values are 0x00, 0x01 and 0x20.
 0x07    0xXX          Variable value, whose bits are ff00uzzc, where ff is a
-                      frame counter, u is unknown, zz is a size indicator
-                      (00 = VGA, 01 = SIF, 10 = QSIF) and c stands for
-                      "compression enabled" (1 = yes, 0 = no).
+                     frame counter, u is unknown, zz is a size indicator
+                     (00 = VGA, 01 = SIF, 10 = QSIF) and c stands for
+                     "compression enabled" (1 = yes, 0 = no).
 0x08    0xXX          Brightness sum inside Auto-Exposure area (low-byte).
 0x09    0xXX          Brightness sum inside Auto-Exposure area (high-byte).
-                      For a pure white image, this number will be equal to 500
-                      times the area of the specified AE area. For images
-                      that are not pure white, the value scales down according
-                      to relative whiteness.
+                     For a pure white image, this number will be equal to 500
+                     times the area of the specified AE area. For images
+                     that are not pure white, the value scales down according
+                     to relative whiteness.
 0x0A    0xXX          Brightness sum outside Auto-Exposure area (low-byte).
 0x0B    0xXX          Brightness sum outside Auto-Exposure area (high-byte).
-                      For a pure white image, this number will be equal to 125
-                      times the area outside of the specified AE area. For
-                      images that are not pure white, the value scales down
-                      according to relative whiteness.
-                      according to relative whiteness.
+                     For a pure white image, this number will be equal to 125
+                     times the area outside of the specified AE area. For
+                     images that are not pure white, the value scales down
+                     according to relative whiteness.
+                     according to relative whiteness.
 
 The following bytes are used by the SN9C103 bridge only:
 
diff --git a/Documentation/video4linux/v4lgrab.c b/Documentation/video4linux/v4lgrab.c
new file mode 100644 (file)
index 0000000..079b628
--- /dev/null
@@ -0,0 +1,192 @@
+/* Simple Video4Linux image grabber. */
+/*
+ *     Video4Linux Driver Test/Example Framegrabbing Program
+ *
+ *     Compile with:
+ *             gcc -s -Wall -Wstrict-prototypes v4lgrab.c -o v4lgrab
+ *      Use as:
+ *              v4lgrab >image.ppm
+ *
+ *     Copyright (C) 1998-05-03, Phil Blundell <philb@gnu.org>
+ *      Copied from http://www.tazenda.demon.co.uk/phil/vgrabber.c
+ *      with minor modifications (Dave Forrest, drf5n@virginia.edu).
+ *
+ */
+
+#include <unistd.h>
+#include <sys/types.h>
+#include <sys/stat.h>
+#include <fcntl.h>
+#include <stdio.h>
+#include <sys/ioctl.h>
+#include <stdlib.h>
+
+#include <linux/types.h>
+#include <linux/videodev.h>
+
+#define FILE "/dev/video0"
+
+/* Stole this from tvset.c */
+
+#define READ_VIDEO_PIXEL(buf, format, depth, r, g, b)                   \
+{                                                                       \
+       switch (format)                                                 \
+       {                                                               \
+               case VIDEO_PALETTE_GREY:                                \
+                       switch (depth)                                  \
+                       {                                               \
+                               case 4:                                 \
+                               case 6:                                 \
+                               case 8:                                 \
+                                       (r) = (g) = (b) = (*buf++ << 8);\
+                                       break;                          \
+                                                                       \
+                               case 16:                                \
+                                       (r) = (g) = (b) =               \
+                                               *((unsigned short *) buf);      \
+                                       buf += 2;                       \
+                                       break;                          \
+                       }                                               \
+                       break;                                          \
+                                                                       \
+                                                                       \
+               case VIDEO_PALETTE_RGB565:                              \
+               {                                                       \
+                       unsigned short tmp = *(unsigned short *)buf;    \
+                       (r) = tmp&0xF800;                               \
+                       (g) = (tmp<<5)&0xFC00;                          \
+                       (b) = (tmp<<11)&0xF800;                         \
+                       buf += 2;                                       \
+               }                                                       \
+               break;                                                  \
+                                                                       \
+               case VIDEO_PALETTE_RGB555:                              \
+                       (r) = (buf[0]&0xF8)<<8;                         \
+                       (g) = ((buf[0] << 5 | buf[1] >> 3)&0xF8)<<8;    \
+                       (b) = ((buf[1] << 2 ) & 0xF8)<<8;               \
+                       buf += 2;                                       \
+                       break;                                          \
+                                                                       \
+               case VIDEO_PALETTE_RGB24:                               \
+                       (r) = buf[0] << 8; (g) = buf[1] << 8;           \
+                       (b) = buf[2] << 8;                              \
+                       buf += 3;                                       \
+                       break;                                          \
+                                                                       \
+               default:                                                \
+                       fprintf(stderr,                                 \
+                               "Format %d not yet supported\n",        \
+                               format);                                \
+       }                                                               \
+}
+
+int get_brightness_adj(unsigned char *image, long size, int *brightness) {
+  long i, tot = 0;
+  for (i=0;i<size*3;i++)
+    tot += image[i];
+  *brightness = (128 - tot/(size*3))/3;
+  return !((tot/(size*3)) >= 126 && (tot/(size*3)) <= 130);
+}
+
+int main(int argc, char ** argv)
+{
+  int fd = open(FILE, O_RDONLY), f;
+  struct video_capability cap;
+  struct video_window win;
+  struct video_picture vpic;
+
+  unsigned char *buffer, *src;
+  int bpp = 24, r, g, b;
+  unsigned int i, src_depth;
+
+  if (fd < 0) {
+    perror(FILE);
+    exit(1);
+  }
+
+  if (ioctl(fd, VIDIOCGCAP, &cap) < 0) {
+    perror("VIDIOGCAP");
+    fprintf(stderr, "(" FILE " not a video4linux device?)\n");
+    close(fd);
+    exit(1);
+  }
+
+  if (ioctl(fd, VIDIOCGWIN, &win) < 0) {
+    perror("VIDIOCGWIN");
+    close(fd);
+    exit(1);
+  }
+
+  if (ioctl(fd, VIDIOCGPICT, &vpic) < 0) {
+    perror("VIDIOCGPICT");
+    close(fd);
+    exit(1);
+  }
+
+  if (cap.type & VID_TYPE_MONOCHROME) {
+    vpic.depth=8;
+    vpic.palette=VIDEO_PALETTE_GREY;    /* 8bit grey */
+    if(ioctl(fd, VIDIOCSPICT, &vpic) < 0) {
+      vpic.depth=6;
+      if(ioctl(fd, VIDIOCSPICT, &vpic) < 0) {
+       vpic.depth=4;
+       if(ioctl(fd, VIDIOCSPICT, &vpic) < 0) {
+         fprintf(stderr, "Unable to find a supported capture format.\n");
+         close(fd);
+         exit(1);
+       }
+      }
+    }
+  } else {
+    vpic.depth=24;
+    vpic.palette=VIDEO_PALETTE_RGB24;
+
+    if(ioctl(fd, VIDIOCSPICT, &vpic) < 0) {
+      vpic.palette=VIDEO_PALETTE_RGB565;
+      vpic.depth=16;
+
+      if(ioctl(fd, VIDIOCSPICT, &vpic)==-1) {
+       vpic.palette=VIDEO_PALETTE_RGB555;
+       vpic.depth=15;
+
+       if(ioctl(fd, VIDIOCSPICT, &vpic)==-1) {
+         fprintf(stderr, "Unable to find a supported capture format.\n");
+         return -1;
+       }
+      }
+    }
+  }
+
+  buffer = malloc(win.width * win.height * bpp);
+  if (!buffer) {
+    fprintf(stderr, "Out of memory.\n");
+    exit(1);
+  }
+
+  do {
+    int newbright;
+    read(fd, buffer, win.width * win.height * bpp);
+    f = get_brightness_adj(buffer, win.width * win.height, &newbright);
+    if (f) {
+      vpic.brightness += (newbright << 8);
+      if(ioctl(fd, VIDIOCSPICT, &vpic)==-1) {
+       perror("VIDIOSPICT");
+       break;
+      }
+    }
+  } while (f);
+
+  fprintf(stdout, "P6\n%d %d 255\n", win.width, win.height);
+
+  src = buffer;
+
+  for (i = 0; i < win.width * win.height; i++) {
+    READ_VIDEO_PIXEL(src, vpic.palette, src_depth, r, g, b);
+    fputc(r>>8, stdout);
+    fputc(g>>8, stdout);
+    fputc(b>>8, stdout);
+  }
+
+  close(fd);
+  return 0;
+}
index 3b704f2..0d53ce7 100644 (file)
@@ -1,9 +1,9 @@
 
-                   W996[87]CF JPEG USB Dual Mode Camera Chip
-                     Driver for Linux 2.6 (basic version)
-                   =========================================
+                  W996[87]CF JPEG USB Dual Mode Camera Chip
+                    Driver for Linux 2.6 (basic version)
+                  =========================================
 
-                               - Documentation -
+                              - Documentation -
 
 
 Index
@@ -188,57 +188,57 @@ Name:            ovmod_load
 Type:            bool
 Syntax:          <0|1>
 Description:     Automatic 'ovcamchip' module loading: 0 disabled, 1 enabled.
-                 If enabled, 'insmod' searches for the required 'ovcamchip'
-                 module in the system, according to its configuration, and
-                 loads that module automatically. This action is performed as
-                 once soon as the 'w9968cf' module is loaded into memory.
+                If enabled, 'insmod' searches for the required 'ovcamchip'
+                module in the system, according to its configuration, and
+                loads that module automatically. This action is performed as
+                once soon as the 'w9968cf' module is loaded into memory.
 Default:         1
 Note:            The kernel must be compiled with the CONFIG_KMOD option
-                 enabled for the 'ovcamchip' module to be loaded and for
-                 this parameter to be present.
+                enabled for the 'ovcamchip' module to be loaded and for
+                this parameter to be present.
 -------------------------------------------------------------------------------
 Name:           simcams
 Type:           int
 Syntax:         <n>
 Description:    Number of cameras allowed to stream simultaneously.
-                n may vary from 0 to 32.
+               n may vary from 0 to 32.
 Default:        32
 -------------------------------------------------------------------------------
 Name:           video_nr
 Type:           int array (min = 0, max = 32)
 Syntax:         <-1|n[,...]>
 Description:    Specify V4L minor mode number.
-                -1 = use next available
-                 n = use minor number n
-                You can specify up to 32 cameras this way.
-                For example:
-                video_nr=-1,2,-1 would assign minor number 2 to the second
-                recognized camera and use auto for the first one and for every
-                other camera.
+               -1 = use next available
+                n = use minor number n
+               You can specify up to 32 cameras this way.
+               For example:
+               video_nr=-1,2,-1 would assign minor number 2 to the second
+               recognized camera and use auto for the first one and for every
+               other camera.
 Default:        -1
 -------------------------------------------------------------------------------
 Name:           packet_size
 Type:           int array (min = 0, max = 32)
 Syntax:         <n[,...]>
 Description:    Specify the maximum data payload size in bytes for alternate
-                settings, for each device. n is scaled between 63 and 1023.
+               settings, for each device. n is scaled between 63 and 1023.
 Default:        1023
 -------------------------------------------------------------------------------
 Name:           max_buffers
 Type:           int array (min = 0, max = 32)
 Syntax:         <n[,...]>
 Description:    For advanced users.
-                Specify the maximum number of video frame buffers to allocate
-                for each device, from 2 to 32.
+               Specify the maximum number of video frame buffers to allocate
+               for each device, from 2 to 32.
 Default:        2
 -------------------------------------------------------------------------------
 Name:           double_buffer
 Type:           bool array (min = 0, max = 32)
 Syntax:         <0|1[,...]>
 Description:    Hardware double buffering: 0 disabled, 1 enabled.
-                It should be enabled if you want smooth video output: if you
-                obtain out of sync. video, disable it, or try to
-                decrease the 'clockdiv' module parameter value.
+               It should be enabled if you want smooth video output: if you
+               obtain out of sync. video, disable it, or try to
+               decrease the 'clockdiv' module parameter value.
 Default:        1 for every device.
 -------------------------------------------------------------------------------
 Name:           clamping
@@ -251,9 +251,9 @@ Name:           filter_type
 Type:           int array (min = 0, max = 32)
 Syntax:         <0|1|2[,...]>
 Description:    Video filter type.
-                0 none, 1 (1-2-1) 3-tap filter, 2 (2-3-6-3-2) 5-tap filter.
-                The filter is used to reduce noise and aliasing artifacts
-                produced by the CCD or CMOS image sensor.
+               0 none, 1 (1-2-1) 3-tap filter, 2 (2-3-6-3-2) 5-tap filter.
+               The filter is used to reduce noise and aliasing artifacts
+               produced by the CCD or CMOS image sensor.
 Default:        0 for every device.
 -------------------------------------------------------------------------------
 Name:           largeview
@@ -266,9 +266,9 @@ Name:           upscaling
 Type:           bool array (min = 0, max = 32)
 Syntax:         <0|1[,...]>
 Description:    Software scaling (for non-compressed video only):
-                0 disabled, 1 enabled.
-                Disable it if you have a slow CPU or you don't have enough
-                memory.
+               0 disabled, 1 enabled.
+               Disable it if you have a slow CPU or you don't have enough
+               memory.
 Default:        0 for every device.
 Note:           If 'w9968cf-vpp' is not present, this parameter is set to 0.
 -------------------------------------------------------------------------------
@@ -276,36 +276,36 @@ Name:           decompression
 Type:           int array (min = 0, max = 32)
 Syntax:         <0|1|2[,...]>
 Description:    Software video decompression:
-                0 = disables decompression
-                    (doesn't allow formats needing decompression).
-                1 = forces decompression
-                    (allows formats needing decompression only).
-                2 = allows any permitted formats.
-                Formats supporting (de)compressed video are YUV422P and
-                YUV420P/YUV420 in any resolutions where width and height are
-                multiples of 16.
+               0 = disables decompression
+                   (doesn't allow formats needing decompression).
+               1 = forces decompression
+                   (allows formats needing decompression only).
+               2 = allows any permitted formats.
+               Formats supporting (de)compressed video are YUV422P and
+               YUV420P/YUV420 in any resolutions where width and height are
+               multiples of 16.
 Default:        2 for every device.
 Note:           If 'w9968cf-vpp' is not present, forcing decompression is not
-                allowed; in this case this parameter is set to 2.
+               allowed; in this case this parameter is set to 2.
 -------------------------------------------------------------------------------
 Name:           force_palette
 Type:           int array (min = 0, max = 32)
 Syntax:         <0|9|10|13|15|8|7|1|6|3|4|5[,...]>
 Description:    Force picture palette.
-                In order:
-                 0 = Off - allows any of the following formats:
-                 9 = UYVY    16 bpp - Original video, compression disabled
-                10 = YUV420  12 bpp - Original video, compression enabled
-                13 = YUV422P 16 bpp - Original video, compression enabled
-                15 = YUV420P 12 bpp - Original video, compression enabled
-                 8 = YUVY    16 bpp - Software conversion from UYVY
-                 7 = YUV422  16 bpp - Software conversion from UYVY
-                 1 = GREY     8 bpp - Software conversion from UYVY
-                 6 = RGB555  16 bpp - Software conversion from UYVY
-                 3 = RGB565  16 bpp - Software conversion from UYVY
-                 4 = RGB24   24 bpp - Software conversion from UYVY
-                 5 = RGB32   32 bpp - Software conversion from UYVY
-                When not 0, this parameter will override 'decompression'.
+               In order:
+                0 = Off - allows any of the following formats:
+                9 = UYVY    16 bpp - Original video, compression disabled
+               10 = YUV420  12 bpp - Original video, compression enabled
+               13 = YUV422P 16 bpp - Original video, compression enabled
+               15 = YUV420P 12 bpp - Original video, compression enabled
+                8 = YUVY    16 bpp - Software conversion from UYVY
+                7 = YUV422  16 bpp - Software conversion from UYVY
+                1 = GREY     8 bpp - Software conversion from UYVY
+                6 = RGB555  16 bpp - Software conversion from UYVY
+                3 = RGB565  16 bpp - Software conversion from UYVY
+                4 = RGB24   24 bpp - Software conversion from UYVY
+                5 = RGB32   32 bpp - Software conversion from UYVY
+               When not 0, this parameter will override 'decompression'.
 Default:        0 for every device. Initial palette is 9 (UYVY).
 Note:           If 'w9968cf-vpp' is not present, this parameter is set to 9.
 -------------------------------------------------------------------------------
@@ -313,77 +313,77 @@ Name:           force_rgb
 Type:           bool array (min = 0, max = 32)
 Syntax:         <0|1[,...]>
 Description:    Read RGB video data instead of BGR:
-                1 = use RGB component ordering.
-                0 = use BGR component ordering.
-                This parameter has effect when using RGBX palettes only.
+               1 = use RGB component ordering.
+               0 = use BGR component ordering.
+               This parameter has effect when using RGBX palettes only.
 Default:        0 for every device.
 -------------------------------------------------------------------------------
 Name:           autobright
 Type:           bool array (min = 0, max = 32)
 Syntax:         <0|1[,...]>
 Description:    Image sensor automatically changes brightness:
-                0 = no, 1 = yes
+               0 = no, 1 = yes
 Default:        0 for every device.
 -------------------------------------------------------------------------------
 Name:           autoexp
 Type:           bool array (min = 0, max = 32)
 Syntax:         <0|1[,...]>
 Description:    Image sensor automatically changes exposure:
-                0 = no, 1 = yes
+               0 = no, 1 = yes
 Default:        1 for every device.
 -------------------------------------------------------------------------------
 Name:           lightfreq
 Type:           int array (min = 0, max = 32)
 Syntax:         <50|60[,...]>
 Description:    Light frequency in Hz:
-                50 for European and Asian lighting, 60 for American lighting.
+               50 for European and Asian lighting, 60 for American lighting.
 Default:        50 for every device.
 -------------------------------------------------------------------------------
 Name:           bandingfilter
 Type:           bool array (min = 0, max = 32)
 Syntax:         <0|1[,...]>
 Description:    Banding filter to reduce effects of fluorescent
-                lighting:
-                0 disabled, 1 enabled.
-                This filter tries to reduce the pattern of horizontal
-                light/dark bands caused by some (usually fluorescent) lighting.
+               lighting:
+               0 disabled, 1 enabled.
+               This filter tries to reduce the pattern of horizontal
+               light/dark bands caused by some (usually fluorescent) lighting.
 Default:        0 for every device.
 -------------------------------------------------------------------------------
 Name:           clockdiv
 Type:           int array (min = 0, max = 32)
 Syntax:         <-1|n[,...]>
 Description:    Force pixel clock divisor to a specific value (for experts):
-                n may vary from 0 to 127.
-                -1 for automatic value.
-                See also the 'double_buffer' module parameter.
+               n may vary from 0 to 127.
+               -1 for automatic value.
+               See also the 'double_buffer' module parameter.
 Default:        -1 for every device.
 -------------------------------------------------------------------------------
 Name:           backlight
 Type:           bool array (min = 0, max = 32)
 Syntax:         <0|1[,...]>
 Description:    Objects are lit from behind:
-                0 = no, 1 = yes
+               0 = no, 1 = yes
 Default:        0 for every device.
 -------------------------------------------------------------------------------
 Name:           mirror
 Type:           bool array (min = 0, max = 32)
 Syntax:         <0|1[,...]>
 Description:    Reverse image horizontally:
-                0 = no, 1 = yes
+               0 = no, 1 = yes
 Default:        0 for every device.
 -------------------------------------------------------------------------------
 Name:           monochrome
 Type:           bool array (min = 0, max = 32)
 Syntax:         <0|1[,...]>
 Description:    The image sensor is monochrome:
-                0 = no, 1 = yes
+               0 = no, 1 = yes
 Default:        0 for every device.
 -------------------------------------------------------------------------------
 Name:           brightness
 Type:           long array (min = 0, max = 32)
 Syntax:         <n[,...]>
 Description:    Set picture brightness (0-65535).
-                This parameter has no effect if 'autobright' is enabled.
+               This parameter has no effect if 'autobright' is enabled.
 Default:        31000 for every device.
 -------------------------------------------------------------------------------
 Name:           hue
@@ -414,23 +414,23 @@ Name:           debug
 Type:           int
 Syntax:         <n>
 Description:    Debugging information level, from 0 to 6:
-                0 = none (use carefully)
-                1 = critical errors
-                2 = significant informations
-                3 = configuration or general messages
-                4 = warnings
-                5 = called functions
-                6 = function internals
-                Level 5 and 6 are useful for testing only, when only one
-                device is used.
+               0 = none (use carefully)
+               1 = critical errors
+               2 = significant informations
+               3 = configuration or general messages
+               4 = warnings
+               5 = called functions
+               6 = function internals
+               Level 5 and 6 are useful for testing only, when only one
+               device is used.
 Default:        2
 -------------------------------------------------------------------------------
 Name:           specific_debug
 Type:           bool
 Syntax:         <0|1>
 Description:    Enable or disable specific debugging messages:
-                0 = print messages concerning every level <= 'debug' level.
-                1 = print messages concerning the level indicated by 'debug'.
+               0 = print messages concerning every level <= 'debug' level.
+               1 = print messages concerning the level indicated by 'debug'.
 Default:        0
 -------------------------------------------------------------------------------
 
index f55262c..f406f5e 100644 (file)
@@ -1,9 +1,9 @@
 
-                    ZC0301 Image Processor and Control Chip
-                                Driver for Linux
-                    =======================================
+             ZC0301 and ZC0301P Image Processor and Control Chip
+                               Driver for Linux
+             ===================================================
 
-                               - Documentation -
+                              - Documentation -
 
 
 Index
@@ -51,13 +51,13 @@ Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
 
 4. Overview and features
 ========================
-This driver supports the video interface of the devices mounting the ZC0301
-Image Processor and Control Chip.
+This driver supports the video interface of the devices mounting the ZC0301 or
+ZC0301P Image Processors and Control Chips.
 
 The driver relies on the Video4Linux2 and USB core modules. It has been
 designed to run properly on SMP systems as well.
 
-The latest version of the ZC0301 driver can be found at the following URL:
+The latest version of the ZC0301[P] driver can be found at the following URL:
 http://www.linux-projects.org/
 
 Some of the features of the driver are:
@@ -117,7 +117,7 @@ supported by the USB Audio driver thanks to the ALSA API:
 
 And finally:
 
-       # USB Multimedia devices
+       # V4L USB devices
        #
        CONFIG_USB_ZC0301=m
 
@@ -146,46 +146,46 @@ Name:           video_nr
 Type:           short array (min = 0, max = 64)
 Syntax:         <-1|n[,...]>
 Description:    Specify V4L2 minor mode number:
-                -1 = use next available
-                 n = use minor number n
-                You can specify up to 64 cameras this way.
-                For example:
-                video_nr=-1,2,-1 would assign minor number 2 to the second
-                registered camera and use auto for the first one and for every
-                other camera.
+               -1 = use next available
+                n = use minor number n
+               You can specify up to 64 cameras this way.
+               For example:
+               video_nr=-1,2,-1 would assign minor number 2 to the second
+               registered camera and use auto for the first one and for every
+               other camera.
 Default:        -1
 -------------------------------------------------------------------------------
 Name:           force_munmap
 Type:           bool array (min = 0, max = 64)
 Syntax:         <0|1[,...]>
 Description:    Force the application to unmap previously mapped buffer memory
-                before calling any VIDIOC_S_CROP or VIDIOC_S_FMT ioctl's. Not
-                all the applications support this feature. This parameter is
-                specific for each detected camera.
-                0 = do not force memory unmapping
-                1 = force memory unmapping (save memory)
+               before calling any VIDIOC_S_CROP or VIDIOC_S_FMT ioctl's. Not
+               all the applications support this feature. This parameter is
+               specific for each detected camera.
+               0 = do not force memory unmapping
+               1 = force memory unmapping (save memory)
 Default:        0
 -------------------------------------------------------------------------------
 Name:           frame_timeout
 Type:           uint array (min = 0, max = 64)
 Syntax:         <n[,...]>
 Description:    Timeout for a video frame in seconds. This parameter is
-                specific for each detected camera. This parameter can be
-                changed at runtime thanks to the /sys filesystem interface.
+               specific for each detected camera. This parameter can be
+               changed at runtime thanks to the /sys filesystem interface.
 Default:        2
 -------------------------------------------------------------------------------
 Name:           debug
 Type:           ushort
 Syntax:         <n>
 Description:    Debugging information level, from 0 to 3:
-                0 = none (use carefully)
-                1 = critical errors
-                2 = significant informations
-                3 = more verbose messages
-                Level 3 is useful for testing only, when only one device
-                is used at the same time. It also shows some more informations
-                about the hardware being detected. This module parameter can be
-                changed at runtime thanks to the /sys filesystem interface.
+               0 = none (use carefully)
+               1 = critical errors
+               2 = significant informations
+               3 = more verbose messages
+               Level 3 is useful for testing only, when only one device
+               is used at the same time. It also shows some more informations
+               about the hardware being detected. This module parameter can be
+               changed at runtime thanks to the /sys filesystem interface.
 Default:        2
 -------------------------------------------------------------------------------
 
@@ -204,11 +204,25 @@ Vendor ID  Product ID
 0x041e     0x4017
 0x041e     0x401c
 0x041e     0x401e
+0x041e     0x401f
+0x041e     0x4022
 0x041e     0x4034
 0x041e     0x4035
+0x041e     0x4036
+0x041e     0x403a
+0x0458     0x7007
+0x0458     0x700C
+0x0458     0x700f
+0x046d     0x08ae
+0x055f     0xd003
+0x055f     0xd004
 0x046d     0x08ae
 0x0ac8     0x0301
+0x0ac8     0x301b
+0x0ac8     0x303b
+0x10fd     0x0128
 0x10fd     0x8050
+0x10fd     0x804e
 
 The list above does not imply that all those devices work with this driver: up
 until now only the ones that mount the following image sensors are supported;
@@ -217,6 +231,7 @@ kernel messages will always tell you whether this is the case:
 Model       Manufacturer
 -----       ------------
 PAS202BCB   PixArt Imaging, Inc.
+PB-0330     Photobit Corporation
 
 
 9. Notes for V4L2 application developers
@@ -250,5 +265,6 @@ the fingerprint is: '88E8 F32F 7244 68BA 3958  5D40 99DA 5D2A FCE6 35A4'.
   been taken from the documentation of the ZC030x Video4Linux1 driver written
   by Andrew Birkett <andy@nobugs.org>;
 - The initialization values of the ZC0301 controller connected to the PAS202BCB
-  image sensor have been taken from the SPCA5XX driver maintained by
-  Michel Xhaard <mxhaard@magic.fr>.
+  and PB-0330 image sensors have been taken from the SPCA5XX driver maintained
+  by Michel Xhaard <mxhaard@magic.fr>;
+- Stanislav Lechev donated one camera.
index de606df..302fc14 100644 (file)
@@ -702,7 +702,6 @@ int pci_mmap_page_range(struct pci_dev *dev, struct vm_area_struct *vma,
        /*
         * Mark this as IO
         */
-       vma->vm_flags |= VM_SHM | VM_LOCKED | VM_IO;
        vma->vm_page_prot = pgprot_noncached(vma->vm_page_prot);
 
        if (remap_pfn_range(vma, vma->vm_start, phys,
index 99d333d..a3745ed 100644 (file)
 #include <linux/module.h>
 #include <linux/reboot.h>
 #include <linux/interrupt.h>
+#include <linux/reboot.h>
 
 #include <asm/mach-types.h>
 
-extern void ctrl_alt_del(void);
-
 static irqreturn_t nas100d_reset_handler(int irq, void *dev_id, struct pt_regs *regs)
 {
        /* Signal init to do the ctrlaltdel action, this will bypass init if
index d80c362..6d38e97 100644 (file)
 #include <linux/module.h>
 #include <linux/reboot.h>
 #include <linux/interrupt.h>
+#include <linux/reboot.h>
 
 #include <asm/mach-types.h>
 
-extern void ctrl_alt_del(void);
-
 static irqreturn_t nslu2_power_handler(int irq, void *dev_id, struct pt_regs *regs)
 {
        /* Signal init to do the ctrlaltdel action, this will bypass init if
index 24bc149..1e9d062 100644 (file)
@@ -27,8 +27,6 @@ int pci_mmap_page_range(struct pci_dev *dev, struct vm_area_struct *vma,
        /* Leave vm_pgoff as-is, the PCI space address is the physical
         * address on this platform.
         */
-       vma->vm_flags |= (VM_SHM | VM_LOCKED | VM_IO);
-
        prot = pgprot_val(vma->vm_page_prot);
        vma->vm_page_prot = __pgprot(prot);
 
index 05668e3..5fd6532 100644 (file)
@@ -371,11 +371,11 @@ static int acpi_cpufreq_early_init_acpi(void)
 
        dprintk("acpi_cpufreq_early_init\n");
 
-       for_each_cpu(i) {
+       for_each_possible_cpu(i) {
                data = kzalloc(sizeof(struct acpi_processor_performance), 
                        GFP_KERNEL);
                if (!data) {
-                       for_each_cpu(j) {
+                       for_each_possible_cpu(j) {
                                kfree(acpi_perf_data[j]);
                                acpi_perf_data[j] = NULL;
                        }
@@ -584,7 +584,7 @@ acpi_cpufreq_exit (void)
 
        cpufreq_unregister_driver(&acpi_cpufreq_driver);
 
-       for_each_cpu(i) {
+       for_each_possible_cpu(i) {
                kfree(acpi_perf_data[i]);
                acpi_perf_data[i] = NULL;
        }
index 31c3a5b..f7e4356 100644 (file)
@@ -361,11 +361,11 @@ static int centrino_cpu_early_init_acpi(void)
        unsigned int    i, j;
        struct acpi_processor_performance       *data;
 
-       for_each_cpu(i) {
+       for_each_possible_cpu(i) {
                data = kzalloc(sizeof(struct acpi_processor_performance), 
                                GFP_KERNEL);
                if (!data) {
-                       for_each_cpu(j) {
+                       for_each_possible_cpu(j) {
                                kfree(acpi_perf_data[j]);
                                acpi_perf_data[j] = NULL;
                        }
@@ -805,7 +805,7 @@ static void __exit centrino_exit(void)
        cpufreq_unregister_driver(&centrino_driver);
 
 #ifdef CONFIG_X86_SPEEDSTEP_CENTRINO_ACPI
-       for_each_cpu(j) {
+       for_each_possible_cpu(j) {
                kfree(acpi_perf_data[j]);
                acpi_perf_data[j] = NULL;
        }
index 2b0cfce..21dc1bb 100644 (file)
@@ -114,7 +114,8 @@ static int crash_nmi_callback(struct pt_regs *regs, int cpu)
        atomic_dec(&waiting_for_crash_ipi);
        /* Assume hlt works */
        halt();
-       for(;;);
+       for (;;)
+               cpu_relax();
 
        return 1;
 }
index 5edb1d3..b4d14c2 100644 (file)
@@ -44,7 +44,8 @@ static void doublefault_fn(void)
                }
        }
 
-       for (;;) /* nothing */;
+       for (;;)
+               cpu_relax();
 }
 
 struct tss_struct doublefault_tss __cacheline_aligned = {
index e602397..6c16398 100644 (file)
@@ -61,7 +61,7 @@
 #include <asm/io_apic.h>
 #include <asm/ist.h>
 #include <asm/io.h>
-#include "setup_arch_pre.h"
+#include <setup_arch.h>
 #include <bios_ebda.h>
 
 /* Forward Declaration. */
@@ -411,8 +411,8 @@ static void __init limit_regions(unsigned long long size)
        }
 }
 
-static void __init add_memory_region(unsigned long long start,
-                                  unsigned long long size, int type)
+void __init add_memory_region(unsigned long long start,
+                             unsigned long long size, int type)
 {
        int x;
 
@@ -475,7 +475,7 @@ static struct change_member *change_point[2*E820MAX] __initdata;
 static struct e820entry *overlap_list[E820MAX] __initdata;
 static struct e820entry new_bios[E820MAX] __initdata;
 
-static int __init sanitize_e820_map(struct e820entry * biosmap, char * pnr_map)
+int __init sanitize_e820_map(struct e820entry * biosmap, char * pnr_map)
 {
        struct change_member *change_tmp;
        unsigned long current_type, last_type;
@@ -644,7 +644,7 @@ static int __init sanitize_e820_map(struct e820entry * biosmap, char * pnr_map)
  * thinkpad 560x, for example, does not cooperate with the memory
  * detection code.)
  */
-static int __init copy_e820_map(struct e820entry * biosmap, int nr_map)
+int __init copy_e820_map(struct e820entry * biosmap, int nr_map)
 {
        /* Only one memory region (or negative)? Ignore it */
        if (nr_map < 2)
@@ -702,12 +702,6 @@ static inline void copy_edd(void)
 }
 #endif
 
-/*
- * Do NOT EVER look at the BIOS memory size location.
- * It does not work on many machines.
- */
-#define LOWMEMSIZE()   (0x9f000)
-
 static void __init parse_cmdline_early (char ** cmdline_p)
 {
        char c = ' ', *to = command_line, *from = saved_command_line;
@@ -1424,8 +1418,6 @@ static void __init register_memory(void)
                pci_mem_start, gapstart, gapsize);
 }
 
-static char * __init machine_specific_memory_setup(void);
-
 #ifdef CONFIG_MCA
 static void set_mca_bus(int x)
 {
@@ -1708,7 +1700,6 @@ static __init int add_pcspkr(void)
 }
 device_initcall(add_pcspkr);
 
-#include "setup_arch_post.h"
 /*
  * Local Variables:
  * mode:c