Merge branch 'for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/roland...
authorLinus Torvalds <torvalds@woody.osdl.org>
Sat, 2 Dec 2006 00:43:06 +0000 (16:43 -0800)
committerLinus Torvalds <torvalds@woody.osdl.org>
Sat, 2 Dec 2006 00:43:06 +0000 (16:43 -0800)
* 'for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/roland/infiniband: (25 commits)
  IB/ucm: Fix deadlock in cleanup
  IB/cm: Fix automatic path migration support
  IPoIB: Fix skb leak when freeing neighbour
  IB/srp: Fix memory leak on reconnect
  RDMA/addr: list_move() cleanups
  RDMA/addr: Fix some cancellation problems in process_req()
  RDMA/amso1100: Prevent deadlock in destroy QP
  IB/mthca: Fix initial SRQ logsize for mem-free HCAs
  IB/ehca: Use WQE offset instead of WQE addr for pending work reqs
  RDMA/iwcm: Fix comment for iwcm_deref_id() to match code
  RDMA/iwcm: Remove unnecessary function argument
  RDMA/iwcm: Remove unnecessary initializations
  RDMA/iwcm: Fix memory leak
  RDMA/iwcm: Fix memory corruption bug in cm_work_handler()
  IB: Convert kmem_cache_t -> struct kmem_cache
  IB/ipath: Fix typo in pma_counter_select subscript
  RDMA/amso1100: Fix section mismatches
  IB/mthca: Fix section mismatches
  IB/srp: Increase supported CDB size
  RDMA/cm: Remove setting local write as part of QP access flags
  ...

390 files changed:
Documentation/Changes
Documentation/DMA-API.txt
Documentation/DMA-ISA-LPC.txt
Documentation/DocBook/writing_usb_driver.tmpl
Documentation/MSI-HOWTO.txt
Documentation/accounting/taskstats.txt
Documentation/block/biodoc.txt
Documentation/cpu-freq/cpufreq-nforce2.txt
Documentation/cpu-hotplug.txt
Documentation/devices.txt
Documentation/driver-model/platform.txt
Documentation/driver-model/porting.txt
Documentation/dvb/ci.txt
Documentation/eisa.txt
Documentation/filesystems/adfs.txt
Documentation/filesystems/configfs/configfs.txt
Documentation/filesystems/fuse.txt
Documentation/filesystems/hpfs.txt
Documentation/filesystems/ntfs.txt
Documentation/filesystems/ocfs2.txt
Documentation/filesystems/proc.txt
Documentation/filesystems/spufs.txt
Documentation/fujitsu/frv/gdbstub.txt
Documentation/fujitsu/frv/kernel-ABI.txt
Documentation/ide.txt
Documentation/input/amijoy.txt
Documentation/input/atarikbd.txt
Documentation/input/yealink.txt
Documentation/ioctl/cdrom.txt
Documentation/kbuild/makefiles.txt
Documentation/keys.txt
Documentation/laptop-mode.txt
Documentation/memory-barriers.txt
Documentation/networking/NAPI_HOWTO.txt
Documentation/networking/cs89x0.txt
Documentation/networking/iphase.txt
Documentation/networking/packet_mmap.txt
Documentation/networking/pktgen.txt
Documentation/networking/proc_net_tcp.txt
Documentation/networking/sk98lin.txt
Documentation/networking/slicecom.txt
Documentation/networking/wan-router.txt
Documentation/pnp.txt
Documentation/power/pci.txt
Documentation/power/states.txt
Documentation/power/swsusp.txt
Documentation/powerpc/booting-without-of.txt
Documentation/robust-futex-ABI.txt
Documentation/robust-futexes.txt
Documentation/s390/crypto/crypto-API.txt
Documentation/scsi/aic79xx.txt
Documentation/scsi/aic7xxx_old.txt
Documentation/scsi/ibmmca.txt
Documentation/scsi/in2000.txt
Documentation/scsi/libsas.txt
Documentation/scsi/ncr53c8xx.txt
Documentation/scsi/scsi-changer.txt
Documentation/scsi/scsi_eh.txt
Documentation/scsi/st.txt
Documentation/scsi/sym53c8xx_2.txt
Documentation/sharedsubtree.txt
Documentation/sound/alsa/ALSA-Configuration.txt
Documentation/sound/alsa/Audigy-mixer.txt
Documentation/sound/alsa/SB-Live-mixer.txt
Documentation/stable_kernel_rules.txt
Documentation/sysctl/fs.txt
Documentation/sysctl/vm.txt
Documentation/uml/UserModeLinux-HOWTO.txt
Documentation/usb/hiddev.txt
Documentation/usb/rio.txt
Documentation/usb/usb-serial.txt
Documentation/watchdog/watchdog-api.txt
MAINTAINERS
arch/arm/mach-ixp4xx/Kconfig
arch/arm/mach-lh7a40x/Kconfig
arch/arm/mach-s3c2410/Kconfig
arch/arm/mm/Kconfig
arch/cris/arch-v10/Kconfig
arch/cris/arch-v10/drivers/Kconfig
arch/cris/arch-v10/drivers/eeprom.c
arch/cris/arch-v10/drivers/i2c.c
arch/cris/arch-v10/kernel/kgdb.c
arch/cris/arch-v32/drivers/Kconfig
arch/i386/kernel/cpuid.c
arch/i386/kernel/msr.c
arch/i386/kernel/pci-dma.c
arch/i386/pci/common.c
arch/i386/pci/fixup.c
arch/i386/pci/i386.c
arch/i386/pci/irq.c
arch/ia64/hp/common/sba_iommu.c
arch/ia64/pci/pci.c
arch/ia64/sn/kernel/Makefile
arch/ia64/sn/kernel/io_acpi_init.c [new file with mode: 0644]
arch/ia64/sn/kernel/io_common.c [new file with mode: 0644]
arch/ia64/sn/kernel/io_init.c
arch/ia64/sn/kernel/iomv.c
arch/ia64/sn/kernel/setup.c
arch/ia64/sn/kernel/tiocx.c
arch/ia64/sn/pci/pcibr/pcibr_provider.c
arch/ia64/sn/pci/tioce_provider.c
arch/m68knommu/Kconfig
arch/mips/Kconfig
arch/powerpc/Kconfig
arch/powerpc/platforms/83xx/Kconfig
arch/powerpc/platforms/powermac/pci.c
arch/ppc/Kconfig
arch/sh/Kconfig
arch/sh64/lib/dbg.c
arch/sparc/Kconfig
arch/sparc64/kernel/pci.c
arch/um/drivers/chan_user.c
block/as-iosched.c
block/blktrace.c
block/cfq-iosched.c
block/deadline-iosched.c
block/elevator.c
block/ll_rw_blk.c
block/noop-iosched.c
block/scsi_ioctl.c
drivers/acpi/glue.c
drivers/atm/iphase.c
drivers/base/bus.c
drivers/base/class.c
drivers/base/core.c
drivers/base/dd.c
drivers/base/firmware_class.c
drivers/base/platform.c
drivers/base/topology.c
drivers/cdrom/cdrom.c
drivers/char/Kconfig
drivers/char/hw_random/core.c
drivers/char/mem.c
drivers/char/misc.c
drivers/char/ppdev.c
drivers/char/raw.c
drivers/char/rio/riocmd.c
drivers/char/rio/rioinit.c
drivers/char/rio/rioparam.c
drivers/char/tpm/tpm.c
drivers/char/tty_io.c
drivers/char/vc_screen.c
drivers/char/vt.c
drivers/char/watchdog/pcwd_usb.c
drivers/i2c/busses/Kconfig
drivers/i2c/busses/i2c-i801.c
drivers/i2c/i2c-dev.c
drivers/ide/ide-floppy.c
drivers/input/joystick/iforce/iforce-usb.c
drivers/input/serio/serio_raw.c
drivers/isdn/gigaset/common.c
drivers/isdn/gigaset/gigaset.h
drivers/isdn/gigaset/interface.c
drivers/isdn/gigaset/proc.c
drivers/isdn/gigaset/usb-gigaset.c
drivers/isdn/hardware/eicon/os_4bri.c
drivers/isdn/hisax/hfc4s8s_l1.h
drivers/isdn/hisax/isdnl2.c
drivers/media/dvb/cinergyT2/cinergyT2.c
drivers/media/dvb/ttpci/budget-patch.c
drivers/media/dvb/ttusb-dec/ttusb_dec.c
drivers/media/video/Kconfig
drivers/media/video/pvrusb2/pvrusb2-hdw.c
drivers/media/video/pvrusb2/pvrusb2-io.c
drivers/media/video/pwc/pwc-if.c
drivers/media/video/sn9c102/sn9c102_core.c
drivers/media/video/usbvideo/quickcam_messenger.c
drivers/media/video/zc0301/zc0301_core.c
drivers/message/fusion/mptbase.c
drivers/message/i2o/pci.c
drivers/mmc/mmc_queue.c
drivers/mmc/mmc_sysfs.c
drivers/mmc/omap.c
drivers/mmc/wbsd.c
drivers/mtd/maps/Kconfig
drivers/mtd/maps/cfi_flagadm.c
drivers/net/Kconfig
drivers/net/e100.c
drivers/net/e1000/e1000_hw.c
drivers/net/irda/irda-usb.c
drivers/net/phy/Kconfig
drivers/net/ppp_generic.c
drivers/net/sk98lin/h/skdrv2nd.h
drivers/net/sk98lin/skdim.c
drivers/net/wireless/ipw2200.c
drivers/net/wireless/zd1201.c
drivers/parisc/ccio-dma.c
drivers/parisc/iosapic.c
drivers/pci/Kconfig
drivers/pci/access.c
drivers/pci/hotplug/acpiphp.h
drivers/pci/hotplug/acpiphp_core.c
drivers/pci/hotplug/acpiphp_glue.c
drivers/pci/hotplug/ibmphp_hpc.c
drivers/pci/hotplug/ibmphp_pci.c
drivers/pci/hotplug/pciehp_core.c
drivers/pci/hotplug/pciehp_hpc.c
drivers/pci/hotplug/rpadlpar_core.c
drivers/pci/hotplug/rpaphp_core.c
drivers/pci/hotplug/sgi_hotplug.c
drivers/pci/msi.h
drivers/pci/pci-acpi.c
drivers/pci/pci-driver.c
drivers/pci/pci-sysfs.c
drivers/pci/pci.c
drivers/pci/pci.h
drivers/pci/probe.c
drivers/pci/quirks.c
drivers/pci/rom.c
drivers/s390/net/claw.h
drivers/scsi/aic94xx/aic94xx_reg_def.h
drivers/scsi/aic94xx/aic94xx_sds.c
drivers/scsi/ncr53c8xx.c
drivers/scsi/ncr53c8xx.h
drivers/spi/Kconfig
drivers/usb/atm/speedtch.c
drivers/usb/atm/ueagle-atm.c
drivers/usb/class/cdc-acm.c
drivers/usb/core/Kconfig
drivers/usb/core/devices.c
drivers/usb/core/devio.c
drivers/usb/core/driver.c
drivers/usb/core/endpoint.c
drivers/usb/core/hcd.c
drivers/usb/core/hub.c
drivers/usb/core/hub.h
drivers/usb/core/message.c
drivers/usb/core/usb.c
drivers/usb/core/usb.h
drivers/usb/gadget/ether.c
drivers/usb/gadget/lh7a40x_udc.c
drivers/usb/gadget/net2280.c
drivers/usb/gadget/net2280.h
drivers/usb/gadget/pxa2xx_udc.c
drivers/usb/host/Kconfig
drivers/usb/host/ehci-hcd.c
drivers/usb/host/ehci-hub.c
drivers/usb/host/ehci-pci.c
drivers/usb/host/ehci.h
drivers/usb/host/ohci-hcd.c
drivers/usb/host/ohci-hub.c
drivers/usb/host/u132-hcd.c
drivers/usb/image/microtek.c
drivers/usb/input/Kconfig
drivers/usb/input/ati_remote.c
drivers/usb/input/ati_remote2.c
drivers/usb/input/hid-core.c
drivers/usb/input/hid.h
drivers/usb/input/usbkbd.c
drivers/usb/input/usbmouse.c
drivers/usb/input/usbtouchscreen.c
drivers/usb/input/wacom.h
drivers/usb/input/wacom_sys.c
drivers/usb/input/yealink.c
drivers/usb/misc/Makefile
drivers/usb/misc/appledisplay.c
drivers/usb/misc/auerswald.c
drivers/usb/misc/emi26.c
drivers/usb/misc/emi62.c
drivers/usb/misc/ftdi-elan.c
drivers/usb/misc/idmouse.c
drivers/usb/misc/legousbtower.c
drivers/usb/misc/phidgetkit.c
drivers/usb/misc/phidgetmotorcontrol.c
drivers/usb/misc/usb_u132.h
drivers/usb/misc/usbtest.c
drivers/usb/net/asix.c
drivers/usb/net/catc.c
drivers/usb/net/cdc_ether.c
drivers/usb/net/net1080.c
drivers/usb/net/pegasus.c
drivers/usb/net/usbnet.c
drivers/usb/serial/Kconfig
drivers/usb/serial/Makefile
drivers/usb/serial/aircable.c
drivers/usb/serial/airprime.c
drivers/usb/serial/ark3116.c
drivers/usb/serial/console.c
drivers/usb/serial/cypress_m8.c
drivers/usb/serial/digi_acceleport.c
drivers/usb/serial/ezusb.c
drivers/usb/serial/ftdi_sio.c
drivers/usb/serial/garmin_gps.c
drivers/usb/serial/io_edgeport.c
drivers/usb/serial/ipw.c
drivers/usb/serial/keyspan.c
drivers/usb/serial/kobil_sct.c
drivers/usb/serial/mct_u232.c
drivers/usb/serial/mos7840.c
drivers/usb/serial/navman.c
drivers/usb/serial/ti_usb_3410_5052.c
drivers/usb/serial/ti_usb_3410_5052.h
drivers/usb/serial/usb-serial.c
drivers/usb/serial/usb_debug.c [new file with mode: 0644]
drivers/usb/serial/visor.c
drivers/usb/storage/onetouch.c
drivers/usb/storage/unusual_devs.h
drivers/usb/storage/usb.c
drivers/video/fbmem.c
drivers/video/fbsysfs.c
fs/Kconfig
fs/aio.c
fs/bio.c
fs/cifs/inode.c
fs/cifs/link.c
fs/jfs/jfs_filsys.h
fs/reiserfs/journal.c
fs/sysfs/dir.c
fs/sysfs/file.c
include/acpi/acpi_bus.h
include/asm-alpha/device.h [new file with mode: 0644]
include/asm-arm/device.h [new file with mode: 0644]
include/asm-arm26/device.h [new file with mode: 0644]
include/asm-avr32/device.h [new file with mode: 0644]
include/asm-cris/device.h [new file with mode: 0644]
include/asm-frv/device.h [new file with mode: 0644]
include/asm-generic/device.h [new file with mode: 0644]
include/asm-h8300/device.h [new file with mode: 0644]
include/asm-i386/device.h [new file with mode: 0644]
include/asm-ia64/device.h [new file with mode: 0644]
include/asm-ia64/io.h
include/asm-ia64/machvec.h
include/asm-ia64/machvec_sn2.h
include/asm-ia64/pci.h
include/asm-ia64/sn/acpi.h [new file with mode: 0644]
include/asm-ia64/sn/pcidev.h
include/asm-ia64/sn/sn_feature_sets.h
include/asm-ia64/sn/sn_sal.h
include/asm-m32r/device.h [new file with mode: 0644]
include/asm-m68k/device.h [new file with mode: 0644]
include/asm-m68knommu/device.h [new file with mode: 0644]
include/asm-m68knommu/mcfmbus.h
include/asm-mips/device.h [new file with mode: 0644]
include/asm-parisc/device.h [new file with mode: 0644]
include/asm-parisc/dma.h
include/asm-parisc/pci.h
include/asm-parisc/ropes.h
include/asm-powerpc/device.h [new file with mode: 0644]
include/asm-powerpc/pci.h
include/asm-ppc/device.h [new file with mode: 0644]
include/asm-s390/device.h [new file with mode: 0644]
include/asm-sh/device.h [new file with mode: 0644]
include/asm-sh64/device.h [new file with mode: 0644]
include/asm-sparc/device.h [new file with mode: 0644]
include/asm-sparc64/device.h [new file with mode: 0644]
include/asm-sparc64/pci.h
include/asm-um/device.h [new file with mode: 0644]
include/asm-v850/device.h [new file with mode: 0644]
include/asm-x86_64/device.h [new file with mode: 0644]
include/asm-xtensa/device.h [new file with mode: 0644]
include/linux/blkdev.h
include/linux/blktrace_api.h
include/linux/device.h
include/linux/elevator.h
include/linux/fb.h
include/linux/ioport.h
include/linux/ixjuser.h
include/linux/jiffies.h
include/linux/kernel.h
include/linux/kobject.h
include/linux/miscdevice.h
include/linux/mmc/host.h
include/linux/module.h
include/linux/mqueue.h
include/linux/pci.h
include/linux/pci_ids.h
include/linux/pci_regs.h
include/linux/platform_device.h
include/linux/reiserfs_fs_sb.h
include/linux/sysfs.h
include/linux/textsearch.h
include/linux/tty.h
include/linux/usb.h
include/sound/core.h
init/Kconfig
kernel/module.c
lib/kobject.c
lib/kobject_uevent.c
lib/textsearch.c
net/wanrouter/af_wanpipe.c
net/wanrouter/wanmain.c
sound/Kconfig
sound/core/init.c
sound/core/pcm.c
sound/core/sound.c
sound/oss/cs46xx.c
sound/oss/soundcard.c
sound/sound_core.c
sound/usb/usbmidi.c
sound/usb/usbmixer.c

index abee7f58c1ed6b2c374aa0483c06f86a5a260512..73a8617f1861754198c18c5e7285da95358994fe 100644 (file)
@@ -201,7 +201,7 @@ udev
 ----
 udev is a userspace application for populating /dev dynamically with
 only entries for devices actually present.  udev replaces the basic
-functionality of devfs, while allowing persistant device naming for
+functionality of devfs, while allowing persistent device naming for
 devices.
 
 FUSE
index 2ffb0d62f0fe3ed8156586505b7faf1efe1c33ce..05431621c861d7b9f0228a228414beb3fb3ee52e 100644 (file)
@@ -489,7 +489,7 @@ size is the size of the area (must be multiples of PAGE_SIZE).
 flags can be or'd together and are
 
 DMA_MEMORY_MAP - request that the memory returned from
-dma_alloc_coherent() be directly writeable.
+dma_alloc_coherent() be directly writable.
 
 DMA_MEMORY_IO - request that the memory returned from
 dma_alloc_coherent() be addressable using read/write/memcpy_toio etc.
index 705f6be92bdbf934a1171f291ac8b3b631d670c3..e767805b4182826acc049e29a183ec5109c4a39e 100644 (file)
@@ -110,7 +110,7 @@ lock.
 
 Once the DMA transfer is finished (or timed out) you should disable
 the channel again. You should also check get_dma_residue() to make
-sure that all data has been transfered.
+sure that all data has been transferred.
 
 Example:
 
index 07cd34c1940b446a41ae0eb8f2f7d76698670f65..d4188d4ff5356902b93e9f19d10a78b82df3c813 100644 (file)
@@ -345,8 +345,7 @@ static inline void skel_delete (struct usb_skel *dev)
         usb_buffer_free (dev->udev, dev->bulk_out_size,
             dev->bulk_out_buffer,
             dev->write_urb->transfer_dma);
-    if (dev->write_urb != NULL)
-        usb_free_urb (dev->write_urb);
+    usb_free_urb (dev->write_urb);
     kfree (dev);
 }
   </programlisting>
index 5c34910665d1d8514fb77c07e310f91b2b7f59bd..d389388c733e6c718f87de37a885132af6519930 100644 (file)
@@ -219,7 +219,7 @@ into the field vector of each element contained in a second argument.
 Note that the pre-assigned IOAPIC dev->irq is valid only if the device
 operates in PIN-IRQ assertion mode. In MSI-X mode, any attempt at
 using dev->irq by the device driver to request for interrupt service
-may result unpredictabe behavior.
+may result in unpredictable behavior.
 
 For each MSI-X vector granted, a device driver is responsible for calling
 other functions like request_irq(), enable_irq(), etc. to enable
index 92ebf29e9041cef2b68fc0c3c33698f8558ff085..ff06b738bb88065b28f6006c7a6381d5af7d57dd 100644 (file)
@@ -96,9 +96,9 @@ a) TASKSTATS_TYPE_AGGR_PID/TGID : attribute containing no payload but indicates
 a pid/tgid will be followed by some stats.
 
 b) TASKSTATS_TYPE_PID/TGID: attribute whose payload is the pid/tgid whose stats
-is being returned.
+are being returned.
 
-c) TASKSTATS_TYPE_STATS: attribute with a struct taskstsats as payload. The
+c) TASKSTATS_TYPE_STATS: attribute with a struct taskstats as payload. The
 same structure is used for both per-pid and per-tgid stats.
 
 3. New message sent by kernel whenever a task exits. The payload consists of a
@@ -122,12 +122,12 @@ of atomicity).
 
 However, maintaining per-process, in addition to per-task stats, within the
 kernel has space and time overheads. To address this, the taskstats code
-accumalates each exiting task's statistics into a process-wide data structure.
-When the last task of a process exits, the process level data accumalated also
+accumulates each exiting task's statistics into a process-wide data structure.
+When the last task of a process exits, the process level data accumulated also
 gets sent to userspace (along with the per-task data).
 
 When a user queries to get per-tgid data, the sum of all other live threads in
-the group is added up and added to the accumalated total for previously exited
+the group is added up and added to the accumulated total for previously exited
 threads of the same thread group.
 
 Extending taskstats
index 34bf8f60d8f827a9b83f27747c265a27fe38928d..c6c9a9c10d7f88b5f894990e45878acadbb2ea64 100644 (file)
@@ -183,7 +183,7 @@ it, the pci dma mapping routines and associated data structures have now been
 modified to accomplish a direct page -> bus translation, without requiring
 a virtual address mapping (unlike the earlier scheme of virtual address
 -> bus translation). So this works uniformly for high-memory pages (which
-do not have a correponding kernel virtual address space mapping) and
+do not have a corresponding kernel virtual address space mapping) and
 low-memory pages.
 
 Note: Please refer to DMA-mapping.txt for a discussion on PCI high mem DMA
@@ -391,7 +391,7 @@ forced such requests to be broken up into small chunks before being passed
 on to the generic block layer, only to be merged by the i/o scheduler
 when the underlying device was capable of handling the i/o in one shot.
 Also, using the buffer head as an i/o structure for i/os that didn't originate
-from the buffer cache unecessarily added to the weight of the descriptors
+from the buffer cache unnecessarily added to the weight of the descriptors
 which were generated for each such chunk.
 
 The following were some of the goals and expectations considered in the
@@ -403,14 +403,14 @@ i.  Should be appropriate as a descriptor for both raw and buffered i/o  -
     for raw i/o.
 ii. Ability to represent high-memory buffers (which do not have a virtual
     address mapping in kernel address space).
-iii.Ability to represent large i/os w/o unecessarily breaking them up (i.e
+iii.Ability to represent large i/os w/o unnecessarily breaking them up (i.e
     greater than PAGE_SIZE chunks in one shot)
 iv. At the same time, ability to retain independent identity of i/os from
     different sources or i/o units requiring individual completion (e.g. for
     latency reasons)
 v.  Ability to represent an i/o involving multiple physical memory segments
     (including non-page aligned page fragments, as specified via readv/writev)
-    without unecessarily breaking it up, if the underlying device is capable of
+    without unnecessarily breaking it up, if the underlying device is capable of
     handling it.
 vi. Preferably should be based on a memory descriptor structure that can be
     passed around different types of subsystems or layers, maybe even
@@ -1013,7 +1013,7 @@ Characteristics:
 i. Binary tree
 AS and deadline i/o schedulers use red black binary trees for disk position
 sorting and searching, and a fifo linked list for time-based searching. This
-gives good scalability and good availablility of information. Requests are
+gives good scalability and good availability of information. Requests are
 almost always dispatched in disk sort order, so a cache is kept of the next
 request in sort order to prevent binary tree lookups.
 
index 9188337d8f6b8f2b3ee852463c72494164dfb398..babce13150265f173fc32dfa72ce1b91cf234afd 100644 (file)
@@ -1,7 +1,7 @@
 
-The cpufreq-nforce2 driver changes the FSB on nVidia nForce2 plattforms.
+The cpufreq-nforce2 driver changes the FSB on nVidia nForce2 platforms.
 
-This works better than on other plattforms, because the FSB of the CPU
+This works better than on other platforms, because the FSB of the CPU
 can be controlled independently from the PCI/AGP clock.
 
 The module has two options:
index 4868c34f75090fe75b4f6bb28f70c7638540c4cd..cc60d29b954cd394ccd1eba1c27b06bfc049302d 100644 (file)
@@ -54,8 +54,8 @@ additional_cpus=n (*) Use this to limit hotpluggable cpus. This option sets
 
 ia64 and x86_64 use the number of disabled local apics in ACPI tables MADT
 to determine the number of potentially hot-pluggable cpus. The implementation
-should only rely on this to count the #of cpus, but *MUST* not rely on the
-apicid values in those tables for disabled apics. In the event BIOS doesnt
+should only rely on this to count the # of cpus, but *MUST* not rely on the
+apicid values in those tables for disabled apics. In the event BIOS doesn't
 mark such hot-pluggable cpus as disabled entries, one could use this
 parameter "additional_cpus=x" to represent those cpus in the cpu_possible_map.
 
index 28c4f79662c2a84b05361d02f429b075e346380d..70690f1a14af53cd128ab0a553421044e28cd319 100644 (file)
@@ -92,7 +92,7 @@ Your cooperation is appreciated.
                  7 = /dev/full         Returns ENOSPC on write
                  8 = /dev/random       Nondeterministic random number gen.
                  9 = /dev/urandom      Faster, less secure random number gen.
-                10 = /dev/aio          Asyncronous I/O notification interface
+                10 = /dev/aio          Asynchronous I/O notification interface
                 11 = /dev/kmsg         Writes to this come out as printk's
   1 block      RAM disk
                  0 = /dev/ram0         First RAM disk
@@ -1093,7 +1093,7 @@ Your cooperation is appreciated.
 
  55 char       DSP56001 digital signal processor
                  0 = /dev/dsp56k       First DSP56001
- 55 block      Mylex DAC960 PCI RAID controller; eigth controller
+ 55 block      Mylex DAC960 PCI RAID controller; eighth controller
                  0 = /dev/rd/c7d0      First disk, whole disk
                  8 = /dev/rd/c7d1      Second disk, whole disk
                    ...
@@ -1456,7 +1456,7 @@ Your cooperation is appreciated.
                  1 = /dev/cum1         Callout device for ttyM1
                    ...
 
- 79 block      Compaq Intelligent Drive Array, eigth controller
+ 79 block      Compaq Intelligent Drive Array, eighth controller
                  0 = /dev/ida/c7d0     First logical drive whole disk
                 16 = /dev/ida/c7d1     Second logical drive whole disk
                    ...
@@ -1900,7 +1900,7 @@ Your cooperation is appreciated.
                  1 = /dev/av1          Second A/V card
                    ...
 
-111 block      Compaq Next Generation Drive Array, eigth controller
+111 block      Compaq Next Generation Drive Array, eighth controller
                  0 = /dev/cciss/c7d0   First logical drive, whole disk
                 16 = /dev/cciss/c7d1   Second logical drive, whole disk
                    ...
index 5eee3e0bfc4caf0493e3cc7492ef335dcb2dba1f..9f0bc3bfd776b4b3f50523604a320ffe5d8eba8e 100644 (file)
 Platform Devices and Drivers
 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+See <linux/platform_device.h> for the driver model interface to the
+platform bus:  platform_device, and platform_driver.  This pseudo-bus
+is used to connect devices on busses with minimal infrastructure,
+like those used to integrate peripherals on many system-on-chip
+processors, or some "legacy" PC interconnects; as opposed to large
+formally specified ones like PCI or USB.
+
 
 Platform devices
 ~~~~~~~~~~~~~~~~
 Platform devices are devices that typically appear as autonomous
 entities in the system. This includes legacy port-based devices and
-host bridges to peripheral buses. 
-
-
-Platform drivers
-~~~~~~~~~~~~~~~~
-Drivers for platform devices are typically very simple and
-unstructured. Either the device was present at a particular I/O port
-and the driver was loaded, or it was not. There was no possibility
-of hotplugging or alternative discovery besides probing at a specific
-I/O address and expecting a specific response.
+host bridges to peripheral buses, and most controllers integrated
+into system-on-chip platforms.  What they usually have in common
+is direct addressing from a CPU bus.  Rarely, a platform_device will
+be connected through a segment of some other kind of bus; but its
+registers will still be directly addressible.
 
+Platform devices are given a name, used in driver binding, and a
+list of resources such as addresses and IRQs.
 
-Other Architectures, Modern Firmware, and new Platforms
-~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
-These devices are not always at the legacy I/O ports. This is true on
-other architectures and on some modern architectures. In most cases,
-the drivers are modified to discover the devices at other well-known
-ports for the given platform. However, the firmware in these systems
-does usually know where exactly these devices reside, and in some
-cases, it's the only way of discovering them. 
+struct platform_device {
+       const char      *name;
+       u32             id;
+       struct device   dev;
+       u32             num_resources;
+       struct resource *resource;
+};
 
 
-The Platform Bus
-~~~~~~~~~~~~~~~~
-A platform bus has been created to deal with these issues. First and
-foremost, it groups all the legacy devices under a common bus, and
-gives them a common parent if they don't already have one. 
-
-But, besides the organizational benefits, the platform bus can also
-accommodate firmware-based enumeration. 
-
-
-Device Discovery
+Platform drivers
 ~~~~~~~~~~~~~~~~
-The platform bus has no concept of probing for devices. Devices
-discovery is left up to either the legacy drivers or the
-firmware. These entities are expected to notify the platform of
-devices that it discovers via the bus's add() callback:
-
-       platform_bus.add(parent,bus_id).
-
-
-Bus IDs
-~~~~~~~
-Bus IDs are the canonical names for the devices. There is no globally
-standard addressing mechanism for legacy devices. In the IA-32 world,
-we have Pnp IDs to use, as well as the legacy I/O ports. However,
-neither tell what the device really is or have any meaning on other
-platforms. 
-
-Since both PnP IDs and the legacy I/O ports (and other standard I/O
-ports for specific devices) have a 1:1 mapping, we map the
-platform-specific name or identifier to a generic name (at least
-within the scope of the kernel).
-
-For example, a serial driver might find a device at I/O 0x3f8. The
-ACPI firmware might also discover a device with PnP ID (_HID)
-PNP0501. Both correspond to the same device and should be mapped to the
-canonical name 'serial'. 
-
-The bus_id field should be a concatenation of the canonical name and
-the instance of that type of device. For example, the device at I/O
-port 0x3f8 should have a bus_id of "serial0". This places the
-responsibility of enumerating devices of a particular type up to the
-discovery mechanism. But, they are the entity that should know best
-(as opposed to the platform bus driver).
-
-
-Drivers 
-~~~~~~~
-Drivers for platform devices should have a name that is the same as
-the canonical name of the devices they support. This allows the
-platform bus driver to do simple matching with the basic data
-structures to determine if a driver supports a certain device. 
-
-For example, a legacy serial driver should have a name of 'serial' and
-register itself with the platform bus. 
-
-
-Driver Binding
-~~~~~~~~~~~~~~
-Legacy drivers assume they are bound to the device once they start up
-and probe an I/O port. Divorcing them from this will be a difficult
-process. However, that shouldn't prevent us from implementing
-firmware-based enumeration. 
-
-The firmware should notify the platform bus about devices before the
-legacy drivers have had a chance to load. Once the drivers are loaded,
-they driver model core will attempt to bind the driver to any
-previously-discovered devices. Once that has happened, it will be free
-to discover any other devices it pleases.
+Platform drivers follow the standard driver model convention, where
+discovery/enumeration is handled outside the drivers, and drivers
+provide probe() and remove() methods.  They support power management
+and shutdown notifications using the standard conventions.
+
+struct platform_driver {
+       int (*probe)(struct platform_device *);
+       int (*remove)(struct platform_device *);
+       void (*shutdown)(struct platform_device *);
+       int (*suspend)(struct platform_device *, pm_message_t state);
+       int (*suspend_late)(struct platform_device *, pm_message_t state);
+       int (*resume_early)(struct platform_device *);
+       int (*resume)(struct platform_device *);
+       struct device_driver driver;
+};
+
+Note that probe() should general verify that the specified device hardware
+actually exists; sometimes platform setup code can't be sure.  The probing
+can use device resources, including clocks, and device platform_data.
+
+Platform drivers register themselves the normal way:
+
+       int platform_driver_register(struct platform_driver *drv);
+
+Or, in common situations where the device is known not to be hot-pluggable,
+the probe() routine can live in an init section to reduce the driver's
+runtime memory footprint:
+
+       int platform_driver_probe(struct platform_driver *drv,
+                         int (*probe)(struct platform_device *))
+
+
+Device Enumeration
+~~~~~~~~~~~~~~~~~~
+As a rule, platform specific (and often board-specific) setup code wil
+register platform devices:
+
+       int platform_device_register(struct platform_device *pdev);
+
+       int platform_add_devices(struct platform_device **pdevs, int ndev);
+
+The general rule is to register only those devices that actually exist,
+but in some cases extra devices might be registered.  For example, a kernel
+might be configured to work with an external network adapter that might not
+be populated on all boards, or likewise to work with an integrated controller
+that some boards might not hook up to any peripherals.
+
+In some cases, boot firmware will export tables describing the devices
+that are populated on a given board.   Without such tables, often the
+only way for system setup code to set up the correct devices is to build
+a kernel for a specific target board.  Such board-specific kernels are
+common with embedded and custom systems development.
+
+In many cases, the memory and IRQ resources associated with the platform
+device are not enough to let the device's driver work.  Board setup code
+will often provide additional information using the device's platform_data
+field to hold additional information.
+
+Embedded systems frequently need one or more clocks for platform devices,
+which are normally kept off until they're actively needed (to save power).
+System setup also associates those clocks with the device, so that that
+calls to clk_get(&pdev->dev, clock_name) return them as needed.
+
+
+Device Naming and Driver Binding
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+The platform_device.dev.bus_id is the canonical name for the devices.
+It's built from two components:
+
+    * platform_device.name ... which is also used to for driver matching.
+
+    * platform_device.id ... the device instance number, or else "-1"
+      to indicate there's only one.
+
+These are catenated, so name/id "serial"/0 indicates bus_id "serial.0", and
+"serial/3" indicates bus_id "serial.3"; both would use the platform_driver
+named "serial".  While "my_rtc"/-1 would be bus_id "my_rtc" (no instance id)
+and use the platform_driver called "my_rtc".
+
+Driver binding is performed automatically by the driver core, invoking
+driver probe() after finding a match between device and driver.  If the
+probe() succeeds, the driver and device are bound as usual.  There are
+three different ways to find such a match:
+
+    - Whenever a device is registered, the drivers for that bus are
+      checked for matches.  Platform devices should be registered very
+      early during system boot.
+
+    - When a driver is registered using platform_driver_register(), all
+      unbound devices on that bus are checked for matches.  Drivers
+      usually register later during booting, or by module loading.
+
+    - Registering a driver using platform_driver_probe() works just like
+      using platform_driver_register(), except that the the driver won't
+      be probed later if another device registers.  (Which is OK, since
+      this interface is only for use with non-hotpluggable devices.)
 
index 98b233cb8b36882a41c3e604315b179ab0ca3537..92d86f7271b4d960431e3333ce5d0de3b9f9889e 100644 (file)
@@ -92,7 +92,7 @@ struct device represents a single device. It mainly contains metadata
 describing the relationship the device has to other entities. 
 
 
-- Embedd a struct device in the bus-specific device type. 
+- Embed a struct device in the bus-specific device type. 
 
 
 struct pci_dev {
index 531239b2908210dd78a26809e23b570a8be1ad53..2ecd834585e64140fcaa064c27142a9b7fd23950 100644 (file)
@@ -71,7 +71,7 @@ eliminating the need for any additional ioctls.
 The disadvantage is that the driver/hardware has to manage the rest. For
 the application programmer it would be as simple as sending/receiving an
 array to/from the CI ioctls as defined in the Linux DVB API. No changes
-have been made in the API to accomodate this feature.
+have been made in the API to accommodate this feature.
 
 
 * Why the need for another CI interface ?
@@ -102,7 +102,7 @@ This CI interface follows the CI high level interface, which is not
 implemented by most applications. Hence this area is revisited.
 
 This CI interface is quite different in the case that it tries to
-accomodate all other CI based devices, that fall into the other categories
+accommodate all other CI based devices, that fall into the other categories.
 
 This means that this CI interface handles the EN50221 style tags in the
 Application layer only and no session management is taken care of by the
index 6a099edadd622f625e2606c9402916a227accf4e..60e361ba08c05ce491fd34a2eb73bc3194ca8c75 100644 (file)
@@ -62,7 +62,7 @@ res           : root device I/O resource
 bus_base_addr : slot 0 address on this bus
 slots        : max slot number to probe
 force_probe   : Probe even when slot 0 is empty (no EISA mainboard)
-dma_mask      : Default DMA mask. Usualy the bridge device dma_mask.
+dma_mask      : Default DMA mask. Usually the bridge device dma_mask.
 bus_nr       : unique bus id, set by eisa_root_register
 
 ** Driver :
index 060abb0c700485e1b23495be56714d64d6589b16..9e8811f92b84160451947366508957d26b750597 100644 (file)
@@ -3,7 +3,7 @@ Mount options for ADFS
 
   uid=nnn      All files in the partition will be owned by
                user id nnn.  Default 0 (root).
-  gid=nnn      All files in the partition willbe in group
+  gid=nnn      All files in the partition will be in group
                nnn.  Default 0 (root).
   ownmask=nnn  The permission mask for ADFS 'owner' permissions
                will be nnn.  Default 0700.
index c3a7afb5eabf337a8dc272220070c7e96bbc7d8f..b34cdb50eab466ca539a559228c5cfc6a18e6bde 100644 (file)
@@ -209,7 +209,7 @@ will happen for write(2).
 
 [struct config_group]
 
-A config_item cannot live in a vaccum.  The only way one can be created
+A config_item cannot live in a vacuum.  The only way one can be created
 is via mkdir(2) on a config_group.  This will trigger creation of a
 child item.
 
@@ -275,7 +275,7 @@ directory is not empty.
 
 [struct configfs_subsystem]
 
-A subsystem must register itself, ususally at module_init time.  This
+A subsystem must register itself, usually at module_init time.  This
 tells configfs to make the subsystem appear in the file tree.
 
        struct configfs_subsystem {
index a584f05403a412e778cf359e84d3690d5a22d1e4..3d74477389587b4be4d03950845c17a1e396a707 100644 (file)
@@ -111,7 +111,7 @@ For each connection the following files exist within this directory:
 
  'waiting'
 
-  The number of requests which are waiting to be transfered to
+  The number of requests which are waiting to be transferred to
   userspace or being processed by the filesystem daemon.  If there is
   no filesystem activity and 'waiting' is non-zero, then the
   filesystem is hung or deadlocked.
@@ -136,7 +136,7 @@ following will happen:
 
   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
+     the request has been successfully transferred to userspace and
      this flag is set, an INTERRUPT request is queued.
 
   3) If the request is already sent to userspace, then an INTERRUPT
index 33dc360c8e8916333e435aa6b1f98e3f0d20eb58..38aba03efc5e1451e91f63d3c9ea0afa3022d90f 100644 (file)
@@ -274,7 +274,7 @@ History
      Fixed race-condition in buffer code - it is in all filesystems in Linux;
         when reading device (cat /dev/hda) while creating files on it, files
         could be damaged
-2.02 Woraround for bug in breada in Linux. breada could cause accesses beyond
+2.02 Workaround for bug in breada in Linux. breada could cause accesses beyond
         end of partition
 2.03 Char, block devices and pipes are correctly created
      Fixed non-crashing race in unlink (Alexander Viro)
index 35f105b29e3e26bb4201049f663062989b4693b8..13ba649bda75dae1010891a62da6399ca25d7113 100644 (file)
@@ -337,7 +337,7 @@ Finally, for a mirrored volume, i.e. raid level 1, the table would look like
 this (note all values are in 512-byte sectors):
 
 --- cut here ---
-# Ofs Size   Raid   Log  Number Region Should Number Source  Start Taget  Start
+# Ofs Size   Raid   Log  Number Region Should Number Source  Start Target Start
 # in  of the type   type of log size   sync?  of     Device  in    Device in
 # vol volume            params              mirrors         Device       Device
 0    2056320 mirror core 2     16     nosync 2    /dev/hda1 0   /dev/hdb1 0
@@ -599,7 +599,7 @@ Note, a technical ChangeLog aimed at kernel hackers is in fs/ntfs/ChangeLog.
        - Major bug fixes for reading files and volumes in corner cases which
          were being hit by Windows 2k/XP users.
 2.1.2:
-       - Major bug fixes aleviating the hangs in statfs experienced by some
+       - Major bug fixes alleviating the hangs in statfs experienced by some
          users.
 2.1.1:
        - Update handling of compressed files so people no longer get the
index 4389c684a80a66d402f464a4ecf3ed7a15bda1bb..af6defd10cb604fa4f0468ba6522ca30e57adda5 100644 (file)
@@ -30,7 +30,7 @@ Caveats
 Features which OCFS2 does not support yet:
        - sparse files
        - extended attributes
-       - shared writeable mmap
+       - shared writable mmap
        - loopback is supported, but data written will not
          be cluster coherent.
        - quotas
index 3355e6920105014bda194eb3a1c5360f37a33916..72af5de1effb44a93d907ed4e0117ec403a8257e 100644 (file)
@@ -1220,9 +1220,9 @@ applications are using mlock(), or if you are running with no swap then
 you probably should increase the lower_zone_protection setting.
 
 The units of this tunable are fairly vague.  It is approximately equal
-to "megabytes".  So setting lower_zone_protection=100 will protect around 100
+to "megabytes," so setting lower_zone_protection=100 will protect around 100
 megabytes of the lowmem zone from user allocations.  It will also make
-those 100 megabytes unavaliable for use by applications and by
+those 100 megabytes unavailable for use by applications and by
 pagecache, so there is a cost.
 
 The effects of this tunable may be observed by monitoring
@@ -1538,10 +1538,10 @@ TCP settings
 tcp_ecn
 -------
 
-This file controls the use of the ECN bit in the IPv4 headers, this is a new
+This file controls the use of the ECN bit in the IPv4 headers. This is a new
 feature about Explicit Congestion Notification, but some routers and firewalls
-block trafic that has this bit set, so it could be necessary to echo 0 to
-/proc/sys/net/ipv4/tcp_ecn, if you want to talk to this sites. For more info
+block traffic that has this bit set, so it could be necessary to echo 0 to
+/proc/sys/net/ipv4/tcp_ecn if you want to talk to these sites. For more info
 you could read RFC2481.
 
 tcp_retrans_collapse
index 982645a1981de148771c844c41e7affa6373b3aa..1343d118a9b2d63815355cb28f18605c565653f6 100644 (file)
@@ -210,7 +210,7 @@ FILES
    /signal2
        The two signal notification channels of an SPU.  These  are  read-write
        files  that  operate  on  a 32 bit word.  Writing to one of these files
-       triggers an interrupt on the SPU. The  value  writting  to  the  signal
+       triggers an interrupt on the SPU.  The  value  written  to  the  signal
        files can be read from the SPU through a channel read or from host user
        space through the file.  After the value has been read by the  SPU,  it
        is  reset  to zero.  The possible operations on an open signal1 or sig-
index 6ce5aa9abbc5918cb961c47f55f0ebd5bbb64947..9304fb36ae8a91671693bde1fd2644b3085f42f2 100644 (file)
@@ -59,7 +59,7 @@ the following things on the "Kernel Hacking" tab:
 Then build as usual, download to the board and execute. Note that if
 "Immediate activation" was selected, then the kernel will wait for GDB to
 attach. If not, then the kernel will boot immediately and GDB will have to
-interupt it or wait for an exception to occur if before doing anything with
+interrupt it or wait for an exception to occur before doing anything with
 the kernel.
 
 
index 8b0a5fc8bfd96cc64fe09f165b740f272196f654..aaa1cec86f0bb869c674ea2faf7a5506770b40ad 100644 (file)
@@ -156,7 +156,7 @@ with the main kernel in this regard. Hence the debug mode code (gdbstub) is
 almost completely self-contained. The only external code used is the
 sprintf family of functions.
 
-Futhermore, break.S is so complicated because single-step mode does not
+Furthermore, break.S is so complicated because single-step mode does not
 switch off on entry to an exception. That means unless manually disabled,
 single-stepping will blithely go on stepping into things like interrupts.
 See gdbstub.txt for more information.
index 0bf38baa2db96a162e8f641eac90de097487cbf4..786c3a766995f09ad8ad443c042be0af0a6484f3 100644 (file)
@@ -390,5 +390,5 @@ mlord@pobox.com
 Wed Apr 17 22:52:44 CEST 2002 edited by Marcin Dalecki, the current
 maintainer.
 
-Wed Aug 20 22:31:29 CEST 2003 updated ide boot uptions to current ide.c
+Wed Aug 20 22:31:29 CEST 2003 updated ide boot options to current ide.c
 comments at 2.6.0-test4 time. Maciej Soltysiak <solt@dns.toxicfilms.tv>
index 4f0e89df5c5191cbc166adc5f86e23f69aac6ba2..7dc4f175943cff2854dd1d54ff93c03be98b2b56 100644 (file)
@@ -91,8 +91,8 @@ JOY1DAT   Y7  Y6  Y5  Y4  Y3  Y2  Y1  Y0     X7  X6  X5  X4  X3  X2  X1  X0
          |   1    | M0HQ     | JOY0DAT Horizontal Clock (quadrature)   |
          |   2    | M0V      | JOY0DAT Vertical Clock                  |
          |   3    | M0VQ     | JOY0DAT Vertical Clock  (quadrature)    |
-         |   4    | M1V      | JOY1DAT Horizontall Clock               |
-         |   5    | M1VQ     | JOY1DAT Horizontall Clock (quadrature)  |
+         |   4    | M1V      | JOY1DAT Horizontal Clock                |
+         |   5    | M1VQ     | JOY1DAT Horizontal Clock (quadrature)   |
          |   6    | M1V      | JOY1DAT Vertical Clock                  |
          |   7    | M1VQ     | JOY1DAT Vertical Clock (quadrature)     |
          +--------+----------+-----------------------------------------+
index 1e7e5853ba4c71eafdbc1e9f57cc749826b658c4..668f4d0d97d60efe0f8fd99538e4b259b19874ff 100644 (file)
@@ -103,7 +103,7 @@ LEFT=0x74 & RIGHT=0x75).
 
 5.1 Joystick Event Reporting
 
-In this mode, the ikbd generates a record whever the joystick position is
+In this mode, the ikbd generates a record whenever the joystick position is
 changed (i.e. for each opening or closing of a joystick switch or trigger).
 
 The joystick event record is two bytes of the form:
@@ -277,8 +277,8 @@ default to 1 at RESET (or power-up).
 9.7 SET MOUSE SCALE
 
     0x0C
-    X                   ; horizontal mouse ticks per internel X
-    Y                   ; vertical mouse ticks per internel Y
+    X                   ; horizontal mouse ticks per internal X
+    Y                   ; vertical mouse ticks per internal Y
 
 This command sets the scale factor for the ABSOLUTE MOUSE POSITIONING mode.
 In this mode, the specified number of mouse phase changes ('clicks') must
@@ -323,7 +323,7 @@ mouse position.
     0x0F
 
 This command makes the origin of the Y axis to be at the bottom of the
-logical coordinate system internel to the ikbd for all relative or absolute
+logical coordinate system internal to the ikbd for all relative or absolute
 mouse motion. This causes mouse motion toward the user to be negative in sign
 and away from the user to be positive.
 
@@ -597,8 +597,8 @@ mode or FIRE BUTTON MONITORING mode.
 
 10. SCAN CODES
 
-The key scan codes return by the ikbd are chosen to simplify the
-implementaion of GSX.
+The key scan codes returned by the ikbd are chosen to simplify the
+implementation of GSX.
 
 GSX Standard Keyboard Mapping.
 
index 0a8c97e87d47ee6fce48dbe96ff93e6c42d6fa5d..5360e434486ced9970c6c71454b085b3ff617061 100644 (file)
@@ -134,7 +134,7 @@ Reading /sys/../lineX will return the format string with its current value:
   888888888888
   Linux Rocks!
 
-Writing to /sys/../lineX will set the coresponding LCD line.
+Writing to /sys/../lineX will set the corresponding LCD line.
  - Excess characters are ignored.
  - If less characters are written than allowed, the remaining digits are
    unchanged.
index 8ec32cc49eb107bdab130a6cb24c54b6da9dfcb2..62d4af44ec4a2e0a4987d48687dc0bd1d01dcbf0 100644 (file)
@@ -735,7 +735,7 @@ CDROM_DISC_STATUS           Get disc type, etc.
            Ok, this is where problems start.  The current interface for
            the CDROM_DISC_STATUS ioctl is flawed.  It makes the false
            assumption that CDs are all CDS_DATA_1 or all CDS_AUDIO, etc.
-           Unfortunatly, while this is often the case, it is also
+           Unfortunately, while this is often the case, it is also
            very common for CDs to have some tracks with data, and some
            tracks with audio.  Just because I feel like it, I declare
            the following to be the best way to cope.  If the CD has
index 50f4eddf899cac4a06724355a2fd26299ab6909d..4b3d6710c504c6257b7abd7d03129f9320e7c2c5 100644 (file)
@@ -227,9 +227,9 @@ more details, with real examples.
        be included in a library, lib.a.
        All objects listed with lib-y are combined in a single
        library for that directory.
-       Objects that are listed in obj-y and additionaly listed in
-       lib-y will not be included in the library, since they will anyway
-       be accessible.
+       Objects that are listed in obj-y and additionally listed in
+       lib-y will not be included in the library, since they will
+       be accessible anyway.
        For consistency, objects listed in lib-m will be included in lib.a.
 
        Note that the same kbuild makefile may list files to be built-in
@@ -535,7 +535,7 @@ Both possibilities are described in the following.
        Host programs can be made up based on composite objects.
        The syntax used to define composite objects for host programs is
        similar to the syntax used for kernel objects.
-       $(<executeable>-objs) lists all objects used to link the final
+       $(<executable>-objs) lists all objects used to link the final
        executable.
 
        Example:
@@ -1022,7 +1022,7 @@ When kbuild executes, the following steps are followed (roughly):
        In this example, there are two possible targets, requiring different
        options to the linker. The linker options are specified using the
        LDFLAGS_$@ syntax - one for each potential target.
-       $(targets) are assinged all potential targets, by which kbuild knows
+       $(targets) are assigned all potential targets, by which kbuild knows
        the targets and will:
                1) check for commandline changes
                2) delete target during make clean
index 3da586bc7859a3f982255547472fcfd5193eaf6a..60c665d9cfaa883416c79efb0fb99245f610a1e2 100644 (file)
@@ -304,7 +304,7 @@ about the status of the key service:
        R       Revoked
        D       Dead
        Q       Contributes to user's quota
-       U       Under contruction by callback to userspace
+       U       Under construction by callback to userspace
        N       Negative key
 
      This file must be enabled at kernel configuration time as it allows anyone
index c487186eb2b93ac9a0180561396470bce867e4b3..6f639e3473af550bbf384a506fcb9074a60dca2b 100644 (file)
@@ -121,7 +121,7 @@ contains the following options:
 MAX_AGE:
 
 Maximum time, in seconds, of hard drive spindown time that you are
-confortable with. Worst case, it's possible that you could lose this
+comfortable with. Worst case, it's possible that you could lose this
 amount of work if your battery fails while you're in laptop mode.
 
 MINIMUM_BATTERY_MINUTES:
@@ -235,7 +235,7 @@ It should be installed as /etc/default/laptop-mode on Debian, and as
 
 --------------------CONFIG FILE BEGIN-------------------------------------------
 # Maximum time, in seconds, of hard drive spindown time that you are
-# confortable with. Worst case, it's possible that you could lose this
+# comfortable with. Worst case, it's possible that you could lose this
 # amount of work if your battery fails you while in laptop mode.
 #MAX_AGE=600
 
@@ -350,7 +350,7 @@ fi
 # set defaults instead:
 
 # Maximum time, in seconds, of hard drive spindown time that you are
-# confortable with. Worst case, it's possible that you could lose this
+# comfortable with. Worst case, it's possible that you could lose this
 # amount of work if your battery fails you while in laptop mode.
 MAX_AGE=${MAX_AGE:-'600'}
 
@@ -699,7 +699,7 @@ ACPI integration
 Dax Kelson submitted this so that the ACPI acpid daemon will
 kick off the laptop_mode script and run hdparm. The part that
 automatically disables laptop mode when the battery is low was
-writen by Jan Topinski.
+written by Jan Topinski.
 
 -----------------/etc/acpi/events/ac_adapter BEGIN------------------------------
 event=ac_adapter
index 7751704b6db1418e6eb3ecb7a273b34730f66fac..58408dd023c77e0e0712d02811fc0238c5ee1742 100644 (file)
@@ -212,7 +212,7 @@ There are some minimal guarantees that may be expected of a CPU:
 
        STORE *X = c, d = LOAD *X
 
-     (Loads and stores overlap if they are targetted at overlapping pieces of
+     (Loads and stores overlap if they are targeted at overlapping pieces of
      memory).
 
 And there are a number of things that _must_ or _must_not_ be assumed:
index 93af3e87c65b470828d1fd62193c2ac5590a3e75..fb8dc6422a5212488f362e1a48711afe452f0482 100644 (file)
@@ -95,8 +95,8 @@ There are two types of event register ACK mechanisms.
                Move all to dev->poll()
 
 C) Ability to detect new work correctly.
-NAPI works by shutting down event interrupts when theres work and
-turning them on when theres none. 
+NAPI works by shutting down event interrupts when there's work and
+turning them on when there's none. 
 New packets might show up in the small window while interrupts were being 
 re-enabled (refer to appendix 2).  A packet might sneak in during the period 
 we are enabling interrupts. We only get to know about such a packet when the 
@@ -114,7 +114,7 @@ Locking rules and environmental guarantees
 only one CPU can pick the initial interrupt and hence the initial
 netif_rx_schedule(dev);
 - The core layer invokes devices to send packets in a round robin format.
-This implies receive is totaly lockless because of the guarantee only that 
+This implies receive is totally lockless because of the guarantee that only 
 one CPU is executing it.
 -  contention can only be the result of some other CPU accessing the rx
 ring. This happens only in close() and suspend() (when these methods
@@ -510,7 +510,7 @@ static int my_poll (struct net_device *dev, int *budget)
                        an interrupt will be generated */
                         goto done;
        }
-       /* done! at least thats what it looks like ;->
+       /* done! at least that's what it looks like ;->
        if new packets came in after our last check on status bits
        they'll be caught by the while check and we go back and clear them 
        since we havent exceeded our quota */
@@ -535,11 +535,11 @@ done:
         * 1. it can race with disabling irqs in irq handler (which are done to 
        * schedule polls)
         * 2. it can race with dis/enabling irqs in other poll threads
-        * 3. if an irq raised after the begining of the outer  beginning 
-        * loop(marked in the code above), it will be immediately
+        * 3. if an irq raised after the beginning of the outer beginning 
+        * loop (marked in the code above), it will be immediately
         * triggered here.
         *
-        * Summarizing: the logic may results in some redundant irqs both
+        * Summarizing: the logic may result in some redundant irqs both
         * due to races in masking and due to too late acking of already
         * processed irqs. The good news: no events are ever lost.
         */
@@ -601,7 +601,7 @@ a)
        
 5) dev->close() and dev->suspend() issues
 ==========================================
-The driver writter neednt worry about this. The top net layer takes
+The driver writer needn't worry about this; the top net layer takes
 care of it.
 
 6) Adding new Stats to /proc 
@@ -622,9 +622,9 @@ FC should be programmed to apply in the case when the system cant pull out
 packets fast enough i.e send a pause only when you run out of rx buffers.
 Note FC in itself is a good solution but we have found it to not be
 much of a commodity feature (both in NICs and switches) and hence falls
-under the same category as using NIC based mitigation. Also experiments
-indicate that its much harder to resolve the resource allocation
-issue (aka lazy receiving that NAPI offers) and hence quantify its usefullness
+under the same category as using NIC based mitigation. Also, experiments
+indicate that it's much harder to resolve the resource allocation
+issue (aka lazy receiving that NAPI offers) and hence quantify its usefulness
 proved harder. In any case, FC works even better with NAPI but is not
 necessary.
 
@@ -678,10 +678,10 @@ routine:
 CSR5 bit of interest is only the rx status. 
 If you look at the last if statement: 
 you just finished grabbing all the packets from the rx ring .. you check if
-status bit says theres more packets just in ... it says none; you then
+status bit says there are more packets just in ... it says none; you then
 enable rx interrupts again; if a new packet just came in during this check,
 we are counting that CSR5 will be set in that small window of opportunity
-and that by re-enabling interrupts, we would actually triger an interrupt
+and that by re-enabling interrupts, we would actually trigger an interrupt
 to register the new packet for processing.
 
 [The above description nay be very verbose, if you have better wording 
index 64896470e279b7d4675c46c4673e024026bd815c..6387d3decf858a7c83d2ae65f06c6eccdfa7dfae 100644 (file)
@@ -248,7 +248,7 @@ c) The driver's hardware probe routine is designed to avoid
    with device probing.  To avoid this behaviour, add one
    to the `io=' module parameter.  This doesn't actually change
    the I/O address, but it is a flag to tell the driver
-   topartially initialise the hardware before trying to
+   to partially initialise the hardware before trying to
    identify the card.  This could be dangerous if you are
    not sure that there is a cs89x0 card at the provided address.
 
@@ -620,8 +620,8 @@ I/O Address         Device                        IRQ      Device
                                                 12       Mouse (PS/2)                              
 Memory Address  Device                          13       Math Coprocessor
 --------------  ---------------------           14       Hard Disk controller
-A000-BFFF      EGA Graphics Adpater
-A000-C7FF      VGA Graphics Adpater
+A000-BFFF      EGA Graphics Adapter
+A000-C7FF      VGA Graphics Adapter
 B000-BFFF      Mono Graphics Adapter
 B800-BFFF      Color Graphics Adapter
 E000-FFFF      AT BIOS
index 493203a080a8baf1690bbd1ac8654e23c195f397..55eac4a784e2fdf598bb653de891baf685bfb5b1 100644 (file)
@@ -81,7 +81,7 @@ Installation
     1M. The RAM size decides the number of buffers and buffer size. The default 
     size and number of buffers are set as following: 
 
-          Totol    Rx RAM   Tx RAM   Rx Buf   Tx Buf   Rx buf   Tx buf
+          Total    Rx RAM   Tx RAM   Rx Buf   Tx Buf   Rx buf   Tx buf
          RAM size   size     size     size     size      cnt      cnt
          --------  ------   ------   ------   ------   ------   ------
            128K      64K      64K      10K      10K       6        6
index 12a008a5c22158999b94dbb0693de65469b3a59c..5a232d946be39fd425c1f9b6c5e821b902b2d465 100644 (file)
@@ -284,7 +284,7 @@ the necessary memory, so normally limits can be reached.
 -------------------
 
 If you check the source code you will see that what I draw here as a frame
-is not only the link level frame. At the begining of each frame there is a 
+is not only the link level frame. At the beginning of each frame there is a 
 header called struct tpacket_hdr used in PACKET_MMAP to hold link level's frame
 meta information like timestamp. So what we draw here a frame it's really 
 the following (from include/linux/if_packet.h):
index c8eee23be8c0a43d9c6f998691d44d0296626921..c6cf4a3c16e029258e3c6790ee3b5da441259eff 100644 (file)
@@ -63,8 +63,8 @@ Current:
 Result: OK: 13101142(c12220741+d880401) usec, 10000000 (60byte,0frags)
   763292pps 390Mb/sec (390805504bps) errors: 39664
 
-Confguring threads and devices
-==============================
+Configuring threads and devices
+================================
 This is done via the /proc interface easiest done via pgset in the scripts
 
 Examples:
@@ -116,7 +116,7 @@ Examples:
                                         there must be no spaces between the
                                         arguments. Leading zeros are required.
                                         Do not set the bottom of stack bit,
-                                        thats done automatically. If you do
+                                        that's done automatically. If you do
                                         set the bottom of stack bit, that
                                         indicates that you want to randomly
                                         generate that address and the flag
index 59cb915c371312ef815793e6f8eb13a15e8c6707..5e21f7cb638332f3eac08536c580dbc26b94298f 100644 (file)
@@ -25,7 +25,7 @@ up into 3 parts because of the length of the line):
 
    1000        0 54165785 4 cd1e6040 25 4 27 3 -1
     |          |    |     |    |     |  | |  | |--> slow start size threshold, 
-    |          |    |     |    |     |  | |  |      or -1 if the treshold
+    |          |    |     |    |     |  | |  |      or -1 if the threshold
     |          |    |     |    |     |  | |  |      is >= 0xFFFF
     |          |    |     |    |     |  | |  |----> sending congestion window
     |          |    |     |    |     |  | |-------> (ack.quick<<1)|ack.pingpong
index 4e1cc745ec63de85db97de493ebd8ed2365f416c..8590a954df1da94cedae5a71dac6c398b887d1c9 100644 (file)
@@ -346,7 +346,7 @@ Possible modes:
       depending on the load of the system. If the driver detects that the
       system load is too high, the driver tries to shield the system against 
       too much network load by enabling interrupt moderation. If - at a later
-      time - the CPU utilizaton decreases again (or if the network load is 
+      time - the CPU utilization decreases again (or if the network load is 
       negligible) the interrupt moderation will automatically be disabled.
 
 Interrupt moderation should be used when the driver has to handle one or more
index 2f04c9267f890217c0b7d95900d4b0bb22db0ab4..32d3b916afadfe19718ce5f00ffd436a97481402 100644 (file)
@@ -126,7 +126,7 @@ comx0/boardnum      - board number of the SliceCom in the PC (using the 'natural'
 
 Though the options below are to be set on a single interface, they apply to the
 whole board. The restriction, to use them on 'UP' interfaces, is because the 
-command sequence below could lead to unpredicable results.
+command sequence below could lead to unpredictable results.
 
        # echo 0        >boardnum
        # echo internal >clock_source
index 0cf6541476342b237e34822338984d8b2426448d..653978dcea7f0d8e7a5e0515a541b12bff3591c0 100644 (file)
@@ -412,7 +412,7 @@ beta-2.1.4 Jul 2000         o Dynamic interface configuration:
 
 beta3-2.1.4 Jul 2000           o X25 M_BIT Problem fix.
                                o Added the Multi-Port PPP
-                                 Updated utilites for the Multi-Port PPP.
+                                 Updated utilities for the Multi-Port PPP.
 
 2.1.4  Aut 2000
                                o In X25API:
@@ -444,13 +444,13 @@ beta1-2.1.5       Nov 15 2000
                                        
                                o Cpipemon
                                        - Added set FT1 commands to the cpipemon. Thus CSU/DSU
-                                         configuraiton can be performed using cpipemon.
+                                         configuration can be performed using cpipemon.
                                          All systems that cannot run cfgft1 GUI utility should
                                          use cpipemon to configure the on board CSU/DSU.
 
 
                                o Keyboard Led Monitor/Debugger
-                                       - A new utilty /usr/sbin/wpkbdmon uses keyboard leds
+                                       - A new utility /usr/sbin/wpkbdmon uses keyboard leds
                                          to convey operational statistic information of the 
                                          Sangoma WANPIPE cards.
                                        NUM_LOCK    = Line State  (On=connected,    Off=disconnected)
@@ -464,7 +464,7 @@ beta1-2.1.5         Nov 15 2000
                                        - Appropriate number of devices are dynamically loaded 
                                          based on the number of Sangoma cards found.
 
-                                         Note: The kernel configuraiton option 
+                                         Note: The kernel configuration option 
                                                CONFIG_WANPIPE_CARDS has been taken out.
                                        
                                o Fixed the Frame Relay and Chdlc network interfaces so they are
index 9ff966bf76e65be0fc6281d879d673ce0f861143..28037aa1846c89bbf8082007b5e10e470000ac94 100644 (file)
@@ -184,7 +184,7 @@ static const struct pnp_id pnp_dev_table[] = {
 Please note that the character 'X' can be used as a wild card in the function
 portion (last four characters).
 ex:
-       /* Unkown PnP modems */
+       /* Unknown PnP modems */
        {       "PNPCXXX",              UNKNOWN_DEV     },
 
 Supported PnP card IDs can optionally be defined.
index 24edf25b3bb7f17179f23ca644bd3f341943b19a..c750f9f2e76e661d723e15658334f546ef7e06a7 100644 (file)
@@ -153,7 +153,7 @@ Description:
        events, which is implicit if it doesn't even support it in the first
        place).
 
-       Note that the PMC Register in the device's PM Capabilties has a bitmask
+       Note that the PMC Register in the device's PM Capabilities has a bitmask
        of the states it supports generating PME# from. D3hot is bit 3 and
        D3cold is bit 4. So, while a value of 4 as the state may not seem
        semantically correct, it is. 
@@ -268,7 +268,7 @@ to wake the system up. (However, it is possible that a device may support
 some non-standard way of generating a wake event on sleep.)
 
 Bits 15:11 of the PMC (Power Mgmt Capabilities) Register in a device's
-PM Capabilties describe what power states the device supports generating a 
+PM Capabilities describe what power states the device supports generating a 
 wake event from:
 
 +------------------+
index 3e5e5d3ff419a2138b7faa908f49f7d1a27bb3fe..0931a330d362c59dd2cb4ddf7d0fb4eb864f247b 100644 (file)
@@ -62,7 +62,7 @@ setup via another operating system for it to use. Despite the
 inconvenience, this method requires minimal work by the kernel, since
 the firmware will also handle restoring memory contents on resume. 
 
-If the kernel is responsible for persistantly saving state, a mechanism 
+If the kernel is responsible for persistently saving state, a mechanism
 called 'swsusp' (Swap Suspend) is used to write memory contents to
 free swap space. swsusp has some restrictive requirements, but should
 work in most cases. Some, albeit outdated, documentation can be found
index 9ea2208b43b5f712c74b3e9d40762fd47a1a7706..e635e6f1e316ca549834716c95fccc3c61b35748 100644 (file)
@@ -153,7 +153,7 @@ add:
 
 If the thread is needed for writing the image to storage, you should
 instead set the PF_NOFREEZE process flag when creating the thread (and
-be very carefull).
+be very careful).
 
 
 Q: What is the difference between "platform", "shutdown" and
index 27b457c09729e29bafaade3bc240bfaebf755e01..4ac2d641fcb6a9b848fdb3c0761ea57b0ec25cb4 100644 (file)
                          - Change version 16 format to always align
                            property data to 4 bytes. Since tokens are
                            already aligned, that means no specific
-                           required alignement between property size
+                           required alignment between property size
                            and property data. The old style variable
                            alignment would make it impossible to do
                            "simple" insertion of properties using
                            memove (thanks Milton for
                            noticing). Updated kernel patch as well
-                        - Correct a few more alignement constraints
+                        - Correct a few more alignment constraints
                         - Add a chapter about the device-tree
                            compiler and the textural representation of
                            the tree that can be "compiled" by dtc.
@@ -854,7 +854,7 @@ address which can extend beyond that limit.
       console device if any. Typically, if you have serial devices on
       your board, you may want to put the full path to the one set as
       the default console in the firmware here, for the kernel to pick
-      it up as it's own default console. If you look at the funciton
+      it up as its own default console. If you look at the function
       set_preferred_console() in arch/ppc64/kernel/setup.c, you'll see
       that the kernel tries to find out the default console and has
       knowledge of various types like 8250 serial ports. You may want
@@ -1124,7 +1124,7 @@ should have the following properties:
        - interrupt-parent : contains the phandle of the interrupt
           controller which handles interrupts for this device
        - interrupts : a list of tuples representing the interrupt
-          number and the interrupt sense and level for each interupt
+          number and the interrupt sense and level for each interrupt
           for this device.
 
 This information is used by the kernel to build the interrupt table
index 8529a17ffaa16a17060d38232085f99e5e8a3624..535f69fab45fa5c1632505abb60b2a119e4c8d8e 100644 (file)
@@ -170,7 +170,7 @@ any point:
  1) the 'head' pointer or an subsequent linked list pointer
     is not a valid address of a user space word
  2) the calculated location of the 'lock word' (address plus
-    'offset') is not the valud address of a 32 bit user space
+    'offset') is not the valid address of a 32 bit user space
     word
  3) if the list contains more than 1 million (subject to
     future kernel configuration changes) elements.
index 76e8064b8c3a5ccb60e6cbb2f55ad5d455d097b0..0a9446a53bd1cd714e97c38695ce0d3c8a883ce8 100644 (file)
@@ -181,7 +181,7 @@ for new threads, without the need of another syscall.]
 So there is virtually zero overhead for tasks not using robust futexes,
 and even for robust futex users, there is only one extra syscall per
 thread lifetime, and the cleanup operation, if it happens, is fast and
-straightforward. The kernel doesnt have any internal distinction between
+straightforward. The kernel doesn't have any internal distinction between
 robust and normal futexes.
 
 If a futex is found to be held at exit time, the kernel sets the
index 29dee792c8875d00a09fe7ce5aa395e6dcf02186..41a8b07da05ad48c2ee048e28c3b0541b4960ee3 100644 (file)
@@ -75,8 +75,8 @@ name of the respective module is given in square brackets.
 
 - SHA1 Digest Algorithm [sha1 -> sha1_z990]
 - DES Encrypt/Decrypt Algorithm (64bit key) [des -> des_z990]
-- Tripple DES Encrypt/Decrypt Algorithm (128bit key) [des3_ede128 -> des_z990]
-- Tripple DES Encrypt/Decrypt Algorithm (192bit key) [des3_ede -> des_z990]
+- Triple DES Encrypt/Decrypt Algorithm (128bit key) [des3_ede128 -> des_z990]
+- Triple DES Encrypt/Decrypt Algorithm (192bit key) [des3_ede -> des_z990]
 
 In order to load, for example, the sha1_z990 module when the sha1 algorithm is
 requested (see 3.2.) add 'alias sha1 sha1_z990' to /etc/modprobe.conf.
index 904d49e90ef267545b00546c1960919cfbe6d2fa..6aa9a891f3d00ec20df21d49c4a531f1ba574a2e 100644 (file)
@@ -127,7 +127,7 @@ The following information is available in this file:
         - Correct a reference to free'ed memory during controller
           shutdown.
         - Reset the bus on an SE->LVD change.  This is required
-          to reset our transcievers.
+          to reset our transceivers.
 
    1.3.5 (March 24th, 2003)
         - Fix a few register window mode bugs.
@@ -169,7 +169,7 @@ The following information is available in this file:
    1.3.0 (January 21st, 2003)
         - Full regression testing for all U320 products completed.
         - Added abort and target/lun reset error recovery handler and
-          interrupt coalessing.
+          interrupt coalescing.
 
    1.2.0 (November 14th, 2002)
         - Added support for Domain Validation
index c92f4473193b06dbfd038e21a18ca4ccdaa2a213..05667e7308d40cfecad6cefbedfcc7bbaedcffd0 100644 (file)
@@ -256,7 +256,7 @@ linux-1.1.x and fairly stable since linux-1.2.x, and are also in FreeBSD
              En/Disable High Byte LVD Termination
 
        The upper 2 bits that deal with LVD termination only apply to Ultra2
-       controllers.  Futhermore, due to the current Ultra2 controller
+       controllers.  Furthermore, due to the current Ultra2 controller
        designs, these bits are tied together such that setting either bit
        enables both low and high byte LVD termination.  It is not possible
        to only set high or low byte LVD termination in this manner.  This is
@@ -436,7 +436,7 @@ linux-1.1.x and fairly stable since linux-1.2.x, and are also in FreeBSD
     the commas to periods, insmod won't interpret this as more than one
     string and write junk into our binary image.  I consider it a bug in
     the insmod program that even if you wrap your string in quotes (quotes
-    that pass the shell mind you and that insmod sees) it still treates
+    that pass the shell mind you and that insmod sees) it still treats
     a comma inside of those quotes as starting a new variable, resulting
     in memory scribbles if you don't switch the commas to periods.
 
index 35f6b8ed229587eb5a9733fe48594b9123b5e32e..9707941704e36ece47dd763cc9ac21dcf5d2468b 100644 (file)
       This needs the RD-Bit to be disabled on IM_OTHER_SCSI_CMD_CMD which 
       allows data to be written from the system to the device. It is a
       necessary step to be allowed to set blocksize of SCSI-tape-drives and 
-      the tape-speed, whithout confusing the SCSI-Subsystem.
+      the tape-speed, without confusing the SCSI-Subsystem.
    2) The recognition of a tape is included in the check_devices routine.
       This is done by checking for TYPE_TAPE, that is already defined in
       the kernel-scsi-environment. The markup of a tape is done in the 
       of troubles with some controllers and after I wanted to apply some
       extensions, it jumped out in the same situation, on my w/cache, as like 
       on D. Weinehalls' Model 56, having integrated SCSI. This gave me the 
-      descissive hint to move the code-part out and declare it global. Now,
-      it seems to work by far much better an more stable. Let us see, what
+      decisive hint to move the code-part out and declare it global. Now
+      it seems to work far better and more stable. Let us see what
       the world thinks of it...
    3) By the way, only Sony DAT-drives seem to show density code 0x13. A
       test with a HP drive gave right results, so the problem is vendor-
    A long period of collecting bugreports from all corners of the world
    now lead to the following corrections to the code:
    1) SCSI-2 F/W support crashed with a COMMAND ERROR. The reason for this 
-      was, that it is possible to disbale Fast-SCSI for the external bus.
-      The feature-control command, where this crash appeared regularly tried
+      was that it is possible to disable Fast-SCSI for the external bus.
+      The feature-control command, where this crash appeared regularly, tried
       to set the maximum speed of 10MHz synchronous transfer speed and that
-      reports a COMMAND ERROR, if external bus Fast-SCSI is disabled. Now,
+      reports a COMMAND ERROR if external bus Fast-SCSI is disabled. Now,
       the feature-command probes down from maximum speed until the adapter 
       stops to complain, which is at the same time the maximum possible
       speed selected in the reference program. So, F/W external can run at
       completed in such a way, that they are now completely conform to the
       demands in the technical description of IBM. Main candidates were the
       DEVICE_INQUIRY, REQUEST_SENSE and DEVICE_CAPACITY commands. They must
-      be tranferred by bypassing the internal command buffer of the adapter
+      be transferred by bypassing the internal command buffer of the adapter
       or else the response can be a random result. GET_POS_INFO would be more
       safe in usage, if one could use the SUPRESS_EXCEPTION_SHORT, but this
       is not allowed by the technical references of IBM. (Sorry, folks, the
index 80f10404264576cf7dd76698fdc3a22253bccbba..c3e2a90475d2519d7fd5339068b061062c628e8d 100644 (file)
@@ -24,7 +24,7 @@ UPDATE NEWS: version 1.32 - 28 Mar 98
 UPDATE NEWS: version 1.31 - 6 Jul 97
 
    Fixed a bug that caused incorrect SCSI status bytes to be
-   returned from commands sent to LUN's greater than 0. This
+   returned from commands sent to LUNs greater than 0. This
    means that CDROM changers work now! Fixed a bug in the
    handling of command-line arguments when loaded as a module.
    Also put all the header data in in2000.h where it belongs.
index 9e2078b2a615c332f227bc4bd841416678f2b4f7..aa54f54c4a50b3e52a0f7f82d929af0757158506 100644 (file)
@@ -393,7 +393,7 @@ struct sas_task {
        task_proto -- _one_ of enum sas_proto
        scatter -- pointer to scatter gather list array
        num_scatter -- number of elements in scatter
-       total_xfer_len -- total number of bytes expected to be transfered
+       total_xfer_len -- total number of bytes expected to be transferred
        data_dir -- PCI_DMA_...
        task_done -- callback when the task has finished execution
 };
index 58ad8db333d9f6b5aeb2f011b0f9f0ee64bf70c0..caf10b1551850e426906e5f8eb6439eb8a9d9743 100644 (file)
@@ -115,7 +115,7 @@ SCSI standard documentations are available at SYMBIOS ftp server:
 
           ftp://ftp.symbios.com/
 
-Usefull SCSI tools written by Eric Youngdale are available at tsx-11:
+Useful SCSI tools written by Eric Youngdale are available at tsx-11:
 
           ftp://tsx-11.mit.edu/pub/linux/ALPHA/scsi/scsiinfo-X.Y.tar.gz
           ftp://tsx-11.mit.edu/pub/linux/ALPHA/scsi/scsidev-X.Y.tar.gz
index d74bbd29eb3a3f2cc576e1fdc979ce2b8f99ccc9..032399b16a539e5be25be8b04d065b8798bc57ed 100644 (file)
@@ -88,7 +88,7 @@ If the module finds the changer, it prints some messages about the
 device [ try "dmesg" if you don't see anything ] and should show up in
 /proc/devices. If not....  some changers use ID ? / LUN 0 for the
 device and ID ? / LUN 1 for the robot mechanism. But Linux does *not*
-look for LUN's other than 0 as default, becauce there are to many
+look for LUNs other than 0 as default, because there are too many
 broken devices. So you can try:
 
   1) echo "scsi add-single-device 0 0 ID 1" > /proc/scsi/scsi
@@ -107,7 +107,7 @@ because the kernel will translate the error codes into human-readable
 strings then.
 
 You can display these messages with the dmesg command (or check the
-logfiles).  If you email me some question becauce of a problem with the
+logfiles).  If you email me some question because of a problem with the
 driver, please include these messages.
 
 
index b964eef2f62fb5236caa6bd3b0cb33d19c645ccc..7acbebb17fa6c42bd07f1da11311dde70b4bc60b 100644 (file)
@@ -75,7 +75,7 @@ with the command.
 
  - otherwise
        scsi_eh_scmd_add(scmd, 0) is invoked for the command.  See
-       [1-3] for details of this funciton.
+       [1-3] for details of this function.
 
 
 [1-2-2] Completing a scmd w/ timeout
index 5ff65b184265f9919ea8f1404a6c6ba63f617034..3c12422f7f41bf67cc6d365937090a81176eb0e0 100644 (file)
@@ -261,7 +261,7 @@ pairs are separated with a comma (no spaces allowed). A colon can be
 used instead of the equal mark. The definition is prepended by the
 string st=. Here is an example:
 
-       st=buffer_kbs:64,write_threhold_kbs:60
+       st=buffer_kbs:64,write_threshold_kbs:60
 
 The following syntax used by the old kernel versions is also supported:
 
index 26c8a08ca3eaf378fffc65805857df02e8d66003..2c1745a9df0052fa634489d3f4b43dd1828a078b 100644 (file)
@@ -609,7 +609,7 @@ appropriate mailing lists or news-groups.  Send me a copy in order to
 be sure I will receive it.  Obviously, a bug in the driver code is
 possible.
 
-  My cyrrent email address: Gerard Roudier <groudier@free.fr>
+  My current email address: Gerard Roudier <groudier@free.fr>
 
 Allowing disconnections is important if you use several devices on
 your SCSI bus but often causes problems with buggy devices.
index 2d8f403eb6eb98a49c78f92bbc41c9172a21646d..ccf1cebe744f8b4a6901ff7f61bd23029562344a 100644 (file)
@@ -942,13 +942,13 @@ replicas continue to be exactly same.
        ->mnt_slave
        ->mnt_master
 
-       ->mnt_share links togather all the mount to/from which this vfsmount
+       ->mnt_share links together all the mount to/from which this vfsmount
                send/receives propagation events.
 
        ->mnt_slave_list links all the mounts to which this vfsmount propagates
                to.
 
-       ->mnt_slave links togather all the slaves that its master vfsmount
+       ->mnt_slave links together all the slaves that its master vfsmount
                propagates to.
 
        ->mnt_master points to the master vfsmount from which this vfsmount
index 3472d9c4ef1b0e637072e75690e474e834e348c5..9fef210ab50ab3914cd6e7d9c261edcb72ec489f 100644 (file)
@@ -955,7 +955,7 @@ Prior to version 0.9.0rc4 options had a 'snd_' prefix. This was removed.
                  dmx6fire, dsp24, dsp24_value, dsp24_71, ez8,
                  phase88, mediastation
     omni       - Omni I/O support for MidiMan M-Audio Delta44/66
-    cs8427_timeout - reset timeout for the CS8427 chip (S/PDIF transciever)
+    cs8427_timeout - reset timeout for the CS8427 chip (S/PDIF transceiver)
                      in msec resolution, default value is 500 (0.5 sec)
 
     This module supports multiple cards and autoprobe. Note: The consumer part
index 5132fd95e0743565c2246eb27b1e22f586a53984..7f10dc6ff28ca443cc0a9e6f8d86734e6399e06f 100644 (file)
@@ -6,7 +6,7 @@ This is based on SB-Live-mixer.txt.
 
 The EMU10K2 chips have a DSP part which can be programmed to support 
 various ways of sample processing, which is described here.
-(This acticle does not deal with the overall functionality of the 
+(This article does not deal with the overall functionality of the 
 EMU10K2 chips. See the manuals section for further details.)
 
 The ALSA driver programs this portion of chip by default code
index 651adaf604733a5114ed2bd86156c9e2a50a040c..f5639d40521df5a60706d542d5dd93ace9f24c1c 100644 (file)
@@ -5,7 +5,7 @@
 
 The EMU10K1 chips have a DSP part which can be programmed to support
 various ways of sample processing, which is described here.
-(This acticle does not deal with the overall functionality of the 
+(This article does not deal with the overall functionality of the 
 EMU10K1 chips. See the manuals section for further details.)
 
 The ALSA driver programs this portion of chip by default code
index 02a481225b0d497c9182bcc2bcf40bb06079b4d5..c815c5206e8401e7f1f7c188bdd4b70beb27d787 100644 (file)
@@ -50,7 +50,7 @@ Review cycle:
    Contact the kernel security team for more details on this procedure.
 
 
-Review committe:
+Review committee:
 
  - This is made up of a number of kernel developers who have volunteered for
    this task, and a few that haven't.
index 5c3a51905969cabc9ef7d1f26178aadbb476d612..aa986a35e9945071abed471776565a2cf4644787 100644 (file)
@@ -146,7 +146,7 @@ or otherwise protected/tainted binaries. The modes are
        readable by root only. This allows the end user to remove
        such a dump but not access it directly. For security reasons
        core dumps in this mode will not overwrite one another or
-       other files. This mode is appropriate when adminstrators are
+       other files. This mode is appropriate when administrators are
        attempting to debug problems in a normal environment.
 
 ==============================================================
index 20d0d797f539ce51d18f903aa4aec942ead16643..e96a341eb7e425249cd19babb7e1f8f972001fa2 100644 (file)
@@ -129,7 +129,7 @@ the high water marks for each per cpu page list.
 
 zone_reclaim_mode:
 
-Zone_reclaim_mode allows to set more or less agressive approaches to
+Zone_reclaim_mode allows someone to set more or less aggressive approaches to
 reclaim memory when a zone runs out of memory. If it is set to zero then no
 zone reclaim occurs. Allocations will be satisfied from other zones / nodes
 in the system.
index b60590eca18fbc168a6aaa1800cf1163b06111ac..628013f944c4e0c090b2e70b4d625e6942948e27 100644 (file)
 
 
 
-  Making it world-writeable looks bad, but it seems not to be
+  Making it world-writable looks bad, but it seems not to be
   exploitable as a security hole.  However, it does allow anyone to cre-
   ate useless tap devices (useless because they can't configure them),
   which is a DOS attack.  A somewhat more secure alternative would to be
index 6a790754e963bacbd536b59e5c9b13ac24e21f83..6e8c9f1d2f223448b4e070ee1801e2c9ede36e79 100644 (file)
@@ -8,7 +8,7 @@ interfaces, but have similar sorts of communication needs. The two big
 examples for this are power devices (especially uninterruptable power
 supplies) and monitor control on higher end monitors.
 
-To support these disparite requirements, the Linux USB system provides
+To support these disparate requirements, the Linux USB system provides
 HID events to two separate interfaces:
 * the input subsystem, which converts HID events into normal input
 device interfaces (such as keyboard, mouse and joystick) and a
index ab21db454694a603b31bdbecb627cd6b17d2d8a1..aee715af7db741be230d754dc468bbb9709e81d6 100644 (file)
@@ -24,10 +24,10 @@ are in no way responsible for any damage that may occur, no matter how
 inconsequential.
 
 It seems that the Rio has a problem when sending .mp3 with low batteries.
-I suggest when the batteries are low and want to transfer stuff that you
+I suggest when the batteries are low and you want to transfer stuff that you
 replace it with a fresh one. In my case, what happened is I lost two 16kb
 blocks (they are no longer usable to store information to it). But I don't
-know if thats normal or not. It could simply be a problem with the flash 
+know if that's normal or not; it could simply be a problem with the flash 
 memory.
 
 In an extreme case, I left my Rio playing overnight and the batteries wore 
index 50436e1663eaa18b043c5370e5c16eb63dfe18e7..d61f6e7865def51b2ba281daa01d4c873f7311c9 100644 (file)
@@ -175,7 +175,7 @@ Keyspan USA-series Serial Adapters
   
   Current status:
     The USA-18X, USA-28X, USA-19, USA-19W and USA-49W are supported and
-    have been pretty throughly tested at various baud rates with 8-N-1
+    have been pretty thoroughly tested at various baud rates with 8-N-1
     character settings.  Other character lengths and parity setups are
     presently untested.
 
@@ -253,7 +253,7 @@ Cypress M8 CY4601 Family Serial Driver
        together without hacking the adapter to set the line high.
 
        The driver is smp safe.  Performance with the driver is rather low when using
-       it for transfering files.  This is being worked on, but I would be willing to
+       it for transferring files.  This is being worked on, but I would be willing to
        accept patches.  An urb queue or packet buffer would likely fit the bill here.
 
        If you have any questions, problems, patches, feature requests, etc. you can
@@ -297,7 +297,7 @@ Belkin USB Serial Adapter F5U103
       Parity       N,E,O,M,S
       Handshake    None, Software (XON/XOFF), Hardware (CTSRTS,CTSDTR)*
       Break        Set and clear
-      Line contr Input/Output query and control **
+      Line control Input/Output query and control **
 
       *  Hardware input flow control is only enabled for firmware
          levels above 2.06.  Read source code comments describing Belkin
@@ -309,7 +309,7 @@ Belkin USB Serial Adapter F5U103
          automatic hardware flow control.
 
   TO DO List:
-    -- Add true modem contol line query capability.  Currently tracks the
+    -- Add true modem control line query capability.  Currently tracks the
        states reported by the interrupt and the states requested.
     -- Add error reporting back to application for UART error conditions.
     -- Add support for flush ioctls.
index 7e8ae83e9847bcdaad064cb1eaa2c0e609da4b66..8d16f6f3c4eccbbba5e28f1e7f60db24ad942fa7 100644 (file)
@@ -214,7 +214,7 @@ returned value is the temperature in degrees fahrenheit.
 
 Finally the SETOPTIONS ioctl can be used to control some aspects of
 the cards operation; right now the pcwd driver is the only one
-supporting thiss ioctl.
+supporting this ioctl.
 
     int options = 0;
     ioctl(fd, WDIOC_SETOPTIONS, options);
index e182992ff79955834ea9ab7871afd4003fdcdc22..846e77a787105a6f16e8332c0a30e879375e41eb 100644 (file)
@@ -155,16 +155,16 @@ L:        netdev@vger.kernel.org
 S:     Maintained
 
 9P FILE SYSTEM
-P:      Eric Van Hensbergen
-M:      ericvh@gmail.com
-P:      Ron Minnich
-M:      rminnich@lanl.gov
-P:      Latchesar Ionkov
-M:      lucho@ionkov.net
-L:      v9fs-developer@lists.sourceforge.net
-W:      http://v9fs.sf.net
-T:      git kernel.org:/pub/scm/linux/kernel/ericvh/v9fs.git
-S:      Maintained
+P:     Eric Van Hensbergen
+M:     ericvh@gmail.com
+P:     Ron Minnich
+M:     rminnich@lanl.gov
+P:     Latchesar Ionkov
+M:     lucho@ionkov.net
+L:     v9fs-developer@lists.sourceforge.net
+W:     http://v9fs.sf.net
+T:     git kernel.org:/pub/scm/linux/kernel/ericvh/v9fs.git
+S:     Maintained
 
 A2232 SERIAL BOARD DRIVER
 P:     Enver Haase
@@ -290,8 +290,8 @@ M:  ink@jurassic.park.msu.ru
 S:     Maintained for 2.4; PCI support for 2.6.
 
 AMD GEODE PROCESSOR/CHIPSET SUPPORT
-P:      Jordan Crouse
-M:      info-linux@geode.amd.com
+P:     Jordan Crouse
+M:     info-linux@geode.amd.com
 L:     info-linux@geode.amd.com
 W:     http://www.amd.com/us-en/ConnectivitySolutions/TechnicalResources/0,,50_2334_2452_11363,00.html
 S:     Supported
@@ -601,13 +601,13 @@ M:        maxk@qualcomm.com
 S:     Maintained
 
 BONDING DRIVER
-P:   Chad Tindel
-M:   ctindel@users.sourceforge.net
-P:   Jay Vosburgh
-M:   fubar@us.ibm.com
-L:   bonding-devel@lists.sourceforge.net
-W:   http://sourceforge.net/projects/bonding/
-S:   Supported
+P:     Chad Tindel
+M:     ctindel@users.sourceforge.net
+P:     Jay Vosburgh
+M:     fubar@us.ibm.com
+L:     bonding-devel@lists.sourceforge.net
+W:     http://sourceforge.net/projects/bonding/
+S:     Supported
 
 BROADBAND PROCESSOR ARCHITECTURE
 P:     Arnd Bergmann
@@ -744,8 +744,8 @@ W:  http://www.bullopensource.org/cpuset/
 S:     Supported
 
 CRAMFS FILESYSTEM
-W:     http://sourceforge.net/projects/cramfs/
-S:     Orphan
+W:     http://sourceforge.net/projects/cramfs/
+S:     Orphan
 
 CRIS PORT
 P:     Mikael Starvik
@@ -1054,11 +1054,11 @@ W:      http://sourceforge.net/projects/emu10k1/
 S:     Maintained
 
 EMULEX LPFC FC SCSI DRIVER
-P:      James Smart
-M:      james.smart@emulex.com
-L:      linux-scsi@vger.kernel.org
-W:      http://sourceforge.net/projects/lpfcxxxx
-S:      Supported
+P:     James Smart
+M:     james.smart@emulex.com
+L:     linux-scsi@vger.kernel.org
+W:     http://sourceforge.net/projects/lpfcxxxx
+S:     Supported
 
 EPSON 1355 FRAMEBUFFER DRIVER
 P:     Christopher Hoover
@@ -1495,16 +1495,16 @@ L:      linux-kernel@vger.kernel.org
 S:     Maintained
 
 INTEL FRAMEBUFFER DRIVER (excluding 810 and 815)
-P:      Sylvain Meyer
-M:      sylvain.meyer@worldonline.fr
-L:      linux-fbdev-devel@lists.sourceforge.net
-S:      Maintained
+P:     Sylvain Meyer
+M:     sylvain.meyer@worldonline.fr
+L:     linux-fbdev-devel@lists.sourceforge.net
+S:     Maintained
 
 INTEL 810/815 FRAMEBUFFER DRIVER
-P:      Antonino Daplas
-M:      adaplas@pol.net
-L:      linux-fbdev-devel@lists.sourceforge.net
-S:      Maintained
+P:     Antonino Daplas
+M:     adaplas@pol.net
+L:     linux-fbdev-devel@lists.sourceforge.net
+S:     Maintained
 
 INTEL APIC/IOAPIC, LOWLEVEL X86 SMP SUPPORT
 P:     Ingo Molnar
@@ -1830,11 +1830,11 @@ L:      linuxppc-embedded@ozlabs.org
 S:     Maintained
 
 LINUX FOR POWERPC EMBEDDED PPC83XX AND PPC85XX
-P:     Kumar Gala
-M:     galak@kernel.crashing.org
-W:     http://www.penguinppc.org/
-L:     linuxppc-embedded@ozlabs.org
-S:     Maintained
+P:     Kumar Gala
+M:     galak@kernel.crashing.org
+W:     http://www.penguinppc.org/
+L:     linuxppc-embedded@ozlabs.org
+S:     Maintained
 
 LINUX FOR POWERPC PA SEMI PWRFICIENT
 P:     Olof Johansson
@@ -1933,10 +1933,10 @@ W:      http://www.syskonnect.com
 S:     Supported
 
 MAN-PAGES: MANUAL PAGES FOR LINUX -- Sections 2, 3, 4, 5, and 7
-P: Michael Kerrisk
-M: mtk-manpages@gmx.net
-W: ftp://ftp.kernel.org/pub/linux/docs/manpages
-S: Maintained
+P:     Michael Kerrisk
+M:     mtk-manpages@gmx.net
+W:     ftp://ftp.kernel.org/pub/linux/docs/manpages
+S:     Maintained
 
 MARVELL MV643XX ETHERNET DRIVER
 P:     Dale Farnsworth
@@ -1953,11 +1953,11 @@ L:      linux-fbdev-devel@lists.sourceforge.net
 S:     Maintained
 
 MEGARAID SCSI DRIVERS
-P:     Neela Syam Kolli
-M:     Neela.Kolli@engenio.com
-S:     linux-scsi@vger.kernel.org
-W:     http://megaraid.lsilogic.com
-S:     Maintained
+P:     Neela Syam Kolli
+M:     Neela.Kolli@engenio.com
+S:     linux-scsi@vger.kernel.org
+W:     http://megaraid.lsilogic.com
+S:     Maintained
 
 MEMORY MANAGEMENT
 L:     linux-mm@kvack.org
@@ -2186,10 +2186,10 @@ T:      git kernel.org:/pub/scm/linux/kernel/git/aia21/ntfs-2.6.git
 S:     Maintained
 
 NVIDIA (rivafb and nvidiafb) FRAMEBUFFER DRIVER
-P:      Antonino Daplas
-M:      adaplas@pol.net
-L:      linux-fbdev-devel@lists.sourceforge.net
-S:      Maintained
+P:     Antonino Daplas
+M:     adaplas@pol.net
+L:     linux-fbdev-devel@lists.sourceforge.net
+S:     Maintained
 
 OPENCORES I2C BUS DRIVER
 P:     Peter Korsgaard
@@ -2539,10 +2539,10 @@ RISCOM8 DRIVER
 S:     Orphan
 
 S3 SAVAGE FRAMEBUFFER DRIVER
-P:      Antonino Daplas
-M:      adaplas@pol.net
-L:      linux-fbdev-devel@lists.sourceforge.net
-S:      Maintained
+P:     Antonino Daplas
+M:     adaplas@pol.net
+L:     linux-fbdev-devel@lists.sourceforge.net
+S:     Maintained
 
 S390
 P:     Martin Schwidefsky
@@ -2623,10 +2623,10 @@ L:      linux-scsi@vger.kernel.org
 S:     Maintained
 
 SCTP PROTOCOL
-P: Sridhar Samudrala
-M: sri@us.ibm.com
-L: lksctp-developers@lists.sourceforge.net
-S: Supported
+P:     Sridhar Samudrala
+M:     sri@us.ibm.com
+L:     lksctp-developers@lists.sourceforge.net
+S:     Supported
 
 SCx200 CPU SUPPORT
 P:     Jim Cromie
@@ -2794,9 +2794,9 @@ L:        tpmdd-devel@lists.sourceforge.net
 S:     Maintained
 
 Telecom Clock Driver for MCPL0010
-P: Mark Gross
-M: mark.gross@intel.com
-S: Supported
+P:     Mark Gross
+M:     mark.gross@intel.com
+S:     Supported
 
 TENSILICA XTENSA PORT (xtensa):
 P:     Chris Zankel
@@ -2943,9 +2943,9 @@ L:        linux-kernel@vger.kernel.org
 S:     Maintained
 
 TI PARALLEL LINK CABLE DRIVER
-P:     Romain Lievin
-M:     roms@lpg.ticalc.org
-S:     Maintained
+P:     Romain Lievin
+M:     roms@lpg.ticalc.org
+S:     Maintained
 
 TIPC NETWORK LAYER
 P:     Per Liden
@@ -2995,12 +2995,12 @@ L:      linux-kernel@vger.kernel.org
 S:     Maintained
 
 TRIVIAL PATCHES
-P:      Adrian Bunk
-M:      trivial@kernel.org
-L:      linux-kernel@vger.kernel.org
-W:      http://www.kernel.org/pub/linux/kernel/people/bunk/trivial/
-T:      git kernel.org:/pub/scm/linux/kernel/git/bunk/trivial.git
-S:      Maintained
+P:     Adrian Bunk
+M:     trivial@kernel.org
+L:     linux-kernel@vger.kernel.org
+W:     http://www.kernel.org/pub/linux/kernel/people/bunk/trivial/
+T:     git kernel.org:/pub/scm/linux/kernel/git/bunk/trivial.git
+S:     Maintained
 
 TMS380 TOKEN-RING NETWORK DRIVER
 P:     Adam Fritzler
index 57f23b4653927a5fcb83c9eaed9cce6cd17ca583..e316bd93313f656215588f30488188860c9da7b7 100644 (file)
@@ -133,7 +133,7 @@ config IXP4XX_INDIRECT_PCI
              into the kernel and we can use the standard read[bwl]/write[bwl]
              macros. This is the preferred method due to speed but it
              limits the system to just 64MB of PCI memory. This can be 
-             problamatic if using video cards and other memory-heavy devices.
+             problematic if using video cards and other memory-heavy devices.
           
           2) If > 64MB of memory space is required, the IXP4xx can be 
             configured to use indirect registers to access PCI This allows 
index 147b01928a9b49b612e7ae3bf16c3d2d84f816c6..6f4c6a1798c13ace0388cdef77df2427a17134c6 100644 (file)
@@ -8,7 +8,7 @@ config MACH_KEV7A400
        help
          Say Y here if you are using the Sharp KEV7A400 development
          board.  This hardware is discontinued, so I'd be very
-         suprised if you wanted this option.
+         surprised if you wanted this option.
 
 config MACH_LPD7A400
        bool "LPD7A400 Card Engine"
index 63965c78de8c652be823c23b9de504231c1a6479..9aa26b99045dfd58251363ac957d72d73ad5b8b4 100644 (file)
@@ -91,7 +91,7 @@ config SMDK2440_CPU2442
 config MACH_S3C2413
        bool
        help
-         Internal node for S3C2413 verison of SMDK2413, so that
+         Internal node for S3C2413 version of SMDK2413, so that
          machine_is_s3c2413() will work when MACH_SMDK2413 is
          selected
 
index c0bfb8212b7742abda15da17ffd47b09c3fe24e2..b09a19f87d682d084dcc08995ecfb18c085df4b9 100644 (file)
@@ -197,7 +197,7 @@ config CPU_ARM940T
        select CPU_CP15_MPU
        help
          ARM940T is a member of the ARM9TDMI family of general-
-         purpose microprocessors with MPU and seperate 4KB
+         purpose microprocessors with MPU and separate 4KB
          instruction and 4KB data cases, each with a 4-word line
          length.
 
index 44eb1b9accb374c89f3a0f75ebe39693ae53a7f0..c7ea9efd01049875e9e8a46f99b779480d008189 100644 (file)
@@ -323,7 +323,7 @@ config ETRAX_DEF_R_WAITSTATES
        depends on ETRAX_ARCH_V10
        default "95a6"
        help
-         Waitstates for SRAM, Flash and peripherials (not DRAM).  95f8 is a
+         Waitstates for SRAM, Flash and peripherals (not DRAM).  95f8 is a
          good choice for most Axis products...
 
 config ETRAX_DEF_R_BUS_CONFIG
index 734d5f3a530411ef71450325de866394daca1055..e7e724bc0ba6d701688365c118c57f59795ab697 100644 (file)
@@ -839,7 +839,7 @@ config ETRAX_DS1302_TRICKLE_CHARGE
        default "0"
        help
          This controls the initial value of the trickle charge register.
-         0 = disabled (use this if you are unsure or have a non rechargable battery)
+         0 = disabled (use this if you are unsure or have a non rechargeable battery)
          Otherwise the following values can be OR:ed together to control the
          charge current:
          1 = 2kohm, 2 = 4kohm, 3 = 4kohm
index 6e1f191a71e3f96b62744814b91b4c5c5cceffae..284ebfda03f05a672def45c46777f62f01c91034 100644 (file)
@@ -1,7 +1,7 @@
 /*!*****************************************************************************
 *!
-*!  Implements an interface for i2c compatible eeproms to run under linux.
-*!  Supports 2k, 8k(?) and 16k. Uses adaptive timing adjustents by
+*!  Implements an interface for i2c compatible eeproms to run under Linux.
+*!  Supports 2k, 8k(?) and 16k. Uses adaptive timing adjustments by
 *!  Johan.Adolfsson@axis.com
 *!
 *!  Probing results:
@@ -51,7 +51,7 @@
 *!  Revision 1.8  2001/06/15 13:24:29  jonashg
 *!  * Added verification of pointers from userspace in read and write.
 *!  * Made busy counter volatile.
-*!  * Added define for inital write delay.
+*!  * Added define for initial write delay.
 *!  * Removed warnings by using loff_t instead of unsigned long.
 *!
 *!  Revision 1.7  2001/06/14 15:26:54  jonashg
index 6114596c3b3369298546cc355d8b8c52bc8a6517..092c724a645f8096b32c07c60de600dd665da932 100644 (file)
@@ -47,7 +47,7 @@
 *! Update Port B register and shadow even when running with hardware support
 *!   to avoid glitches when reading bits
 *! Never set direction to out in i2c_inbyte
-*! Removed incorrect clock togling at end of i2c_inbyte
+*! Removed incorrect clock toggling at end of i2c_inbyte
 *!
 *! Revision 1.8  2002/08/13 06:31:53  starvik
 *! Made SDA and SCL line configurable
index 34528da9881792a029bf23163b143937ea1dc18f..07628a13c6c492c8c9574caeefd5c5fca6c3a894 100644 (file)
@@ -33,7 +33,7 @@
 *!
 *! Revision 1.2  2002/11/19 14:35:24  starvik
 *! Changes from linux 2.4
-*! Changed struct initializer syntax to the currently prefered notation
+*! Changed struct initializer syntax to the currently preferred notation
 *!
 *! Revision 1.1  2001/12/17 13:59:27  bjornw
 *! Initial revision
index a33097f95362bf8f6ad180941111dd9701d03fef..f64624fc4504bef716e5971ae5290011c5fed9f0 100644 (file)
@@ -88,7 +88,7 @@ config ETRAX_SERIAL_PORT0_DMA7_IN
        help
          Enables the DMA7 input channel for ser0 (ttyS0).
          If you do not enable DMA, an interrupt for each character will be
-         used when receiveing data.
+         used when receiving data.
          Normally you want to use DMA, unless you use the DMA channel for
          something else.
 
@@ -157,7 +157,7 @@ config ETRAX_SERIAL_PORT1_DMA5_IN
        help
          Enables the DMA5 input channel for ser1 (ttyS1).
          If you do not enable DMA, an interrupt for each character will be
-         used when receiveing data.
+         used when receiving data.
          Normally you want this on, unless you use the DMA channel for
          something else.
 
@@ -228,7 +228,7 @@ config ETRAX_SERIAL_PORT2_DMA3_IN
        help
          Enables the DMA3 input channel for ser2 (ttyS2).
          If you do not enable DMA, an interrupt for each character will be
-         used when receiveing data.
+         used when receiving data.
          Normally you want to use DMA, unless you use the DMA channel for
          something else.
 
@@ -297,7 +297,7 @@ config ETRAX_SERIAL_PORT3_DMA9_IN
        help
          Enables the DMA9 input channel for ser3 (ttyS3).
          If you do not enable DMA, an interrupt for each character will be
-         used when receiveing data.
+         used when receiving data.
          Normally you want to use DMA, unless you use the DMA channel for
          something else.
 
index fde8bea85cee82b26ca31a34db989aab39e0a723..ab0c327e79dcc3ffde57dce2bfc50b97b9ed69ba 100644 (file)
@@ -156,14 +156,14 @@ static struct file_operations cpuid_fops = {
        .open = cpuid_open,
 };
 
-static int cpuid_class_device_create(int i)
+static int cpuid_device_create(int i)
 {
        int err = 0;
-       struct class_device *class_err;
+       struct device *dev;
 
-       class_err = class_device_create(cpuid_class, NULL, MKDEV(CPUID_MAJOR, i), NULL, "cpu%d",i);
-       if (IS_ERR(class_err))
-               err = PTR_ERR(class_err);
+       dev = device_create(cpuid_class, NULL, MKDEV(CPUID_MAJOR, i), "cpu%d",i);
+       if (IS_ERR(dev))
+               err = PTR_ERR(dev);
        return err;
 }
 
@@ -174,10 +174,10 @@ static int cpuid_class_cpu_callback(struct notifier_block *nfb, unsigned long ac
 
        switch (action) {
        case CPU_ONLINE:
-               cpuid_class_device_create(cpu);
+               cpuid_device_create(cpu);
                break;
        case CPU_DEAD:
-               class_device_destroy(cpuid_class, MKDEV(CPUID_MAJOR, cpu));
+               device_destroy(cpuid_class, MKDEV(CPUID_MAJOR, cpu));
                break;
        }
        return NOTIFY_OK;
@@ -206,7 +206,7 @@ static int __init cpuid_init(void)
                goto out_chrdev;
        }
        for_each_online_cpu(i) {
-               err = cpuid_class_device_create(i);
+               err = cpuid_device_create(i);
                if (err != 0) 
                        goto out_class;
        }
@@ -218,7 +218,7 @@ static int __init cpuid_init(void)
 out_class:
        i = 0;
        for_each_online_cpu(i) {
-               class_device_destroy(cpuid_class, MKDEV(CPUID_MAJOR, i));
+               device_destroy(cpuid_class, MKDEV(CPUID_MAJOR, i));
        }
        class_destroy(cpuid_class);
 out_chrdev:
@@ -232,7 +232,7 @@ static void __exit cpuid_exit(void)
        int cpu = 0;
 
        for_each_online_cpu(cpu)
-               class_device_destroy(cpuid_class, MKDEV(CPUID_MAJOR, cpu));
+               device_destroy(cpuid_class, MKDEV(CPUID_MAJOR, cpu));
        class_destroy(cpuid_class);
        unregister_chrdev(CPUID_MAJOR, "cpu/cpuid");
        unregister_hotcpu_notifier(&cpuid_class_cpu_notifier);
index d535cdbbfd256f5087480f7a75eebc640e9cebc3..a773f776c9ea3bef1627644e367f224f62105921 100644 (file)
@@ -239,14 +239,14 @@ static struct file_operations msr_fops = {
        .open = msr_open,
 };
 
-static int msr_class_device_create(int i)
+static int msr_device_create(int i)
 {
        int err = 0;
-       struct class_device *class_err;
+       struct device *dev;
 
-       class_err = class_device_create(msr_class, NULL, MKDEV(MSR_MAJOR, i), NULL, "msr%d",i);
-       if (IS_ERR(class_err)) 
-               err = PTR_ERR(class_err);
+       dev = device_create(msr_class, NULL, MKDEV(MSR_MAJOR, i), "msr%d",i);
+       if (IS_ERR(dev))
+               err = PTR_ERR(dev);
        return err;
 }
 
@@ -258,10 +258,10 @@ static int msr_class_cpu_callback(struct notifier_block *nfb,
 
        switch (action) {
        case CPU_ONLINE:
-               msr_class_device_create(cpu);
+               msr_device_create(cpu);
                break;
        case CPU_DEAD:
-               class_device_destroy(msr_class, MKDEV(MSR_MAJOR, cpu));
+               device_destroy(msr_class, MKDEV(MSR_MAJOR, cpu));
                break;
        }
        return NOTIFY_OK;
@@ -290,7 +290,7 @@ static int __init msr_init(void)
                goto out_chrdev;
        }
        for_each_online_cpu(i) {
-               err = msr_class_device_create(i);
+               err = msr_device_create(i);
                if (err != 0)
                        goto out_class;
        }
@@ -302,7 +302,7 @@ static int __init msr_init(void)
 out_class:
        i = 0;
        for_each_online_cpu(i)
-               class_device_destroy(msr_class, MKDEV(MSR_MAJOR, i));
+               device_destroy(msr_class, MKDEV(MSR_MAJOR, i));
        class_destroy(msr_class);
 out_chrdev:
        unregister_chrdev(MSR_MAJOR, "cpu/msr");
@@ -314,7 +314,7 @@ static void __exit msr_exit(void)
 {
        int cpu = 0;
        for_each_online_cpu(cpu)
-               class_device_destroy(msr_class, MKDEV(MSR_MAJOR, cpu));
+               device_destroy(msr_class, MKDEV(MSR_MAJOR, cpu));
        class_destroy(msr_class);
        unregister_chrdev(MSR_MAJOR, "cpu/msr");
        unregister_hotcpu_notifier(&msr_class_cpu_notifier);
index 25fe66853934ce2d8e6103f32ea8ac551ccd4fb9..5c8c6ef1fc5e650c3af994b0c5d569b3e693fbca 100644 (file)
@@ -75,7 +75,7 @@ EXPORT_SYMBOL(dma_free_coherent);
 int dma_declare_coherent_memory(struct device *dev, dma_addr_t bus_addr,
                                dma_addr_t device_addr, size_t size, int flags)
 {
-       void __iomem *mem_base;
+       void __iomem *mem_base = NULL;
        int pages = size >> PAGE_SHIFT;
        int bitmap_size = (pages + 31)/32;
 
@@ -114,6 +114,8 @@ int dma_declare_coherent_memory(struct device *dev, dma_addr_t bus_addr,
  free1_out:
        kfree(dev->dma_mem->bitmap);
  out:
+       if (mem_base)
+               iounmap(mem_base);
        return 0;
 }
 EXPORT_SYMBOL(dma_declare_coherent_memory);
index cdfcf971098b642c7d68c3141f4a93fcf82869a4..53ca6e897984a669e4a36ef23295bb0f9e30d561 100644 (file)
@@ -20,7 +20,7 @@
 unsigned int pci_probe = PCI_PROBE_BIOS | PCI_PROBE_CONF1 | PCI_PROBE_CONF2 |
                                PCI_PROBE_MMCONF;
 
-int pci_bf_sort;
+static int pci_bf_sort;
 int pci_routeirq;
 int pcibios_last_bus = -1;
 unsigned long pirq_table_addr;
index c1949ff38d618c81dca67effe5e44c306c693b39..cde1170b01a1490e256ab2900cfef82f97787e0f 100644 (file)
@@ -74,52 +74,6 @@ static void __devinit  pci_fixup_ncr53c810(struct pci_dev *d)
 }
 DECLARE_PCI_FIXUP_HEADER(PCI_VENDOR_ID_NCR, PCI_DEVICE_ID_NCR_53C810, pci_fixup_ncr53c810);
 
-static void __devinit pci_fixup_ide_bases(struct pci_dev *d)
-{
-       int i;
-
-       /*
-        * PCI IDE controllers use non-standard I/O port decoding, respect it.
-        */
-       if ((d->class >> 8) != PCI_CLASS_STORAGE_IDE)
-               return;
-       DBG("PCI: IDE base address fixup for %s\n", pci_name(d));
-       for(i=0; i<4; i++) {
-               struct resource *r = &d->resource[i];
-               if ((r->start & ~0x80) == 0x374) {
-                       r->start |= 2;
-                       r->end = r->start;
-               }
-       }
-}
-DECLARE_PCI_FIXUP_HEADER(PCI_ANY_ID, PCI_ANY_ID, pci_fixup_ide_bases);
-
-static void __devinit  pci_fixup_ide_trash(struct pci_dev *d)
-{
-       int i;
-
-       /*
-        * Runs the fixup only for the first IDE controller
-        * (Shai Fultheim - shai@ftcon.com)
-        */
-       static int called = 0;
-       if (called)
-               return;
-       called = 1;
-
-       /*
-        * There exist PCI IDE controllers which have utter garbage
-        * in first four base registers. Ignore that.
-        */
-       DBG("PCI: IDE base address trash cleared for %s\n", pci_name(d));
-       for(i=0; i<4; i++)
-               d->resource[i].start = d->resource[i].end = d->resource[i].flags = 0;
-}
-DECLARE_PCI_FIXUP_HEADER(PCI_VENDOR_ID_SI, PCI_DEVICE_ID_SI_5513, pci_fixup_ide_trash);
-DECLARE_PCI_FIXUP_HEADER(PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_INTEL_82801CA_10, pci_fixup_ide_trash);
-DECLARE_PCI_FIXUP_HEADER(PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_INTEL_82801CA_11, pci_fixup_ide_trash);
-DECLARE_PCI_FIXUP_HEADER(PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_INTEL_82801DB_9, pci_fixup_ide_trash);
-
 static void __devinit  pci_fixup_latency(struct pci_dev *d)
 {
        /*
index 98580292f0d4d8a1005500fa6d6335839427018b..43005f04442424173db59704f39091306bf50c59 100644 (file)
@@ -104,16 +104,24 @@ static void __init pcibios_allocate_bus_resources(struct list_head *bus_list)
        /* Depth-First Search on bus tree */
        list_for_each_entry(bus, bus_list, node) {
                if ((dev = bus->self)) {
-                       for (idx = PCI_BRIDGE_RESOURCES; idx < PCI_NUM_RESOURCES; idx++) {
+                       for (idx = PCI_BRIDGE_RESOURCES;
+                           idx < PCI_NUM_RESOURCES; idx++) {
                                r = &dev->resource[idx];
                                if (!r->flags)
                                        continue;
                                pr = pci_find_parent_resource(dev, r);
-                               if (!r->start || !pr || request_resource(pr, r) < 0) {
-                                       printk(KERN_ERR "PCI: Cannot allocate resource region %d of bridge %s\n", idx, pci_name(dev));
-                                       /* Something is wrong with the region.
-                                          Invalidate the resource to prevent child
-                                          resource allocations in this range. */
+                               if (!r->start || !pr ||
+                                   request_resource(pr, r) < 0) {
+                                       printk(KERN_ERR "PCI: Cannot allocate "
+                                               "resource region %d "
+                                               "of bridge %s\n",
+                                               idx, pci_name(dev));
+                                       /*
+                                        * Something is wrong with the region.
+                                        * Invalidate the resource to prevent
+                                        * child resource allocations in this
+                                        * range.
+                                        */
                                        r->flags = 0;
                                }
                        }
@@ -131,7 +139,7 @@ static void __init pcibios_allocate_resources(int pass)
 
        for_each_pci_dev(dev) {
                pci_read_config_word(dev, PCI_COMMAND, &command);
-               for(idx = 0; idx < 6; idx++) {
+               for (idx = 0; idx < PCI_ROM_RESOURCE; idx++) {
                        r = &dev->resource[idx];
                        if (r->parent)          /* Already allocated */
                                continue;
@@ -142,11 +150,15 @@ static void __init pcibios_allocate_resources(int pass)
                        else
                                disabled = !(command & PCI_COMMAND_MEMORY);
                        if (pass == disabled) {
-                               DBG("PCI: Resource %08lx-%08lx (f=%lx, d=%d, p=%d)\n",
+                               DBG("PCI: Resource %08lx-%08lx "
+                                   "(f=%lx, d=%d, p=%d)\n",
                                    r->start, r->end, r->flags, disabled, pass);
                                pr = pci_find_parent_resource(dev, r);
                                if (!pr || request_resource(pr, r) < 0) {
-                                       printk(KERN_ERR "PCI: Cannot allocate resource region %d of device %s\n", idx, pci_name(dev));
+                                       printk(KERN_ERR "PCI: Cannot allocate "
+                                               "resource region %d "
+                                               "of device %s\n",
+                                               idx, pci_name(dev));
                                        /* We'll assign a new address later */
                                        r->end -= r->start;
                                        r->start = 0;
@@ -156,12 +168,16 @@ static void __init pcibios_allocate_resources(int pass)
                if (!pass) {
                        r = &dev->resource[PCI_ROM_RESOURCE];
                        if (r->flags & IORESOURCE_ROM_ENABLE) {
-                               /* Turn the ROM off, leave the resource region, but keep it unregistered. */
+                               /* Turn the ROM off, leave the resource region,
+                                * but keep it unregistered. */
                                u32 reg;
-                               DBG("PCI: Switching off ROM of %s\n", pci_name(dev));
+                               DBG("PCI: Switching off ROM of %s\n",
+                                       pci_name(dev));
                                r->flags &= ~IORESOURCE_ROM_ENABLE;
-                               pci_read_config_dword(dev, dev->rom_base_reg, &reg);
-                               pci_write_config_dword(dev, dev->rom_base_reg, reg & ~PCI_ROM_ADDRESS_ENABLE);
+                               pci_read_config_dword(dev,
+                                               dev->rom_base_reg, &reg);
+                               pci_write_config_dword(dev, dev->rom_base_reg,
+                                               reg & ~PCI_ROM_ADDRESS_ENABLE);
                        }
                }
        }
@@ -173,9 +189,11 @@ static int __init pcibios_assign_resources(void)
        struct resource *r, *pr;
 
        if (!(pci_probe & PCI_ASSIGN_ROMS)) {
-               /* Try to use BIOS settings for ROMs, otherwise let
-                  pci_assign_unassigned_resources() allocate the new
-                  addresses. */
+               /*
+                * Try to use BIOS settings for ROMs, otherwise let
+                * pci_assign_unassigned_resources() allocate the new
+                * addresses.
+                */
                for_each_pci_dev(dev) {
                        r = &dev->resource[PCI_ROM_RESOURCE];
                        if (!r->flags || !r->start)
@@ -215,9 +233,9 @@ int pcibios_enable_resources(struct pci_dev *dev, int mask)
 
        pci_read_config_word(dev, PCI_COMMAND, &cmd);
        old_cmd = cmd;
-       for(idx = 0; idx < PCI_NUM_RESOURCES; idx++) {
+       for (idx = 0; idx < PCI_NUM_RESOURCES; idx++) {
                /* Only set up the requested stuff */
-               if (!(mask & (1<<idx)))
+               if (!(mask & (1 << idx)))
                        continue;
 
                r = &dev->resource[idx];
@@ -227,7 +245,9 @@ int pcibios_enable_resources(struct pci_dev *dev, int mask)
                                (!(r->flags & IORESOURCE_ROM_ENABLE)))
                        continue;
                if (!r->start && r->end) {
-                       printk(KERN_ERR "PCI: Device %s not available because of resource collisions\n", pci_name(dev));
+                       printk(KERN_ERR "PCI: Device %s not available "
+                               "because of resource collisions\n",
+                               pci_name(dev));
                        return -EINVAL;
                }
                if (r->flags & IORESOURCE_IO)
@@ -236,7 +256,8 @@ int pcibios_enable_resources(struct pci_dev *dev, int mask)
                        cmd |= PCI_COMMAND_MEMORY;
        }
        if (cmd != old_cmd) {
-               printk("PCI: Enabling device %s (%04x -> %04x)\n", pci_name(dev), old_cmd, cmd);
+               printk("PCI: Enabling device %s (%04x -> %04x)\n",
+                       pci_name(dev), old_cmd, cmd);
                pci_write_config_word(dev, PCI_COMMAND, cmd);
        }
        return 0;
@@ -258,7 +279,8 @@ void pcibios_set_master(struct pci_dev *dev)
                lat = pcibios_max_latency;
        else
                return;
-       printk(KERN_DEBUG "PCI: Setting latency timer of device %s to %d\n", pci_name(dev), lat);
+       printk(KERN_DEBUG "PCI: Setting latency timer of device %s to %d\n",
+               pci_name(dev), lat);
        pci_write_config_byte(dev, PCI_LATENCY_TIMER, lat);
 }
 
index 69163998adeb79fad0b4fcad749390f8acd432e7..e65551cd82162522ed0dfd919cb6e653f6e1b7b5 100644 (file)
@@ -543,6 +543,12 @@ static __init int intel_router_probe(struct irq_router *r, struct pci_dev *route
                case PCI_DEVICE_ID_INTEL_ICH8_2:
                case PCI_DEVICE_ID_INTEL_ICH8_3:
                case PCI_DEVICE_ID_INTEL_ICH8_4:
+               case PCI_DEVICE_ID_INTEL_ICH9_0:
+               case PCI_DEVICE_ID_INTEL_ICH9_1:
+               case PCI_DEVICE_ID_INTEL_ICH9_2:
+               case PCI_DEVICE_ID_INTEL_ICH9_3:
+               case PCI_DEVICE_ID_INTEL_ICH9_4:
+               case PCI_DEVICE_ID_INTEL_ICH9_5:
                        r->name = "PIIX/ICH";
                        r->get = pirq_piix_get;
                        r->set = pirq_piix_set;
index db8e1fcfa047d7e53a5f2f1961adad1ecef4327d..14691cda05c38da33ad2e8b124ea6eada5223790 100644 (file)
@@ -75,7 +75,7 @@
 ** If a device prefetches beyond the end of a valid pdir entry, it will cause
 ** a hard failure, ie. MCA.  Version 3.0 and later of the zx1 LBA should
 ** disconnect on 4k boundaries and prevent such issues.  If the device is
-** particularly agressive, this option will keep the entire pdir valid such
+** particularly aggressive, this option will keep the entire pdir valid such
 ** that prefetching will hit a valid address.  This could severely impact
 ** error containment, and is therefore off by default.  The page that is
 ** used for spill-over is poisoned, so that should help debugging somewhat.
@@ -258,10 +258,10 @@ static u64 prefetch_spill_page;
 
 /*
 ** DMA_CHUNK_SIZE is used by the SCSI mid-layer to break up
-** (or rather not merge) DMA's into managable chunks.
+** (or rather not merge) DMAs into manageable chunks.
 ** On parisc, this is more of the software/tuning constraint
-** rather than the HW. I/O MMU allocation alogorithms can be
-** faster with smaller size is (to some degree).
+** rather than the HW. I/O MMU allocation algorithms can be
+** faster with smaller sizes (to some degree).
 */
 #define DMA_CHUNK_SIZE  (BITS_PER_LONG*iovp_size)
 
index b30be7c48ba8d9e79c8476181d47d15da1776fe8..f4edfbf27134e5e0c19432f750173ae1932d34f8 100644 (file)
@@ -469,10 +469,11 @@ pcibios_fixup_resources(struct pci_dev *dev, int start, int limit)
        }
 }
 
-static void __devinit pcibios_fixup_device_resources(struct pci_dev *dev)
+void __devinit pcibios_fixup_device_resources(struct pci_dev *dev)
 {
        pcibios_fixup_resources(dev, 0, PCI_BRIDGE_RESOURCES);
 }
+EXPORT_SYMBOL_GPL(pcibios_fixup_device_resources);
 
 static void __devinit pcibios_fixup_bridge_resources(struct pci_dev *dev)
 {
@@ -493,6 +494,7 @@ pcibios_fixup_bus (struct pci_bus *b)
        }
        list_for_each_entry(dev, &b->devices, bus_list)
                pcibios_fixup_device_resources(dev);
+       platform_pci_fixup_bus(b);
 
        return;
 }
@@ -738,75 +740,44 @@ int ia64_pci_legacy_write(struct pci_bus *bus, u16 port, u32 val, u8 size)
        return ret;
 }
 
+/* It's defined in drivers/pci/pci.c */
+extern u8 pci_cache_line_size;
+
 /**
- * pci_cacheline_size - determine cacheline size for PCI devices
- * @dev: void
+ * set_pci_cacheline_size - determine cacheline size for PCI devices
  *
  * We want to use the line-size of the outer-most cache.  We assume
  * that this line-size is the same for all CPUs.
  *
  * Code mostly taken from arch/ia64/kernel/palinfo.c:cache_info().
- *
- * RETURNS: An appropriate -ERRNO error value on eror, or zero for success.
  */
-static unsigned long
-pci_cacheline_size (void)
+static void __init set_pci_cacheline_size(void)
 {
        u64 levels, unique_caches;
        s64 status;
        pal_cache_config_info_t cci;
-       static u8 cacheline_size;
-
-       if (cacheline_size)
-               return cacheline_size;
 
        status = ia64_pal_cache_summary(&levels, &unique_caches);
        if (status != 0) {
-               printk(KERN_ERR "%s: ia64_pal_cache_summary() failed (status=%ld)\n",
-                      __FUNCTION__, status);
-               return SMP_CACHE_BYTES;
+               printk(KERN_ERR "%s: ia64_pal_cache_summary() failed "
+                       "(status=%ld)\n", __FUNCTION__, status);
+               return;
        }
 
-       status = ia64_pal_cache_config_info(levels - 1, /* cache_type (data_or_unified)= */ 2,
-                                           &cci);
+       status = ia64_pal_cache_config_info(levels - 1,
+                               /* cache_type (data_or_unified)= */ 2, &cci);
        if (status != 0) {
-               printk(KERN_ERR "%s: ia64_pal_cache_config_info() failed (status=%ld)\n",
-                      __FUNCTION__, status);
-               return SMP_CACHE_BYTES;
+               printk(KERN_ERR "%s: ia64_pal_cache_config_info() failed "
+                       "(status=%ld)\n", __FUNCTION__, status);
+               return;
        }
-       cacheline_size = 1 << cci.pcci_line_size;
-       return cacheline_size;
+       pci_cache_line_size = (1 << cci.pcci_line_size) / 4;
 }
 
-/**
- * pcibios_prep_mwi - helper function for drivers/pci/pci.c:pci_set_mwi()
- * @dev: the PCI device for which MWI is enabled
- *
- * For ia64, we can get the cacheline sizes from PAL.
- *
- * RETURNS: An appropriate -ERRNO error value on eror, or zero for success.
- */
-int
-pcibios_prep_mwi (struct pci_dev *dev)
-{
-       unsigned long desired_linesize, current_linesize;
-       int rc = 0;
-       u8 pci_linesize;
-
-       desired_linesize = pci_cacheline_size();
-
-       pci_read_config_byte(dev, PCI_CACHE_LINE_SIZE, &pci_linesize);
-       current_linesize = 4 * pci_linesize;
-       if (desired_linesize != current_linesize) {
-               printk(KERN_WARNING "PCI: slot %s has incorrect PCI cache line size of %lu bytes,",
-                      pci_name(dev), current_linesize);
-               if (current_linesize > desired_linesize) {
-                       printk(" expected %lu bytes instead\n", desired_linesize);
-                       rc = -EINVAL;
-               } else {
-                       printk(" correcting to %lu\n", desired_linesize);
-                       pci_write_config_byte(dev, PCI_CACHE_LINE_SIZE, desired_linesize / 4);
-               }
-       }
-       return rc;
+static int __init pcibios_init(void)
+{
+       set_pci_cacheline_size();
+       return 0;
 }
+
+subsys_initcall(pcibios_init);
index 2d78f34dd763a35f510a59388a3d59a6708be1ee..0a59371d347583122b4a5677680f5c88bdfdfc1d 100644 (file)
@@ -4,13 +4,14 @@
 # License.  See the file "COPYING" in the main directory of this archive
 # for more details.
 #
-# Copyright (C) 1999,2001-2005 Silicon Graphics, Inc.  All Rights Reserved.
+# Copyright (C) 1999,2001-2006 Silicon Graphics, Inc.  All Rights Reserved.
 #
 
 CPPFLAGS += -I$(srctree)/arch/ia64/sn/include
 
 obj-y                          += setup.o bte.o bte_error.o irq.o mca.o idle.o \
-                                  huberror.o io_init.o iomv.o klconflib.o pio_phys.o \
+                                  huberror.o io_acpi_init.o io_common.o \
+                                  io_init.o iomv.o klconflib.o pio_phys.o \
                                   sn2/
 obj-$(CONFIG_IA64_GENERIC)      += machvec.o
 obj-$(CONFIG_SGI_TIOCX)                += tiocx.o
diff --git a/arch/ia64/sn/kernel/io_acpi_init.c b/arch/ia64/sn/kernel/io_acpi_init.c
new file mode 100644 (file)
index 0000000..99d7f27
--- /dev/null
@@ -0,0 +1,231 @@
+/*
+ * This file is subject to the terms and conditions of the GNU General Public
+ * License.  See the file "COPYING" in the main directory of this archive
+ * for more details.
+ *
+ * Copyright (C) 2006 Silicon Graphics, Inc. All rights reserved.
+ */
+
+#include <asm/sn/types.h>
+#include <asm/sn/addrs.h>
+#include <asm/sn/pcidev.h>
+#include <asm/sn/pcibus_provider_defs.h>
+#include <asm/sn/sn_sal.h>
+#include "xtalk/hubdev.h"
+#include <linux/acpi.h>
+
+
+/*
+ * The code in this file will only be executed when running with
+ * a PROM that has ACPI IO support. (i.e., SN_ACPI_BASE_SUPPORT() == 1)
+ */
+
+
+/*
+ * This value must match the UUID the PROM uses
+ * (io/acpi/defblk.c) when building a vendor descriptor.
+ */
+struct acpi_vendor_uuid sn_uuid = {
+       .subtype = 0,
+       .data   = { 0x2c, 0xc6, 0xa6, 0xfe, 0x9c, 0x44, 0xda, 0x11,
+                   0xa2, 0x7c, 0x08, 0x00, 0x69, 0x13, 0xea, 0x51 },
+};
+
+/*
+ * Perform the early IO init in PROM.
+ */
+static s64
+sal_ioif_init(u64 *result)
+{
+       struct ia64_sal_retval isrv = {0,0,0,0};
+
+       SAL_CALL_NOLOCK(isrv,
+                       SN_SAL_IOIF_INIT, 0, 0, 0, 0, 0, 0, 0);
+       *result = isrv.v0;
+       return isrv.status;
+}
+
+/*
+ * sn_hubdev_add - The 'add' function of the acpi_sn_hubdev_driver.
+ *                Called for every "SGIHUB" or "SGITIO" device defined
+ *                in the ACPI namespace.
+ */
+static int __init
+sn_hubdev_add(struct acpi_device *device)
+{
+       struct acpi_buffer buffer = { ACPI_ALLOCATE_BUFFER, NULL };
+       u64 addr;
+       struct hubdev_info *hubdev;
+       struct hubdev_info *hubdev_ptr;
+       int i;
+       u64 nasid;
+       struct acpi_resource *resource;
+       int ret = 0;
+       acpi_status status;
+       struct acpi_resource_vendor_typed *vendor;
+       extern void sn_common_hubdev_init(struct hubdev_info *);
+
+       status = acpi_get_vendor_resource(device->handle, METHOD_NAME__CRS,
+                                         &sn_uuid, &buffer);
+       if (ACPI_FAILURE(status)) {
+               printk(KERN_ERR
+                      "sn_hubdev_add: acpi_get_vendor_resource() failed: %d\n",
+                       status);
+               return 1;
+       }
+
+       resource = buffer.pointer;
+       vendor = &resource->data.vendor_typed;
+       if ((vendor->byte_length - sizeof(struct acpi_vendor_uuid)) !=
+           sizeof(struct hubdev_info *)) {
+               printk(KERN_ERR
+                      "sn_hubdev_add: Invalid vendor data length: %d\n",
+                       vendor->byte_length);
+               ret = 1;
+               goto exit;
+       }
+
+       memcpy(&addr, vendor->byte_data, sizeof(struct hubdev_info *));
+       hubdev_ptr = __va((struct hubdev_info *) addr);
+
+       nasid = hubdev_ptr->hdi_nasid;
+       i = nasid_to_cnodeid(nasid);
+       hubdev = (struct hubdev_info *)(NODEPDA(i)->pdinfo);
+       *hubdev = *hubdev_ptr;
+       sn_common_hubdev_init(hubdev);
+
+exit:
+       kfree(buffer.pointer);
+       return ret;
+}
+
+/*
+ * sn_get_bussoft_ptr() - The pcibus_bussoft pointer is found in
+ *                       the ACPI Vendor resource for this bus.
+ */
+static struct pcibus_bussoft *
+sn_get_bussoft_ptr(struct pci_bus *bus)
+{
+       u64 addr;
+       struct acpi_buffer buffer = { ACPI_ALLOCATE_BUFFER, NULL };
+       acpi_handle handle;
+       struct pcibus_bussoft *prom_bussoft_ptr;
+       struct acpi_resource *resource;
+       acpi_status status;
+       struct acpi_resource_vendor_typed *vendor;
+
+
+       handle = PCI_CONTROLLER(bus)->acpi_handle;
+       status = acpi_get_vendor_resource(handle, METHOD_NAME__CRS,
+                                         &sn_uuid, &buffer);
+       if (ACPI_FAILURE(status)) {
+               printk(KERN_ERR "get_acpi_pcibus_ptr: "
+                      "get_acpi_bussoft_info() failed: %d\n",
+                      status);
+               return NULL;
+       }
+       resource = buffer.pointer;
+       vendor = &resource->data.vendor_typed;
+
+       if ((vendor->byte_length - sizeof(struct acpi_vendor_uuid)) !=
+            sizeof(struct pcibus_bussoft *)) {
+               printk(KERN_ERR
+                      "get_acpi_bussoft_ptr: Invalid vendor data "
+                      "length %d\n", vendor->byte_length);
+               kfree(buffer.pointer);
+               return NULL;
+       }
+       memcpy(&addr, vendor->byte_data, sizeof(struct pcibus_bussoft *));
+       prom_bussoft_ptr = __va((struct pcibus_bussoft *) addr);
+       kfree(buffer.pointer);
+
+       return prom_bussoft_ptr;
+}
+
+/*
+ * sn_acpi_bus_fixup
+ */
+void
+sn_acpi_bus_fixup(struct pci_bus *bus)
+{
+       struct pci_dev *pci_dev = NULL;
+       struct pcibus_bussoft *prom_bussoft_ptr;
+       extern void sn_common_bus_fixup(struct pci_bus *,
+                                       struct pcibus_bussoft *);
+
+       if (!bus->parent) {     /* If root bus */
+               prom_bussoft_ptr = sn_get_bussoft_ptr(bus);
+               if (prom_bussoft_ptr == NULL) {
+                       printk(KERN_ERR
+                              "sn_pci_fixup_bus: 0x%04x:0x%02x Unable to "
+                              "obtain prom_bussoft_ptr\n",
+                              pci_domain_nr(bus), bus->number);
+                       return;
+               }
+               sn_common_bus_fixup(bus, prom_bussoft_ptr);
+       }
+       list_for_each_entry(pci_dev, &bus->devices, bus_list) {
+               sn_pci_fixup_slot(pci_dev);
+       }
+}
+
+/*
+ * sn_acpi_slot_fixup - Perform any SN specific slot fixup.
+ *                     At present there does not appear to be
+ *                     any generic way to handle a ROM image
+ *                     that has been shadowed by the PROM, so
+ *                     we pass a pointer to it within the
+ *                     pcidev_info structure.
+ */
+
+void
+sn_acpi_slot_fixup(struct pci_dev *dev, struct pcidev_info *pcidev_info)
+{
+       void __iomem *addr;
+       size_t size;
+
+       if (pcidev_info->pdi_pio_mapped_addr[PCI_ROM_RESOURCE]) {
+               /*
+                * A valid ROM image exists and has been shadowed by the
+                * PROM. Setup the pci_dev ROM resource to point to
+                * the shadowed copy.
+                */
+               size = dev->resource[PCI_ROM_RESOURCE].end -
+                               dev->resource[PCI_ROM_RESOURCE].start;
+               addr =
+                    ioremap(pcidev_info->pdi_pio_mapped_addr[PCI_ROM_RESOURCE],
+                            size);
+               dev->resource[PCI_ROM_RESOURCE].start = (unsigned long) addr;
+               dev->resource[PCI_ROM_RESOURCE].end =
+                                               (unsigned long) addr + size;
+               dev->resource[PCI_ROM_RESOURCE].flags |= IORESOURCE_ROM_BIOS_COPY;
+       }
+}
+
+static struct acpi_driver acpi_sn_hubdev_driver = {
+       .name = "SGI HUBDEV Driver",
+       .ids = "SGIHUB,SGITIO",
+       .ops = {
+               .add = sn_hubdev_add,
+               },
+};
+
+
+/*
+ * sn_io_acpi_init - PROM has ACPI support for IO, defining at a minimum the
+ *                  nodes and root buses in the DSDT. As a result, bus scanning
+ *                  will be initiated by the Linux ACPI code.
+ */
+
+void __init
+sn_io_acpi_init(void)
+{
+       u64 result;
+       s64 status;
+
+       acpi_bus_register_driver(&acpi_sn_hubdev_driver);
+       status = sal_ioif_init(&result);
+       if (status || result)
+               panic("sal_ioif_init failed: [%lx] %s\n",
+                     status, ia64_sal_strerror(status));
+}
diff --git a/arch/ia64/sn/kernel/io_common.c b/arch/ia64/sn/kernel/io_common.c
new file mode 100644 (file)
index 0000000..d4dd8f4
--- /dev/null
@@ -0,0 +1,613 @@
+/*
+ * This file is subject to the terms and conditions of the GNU General Public
+ * License.  See the file "COPYING" in the main directory of this archive
+ * for more details.
+ *
+ * Copyright (C) 2006 Silicon Graphics, Inc. All rights reserved.
+ */
+
+#include <linux/bootmem.h>
+#include <asm/sn/types.h>
+#include <asm/sn/addrs.h>
+#include <asm/sn/sn_feature_sets.h>
+#include <asm/sn/geo.h>
+#include <asm/sn/io.h>
+#include <asm/sn/l1.h>
+#include <asm/sn/module.h>
+#include <asm/sn/pcibr_provider.h>
+#include <asm/sn/pcibus_provider_defs.h>
+#include <asm/sn/pcidev.h>
+#include <asm/sn/simulator.h>
+#include <asm/sn/sn_sal.h>
+#include <asm/sn/tioca_provider.h>
+#include <asm/sn/tioce_provider.h>
+#include "xtalk/hubdev.h"
+#include "xtalk/xwidgetdev.h"
+#include <linux/acpi.h>
+#include <asm/sn/sn2/sn_hwperf.h>
+#include <asm/sn/acpi.h>
+
+extern void sn_init_cpei_timer(void);
+extern void register_sn_procfs(void);
+extern void sn_acpi_bus_fixup(struct pci_bus *);
+extern void sn_bus_fixup(struct pci_bus *);
+extern void sn_acpi_slot_fixup(struct pci_dev *, struct pcidev_info *);
+extern void sn_more_slot_fixup(struct pci_dev *, struct pcidev_info *);
+extern void sn_legacy_pci_window_fixup(struct pci_controller *, u64, u64);
+extern void sn_io_acpi_init(void);
+extern void sn_io_init(void);
+
+
+static struct list_head sn_sysdata_list;
+
+/* sysdata list struct */
+struct sysdata_el {
+       struct list_head entry;
+       void *sysdata;
+};
+
+int sn_ioif_inited;            /* SN I/O infrastructure initialized? */
+
+struct sn_pcibus_provider *sn_pci_provider[PCIIO_ASIC_MAX_TYPES];      /* indexed by asic type */
+
+/*
+ * Hooks and struct for unsupported pci providers
+ */
+
+static dma_addr_t
+sn_default_pci_map(struct pci_dev *pdev, unsigned long paddr, size_t size, int type)
+{
+       return 0;
+}
+
+static void
+sn_default_pci_unmap(struct pci_dev *pdev, dma_addr_t addr, int direction)
+{
+       return;
+}
+
+static void *
+sn_default_pci_bus_fixup(struct pcibus_bussoft *soft, struct pci_controller *controller)
+{
+       return NULL;
+}
+
+static struct sn_pcibus_provider sn_pci_default_provider = {
+       .dma_map = sn_default_pci_map,
+       .dma_map_consistent = sn_default_pci_map,
+       .dma_unmap = sn_default_pci_unmap,
+       .bus_fixup = sn_default_pci_bus_fixup,
+};
+
+/*
+ * Retrieve the DMA Flush List given nasid, widget, and device.
+ * This list is needed to implement the WAR - Flush DMA data on PIO Reads.
+ */
+static inline u64
+sal_get_device_dmaflush_list(u64 nasid, u64 widget_num, u64 device_num,
+                            u64 address)
+{
+       struct ia64_sal_retval ret_stuff;
+       ret_stuff.status = 0;
+       ret_stuff.v0 = 0;
+
+       SAL_CALL_NOLOCK(ret_stuff,
+                       (u64) SN_SAL_IOIF_GET_DEVICE_DMAFLUSH_LIST,
+                       (u64) nasid, (u64) widget_num,
+                       (u64) device_num, (u64) address, 0, 0, 0);
+       return ret_stuff.status;
+}
+
+/*
+ * Retrieve the pci device information given the bus and device|function number.
+ */
+static inline u64
+sal_get_pcidev_info(u64 segment, u64 bus_number, u64 devfn, u64 pci_dev,
+                   u64 sn_irq_info)
+{
+       struct ia64_sal_retval ret_stuff;
+       ret_stuff.status = 0;
+       ret_stuff.v0 = 0;
+
+       SAL_CALL_NOLOCK(ret_stuff,
+                       (u64) SN_SAL_IOIF_GET_PCIDEV_INFO,
+                       (u64) segment, (u64) bus_number, (u64) devfn,
+                       (u64) pci_dev,
+                       sn_irq_info, 0, 0);
+       return ret_stuff.v0;
+}
+
+/*
+ * sn_pcidev_info_get() - Retrieve the pcidev_info struct for the specified
+ *                       device.
+ */
+inline struct pcidev_info *
+sn_pcidev_info_get(struct pci_dev *dev)
+{
+       struct pcidev_info *pcidev;
+
+       list_for_each_entry(pcidev,
+                           &(SN_PLATFORM_DATA(dev)->pcidev_info), pdi_list) {
+               if (pcidev->pdi_linux_pcidev == dev)
+                       return pcidev;
+       }
+       return NULL;
+}
+
+/* Older PROM flush WAR
+ *
+ * 01/16/06 -- This war will be in place until a new official PROM is released.
+ * Additionally note that the struct sn_flush_device_war also has to be
+ * removed from arch/ia64/sn/include/xtalk/hubdev.h
+ */
+static u8 war_implemented = 0;
+
+static s64 sn_device_fixup_war(u64 nasid, u64 widget, int device,
+                              struct sn_flush_device_common *common)
+{
+       struct sn_flush_device_war *war_list;
+       struct sn_flush_device_war *dev_entry;
+       struct ia64_sal_retval isrv = {0,0,0,0};
+
+       if (!war_implemented) {
+               printk(KERN_WARNING "PROM version < 4.50 -- implementing old "
+                      "PROM flush WAR\n");
+               war_implemented = 1;
+       }
+
+       war_list = kzalloc(DEV_PER_WIDGET * sizeof(*war_list), GFP_KERNEL);
+       if (!war_list)
+               BUG();
+
+       SAL_CALL_NOLOCK(isrv, SN_SAL_IOIF_GET_WIDGET_DMAFLUSH_LIST,
+                       nasid, widget, __pa(war_list), 0, 0, 0 ,0);
+       if (isrv.status)
+               panic("sn_device_fixup_war failed: %s\n",
+                     ia64_sal_strerror(isrv.status));
+
+       dev_entry = war_list + device;
+       memcpy(common,dev_entry, sizeof(*common));
+       kfree(war_list);
+
+       return isrv.status;
+}
+
+/*
+ * sn_common_hubdev_init() - This routine is called to initialize the HUB data
+ *                          structure for each node in the system.
+ */
+void __init
+sn_common_hubdev_init(struct hubdev_info *hubdev)
+{
+
+       struct sn_flush_device_kernel *sn_flush_device_kernel;
+       struct sn_flush_device_kernel *dev_entry;
+       s64 status;
+       int widget, device, size;
+
+       /* Attach the error interrupt handlers */
+       if (hubdev->hdi_nasid & 1)      /* If TIO */
+               ice_error_init(hubdev);
+       else
+               hub_error_init(hubdev);
+
+       for (widget = 0; widget <= HUB_WIDGET_ID_MAX; widget++)
+               hubdev->hdi_xwidget_info[widget].xwi_hubinfo = hubdev;
+
+       if (!hubdev->hdi_flush_nasid_list.widget_p)
+               return;
+
+       size = (HUB_WIDGET_ID_MAX + 1) *
+               sizeof(struct sn_flush_device_kernel *);
+       hubdev->hdi_flush_nasid_list.widget_p =
+               kzalloc(size, GFP_KERNEL);
+       if (!hubdev->hdi_flush_nasid_list.widget_p)
+               BUG();
+
+       for (widget = 0; widget <= HUB_WIDGET_ID_MAX; widget++) {
+               size = DEV_PER_WIDGET *
+                       sizeof(struct sn_flush_device_kernel);
+               sn_flush_device_kernel = kzalloc(size, GFP_KERNEL);
+               if (!sn_flush_device_kernel)
+                       BUG();
+
+               dev_entry = sn_flush_device_kernel;
+               for (device = 0; device < DEV_PER_WIDGET;
+                    device++, dev_entry++) {
+                       size = sizeof(struct sn_flush_device_common);
+                       dev_entry->common = kzalloc(size, GFP_KERNEL);
+                       if (!dev_entry->common)
+                               BUG();
+                       if (sn_prom_feature_available(PRF_DEVICE_FLUSH_LIST))
+                               status = sal_get_device_dmaflush_list(
+                                            hubdev->hdi_nasid, widget, device,
+                                            (u64)(dev_entry->common));
+                       else
+                               status = sn_device_fixup_war(hubdev->hdi_nasid,
+                                                            widget, device,
+                                                            dev_entry->common);
+                       if (status != SALRET_OK)
+                               panic("SAL call failed: %s\n",
+                                     ia64_sal_strerror(status));
+
+                       spin_lock_init(&dev_entry->sfdl_flush_lock);
+               }
+
+               if (sn_flush_device_kernel)
+                       hubdev->hdi_flush_nasid_list.widget_p[widget] =
+                                                        sn_flush_device_kernel;
+       }
+}
+
+void sn_pci_unfixup_slot(struct pci_dev *dev)
+{
+       struct pci_dev *host_pci_dev = SN_PCIDEV_INFO(dev)->host_pci_dev;
+
+       sn_irq_unfixup(dev);
+       pci_dev_put(host_pci_dev);
+       pci_dev_put(dev);
+}
+
+/*
+ * sn_pci_fixup_slot() - This routine sets up a slot's resources consistent
+ *                      with the Linux PCI abstraction layer. Resources
+ *                      acquired from our PCI provider include PIO maps
+ *                      to BAR space and interrupt objects.
+ */
+void sn_pci_fixup_slot(struct pci_dev *dev)
+{
+       int segment = pci_domain_nr(dev->bus);
+       int status = 0;
+       struct pcibus_bussoft *bs;
+       struct pci_bus *host_pci_bus;
+       struct pci_dev *host_pci_dev;
+       struct pcidev_info *pcidev_info;
+       struct sn_irq_info *sn_irq_info;
+       unsigned int bus_no, devfn;
+
+       pci_dev_get(dev); /* for the sysdata pointer */
+       pcidev_info = kzalloc(sizeof(struct pcidev_info), GFP_KERNEL);
+       if (!pcidev_info)
+               BUG();          /* Cannot afford to run out of memory */
+
+       sn_irq_info = kzalloc(sizeof(struct sn_irq_info), GFP_KERNEL);
+       if (!sn_irq_info)
+               BUG();          /* Cannot afford to run out of memory */
+
+       /* Call to retrieve pci device information needed by kernel. */
+       status = sal_get_pcidev_info((u64) segment, (u64) dev->bus->number,
+                                    dev->devfn,
+                                    (u64) __pa(pcidev_info),
+                                    (u64) __pa(sn_irq_info));
+       if (status)
+               BUG(); /* Cannot get platform pci device information */
+
+       /* Add pcidev_info to list in pci_controller.platform_data */
+       list_add_tail(&pcidev_info->pdi_list,
+                     &(SN_PLATFORM_DATA(dev->bus)->pcidev_info));
+
+       if (SN_ACPI_BASE_SUPPORT())
+               sn_acpi_slot_fixup(dev, pcidev_info);
+       else
+               sn_more_slot_fixup(dev, pcidev_info);
+       /*
+        * Using the PROMs values for the PCI host bus, get the Linux
+        * PCI host_pci_dev struct and set up host bus linkages
+        */
+
+       bus_no = (pcidev_info->pdi_slot_host_handle >> 32) & 0xff;
+       devfn = pcidev_info->pdi_slot_host_handle & 0xffffffff;
+       host_pci_bus = pci_find_bus(segment, bus_no);
+       host_pci_dev = pci_get_slot(host_pci_bus, devfn);
+
+       pcidev_info->host_pci_dev = host_pci_dev;
+       pcidev_info->pdi_linux_pcidev = dev;
+       pcidev_info->pdi_host_pcidev_info = SN_PCIDEV_INFO(host_pci_dev);
+       bs = SN_PCIBUS_BUSSOFT(dev->bus);
+       pcidev_info->pdi_pcibus_info = bs;
+
+       if (bs && bs->bs_asic_type < PCIIO_ASIC_MAX_TYPES) {
+               SN_PCIDEV_BUSPROVIDER(dev) = sn_pci_provider[bs->bs_asic_type];
+       } else {
+               SN_PCIDEV_BUSPROVIDER(dev) = &sn_pci_default_provider;
+       }
+
+       /* Only set up IRQ stuff if this device has a host bus context */
+       if (bs && sn_irq_info->irq_irq) {
+               pcidev_info->pdi_sn_irq_info = sn_irq_info;
+               dev->irq = pcidev_info->pdi_sn_irq_info->irq_irq;
+               sn_irq_fixup(dev, sn_irq_info);
+       } else {
+               pcidev_info->pdi_sn_irq_info = NULL;
+               kfree(sn_irq_info);
+       }
+}
+
+/*
+ * sn_common_bus_fixup - Perform platform specific bus fixup.
+ *                      Execute the ASIC specific fixup routine
+ *                      for this bus.
+ */
+void
+sn_common_bus_fixup(struct pci_bus *bus,
+                   struct pcibus_bussoft *prom_bussoft_ptr)
+{
+       int cnode;
+       struct pci_controller *controller;
+       struct hubdev_info *hubdev_info;
+       int nasid;
+       void *provider_soft;
+       struct sn_pcibus_provider *provider;
+       struct sn_platform_data *sn_platform_data;
+
+       controller = PCI_CONTROLLER(bus);
+       /*
+        * Per-provider fixup.  Copies the bus soft structure from prom
+        * to local area and links SN_PCIBUS_BUSSOFT().
+        */
+
+       if (prom_bussoft_ptr->bs_asic_type >= PCIIO_ASIC_MAX_TYPES) {
+               printk(KERN_WARNING "sn_common_bus_fixup: Unsupported asic type, %d",
+                      prom_bussoft_ptr->bs_asic_type);
+               return;
+       }
+
+       if (prom_bussoft_ptr->bs_asic_type == PCIIO_ASIC_TYPE_PPB)
+               return; /* no further fixup necessary */
+
+       provider = sn_pci_provider[prom_bussoft_ptr->bs_asic_type];
+       if (provider == NULL)
+               panic("sn_common_bus_fixup: No provider registered for this asic type, %d",
+                     prom_bussoft_ptr->bs_asic_type);
+
+       if (provider->bus_fixup)
+               provider_soft = (*provider->bus_fixup) (prom_bussoft_ptr,
+                                controller);
+       else
+               provider_soft = NULL;
+
+       /*
+        * Generic bus fixup goes here.  Don't reference prom_bussoft_ptr
+        * after this point.
+        */
+       controller->platform_data = kzalloc(sizeof(struct sn_platform_data),
+                                           GFP_KERNEL);
+       if (controller->platform_data == NULL)
+               BUG();
+       sn_platform_data =
+                       (struct sn_platform_data *) controller->platform_data;
+       sn_platform_data->provider_soft = provider_soft;
+       INIT_LIST_HEAD(&((struct sn_platform_data *)
+                        controller->platform_data)->pcidev_info);
+       nasid = NASID_GET(SN_PCIBUS_BUSSOFT(bus)->bs_base);
+       cnode = nasid_to_cnodeid(nasid);
+       hubdev_info = (struct hubdev_info *)(NODEPDA(cnode)->pdinfo);
+       SN_PCIBUS_BUSSOFT(bus)->bs_xwidget_info =
+           &(hubdev_info->hdi_xwidget_info[SN_PCIBUS_BUSSOFT(bus)->bs_xid]);
+
+       /*
+        * If the node information we obtained during the fixup phase is
+        * invalid then set controller->node to -1 (undetermined)
+        */
+       if (controller->node >= num_online_nodes()) {
+               struct pcibus_bussoft *b = SN_PCIBUS_BUSSOFT(bus);
+
+               printk(KERN_WARNING "Device ASIC=%u XID=%u PBUSNUM=%u"
+                      "L_IO=%lx L_MEM=%lx BASE=%lx\n",
+                      b->bs_asic_type, b->bs_xid, b->bs_persist_busnum,
+                      b->bs_legacy_io, b->bs_legacy_mem, b->bs_base);
+               printk(KERN_WARNING "on node %d but only %d nodes online."
+                      "Association set to undetermined.\n",
+                      controller->node, num_online_nodes());
+               controller->node = -1;
+       }
+}
+
+void sn_bus_store_sysdata(struct pci_dev *dev)
+{
+       struct sysdata_el *element;
+
+       element = kzalloc(sizeof(struct sysdata_el), GFP_KERNEL);
+       if (!element) {
+               dev_dbg(dev, "%s: out of memory!\n", __FUNCTION__);
+               return;
+       }
+       element->sysdata = SN_PCIDEV_INFO(dev);
+       list_add(&element->entry, &sn_sysdata_list);
+}
+
+void sn_bus_free_sysdata(void)
+{
+       struct sysdata_el *element;
+       struct list_head *list, *safe;
+
+       list_for_each_safe(list, safe, &sn_sysdata_list) {
+               element = list_entry(list, struct sysdata_el, entry);
+               list_del(&element->entry);
+               list_del(&(((struct pcidev_info *)
+                            (element->sysdata))->pdi_list));
+               kfree(element->sysdata);
+               kfree(element);
+       }
+       return;
+}
+
+/*
+ * hubdev_init_node() - Creates the HUB data structure and link them to it's
+ *                     own NODE specific data area.
+ */
+void hubdev_init_node(nodepda_t * npda, cnodeid_t node)
+{
+       struct hubdev_info *hubdev_info;
+       int size;
+       pg_data_t *pg;
+
+       size = sizeof(struct hubdev_info);
+
+       if (node >= num_online_nodes()) /* Headless/memless IO nodes */
+               pg = NODE_DATA(0);
+       else
+               pg = NODE_DATA(node);
+
+       hubdev_info = (struct hubdev_info *)alloc_bootmem_node(pg, size);
+
+       npda->pdinfo = (void *)hubdev_info;
+}
+
+geoid_t
+cnodeid_get_geoid(cnodeid_t cnode)
+{
+       struct hubdev_info *hubdev;
+
+       hubdev = (struct hubdev_info *)(NODEPDA(cnode)->pdinfo);
+       return hubdev->hdi_geoid;
+}
+
+void sn_generate_path(struct pci_bus *pci_bus, char *address)
+{
+       nasid_t nasid;
+       cnodeid_t cnode;
+       geoid_t geoid;
+       moduleid_t moduleid;
+       u16 bricktype;
+
+       nasid = NASID_GET(SN_PCIBUS_BUSSOFT(pci_bus)->bs_base);
+       cnode = nasid_to_cnodeid(nasid);
+       geoid = cnodeid_get_geoid(cnode);
+       moduleid = geo_module(geoid);
+
+       sprintf(address, "module_%c%c%c%c%.2d",
+               '0'+RACK_GET_CLASS(MODULE_GET_RACK(moduleid)),
+               '0'+RACK_GET_GROUP(MODULE_GET_RACK(moduleid)),
+               '0'+RACK_GET_NUM(MODULE_GET_RACK(moduleid)),
+               MODULE_GET_BTCHAR(moduleid), MODULE_GET_BPOS(moduleid));
+
+       /* Tollhouse requires slot id to be displayed */
+       bricktype = MODULE_GET_BTYPE(moduleid);
+       if ((bricktype == L1_BRICKTYPE_191010) ||
+           (bricktype == L1_BRICKTYPE_1932))
+                       sprintf(address, "%s^%d", address, geo_slot(geoid));
+}
+
+/*
+ * sn_pci_fixup_bus() - Perform SN specific setup of software structs
+ *                     (pcibus_bussoft, pcidev_info) and hardware
+ *                     registers, for the specified bus and devices under it.
+ */
+void __devinit
+sn_pci_fixup_bus(struct pci_bus *bus)
+{
+
+       if (SN_ACPI_BASE_SUPPORT())
+               sn_acpi_bus_fixup(bus);
+       else
+               sn_bus_fixup(bus);
+}
+
+/*
+ * sn_io_early_init - Perform early IO (and some non-IO) initialization.
+ *                   In particular, setup the sn_pci_provider[] array.
+ *                   This needs to be done prior to any bus scanning
+ *                   (acpi_scan_init()) in the ACPI case, as the SN
+ *                   bus fixup code will reference the array.
+ */
+static int __init
+sn_io_early_init(void)
+{
+       int i;
+
+       if (!ia64_platform_is("sn2") || IS_RUNNING_ON_FAKE_PROM())
+               return 0;
+
+       /*
+        * prime sn_pci_provider[].  Individial provider init routines will
+        * override their respective default entries.
+        */
+
+       for (i = 0; i < PCIIO_ASIC_MAX_TYPES; i++)
+               sn_pci_provider[i] = &sn_pci_default_provider;
+
+       pcibr_init_provider();
+       tioca_init_provider();
+       tioce_init_provider();
+
+       /*
+        * This is needed to avoid bounce limit checks in the blk layer
+        */
+       ia64_max_iommu_merge_mask = ~PAGE_MASK;
+
+       sn_irq_lh_init();
+       INIT_LIST_HEAD(&sn_sysdata_list);
+       sn_init_cpei_timer();
+
+#ifdef CONFIG_PROC_FS
+       register_sn_procfs();
+#endif
+
+       printk(KERN_INFO "ACPI  DSDT OEM Rev 0x%x\n",
+              acpi_gbl_DSDT->oem_revision);
+       if (SN_ACPI_BASE_SUPPORT())
+               sn_io_acpi_init();
+       else
+               sn_io_init();
+       return 0;
+}
+
+arch_initcall(sn_io_early_init);
+
+/*
+ * sn_io_late_init() - Perform any final platform specific IO initialization.
+ */
+
+int __init
+sn_io_late_init(void)
+{
+       struct pci_bus *bus;
+       struct pcibus_bussoft *bussoft;
+       cnodeid_t cnode;
+       nasid_t nasid;
+       cnodeid_t near_cnode;
+
+       if (!ia64_platform_is("sn2") || IS_RUNNING_ON_FAKE_PROM())
+               return 0;
+
+       /*
+        * Setup closest node in pci_controller->node for
+        * PIC, TIOCP, TIOCE (TIOCA does it during bus fixup using
+        * info from the PROM).
+        */
+       bus = NULL;
+       while ((bus = pci_find_next_bus(bus)) != NULL) {
+               bussoft = SN_PCIBUS_BUSSOFT(bus);
+               nasid = NASID_GET(bussoft->bs_base);
+               cnode = nasid_to_cnodeid(nasid);
+               if ((bussoft->bs_asic_type == PCIIO_ASIC_TYPE_TIOCP) ||
+                   (bussoft->bs_asic_type == PCIIO_ASIC_TYPE_TIOCE)) {
+                       /* TIO PCI Bridge: find nearest node with CPUs */
+                       int e = sn_hwperf_get_nearest_node(cnode, NULL,
+                                                          &near_cnode);
+                       if (e < 0) {
+                               near_cnode = (cnodeid_t)-1; /* use any node */
+                               printk(KERN_WARNING "pcibr_bus_fixup: failed "
+                                      "to find near node with CPUs to TIO "
+                                      "node %d, err=%d\n", cnode, e);
+                       }
+                       PCI_CONTROLLER(bus)->node = near_cnode;
+               } else if (bussoft->bs_asic_type == PCIIO_ASIC_TYPE_PIC) {
+                       PCI_CONTROLLER(bus)->node = cnode;
+               }
+       }
+
+       sn_ioif_inited = 1;     /* SN I/O infrastructure now initialized */
+
+       return 0;
+}
+
+fs_initcall(sn_io_late_init);
+
+EXPORT_SYMBOL(sn_pci_fixup_slot);
+EXPORT_SYMBOL(sn_pci_unfixup_slot);
+EXPORT_SYMBOL(sn_bus_store_sysdata);
+EXPORT_SYMBOL(sn_bus_free_sysdata);
+EXPORT_SYMBOL(sn_generate_path);
+
index dc09a6a28a37ca42ba5368944d1516375b4bedea..9ad843e0383b53a1745591defbf2497461a73471 100644 (file)
  * License.  See the file "COPYING" in the main directory of this archive
  * for more details.
  *
- * Copyright (C) 1992 - 1997, 2000-2005 Silicon Graphics, Inc. All rights reserved.
+ * Copyright (C) 1992 - 1997, 2000-2006 Silicon Graphics, Inc. All rights reserved.
  */
 
-#include <linux/bootmem.h>
-#include <linux/nodemask.h>
 #include <asm/sn/types.h>
 #include <asm/sn/addrs.h>
-#include <asm/sn/sn_feature_sets.h>
-#include <asm/sn/geo.h>
 #include <asm/sn/io.h>
-#include <asm/sn/l1.h>
 #include <asm/sn/module.h>
-#include <asm/sn/pcibr_provider.h>
+#include <asm/sn/intr.h>
 #include <asm/sn/pcibus_provider_defs.h>
 #include <asm/sn/pcidev.h>
-#include <asm/sn/simulator.h>
 #include <asm/sn/sn_sal.h>
-#include <asm/sn/tioca_provider.h>
-#include <asm/sn/tioce_provider.h>
 #include "xtalk/hubdev.h"
-#include "xtalk/xwidgetdev.h"
-
-
-extern void sn_init_cpei_timer(void);
-extern void register_sn_procfs(void);
-
-static struct list_head sn_sysdata_list;
-
-/* sysdata list struct */
-struct sysdata_el {
-       struct list_head entry;
-       void *sysdata;
-};
-
-struct slab_info {
-       struct hubdev_info hubdev;
-};
-
-struct brick {
-       moduleid_t id;          /* Module ID of this module        */
-       struct slab_info slab_info[MAX_SLABS + 1];
-};
-
-int sn_ioif_inited;            /* SN I/O infrastructure initialized? */
-
-struct sn_pcibus_provider *sn_pci_provider[PCIIO_ASIC_MAX_TYPES];      /* indexed by asic type */
-
-static int max_segment_number;          /* Default highest segment number */
-static int max_pcibus_number = 255;    /* Default highest pci bus number */
 
 /*
- * Hooks and struct for unsupported pci providers
+ * The code in this file will only be executed when running with
+ * a PROM that does _not_ have base ACPI IO support.
+ * (i.e., SN_ACPI_BASE_SUPPORT() == 0)
  */
 
-static dma_addr_t
-sn_default_pci_map(struct pci_dev *pdev, unsigned long paddr, size_t size, int type)
-{
-       return 0;
-}
-
-static void
-sn_default_pci_unmap(struct pci_dev *pdev, dma_addr_t addr, int direction)
-{
-       return;
-}
-
-static void *
-sn_default_pci_bus_fixup(struct pcibus_bussoft *soft, struct pci_controller *controller)
-{
-       return NULL;
-}
-
-static struct sn_pcibus_provider sn_pci_default_provider = {
-       .dma_map = sn_default_pci_map,
-       .dma_map_consistent = sn_default_pci_map,
-       .dma_unmap = sn_default_pci_unmap,
-       .bus_fixup = sn_default_pci_bus_fixup,
-};
-
-/*
- * Retrieve the DMA Flush List given nasid, widget, and device.
- * This list is needed to implement the WAR - Flush DMA data on PIO Reads.
- */
-static inline u64
-sal_get_device_dmaflush_list(u64 nasid, u64 widget_num, u64 device_num,
-                            u64 address)
-{
-       struct ia64_sal_retval ret_stuff;
-       ret_stuff.status = 0;
-       ret_stuff.v0 = 0;
+static int max_segment_number;          /* Default highest segment number */
+static int max_pcibus_number = 255;    /* Default highest pci bus number */
 
-       SAL_CALL_NOLOCK(ret_stuff,
-                       (u64) SN_SAL_IOIF_GET_DEVICE_DMAFLUSH_LIST,
-                       (u64) nasid, (u64) widget_num,
-                       (u64) device_num, (u64) address, 0, 0, 0);
-       return ret_stuff.status;
-}
 
 /*
  * Retrieve the hub device info structure for the given nasid.
@@ -131,93 +56,20 @@ static inline u64 sal_get_pcibus_info(u64 segment, u64 busnum, u64 address)
        return ret_stuff.v0;
 }
 
-/*
- * Retrieve the pci device information given the bus and device|function number.
- */
-static inline u64
-sal_get_pcidev_info(u64 segment, u64 bus_number, u64 devfn, u64 pci_dev,
-                   u64 sn_irq_info)
-{
-       struct ia64_sal_retval ret_stuff;
-       ret_stuff.status = 0;
-       ret_stuff.v0 = 0;
-
-       SAL_CALL_NOLOCK(ret_stuff,
-                       (u64) SN_SAL_IOIF_GET_PCIDEV_INFO,
-                       (u64) segment, (u64) bus_number, (u64) devfn,
-                       (u64) pci_dev,
-                       sn_irq_info, 0, 0);
-       return ret_stuff.v0;
-}
-
-/*
- * sn_pcidev_info_get() - Retrieve the pcidev_info struct for the specified
- *                       device.
- */
-inline struct pcidev_info *
-sn_pcidev_info_get(struct pci_dev *dev)
-{
-       struct pcidev_info *pcidev;
-
-       list_for_each_entry(pcidev,
-                           &(SN_PCI_CONTROLLER(dev)->pcidev_info), pdi_list) {
-               if (pcidev->pdi_linux_pcidev == dev) {
-                       return pcidev;
-               }
-       }
-       return NULL;
-}
-
-/* Older PROM flush WAR
- *
- * 01/16/06 -- This war will be in place until a new official PROM is released.
- * Additionally note that the struct sn_flush_device_war also has to be
- * removed from arch/ia64/sn/include/xtalk/hubdev.h
- */
-static u8 war_implemented = 0;
-
-static s64 sn_device_fixup_war(u64 nasid, u64 widget, int device,
-                              struct sn_flush_device_common *common)
-{
-       struct sn_flush_device_war *war_list;
-       struct sn_flush_device_war *dev_entry;
-       struct ia64_sal_retval isrv = {0,0,0,0};
-
-       if (!war_implemented) {
-               printk(KERN_WARNING "PROM version < 4.50 -- implementing old "
-                      "PROM flush WAR\n");
-               war_implemented = 1;
-       }
-
-       war_list = kzalloc(DEV_PER_WIDGET * sizeof(*war_list), GFP_KERNEL);
-       if (!war_list)
-               BUG();
-
-       SAL_CALL_NOLOCK(isrv, SN_SAL_IOIF_GET_WIDGET_DMAFLUSH_LIST,
-                       nasid, widget, __pa(war_list), 0, 0, 0 ,0);
-       if (isrv.status)
-               panic("sn_device_fixup_war failed: %s\n",
-                     ia64_sal_strerror(isrv.status));
-
-       dev_entry = war_list + device;
-       memcpy(common,dev_entry, sizeof(*common));
-       kfree(war_list);
-
-       return isrv.status;
-}
 
 /*
- * sn_fixup_ionodes() - This routine initializes the HUB data strcuture for
- *     each node in the system.
+ * sn_fixup_ionodes() - This routine initializes the HUB data structure for
+ *                     each node in the system. This function is only
+ *                     executed when running with a non-ACPI capable PROM.
  */
 static void __init sn_fixup_ionodes(void)
 {
-       struct sn_flush_device_kernel *sn_flush_device_kernel;
-       struct sn_flush_device_kernel *dev_entry;
+
        struct hubdev_info *hubdev;
        u64 status;
        u64 nasid;
-       int i, widget, device, size;
+       int i;
+       extern void sn_common_hubdev_init(struct hubdev_info *);
 
        /*
         * Get SGI Specific HUB chipset information.
@@ -240,70 +92,47 @@ static void __init sn_fixup_ionodes(void)
                        max_segment_number = hubdev->max_segment_number;
                        max_pcibus_number = hubdev->max_pcibus_number;
                }
+               sn_common_hubdev_init(hubdev);
+       }
+}
 
-               /* Attach the error interrupt handlers */
-               if (nasid & 1)
-                       ice_error_init(hubdev);
-               else
-                       hub_error_init(hubdev);
-
-               for (widget = 0; widget <= HUB_WIDGET_ID_MAX; widget++)
-                       hubdev->hdi_xwidget_info[widget].xwi_hubinfo = hubdev;
-
-               if (!hubdev->hdi_flush_nasid_list.widget_p)
-                       continue;
-
-               size = (HUB_WIDGET_ID_MAX + 1) *
-                       sizeof(struct sn_flush_device_kernel *);
-               hubdev->hdi_flush_nasid_list.widget_p =
-                       kzalloc(size, GFP_KERNEL);
-               if (!hubdev->hdi_flush_nasid_list.widget_p)
+/*
+ * sn_pci_legacy_window_fixup - Create PCI controller windows for
+ *                             legacy IO and MEM space. This needs to
+ *                             be done here, as the PROM does not have
+ *                             ACPI support defining the root buses
+ *                             and their resources (_CRS),
+ */
+static void
+sn_legacy_pci_window_fixup(struct pci_controller *controller,
+                          u64 legacy_io, u64 legacy_mem)
+{
+               controller->window = kcalloc(2, sizeof(struct pci_window),
+                                            GFP_KERNEL);
+               if (controller->window == NULL)
                        BUG();
-
-               for (widget = 0; widget <= HUB_WIDGET_ID_MAX; widget++) {
-                       size = DEV_PER_WIDGET *
-                               sizeof(struct sn_flush_device_kernel);
-                       sn_flush_device_kernel = kzalloc(size, GFP_KERNEL);
-                       if (!sn_flush_device_kernel)
-                               BUG();
-
-                       dev_entry = sn_flush_device_kernel;
-                       for (device = 0; device < DEV_PER_WIDGET;
-                            device++,dev_entry++) {
-                               size = sizeof(struct sn_flush_device_common);
-                               dev_entry->common = kzalloc(size, GFP_KERNEL);
-                               if (!dev_entry->common)
-                                       BUG();
-
-                               if (sn_prom_feature_available(
-                                                      PRF_DEVICE_FLUSH_LIST))
-                                       status = sal_get_device_dmaflush_list(
-                                                    nasid, widget, device,
-                                                    (u64)(dev_entry->common));
-                               else
-                                       status = sn_device_fixup_war(nasid,
-                                                    widget, device,
-                                                    dev_entry->common);
-                               if (status != SALRET_OK)
-                                       panic("SAL call failed: %s\n",
-                                             ia64_sal_strerror(status));
-
-                               spin_lock_init(&dev_entry->sfdl_flush_lock);
-                       }
-
-                       if (sn_flush_device_kernel)
-                               hubdev->hdi_flush_nasid_list.widget_p[widget] =
-                                                      sn_flush_device_kernel;
-               }
-       }
+               controller->window[0].offset = legacy_io;
+               controller->window[0].resource.name = "legacy_io";
+               controller->window[0].resource.flags = IORESOURCE_IO;
+               controller->window[0].resource.start = legacy_io;
+               controller->window[0].resource.end =
+                               controller->window[0].resource.start + 0xffff;
+               controller->window[0].resource.parent = &ioport_resource;
+               controller->window[1].offset = legacy_mem;
+               controller->window[1].resource.name = "legacy_mem";
+               controller->window[1].resource.flags = IORESOURCE_MEM;
+               controller->window[1].resource.start = legacy_mem;
+               controller->window[1].resource.end =
+                      controller->window[1].resource.start + (1024 * 1024) - 1;
+               controller->window[1].resource.parent = &iomem_resource;
+               controller->windows = 2;
 }
 
 /*
  * sn_pci_window_fixup() - Create a pci_window for each device resource.
- *                        Until ACPI support is added, we need this code
- *                        to setup pci_windows for use by
- *                        pcibios_bus_to_resource(),
- *                        pcibios_resource_to_bus(), etc.
+ *                        It will setup pci_windows for use by
+ *                        pcibios_bus_to_resource(), pcibios_resource_to_bus(),
+ *                        etc.
  */
 static void
 sn_pci_window_fixup(struct pci_dev *dev, unsigned int count,
@@ -342,60 +171,22 @@ sn_pci_window_fixup(struct pci_dev *dev, unsigned int count,
        controller->window = new_window;
 }
 
-void sn_pci_unfixup_slot(struct pci_dev *dev)
-{
-       struct pci_dev *host_pci_dev = SN_PCIDEV_INFO(dev)->host_pci_dev;
-
-       sn_irq_unfixup(dev);
-       pci_dev_put(host_pci_dev);
-       pci_dev_put(dev);
-}
-
 /*
- * sn_pci_fixup_slot() - This routine sets up a slot's resources
- * consistent with the Linux PCI abstraction layer.  Resources acquired
- * from our PCI provider include PIO maps to BAR space and interrupt
- * objects.
+ * sn_more_slot_fixup() - We are not running with an ACPI capable PROM,
+ *                       and need to convert the pci_dev->resource
+ *                       'start' and 'end' addresses to mapped addresses,
+ *                       and setup the pci_controller->window array entries.
  */
-void sn_pci_fixup_slot(struct pci_dev *dev)
+void
+sn_more_slot_fixup(struct pci_dev *dev, struct pcidev_info *pcidev_info)
 {
        unsigned int count = 0;
        int idx;
-       int segment = pci_domain_nr(dev->bus);
-       int status = 0;
-       struct pcibus_bussoft *bs;
-       struct pci_bus *host_pci_bus;
-       struct pci_dev *host_pci_dev;
-       struct pcidev_info *pcidev_info;
        s64 pci_addrs[PCI_ROM_RESOURCE + 1];
-       struct sn_irq_info *sn_irq_info;
-       unsigned long size;
-       unsigned int bus_no, devfn;
-
-       pci_dev_get(dev); /* for the sysdata pointer */
-       pcidev_info = kzalloc(sizeof(struct pcidev_info), GFP_KERNEL);
-       if (!pcidev_info)
-               BUG();          /* Cannot afford to run out of memory */
-
-       sn_irq_info = kzalloc(sizeof(struct sn_irq_info), GFP_KERNEL);
-       if (!sn_irq_info)
-               BUG();          /* Cannot afford to run out of memory */
-
-       /* Call to retrieve pci device information needed by kernel. */
-       status = sal_get_pcidev_info((u64) segment, (u64) dev->bus->number, 
-                                    dev->devfn,
-                                    (u64) __pa(pcidev_info),
-                                    (u64) __pa(sn_irq_info));
-       if (status)
-               BUG(); /* Cannot get platform pci device information */
-
-       /* Add pcidev_info to list in sn_pci_controller struct */
-       list_add_tail(&pcidev_info->pdi_list,
-                     &(SN_PCI_CONTROLLER(dev->bus)->pcidev_info));
+       unsigned long addr, end, size, start;
 
        /* Copy over PIO Mapped Addresses */
        for (idx = 0; idx <= PCI_ROM_RESOURCE; idx++) {
-               unsigned long start, end, addr;
 
                if (!pcidev_info->pdi_pio_mapped_addr[idx]) {
                        pci_addrs[idx] = -1;
@@ -419,60 +210,28 @@ void sn_pci_fixup_slot(struct pci_dev *dev)
                        dev->resource[idx].parent = &ioport_resource;
                else
                        dev->resource[idx].parent = &iomem_resource;
+               /* If ROM, mark as shadowed in PROM */
+               if (idx == PCI_ROM_RESOURCE)
+                       dev->resource[idx].flags |= IORESOURCE_ROM_BIOS_COPY;
        }
        /* Create a pci_window in the pci_controller struct for
         * each device resource.
         */
        if (count > 0)
                sn_pci_window_fixup(dev, count, pci_addrs);
-
-       /*
-        * Using the PROMs values for the PCI host bus, get the Linux
-        * PCI host_pci_dev struct and set up host bus linkages
-        */
-
-       bus_no = (pcidev_info->pdi_slot_host_handle >> 32) & 0xff;
-       devfn = pcidev_info->pdi_slot_host_handle & 0xffffffff;
-       host_pci_bus = pci_find_bus(segment, bus_no);
-       host_pci_dev = pci_get_slot(host_pci_bus, devfn);
-
-       pcidev_info->host_pci_dev = host_pci_dev;
-       pcidev_info->pdi_linux_pcidev = dev;
-       pcidev_info->pdi_host_pcidev_info = SN_PCIDEV_INFO(host_pci_dev);
-       bs = SN_PCIBUS_BUSSOFT(dev->bus);
-       pcidev_info->pdi_pcibus_info = bs;
-
-       if (bs && bs->bs_asic_type < PCIIO_ASIC_MAX_TYPES) {
-               SN_PCIDEV_BUSPROVIDER(dev) = sn_pci_provider[bs->bs_asic_type];
-       } else {
-               SN_PCIDEV_BUSPROVIDER(dev) = &sn_pci_default_provider;
-       }
-
-       /* Only set up IRQ stuff if this device has a host bus context */
-       if (bs && sn_irq_info->irq_irq) {
-               pcidev_info->pdi_sn_irq_info = sn_irq_info;
-               dev->irq = pcidev_info->pdi_sn_irq_info->irq_irq;
-               sn_irq_fixup(dev, sn_irq_info);
-       } else {
-               pcidev_info->pdi_sn_irq_info = NULL;
-               kfree(sn_irq_info);
-       }
 }
 
 /*
  * sn_pci_controller_fixup() - This routine sets up a bus's resources
- * consistent with the Linux PCI abstraction layer.
+ *                            consistent with the Linux PCI abstraction layer.
  */
-void sn_pci_controller_fixup(int segment, int busnum, struct pci_bus *bus)
+static void
+sn_pci_controller_fixup(int segment, int busnum, struct pci_bus *bus)
 {
-       int status;
-       int nasid, cnode;
+       s64 status = 0;
        struct pci_controller *controller;
-       struct sn_pci_controller *sn_controller;
        struct pcibus_bussoft *prom_bussoft_ptr;
-       struct hubdev_info *hubdev_info;
-       void *provider_soft;
-       struct sn_pcibus_provider *provider;
+
 
        status = sal_get_pcibus_info((u64) segment, (u64) busnum,
                                     (u64) ia64_tpa(&prom_bussoft_ptr));
@@ -480,261 +239,77 @@ void sn_pci_controller_fixup(int segment, int busnum, struct pci_bus *bus)
                return;         /*bus # does not exist */
        prom_bussoft_ptr = __va(prom_bussoft_ptr);
 
-       /* Allocate a sn_pci_controller, which has a pci_controller struct
-        * as the first member.
-        */
-       sn_controller = kzalloc(sizeof(struct sn_pci_controller), GFP_KERNEL);
-       if (!sn_controller)
+       controller = kzalloc(sizeof(*controller), GFP_KERNEL);
+       if (!controller)
                BUG();
-       INIT_LIST_HEAD(&sn_controller->pcidev_info);
-       controller = &sn_controller->pci_controller;
        controller->segment = segment;
 
-       if (bus == NULL) {
-               bus = pci_scan_bus(busnum, &pci_root_ops, controller);
-               if (bus == NULL)
-                       goto error_return; /* error, or bus already scanned */
-               bus->sysdata = NULL;
-       }
-
-       if (bus->sysdata)
-               goto error_return; /* sysdata already alloc'd */
-
        /*
-        * Per-provider fixup.  Copies the contents from prom to local
-        * area and links SN_PCIBUS_BUSSOFT().
+        * Temporarily save the prom_bussoft_ptr for use by sn_bus_fixup().
+        * (platform_data will be overwritten later in sn_common_bus_fixup())
         */
+       controller->platform_data = prom_bussoft_ptr;
 
-       if (prom_bussoft_ptr->bs_asic_type >= PCIIO_ASIC_MAX_TYPES)
-               goto error_return; /* unsupported asic type */
-
-       if (prom_bussoft_ptr->bs_asic_type == PCIIO_ASIC_TYPE_PPB)
-               goto error_return; /* no further fixup necessary */
-
-       provider = sn_pci_provider[prom_bussoft_ptr->bs_asic_type];
-       if (provider == NULL)
-               goto error_return; /* no provider registerd for this asic */
+       bus = pci_scan_bus(busnum, &pci_root_ops, controller);
+       if (bus == NULL)
+               goto error_return; /* error, or bus already scanned */
 
        bus->sysdata = controller;
-       if (provider->bus_fixup)
-               provider_soft = (*provider->bus_fixup) (prom_bussoft_ptr, controller);
-       else
-               provider_soft = NULL;
-
-       if (provider_soft == NULL) {
-               /* fixup failed or not applicable */
-               bus->sysdata = NULL;
-               goto error_return;
-       }
-
-       /*
-        * Setup pci_windows for legacy IO and MEM space.
-        * (Temporary until ACPI support is in place.)
-        */
-       controller->window = kcalloc(2, sizeof(struct pci_window), GFP_KERNEL);
-       if (controller->window == NULL)
-               BUG();
-       controller->window[0].offset = prom_bussoft_ptr->bs_legacy_io;
-       controller->window[0].resource.name = "legacy_io";
-       controller->window[0].resource.flags = IORESOURCE_IO;
-       controller->window[0].resource.start = prom_bussoft_ptr->bs_legacy_io;
-       controller->window[0].resource.end =
-           controller->window[0].resource.start + 0xffff;
-       controller->window[0].resource.parent = &ioport_resource;
-       controller->window[1].offset = prom_bussoft_ptr->bs_legacy_mem;
-       controller->window[1].resource.name = "legacy_mem";
-       controller->window[1].resource.flags = IORESOURCE_MEM;
-       controller->window[1].resource.start = prom_bussoft_ptr->bs_legacy_mem;
-       controller->window[1].resource.end =
-           controller->window[1].resource.start + (1024 * 1024) - 1;
-       controller->window[1].resource.parent = &iomem_resource;
-       controller->windows = 2;
-
-       /*
-        * Generic bus fixup goes here.  Don't reference prom_bussoft_ptr
-        * after this point.
-        */
-
-       PCI_CONTROLLER(bus)->platform_data = provider_soft;
-       nasid = NASID_GET(SN_PCIBUS_BUSSOFT(bus)->bs_base);
-       cnode = nasid_to_cnodeid(nasid);
-       hubdev_info = (struct hubdev_info *)(NODEPDA(cnode)->pdinfo);
-       SN_PCIBUS_BUSSOFT(bus)->bs_xwidget_info =
-           &(hubdev_info->hdi_xwidget_info[SN_PCIBUS_BUSSOFT(bus)->bs_xid]);
 
-       /*
-        * If the node information we obtained during the fixup phase is invalid
-        * then set controller->node to -1 (undetermined)
-        */
-       if (controller->node >= num_online_nodes()) {
-               struct pcibus_bussoft *b = SN_PCIBUS_BUSSOFT(bus);
-
-               printk(KERN_WARNING "Device ASIC=%u XID=%u PBUSNUM=%u"
-                                   "L_IO=%lx L_MEM=%lx BASE=%lx\n",
-                       b->bs_asic_type, b->bs_xid, b->bs_persist_busnum,
-                       b->bs_legacy_io, b->bs_legacy_mem, b->bs_base);
-               printk(KERN_WARNING "on node %d but only %d nodes online."
-                       "Association set to undetermined.\n",
-                       controller->node, num_online_nodes());
-               controller->node = -1;
-       }
        return;
 
 error_return:
 
-       kfree(sn_controller);
+       kfree(controller);
        return;
 }
 
-void sn_bus_store_sysdata(struct pci_dev *dev)
+/*
+ * sn_bus_fixup
+ */
+void
+sn_bus_fixup(struct pci_bus *bus)
 {
-       struct sysdata_el *element;
-
-       element = kzalloc(sizeof(struct sysdata_el), GFP_KERNEL);
-       if (!element) {
-               dev_dbg(dev, "%s: out of memory!\n", __FUNCTION__);
-               return;
-       }
-       element->sysdata = SN_PCIDEV_INFO(dev);
-       list_add(&element->entry, &sn_sysdata_list);
-}
+       struct pci_dev *pci_dev = NULL;
+       struct pcibus_bussoft *prom_bussoft_ptr;
+       extern void sn_common_bus_fixup(struct pci_bus *,
+                                       struct pcibus_bussoft *);
+
+
+       if (!bus->parent) {  /* If root bus */
+               prom_bussoft_ptr = PCI_CONTROLLER(bus)->platform_data;
+               if (prom_bussoft_ptr == NULL) {
+                       printk(KERN_ERR
+                              "sn_bus_fixup: 0x%04x:0x%02x Unable to "
+                              "obtain prom_bussoft_ptr\n",
+                              pci_domain_nr(bus), bus->number);
+                       return;
+               }
+               sn_common_bus_fixup(bus, prom_bussoft_ptr);
+               sn_legacy_pci_window_fixup(PCI_CONTROLLER(bus),
+                                          prom_bussoft_ptr->bs_legacy_io,
+                                          prom_bussoft_ptr->bs_legacy_mem);
+        }
+        list_for_each_entry(pci_dev, &bus->devices, bus_list) {
+                sn_pci_fixup_slot(pci_dev);
+        }
 
-void sn_bus_free_sysdata(void)
-{
-       struct sysdata_el *element;
-       struct list_head *list, *safe;
-
-       list_for_each_safe(list, safe, &sn_sysdata_list) {
-               element = list_entry(list, struct sysdata_el, entry);
-               list_del(&element->entry);
-               list_del(&(((struct pcidev_info *)
-                            (element->sysdata))->pdi_list));
-               kfree(element->sysdata);
-               kfree(element);
-       }
-       return;
 }
 
 /*
- * Ugly hack to get PCI setup until we have a proper ACPI namespace.
+ * sn_io_init - PROM does not have ACPI support to define nodes or root buses,
+ *             so we need to do things the hard way, including initiating the
+ *             bus scanning ourselves.
  */
 
-#define PCI_BUSES_TO_SCAN 256
-
-static int __init sn_pci_init(void)
+void __init sn_io_init(void)
 {
        int i, j;
-       struct pci_dev *pci_dev = NULL;
-
-       if (!ia64_platform_is("sn2") || IS_RUNNING_ON_FAKE_PROM())
-               return 0;
-
-       /*
-        * prime sn_pci_provider[].  Individial provider init routines will
-        * override their respective default entries.
-        */
-
-       for (i = 0; i < PCIIO_ASIC_MAX_TYPES; i++)
-               sn_pci_provider[i] = &sn_pci_default_provider;
 
-       pcibr_init_provider();
-       tioca_init_provider();
-       tioce_init_provider();
-
-       /*
-        * This is needed to avoid bounce limit checks in the blk layer
-        */
-       ia64_max_iommu_merge_mask = ~PAGE_MASK;
        sn_fixup_ionodes();
-       sn_irq_lh_init();
-       INIT_LIST_HEAD(&sn_sysdata_list);
-       sn_init_cpei_timer();
-
-#ifdef CONFIG_PROC_FS
-       register_sn_procfs();
-#endif
 
        /* busses are not known yet ... */
        for (i = 0; i <= max_segment_number; i++)
                for (j = 0; j <= max_pcibus_number; j++)
                        sn_pci_controller_fixup(i, j, NULL);
-
-       /*
-        * Generic Linux PCI Layer has created the pci_bus and pci_dev 
-        * structures - time for us to add our SN PLatform specific 
-        * information.
-        */
-
-       while ((pci_dev =
-               pci_get_device(PCI_ANY_ID, PCI_ANY_ID, pci_dev)) != NULL)
-               sn_pci_fixup_slot(pci_dev);
-
-       sn_ioif_inited = 1;     /* sn I/O infrastructure now initialized */
-
-       return 0;
-}
-
-/*
- * hubdev_init_node() - Creates the HUB data structure and link them to it's 
- *     own NODE specific data area.
- */
-void hubdev_init_node(nodepda_t * npda, cnodeid_t node)
-{
-       struct hubdev_info *hubdev_info;
-       int size;
-       pg_data_t *pg;
-
-       size = sizeof(struct hubdev_info);
-
-       if (node >= num_online_nodes()) /* Headless/memless IO nodes */
-               pg = NODE_DATA(0);
-       else
-               pg = NODE_DATA(node);
-
-       hubdev_info = (struct hubdev_info *)alloc_bootmem_node(pg, size);
-
-       npda->pdinfo = (void *)hubdev_info;
 }
-
-geoid_t
-cnodeid_get_geoid(cnodeid_t cnode)
-{
-       struct hubdev_info *hubdev;
-
-       hubdev = (struct hubdev_info *)(NODEPDA(cnode)->pdinfo);
-       return hubdev->hdi_geoid;
-}
-
-void sn_generate_path(struct pci_bus *pci_bus, char *address)
-{
-       nasid_t nasid;
-       cnodeid_t cnode;
-       geoid_t geoid;
-       moduleid_t moduleid;
-       u16 bricktype;
-
-       nasid = NASID_GET(SN_PCIBUS_BUSSOFT(pci_bus)->bs_base);
-       cnode = nasid_to_cnodeid(nasid);
-       geoid = cnodeid_get_geoid(cnode);
-       moduleid = geo_module(geoid);
-
-       sprintf(address, "module_%c%c%c%c%.2d",
-               '0'+RACK_GET_CLASS(MODULE_GET_RACK(moduleid)),
-               '0'+RACK_GET_GROUP(MODULE_GET_RACK(moduleid)),
-               '0'+RACK_GET_NUM(MODULE_GET_RACK(moduleid)),
-               MODULE_GET_BTCHAR(moduleid), MODULE_GET_BPOS(moduleid));
-
-       /* Tollhouse requires slot id to be displayed */
-       bricktype = MODULE_GET_BTYPE(moduleid);
-       if ((bricktype == L1_BRICKTYPE_191010) ||
-           (bricktype == L1_BRICKTYPE_1932))
-                       sprintf(address, "%s^%d", address, geo_slot(geoid));
-}
-
-subsys_initcall(sn_pci_init);
-EXPORT_SYMBOL(sn_pci_fixup_slot);
-EXPORT_SYMBOL(sn_pci_unfixup_slot);
-EXPORT_SYMBOL(sn_pci_controller_fixup);
-EXPORT_SYMBOL(sn_bus_store_sysdata);
-EXPORT_SYMBOL(sn_bus_free_sysdata);
-EXPORT_SYMBOL(sn_generate_path);
index 7ce3cdad627bf9ca50e657f2da6de70acf9c3589..4aa4f301d56d5a63aa114830b23328eefc034476 100644 (file)
@@ -3,10 +3,11 @@
  * License.  See the file "COPYING" in the main directory of this archive
  * for more details.
  *
- * Copyright (C) 2000-2003 Silicon Graphics, Inc. All rights reserved.
+ * Copyright (C) 2000-2003, 2006 Silicon Graphics, Inc. All rights reserved.
  */
 
 #include <linux/module.h>
+#include <linux/acpi.h>
 #include <asm/io.h>
 #include <asm/delay.h>
 #include <asm/vga.h>
@@ -15,6 +16,7 @@
 #include <asm/sn/pda.h>
 #include <asm/sn/sn_cpuid.h>
 #include <asm/sn/shub_mmr.h>
+#include <asm/sn/acpi.h>
 
 #define IS_LEGACY_VGA_IOPORT(p) \
        (((p) >= 0x3b0 && (p) <= 0x3bb) || ((p) >= 0x3c0 && (p) <= 0x3df))
@@ -31,11 +33,14 @@ void *sn_io_addr(unsigned long port)
 {
        if (!IS_RUNNING_ON_SIMULATOR()) {
                if (IS_LEGACY_VGA_IOPORT(port))
-                       port += vga_console_iobase;
+                       return (__ia64_mk_io_addr(port));
                /* On sn2, legacy I/O ports don't point at anything */
                if (port < (64 * 1024))
                        return NULL;
-               return ((void *)(port | __IA64_UNCACHED_OFFSET));
+               if (SN_ACPI_BASE_SUPPORT())
+                       return (__ia64_mk_io_addr(port));
+               else
+                       return ((void *)(port | __IA64_UNCACHED_OFFSET));
        } else {
                /* but the simulator uses them... */
                unsigned long addr;
index 7a2d824c5ce3976be558a445d04af8d06a11b72f..1d009f93244d2444edf7324ac2f44f6e09be7953 100644 (file)
@@ -388,6 +388,14 @@ void __init sn_setup(char **cmdline_p)
        ia64_sn_plat_set_error_handling_features();     // obsolete
        ia64_sn_set_os_feature(OSF_MCA_SLV_TO_OS_INIT_SLV);
        ia64_sn_set_os_feature(OSF_FEAT_LOG_SBES);
+       /*
+        * Note: The calls to notify the PROM of ACPI and PCI Segment
+        *       support must be done prior to acpi_load_tables(), as
+        *       an ACPI capable PROM will rebuild the DSDT as result
+        *       of the call.
+        */
+       ia64_sn_set_os_feature(OSF_PCISEGMENT_ENABLE);
+       ia64_sn_set_os_feature(OSF_ACPI_ENABLE);
 
 
 #if defined(CONFIG_VT) && defined(CONFIG_VGA_CONSOLE)
@@ -413,6 +421,16 @@ void __init sn_setup(char **cmdline_p)
        if (! vga_console_membase)
                sn_scan_pcdp();
 
+       /*
+        *      Setup legacy IO space.
+        *      vga_console_iobase maps to PCI IO Space address 0 on the
+        *      bus containing the VGA console.
+        */
+       if (vga_console_iobase) {
+               io_space[0].mmio_base = vga_console_iobase;
+               io_space[0].sparse = 0;
+       }
+
        if (vga_console_membase) {
                /* usable vga ... make tty0 the preferred default console */
                if (!strstr(*cmdline_p, "console="))
index feaf1a6e8101b9868e326730112e8656e907bbc6..493380b2c05fd1b6756ad9edb711c4992125f5e7 100644 (file)
@@ -552,7 +552,7 @@ static void __exit tiocx_exit(void)
        bus_unregister(&tiocx_bus_type);
 }
 
-subsys_initcall(tiocx_init);
+fs_initcall(tiocx_init);
 module_exit(tiocx_exit);
 
 /************************************************************************
index 27dd7df0f446c606bfc17572af0622fab0a45825..6846dc9b432dc7a2582cf451a7a68c7c8bb2bb2b 100644 (file)
@@ -3,7 +3,7 @@
  * License.  See the file "COPYING" in the main directory of this archive
  * for more details.
  *
- * Copyright (C) 2001-2004 Silicon Graphics, Inc. All rights reserved.
+ * Copyright (C) 2001-2004, 2006 Silicon Graphics, Inc. All rights reserved.
  */
 
 #include <linux/interrupt.h>
@@ -109,7 +109,6 @@ void *
 pcibr_bus_fixup(struct pcibus_bussoft *prom_bussoft, struct pci_controller *controller)
 {
        int nasid, cnode, j;
-       cnodeid_t near_cnode;
        struct hubdev_info *hubdev_info;
        struct pcibus_info *soft;
        struct sn_flush_device_kernel *sn_flush_device_kernel;
@@ -186,20 +185,6 @@ pcibr_bus_fixup(struct pcibus_bussoft *prom_bussoft, struct pci_controller *cont
                return NULL;
        }
 
-       if (prom_bussoft->bs_asic_type == PCIIO_ASIC_TYPE_TIOCP) {
-               /* TIO PCI Bridge: find nearest node with CPUs */
-               int e = sn_hwperf_get_nearest_node(cnode, NULL, &near_cnode);
-
-               if (e < 0) {
-                       near_cnode = (cnodeid_t)-1; /* use any node */
-                       printk(KERN_WARNING "pcibr_bus_fixup: failed to find "
-                               "near node with CPUs to TIO node %d, err=%d\n",
-                               cnode, e);
-               }
-               controller->node = near_cnode;
-       }
-       else
-               controller->node = cnode;
        return soft;
 }
 
index 46e16dcf5971bf0149a09545f12d247f7c5116d5..35f854fb6120ff3f2d45709a2562d1a1a518e05d 100644 (file)
@@ -15,7 +15,6 @@
 #include <asm/sn/pcidev.h>
 #include <asm/sn/pcibus_provider_defs.h>
 #include <asm/sn/tioce_provider.h>
-#include <asm/sn/sn2/sn_hwperf.h>
 
 /*
  * 1/26/2006
@@ -990,8 +989,6 @@ tioce_target_interrupt(struct sn_irq_info *sn_irq_info)
 static void *
 tioce_bus_fixup(struct pcibus_bussoft *prom_bussoft, struct pci_controller *controller)
 {
-       int my_nasid;
-       cnodeid_t my_cnode, mem_cnode;
        struct tioce_common *tioce_common;
        struct tioce_kernel *tioce_kern;
        struct tioce __iomem *tioce_mmr;
@@ -1035,21 +1032,6 @@ tioce_bus_fixup(struct pcibus_bussoft *prom_bussoft, struct pci_controller *cont
                       tioce_common->ce_pcibus.bs_persist_segment,
                       tioce_common->ce_pcibus.bs_persist_busnum);
 
-       /*
-        * identify closest nasid for memory allocations
-        */
-
-       my_nasid = NASID_GET(tioce_common->ce_pcibus.bs_base);
-       my_cnode = nasid_to_cnodeid(my_nasid);
-
-       if (sn_hwperf_get_nearest_node(my_cnode, &mem_cnode, NULL) < 0) {
-               printk(KERN_WARNING "tioce_bus_fixup: failed to find "
-                      "closest node with MEM to TIO node %d\n", my_cnode);
-               mem_cnode = (cnodeid_t)-1; /* use any node */
-       }
-
-       controller->node = mem_cnode;
-
        return tioce_common;
 }
 
index 6d920d4bdc3d4a0c47f5c83b43da1737b8d280bb..c1bc22c6d0d817e019a7022450b00425c52df587 100644 (file)
@@ -565,7 +565,7 @@ config ROMVEC
        depends on ROM
        help
          This is almost always the same as the base of the ROM. Since on all
-         68000 type varients the vectors are at the base of the boot device
+         68000 type variants the vectors are at the base of the boot device
          on system startup.
 
 config ROMVECSIZE
@@ -574,7 +574,7 @@ config ROMVECSIZE
        depends on ROM
        help
          Define the size of the vector region in ROM. For most 68000
-         varients this would be 0x400 bytes in size. Set to 0 if you do
+         variants this would be 0x400 bytes in size. Set to 0 if you do
          not want a vector region at the start of the ROM.
 
 config ROMSTART
index 1443024b1c7c9ba2c688579d426ce18000584ffc..22bb540b5c0533423f213264d7e7429a386aa5ec 100644 (file)
@@ -865,7 +865,7 @@ config MIPS_DISABLE_OBSOLETE_IDE
        bool
 
 #
-# Endianess selection.  Suffiently obscure so many users don't know what to
+# Endianess selection.  Sufficiently obscure so many users don't know what to
 # answer,so we try hard to limit the available choices.  Also the use of a
 # choice statement should be more obvious to the user.
 #
@@ -874,7 +874,7 @@ choice
        help
          Some MIPS machines can be configured for either little or big endian
          byte order. These modes require different kernels and a different
-         Linux distribution.  In general there is one prefered byteorder for a
+         Linux distribution.  In general there is one preferred byteorder for a
          particular system but some systems are just as commonly used in the
          one or the other endianess.
 
index 0673dbedb241e8562db83b8fa69ba5d43eacf473..116d7d3683edb98777398df7d033300a79b0d738 100644 (file)
@@ -425,7 +425,7 @@ config PPC_MAPLE
        default n
        help
           This option enables support for the Maple 970FX Evaluation Board.
-         For more informations, refer to <http://www.970eval.com>
+         For more information, refer to <http://www.970eval.com>
 
 config PPC_PASEMI
        depends on PPC_MULTIPLATFORM && PPC64
index 7edb6b461382b407203b5c1929ae0fd7e4ba2487..edcd5b875b6699e8a3f2f8dc21c63f541d37eae1 100644 (file)
@@ -21,7 +21,7 @@ config MPC834x_SYS
          Be aware that PCI buses can only function when SYS board is plugged
          into the PIB (Platform IO Board) board from Freescale which provide
          3 PCI slots.  The PIBs PCI initialization is the bootloader's
-         responsiblilty.
+         responsibility.
 
 config MPC834x_ITX
        bool "Freescale MPC834x ITX"
@@ -30,7 +30,7 @@ config MPC834x_ITX
          This option enables support for the MPC 834x ITX evaluation board.
 
          Be aware that PCI initialization is the bootloader's
-         responsiblilty.
+         responsibility.
 
 config MPC8360E_PB
        bool "Freescale MPC8360E PB"
index 9923adc5248e10a05c1a4d519d039725f5e7c3fd..257dc9068468c2b97de3a0c466ace797ee845014 100644 (file)
@@ -48,7 +48,6 @@ static struct pci_controller *u3_ht;
 static int has_second_ohare;
 #endif /* CONFIG_PPC64 */
 
-extern u8 pci_cache_line_size;
 extern int pcibios_assign_bus_offset;
 
 struct device_node *k2_skiplist[2];
index 077711e63104fc28ce53b46add1ae528a60ff996..ef018e25fb07a2462462a7913af412cf3491d791 100644 (file)
@@ -724,7 +724,7 @@ config MPC834x_SYS
          Be aware that PCI buses can only function when SYS board is plugged
          into the PIB (Platform IO Board) board from Freescale which provide
          3 PCI slots.  The PIBs PCI initialization is the bootloader's
-         responsiblilty.
+         responsibility.
 
 config EV64360
        bool "Marvell-EV64360BP"
index 6a461d4caeffc814e2f5968c178edc1de2569bcf..bffc7e176970ffa7eb1e6ad20203fd6862ae866b 100644 (file)
@@ -217,7 +217,7 @@ config SH_SHMIN
        bool "SHMIN"
        select CPU_SUBTYPE_SH7706
        help
-         Select SHMIN if configureing for the SHMIN board
+         Select SHMIN if configuring for the SHMIN board.
 
 config SH_UNKNOWN
        bool "BareCPU"
index 1326f45f31ebf6ce3300c1c438f5ff85b6112f95..4310fc87444e9e703ef7fe0ef4f9b3838fc0ecdb 100644 (file)
@@ -383,7 +383,7 @@ void show_excp_regs(char *from, int trapnr, int signr, struct pt_regs *regs)
 /* ======================================================================= */
 
 /*
-** Depending on <base> scan the MMU, Data or Instrction side
+** Depending on <base> scan the MMU, Data or Instruction side
 ** looking for a valid mapping matching Eaddr & asid.
 ** Return -1 if not found or the TLB id entry otherwise.
 ** Note: it works only for 4k pages!
index 2f96610a83e961fc3e6a539c09aac98e9e39bb56..92a7c8a636d3c8679ec34eab437ab4a8273d55e4 100644 (file)
@@ -212,8 +212,8 @@ config SPARC_LED
        tristate "Sun4m LED driver"
        help
          This driver toggles the front-panel LED on sun4m systems
-         in a user-specifyable manner.  It's state can be probed
-         by reading /proc/led and it's blinking mode can be changed
+         in a user-specifiable manner.  Its state can be probed
+         by reading /proc/led and its blinking mode can be changed
          via writes to /proc/led
 
 source "fs/Kconfig.binfmt"
index e02f01b644af738ae1d19a7c1680fcbef1747964..dfc41cd4bb5d06f690fa47080e8a6dcbecb3c65e 100644 (file)
@@ -646,13 +646,4 @@ int pci_domain_nr(struct pci_bus *pbus)
 }
 EXPORT_SYMBOL(pci_domain_nr);
 
-int pcibios_prep_mwi(struct pci_dev *dev)
-{
-       /* We set correct PCI_CACHE_LINE_SIZE register values for every
-        * device probed on this platform.  So there is nothing to check
-        * and this always succeeds.
-        */
-       return 0;
-}
-
 #endif /* !(CONFIG_PCI) */
index 2f880cb167a582f5f10be75d4647facd1f82e274..0cad3546cb8922a013893d516111f9f669115fdb 100644 (file)
@@ -120,7 +120,7 @@ static int winch_thread(void *arg)
        /* These are synchronization calls between various UML threads on the
         * host - since they are not different kernel threads, we cannot use
         * kernel semaphores. We don't use SysV semaphores because they are
-        * persistant. */
+        * persistent. */
        count = os_read_file(pipe_fd, &c, sizeof(c));
        if(count != sizeof(c))
                printk("winch_thread : failed to read synchronization byte, "
index 50b95e4c1425b8ae3950451c146c020da4b0b146..00242111a457e3b461d59e4542bdd86d8501db44 100644 (file)
@@ -1317,7 +1317,7 @@ static void as_exit_queue(elevator_t *e)
 /*
  * initialize elevator private data (as_data).
  */
-static void *as_init_queue(request_queue_t *q, elevator_t *e)
+static void *as_init_queue(request_queue_t *q)
 {
        struct as_data *ad;
 
index 135593c8e45bdee40f97c3e690d47c34e769370a..562ca7cbf858bf93777ef8029414768b170fe6af 100644 (file)
 #include <linux/init.h>
 #include <linux/mutex.h>
 #include <linux/debugfs.h>
+#include <linux/time.h>
 #include <asm/uaccess.h>
 
 static DEFINE_PER_CPU(unsigned long long, blk_trace_cpu_offset) = { 0, };
 static unsigned int blktrace_seq __read_mostly = 1;
 
+/*
+ * Send out a notify message.
+ */
+static inline unsigned int trace_note(struct blk_trace *bt,
+               pid_t pid, int action,
+               const void *data, size_t len)
+{
+       struct blk_io_trace *t;
+       int cpu = smp_processor_id();
+
+       t = relay_reserve(bt->rchan, sizeof(*t) + len);
+       if (t == NULL)
+               return 0;
+
+       t->magic = BLK_IO_TRACE_MAGIC | BLK_IO_TRACE_VERSION;
+       t->time = sched_clock() - per_cpu(blk_trace_cpu_offset, cpu);
+       t->device = bt->dev;
+       t->action = action;
+       t->pid = pid;
+       t->cpu = cpu;
+       t->pdu_len = len;
+       memcpy((void *) t + sizeof(*t), data, len);
+       return blktrace_seq;
+}
+
 /*
  * Send out a notify for this process, if we haven't done so since a trace
  * started
  */
 static void trace_note_tsk(struct blk_trace *bt, struct task_struct *tsk)
 {
-       struct blk_io_trace *t;
+       tsk->btrace_seq = trace_note(bt, tsk->pid,
+                       BLK_TN_PROCESS,
+                       tsk->comm, sizeof(tsk->comm));
+}
 
-       t = relay_reserve(bt->rchan, sizeof(*t) + sizeof(tsk->comm));
-       if (t) {
-               t->magic = BLK_IO_TRACE_MAGIC | BLK_IO_TRACE_VERSION;
-               t->device = bt->dev;
-               t->action = BLK_TC_ACT(BLK_TC_NOTIFY);
-               t->pid = tsk->pid;
-               t->cpu = smp_processor_id();
-               t->pdu_len = sizeof(tsk->comm);
-               memcpy((void *) t + sizeof(*t), tsk->comm, t->pdu_len);
-               tsk->btrace_seq = blktrace_seq;
-       }
+static void trace_note_time(struct blk_trace *bt)
+{
+       struct timespec now;
+       unsigned long flags;
+       u32 words[2];
+
+       getnstimeofday(&now);
+       words[0] = now.tv_sec;
+       words[1] = now.tv_nsec;
+
+       local_irq_save(flags);
+       trace_note(bt, 0, BLK_TN_TIMESTAMP, words, sizeof(words));
+       local_irq_restore(flags);
 }
 
 static int act_log_check(struct blk_trace *bt, u32 what, sector_t sector,
@@ -394,6 +425,8 @@ static int blk_trace_startstop(request_queue_t *q, int start)
                        blktrace_seq++;
                        smp_mb();
                        bt->trace_state = Blktrace_running;
+
+                       trace_note_time(bt);
                        ret = 0;
                }
        } else {
index 1d9c3c70a9a05b84469a30f55dfbd369ec239e12..e9019ed39b7352a5416aa38a9a15623be744293d 100644 (file)
@@ -1464,8 +1464,7 @@ cfq_update_io_thinktime(struct cfq_data *cfqd, struct cfq_io_context *cic)
 }
 
 static void
-cfq_update_io_seektime(struct cfq_data *cfqd, struct cfq_io_context *cic,
-                      struct request *rq)
+cfq_update_io_seektime(struct cfq_io_context *cic, struct request *rq)
 {
        sector_t sdist;
        u64 total;
@@ -1617,7 +1616,7 @@ cfq_rq_enqueued(struct cfq_data *cfqd, struct cfq_queue *cfqq,
        }
 
        cfq_update_io_thinktime(cfqd, cic);
-       cfq_update_io_seektime(cfqd, cic, rq);
+       cfq_update_io_seektime(cic, rq);
        cfq_update_idle_window(cfqd, cfqq, cic);
 
        cic->last_queue = jiffies;
@@ -1770,7 +1769,7 @@ static int cfq_may_queue(request_queue_t *q, int rw)
 /*
  * queue lock held here
  */
-static void cfq_put_request(request_queue_t *q, struct request *rq)
+static void cfq_put_request(struct request *rq)
 {
        struct cfq_queue *cfqq = RQ_CFQQ(rq);
 
@@ -1951,7 +1950,7 @@ static void cfq_exit_queue(elevator_t *e)
        kfree(cfqd);
 }
 
-static void *cfq_init_queue(request_queue_t *q, elevator_t *e)
+static void *cfq_init_queue(request_queue_t *q)
 {
        struct cfq_data *cfqd;