瀏覽代碼

Merge with /home/shaggy/git/linus-clean/

Dave Kleikamp 20 年之前
父節點
當前提交
ddf3e298b3
共有 100 個文件被更改,包括 689 次插入523 次删除
  1. 36 4
      Documentation/aoe/aoe.txt
  2. 0 4
      Documentation/aoe/status.sh
  3. 1 0
      Documentation/pci.txt
  4. 2 33
      Documentation/power/pci.txt
  5. 4 0
      arch/alpha/Kconfig
  6. 4 0
      arch/arm/Kconfig
  7. 0 10
      arch/arm/mach-ixp4xx/common-pci.c
  8. 4 0
      arch/arm26/Kconfig
  9. 4 0
      arch/i386/Kconfig
  10. 5 0
      arch/m68knommu/Kconfig
  11. 4 0
      arch/mips/Kconfig
  12. 4 0
      arch/parisc/Kconfig
  13. 4 0
      arch/ppc/Kconfig
  14. 3 0
      arch/ppc64/Kconfig
  15. 4 0
      arch/sh/Kconfig
  16. 14 14
      arch/sparc/prom/memory.c
  17. 1 1
      arch/sparc/prom/sun4prom.c
  18. 3 3
      arch/sparc64/kernel/irq.c
  19. 5 0
      arch/x86_64/Kconfig
  20. 1 1
      drivers/block/Kconfig
  21. 1 1
      drivers/block/aoe/aoe.h
  22. 13 0
      drivers/block/aoe/aoeblk.c
  23. 4 7
      drivers/block/aoe/aoedev.c
  24. 16 1
      drivers/block/aoe/aoenet.c
  25. 2 2
      drivers/char/Kconfig
  26. 16 16
      drivers/char/ipmi/ipmi_si_intf.c
  27. 1 1
      drivers/char/ipmi/ipmi_si_sm.h
  28. 2 2
      drivers/char/mbcs.c
  29. 2 2
      drivers/char/mbcs.h
  30. 3 3
      drivers/char/sonypi.c
  31. 1 1
      drivers/mmc/Kconfig
  32. 5 5
      drivers/net/Kconfig
  33. 1 1
      drivers/net/appletalk/Kconfig
  34. 2 2
      drivers/net/hamradio/Kconfig
  35. 5 5
      drivers/net/irda/Kconfig
  36. 3 3
      drivers/net/wan/Kconfig
  37. 1 1
      drivers/parport/Kconfig
  38. 24 10
      drivers/parport/parport_pc.c
  39. 1 1
      drivers/pci/hotplug/ibmphp.h
  40. 3 3
      drivers/pci/hotplug/ibmphp_hpc.c
  41. 5 2
      drivers/pci/hotplug/ibmphp_pci.c
  42. 1 1
      drivers/pci/hotplug/pci_hotplug.h
  43. 18 5
      drivers/pci/hotplug/pciehp_core.c
  44. 1 1
      drivers/pci/hotplug/pcihp_skeleton.c
  45. 3 3
      drivers/pci/msi.c
  46. 1 1
      drivers/pci/pci-acpi.c
  47. 10 1
      drivers/pci/pci-driver.c
  48. 58 24
      drivers/pci/pci-sysfs.c
  49. 4 16
      drivers/pci/pci.c
  50. 1 0
      drivers/pci/probe.c
  51. 1 0
      drivers/pci/proc.c
  52. 2 0
      drivers/pci/quirks.c
  53. 6 6
      drivers/scsi/Kconfig
  54. 2 2
      drivers/usb/core/message.c
  55. 3 3
      drivers/usb/core/urb.c
  56. 1 1
      drivers/usb/gadget/ether.c
  57. 1 1
      drivers/usb/gadget/inode.c
  58. 1 1
      drivers/usb/gadget/lh7a40x_udc.c
  59. 1 1
      drivers/usb/gadget/serial.c
  60. 44 21
      drivers/usb/host/ehci-hcd.c
  61. 2 0
      drivers/usb/host/ehci-hub.c
  62. 10 9
      drivers/usb/host/ehci.h
  63. 1 1
      drivers/usb/host/hc_crisv10.c
  64. 2 2
      drivers/usb/host/sl811-hcd.c
  65. 1 1
      drivers/usb/image/mdc800.c
  66. 1 1
      drivers/usb/input/aiptek.c
  67. 1 1
      drivers/usb/input/mtouchusb.c
  68. 1 1
      drivers/usb/media/ov511.c
  69. 1 1
      drivers/usb/media/pwc/pwc-ctrl.c
  70. 3 3
      drivers/usb/media/pwc/pwc-if.c
  71. 1 1
      drivers/usb/media/pwc/pwc-ioctl.h
  72. 1 1
      drivers/usb/misc/legousbtower.c
  73. 3 0
      drivers/usb/net/usbnet.c
  74. 4 4
      drivers/usb/net/zd1201.c
  75. 9 0
      drivers/usb/serial/Kconfig
  76. 1 0
      drivers/usb/serial/Makefile
  77. 63 0
      drivers/usb/serial/airprime.c
  78. 89 98
      drivers/usb/serial/cypress_m8.c
  79. 36 10
      drivers/usb/serial/ftdi_sio.c
  80. 26 10
      drivers/usb/serial/ftdi_sio.h
  81. 1 1
      drivers/usb/serial/io_usbvend.h
  82. 1 1
      drivers/usb/serial/keyspan_usa90msg.h
  83. 1 0
      drivers/usb/storage/debug.c
  84. 1 1
      drivers/usb/storage/shuttle_usbat.c
  85. 16 1
      drivers/usb/storage/unusual_devs.h
  86. 4 2
      drivers/video/i810/i810_main.c
  87. 1 10
      include/asm-alpha/signal.h
  88. 1 14
      include/asm-arm/signal.h
  89. 1 10
      include/asm-arm26/signal.h
  90. 1 10
      include/asm-cris/signal.h
  91. 1 10
      include/asm-frv/signal.h
  92. 21 0
      include/asm-generic/signal.h
  93. 1 10
      include/asm-h8300/signal.h
  94. 1 14
      include/asm-i386/signal.h
  95. 1 10
      include/asm-ia64/signal.h
  96. 1 14
      include/asm-m32r/signal.h
  97. 3 12
      include/asm-m68k/signal.h
  98. 1 10
      include/asm-m68knommu/signal.h
  99. 1 8
      include/asm-mips/signal.h
  100. 1 14
      include/asm-ppc/signal.h

+ 36 - 4
Documentation/aoe/aoe.txt

@@ -4,6 +4,16 @@ The EtherDrive (R) HOWTO for users of 2.6 kernels is found at ...
 
 
   It has many tips and hints!
   It has many tips and hints!
 
 
+The aoetools are userland programs that are designed to work with this
+driver.  The aoetools are on sourceforge.
+
+  http://aoetools.sourceforge.net/
+
+The scripts in this Documentation/aoe directory are intended to
+document the use of the driver and are not necessary if you install
+the aoetools.
+
+
 CREATING DEVICE NODES
 CREATING DEVICE NODES
 
 
   Users of udev should find the block device nodes created
   Users of udev should find the block device nodes created
@@ -35,14 +45,15 @@ USING DEVICE NODES
 
 
   "echo eth2 eth4 > /dev/etherd/interfaces" tells the aoe driver to
   "echo eth2 eth4 > /dev/etherd/interfaces" tells the aoe driver to
   limit ATA over Ethernet traffic to eth2 and eth4.  AoE traffic from
   limit ATA over Ethernet traffic to eth2 and eth4.  AoE traffic from
-  untrusted networks should be ignored as a matter of security.
+  untrusted networks should be ignored as a matter of security.  See
+  also the aoe_iflist driver option described below.
 
 
   "echo > /dev/etherd/discover" tells the driver to find out what AoE
   "echo > /dev/etherd/discover" tells the driver to find out what AoE
   devices are available.
   devices are available.
 
 
   These character devices may disappear and be replaced by sysfs
   These character devices may disappear and be replaced by sysfs
-  counterparts, so distribution maintainers are encouraged to create
-  scripts that use these devices.
+  counterparts.  Using the commands in aoetools insulates users from
+  these implementation details.
 
 
   The block devices are named like this:
   The block devices are named like this:
 
 
@@ -66,7 +77,8 @@ USING SYSFS
   through which we are communicating with the remote AoE device.
   through which we are communicating with the remote AoE device.
 
 
   There is a script in this directory that formats this information
   There is a script in this directory that formats this information
-  in a convenient way.
+  in a convenient way.  Users with aoetools can use the aoe-stat
+  command.
 
 
   root@makki root# sh Documentation/aoe/status.sh 
   root@makki root# sh Documentation/aoe/status.sh 
      e10.0            eth3              up
      e10.0            eth3              up
@@ -89,3 +101,23 @@ USING SYSFS
       e4.7            eth1              up
       e4.7            eth1              up
       e4.8            eth1              up
       e4.8            eth1              up
       e4.9            eth1              up
       e4.9            eth1              up
+
+  Use /sys/module/aoe/parameters/aoe_iflist (or better, the driver
+  option discussed below) instead of /dev/etherd/interfaces to limit
+  AoE traffic to the network interfaces in the given
+  whitespace-separated list.  Unlike the old character device, the
+  sysfs entry can be read from as well as written to.
+
+  It's helpful to trigger discovery after setting the list of allowed
+  interfaces.  The aoetools package provides an aoe-discover script
+  for this purpose.  You can also directly use the
+  /dev/etherd/discover special file described above.
+
+DRIVER OPTIONS
+
+  There is a boot option for the built-in aoe driver and a
+  corresponding module parameter, aoe_iflist.  Without this option,
+  all network interfaces may be used for ATA over Ethernet.  Here is a
+  usage example for the module parameter.
+
+    modprobe aoe_iflist="eth1 eth3"

+ 0 - 4
Documentation/aoe/status.sh

@@ -14,10 +14,6 @@ test ! -d "$sysd/block" && {
 	echo "$me Error: sysfs is not mounted" 1>&2
 	echo "$me Error: sysfs is not mounted" 1>&2
 	exit 1
 	exit 1
 }
 }
-test -z "`lsmod | grep '^aoe'`" && {
-	echo  "$me Error: aoe module is not loaded" 1>&2
-	exit 1
-}
 
 
 for d in `ls -d $sysd/block/etherd* 2>/dev/null | grep -v p` end; do
 for d in `ls -d $sysd/block/etherd* 2>/dev/null | grep -v p` end; do
 	# maybe ls comes up empty, so we use "end"
 	# maybe ls comes up empty, so we use "end"

+ 1 - 0
Documentation/pci.txt

@@ -279,6 +279,7 @@ pci_for_each_dev_reverse()	Superseded by pci_find_device_reverse()
 pci_for_each_bus()		Superseded by pci_find_next_bus()
 pci_for_each_bus()		Superseded by pci_find_next_bus()
 pci_find_device()		Superseded by pci_get_device()
 pci_find_device()		Superseded by pci_get_device()
 pci_find_subsys()		Superseded by pci_get_subsys()
 pci_find_subsys()		Superseded by pci_get_subsys()
+pci_find_slot()			Superseded by pci_get_slot()
 pcibios_find_class()		Superseded by pci_get_class()
 pcibios_find_class()		Superseded by pci_get_class()
 pci_find_class()		Superseded by pci_get_class()
 pci_find_class()		Superseded by pci_get_class()
 pci_(read|write)_*_nodev()	Superseded by pci_bus_(read|write)_*()
 pci_(read|write)_*_nodev()	Superseded by pci_bus_(read|write)_*()

+ 2 - 33
Documentation/power/pci.txt

@@ -165,40 +165,9 @@ Description:
 These functions are intended for use by individual drivers, and are defined in 
 These functions are intended for use by individual drivers, and are defined in 
 struct pci_driver:
 struct pci_driver:
 
 
-        int  (*save_state) (struct pci_dev *dev, u32 state);
-        int  (*suspend) (struct pci_dev *dev, u32 state);
+        int  (*suspend) (struct pci_dev *dev, pm_message_t state);
         int  (*resume) (struct pci_dev *dev);
         int  (*resume) (struct pci_dev *dev);
-        int  (*enable_wake) (struct pci_dev *dev, u32 state, int enable);
-
-
-save_state
-----------
-
-Usage:
-
-if (dev->driver && dev->driver->save_state)
-	dev->driver->save_state(dev,state);
-
-The driver should use this callback to save device state. It should take into
-account the current state of the device and the requested state in order to
-avoid any unnecessary operations.
-
-For example, a video card that supports all 4 states (D0-D3), all controller
-context is preserved when entering D1, but the screen is placed into a low power
-state (blanked). 
-
-The driver can also interpret this function as a notification that it may be
-entering a sleep state in the near future. If it knows that the device cannot
-enter the requested state, either because of lack of support for it, or because
-the device is middle of some critical operation, then it should fail.
-
-This function should not be used to set any state in the device or the driver
-because the device may not actually enter the sleep state (e.g. another driver
-later causes causes a global state transition to fail).
-
-Note that in intermediate low power states, a device's I/O and memory spaces may
-be disabled and may not be available in subsequent transitions to lower power
-states.
+        int  (*enable_wake) (struct pci_dev *dev, pci_power_t state, int enable);
 
 
 
 
 suspend
 suspend

+ 4 - 0
arch/alpha/Kconfig

@@ -280,6 +280,10 @@ config ISA
 	  (MCA) or VESA.  ISA is an older system, now being displaced by PCI;
 	  (MCA) or VESA.  ISA is an older system, now being displaced by PCI;
 	  newer boards don't support it.  If you have ISA, say Y, otherwise N.
 	  newer boards don't support it.  If you have ISA, say Y, otherwise N.
 
 
+config ISA_DMA_API
+	bool
+	default y
+
 config PCI
 config PCI
 	bool
 	bool
 	depends on !ALPHA_JENSEN
 	depends on !ALPHA_JENSEN

+ 4 - 0
arch/arm/Kconfig

@@ -266,6 +266,10 @@ config ISA_DMA
 	depends on FOOTBRIDGE_HOST || ARCH_SHARK
 	depends on FOOTBRIDGE_HOST || ARCH_SHARK
 	default y
 	default y
 
 
+config ISA_DMA_API
+	bool
+	default y
+
 config PCI
 config PCI
 	bool "PCI support" if ARCH_INTEGRATOR_AP
 	bool "PCI support" if ARCH_INTEGRATOR_AP
 	default y if ARCH_SHARK || FOOTBRIDGE_HOST || ARCH_IOP3XX || ARCH_IXP4XX || ARCH_IXP2000
 	default y if ARCH_SHARK || FOOTBRIDGE_HOST || ARCH_IOP3XX || ARCH_IXP4XX || ARCH_IXP2000

+ 0 - 10
arch/arm/mach-ixp4xx/common-pci.c

@@ -501,15 +501,6 @@ pci_set_dma_mask(struct pci_dev *dev, u64 mask)
 	return -EIO;
 	return -EIO;
 }
 }
     
     
-int
-pci_dac_set_dma_mask(struct pci_dev *dev, u64 mask)
-{
-	if (mask >= SZ_64M - 1 )
-		return 0;
-
-	return -EIO;
-}
-
 int
 int
 pci_set_consistent_dma_mask(struct pci_dev *dev, u64 mask)
 pci_set_consistent_dma_mask(struct pci_dev *dev, u64 mask)
 {
 {
@@ -520,7 +511,6 @@ pci_set_consistent_dma_mask(struct pci_dev *dev, u64 mask)
 }
 }
 
 
 EXPORT_SYMBOL(pci_set_dma_mask);
 EXPORT_SYMBOL(pci_set_dma_mask);
-EXPORT_SYMBOL(pci_dac_set_dma_mask);
 EXPORT_SYMBOL(pci_set_consistent_dma_mask);
 EXPORT_SYMBOL(pci_set_consistent_dma_mask);
 EXPORT_SYMBOL(ixp4xx_pci_read);
 EXPORT_SYMBOL(ixp4xx_pci_read);
 EXPORT_SYMBOL(ixp4xx_pci_write);
 EXPORT_SYMBOL(ixp4xx_pci_write);

+ 4 - 0
arch/arm26/Kconfig

@@ -89,6 +89,10 @@ config PAGESIZE_16
           machine with 4MB of memory.
           machine with 4MB of memory.
 endmenu
 endmenu
 
 
+config ISA_DMA_API
+	bool
+	default y
+
 menu "General setup"
 menu "General setup"
 
 
 # Compressed boot loader in ROM.  Yes, we really want to ask about
 # Compressed boot loader in ROM.  Yes, we really want to ask about

+ 4 - 0
arch/i386/Kconfig

@@ -1173,6 +1173,10 @@ source "drivers/pci/pcie/Kconfig"
 
 
 source "drivers/pci/Kconfig"
 source "drivers/pci/Kconfig"
 
 
+config ISA_DMA_API
+	bool
+	default y
+
 config ISA
 config ISA
 	bool "ISA support"
 	bool "ISA support"
 	depends on !(X86_VOYAGER || X86_VISWS)
 	depends on !(X86_VOYAGER || X86_VISWS)

+ 5 - 0
arch/m68knommu/Kconfig

@@ -534,6 +534,11 @@ endchoice
 
 
 endmenu
 endmenu
 
 
+config ISA_DMA_API
+	bool
+	depends on !M5272
+	default y
+
 menu "Bus options (PCI, PCMCIA, EISA, MCA, ISA)"
 menu "Bus options (PCI, PCMCIA, EISA, MCA, ISA)"
 
 
 config PCI
 config PCI

+ 4 - 0
arch/mips/Kconfig

@@ -1656,3 +1656,7 @@ config GENERIC_HARDIRQS
 config GENERIC_IRQ_PROBE
 config GENERIC_IRQ_PROBE
 	bool
 	bool
 	default y
 	default y
+
+config ISA_DMA_API
+	bool
+	default y

+ 4 - 0
arch/parisc/Kconfig

@@ -45,6 +45,10 @@ config GENERIC_IRQ_PROBE
 config PM
 config PM
 	bool
 	bool
 
 
+config ISA_DMA_API
+	bool
+	default y
+
 source "init/Kconfig"
 source "init/Kconfig"
 
 
 
 

+ 4 - 0
arch/ppc/Kconfig

@@ -1079,6 +1079,10 @@ source kernel/power/Kconfig
 
 
 endmenu
 endmenu
 
 
+config ISA_DMA_API
+	bool
+	default y
+
 menu "Bus options"
 menu "Bus options"
 
 
 config ISA
 config ISA

+ 3 - 0
arch/ppc64/Kconfig

@@ -293,6 +293,9 @@ config SECCOMP
 
 
 endmenu
 endmenu
 
 
+config ISA_DMA_API
+	bool
+	default y
 
 
 menu "General setup"
 menu "General setup"
 
 

+ 4 - 0
arch/sh/Kconfig

@@ -693,6 +693,10 @@ config RTC_9701JE
 
 
 endmenu
 endmenu
 
 
+config ISA_DMA_API
+	bool
+	depends on MPC1211
+	default y
 
 
 menu "Bus options (PCI, PCMCIA, EISA, MCA, ISA)"
 menu "Bus options (PCI, PCMCIA, EISA, MCA, ISA)"
 
 

+ 14 - 14
arch/sparc/prom/memory.c

@@ -47,9 +47,9 @@ prom_sortmemlist(struct linux_mlist_v0 *thislist)
 	char *tmpaddr;
 	char *tmpaddr;
 	char *lowest;
 	char *lowest;
 
 
-	for(i=0; thislist[i].theres_more != 0; i++) {
+	for(i=0; thislist[i].theres_more; i++) {
 		lowest = thislist[i].start_adr;
 		lowest = thislist[i].start_adr;
-		for(mitr = i+1; thislist[mitr-1].theres_more != 0; mitr++)
+		for(mitr = i+1; thislist[mitr-1].theres_more; mitr++)
 			if(thislist[mitr].start_adr < lowest) {
 			if(thislist[mitr].start_adr < lowest) {
 				lowest = thislist[mitr].start_adr;
 				lowest = thislist[mitr].start_adr;
 				swapi = mitr;
 				swapi = mitr;
@@ -85,7 +85,7 @@ void __init prom_meminit(void)
 			prom_phys_total[iter].num_bytes = mptr->num_bytes;
 			prom_phys_total[iter].num_bytes = mptr->num_bytes;
 			prom_phys_total[iter].theres_more = &prom_phys_total[iter+1];
 			prom_phys_total[iter].theres_more = &prom_phys_total[iter+1];
 		}
 		}
-		prom_phys_total[iter-1].theres_more = 0x0;
+		prom_phys_total[iter-1].theres_more = NULL;
 		/* Second, the total prom taken descriptors. */
 		/* Second, the total prom taken descriptors. */
 		for(mptr = (*(romvec->pv_v0mem.v0_prommap)), iter=0;
 		for(mptr = (*(romvec->pv_v0mem.v0_prommap)), iter=0;
 		    mptr; mptr=mptr->theres_more, iter++) {
 		    mptr; mptr=mptr->theres_more, iter++) {
@@ -93,7 +93,7 @@ void __init prom_meminit(void)
 			prom_prom_taken[iter].num_bytes = mptr->num_bytes;
 			prom_prom_taken[iter].num_bytes = mptr->num_bytes;
 			prom_prom_taken[iter].theres_more = &prom_prom_taken[iter+1];
 			prom_prom_taken[iter].theres_more = &prom_prom_taken[iter+1];
 		}
 		}
-		prom_prom_taken[iter-1].theres_more = 0x0;
+		prom_prom_taken[iter-1].theres_more = NULL;
 		/* Last, the available physical descriptors. */
 		/* Last, the available physical descriptors. */
 		for(mptr = (*(romvec->pv_v0mem.v0_available)), iter=0;
 		for(mptr = (*(romvec->pv_v0mem.v0_available)), iter=0;
 		    mptr; mptr=mptr->theres_more, iter++) {
 		    mptr; mptr=mptr->theres_more, iter++) {
@@ -101,7 +101,7 @@ void __init prom_meminit(void)
 			prom_phys_avail[iter].num_bytes = mptr->num_bytes;
 			prom_phys_avail[iter].num_bytes = mptr->num_bytes;
 			prom_phys_avail[iter].theres_more = &prom_phys_avail[iter+1];
 			prom_phys_avail[iter].theres_more = &prom_phys_avail[iter+1];
 		}
 		}
-		prom_phys_avail[iter-1].theres_more = 0x0;
+		prom_phys_avail[iter-1].theres_more = NULL;
 		/* Sort all the lists. */
 		/* Sort all the lists. */
 		prom_sortmemlist(prom_phys_total);
 		prom_sortmemlist(prom_phys_total);
 		prom_sortmemlist(prom_prom_taken);
 		prom_sortmemlist(prom_prom_taken);
@@ -124,7 +124,7 @@ void __init prom_meminit(void)
 			prom_phys_avail[iter].theres_more =
 			prom_phys_avail[iter].theres_more =
 				&prom_phys_avail[iter+1];
 				&prom_phys_avail[iter+1];
 		}
 		}
-		prom_phys_avail[iter-1].theres_more = 0x0;
+		prom_phys_avail[iter-1].theres_more = NULL;
 
 
 		num_regs = prom_getproperty(node, "reg",
 		num_regs = prom_getproperty(node, "reg",
 					    (char *) prom_reg_memlist,
 					    (char *) prom_reg_memlist,
@@ -138,7 +138,7 @@ void __init prom_meminit(void)
 			prom_phys_total[iter].theres_more =
 			prom_phys_total[iter].theres_more =
 				&prom_phys_total[iter+1];
 				&prom_phys_total[iter+1];
 		}
 		}
-		prom_phys_total[iter-1].theres_more = 0x0;
+		prom_phys_total[iter-1].theres_more = NULL;
 
 
 		node = prom_getchild(prom_root_node);
 		node = prom_getchild(prom_root_node);
 		node = prom_searchsiblings(node, "virtual-memory");
 		node = prom_searchsiblings(node, "virtual-memory");
@@ -158,7 +158,7 @@ void __init prom_meminit(void)
 			prom_prom_taken[iter].theres_more =
 			prom_prom_taken[iter].theres_more =
 				&prom_prom_taken[iter+1];
 				&prom_prom_taken[iter+1];
 		}
 		}
-		prom_prom_taken[iter-1].theres_more = 0x0;
+		prom_prom_taken[iter-1].theres_more = NULL;
 
 
 		prom_sortmemlist(prom_prom_taken);
 		prom_sortmemlist(prom_prom_taken);
 
 
@@ -182,15 +182,15 @@ void __init prom_meminit(void)
 	case PROM_SUN4:
 	case PROM_SUN4:
 #ifdef CONFIG_SUN4	
 #ifdef CONFIG_SUN4	
 		/* how simple :) */
 		/* how simple :) */
-		prom_phys_total[0].start_adr = 0x0;
+		prom_phys_total[0].start_adr = NULL;
 		prom_phys_total[0].num_bytes = *(sun4_romvec->memorysize);
 		prom_phys_total[0].num_bytes = *(sun4_romvec->memorysize);
-		prom_phys_total[0].theres_more = 0x0;
-		prom_prom_taken[0].start_adr = 0x0; 
+		prom_phys_total[0].theres_more = NULL;
+		prom_prom_taken[0].start_adr = NULL; 
 		prom_prom_taken[0].num_bytes = 0x0;
 		prom_prom_taken[0].num_bytes = 0x0;
-		prom_prom_taken[0].theres_more = 0x0;
-		prom_phys_avail[0].start_adr = 0x0;
+		prom_prom_taken[0].theres_more = NULL;
+		prom_phys_avail[0].start_adr = NULL;
 		prom_phys_avail[0].num_bytes = *(sun4_romvec->memoryavail);
 		prom_phys_avail[0].num_bytes = *(sun4_romvec->memoryavail);
-		prom_phys_avail[0].theres_more = 0x0;
+		prom_phys_avail[0].theres_more = NULL;
 #endif
 #endif
 		break;
 		break;
 
 

+ 1 - 1
arch/sparc/prom/sun4prom.c

@@ -151,7 +151,7 @@ struct linux_romvec * __init sun4_prom_init(void)
 	 * have more time, we can teach the penguin to say "By your
 	 * have more time, we can teach the penguin to say "By your
 	 * command" or "Activating turbo boost, Michael". :-)
 	 * command" or "Activating turbo boost, Michael". :-)
 	 */
 	 */
-	sun4_romvec->setLEDs(0x0);
+	sun4_romvec->setLEDs(NULL);
 	
 	
 	printk("PROMLIB: Old Sun4 boot PROM monitor %s, romvec version %d\n",
 	printk("PROMLIB: Old Sun4 boot PROM monitor %s, romvec version %d\n",
 		sun4_romvec->monid,
 		sun4_romvec->monid,

+ 3 - 3
arch/sparc64/kernel/irq.c

@@ -756,7 +756,7 @@ void handler_irq(int irq, struct pt_regs *regs)
 		clear_softint(clr_mask);
 		clear_softint(clr_mask);
 	}
 	}
 #else
 #else
-	int should_forward = 1;
+	int should_forward = 0;
 
 
 	clear_softint(1 << irq);
 	clear_softint(1 << irq);
 #endif
 #endif
@@ -1007,10 +1007,10 @@ static int retarget_one_irq(struct irqaction *p, int goal_cpu)
 	}
 	}
 	upa_writel(tid | IMAP_VALID, imap);
 	upa_writel(tid | IMAP_VALID, imap);
 
 
-	while (!cpu_online(goal_cpu)) {
+	do {
 		if (++goal_cpu >= NR_CPUS)
 		if (++goal_cpu >= NR_CPUS)
 			goal_cpu = 0;
 			goal_cpu = 0;
-	}
+	} while (!cpu_online(goal_cpu));
 
 
 	return goal_cpu;
 	return goal_cpu;
 }
 }

+ 5 - 0
arch/x86_64/Kconfig

@@ -379,6 +379,11 @@ config GENERIC_IRQ_PROBE
 	bool
 	bool
 	default y
 	default y
 
 
+# we have no ISA slots, but we do have ISA-style DMA.
+config ISA_DMA_API
+	bool
+	default y
+
 menu "Power management options"
 menu "Power management options"
 
 
 source kernel/power/Kconfig
 source kernel/power/Kconfig

+ 1 - 1
drivers/block/Kconfig

@@ -105,7 +105,7 @@ config ATARI_SLM
 
 
 config BLK_DEV_XD
 config BLK_DEV_XD
 	tristate "XT hard disk support"
 	tristate "XT hard disk support"
-	depends on ISA
+	depends on ISA && ISA_DMA_API
 	help
 	help
 	  Very old 8 bit hard disk controllers used in the IBM XT computer
 	  Very old 8 bit hard disk controllers used in the IBM XT computer
 	  will be supported if you say Y here.
 	  will be supported if you say Y here.

+ 1 - 1
drivers/block/aoe/aoe.h

@@ -1,5 +1,5 @@
 /* Copyright (c) 2004 Coraid, Inc.  See COPYING for GPL terms. */
 /* Copyright (c) 2004 Coraid, Inc.  See COPYING for GPL terms. */
-#define VERSION "6"
+#define VERSION "10"
 #define AOE_MAJOR 152
 #define AOE_MAJOR 152
 #define DEVICE_NAME "aoe"
 #define DEVICE_NAME "aoe"
 
 

+ 13 - 0
drivers/block/aoe/aoeblk.c

@@ -37,6 +37,13 @@ static ssize_t aoedisk_show_netif(struct gendisk * disk, char *page)
 
 
 	return snprintf(page, PAGE_SIZE, "%s\n", d->ifp->name);
 	return snprintf(page, PAGE_SIZE, "%s\n", d->ifp->name);
 }
 }
+/* firmware version */
+static ssize_t aoedisk_show_fwver(struct gendisk * disk, char *page)
+{
+	struct aoedev *d = disk->private_data;
+
+	return snprintf(page, PAGE_SIZE, "0x%04x\n", (unsigned int) d->fw_ver);
+}
 
 
 static struct disk_attribute disk_attr_state = {
 static struct disk_attribute disk_attr_state = {
 	.attr = {.name = "state", .mode = S_IRUGO },
 	.attr = {.name = "state", .mode = S_IRUGO },
@@ -50,6 +57,10 @@ static struct disk_attribute disk_attr_netif = {
 	.attr = {.name = "netif", .mode = S_IRUGO },
 	.attr = {.name = "netif", .mode = S_IRUGO },
 	.show = aoedisk_show_netif
 	.show = aoedisk_show_netif
 };
 };
+static struct disk_attribute disk_attr_fwver = {
+	.attr = {.name = "firmware-version", .mode = S_IRUGO },
+	.show = aoedisk_show_fwver
+};
 
 
 static void
 static void
 aoedisk_add_sysfs(struct aoedev *d)
 aoedisk_add_sysfs(struct aoedev *d)
@@ -57,6 +68,7 @@ aoedisk_add_sysfs(struct aoedev *d)
 	sysfs_create_file(&d->gd->kobj, &disk_attr_state.attr);
 	sysfs_create_file(&d->gd->kobj, &disk_attr_state.attr);
 	sysfs_create_file(&d->gd->kobj, &disk_attr_mac.attr);
 	sysfs_create_file(&d->gd->kobj, &disk_attr_mac.attr);
 	sysfs_create_file(&d->gd->kobj, &disk_attr_netif.attr);
 	sysfs_create_file(&d->gd->kobj, &disk_attr_netif.attr);
+	sysfs_create_file(&d->gd->kobj, &disk_attr_fwver.attr);
 }
 }
 void
 void
 aoedisk_rm_sysfs(struct aoedev *d)
 aoedisk_rm_sysfs(struct aoedev *d)
@@ -64,6 +76,7 @@ aoedisk_rm_sysfs(struct aoedev *d)
 	sysfs_remove_link(&d->gd->kobj, "state");
 	sysfs_remove_link(&d->gd->kobj, "state");
 	sysfs_remove_link(&d->gd->kobj, "mac");
 	sysfs_remove_link(&d->gd->kobj, "mac");
 	sysfs_remove_link(&d->gd->kobj, "netif");
 	sysfs_remove_link(&d->gd->kobj, "netif");
+	sysfs_remove_link(&d->gd->kobj, "firmware-version");
 }
 }
 
 
 static int
 static int

+ 4 - 7
drivers/block/aoe/aoedev.c

@@ -109,25 +109,22 @@ aoedev_set(ulong sysminor, unsigned char *addr, struct net_device *ifp, ulong bu
 	spin_lock_irqsave(&devlist_lock, flags);
 	spin_lock_irqsave(&devlist_lock, flags);
 
 
 	for (d=devlist; d; d=d->next)
 	for (d=devlist; d; d=d->next)
-		if (d->sysminor == sysminor
-		|| memcmp(d->addr, addr, sizeof d->addr) == 0)
+		if (d->sysminor == sysminor)
 			break;
 			break;
 
 
 	if (d == NULL && (d = aoedev_newdev(bufcnt)) == NULL) {
 	if (d == NULL && (d = aoedev_newdev(bufcnt)) == NULL) {
 		spin_unlock_irqrestore(&devlist_lock, flags);
 		spin_unlock_irqrestore(&devlist_lock, flags);
 		printk(KERN_INFO "aoe: aoedev_set: aoedev_newdev failure.\n");
 		printk(KERN_INFO "aoe: aoedev_set: aoedev_newdev failure.\n");
 		return NULL;
 		return NULL;
-	}
+	} /* if newdev, (d->flags & DEVFL_UP) == 0 for below */
 
 
 	spin_unlock_irqrestore(&devlist_lock, flags);
 	spin_unlock_irqrestore(&devlist_lock, flags);
 	spin_lock_irqsave(&d->lock, flags);
 	spin_lock_irqsave(&d->lock, flags);
 
 
 	d->ifp = ifp;
 	d->ifp = ifp;
-
-	if (d->sysminor != sysminor
-	|| (d->flags & DEVFL_UP) == 0) {
+	memcpy(d->addr, addr, sizeof d->addr);
+	if ((d->flags & DEVFL_UP) == 0) {
 		aoedev_downdev(d); /* flushes outstanding frames */
 		aoedev_downdev(d); /* flushes outstanding frames */
-		memcpy(d->addr, addr, sizeof d->addr);
 		d->sysminor = sysminor;
 		d->sysminor = sysminor;
 		d->aoemajor = AOEMAJOR(sysminor);
 		d->aoemajor = AOEMAJOR(sysminor);
 		d->aoeminor = AOEMINOR(sysminor);
 		d->aoeminor = AOEMINOR(sysminor);

+ 16 - 1
drivers/block/aoe/aoenet.c

@@ -7,6 +7,7 @@
 #include <linux/hdreg.h>
 #include <linux/hdreg.h>
 #include <linux/blkdev.h>
 #include <linux/blkdev.h>
 #include <linux/netdevice.h>
 #include <linux/netdevice.h>
+#include <linux/moduleparam.h>
 #include "aoe.h"
 #include "aoe.h"
 
 
 #define NECODES 5
 #define NECODES 5
@@ -26,6 +27,19 @@ enum {
 };
 };
 
 
 static char aoe_iflist[IFLISTSZ];
 static char aoe_iflist[IFLISTSZ];
+module_param_string(aoe_iflist, aoe_iflist, IFLISTSZ, 0600);
+MODULE_PARM_DESC(aoe_iflist, "aoe_iflist=\"dev1 [dev2 ...]\"\n");
+
+#ifndef MODULE
+static int __init aoe_iflist_setup(char *str)
+{
+	strncpy(aoe_iflist, str, IFLISTSZ);
+	aoe_iflist[IFLISTSZ - 1] = '\0';
+	return 1;
+}
+
+__setup("aoe_iflist=", aoe_iflist_setup);
+#endif
 
 
 int
 int
 is_aoe_netif(struct net_device *ifp)
 is_aoe_netif(struct net_device *ifp)
@@ -36,7 +50,8 @@ is_aoe_netif(struct net_device *ifp)
 	if (aoe_iflist[0] == '\0')
 	if (aoe_iflist[0] == '\0')
 		return 1;
 		return 1;
 
 
-	for (p = aoe_iflist; *p; p = q + strspn(q, WHITESPACE)) {
+	p = aoe_iflist + strspn(aoe_iflist, WHITESPACE);
+	for (; *p; p = q + strspn(q, WHITESPACE)) {
 		q = p + strcspn(p, WHITESPACE);
 		q = p + strcspn(p, WHITESPACE);
 		if (q != p)
 		if (q != p)
 			len = q - p;
 			len = q - p;

+ 2 - 2
drivers/char/Kconfig

@@ -153,7 +153,7 @@ config DIGIEPCA
 
 
 config ESPSERIAL
 config ESPSERIAL
 	tristate "Hayes ESP serial port support"
 	tristate "Hayes ESP serial port support"
-	depends on SERIAL_NONSTANDARD && ISA && BROKEN_ON_SMP
+	depends on SERIAL_NONSTANDARD && ISA && BROKEN_ON_SMP && ISA_DMA_API
 	help
 	help
 	  This is a driver which supports Hayes ESP serial ports.  Both single
 	  This is a driver which supports Hayes ESP serial ports.  Both single
 	  port cards and multiport cards are supported.  Make sure to read
 	  port cards and multiport cards are supported.  Make sure to read
@@ -195,7 +195,7 @@ config ISI
 
 
 config SYNCLINK
 config SYNCLINK
 	tristate "Microgate SyncLink card support"
 	tristate "Microgate SyncLink card support"
-	depends on SERIAL_NONSTANDARD && PCI
+	depends on SERIAL_NONSTANDARD && PCI && ISA_DMA_API
 	help
 	help
 	  Provides support for the SyncLink ISA and PCI multiprotocol serial
 	  Provides support for the SyncLink ISA and PCI multiprotocol serial
 	  adapters. These adapters support asynchronous and HDLC bit
 	  adapters. These adapters support asynchronous and HDLC bit

+ 16 - 16
drivers/char/ipmi/ipmi_si_intf.c

@@ -1617,15 +1617,15 @@ typedef struct dmi_header
 	u16	handle;
 	u16	handle;
 } dmi_header_t;
 } dmi_header_t;
 
 
-static int decode_dmi(dmi_header_t *dm, int intf_num)
+static int decode_dmi(dmi_header_t __iomem *dm, int intf_num)
 {
 {
-	u8		*data = (u8 *)dm;
+	u8		__iomem *data = (u8 __iomem *)dm;
 	unsigned long  	base_addr;
 	unsigned long  	base_addr;
 	u8		reg_spacing;
 	u8		reg_spacing;
-	u8              len = dm->length;
+	u8              len = readb(&dm->length);
 	dmi_ipmi_data_t *ipmi_data = dmi_data+intf_num;
 	dmi_ipmi_data_t *ipmi_data = dmi_data+intf_num;
 
 
-	ipmi_data->type = data[4];
+	ipmi_data->type = readb(&data[4]);
 
 
 	memcpy(&base_addr, data+8, sizeof(unsigned long));
 	memcpy(&base_addr, data+8, sizeof(unsigned long));
 	if (len >= 0x11) {
 	if (len >= 0x11) {
@@ -1640,12 +1640,12 @@ static int decode_dmi(dmi_header_t *dm, int intf_num)
 		}
 		}
 		/* If bit 4 of byte 0x10 is set, then the lsb for the address
 		/* If bit 4 of byte 0x10 is set, then the lsb for the address
 		   is odd. */
 		   is odd. */
-		ipmi_data->base_addr = base_addr | ((data[0x10] & 0x10) >> 4);
+		ipmi_data->base_addr = base_addr | ((readb(&data[0x10]) & 0x10) >> 4);
 
 
-		ipmi_data->irq = data[0x11];
+		ipmi_data->irq = readb(&data[0x11]);
 
 
 		/* The top two bits of byte 0x10 hold the register spacing. */
 		/* The top two bits of byte 0x10 hold the register spacing. */
-		reg_spacing = (data[0x10] & 0xC0) >> 6;
+		reg_spacing = (readb(&data[0x10]) & 0xC0) >> 6;
 		switch(reg_spacing){
 		switch(reg_spacing){
 		case 0x00: /* Byte boundaries */
 		case 0x00: /* Byte boundaries */
 		    ipmi_data->offset = 1;
 		    ipmi_data->offset = 1;
@@ -1673,7 +1673,7 @@ static int decode_dmi(dmi_header_t *dm, int intf_num)
 		ipmi_data->offset = 1;
 		ipmi_data->offset = 1;
 	}
 	}
 
 
-	ipmi_data->slave_addr = data[6];
+	ipmi_data->slave_addr = readb(&data[6]);
 
 
 	if (is_new_interface(-1, ipmi_data->addr_space,ipmi_data->base_addr)) {
 	if (is_new_interface(-1, ipmi_data->addr_space,ipmi_data->base_addr)) {
 		dmi_data_entries++;
 		dmi_data_entries++;
@@ -1687,9 +1687,9 @@ static int decode_dmi(dmi_header_t *dm, int intf_num)
 
 
 static int dmi_table(u32 base, int len, int num)
 static int dmi_table(u32 base, int len, int num)
 {
 {
-	u8 		  *buf;
-	struct dmi_header *dm;
-	u8 		  *data;
+	u8 		  __iomem *buf;
+	struct dmi_header __iomem *dm;
+	u8 		  __iomem *data;
 	int 		  i=1;
 	int 		  i=1;
 	int		  status=-1;
 	int		  status=-1;
 	int               intf_num = 0;
 	int               intf_num = 0;
@@ -1702,12 +1702,12 @@ static int dmi_table(u32 base, int len, int num)
 
 
 	while(i<num && (data - buf) < len)
 	while(i<num && (data - buf) < len)
 	{
 	{
-		dm=(dmi_header_t *)data;
+		dm=(dmi_header_t __iomem *)data;
 
 
-		if((data-buf+dm->length) >= len)
+		if((data-buf+readb(&dm->length)) >= len)
         		break;
         		break;
 
 
-		if (dm->type == 38) {
+		if (readb(&dm->type) == 38) {
 			if (decode_dmi(dm, intf_num) == 0) {
 			if (decode_dmi(dm, intf_num) == 0) {
 				intf_num++;
 				intf_num++;
 				if (intf_num >= SI_MAX_DRIVERS)
 				if (intf_num >= SI_MAX_DRIVERS)
@@ -1715,8 +1715,8 @@ static int dmi_table(u32 base, int len, int num)
 			}
 			}
 		}
 		}
 
 
-	        data+=dm->length;
-		while((data-buf) < len && (*data || data[1]))
+	        data+=readb(&dm->length);
+		while((data-buf) < len && (readb(data)||readb(data+1)))
 			data++;
 			data++;
 		data+=2;
 		data+=2;
 		i++;
 		i++;

+ 1 - 1
drivers/char/ipmi/ipmi_si_sm.h

@@ -51,7 +51,7 @@ struct si_sm_io
 	/* Generic info used by the actual handling routines, the
 	/* Generic info used by the actual handling routines, the
            state machine shouldn't touch these. */
            state machine shouldn't touch these. */
 	void *info;
 	void *info;
-	void *addr;
+	void __iomem *addr;
 	int  regspacing;
 	int  regspacing;
 	int  regsize;
 	int  regsize;
 	int  regshift;
 	int  regshift;

+ 2 - 2
drivers/char/mbcs.c

@@ -394,7 +394,7 @@ int mbcs_open(struct inode *ip, struct file *fp)
 	return -ENODEV;
 	return -ENODEV;
 }
 }
 
 
-ssize_t mbcs_sram_read(struct file * fp, char *buf, size_t len, loff_t * off)
+ssize_t mbcs_sram_read(struct file * fp, char __user *buf, size_t len, loff_t * off)
 {
 {
 	struct cx_dev *cx_dev = fp->private_data;
 	struct cx_dev *cx_dev = fp->private_data;
 	struct mbcs_soft *soft = cx_dev->soft;
 	struct mbcs_soft *soft = cx_dev->soft;
@@ -419,7 +419,7 @@ ssize_t mbcs_sram_read(struct file * fp, char *buf, size_t len, loff_t * off)
 }
 }
 
 
 ssize_t
 ssize_t
-mbcs_sram_write(struct file * fp, const char *buf, size_t len, loff_t * off)
+mbcs_sram_write(struct file * fp, const char __user *buf, size_t len, loff_t * off)
 {
 {
 	struct cx_dev *cx_dev = fp->private_data;
 	struct cx_dev *cx_dev = fp->private_data;
 	struct mbcs_soft *soft = cx_dev->soft;
 	struct mbcs_soft *soft = cx_dev->soft;

+ 2 - 2
drivers/char/mbcs.h

@@ -543,9 +543,9 @@ struct mbcs_soft {
 };
 };
 
 
 extern int mbcs_open(struct inode *ip, struct file *fp);
 extern int mbcs_open(struct inode *ip, struct file *fp);
-extern ssize_t mbcs_sram_read(struct file *fp, char *buf, size_t len,
+extern ssize_t mbcs_sram_read(struct file *fp, char __user *buf, size_t len,
 			      loff_t * off);
 			      loff_t * off);
-extern ssize_t mbcs_sram_write(struct file *fp, const char *buf, size_t len,
+extern ssize_t mbcs_sram_write(struct file *fp, const char __user *buf, size_t len,
 			       loff_t * off);
 			       loff_t * off);
 extern loff_t mbcs_sram_llseek(struct file *filp, loff_t off, int whence);
 extern loff_t mbcs_sram_llseek(struct file *filp, loff_t off, int whence);
 extern int mbcs_gscr_mmap(struct file *fp, struct vm_area_struct *vma);
 extern int mbcs_gscr_mmap(struct file *fp, struct vm_area_struct *vma);

+ 3 - 3
drivers/char/sonypi.c

@@ -1021,11 +1021,11 @@ static int sonypi_misc_ioctl(struct inode *ip, struct file *fp,
 			ret = -EIO;
 			ret = -EIO;
 			break;
 			break;
 		}
 		}
-		if (copy_to_user((u8 *)arg, &val8, sizeof(val8)))
+		if (copy_to_user(argp, &val8, sizeof(val8)))
 			ret = -EFAULT;
 			ret = -EFAULT;
 		break;
 		break;
 	case SONYPI_IOCSFAN:
 	case SONYPI_IOCSFAN:
-		if (copy_from_user(&val8, (u8 *)arg, sizeof(val8))) {
+		if (copy_from_user(&val8, argp, sizeof(val8))) {
 			ret = -EFAULT;
 			ret = -EFAULT;
 			break;
 			break;
 		}
 		}
@@ -1038,7 +1038,7 @@ static int sonypi_misc_ioctl(struct inode *ip, struct file *fp,
 			ret = -EIO;
 			ret = -EIO;
 			break;
 			break;
 		}
 		}
-		if (copy_to_user((u8 *)arg, &val8, sizeof(val8)))
+		if (copy_to_user(argp, &val8, sizeof(val8)))
 			ret = -EFAULT;
 			ret = -EFAULT;
 		break;
 		break;
 	default:
 	default:

+ 1 - 1
drivers/mmc/Kconfig

@@ -51,7 +51,7 @@ config MMC_PXA
 
 
 config MMC_WBSD
 config MMC_WBSD
 	tristate "Winbond W83L51xD SD/MMC Card Interface support"
 	tristate "Winbond W83L51xD SD/MMC Card Interface support"
-	depends on MMC && ISA
+	depends on MMC && ISA && ISA_DMA_API
 	help
 	help
 	  This selects the Winbond(R) W83L51xD Secure digital and
 	  This selects the Winbond(R) W83L51xD Secure digital and
           Multimedia card Interface.
           Multimedia card Interface.

+ 5 - 5
drivers/net/Kconfig

@@ -589,7 +589,7 @@ config EL2
 
 
 config ELPLUS
 config ELPLUS
 	tristate "3c505 \"EtherLink Plus\" support"
 	tristate "3c505 \"EtherLink Plus\" support"
-	depends on NET_VENDOR_3COM && ISA
+	depends on NET_VENDOR_3COM && ISA && ISA_DMA_API
 	---help---
 	---help---
 	  Information about this network (Ethernet) card can be found in
 	  Information about this network (Ethernet) card can be found in
 	  <file:Documentation/networking/3c505.txt>.  If you have a card of
 	  <file:Documentation/networking/3c505.txt>.  If you have a card of
@@ -630,7 +630,7 @@ config EL3
 
 
 config 3C515
 config 3C515
 	tristate "3c515 ISA \"Fast EtherLink\""
 	tristate "3c515 ISA \"Fast EtherLink\""
-	depends on NET_VENDOR_3COM && (ISA || EISA)
+	depends on NET_VENDOR_3COM && (ISA || EISA) && ISA_DMA_API
 	help
 	help
 	  If you have a 3Com ISA EtherLink XL "Corkscrew" 3c515 Fast Ethernet
 	  If you have a 3Com ISA EtherLink XL "Corkscrew" 3c515 Fast Ethernet
 	  network card, say Y and read the Ethernet-HOWTO, available from
 	  network card, say Y and read the Ethernet-HOWTO, available from
@@ -708,7 +708,7 @@ config TYPHOON
 
 
 config LANCE
 config LANCE
 	tristate "AMD LANCE and PCnet (AT1500 and NE2100) support"
 	tristate "AMD LANCE and PCnet (AT1500 and NE2100) support"
-	depends on NET_ETHERNET && ISA
+	depends on NET_ETHERNET && ISA && ISA_DMA_API
 	help
 	help
 	  If you have a network (Ethernet) card of this type, say Y and read
 	  If you have a network (Ethernet) card of this type, say Y and read
 	  the Ethernet-HOWTO, available from
 	  the Ethernet-HOWTO, available from
@@ -864,7 +864,7 @@ config NI52
 
 
 config NI65
 config NI65
 	tristate "NI6510 support"
 	tristate "NI6510 support"
-	depends on NET_VENDOR_RACAL && ISA
+	depends on NET_VENDOR_RACAL && ISA && ISA_DMA_API
 	help
 	help
 	  If you have a network (Ethernet) card of this type, say Y and read
 	  If you have a network (Ethernet) card of this type, say Y and read
 	  the Ethernet-HOWTO, available from
 	  the Ethernet-HOWTO, available from
@@ -1072,7 +1072,7 @@ config NE2000
 
 
 config ZNET
 config ZNET
 	tristate "Zenith Z-Note support (EXPERIMENTAL)"
 	tristate "Zenith Z-Note support (EXPERIMENTAL)"
-	depends on NET_ISA && EXPERIMENTAL
+	depends on NET_ISA && EXPERIMENTAL && ISA_DMA_API
 	help
 	help
 	  The Zenith Z-Note notebook computer has a built-in network
 	  The Zenith Z-Note notebook computer has a built-in network
 	  (Ethernet) card, and this is the Linux driver for it. Note that the
 	  (Ethernet) card, and this is the Linux driver for it. Note that the

+ 1 - 1
drivers/net/appletalk/Kconfig

@@ -13,7 +13,7 @@ config DEV_APPLETALK
 
 
 config LTPC
 config LTPC
 	tristate "Apple/Farallon LocalTalk PC support"
 	tristate "Apple/Farallon LocalTalk PC support"
-	depends on DEV_APPLETALK && (ISA || EISA)
+	depends on DEV_APPLETALK && (ISA || EISA) && ISA_DMA_API
 	help
 	help
 	  This allows you to use the AppleTalk PC card to connect to LocalTalk
 	  This allows you to use the AppleTalk PC card to connect to LocalTalk
 	  networks. The card is also known as the Farallon PhoneNet PC card.
 	  networks. The card is also known as the Farallon PhoneNet PC card.

+ 2 - 2
drivers/net/hamradio/Kconfig

@@ -45,7 +45,7 @@ config BPQETHER
 
 
 config DMASCC
 config DMASCC
 	tristate "High-speed (DMA) SCC driver for AX.25"
 	tristate "High-speed (DMA) SCC driver for AX.25"
-	depends on ISA && AX25 && BROKEN_ON_SMP
+	depends on ISA && AX25 && BROKEN_ON_SMP && ISA_DMA_API
 	---help---
 	---help---
 	  This is a driver for high-speed SCC boards, i.e. those supporting
 	  This is a driver for high-speed SCC boards, i.e. those supporting
 	  DMA on one port. You usually use those boards to connect your
 	  DMA on one port. You usually use those boards to connect your
@@ -78,7 +78,7 @@ config DMASCC
 
 
 config SCC
 config SCC
 	tristate "Z8530 SCC driver"
 	tristate "Z8530 SCC driver"
-	depends on ISA && AX25
+	depends on ISA && AX25 && ISA_DMA_API
 	---help---
 	---help---
 	  These cards are used to connect your Linux box to an amateur radio
 	  These cards are used to connect your Linux box to an amateur radio
 	  in order to communicate with other computers. If you want to use
 	  in order to communicate with other computers. If you want to use

+ 5 - 5
drivers/net/irda/Kconfig

@@ -310,7 +310,7 @@ config SIGMATEL_FIR
 
 
 config NSC_FIR
 config NSC_FIR
 	tristate "NSC PC87108/PC87338"
 	tristate "NSC PC87108/PC87338"
-	depends on IRDA
+	depends on IRDA && ISA_DMA_API
 	help
 	help
 	  Say Y here if you want to build support for the NSC PC87108 and
 	  Say Y here if you want to build support for the NSC PC87108 and
 	  PC87338 IrDA chipsets.  This driver supports SIR,
 	  PC87338 IrDA chipsets.  This driver supports SIR,
@@ -321,7 +321,7 @@ config NSC_FIR
 
 
 config WINBOND_FIR
 config WINBOND_FIR
 	tristate "Winbond W83977AF (IR)"
 	tristate "Winbond W83977AF (IR)"
-	depends on IRDA
+	depends on IRDA && ISA_DMA_API
 	help
 	help
 	  Say Y here if you want to build IrDA support for the Winbond
 	  Say Y here if you want to build IrDA support for the Winbond
 	  W83977AF super-io chipset.  This driver should be used for the IrDA
 	  W83977AF super-io chipset.  This driver should be used for the IrDA
@@ -347,7 +347,7 @@ config AU1000_FIR
 
 
 config SMC_IRCC_FIR
 config SMC_IRCC_FIR
 	tristate "SMSC IrCC (EXPERIMENTAL)"
 	tristate "SMSC IrCC (EXPERIMENTAL)"
-	depends on EXPERIMENTAL && IRDA
+	depends on EXPERIMENTAL && IRDA && ISA_DMA_API
 	help
 	help
 	  Say Y here if you want to build support for the SMC Infrared
 	  Say Y here if you want to build support for the SMC Infrared
 	  Communications Controller.  It is used in a wide variety of
 	  Communications Controller.  It is used in a wide variety of
@@ -357,7 +357,7 @@ config SMC_IRCC_FIR
 
 
 config ALI_FIR
 config ALI_FIR
 	tristate "ALi M5123 FIR (EXPERIMENTAL)"
 	tristate "ALi M5123 FIR (EXPERIMENTAL)"
-	depends on EXPERIMENTAL && IRDA
+	depends on EXPERIMENTAL && IRDA && ISA_DMA_API
 	help
 	help
 	  Say Y here if you want to build support for the ALi M5123 FIR
 	  Say Y here if you want to build support for the ALi M5123 FIR
 	  Controller.  The ALi M5123 FIR Controller is embedded in ALi M1543C,
 	  Controller.  The ALi M5123 FIR Controller is embedded in ALi M1543C,
@@ -385,7 +385,7 @@ config SA1100_FIR
 
 
 config VIA_FIR
 config VIA_FIR
 	tristate "VIA VT8231/VT1211 SIR/MIR/FIR"
 	tristate "VIA VT8231/VT1211 SIR/MIR/FIR"
-	depends on IRDA
+	depends on IRDA && ISA_DMA_API
 	help
 	help
 	  Say Y here if you want to build support for the VIA VT8231
 	  Say Y here if you want to build support for the VIA VT8231
 	  and VIA VT1211 IrDA controllers, found on the motherboards using
 	  and VIA VT1211 IrDA controllers, found on the motherboards using

+ 3 - 3
drivers/net/wan/Kconfig

@@ -26,7 +26,7 @@ config WAN
 # There is no way to detect a comtrol sv11 - force it modular for now.
 # There is no way to detect a comtrol sv11 - force it modular for now.
 config HOSTESS_SV11
 config HOSTESS_SV11
 	tristate "Comtrol Hostess SV-11 support"
 	tristate "Comtrol Hostess SV-11 support"
-	depends on WAN && ISA && m
+	depends on WAN && ISA && m && ISA_DMA_API
 	help
 	help
 	  Driver for Comtrol Hostess SV-11 network card which
 	  Driver for Comtrol Hostess SV-11 network card which
 	  operates on low speed synchronous serial links at up to
 	  operates on low speed synchronous serial links at up to
@@ -38,7 +38,7 @@ config HOSTESS_SV11
 # The COSA/SRP driver has not been tested as non-modular yet.
 # The COSA/SRP driver has not been tested as non-modular yet.
 config COSA
 config COSA
 	tristate "COSA/SRP sync serial boards support"
 	tristate "COSA/SRP sync serial boards support"
-	depends on WAN && ISA && m
+	depends on WAN && ISA && m && ISA_DMA_API
 	---help---
 	---help---
 	  Driver for COSA and SRP synchronous serial boards.
 	  Driver for COSA and SRP synchronous serial boards.
 
 
@@ -127,7 +127,7 @@ config LANMEDIA
 # There is no way to detect a Sealevel board. Force it modular
 # There is no way to detect a Sealevel board. Force it modular
 config SEALEVEL_4021
 config SEALEVEL_4021
 	tristate "Sealevel Systems 4021 support"
 	tristate "Sealevel Systems 4021 support"
-	depends on WAN && ISA && m
+	depends on WAN && ISA && m && ISA_DMA_API
 	help
 	help
 	  This is a driver for the Sealevel Systems ACB 56 serial I/O adapter.
 	  This is a driver for the Sealevel Systems ACB 56 serial I/O adapter.
 
 

+ 1 - 1
drivers/parport/Kconfig

@@ -34,7 +34,7 @@ config PARPORT
 
 
 config PARPORT_PC
 config PARPORT_PC
 	tristate "PC-style hardware"
 	tristate "PC-style hardware"
-	depends on PARPORT && (!SPARC64 || PCI) && (!SPARC32 || BROKEN)
+	depends on PARPORT && (!SPARC64 || PCI) && !SPARC32
 	---help---
 	---help---
 	  You should say Y here if you have a PC-style parallel port. All
 	  You should say Y here if you have a PC-style parallel port. All
 	  IBM PC compatible computers and some Alphas have PC-style
 	  IBM PC compatible computers and some Alphas have PC-style

+ 24 - 10
drivers/parport/parport_pc.c

@@ -67,6 +67,10 @@
 
 
 #define PARPORT_PC_MAX_PORTS PARPORT_MAX
 #define PARPORT_PC_MAX_PORTS PARPORT_MAX
 
 
+#ifdef CONFIG_ISA_DMA_API
+#define HAS_DMA
+#endif
+
 /* ECR modes */
 /* ECR modes */
 #define ECR_SPP 00
 #define ECR_SPP 00
 #define ECR_PS2 01
 #define ECR_PS2 01
@@ -610,6 +614,7 @@ dump_parport_state ("leave fifo_write_block_pio", port);
 	return length - left;
 	return length - left;
 }
 }
 
 
+#ifdef HAS_DMA
 static size_t parport_pc_fifo_write_block_dma (struct parport *port,
 static size_t parport_pc_fifo_write_block_dma (struct parport *port,
 					       const void *buf, size_t length)
 					       const void *buf, size_t length)
 {
 {
@@ -732,6 +737,17 @@ dump_parport_state ("enter fifo_write_block_dma", port);
 dump_parport_state ("leave fifo_write_block_dma", port);
 dump_parport_state ("leave fifo_write_block_dma", port);
 	return length - left;
 	return length - left;
 }
 }
+#endif
+
+static inline size_t parport_pc_fifo_write_block(struct parport *port,
+					       const void *buf, size_t length)
+{
+#ifdef HAS_DMA
+	if (port->dma != PARPORT_DMA_NONE)
+		return parport_pc_fifo_write_block_dma (port, buf, length);
+#endif
+	return parport_pc_fifo_write_block_pio (port, buf, length);
+}
 
 
 /* Parallel Port FIFO mode (ECP chipsets) */
 /* Parallel Port FIFO mode (ECP chipsets) */
 static size_t parport_pc_compat_write_block_pio (struct parport *port,
 static size_t parport_pc_compat_write_block_pio (struct parport *port,
@@ -758,10 +774,7 @@ static size_t parport_pc_compat_write_block_pio (struct parport *port,
 	port->physport->ieee1284.phase = IEEE1284_PH_FWD_DATA;
 	port->physport->ieee1284.phase = IEEE1284_PH_FWD_DATA;
 
 
 	/* Write the data to the FIFO. */
 	/* Write the data to the FIFO. */
-	if (port->dma != PARPORT_DMA_NONE)
-		written = parport_pc_fifo_write_block_dma (port, buf, length);
-	else
-		written = parport_pc_fifo_write_block_pio (port, buf, length);
+	written = parport_pc_fifo_write_block(port, buf, length);
 
 
 	/* Finish up. */
 	/* Finish up. */
 	/* For some hardware we don't want to touch the mode until
 	/* For some hardware we don't want to touch the mode until
@@ -856,10 +869,7 @@ static size_t parport_pc_ecp_write_block_pio (struct parport *port,
 	port->physport->ieee1284.phase = IEEE1284_PH_FWD_DATA;
 	port->physport->ieee1284.phase = IEEE1284_PH_FWD_DATA;
 
 
 	/* Write the data to the FIFO. */
 	/* Write the data to the FIFO. */
-	if (port->dma != PARPORT_DMA_NONE)
-		written = parport_pc_fifo_write_block_dma (port, buf, length);
-	else
-		written = parport_pc_fifo_write_block_pio (port, buf, length);
+	written = parport_pc_fifo_write_block(port, buf, length);
 
 
 	/* Finish up. */
 	/* Finish up. */
 	/* For some hardware we don't want to touch the mode until
 	/* For some hardware we don't want to touch the mode until
@@ -2285,6 +2295,7 @@ struct parport *parport_pc_probe_port (unsigned long int base,
 		}
 		}
 
 
 #ifdef CONFIG_PARPORT_PC_FIFO
 #ifdef CONFIG_PARPORT_PC_FIFO
+#ifdef HAS_DMA
 		if (p->dma != PARPORT_DMA_NONE) {
 		if (p->dma != PARPORT_DMA_NONE) {
 			if (request_dma (p->dma, p->name)) {
 			if (request_dma (p->dma, p->name)) {
 				printk (KERN_WARNING "%s: dma %d in use, "
 				printk (KERN_WARNING "%s: dma %d in use, "
@@ -2306,7 +2317,8 @@ struct parport *parport_pc_probe_port (unsigned long int base,
 				}
 				}
 			}
 			}
 		}
 		}
-#endif /* CONFIG_PARPORT_PC_FIFO */
+#endif
+#endif
 	}
 	}
 
 
 	/* Done probing.  Now put the port into a sensible start-up state. */
 	/* Done probing.  Now put the port into a sensible start-up state. */
@@ -2367,11 +2379,13 @@ void parport_pc_unregister_port (struct parport *p)
 	if (p->modes & PARPORT_MODE_ECP)
 	if (p->modes & PARPORT_MODE_ECP)
 		release_region(p->base_hi, 3);
 		release_region(p->base_hi, 3);
 #ifdef CONFIG_PARPORT_PC_FIFO
 #ifdef CONFIG_PARPORT_PC_FIFO
+#ifdef HAS_DMA
 	if (priv->dma_buf)
 	if (priv->dma_buf)
 		pci_free_consistent(priv->dev, PAGE_SIZE,
 		pci_free_consistent(priv->dev, PAGE_SIZE,
 				    priv->dma_buf,
 				    priv->dma_buf,
 				    priv->dma_handle);
 				    priv->dma_handle);
-#endif /* CONFIG_PARPORT_PC_FIFO */
+#endif
+#endif
 	kfree (p->private_data);
 	kfree (p->private_data);
 	parport_put_port(p);
 	parport_put_port(p);
 	kfree (ops); /* hope no-one cached it */
 	kfree (ops); /* hope no-one cached it */

+ 1 - 1
drivers/pci/hotplug/ibmphp.h

@@ -196,7 +196,7 @@ struct ebda_hpc_bus {
 
 
 
 
 /********************************************************************
 /********************************************************************
-*   THREE TYPE OF HOT PLUG CONTROLER                                *
+*   THREE TYPE OF HOT PLUG CONTROLLER                                *
 ********************************************************************/
 ********************************************************************/
 
 
 struct isa_ctlr_access {
 struct isa_ctlr_access {

+ 3 - 3
drivers/pci/hotplug/ibmphp_hpc.c

@@ -64,7 +64,7 @@ static int to_debug = FALSE;
 #define WPG_I2C_OR		0x2000	// I2C OR operation
 #define WPG_I2C_OR		0x2000	// I2C OR operation
 
 
 //----------------------------------------------------------------------------
 //----------------------------------------------------------------------------
-// Command set for I2C Master Operation Setup Regisetr
+// Command set for I2C Master Operation Setup Register
 //----------------------------------------------------------------------------
 //----------------------------------------------------------------------------
 #define WPG_READATADDR_MASK	0x00010000	// read,bytes,I2C shifted,index
 #define WPG_READATADDR_MASK	0x00010000	// read,bytes,I2C shifted,index
 #define WPG_WRITEATADDR_MASK	0x40010000	// write,bytes,I2C shifted,index
 #define WPG_WRITEATADDR_MASK	0x40010000	// write,bytes,I2C shifted,index
@@ -835,7 +835,7 @@ static void poll_hpc (void)
 		if (ibmphp_shutdown) 
 		if (ibmphp_shutdown) 
 			break;
 			break;
 		
 		
-		/* try to get the lock to do some kind of harware access */
+		/* try to get the lock to do some kind of hardware access */
 		down (&semOperations);
 		down (&semOperations);
 
 
 		switch (poll_state) {
 		switch (poll_state) {
@@ -906,7 +906,7 @@ static void poll_hpc (void)
 				poll_state = POLL_LATCH_REGISTER;
 				poll_state = POLL_LATCH_REGISTER;
 			break;
 			break;
 		}	
 		}	
-		/* give up the harware semaphore */
+		/* give up the hardware semaphore */
 		up (&semOperations);
 		up (&semOperations);
 		/* sleep for a short time just for good measure */
 		/* sleep for a short time just for good measure */
 		msleep(100);
 		msleep(100);

+ 5 - 2
drivers/pci/hotplug/ibmphp_pci.c

@@ -1308,10 +1308,10 @@ static int unconfigure_boot_device (u8 busno, u8 device, u8 function)
 			/* ????????? DO WE NEED TO WRITE ANYTHING INTO THE PCI CONFIG SPACE BACK ?????????? */
 			/* ????????? DO WE NEED TO WRITE ANYTHING INTO THE PCI CONFIG SPACE BACK ?????????? */
 		} else {
 		} else {
 			/* This is Memory */
 			/* This is Memory */
-			start_address &= PCI_BASE_ADDRESS_MEM_MASK;
 			if (start_address & PCI_BASE_ADDRESS_MEM_PREFETCH) {
 			if (start_address & PCI_BASE_ADDRESS_MEM_PREFETCH) {
 				/* pfmem */
 				/* pfmem */
 				debug ("start address of pfmem is %x\n", start_address);
 				debug ("start address of pfmem is %x\n", start_address);
+				start_address &= PCI_BASE_ADDRESS_MEM_MASK;
 
 
 				if (ibmphp_find_resource (bus, start_address, &pfmem, PFMEM) < 0) {
 				if (ibmphp_find_resource (bus, start_address, &pfmem, PFMEM) < 0) {
 					err ("cannot find corresponding PFMEM resource to remove\n");
 					err ("cannot find corresponding PFMEM resource to remove\n");
@@ -1325,6 +1325,8 @@ static int unconfigure_boot_device (u8 busno, u8 device, u8 function)
 			} else {
 			} else {
 				/* regular memory */
 				/* regular memory */
 				debug ("start address of mem is %x\n", start_address);
 				debug ("start address of mem is %x\n", start_address);
+				start_address &= PCI_BASE_ADDRESS_MEM_MASK;
+
 				if (ibmphp_find_resource (bus, start_address, &mem, MEM) < 0) {
 				if (ibmphp_find_resource (bus, start_address, &mem, MEM) < 0) {
 					err ("cannot find corresponding MEM resource to remove\n");
 					err ("cannot find corresponding MEM resource to remove\n");
 					return -EIO;
 					return -EIO;
@@ -1422,9 +1424,9 @@ static int unconfigure_boot_bridge (u8 busno, u8 device, u8 function)
 			/* ????????? DO WE NEED TO WRITE ANYTHING INTO THE PCI CONFIG SPACE BACK ?????????? */
 			/* ????????? DO WE NEED TO WRITE ANYTHING INTO THE PCI CONFIG SPACE BACK ?????????? */
 		} else {
 		} else {
 			/* This is Memory */
 			/* This is Memory */
-			start_address &= PCI_BASE_ADDRESS_MEM_MASK;
 			if (start_address & PCI_BASE_ADDRESS_MEM_PREFETCH) {
 			if (start_address & PCI_BASE_ADDRESS_MEM_PREFETCH) {
 				/* pfmem */
 				/* pfmem */
+				start_address &= PCI_BASE_ADDRESS_MEM_MASK;
 				if (ibmphp_find_resource (bus, start_address, &pfmem, PFMEM) < 0) {
 				if (ibmphp_find_resource (bus, start_address, &pfmem, PFMEM) < 0) {
 					err ("cannot find corresponding PFMEM resource to remove\n");
 					err ("cannot find corresponding PFMEM resource to remove\n");
 					return -EINVAL;
 					return -EINVAL;
@@ -1436,6 +1438,7 @@ static int unconfigure_boot_bridge (u8 busno, u8 device, u8 function)
 				}
 				}
 			} else {
 			} else {
 				/* regular memory */
 				/* regular memory */
+				start_address &= PCI_BASE_ADDRESS_MEM_MASK;
 				if (ibmphp_find_resource (bus, start_address, &mem, MEM) < 0) {
 				if (ibmphp_find_resource (bus, start_address, &mem, MEM) < 0) {
 					err ("cannot find corresponding MEM resource to remove\n");
 					err ("cannot find corresponding MEM resource to remove\n");
 					return -EINVAL;
 					return -EINVAL;

+ 1 - 1
drivers/pci/hotplug/pci_hotplug.h

@@ -150,7 +150,7 @@ struct hotplug_slot_info {
  * @name: the name of the slot being registered.  This string must
  * @name: the name of the slot being registered.  This string must
  * be unique amoung slots registered on this system.
  * be unique amoung slots registered on this system.
  * @ops: pointer to the &struct hotplug_slot_ops to be used for this slot
  * @ops: pointer to the &struct hotplug_slot_ops to be used for this slot
- * @info: pointer to the &struct hotplug_slot_info for the inital values for
+ * @info: pointer to the &struct hotplug_slot_info for the initial values for
  * this slot.
  * this slot.
  * @release: called during pci_hp_deregister to free memory allocated in a
  * @release: called during pci_hp_deregister to free memory allocated in a
  * hotplug_slot structure.
  * hotplug_slot structure.

+ 18 - 5
drivers/pci/hotplug/pciehp_core.c

@@ -90,6 +90,22 @@ static struct hotplug_slot_ops pciehp_hotplug_slot_ops = {
   	.get_cur_bus_speed =	get_cur_bus_speed,
   	.get_cur_bus_speed =	get_cur_bus_speed,
 };
 };
 
 
+/**
+ * release_slot - free up the memory used by a slot
+ * @hotplug_slot: slot to free
+ */
+static void release_slot(struct hotplug_slot *hotplug_slot)
+{
+	struct slot *slot = hotplug_slot->private;
+
+	dbg("%s - physical_slot = %s\n", __FUNCTION__, hotplug_slot->name);
+
+	kfree(slot->hotplug_slot->info);
+	kfree(slot->hotplug_slot->name);
+	kfree(slot->hotplug_slot);
+	kfree(slot);
+}
+
 static int init_slots(struct controller *ctrl)
 static int init_slots(struct controller *ctrl)
 {
 {
 	struct slot *new_slot;
 	struct slot *new_slot;
@@ -139,7 +155,8 @@ static int init_slots(struct controller *ctrl)
 
 
 		/* register this slot with the hotplug pci core */
 		/* register this slot with the hotplug pci core */
 		new_slot->hotplug_slot->private = new_slot;
 		new_slot->hotplug_slot->private = new_slot;
-		make_slot_name (new_slot->hotplug_slot->name, SLOT_NAME_SIZE, new_slot);
+		new_slot->hotplug_slot->release = &release_slot;
+		make_slot_name(new_slot->hotplug_slot->name, SLOT_NAME_SIZE, new_slot);
 		new_slot->hotplug_slot->ops = &pciehp_hotplug_slot_ops;
 		new_slot->hotplug_slot->ops = &pciehp_hotplug_slot_ops;
 
 
 		new_slot->hpc_ops->get_power_status(new_slot, &(new_slot->hotplug_slot->info->power_status));
 		new_slot->hpc_ops->get_power_status(new_slot, &(new_slot->hotplug_slot->info->power_status));
@@ -188,10 +205,6 @@ static int cleanup_slots (struct controller * ctrl)
 	while (old_slot) {
 	while (old_slot) {
 		next_slot = old_slot->next;
 		next_slot = old_slot->next;
 		pci_hp_deregister (old_slot->hotplug_slot);
 		pci_hp_deregister (old_slot->hotplug_slot);
-		kfree(old_slot->hotplug_slot->info);
-		kfree(old_slot->hotplug_slot->name);
-		kfree(old_slot->hotplug_slot);
-		kfree(old_slot);
 		old_slot = next_slot;
 		old_slot = next_slot;
 	}
 	}
 
 

+ 1 - 1
drivers/pci/hotplug/pcihp_skeleton.c

@@ -297,7 +297,7 @@ static int __init init_slots(void)
 		hotplug_slot->ops = &skel_hotplug_slot_ops;
 		hotplug_slot->ops = &skel_hotplug_slot_ops;
 		
 		
 		/*
 		/*
-		 * Initilize the slot info structure with some known
+		 * Initialize the slot info structure with some known
 		 * good values.
 		 * good values.
 		 */
 		 */
 		info->power_status = get_power_status(slot);
 		info->power_status = get_power_status(slot);

+ 3 - 3
drivers/pci/msi.c

@@ -522,7 +522,7 @@ void pci_scan_msi_device(struct pci_dev *dev)
  * msi_capability_init - configure device's MSI capability structure
  * msi_capability_init - configure device's MSI capability structure
  * @dev: pointer to the pci_dev data structure of MSI device function
  * @dev: pointer to the pci_dev data structure of MSI device function
  *
  *
- * Setup the MSI capability structure of device funtion with a single
+ * Setup the MSI capability structure of device function with a single
  * MSI vector, regardless of device function is capable of handling
  * MSI vector, regardless of device function is capable of handling
  * multiple messages. A return of zero indicates the successful setup
  * multiple messages. A return of zero indicates the successful setup
  * of an entry zero with the new MSI vector or non-zero for otherwise.
  * of an entry zero with the new MSI vector or non-zero for otherwise.
@@ -599,7 +599,7 @@ static int msi_capability_init(struct pci_dev *dev)
  * msix_capability_init - configure device's MSI-X capability
  * msix_capability_init - configure device's MSI-X capability
  * @dev: pointer to the pci_dev data structure of MSI-X device function
  * @dev: pointer to the pci_dev data structure of MSI-X device function
  *
  *
- * Setup the MSI-X capability structure of device funtion with a
+ * Setup the MSI-X capability structure of device function with a
  * single MSI-X vector. A return of zero indicates the successful setup of
  * single MSI-X vector. A return of zero indicates the successful setup of
  * requested MSI-X entries with allocated vectors or non-zero for otherwise.
  * requested MSI-X entries with allocated vectors or non-zero for otherwise.
  **/
  **/
@@ -1074,7 +1074,7 @@ void pci_disable_msix(struct pci_dev* dev)
  * msi_remove_pci_irq_vectors - reclaim MSI(X) vectors to unused state
  * msi_remove_pci_irq_vectors - reclaim MSI(X) vectors to unused state
  * @dev: pointer to the pci_dev data structure of MSI(X) device function
  * @dev: pointer to the pci_dev data structure of MSI(X) device function
  *
  *
- * Being called during hotplug remove, from which the device funciton
+ * Being called during hotplug remove, from which the device function
  * is hot-removed. All previous assigned MSI/MSI-X vectors, if
  * is hot-removed. All previous assigned MSI/MSI-X vectors, if
  * allocated for this device function, are reclaimed to unused state,
  * allocated for this device function, are reclaimed to unused state,
  * which may be used later on.
  * which may be used later on.

+ 1 - 1
drivers/pci/pci-acpi.c

@@ -19,7 +19,7 @@
 
 
 static u32 ctrlset_buf[3] = {0, 0, 0};
 static u32 ctrlset_buf[3] = {0, 0, 0};
 static u32 global_ctrlsets = 0;
 static u32 global_ctrlsets = 0;
-u8 OSC_UUID[16] = {0x5B, 0x4D, 0xDB, 0x33, 0xF7, 0x1F, 0x1C, 0x40, 0x96, 0x57, 0x74, 0x41, 0xC0, 0x3D, 0xD7, 0x66};
+static u8 OSC_UUID[16] = {0x5B, 0x4D, 0xDB, 0x33, 0xF7, 0x1F, 0x1C, 0x40, 0x96, 0x57, 0x74, 0x41, 0xC0, 0x3D, 0xD7, 0x66};
 
 
 static acpi_status  
 static acpi_status  
 acpi_query_osc (
 acpi_query_osc (

+ 10 - 1
drivers/pci/pci-driver.c

@@ -318,6 +318,14 @@ static int pci_device_resume(struct device * dev)
 	return 0;
 	return 0;
 }
 }
 
 
+static void pci_device_shutdown(struct device *dev)
+{
+	struct pci_dev *pci_dev = to_pci_dev(dev);
+	struct pci_driver *drv = pci_dev->driver;
+
+	if (drv && drv->shutdown)
+		drv->shutdown(pci_dev);
+}
 
 
 #define kobj_to_pci_driver(obj) container_of(obj, struct device_driver, kobj)
 #define kobj_to_pci_driver(obj) container_of(obj, struct device_driver, kobj)
 #define attr_to_driver_attribute(obj) container_of(obj, struct driver_attribute, attr)
 #define attr_to_driver_attribute(obj) container_of(obj, struct driver_attribute, attr)
@@ -373,7 +381,7 @@ pci_populate_driver_dir(struct pci_driver *drv)
  * 
  * 
  * Adds the driver structure to the list of registered drivers.
  * Adds the driver structure to the list of registered drivers.
  * Returns a negative value on error, otherwise 0. 
  * Returns a negative value on error, otherwise 0. 
- * If no error occured, the driver remains registered even if 
+ * If no error occurred, the driver remains registered even if 
  * no device was claimed during registration.
  * no device was claimed during registration.
  */
  */
 int pci_register_driver(struct pci_driver *drv)
 int pci_register_driver(struct pci_driver *drv)
@@ -385,6 +393,7 @@ int pci_register_driver(struct pci_driver *drv)
 	drv->driver.bus = &pci_bus_type;
 	drv->driver.bus = &pci_bus_type;
 	drv->driver.probe = pci_device_probe;
 	drv->driver.probe = pci_device_probe;
 	drv->driver.remove = pci_device_remove;
 	drv->driver.remove = pci_device_remove;
+	drv->driver.shutdown = pci_device_shutdown,
 	drv->driver.owner = drv->owner;
 	drv->driver.owner = drv->owner;
 	drv->driver.kobj.ktype = &pci_driver_kobj_type;
 	drv->driver.kobj.ktype = &pci_driver_kobj_type;
 	pci_init_dynids(&drv->dynids);
 	pci_init_dynids(&drv->dynids);

+ 58 - 24
drivers/pci/pci-sysfs.c

@@ -91,6 +91,7 @@ pci_read_config(struct kobject *kobj, char *buf, loff_t off, size_t count)
 	struct pci_dev *dev = to_pci_dev(container_of(kobj,struct device,kobj));
 	struct pci_dev *dev = to_pci_dev(container_of(kobj,struct device,kobj));
 	unsigned int size = 64;
 	unsigned int size = 64;
 	loff_t init_off = off;
 	loff_t init_off = off;
+	u8 *data = (u8*) buf;
 
 
 	/* Several chips lock up trying to read undefined config space */
 	/* Several chips lock up trying to read undefined config space */
 	if (capable(CAP_SYS_ADMIN)) {
 	if (capable(CAP_SYS_ADMIN)) {
@@ -108,30 +109,47 @@ pci_read_config(struct kobject *kobj, char *buf, loff_t off, size_t count)
 		size = count;
 		size = count;
 	}
 	}
 
 
-	while (off & 3) {
-		unsigned char val;
+	if ((off & 1) && size) {
+		u8 val;
 		pci_read_config_byte(dev, off, &val);
 		pci_read_config_byte(dev, off, &val);
-		buf[off - init_off] = val;
+		data[off - init_off] = val;
 		off++;
 		off++;
-		if (--size == 0)
-			break;
+		size--;
+	}
+
+	if ((off & 3) && size > 2) {
+		u16 val;
+		pci_read_config_word(dev, off, &val);
+		data[off - init_off] = val & 0xff;
+		data[off - init_off + 1] = (val >> 8) & 0xff;
+		off += 2;
+		size -= 2;
 	}
 	}
 
 
 	while (size > 3) {
 	while (size > 3) {
-		unsigned int val;
+		u32 val;
 		pci_read_config_dword(dev, off, &val);
 		pci_read_config_dword(dev, off, &val);
-		buf[off - init_off] = val & 0xff;
-		buf[off - init_off + 1] = (val >> 8) & 0xff;
-		buf[off - init_off + 2] = (val >> 16) & 0xff;
-		buf[off - init_off + 3] = (val >> 24) & 0xff;
+		data[off - init_off] = val & 0xff;
+		data[off - init_off + 1] = (val >> 8) & 0xff;
+		data[off - init_off + 2] = (val >> 16) & 0xff;
+		data[off - init_off + 3] = (val >> 24) & 0xff;
 		off += 4;
 		off += 4;
 		size -= 4;
 		size -= 4;
 	}
 	}
 
 
-	while (size > 0) {
-		unsigned char val;
+	if (size >= 2) {
+		u16 val;
+		pci_read_config_word(dev, off, &val);
+		data[off - init_off] = val & 0xff;
+		data[off - init_off + 1] = (val >> 8) & 0xff;
+		off += 2;
+		size -= 2;
+	}
+
+	if (size > 0) {
+		u8 val;
 		pci_read_config_byte(dev, off, &val);
 		pci_read_config_byte(dev, off, &val);
-		buf[off - init_off] = val;
+		data[off - init_off] = val;
 		off++;
 		off++;
 		--size;
 		--size;
 	}
 	}
@@ -145,6 +163,7 @@ pci_write_config(struct kobject *kobj, char *buf, loff_t off, size_t count)
 	struct pci_dev *dev = to_pci_dev(container_of(kobj,struct device,kobj));
 	struct pci_dev *dev = to_pci_dev(container_of(kobj,struct device,kobj));
 	unsigned int size = count;
 	unsigned int size = count;
 	loff_t init_off = off;
 	loff_t init_off = off;
+	u8 *data = (u8*) buf;
 
 
 	if (off > dev->cfg_size)
 	if (off > dev->cfg_size)
 		return 0;
 		return 0;
@@ -152,26 +171,41 @@ pci_write_config(struct kobject *kobj, char *buf, loff_t off, size_t count)
 		size = dev->cfg_size - off;
 		size = dev->cfg_size - off;
 		count = size;
 		count = size;
 	}
 	}
-
-	while (off & 3) {
-		pci_write_config_byte(dev, off, buf[off - init_off]);
+	
+	if ((off & 1) && size) {
+		pci_write_config_byte(dev, off, data[off - init_off]);
 		off++;
 		off++;
-		if (--size == 0)
-			break;
+		size--;
 	}
 	}
+	
+	if ((off & 3) && size > 2) {
+		u16 val = data[off - init_off];
+		val |= (u16) data[off - init_off + 1] << 8;
+                pci_write_config_word(dev, off, val);
+                off += 2;
+                size -= 2;
+        }
 
 
 	while (size > 3) {
 	while (size > 3) {
-		unsigned int val = buf[off - init_off];
-		val |= (unsigned int) buf[off - init_off + 1] << 8;
-		val |= (unsigned int) buf[off - init_off + 2] << 16;
-		val |= (unsigned int) buf[off - init_off + 3] << 24;
+		u32 val = data[off - init_off];
+		val |= (u32) data[off - init_off + 1] << 8;
+		val |= (u32) data[off - init_off + 2] << 16;
+		val |= (u32) data[off - init_off + 3] << 24;
 		pci_write_config_dword(dev, off, val);
 		pci_write_config_dword(dev, off, val);
 		off += 4;
 		off += 4;
 		size -= 4;
 		size -= 4;
 	}
 	}
+	
+	if (size >= 2) {
+		u16 val = data[off - init_off];
+		val |= (u16) data[off - init_off + 1] << 8;
+		pci_write_config_word(dev, off, val);
+		off += 2;
+		size -= 2;
+	}
 
 
-	while (size > 0) {
-		pci_write_config_byte(dev, off, buf[off - init_off]);
+	if (size) {
+		pci_write_config_byte(dev, off, data[off - init_off]);
 		off++;
 		off++;
 		--size;
 		--size;
 	}
 	}

+ 4 - 16
drivers/pci/pci.c

@@ -16,6 +16,7 @@
 #include <linux/module.h>
 #include <linux/module.h>
 #include <linux/spinlock.h>
 #include <linux/spinlock.h>
 #include <asm/dma.h>	/* isa_dma_bridge_buggy */
 #include <asm/dma.h>	/* isa_dma_bridge_buggy */
+#include "pci.h"
 
 
 
 
 /**
 /**
@@ -398,10 +399,10 @@ pci_enable_device(struct pci_dev *dev)
 {
 {
 	int err;
 	int err;
 
 
-	dev->is_enabled = 1;
 	if ((err = pci_enable_device_bars(dev, (1 << PCI_NUM_RESOURCES) - 1)))
 	if ((err = pci_enable_device_bars(dev, (1 << PCI_NUM_RESOURCES) - 1)))
 		return err;
 		return err;
 	pci_fixup_device(pci_fixup_enable, dev);
 	pci_fixup_device(pci_fixup_enable, dev);
+	dev->is_enabled = 1;
 	return 0;
 	return 0;
 }
 }
 
 
@@ -427,16 +428,15 @@ pci_disable_device(struct pci_dev *dev)
 {
 {
 	u16 pci_command;
 	u16 pci_command;
 	
 	
-	dev->is_enabled = 0;
-	dev->is_busmaster = 0;
-
 	pci_read_config_word(dev, PCI_COMMAND, &pci_command);
 	pci_read_config_word(dev, PCI_COMMAND, &pci_command);
 	if (pci_command & PCI_COMMAND_MASTER) {
 	if (pci_command & PCI_COMMAND_MASTER) {
 		pci_command &= ~PCI_COMMAND_MASTER;
 		pci_command &= ~PCI_COMMAND_MASTER;
 		pci_write_config_word(dev, PCI_COMMAND, pci_command);
 		pci_write_config_word(dev, PCI_COMMAND, pci_command);
 	}
 	}
+	dev->is_busmaster = 0;
 
 
 	pcibios_disable_device(dev);
 	pcibios_disable_device(dev);
+	dev->is_enabled = 0;
 }
 }
 
 
 /**
 /**
@@ -748,17 +748,6 @@ pci_set_dma_mask(struct pci_dev *dev, u64 mask)
 	return 0;
 	return 0;
 }
 }
     
     
-int
-pci_dac_set_dma_mask(struct pci_dev *dev, u64 mask)
-{
-	if (!pci_dac_dma_supported(dev, mask))
-		return -EIO;
-
-	dev->dma_mask = mask;
-
-	return 0;
-}
-
 int
 int
 pci_set_consistent_dma_mask(struct pci_dev *dev, u64 mask)
 pci_set_consistent_dma_mask(struct pci_dev *dev, u64 mask)
 {
 {
@@ -821,7 +810,6 @@ EXPORT_SYMBOL(pci_set_master);
 EXPORT_SYMBOL(pci_set_mwi);
 EXPORT_SYMBOL(pci_set_mwi);
 EXPORT_SYMBOL(pci_clear_mwi);
 EXPORT_SYMBOL(pci_clear_mwi);
 EXPORT_SYMBOL(pci_set_dma_mask);
 EXPORT_SYMBOL(pci_set_dma_mask);
-EXPORT_SYMBOL(pci_dac_set_dma_mask);
 EXPORT_SYMBOL(pci_set_consistent_dma_mask);
 EXPORT_SYMBOL(pci_set_consistent_dma_mask);
 EXPORT_SYMBOL(pci_assign_resource);
 EXPORT_SYMBOL(pci_assign_resource);
 EXPORT_SYMBOL(pci_find_parent_resource);
 EXPORT_SYMBOL(pci_find_parent_resource);

+ 1 - 0
drivers/pci/probe.c

@@ -9,6 +9,7 @@
 #include <linux/slab.h>
 #include <linux/slab.h>
 #include <linux/module.h>
 #include <linux/module.h>
 #include <linux/cpumask.h>
 #include <linux/cpumask.h>
+#include "pci.h"
 
 
 #define CARDBUS_LATENCY_TIMER	176	/* secondary latency timer */
 #define CARDBUS_LATENCY_TIMER	176	/* secondary latency timer */
 #define CARDBUS_RESERVE_BUSNR	3
 #define CARDBUS_RESERVE_BUSNR	3

+ 1 - 0
drivers/pci/proc.c

@@ -15,6 +15,7 @@
 
 
 #include <asm/uaccess.h>
 #include <asm/uaccess.h>
 #include <asm/byteorder.h>
 #include <asm/byteorder.h>
+#include "pci.h"
 
 
 static int proc_initialized;	/* = 0 */
 static int proc_initialized;	/* = 0 */
 
 

+ 2 - 0
drivers/pci/quirks.c

@@ -18,6 +18,7 @@
 #include <linux/pci.h>
 #include <linux/pci.h>
 #include <linux/init.h>
 #include <linux/init.h>
 #include <linux/delay.h>
 #include <linux/delay.h>
+#include "pci.h"
 
 
 /* Deal with broken BIOS'es that neglect to enable passive release,
 /* Deal with broken BIOS'es that neglect to enable passive release,
    which can cause problems in combination with the 82441FX/PPro MTRRs */
    which can cause problems in combination with the 82441FX/PPro MTRRs */
@@ -328,6 +329,7 @@ DECLARE_PCI_FIXUP_HEADER(PCI_VENDOR_ID_INTEL,    PCI_DEVICE_ID_INTEL_82801CA_12,
 DECLARE_PCI_FIXUP_HEADER(PCI_VENDOR_ID_INTEL,    PCI_DEVICE_ID_INTEL_82801DB_0,		quirk_ich4_lpc_acpi );
 DECLARE_PCI_FIXUP_HEADER(PCI_VENDOR_ID_INTEL,    PCI_DEVICE_ID_INTEL_82801DB_0,		quirk_ich4_lpc_acpi );
 DECLARE_PCI_FIXUP_HEADER(PCI_VENDOR_ID_INTEL,    PCI_DEVICE_ID_INTEL_82801DB_12,	quirk_ich4_lpc_acpi );
 DECLARE_PCI_FIXUP_HEADER(PCI_VENDOR_ID_INTEL,    PCI_DEVICE_ID_INTEL_82801DB_12,	quirk_ich4_lpc_acpi );
 DECLARE_PCI_FIXUP_HEADER(PCI_VENDOR_ID_INTEL,    PCI_DEVICE_ID_INTEL_82801EB_0,		quirk_ich4_lpc_acpi );
 DECLARE_PCI_FIXUP_HEADER(PCI_VENDOR_ID_INTEL,    PCI_DEVICE_ID_INTEL_82801EB_0,		quirk_ich4_lpc_acpi );
+DECLARE_PCI_FIXUP_HEADER(PCI_VENDOR_ID_INTEL,    PCI_DEVICE_ID_INTEL_ESB_1,		quirk_ich4_lpc_acpi );
 
 
 /*
 /*
  * VIA ACPI: One IO region pointed to by longword at
  * VIA ACPI: One IO region pointed to by longword at

+ 6 - 6
drivers/scsi/Kconfig

@@ -260,7 +260,7 @@ config SCSI_3W_9XXX
 
 
 config SCSI_7000FASST
 config SCSI_7000FASST
 	tristate "7000FASST SCSI support"
 	tristate "7000FASST SCSI support"
-	depends on ISA && SCSI
+	depends on ISA && SCSI && ISA_DMA_API
 	help
 	help
 	  This driver supports the Western Digital 7000 SCSI host adapter
 	  This driver supports the Western Digital 7000 SCSI host adapter
 	  family.  Some information is in the source:
 	  family.  Some information is in the source:
@@ -295,7 +295,7 @@ config SCSI_AHA152X
 
 
 config SCSI_AHA1542
 config SCSI_AHA1542
 	tristate "Adaptec AHA1542 support"
 	tristate "Adaptec AHA1542 support"
-	depends on ISA && SCSI
+	depends on ISA && SCSI && ISA_DMA_API
 	---help---
 	---help---
 	  This is support for a SCSI host adapter.  It is explained in section
 	  This is support for a SCSI host adapter.  It is explained in section
 	  3.4 of the SCSI-HOWTO, available from
 	  3.4 of the SCSI-HOWTO, available from
@@ -515,7 +515,7 @@ config SCSI_SATA_VITESSE
 
 
 config SCSI_BUSLOGIC
 config SCSI_BUSLOGIC
 	tristate "BusLogic SCSI support"
 	tristate "BusLogic SCSI support"
-	depends on (PCI || ISA || MCA) && SCSI && (BROKEN || !SPARC64)
+	depends on (PCI || ISA || MCA) && SCSI && ISA_DMA_API
 	---help---
 	---help---
 	  This is support for BusLogic MultiMaster and FlashPoint SCSI Host
 	  This is support for BusLogic MultiMaster and FlashPoint SCSI Host
 	  Adapters. Consult the SCSI-HOWTO, available from
 	  Adapters. Consult the SCSI-HOWTO, available from
@@ -571,7 +571,7 @@ config SCSI_DTC3280
 
 
 config SCSI_EATA
 config SCSI_EATA
 	tristate "EATA ISA/EISA/PCI (DPT and generic EATA/DMA-compliant boards) support"
 	tristate "EATA ISA/EISA/PCI (DPT and generic EATA/DMA-compliant boards) support"
-	depends on (ISA || EISA || PCI) && SCSI && (BROKEN || !SPARC64)
+	depends on (ISA || EISA || PCI) && SCSI && ISA_DMA_API
 	---help---
 	---help---
 	  This driver supports all EATA/DMA-compliant SCSI host adapters.  DPT
 	  This driver supports all EATA/DMA-compliant SCSI host adapters.  DPT
 	  ISA and all EISA I/O addresses are probed looking for the "EATA"
 	  ISA and all EISA I/O addresses are probed looking for the "EATA"
@@ -665,7 +665,7 @@ config SCSI_FD_MCS
 
 
 config SCSI_GDTH
 config SCSI_GDTH
 	tristate "Intel/ICP (former GDT SCSI Disk Array) RAID Controller support"
 	tristate "Intel/ICP (former GDT SCSI Disk Array) RAID Controller support"
-	depends on (ISA || EISA || PCI) && SCSI && (BROKEN || !SPARC64)
+	depends on (ISA || EISA || PCI) && SCSI && ISA_DMA_API
 	---help---
 	---help---
 	  Formerly called GDT SCSI Disk Array Controller Support.
 	  Formerly called GDT SCSI Disk Array Controller Support.
 
 
@@ -1416,7 +1416,7 @@ config SCSI_T128
 
 
 config SCSI_U14_34F
 config SCSI_U14_34F
 	tristate "UltraStor 14F/34F support"
 	tristate "UltraStor 14F/34F support"
-	depends on ISA && SCSI
+	depends on ISA && SCSI && ISA_DMA_API
 	---help---
 	---help---
 	  This is support for the UltraStor 14F and 34F SCSI-2 host adapters.
 	  This is support for the UltraStor 14F and 34F SCSI-2 host adapters.
 	  The source at <file:drivers/scsi/u14-34f.c> contains some
 	  The source at <file:drivers/scsi/u14-34f.c> contains some

+ 2 - 2
drivers/usb/core/message.c

@@ -431,7 +431,7 @@ nomem:
  * (2) error, where io->status is a negative errno value.  The number
  * (2) error, where io->status is a negative errno value.  The number
  *     of io->bytes transferred before the error is usually less
  *     of io->bytes transferred before the error is usually less
  *     than requested, and can be nonzero.
  *     than requested, and can be nonzero.
- * (3) cancelation, a type of error with status -ECONNRESET that
+ * (3) cancellation, a type of error with status -ECONNRESET that
  *     is initiated by usb_sg_cancel().
  *     is initiated by usb_sg_cancel().
  *
  *
  * When this function returns, all memory allocated through usb_sg_init() or
  * When this function returns, all memory allocated through usb_sg_init() or
@@ -1282,7 +1282,7 @@ static void release_interface(struct device *dev)
  * bus rwsem; usb device driver probe() methods cannot use this routine.
  * bus rwsem; usb device driver probe() methods cannot use this routine.
  *
  *
  * Returns zero on success, or else the status code returned by the
  * Returns zero on success, or else the status code returned by the
- * underlying call that failed.  On succesful completion, each interface
+ * underlying call that failed.  On successful completion, each interface
  * in the original device configuration has been destroyed, and each one
  * in the original device configuration has been destroyed, and each one
  * in the new configuration has been probed by all relevant usb device
  * in the new configuration has been probed by all relevant usb device
  * drivers currently known to the kernel.
  * drivers currently known to the kernel.

+ 3 - 3
drivers/usb/core/urb.c

@@ -121,7 +121,7 @@ struct urb * usb_get_urb(struct urb *urb)
  * describing that request to the USB subsystem.  Request completion will
  * describing that request to the USB subsystem.  Request completion will
  * be indicated later, asynchronously, by calling the completion handler.
  * be indicated later, asynchronously, by calling the completion handler.
  * The three types of completion are success, error, and unlink
  * The three types of completion are success, error, and unlink
- * (a software-induced fault, also called "request cancelation").  
+ * (a software-induced fault, also called "request cancellation").  
  *
  *
  * URBs may be submitted in interrupt context.
  * URBs may be submitted in interrupt context.
  *
  *
@@ -170,7 +170,7 @@ struct urb * usb_get_urb(struct urb *urb)
  * As of Linux 2.6, all USB endpoint transfer queues support depths greater
  * As of Linux 2.6, all USB endpoint transfer queues support depths greater
  * than one.  This was previously a HCD-specific behavior, except for ISO
  * than one.  This was previously a HCD-specific behavior, except for ISO
  * transfers.  Non-isochronous endpoint queues are inactive during cleanup
  * transfers.  Non-isochronous endpoint queues are inactive during cleanup
- * after faults (transfer errors or cancelation).
+ * after faults (transfer errors or cancellation).
  *
  *
  * Reserved Bandwidth Transfers:
  * Reserved Bandwidth Transfers:
  *
  *
@@ -395,7 +395,7 @@ int usb_submit_urb(struct urb *urb, int mem_flags)
  *
  *
  * This routine cancels an in-progress request.  URBs complete only
  * This routine cancels an in-progress request.  URBs complete only
  * once per submission, and may be canceled only once per submission.
  * once per submission, and may be canceled only once per submission.
- * Successful cancelation means the requests's completion handler will
+ * Successful cancellation means the requests's completion handler will
  * be called with a status code indicating that the request has been
  * be called with a status code indicating that the request has been
  * canceled (rather than any other code) and will quickly be removed
  * canceled (rather than any other code) and will quickly be removed
  * from host controller data structures.
  * from host controller data structures.

+ 1 - 1
drivers/usb/gadget/ether.c

@@ -569,7 +569,7 @@ static const struct usb_cdc_ether_desc ether_desc = {
 
 
 /* include the status endpoint if we can, even where it's optional.
 /* include the status endpoint if we can, even where it's optional.
  * use wMaxPacketSize big enough to fit CDC_NOTIFY_SPEED_CHANGE in one
  * use wMaxPacketSize big enough to fit CDC_NOTIFY_SPEED_CHANGE in one
- * packet, to simplify cancelation; and a big transfer interval, to
+ * packet, to simplify cancellation; and a big transfer interval, to
  * waste less bandwidth.
  * waste less bandwidth.
  *
  *
  * some drivers (like Linux 2.4 cdc-ether!) "need" it to exist even
  * some drivers (like Linux 2.4 cdc-ether!) "need" it to exist even

+ 1 - 1
drivers/usb/gadget/inode.c

@@ -275,7 +275,7 @@ static const char *CHIP;
  *
  *
  * After opening, configure non-control endpoints.  Then use normal
  * After opening, configure non-control endpoints.  Then use normal
  * stream read() and write() requests; and maybe ioctl() to get more
  * stream read() and write() requests; and maybe ioctl() to get more
- * precise FIFO status when recovering from cancelation.
+ * precise FIFO status when recovering from cancellation.
  */
  */
 
 
 static void epio_complete (struct usb_ep *ep, struct usb_request *req)
 static void epio_complete (struct usb_ep *ep, struct usb_request *req)

+ 1 - 1
drivers/usb/gadget/lh7a40x_udc.c

@@ -705,7 +705,7 @@ void nuke(struct lh7a40x_ep *ep, int status)
 		done(ep, req, status);
 		done(ep, req, status);
 	}
 	}
 
 
-	/* Disable IRQ if EP is enabled (has decriptor) */
+	/* Disable IRQ if EP is enabled (has descriptor) */
 	if (ep->desc)
 	if (ep->desc)
 		pio_irq_disable(ep_index(ep));
 		pio_irq_disable(ep_index(ep));
 }
 }

+ 1 - 1
drivers/usb/gadget/serial.c

@@ -240,7 +240,7 @@ struct gs_dev {
 	struct usb_ep		*dev_notify_ep;	/* address of notify endpoint */
 	struct usb_ep		*dev_notify_ep;	/* address of notify endpoint */
 	struct usb_ep		*dev_in_ep;	/* address of in endpoint */
 	struct usb_ep		*dev_in_ep;	/* address of in endpoint */
 	struct usb_ep		*dev_out_ep;	/* address of out endpoint */
 	struct usb_ep		*dev_out_ep;	/* address of out endpoint */
-	struct usb_endpoint_descriptor		/* desciptor of notify ep */
+	struct usb_endpoint_descriptor		/* descriptor of notify ep */
 				*dev_notify_ep_desc;
 				*dev_notify_ep_desc;
 	struct usb_endpoint_descriptor		/* descriptor of in endpoint */
 	struct usb_endpoint_descriptor		/* descriptor of in endpoint */
 				*dev_in_ep_desc;
 				*dev_in_ep_desc;

+ 44 - 21
drivers/usb/host/ehci-hcd.c

@@ -346,6 +346,22 @@ ehci_reboot (struct notifier_block *self, unsigned long code, void *null)
 	return 0;
 	return 0;
 }
 }
 
 
+static void ehci_port_power (struct ehci_hcd *ehci, int is_on)
+{
+	unsigned port;
+
+	if (!HCS_PPC (ehci->hcs_params))
+		return;
+
+	ehci_dbg (ehci, "...power%s ports...\n", is_on ? "up" : "down");
+	for (port = HCS_N_PORTS (ehci->hcs_params); port > 0; )
+		(void) ehci_hub_control(ehci_to_hcd(ehci),
+				is_on ? SetPortFeature : ClearPortFeature,
+				USB_PORT_FEAT_POWER,
+				port--, NULL, 0);
+	msleep(20);
+}
+
 
 
 /* called by khubd or root hub init threads */
 /* called by khubd or root hub init threads */
 
 
@@ -362,8 +378,10 @@ static int ehci_hc_reset (struct usb_hcd *hcd)
 	dbg_hcs_params (ehci, "reset");
 	dbg_hcs_params (ehci, "reset");
 	dbg_hcc_params (ehci, "reset");
 	dbg_hcc_params (ehci, "reset");
 
 
+	/* cache this readonly data; minimize chip reads */
+	ehci->hcs_params = readl (&ehci->caps->hcs_params);
+
 #ifdef	CONFIG_PCI
 #ifdef	CONFIG_PCI
-	/* EHCI 0.96 and later may have "extended capabilities" */
 	if (hcd->self.controller->bus == &pci_bus_type) {
 	if (hcd->self.controller->bus == &pci_bus_type) {
 		struct pci_dev	*pdev = to_pci_dev(hcd->self.controller);
 		struct pci_dev	*pdev = to_pci_dev(hcd->self.controller);
 
 
@@ -383,9 +401,30 @@ static int ehci_hc_reset (struct usb_hcd *hcd)
 			break;
 			break;
 		}
 		}
 
 
+		/* optional debug port, normally in the first BAR */
+		temp = pci_find_capability (pdev, 0x0a);
+		if (temp) {
+			pci_read_config_dword(pdev, temp, &temp);
+			temp >>= 16;
+			if ((temp & (3 << 13)) == (1 << 13)) {
+				temp &= 0x1fff;
+				ehci->debug = hcd->regs + temp;
+				temp = readl (&ehci->debug->control);
+				ehci_info (ehci, "debug port %d%s\n",
+					HCS_DEBUG_PORT(ehci->hcs_params),
+					(temp & DBGP_ENABLED)
+						? " IN USE"
+						: "");
+				if (!(temp & DBGP_ENABLED))
+					ehci->debug = NULL;
+			}
+		}
+
 		temp = HCC_EXT_CAPS (readl (&ehci->caps->hcc_params));
 		temp = HCC_EXT_CAPS (readl (&ehci->caps->hcc_params));
 	} else
 	} else
 		temp = 0;
 		temp = 0;
+
+	/* EHCI 0.96 and later may have "extended capabilities" */
 	while (temp && count--) {
 	while (temp && count--) {
 		u32		cap;
 		u32		cap;
 
 
@@ -414,8 +453,7 @@ static int ehci_hc_reset (struct usb_hcd *hcd)
 		ehci_reset (ehci);
 		ehci_reset (ehci);
 #endif
 #endif
 
 
-	/* cache this readonly data; minimize PCI reads */
-	ehci->hcs_params = readl (&ehci->caps->hcs_params);
+	ehci_port_power (ehci, 0);
 
 
 	/* at least the Genesys GL880S needs fixup here */
 	/* at least the Genesys GL880S needs fixup here */
 	temp = HCS_N_CC(ehci->hcs_params) * HCS_N_PCC(ehci->hcs_params);
 	temp = HCS_N_CC(ehci->hcs_params) * HCS_N_PCC(ehci->hcs_params);
@@ -657,16 +695,11 @@ done2:
 static void ehci_stop (struct usb_hcd *hcd)
 static void ehci_stop (struct usb_hcd *hcd)
 {
 {
 	struct ehci_hcd		*ehci = hcd_to_ehci (hcd);
 	struct ehci_hcd		*ehci = hcd_to_ehci (hcd);
-	u8			rh_ports, port;
 
 
 	ehci_dbg (ehci, "stop\n");
 	ehci_dbg (ehci, "stop\n");
 
 
 	/* Turn off port power on all root hub ports. */
 	/* Turn off port power on all root hub ports. */
-	rh_ports = HCS_N_PORTS (ehci->hcs_params);
-	for (port = 1; port <= rh_ports; port++)
-		(void) ehci_hub_control(hcd,
-			ClearPortFeature, USB_PORT_FEAT_POWER,
-			port, NULL, 0);
+	ehci_port_power (ehci, 0);
 
 
 	/* no more interrupts ... */
 	/* no more interrupts ... */
 	del_timer_sync (&ehci->watchdog);
 	del_timer_sync (&ehci->watchdog);
@@ -748,7 +781,6 @@ static int ehci_resume (struct usb_hcd *hcd)
 	unsigned		port;
 	unsigned		port;
 	struct usb_device	*root = hcd->self.root_hub;
 	struct usb_device	*root = hcd->self.root_hub;
 	int			retval = -EINVAL;
 	int			retval = -EINVAL;
-	int			powerup = 0;
 
 
 	// maybe restore (PCI) FLADJ
 	// maybe restore (PCI) FLADJ
 
 
@@ -766,8 +798,6 @@ static int ehci_resume (struct usb_hcd *hcd)
 			up (&hcd->self.root_hub->serialize);
 			up (&hcd->self.root_hub->serialize);
 			break;
 			break;
 		}
 		}
-		if ((status & PORT_POWER) == 0)
-			powerup = 1;
 		if (!root->children [port])
 		if (!root->children [port])
 			continue;
 			continue;
 		dbg_port (ehci, __FUNCTION__, port + 1, status);
 		dbg_port (ehci, __FUNCTION__, port + 1, status);
@@ -794,16 +824,9 @@ static int ehci_resume (struct usb_hcd *hcd)
 		retval = ehci_start (hcd);
 		retval = ehci_start (hcd);
 
 
 		/* here we "know" root ports should always stay powered;
 		/* here we "know" root ports should always stay powered;
-		 * but some controllers may lost all power.
+		 * but some controllers may lose all power.
 		 */
 		 */
-		if (powerup) {
-			ehci_dbg (ehci, "...powerup ports...\n");
-			for (port = HCS_N_PORTS (ehci->hcs_params); port > 0; )
-				(void) ehci_hub_control(hcd,
-					SetPortFeature, USB_PORT_FEAT_POWER,
-						port--, NULL, 0);
-			msleep(20);
-		}
+		ehci_port_power (ehci, 1);
 	}
 	}
 
 
 	return retval;
 	return retval;

+ 2 - 0
drivers/usb/host/ehci-hub.c

@@ -281,6 +281,8 @@ ehci_hub_descriptor (
 	temp = 0x0008;			/* per-port overcurrent reporting */
 	temp = 0x0008;			/* per-port overcurrent reporting */
 	if (HCS_PPC (ehci->hcs_params))
 	if (HCS_PPC (ehci->hcs_params))
 		temp |= 0x0001;		/* per-port power control */
 		temp |= 0x0001;		/* per-port power control */
+	else
+		temp |= 0x0002;		/* no power switching */
 #if 0
 #if 0
 // re-enable when we support USB_PORT_FEAT_INDICATOR below.
 // re-enable when we support USB_PORT_FEAT_INDICATOR below.
 	if (HCS_INDICATOR (ehci->hcs_params))
 	if (HCS_INDICATOR (ehci->hcs_params))

+ 10 - 9
drivers/usb/host/ehci.h

@@ -47,6 +47,12 @@ struct ehci_stats {
 #define	EHCI_MAX_ROOT_PORTS	15		/* see HCS_N_PORTS */
 #define	EHCI_MAX_ROOT_PORTS	15		/* see HCS_N_PORTS */
 
 
 struct ehci_hcd {			/* one per controller */
 struct ehci_hcd {			/* one per controller */
+	/* glue to PCI and HCD framework */
+	struct ehci_caps __iomem *caps;
+	struct ehci_regs __iomem *regs;
+	struct ehci_dbg_port __iomem *debug;
+
+	__u32			hcs_params;	/* cached register copy */
 	spinlock_t		lock;
 	spinlock_t		lock;
 
 
 	/* async schedule support */
 	/* async schedule support */
@@ -84,11 +90,6 @@ struct ehci_hcd {			/* one per controller */
 
 
 	unsigned		is_tdi_rh_tt:1;	/* TDI roothub with TT */
 	unsigned		is_tdi_rh_tt:1;	/* TDI roothub with TT */
 
 
-	/* glue to PCI and HCD framework */
-	struct ehci_caps __iomem *caps;
-	struct ehci_regs __iomem *regs;
-	__u32			hcs_params;	/* cached register copy */
-
 	/* irq statistics */
 	/* irq statistics */
 #ifdef EHCI_STATS
 #ifdef EHCI_STATS
 	struct ehci_stats	stats;
 	struct ehci_stats	stats;
@@ -165,7 +166,7 @@ struct ehci_caps {
 	/* these fields are specified as 8 and 16 bit registers,
 	/* these fields are specified as 8 and 16 bit registers,
 	 * but some hosts can't perform 8 or 16 bit PCI accesses.
 	 * but some hosts can't perform 8 or 16 bit PCI accesses.
 	 */
 	 */
-	u32	hc_capbase;
+	u32		hc_capbase;
 #define HC_LENGTH(p)		(((p)>>00)&0x00ff)	/* bits 7:0 */
 #define HC_LENGTH(p)		(((p)>>00)&0x00ff)	/* bits 7:0 */
 #define HC_VERSION(p)		(((p)>>16)&0xffff)	/* bits 31:16 */
 #define HC_VERSION(p)		(((p)>>16)&0xffff)	/* bits 31:16 */
 	u32		hcs_params;     /* HCSPARAMS - offset 0x4 */
 	u32		hcs_params;     /* HCSPARAMS - offset 0x4 */
@@ -273,7 +274,7 @@ struct ehci_dbg_port {
 #define DBGP_ENABLED	(1<<28)
 #define DBGP_ENABLED	(1<<28)
 #define DBGP_DONE	(1<<16)
 #define DBGP_DONE	(1<<16)
 #define DBGP_INUSE	(1<<10)
 #define DBGP_INUSE	(1<<10)
-#define DBGP_ERRCODE(x)	(((x)>>7)&0x0f)
+#define DBGP_ERRCODE(x)	(((x)>>7)&0x07)
 #	define DBGP_ERR_BAD	1
 #	define DBGP_ERR_BAD	1
 #	define DBGP_ERR_SIGNAL	2
 #	define DBGP_ERR_SIGNAL	2
 #define DBGP_ERROR	(1<<6)
 #define DBGP_ERROR	(1<<6)
@@ -282,11 +283,11 @@ struct ehci_dbg_port {
 #define DBGP_LEN(x)	(((x)>>0)&0x0f)
 #define DBGP_LEN(x)	(((x)>>0)&0x0f)
 	u32	pids;
 	u32	pids;
 #define DBGP_PID_GET(x)		(((x)>>16)&0xff)
 #define DBGP_PID_GET(x)		(((x)>>16)&0xff)
-#define DBGP_PID_SET(data,tok)	(((data)<<8)|(tok));
+#define DBGP_PID_SET(data,tok)	(((data)<<8)|(tok))
 	u32	data03;
 	u32	data03;
 	u32	data47;
 	u32	data47;
 	u32	address;
 	u32	address;
-#define DBGP_EPADDR(dev,ep)	(((dev)<<8)|(ep));
+#define DBGP_EPADDR(dev,ep)	(((dev)<<8)|(ep))
 } __attribute__ ((packed));
 } __attribute__ ((packed));
 
 
 /*-------------------------------------------------------------------------*/
 /*-------------------------------------------------------------------------*/

+ 1 - 1
drivers/usb/host/hc_crisv10.c

@@ -4329,7 +4329,7 @@ static int __init etrax_usb_hc_init(void)
 	bus->bus_name="ETRAX 100LX";
 	bus->bus_name="ETRAX 100LX";
 	bus->hcpriv = hc;
 	bus->hcpriv = hc;
 
 
-	/* Initalize RH to the default address.
+	/* Initialize RH to the default address.
 	   And make sure that we have no status change indication */
 	   And make sure that we have no status change indication */
 	hc->rh.numports = 2;  /* The RH has two ports */
 	hc->rh.numports = 2;  /* The RH has two ports */
 	hc->rh.devnum = 1;
 	hc->rh.devnum = 1;

+ 2 - 2
drivers/usb/host/sl811-hcd.c

@@ -134,7 +134,7 @@ static void port_power(struct sl811 *sl811, int is_on)
 
 
 /* This is a PIO-only HCD.  Queueing appends URBs to the endpoint's queue,
 /* This is a PIO-only HCD.  Queueing appends URBs to the endpoint's queue,
  * and may start I/O.  Endpoint queues are scanned during completion irq
  * and may start I/O.  Endpoint queues are scanned during completion irq
- * handlers (one per packet: ACK, NAK, faults, etc) and urb cancelation.
+ * handlers (one per packet: ACK, NAK, faults, etc) and urb cancellation.
  *
  *
  * Using an external DMA engine to copy a packet at a time could work,
  * Using an external DMA engine to copy a packet at a time could work,
  * though setup/teardown costs may be too big to make it worthwhile.
  * though setup/teardown costs may be too big to make it worthwhile.
@@ -738,7 +738,7 @@ retry:
 		}
 		}
 #endif
 #endif
 
 
-		/* port status seems wierd until after reset, so
+		/* port status seems weird until after reset, so
 		 * force the reset and make khubd clean up later.
 		 * force the reset and make khubd clean up later.
 		 */
 		 */
 		sl811->port1 |= (1 << USB_PORT_FEAT_C_CONNECTION)
 		sl811->port1 |= (1 << USB_PORT_FEAT_C_CONNECTION)

+ 1 - 1
drivers/usb/image/mdc800.c

@@ -23,7 +23,7 @@
  *
  *
  *
  *
  * The driver brings the USB functions of the MDC800 to Linux.
  * The driver brings the USB functions of the MDC800 to Linux.
- * To use the Camera you must support the USB Protocoll of the camera
+ * To use the Camera you must support the USB Protocol of the camera
  * to the Kernel Node.
  * to the Kernel Node.
  * The Driver uses a misc device Node. Create it with :
  * The Driver uses a misc device Node. Create it with :
  * mknod /dev/mustek c 180 32
  * mknod /dev/mustek c 180 32

+ 1 - 1
drivers/usb/input/aiptek.c

@@ -386,7 +386,7 @@ static int aiptek_convert_from_2s_complement(unsigned char c)
  * convention above.) I therefore have taken over REL_MISC and ABS_MISC
  * convention above.) I therefore have taken over REL_MISC and ABS_MISC
  * (for relative and absolute reports, respectively) for communicating
  * (for relative and absolute reports, respectively) for communicating
  * Proximity. Why two events? I thought it interesting to know if the
  * Proximity. Why two events? I thought it interesting to know if the
- * Proximity event occured while the tablet was in absolute or relative
+ * Proximity event occurred while the tablet was in absolute or relative
  * mode.
  * mode.
  *
  *
  * Other tablets use the notion of a certain minimum stylus pressure
  * Other tablets use the notion of a certain minimum stylus pressure

+ 1 - 1
drivers/usb/input/mtouchusb.c

@@ -32,7 +32,7 @@
  *    Changed reset from standard USB dev reset to vendor reset
  *    Changed reset from standard USB dev reset to vendor reset
  *    Changed data sent to host from compensated to raw coordinates
  *    Changed data sent to host from compensated to raw coordinates
  *    Eliminated vendor/product module params
  *    Eliminated vendor/product module params
- *    Performed multiple successfull tests with an EXII-5010UC
+ *    Performed multiple successful tests with an EXII-5010UC
  *
  *
  *  1.5 02/27/2005 ddstreet@ieee.org
  *  1.5 02/27/2005 ddstreet@ieee.org
  *    Added module parameter to select raw or hw-calibrated coordinate reporting
  *    Added module parameter to select raw or hw-calibrated coordinate reporting

+ 1 - 1
drivers/usb/media/ov511.c

@@ -5041,7 +5041,7 @@ ov6xx0_configure(struct usb_ov511 *ov)
 		{ OV511_I2C_BUS, 0x2a, 0x04 }, /* Disable framerate adjust */
 		{ OV511_I2C_BUS, 0x2a, 0x04 }, /* Disable framerate adjust */
 //		{ OV511_I2C_BUS, 0x2b, 0xac }, /* Framerate; Set 2a[7] first */
 //		{ OV511_I2C_BUS, 0x2b, 0xac }, /* Framerate; Set 2a[7] first */
 		{ OV511_I2C_BUS, 0x2d, 0x99 },
 		{ OV511_I2C_BUS, 0x2d, 0x99 },
-		{ OV511_I2C_BUS, 0x33, 0xa0 }, /* Color Procesing Parameter */
+		{ OV511_I2C_BUS, 0x33, 0xa0 }, /* Color Processing Parameter */
 		{ OV511_I2C_BUS, 0x34, 0xd2 }, /* Max A/D range */
 		{ OV511_I2C_BUS, 0x34, 0xd2 }, /* Max A/D range */
 		{ OV511_I2C_BUS, 0x38, 0x8b },
 		{ OV511_I2C_BUS, 0x38, 0x8b },
 		{ OV511_I2C_BUS, 0x39, 0x40 },
 		{ OV511_I2C_BUS, 0x39, 0x40 },

+ 1 - 1
drivers/usb/media/pwc/pwc-ctrl.c

@@ -1100,7 +1100,7 @@ static inline int pwc_mpt_set_angle(struct pwc_device *pdev, int pan, int tilt)
 	unsigned char buf[4];
 	unsigned char buf[4];
 	
 	
 	/* set new relative angle; angles are expressed in degrees * 100,
 	/* set new relative angle; angles are expressed in degrees * 100,
-	   but cam as .5 degree resolution, hence devide by 200. Also
+	   but cam as .5 degree resolution, hence divide by 200. Also
 	   the angle must be multiplied by 64 before it's send to
 	   the angle must be multiplied by 64 before it's send to
 	   the cam (??)
 	   the cam (??)
 	 */
 	 */

+ 3 - 3
drivers/usb/media/pwc/pwc-if.c

@@ -272,7 +272,7 @@ static int pwc_allocate_buffers(struct pwc_device *pdev)
 		return -ENXIO;
 		return -ENXIO;
 	}
 	}
 #endif	
 #endif	
-	/* Allocate Isochronuous pipe buffers */
+	/* Allocate Isochronous pipe buffers */
 	for (i = 0; i < MAX_ISO_BUFS; i++) {
 	for (i = 0; i < MAX_ISO_BUFS; i++) {
 		if (pdev->sbuf[i].data == NULL) {
 		if (pdev->sbuf[i].data == NULL) {
 			kbuf = kmalloc(ISO_BUFFER_SIZE, GFP_KERNEL);
 			kbuf = kmalloc(ISO_BUFFER_SIZE, GFP_KERNEL);
@@ -850,7 +850,7 @@ static int pwc_isoc_init(struct pwc_device *pdev)
 	
 	
 	if (pdev->vmax_packet_size < 0 || pdev->vmax_packet_size > ISO_MAX_FRAME_SIZE) {
 	if (pdev->vmax_packet_size < 0 || pdev->vmax_packet_size > ISO_MAX_FRAME_SIZE) {
 		Err("Failed to find packet size for video endpoint in current alternate setting.\n");
 		Err("Failed to find packet size for video endpoint in current alternate setting.\n");
-		return -ENFILE; /* Odd error, that should be noticable */
+		return -ENFILE; /* Odd error, that should be noticeable */
 	}
 	}
 
 
 	/* Set alternate interface */
 	/* Set alternate interface */
@@ -2128,7 +2128,7 @@ static int __init usb_pwc_init(void)
 	if (leds[1] >= 0)
 	if (leds[1] >= 0)
 		led_off = leds[1];
 		led_off = leds[1];
 
 
-	/* Big device node whoopla. Basicly, it allows you to assign a
+	/* Big device node whoopla. Basically, it allows you to assign a
 	   device node (/dev/videoX) to a camera, based on its type
 	   device node (/dev/videoX) to a camera, based on its type
 	   & serial number. The format is [type[.serialnumber]:]node.
 	   & serial number. The format is [type[.serialnumber]:]node.
 
 

+ 1 - 1
drivers/usb/media/pwc/pwc-ioctl.h

@@ -75,7 +75,7 @@
 #define PWC_FPS_SNAPSHOT	0x00400000
 #define PWC_FPS_SNAPSHOT	0x00400000
 
 
 
 
-/* structure for transfering x & y coordinates */
+/* structure for transferring x & y coordinates */
 struct pwc_coord
 struct pwc_coord
 {
 {
 	int x, y;		/* guess what */
 	int x, y;		/* guess what */

+ 1 - 1
drivers/usb/misc/legousbtower.c

@@ -859,7 +859,7 @@ static int tower_probe (struct usb_interface *interface, const struct usb_device
 		info ("udev is NULL.");
 		info ("udev is NULL.");
 	}
 	}
 
 
-	/* allocate memory for our device state and intialize it */
+	/* allocate memory for our device state and initialize it */
 
 
 	dev = kmalloc (sizeof(struct lego_usb_tower), GFP_KERNEL);
 	dev = kmalloc (sizeof(struct lego_usb_tower), GFP_KERNEL);
 
 

+ 3 - 0
drivers/usb/net/usbnet.c

@@ -4070,6 +4070,9 @@ static const struct usb_device_id	products [] = {
 }, {
 }, {
 	USB_DEVICE (0x8086, 0x07d3),	// "blob" bootloader
 	USB_DEVICE (0x8086, 0x07d3),	// "blob" bootloader
 	.driver_info =	(unsigned long) &blob_info,
 	.driver_info =	(unsigned long) &blob_info,
+}, {
+	USB_DEVICE (0x22b8, 0x600c),	// USBNET Motorola E680
+	.driver_info =	(unsigned long) &linuxdev_info,
 }, {
 }, {
 	// Linux Ethernet/RNDIS gadget on pxa210/25x/26x
 	// Linux Ethernet/RNDIS gadget on pxa210/25x/26x
 	// e.g. Gumstix, current OpenZaurus, ...
 	// e.g. Gumstix, current OpenZaurus, ...

+ 4 - 4
drivers/usb/net/zd1201.c

@@ -183,7 +183,7 @@ static void zd1201_usbtx(struct urb *urb, struct pt_regs *regs)
 	return;
 	return;
 }
 }
 
 
-/* Incomming data */
+/* Incoming data */
 static void zd1201_usbrx(struct urb *urb, struct pt_regs *regs)
 static void zd1201_usbrx(struct urb *urb, struct pt_regs *regs)
 {
 {
 	struct zd1201 *zd = urb->context;
 	struct zd1201 *zd = urb->context;
@@ -772,7 +772,7 @@ static int zd1201_net_stop(struct net_device *dev)
 /*
 /*
 	RFC 1042 encapsulates Ethernet frames in 802.11 frames
 	RFC 1042 encapsulates Ethernet frames in 802.11 frames
 	by prefixing them with 0xaa, 0xaa, 0x03) followed by a SNAP OID of 0
 	by prefixing them with 0xaa, 0xaa, 0x03) followed by a SNAP OID of 0
-	(0x00, 0x00, 0x00). Zd requires an additionnal padding, copy
+	(0x00, 0x00, 0x00). Zd requires an additional padding, copy
 	of ethernet addresses, length of the standard RFC 1042 packet
 	of ethernet addresses, length of the standard RFC 1042 packet
 	and a command byte (which is nul for tx).
 	and a command byte (which is nul for tx).
 	
 	
@@ -1098,7 +1098,7 @@ static int zd1201_get_range(struct net_device *dev,
 
 
 /*	Little bit of magic here: we only get the quality if we poll
 /*	Little bit of magic here: we only get the quality if we poll
  *	for it, and we never get an actual request to trigger such
  *	for it, and we never get an actual request to trigger such
- *	a poll. Therefore we 'asume' that the user will soon ask for
+ *	a poll. Therefore we 'assume' that the user will soon ask for
  *	the stats after asking the bssid.
  *	the stats after asking the bssid.
  */
  */
 static int zd1201_get_wap(struct net_device *dev,
 static int zd1201_get_wap(struct net_device *dev,
@@ -1108,7 +1108,7 @@ static int zd1201_get_wap(struct net_device *dev,
 	unsigned char buffer[6];
 	unsigned char buffer[6];
 
 
 	if (!zd1201_getconfig(zd, ZD1201_RID_COMMSQUALITY, buffer, 6)) {
 	if (!zd1201_getconfig(zd, ZD1201_RID_COMMSQUALITY, buffer, 6)) {
-		/* Unfortunatly the quality and noise reported is useless.
+		/* Unfortunately the quality and noise reported is useless.
 		   they seem to be accumulators that increase until you
 		   they seem to be accumulators that increase until you
 		   read them, unless we poll on a fixed interval we can't
 		   read them, unless we poll on a fixed interval we can't
 		   use them
 		   use them

+ 9 - 0
drivers/usb/serial/Kconfig

@@ -53,6 +53,15 @@ config USB_SERIAL_GENERIC
 	  support" be compiled as a module for this driver to be used
 	  support" be compiled as a module for this driver to be used
 	  properly.
 	  properly.
 
 
+config USB_SERIAL_AIRPRIME
+	tristate "USB AirPrime CDMA Wireless Driver"
+	depends on USB_SERIAL
+	help
+	  Say Y here if you want to use a AirPrime CDMA Wireless PC card.
+
+	  To compile this driver as a module, choose M here: the
+	  module will be called airprime.
+
 config USB_SERIAL_BELKIN
 config USB_SERIAL_BELKIN
 	tristate "USB Belkin and Peracom Single Port Serial Driver"
 	tristate "USB Belkin and Peracom Single Port Serial Driver"
 	depends on USB_SERIAL
 	depends on USB_SERIAL

+ 1 - 0
drivers/usb/serial/Makefile

@@ -11,6 +11,7 @@ usbserial-obj-$(CONFIG_USB_EZUSB)		+= ezusb.o
 
 
 usbserial-objs	:= usb-serial.o generic.o bus.o $(usbserial-obj-y)
 usbserial-objs	:= usb-serial.o generic.o bus.o $(usbserial-obj-y)
 
 
+obj-$(CONFIG_USB_SERIAL_AIRPRIME)		+= airprime.o
 obj-$(CONFIG_USB_SERIAL_BELKIN)			+= belkin_sa.o
 obj-$(CONFIG_USB_SERIAL_BELKIN)			+= belkin_sa.o
 obj-$(CONFIG_USB_SERIAL_CP2101)			+= cp2101.o
 obj-$(CONFIG_USB_SERIAL_CP2101)			+= cp2101.o
 obj-$(CONFIG_USB_SERIAL_CYBERJACK)		+= cyberjack.o
 obj-$(CONFIG_USB_SERIAL_CYBERJACK)		+= cyberjack.o

+ 63 - 0
drivers/usb/serial/airprime.c

@@ -0,0 +1,63 @@
+/*
+ * AirPrime CDMA Wireless Serial USB driver
+ *
+ * Copyright (C) 2005 Greg Kroah-Hartman <gregkh@suse.de>
+ *
+ *	This program is free software; you can redistribute it and/or
+ *	modify it under the terms of the GNU General Public License version
+ *	2 as published by the Free Software Foundation.
+ */
+
+#include <linux/kernel.h>
+#include <linux/init.h>
+#include <linux/tty.h>
+#include <linux/module.h>
+#include <linux/usb.h>
+#include "usb-serial.h"
+
+static struct usb_device_id id_table [] = {
+	{ USB_DEVICE(0xf3d, 0x0112) },
+	{ },
+};
+MODULE_DEVICE_TABLE(usb, id_table);
+
+static struct usb_driver airprime_driver = {
+	.owner =	THIS_MODULE,
+	.name =		"airprime",
+	.probe =	usb_serial_probe,
+	.disconnect =	usb_serial_disconnect,
+	.id_table =	id_table,
+};
+
+static struct usb_serial_device_type airprime_device = {
+	.owner =		THIS_MODULE,
+	.name =			"airprime",
+	.id_table =		id_table,
+	.num_interrupt_in =	NUM_DONT_CARE,
+	.num_bulk_in =		NUM_DONT_CARE,
+	.num_bulk_out =		NUM_DONT_CARE,
+	.num_ports =		1,
+};
+
+static int __init airprime_init(void)
+{
+	int retval;
+
+	retval = usb_serial_register(&airprime_device);
+	if (retval)
+		return retval;
+	retval = usb_register(&airprime_driver);
+	if (retval)
+		usb_serial_deregister(&airprime_device);
+	return retval;
+}
+
+static void __exit airprime_exit(void)
+{
+	usb_deregister(&airprime_driver);
+	usb_serial_deregister(&airprime_device);
+}
+
+module_init(airprime_init);
+module_exit(airprime_exit);
+MODULE_LICENSE("GPL");

+ 89 - 98
drivers/usb/serial/cypress_m8.c

@@ -16,6 +16,14 @@
  * See http://geocities.com/i0xox0i for information on this driver and the
  * See http://geocities.com/i0xox0i for information on this driver and the
  * earthmate usb device.
  * earthmate usb device.
  *
  *
+ *  Lonnie Mendez <dignome@gmail.com>
+ *  4-29-2005
+ *	Fixed problem where setting or retreiving the serial config would fail with
+ * 	EPIPE.  Removed CRTS toggling so the driver behaves more like other usbserial
+ * 	adapters.  Issued new interval of 1ms instead of the default 10ms.  As a
+ * 	result, transfer speed has been substantially increased.  From avg. 850bps to
+ * 	avg. 3300bps.  initial termios has also been modified.  Cleaned up code and
+ * 	formatting issues so it is more readable.  Replaced the C++ style comments.
  *
  *
  *  Lonnie Mendez <dignome@gmail.com>
  *  Lonnie Mendez <dignome@gmail.com>
  *  12-15-2004
  *  12-15-2004
@@ -32,12 +40,6 @@
  *  10-2003
  *  10-2003
  *	Driver first released.
  *	Driver first released.
  *
  *
- *
- * Long Term TODO:
- *	Improve transfer speeds - both read/write are somewhat slow
- *   at this point.
- *      Improve debugging.  Show modem line status with debug output and
- *   implement filtering for certain data as a module parameter.
  */
  */
 
 
 /* Thanks to Neil Whelchel for writing the first cypress m8 implementation for linux. */
 /* Thanks to Neil Whelchel for writing the first cypress m8 implementation for linux. */
@@ -72,11 +74,12 @@
 	static int debug;
 	static int debug;
 #endif
 #endif
 static int stats;
 static int stats;
+static int interval;
 
 
 /*
 /*
  * Version Information
  * Version Information
  */
  */
-#define DRIVER_VERSION "v1.08"
+#define DRIVER_VERSION "v1.09"
 #define DRIVER_AUTHOR "Lonnie Mendez <dignome@gmail.com>, Neil Whelchel <koyama@firstlight.net>"
 #define DRIVER_AUTHOR "Lonnie Mendez <dignome@gmail.com>, Neil Whelchel <koyama@firstlight.net>"
 #define DRIVER_DESC "Cypress USB to Serial Driver"
 #define DRIVER_DESC "Cypress USB to Serial Driver"
 
 
@@ -130,7 +133,6 @@ struct cypress_private {
 	char prev_status, diff_status;	   /* used for TIOCMIWAIT */
 	char prev_status, diff_status;	   /* used for TIOCMIWAIT */
 	/* we pass a pointer to this as the arguement sent to cypress_set_termios old_termios */
 	/* we pass a pointer to this as the arguement sent to cypress_set_termios old_termios */
 	struct termios tmp_termios; 	   /* stores the old termios settings */
 	struct termios tmp_termios; 	   /* stores the old termios settings */
-	char calledfromopen;		   /* used when issuing lines on open - fixes rts drop bug */
 };
 };
 
 
 /* write buffer structure */
 /* write buffer structure */
@@ -168,10 +170,8 @@ static void 		  cypress_buf_free(struct cypress_buf *cb);
 static void		  cypress_buf_clear(struct cypress_buf *cb);
 static void		  cypress_buf_clear(struct cypress_buf *cb);
 static unsigned int	  cypress_buf_data_avail(struct cypress_buf *cb);
 static unsigned int	  cypress_buf_data_avail(struct cypress_buf *cb);
 static unsigned int	  cypress_buf_space_avail(struct cypress_buf *cb);
 static unsigned int	  cypress_buf_space_avail(struct cypress_buf *cb);
-static unsigned int	  cypress_buf_put(struct cypress_buf *cb, const char *buf,
-					  unsigned int count);
-static unsigned int	  cypress_buf_get(struct cypress_buf *cb, char *buf,
-					  unsigned int count);
+static unsigned int	  cypress_buf_put(struct cypress_buf *cb, const char *buf, unsigned int count);
+static unsigned int	  cypress_buf_get(struct cypress_buf *cb, char *buf, unsigned int count);
 
 
 
 
 static struct usb_serial_device_type cypress_earthmate_device = {
 static struct usb_serial_device_type cypress_earthmate_device = {
@@ -234,14 +234,13 @@ static struct usb_serial_device_type cypress_hidcom_device = {
  *****************************************************************************/
  *****************************************************************************/
 
 
 
 
-/* This function can either set or retreive the current serial line settings */
+/* This function can either set or retrieve the current serial line settings */
 static int cypress_serial_control (struct usb_serial_port *port, unsigned baud_mask, int data_bits, int stop_bits,
 static int cypress_serial_control (struct usb_serial_port *port, unsigned baud_mask, int data_bits, int stop_bits,
 				   int parity_enable, int parity_type, int reset, int cypress_request_type)
 				   int parity_enable, int parity_type, int reset, int cypress_request_type)
 {
 {
-	int i, n_baud_rate = 0, retval = 0;
+	int new_baudrate = 0, retval = 0, tries = 0;
 	struct cypress_private *priv;
 	struct cypress_private *priv;
-	__u8 feature_buffer[5];
-	__u8 config;
+	__u8 feature_buffer[8];
 	unsigned long flags;
 	unsigned long flags;
 
 
 	dbg("%s", __FUNCTION__);
 	dbg("%s", __FUNCTION__);
@@ -256,7 +255,8 @@ static int cypress_serial_control (struct usb_serial_port *port, unsigned baud_m
  			 * of 57600bps (I have no idea whether DeLorme chose to use the general purpose
  			 * of 57600bps (I have no idea whether DeLorme chose to use the general purpose
 			 * firmware or not), if you need to modify this speed setting for your own
 			 * firmware or not), if you need to modify this speed setting for your own
 			 * project please add your own chiptype and modify the code likewise.  The
 			 * project please add your own chiptype and modify the code likewise.  The
-			 * Cypress HID->COM device will work successfully up to 115200bps.
+			 * Cypress HID->COM device will work successfully up to 115200bps (but the
+			 * actual throughput is around 3kBps).
 			 */
 			 */
 			if (baud_mask != priv->cbr_mask) {
 			if (baud_mask != priv->cbr_mask) {
 				dbg("%s - baud rate is changing", __FUNCTION__);
 				dbg("%s - baud rate is changing", __FUNCTION__);
@@ -265,109 +265,114 @@ static int cypress_serial_control (struct usb_serial_port *port, unsigned baud_m
 					 * but are not used with NMEA and SiRF protocols */
 					 * but are not used with NMEA and SiRF protocols */
 					
 					
 					if ( (baud_mask == B300) || (baud_mask == B600) ) {
 					if ( (baud_mask == B300) || (baud_mask == B600) ) {
-						err("%s - failed setting baud rate, unsupported speed (default to 4800)",
+						err("%s - failed setting baud rate, unsupported speed",
 						    __FUNCTION__);
 						    __FUNCTION__);
-						n_baud_rate = 4800;
-					} else if ( (n_baud_rate = mask_to_rate(baud_mask)) == -1) {
-						err("%s - failed setting baud rate, unsupported speed (default to 4800)",
+						new_baudrate = priv->baud_rate;
+					} else if ( (new_baudrate = mask_to_rate(baud_mask)) == -1) {
+						err("%s - failed setting baud rate, unsupported speed",
 						    __FUNCTION__);
 						    __FUNCTION__);
-						n_baud_rate = 4800;
+						new_baudrate = priv->baud_rate;
 					}
 					}
 				} else if (priv->chiptype == CT_CYPHIDCOM) {
 				} else if (priv->chiptype == CT_CYPHIDCOM) {
-					if ( (n_baud_rate = mask_to_rate(baud_mask)) == -1) {
-						err("%s - failed setting baud rate, unsupported speed (default to 4800)",
+					if ( (new_baudrate = mask_to_rate(baud_mask)) == -1) {
+						err("%s - failed setting baud rate, unsupported speed",
 						    __FUNCTION__);
 						    __FUNCTION__);
-						n_baud_rate = 4800;
+						new_baudrate = priv->baud_rate;
 					}
 					}
 				} else if (priv->chiptype == CT_GENERIC) {
 				} else if (priv->chiptype == CT_GENERIC) {
-					if ( (n_baud_rate = mask_to_rate(baud_mask)) == -1) {
-						err("%s - failed setting baud rate, unsupported speed (default to 4800)",
+					if ( (new_baudrate = mask_to_rate(baud_mask)) == -1) {
+						err("%s - failed setting baud rate, unsupported speed",
 						    __FUNCTION__);
 						    __FUNCTION__);
-						n_baud_rate = 4800;
+						new_baudrate = priv->baud_rate;
 					}
 					}
 				} else {
 				} else {
-					info("%s - please define your chiptype, using 4800bps default", __FUNCTION__);
-					n_baud_rate = 4800;
+					info("%s - please define your chiptype", __FUNCTION__);
+					new_baudrate = priv->baud_rate;
 				}
 				}
 			} else {  /* baud rate not changing, keep the old */
 			} else {  /* baud rate not changing, keep the old */
-				n_baud_rate = priv->baud_rate;
+				new_baudrate = priv->baud_rate;
 			}
 			}
-			dbg("%s - baud rate is being sent as %d", __FUNCTION__, n_baud_rate);
-
+			dbg("%s - baud rate is being sent as %d", __FUNCTION__, new_baudrate);
 			
 			
-			/*
-			 * This algorithm accredited to Jiang Jay Zhang... thanks for all the help!
-			 */
-			for (i = 0; i < 4; ++i) {
-				feature_buffer[i] = ( n_baud_rate >> (i*8) & 0xFF );
-			}
+			memset(feature_buffer, 0, 8);
+			/* fill the feature_buffer with new configuration */
+			*((u_int32_t *)feature_buffer) = new_baudrate;
 
 
-			config = 0;	                 // reset config byte
-			config |= data_bits;	         // assign data bits in 2 bit space ( max 3 )
+			feature_buffer[4] |= data_bits;   /* assign data bits in 2 bit space ( max 3 ) */
 			/* 1 bit gap */
 			/* 1 bit gap */
-			config |= (stop_bits << 3);      // assign stop bits in 1 bit space
-			config |= (parity_enable << 4);  // assign parity flag in 1 bit space
-			config |= (parity_type << 5); 	 // assign parity type in 1 bit space
+			feature_buffer[4] |= (stop_bits << 3);   /* assign stop bits in 1 bit space */
+			feature_buffer[4] |= (parity_enable << 4);   /* assign parity flag in 1 bit space */
+			feature_buffer[4] |= (parity_type << 5);   /* assign parity type in 1 bit space */
 			/* 1 bit gap */
 			/* 1 bit gap */
-			config |= (reset << 7);		 // assign reset at end of byte, 1 bit space
-
-			feature_buffer[4] = config;
+			feature_buffer[4] |= (reset << 7);   /* assign reset at end of byte, 1 bit space */
 				
 				
 			dbg("%s - device is being sent this feature report:", __FUNCTION__);
 			dbg("%s - device is being sent this feature report:", __FUNCTION__);
 			dbg("%s - %02X - %02X - %02X - %02X - %02X", __FUNCTION__, feature_buffer[0], feature_buffer[1],
 			dbg("%s - %02X - %02X - %02X - %02X - %02X", __FUNCTION__, feature_buffer[0], feature_buffer[1],
 		            feature_buffer[2], feature_buffer[3], feature_buffer[4]);
 		            feature_buffer[2], feature_buffer[3], feature_buffer[4]);
 			
 			
+			do {
 			retval = usb_control_msg (port->serial->dev, usb_sndctrlpipe(port->serial->dev, 0),
 			retval = usb_control_msg (port->serial->dev, usb_sndctrlpipe(port->serial->dev, 0),
 					  	  HID_REQ_SET_REPORT, USB_DIR_OUT | USB_RECIP_INTERFACE | USB_TYPE_CLASS,
 					  	  HID_REQ_SET_REPORT, USB_DIR_OUT | USB_RECIP_INTERFACE | USB_TYPE_CLASS,
-					  	  0x0300, 0, feature_buffer, 5, 500);
+						  	  0x0300, 0, feature_buffer, 8, 500);
+
+				if (tries++ >= 3)
+					break;
 
 
-			if (retval != 5)
+				if (retval == EPIPE)
+					usb_clear_halt(port->serial->dev, 0x00);
+			} while (retval != 8 && retval != ENODEV);
+
+			if (retval != 8)
 				err("%s - failed sending serial line settings - %d", __FUNCTION__, retval);
 				err("%s - failed sending serial line settings - %d", __FUNCTION__, retval);
 			else {
 			else {
 				spin_lock_irqsave(&priv->lock, flags);
 				spin_lock_irqsave(&priv->lock, flags);
-				priv->baud_rate = n_baud_rate;
+				priv->baud_rate = new_baudrate;
 				priv->cbr_mask = baud_mask;
 				priv->cbr_mask = baud_mask;
-				priv->current_config = config;
-				++priv->cmd_count;
+				priv->current_config = feature_buffer[4];
 				spin_unlock_irqrestore(&priv->lock, flags);
 				spin_unlock_irqrestore(&priv->lock, flags);
 			}
 			}
 		break;
 		break;
 		case CYPRESS_GET_CONFIG:
 		case CYPRESS_GET_CONFIG:
 			dbg("%s - retreiving serial line settings", __FUNCTION__);
 			dbg("%s - retreiving serial line settings", __FUNCTION__);
-			/* reset values in feature buffer */
-			memset(feature_buffer, 0, 5);
+			/* set initial values in feature buffer */
+			memset(feature_buffer, 0, 8);
 
 
+			do {
 			retval = usb_control_msg (port->serial->dev, usb_rcvctrlpipe(port->serial->dev, 0),
 			retval = usb_control_msg (port->serial->dev, usb_rcvctrlpipe(port->serial->dev, 0),
 						  HID_REQ_GET_REPORT, USB_DIR_IN | USB_RECIP_INTERFACE | USB_TYPE_CLASS,
 						  HID_REQ_GET_REPORT, USB_DIR_IN | USB_RECIP_INTERFACE | USB_TYPE_CLASS,
-						  0x0300, 0, feature_buffer, 5, 500);
+							  0x0300, 0, feature_buffer, 8, 500);
+				
+				if (tries++ >= 3)
+					break;
+
+				if (retval == EPIPE)
+					usb_clear_halt(port->serial->dev, 0x00);
+			} while (retval != 5 && retval != ENODEV);
+
 			if (retval != 5) {
 			if (retval != 5) {
 				err("%s - failed to retreive serial line settings - %d", __FUNCTION__, retval);
 				err("%s - failed to retreive serial line settings - %d", __FUNCTION__, retval);
 				return retval;
 				return retval;
 			} else {
 			} else {
 				spin_lock_irqsave(&priv->lock, flags);
 				spin_lock_irqsave(&priv->lock, flags);
+
 				/* store the config in one byte, and later use bit masks to check values */
 				/* store the config in one byte, and later use bit masks to check values */
 				priv->current_config = feature_buffer[4];
 				priv->current_config = feature_buffer[4];
-				/* reverse the process above to get the baud_mask value */
-				n_baud_rate = 0; // reset bits
-				for (i = 0; i < 4; ++i) {
-					n_baud_rate |= ( feature_buffer[i] << (i*8) );
-				}
+				priv->baud_rate = *((u_int32_t *)feature_buffer);
 				
 				
-				priv->baud_rate = n_baud_rate;
-				if ( (priv->cbr_mask = rate_to_mask(n_baud_rate)) == 0x40)
+				if ( (priv->cbr_mask = rate_to_mask(priv->baud_rate)) == 0x40)
 					dbg("%s - failed setting the baud mask (not defined)", __FUNCTION__);
 					dbg("%s - failed setting the baud mask (not defined)", __FUNCTION__);
-				++priv->cmd_count;
 				spin_unlock_irqrestore(&priv->lock, flags);
 				spin_unlock_irqrestore(&priv->lock, flags);
 			}
 			}
-			break;
-		default:
-			err("%s - unsupported serial control command issued", __FUNCTION__);
 	}
 	}
+	spin_lock_irqsave(&priv->lock, flags);
+	++priv->cmd_count;
+	spin_unlock_irqrestore(&priv->lock, flags);
+
 	return retval;
 	return retval;
 } /* cypress_serial_control */
 } /* cypress_serial_control */
 
 
 
 
-/* given a baud mask, it will return speed on success */
+/* given a baud mask, it will return integer baud on success */
 static int mask_to_rate (unsigned mask)
 static int mask_to_rate (unsigned mask)
 {
 {
 	int rate;
 	int rate;
@@ -438,11 +443,12 @@ static int generic_startup (struct usb_serial *serial)
 	
 	
 	usb_reset_configuration (serial->dev);
 	usb_reset_configuration (serial->dev);
 	
 	
+	interval = 1;
 	priv->cmd_ctrl = 0;
 	priv->cmd_ctrl = 0;
 	priv->line_control = 0;
 	priv->line_control = 0;
 	priv->termios_initialized = 0;
 	priv->termios_initialized = 0;
-	priv->calledfromopen = 0;
 	priv->rx_flags = 0;
 	priv->rx_flags = 0;
+	priv->cbr_mask = B300;
 	usb_set_serial_port_data(serial->port[0], priv);
 	usb_set_serial_port_data(serial->port[0], priv);
 	
 	
 	return (0);	
 	return (0);	
@@ -513,7 +519,6 @@ static int cypress_open (struct usb_serial_port *port, struct file *filp)
 	dbg("%s - port %d", __FUNCTION__, port->number);
 	dbg("%s - port %d", __FUNCTION__, port->number);
 
 
 	/* clear halts before open */
 	/* clear halts before open */
-	usb_clear_halt(serial->dev, 0x00);
 	usb_clear_halt(serial->dev, 0x81);
 	usb_clear_halt(serial->dev, 0x81);
 	usb_clear_halt(serial->dev, 0x02);
 	usb_clear_halt(serial->dev, 0x02);
 
 
@@ -531,7 +536,6 @@ static int cypress_open (struct usb_serial_port *port, struct file *filp)
 	/* raise both lines and set termios */
 	/* raise both lines and set termios */
 	spin_lock_irqsave(&priv->lock, flags);
 	spin_lock_irqsave(&priv->lock, flags);
 	priv->line_control = CONTROL_DTR | CONTROL_RTS;
 	priv->line_control = CONTROL_DTR | CONTROL_RTS;
-	priv->calledfromopen = 1;
 	priv->cmd_ctrl = 1;
 	priv->cmd_ctrl = 1;
 	spin_unlock_irqrestore(&priv->lock, flags);
 	spin_unlock_irqrestore(&priv->lock, flags);
 	result = cypress_write(port, NULL, 0);
 	result = cypress_write(port, NULL, 0);
@@ -553,7 +557,7 @@ static int cypress_open (struct usb_serial_port *port, struct file *filp)
 	usb_fill_int_urb(port->interrupt_in_urb, serial->dev,
 	usb_fill_int_urb(port->interrupt_in_urb, serial->dev,
 		usb_rcvintpipe(serial->dev, port->interrupt_in_endpointAddress),
 		usb_rcvintpipe(serial->dev, port->interrupt_in_endpointAddress),
 		port->interrupt_in_urb->transfer_buffer, port->interrupt_in_urb->transfer_buffer_length,
 		port->interrupt_in_urb->transfer_buffer, port->interrupt_in_urb->transfer_buffer_length,
-		cypress_read_int_callback, port, port->interrupt_in_urb->interval);
+		cypress_read_int_callback, port, interval);
 	result = usb_submit_urb(port->interrupt_in_urb, GFP_KERNEL);
 	result = usb_submit_urb(port->interrupt_in_urb, GFP_KERNEL);
 
 
 	if (result){
 	if (result){
@@ -680,12 +684,12 @@ static void cypress_send(struct usb_serial_port *port)
 	spin_lock_irqsave(&priv->lock, flags);
 	spin_lock_irqsave(&priv->lock, flags);
 	switch (port->interrupt_out_size) {
 	switch (port->interrupt_out_size) {
 		case 32:
 		case 32:
-			// this is for the CY7C64013...
+			/* this is for the CY7C64013... */
 			offset = 2;
 			offset = 2;
 			port->interrupt_out_buffer[0] = priv->line_control;
 			port->interrupt_out_buffer[0] = priv->line_control;
 			break;
 			break;
 		case 8:
 		case 8:
-			// this is for the CY7C63743...
+			/* this is for the CY7C63743... */
 			offset = 1;
 			offset = 1;
 			port->interrupt_out_buffer[0] = priv->line_control;
 			port->interrupt_out_buffer[0] = priv->line_control;
 			break;
 			break;
@@ -738,6 +742,7 @@ send:
 
 
 	port->interrupt_out_urb->transfer_buffer_length = actual_size;
 	port->interrupt_out_urb->transfer_buffer_length = actual_size;
 	port->interrupt_out_urb->dev = port->serial->dev;
 	port->interrupt_out_urb->dev = port->serial->dev;
+	port->interrupt_out_urb->interval = interval;
 	result = usb_submit_urb (port->interrupt_out_urb, GFP_ATOMIC);
 	result = usb_submit_urb (port->interrupt_out_urb, GFP_ATOMIC);
 	if (result) {
 	if (result) {
 		dev_err(&port->dev, "%s - failed submitting write urb, error %d\n", __FUNCTION__,
 		dev_err(&port->dev, "%s - failed submitting write urb, error %d\n", __FUNCTION__,
@@ -910,7 +915,7 @@ static void cypress_set_termios (struct usb_serial_port *port, struct termios *o
 	unsigned cflag, iflag, baud_mask;
 	unsigned cflag, iflag, baud_mask;
 	unsigned long flags;
 	unsigned long flags;
 	__u8 oldlines;
 	__u8 oldlines;
-	int linechange;
+	int linechange = 0;
 	
 	
 	dbg("%s - port %d", __FUNCTION__, port->number);
 	dbg("%s - port %d", __FUNCTION__, port->number);
 
 
@@ -996,15 +1001,7 @@ static void cypress_set_termios (struct usb_serial_port *port, struct termios *o
 			case B115200: dbg("%s - setting baud 115200bps", __FUNCTION__); break;
 			case B115200: dbg("%s - setting baud 115200bps", __FUNCTION__); break;
 			default: dbg("%s - unknown masked baud rate", __FUNCTION__);
 			default: dbg("%s - unknown masked baud rate", __FUNCTION__);
 		}
 		}
-		priv->line_control |= CONTROL_DTR;
-		
-		/* toggle CRTSCTS? - don't do this if being called from cypress_open */
-		if (!priv->calledfromopen) {
-			if (cflag & CRTSCTS)
-				priv->line_control |= CONTROL_RTS;
-			else
-				priv->line_control &= ~CONTROL_RTS;
-		}
+		priv->line_control = (CONTROL_DTR | CONTROL_RTS);
 	}
 	}
 	spin_unlock_irqrestore(&priv->lock, flags);
 	spin_unlock_irqrestore(&priv->lock, flags);
 	
 	
@@ -1014,8 +1011,6 @@ static void cypress_set_termios (struct usb_serial_port *port, struct termios *o
 	cypress_serial_control(port, baud_mask, data_bits, stop_bits, parity_enable,
 	cypress_serial_control(port, baud_mask, data_bits, stop_bits, parity_enable,
 			       parity_type, 0, CYPRESS_SET_CONFIG);
 			       parity_type, 0, CYPRESS_SET_CONFIG);
 
 
-	msleep(50);			/* give some time between change and read (50ms) */
-
 	/* we perform a CYPRESS_GET_CONFIG so that the current settings are filled into the private structure
 	/* we perform a CYPRESS_GET_CONFIG so that the current settings are filled into the private structure
          * this should confirm that all is working if it returns what we just set */
          * this should confirm that all is working if it returns what we just set */
 	cypress_serial_control(port, 0, 0, 0, 0, 0, 0, CYPRESS_GET_CONFIG);
 	cypress_serial_control(port, 0, 0, 0, 0, 0, 0, CYPRESS_GET_CONFIG);
@@ -1031,7 +1026,6 @@ static void cypress_set_termios (struct usb_serial_port *port, struct termios *o
 		dbg("Using custom termios settings for a baud rate of 4800bps.");
 		dbg("Using custom termios settings for a baud rate of 4800bps.");
 		/* define custom termios settings for NMEA protocol */
 		/* define custom termios settings for NMEA protocol */
 
 
-		
 		tty->termios->c_iflag /* input modes - */
 		tty->termios->c_iflag /* input modes - */
 			&= ~(IGNBRK		/* disable ignore break */
 			&= ~(IGNBRK		/* disable ignore break */
 			| BRKINT		/* disable break causes interrupt */
 			| BRKINT		/* disable break causes interrupt */
@@ -1052,23 +1046,16 @@ static void cypress_set_termios (struct usb_serial_port *port, struct termios *o
 			| ISIG			/* disable interrupt, quit, and suspend special characters */
 			| ISIG			/* disable interrupt, quit, and suspend special characters */
 			| IEXTEN);		/* disable non-POSIX special characters */
 			| IEXTEN);		/* disable non-POSIX special characters */
 
 
-	} else if (priv->chiptype == CT_CYPHIDCOM) {
-
-		// Software app handling it for device...	
+	} /* CT_CYPHIDCOM: Application should handle this for device */
 
 
-	}
 	linechange = (priv->line_control != oldlines);
 	linechange = (priv->line_control != oldlines);
 	spin_unlock_irqrestore(&priv->lock, flags);
 	spin_unlock_irqrestore(&priv->lock, flags);
 
 
 	/* if necessary, set lines */
 	/* if necessary, set lines */
-	if (!priv->calledfromopen && linechange) {
+	if (linechange) {
 		priv->cmd_ctrl = 1;
 		priv->cmd_ctrl = 1;
 		cypress_write(port, NULL, 0);
 		cypress_write(port, NULL, 0);
 	}
 	}
-
-	if (priv->calledfromopen)
-		priv->calledfromopen = 0;
-	
 } /* cypress_set_termios */
 } /* cypress_set_termios */
 
 
  
  
@@ -1164,7 +1151,7 @@ static void cypress_read_int_callback(struct urb *urb, struct pt_regs *regs)
 	spin_lock_irqsave(&priv->lock, flags);
 	spin_lock_irqsave(&priv->lock, flags);
 	switch(urb->actual_length) {
 	switch(urb->actual_length) {
 		case 32:
 		case 32:
-			// This is for the CY7C64013...
+			/* This is for the CY7C64013... */
 			priv->current_status = data[0] & 0xF8;
 			priv->current_status = data[0] & 0xF8;
 			bytes = data[1]+2;
 			bytes = data[1]+2;
 			i=2;
 			i=2;
@@ -1172,7 +1159,7 @@ static void cypress_read_int_callback(struct urb *urb, struct pt_regs *regs)
 				havedata = 1;
 				havedata = 1;
 			break;
 			break;
 		case 8:
 		case 8:
-			// This is for the CY7C63743...
+			/* This is for the CY7C63743... */
 			priv->current_status = data[0] & 0xF8;
 			priv->current_status = data[0] & 0xF8;
 			bytes = (data[0] & 0x07)+1;
 			bytes = (data[0] & 0x07)+1;
 			i=1;
 			i=1;
@@ -1245,7 +1232,7 @@ continue_read:
 		port->interrupt_in_urb->transfer_buffer,
 		port->interrupt_in_urb->transfer_buffer,
 		port->interrupt_in_urb->transfer_buffer_length,
 		port->interrupt_in_urb->transfer_buffer_length,
 		cypress_read_int_callback, port,
 		cypress_read_int_callback, port,
-		port->interrupt_in_urb->interval);
+		interval);
 	result = usb_submit_urb(port->interrupt_in_urb, GFP_ATOMIC);
 	result = usb_submit_urb(port->interrupt_in_urb, GFP_ATOMIC);
 	if (result)
 	if (result)
 		dev_err(&urb->dev->dev, "%s - failed resubmitting read urb, error %d\n", __FUNCTION__, result);
 		dev_err(&urb->dev->dev, "%s - failed resubmitting read urb, error %d\n", __FUNCTION__, result);
@@ -1274,6 +1261,8 @@ static void cypress_write_int_callback(struct urb *urb, struct pt_regs *regs)
 			dbg("%s - urb shutting down with status: %d", __FUNCTION__, urb->status);
 			dbg("%s - urb shutting down with status: %d", __FUNCTION__, urb->status);
 			priv->write_urb_in_use = 0;
 			priv->write_urb_in_use = 0;
 			return;
 			return;
+		case -EPIPE: /* no break needed */
+			usb_clear_halt(port->serial->dev, 0x02);
 		default:
 		default:
 			/* error in the urb, so we have to resubmit it */
 			/* error in the urb, so we have to resubmit it */
 			dbg("%s - Overflow in write", __FUNCTION__);
 			dbg("%s - Overflow in write", __FUNCTION__);
@@ -1535,3 +1524,5 @@ module_param(debug, bool, S_IRUGO | S_IWUSR);
 MODULE_PARM_DESC(debug, "Debug enabled or not");
 MODULE_PARM_DESC(debug, "Debug enabled or not");
 module_param(stats, bool, S_IRUGO | S_IWUSR);
 module_param(stats, bool, S_IRUGO | S_IWUSR);
 MODULE_PARM_DESC(stats, "Enable statistics or not");
 MODULE_PARM_DESC(stats, "Enable statistics or not");
+module_param(interval, int, S_IRUGO | S_IWUSR);
+MODULE_PARM_DESC(interval, "Overrides interrupt interval");

+ 36 - 10
drivers/usb/serial/ftdi_sio.c

@@ -76,7 +76,7 @@
  *      Defererence pointers after any paranoid checks, not before.
  *      Defererence pointers after any paranoid checks, not before.
  *
  *
  * (21/Jun/2003) Erik Nygren
  * (21/Jun/2003) Erik Nygren
- *      Added support for Home Electronics Tira-1 IR tranceiver using FT232BM chip.
+ *      Added support for Home Electronics Tira-1 IR transceiver using FT232BM chip.
  *      See <http://www.home-electro.com/tira1.htm>.  Only operates properly 
  *      See <http://www.home-electro.com/tira1.htm>.  Only operates properly 
  *      at 100000 and RTS-CTS, so set custom divisor mode on startup.
  *      at 100000 and RTS-CTS, so set custom divisor mode on startup.
  *      Also force the Tira-1 and USB-UIRT to only use their custom baud rates.
  *      Also force the Tira-1 and USB-UIRT to only use their custom baud rates.
@@ -91,7 +91,7 @@
  *      Minor whitespace and comment changes.
  *      Minor whitespace and comment changes.
  *
  *
  * (12/Jun/2003) David Norwood
  * (12/Jun/2003) David Norwood
- *      Added support for USB-UIRT IR tranceiver using 8U232AM chip.
+ *      Added support for USB-UIRT IR transceiver using 8U232AM chip.
  *      See <http://home.earthlink.net/~jrhees/USBUIRT/index.htm>.  Only
  *      See <http://home.earthlink.net/~jrhees/USBUIRT/index.htm>.  Only
  *      operates properly at 312500, so set custom divisor mode on startup.
  *      operates properly at 312500, so set custom divisor mode on startup.
  *
  *
@@ -272,6 +272,7 @@ static int debug;
 
 
 static struct usb_device_id id_table_sio [] = {
 static struct usb_device_id id_table_sio [] = {
 	{ USB_DEVICE(FTDI_VID, FTDI_SIO_PID) },
 	{ USB_DEVICE(FTDI_VID, FTDI_SIO_PID) },
+	{ USB_DEVICE(MOBILITY_VID, MOBILITY_USB_SERIAL_PID) },
 	{ }						/* Terminating entry */
 	{ }						/* Terminating entry */
 };
 };
 
 
@@ -296,7 +297,6 @@ static struct usb_device_id id_table_8U232AM [] = {
 	{ USB_DEVICE_VER(FTDI_VID, FTDI_IRTRANS_PID, 0, 0x3ff) },
 	{ USB_DEVICE_VER(FTDI_VID, FTDI_IRTRANS_PID, 0, 0x3ff) },
 	{ USB_DEVICE_VER(FTDI_VID, FTDI_8U232AM_PID, 0, 0x3ff) },
 	{ USB_DEVICE_VER(FTDI_VID, FTDI_8U232AM_PID, 0, 0x3ff) },
 	{ USB_DEVICE_VER(FTDI_VID, FTDI_8U232AM_ALT_PID, 0, 0x3ff) },
 	{ USB_DEVICE_VER(FTDI_VID, FTDI_8U232AM_ALT_PID, 0, 0x3ff) },
-	{ USB_DEVICE_VER(FTDI_VID, FTDI_8U232AM_ALT_ALT_PID, 0, 0x3ff) },
 	{ USB_DEVICE_VER(FTDI_VID, FTDI_RELAIS_PID, 0, 0x3ff) },
 	{ USB_DEVICE_VER(FTDI_VID, FTDI_RELAIS_PID, 0, 0x3ff) },
 	{ USB_DEVICE(INTERBIOMETRICS_VID, INTERBIOMETRICS_IOBOARD_PID) },
 	{ USB_DEVICE(INTERBIOMETRICS_VID, INTERBIOMETRICS_IOBOARD_PID) },
 	{ USB_DEVICE(INTERBIOMETRICS_VID, INTERBIOMETRICS_MINI_IOBOARD_PID) },
 	{ USB_DEVICE(INTERBIOMETRICS_VID, INTERBIOMETRICS_MINI_IOBOARD_PID) },
@@ -369,11 +369,14 @@ static struct usb_device_id id_table_8U232AM [] = {
 	{ USB_DEVICE_VER(INTREPID_VID, INTREPID_NEOVI_PID, 0, 0x3ff) },
 	{ USB_DEVICE_VER(INTREPID_VID, INTREPID_NEOVI_PID, 0, 0x3ff) },
 	{ USB_DEVICE_VER(FALCOM_VID, FALCOM_TWIST_PID, 0, 0x3ff) },
 	{ USB_DEVICE_VER(FALCOM_VID, FALCOM_TWIST_PID, 0, 0x3ff) },
 	{ USB_DEVICE_VER(FTDI_VID, FTDI_SUUNTO_SPORTS_PID, 0, 0x3ff) },
 	{ USB_DEVICE_VER(FTDI_VID, FTDI_SUUNTO_SPORTS_PID, 0, 0x3ff) },
-	{ USB_DEVICE_VER(FTDI_RM_VID, FTDI_RMCANVIEW_PID, 0, 0x3ff) },
+	{ USB_DEVICE_VER(FTDI_VID, FTDI_RM_CANVIEW_PID, 0, 0x3ff) },
 	{ USB_DEVICE_VER(BANDB_VID, BANDB_USOTL4_PID, 0, 0x3ff) },
 	{ USB_DEVICE_VER(BANDB_VID, BANDB_USOTL4_PID, 0, 0x3ff) },
 	{ USB_DEVICE_VER(BANDB_VID, BANDB_USTL4_PID, 0, 0x3ff) },
 	{ USB_DEVICE_VER(BANDB_VID, BANDB_USTL4_PID, 0, 0x3ff) },
 	{ USB_DEVICE_VER(BANDB_VID, BANDB_USO9ML2_PID, 0, 0x3ff) },
 	{ USB_DEVICE_VER(BANDB_VID, BANDB_USO9ML2_PID, 0, 0x3ff) },
 	{ USB_DEVICE_VER(FTDI_VID, EVER_ECO_PRO_CDS, 0, 0x3ff) },
 	{ USB_DEVICE_VER(FTDI_VID, EVER_ECO_PRO_CDS, 0, 0x3ff) },
+	{ USB_DEVICE_VER(FTDI_VID, FTDI_4N_GALAXY_DE_0_PID, 0, 0x3ff) },
+	{ USB_DEVICE_VER(FTDI_VID, FTDI_4N_GALAXY_DE_1_PID, 0, 0x3ff) },
+	{ USB_DEVICE_VER(FTDI_VID, FTDI_4N_GALAXY_DE_2_PID, 0, 0x3ff) },
 	{ }						/* Terminating entry */
 	{ }						/* Terminating entry */
 };
 };
 
 
@@ -382,7 +385,6 @@ static struct usb_device_id id_table_FT232BM [] = {
 	{ USB_DEVICE_VER(FTDI_VID, FTDI_IRTRANS_PID, 0x400, 0xffff) },
 	{ USB_DEVICE_VER(FTDI_VID, FTDI_IRTRANS_PID, 0x400, 0xffff) },
 	{ USB_DEVICE_VER(FTDI_VID, FTDI_8U232AM_PID, 0x400, 0xffff) },
 	{ USB_DEVICE_VER(FTDI_VID, FTDI_8U232AM_PID, 0x400, 0xffff) },
 	{ USB_DEVICE_VER(FTDI_VID, FTDI_8U232AM_ALT_PID, 0x400, 0xffff) },
 	{ USB_DEVICE_VER(FTDI_VID, FTDI_8U232AM_ALT_PID, 0x400, 0xffff) },
-	{ USB_DEVICE_VER(FTDI_VID, FTDI_8U232AM_ALT_ALT_PID, 0x400, 0xffff) },
 	{ USB_DEVICE_VER(FTDI_VID, FTDI_RELAIS_PID, 0x400, 0xffff) },
 	{ USB_DEVICE_VER(FTDI_VID, FTDI_RELAIS_PID, 0x400, 0xffff) },
 	{ USB_DEVICE_VER(FTDI_NF_RIC_VID, FTDI_NF_RIC_PID, 0x400, 0xffff) },
 	{ USB_DEVICE_VER(FTDI_NF_RIC_VID, FTDI_NF_RIC_PID, 0x400, 0xffff) },
 	{ USB_DEVICE_VER(FTDI_VID, FTDI_XF_632_PID, 0x400, 0xffff) },
 	{ USB_DEVICE_VER(FTDI_VID, FTDI_XF_632_PID, 0x400, 0xffff) },
@@ -485,11 +487,15 @@ static struct usb_device_id id_table_FT232BM [] = {
 	{ USB_DEVICE_VER(INTREPID_VID, INTREPID_NEOVI_PID, 0x400, 0xffff) },
 	{ USB_DEVICE_VER(INTREPID_VID, INTREPID_NEOVI_PID, 0x400, 0xffff) },
 	{ USB_DEVICE_VER(FALCOM_VID, FALCOM_TWIST_PID, 0x400, 0xffff) },
 	{ USB_DEVICE_VER(FALCOM_VID, FALCOM_TWIST_PID, 0x400, 0xffff) },
 	{ USB_DEVICE_VER(FTDI_VID, FTDI_SUUNTO_SPORTS_PID, 0x400, 0xffff) },
 	{ USB_DEVICE_VER(FTDI_VID, FTDI_SUUNTO_SPORTS_PID, 0x400, 0xffff) },
-	{ USB_DEVICE_VER(FTDI_RM_VID, FTDI_RMCANVIEW_PID, 0x400, 0xffff) },
+	{ USB_DEVICE_VER(FTDI_VID, FTDI_RM_CANVIEW_PID, 0x400, 0xffff) },
 	{ USB_DEVICE_VER(BANDB_VID, BANDB_USOTL4_PID, 0x400, 0xffff) },
 	{ USB_DEVICE_VER(BANDB_VID, BANDB_USOTL4_PID, 0x400, 0xffff) },
 	{ USB_DEVICE_VER(BANDB_VID, BANDB_USTL4_PID, 0x400, 0xffff) },
 	{ USB_DEVICE_VER(BANDB_VID, BANDB_USTL4_PID, 0x400, 0xffff) },
 	{ USB_DEVICE_VER(BANDB_VID, BANDB_USO9ML2_PID, 0x400, 0xffff) },
 	{ USB_DEVICE_VER(BANDB_VID, BANDB_USO9ML2_PID, 0x400, 0xffff) },
 	{ USB_DEVICE_VER(FTDI_VID, EVER_ECO_PRO_CDS, 0x400, 0xffff) },
 	{ USB_DEVICE_VER(FTDI_VID, EVER_ECO_PRO_CDS, 0x400, 0xffff) },
+	{ USB_DEVICE_VER(FTDI_VID, FTDI_4N_GALAXY_DE_0_PID, 0x400, 0xffff) },
+	{ USB_DEVICE_VER(FTDI_VID, FTDI_4N_GALAXY_DE_1_PID, 0x400, 0xffff) },
+	{ USB_DEVICE_VER(FTDI_VID, FTDI_4N_GALAXY_DE_2_PID, 0x400, 0xffff) },
+	{ USB_DEVICE_VER(FTDI_VID, FTDI_ACTIVE_ROBOTS_PID, 0x400, 0xffff) },
 	{ }						/* Terminating entry */
 	{ }						/* Terminating entry */
 };
 };
 
 
@@ -517,7 +523,6 @@ static struct usb_device_id id_table_combined [] = {
 	{ USB_DEVICE(FTDI_VID, FTDI_SIO_PID) },
 	{ USB_DEVICE(FTDI_VID, FTDI_SIO_PID) },
 	{ USB_DEVICE(FTDI_VID, FTDI_8U232AM_PID) },
 	{ USB_DEVICE(FTDI_VID, FTDI_8U232AM_PID) },
 	{ USB_DEVICE(FTDI_VID, FTDI_8U232AM_ALT_PID) },
 	{ USB_DEVICE(FTDI_VID, FTDI_8U232AM_ALT_PID) },
-	{ USB_DEVICE(FTDI_VID, FTDI_8U232AM_ALT_ALT_PID) },
 	{ USB_DEVICE(FTDI_VID, FTDI_8U2232C_PID) },
 	{ USB_DEVICE(FTDI_VID, FTDI_8U2232C_PID) },
 	{ USB_DEVICE(FTDI_VID, FTDI_RELAIS_PID) },
 	{ USB_DEVICE(FTDI_VID, FTDI_RELAIS_PID) },
 	{ USB_DEVICE(INTERBIOMETRICS_VID, INTERBIOMETRICS_IOBOARD_PID) },
 	{ USB_DEVICE(INTERBIOMETRICS_VID, INTERBIOMETRICS_IOBOARD_PID) },
@@ -596,6 +601,22 @@ static struct usb_device_id id_table_combined [] = {
 	{ USB_DEVICE(FTDI_VID, PROTEGO_R2X0) },
 	{ USB_DEVICE(FTDI_VID, PROTEGO_R2X0) },
 	{ USB_DEVICE(FTDI_VID, PROTEGO_SPECIAL_3) },
 	{ USB_DEVICE(FTDI_VID, PROTEGO_SPECIAL_3) },
 	{ USB_DEVICE(FTDI_VID, PROTEGO_SPECIAL_4) },
 	{ USB_DEVICE(FTDI_VID, PROTEGO_SPECIAL_4) },
+	{ USB_DEVICE_VER(FTDI_VID, FTDI_GUDEADS_E808_PID, 0x400, 0xffff) },
+	{ USB_DEVICE_VER(FTDI_VID, FTDI_GUDEADS_E809_PID, 0x400, 0xffff) },
+	{ USB_DEVICE_VER(FTDI_VID, FTDI_GUDEADS_E80A_PID, 0x400, 0xffff) },
+	{ USB_DEVICE_VER(FTDI_VID, FTDI_GUDEADS_E80B_PID, 0x400, 0xffff) },
+	{ USB_DEVICE_VER(FTDI_VID, FTDI_GUDEADS_E80C_PID, 0x400, 0xffff) },
+	{ USB_DEVICE_VER(FTDI_VID, FTDI_GUDEADS_E80D_PID, 0x400, 0xffff) },
+	{ USB_DEVICE_VER(FTDI_VID, FTDI_GUDEADS_E80E_PID, 0x400, 0xffff) },
+	{ USB_DEVICE_VER(FTDI_VID, FTDI_GUDEADS_E80F_PID, 0x400, 0xffff) },
+	{ USB_DEVICE_VER(FTDI_VID, FTDI_GUDEADS_E888_PID, 0x400, 0xffff) },
+	{ USB_DEVICE_VER(FTDI_VID, FTDI_GUDEADS_E889_PID, 0x400, 0xffff) },
+	{ USB_DEVICE_VER(FTDI_VID, FTDI_GUDEADS_E88A_PID, 0x400, 0xffff) },
+	{ USB_DEVICE_VER(FTDI_VID, FTDI_GUDEADS_E88B_PID, 0x400, 0xffff) },
+	{ USB_DEVICE_VER(FTDI_VID, FTDI_GUDEADS_E88C_PID, 0x400, 0xffff) },
+	{ USB_DEVICE_VER(FTDI_VID, FTDI_GUDEADS_E88D_PID, 0x400, 0xffff) },
+	{ USB_DEVICE_VER(FTDI_VID, FTDI_GUDEADS_E88E_PID, 0x400, 0xffff) },
+	{ USB_DEVICE_VER(FTDI_VID, FTDI_GUDEADS_E88F_PID, 0x400, 0xffff) },
 	{ USB_DEVICE(FTDI_VID, FTDI_ELV_UO100_PID) },
 	{ USB_DEVICE(FTDI_VID, FTDI_ELV_UO100_PID) },
  	{ USB_DEVICE_VER(FTDI_VID, LINX_SDMUSBQSS_PID, 0x400, 0xffff) },
  	{ USB_DEVICE_VER(FTDI_VID, LINX_SDMUSBQSS_PID, 0x400, 0xffff) },
  	{ USB_DEVICE_VER(FTDI_VID, LINX_MASTERDEVEL2_PID, 0x400, 0xffff) },
  	{ USB_DEVICE_VER(FTDI_VID, LINX_MASTERDEVEL2_PID, 0x400, 0xffff) },
@@ -609,11 +630,16 @@ static struct usb_device_id id_table_combined [] = {
 	{ USB_DEVICE(INTREPID_VID, INTREPID_NEOVI_PID) },
 	{ USB_DEVICE(INTREPID_VID, INTREPID_NEOVI_PID) },
 	{ USB_DEVICE(FALCOM_VID, FALCOM_TWIST_PID) },
 	{ USB_DEVICE(FALCOM_VID, FALCOM_TWIST_PID) },
 	{ USB_DEVICE(FTDI_VID, FTDI_SUUNTO_SPORTS_PID) },
 	{ USB_DEVICE(FTDI_VID, FTDI_SUUNTO_SPORTS_PID) },
-	{ USB_DEVICE(FTDI_RM_VID, FTDI_RMCANVIEW_PID) },
+	{ USB_DEVICE(FTDI_VID, FTDI_RM_CANVIEW_PID) },
 	{ USB_DEVICE(BANDB_VID, BANDB_USOTL4_PID) },
 	{ USB_DEVICE(BANDB_VID, BANDB_USOTL4_PID) },
 	{ USB_DEVICE(BANDB_VID, BANDB_USTL4_PID) },
 	{ USB_DEVICE(BANDB_VID, BANDB_USTL4_PID) },
 	{ USB_DEVICE(BANDB_VID, BANDB_USO9ML2_PID) },
 	{ USB_DEVICE(BANDB_VID, BANDB_USO9ML2_PID) },
 	{ USB_DEVICE(FTDI_VID, EVER_ECO_PRO_CDS) },
 	{ USB_DEVICE(FTDI_VID, EVER_ECO_PRO_CDS) },
+	{ USB_DEVICE(FTDI_VID, FTDI_4N_GALAXY_DE_0_PID) },
+	{ USB_DEVICE(FTDI_VID, FTDI_4N_GALAXY_DE_1_PID) },
+	{ USB_DEVICE(FTDI_VID, FTDI_4N_GALAXY_DE_2_PID) },
+	{ USB_DEVICE(MOBILITY_VID, MOBILITY_USB_SERIAL_PID) },
+	{ USB_DEVICE_VER(FTDI_VID, FTDI_ACTIVE_ROBOTS_PID, 0x400, 0xffff) },
 	{ }						/* Terminating entry */
 	{ }						/* Terminating entry */
 };
 };
 
 
@@ -1457,10 +1483,10 @@ static int ftdi_FT2232C_startup (struct usb_serial *serial)
 	inter = serial->interface->altsetting->desc.bInterfaceNumber;
 	inter = serial->interface->altsetting->desc.bInterfaceNumber;
 
 
 	if (inter) {
 	if (inter) {
-		priv->interface = INTERFACE_B;
+		priv->interface = PIT_SIOB;
 	}
 	}
 	else  {
 	else  {
-		priv->interface = INTERFACE_A;
+		priv->interface = PIT_SIOA;
 	}
 	}
 	priv->baud_base = 48000000 / 2; /* Would be / 16, but FT2232C supports multiple of 0.125 divisor fractions! */
 	priv->baud_base = 48000000 / 2; /* Would be / 16, but FT2232C supports multiple of 0.125 divisor fractions! */
 	
 	

+ 26 - 10
drivers/usb/serial/ftdi_sio.h

@@ -26,7 +26,6 @@
 #define FTDI_SIO_PID	0x8372	/* Product Id SIO application of 8U100AX  */
 #define FTDI_SIO_PID	0x8372	/* Product Id SIO application of 8U100AX  */
 #define FTDI_8U232AM_PID 0x6001 /* Similar device to SIO above */
 #define FTDI_8U232AM_PID 0x6001 /* Similar device to SIO above */
 #define FTDI_8U232AM_ALT_PID 0x6006 /* FTDI's alternate PID for above */
 #define FTDI_8U232AM_ALT_PID 0x6006 /* FTDI's alternate PID for above */
-#define FTDI_8U232AM_ALT_ALT_PID 0xf3c0 /* FTDI's second alternate PID for above */
 #define FTDI_8U2232C_PID 0x6010 /* Dual channel device */
 #define FTDI_8U2232C_PID 0x6010 /* Dual channel device */
 #define FTDI_RELAIS_PID	0xFA10  /* Relais device from Rudolf Gugler */
 #define FTDI_RELAIS_PID	0xFA10  /* Relais device from Rudolf Gugler */
 #define FTDI_NF_RIC_VID	0x0DCD	/* Vendor Id */
 #define FTDI_NF_RIC_VID	0x0DCD	/* Vendor Id */
@@ -137,7 +136,7 @@
 /*
 /*
  * Home Electronics (www.home-electro.com) USB gadgets
  * Home Electronics (www.home-electro.com) USB gadgets
  */
  */
-#define FTDI_HE_TIRA1_PID	0xFA78	/* Tira-1 IR tranceiver */
+#define FTDI_HE_TIRA1_PID	0xFA78	/* Tira-1 IR transceiver */
 
 
 /* USB-UIRT - An infrared receiver and transmitter using the 8U232AM chip */
 /* USB-UIRT - An infrared receiver and transmitter using the 8U232AM chip */
 /* http://home.earthlink.net/~jrhees/USBUIRT/index.htm */
 /* http://home.earthlink.net/~jrhees/USBUIRT/index.htm */
@@ -157,7 +156,8 @@
  */
  */
 #define OCT_VID			0x0B39	/* OCT vendor ID */
 #define OCT_VID			0x0B39	/* OCT vendor ID */
 /* Note: OCT US101 is also rebadged as Dick Smith Electronics (NZ) XH6381 */
 /* Note: OCT US101 is also rebadged as Dick Smith Electronics (NZ) XH6381 */
-/* Also rebadged as SIIG Inc. model US2308 */
+/* Also rebadged as Dick Smith Electronics (Aus) XH6451 */
+/* Also rebadged as SIIG Inc. model US2308 hardware version 1 */
 #define OCT_US101_PID		0x0421	/* OCT US101 USB to RS-232 */
 #define OCT_US101_PID		0x0421	/* OCT US101 USB to RS-232 */
 
 
 /* an infrared receiver for user access control with IR tags */
 /* an infrared receiver for user access control with IR tags */
@@ -236,10 +236,10 @@
 
 
 /*
 /*
  * RM Michaelides CANview USB (http://www.rmcan.com)
  * RM Michaelides CANview USB (http://www.rmcan.com)
- * CAN filedbus interface adapter, addad by port GmbH www.port.de)
+ * CAN fieldbus interface adapter, added by port GmbH www.port.de)
+ * Ian Abbott changed the macro names for consistency.
  */
  */
-#define FTDI_RM_VID		0x0403	/* Vendor  Id */
-#define FTDI_RMCANVIEW_PID	0xfd60	/* Product Id */
+#define FTDI_RM_CANVIEW_PID	0xfd60	/* Product Id */
 
 
 /*
 /*
  * EVER Eco Pro UPS (http://www.ever.com.pl/)
  * EVER Eco Pro UPS (http://www.ever.com.pl/)
@@ -247,6 +247,26 @@
 
 
 #define	EVER_ECO_PRO_CDS	0xe520	/* RS-232 converter */
 #define	EVER_ECO_PRO_CDS	0xe520	/* RS-232 converter */
 
 
+/*
+ * 4N-GALAXY.DE PIDs for CAN-USB, USB-RS232, USB-RS422, USB-RS485,
+ * USB-TTY activ, USB-TTY passiv.  Some PIDs are used by several devices
+ * and I'm not entirely sure which are used by which.
+ */
+#define FTDI_4N_GALAXY_DE_0_PID	0x8372
+#define FTDI_4N_GALAXY_DE_1_PID	0xF3C0
+#define FTDI_4N_GALAXY_DE_2_PID	0xF3C1
+
+/*
+ * Mobility Electronics products.
+ */
+#define MOBILITY_VID			0x1342
+#define MOBILITY_USB_SERIAL_PID		0x0202	/* EasiDock USB 200 serial */
+
+/*
+ * Active Robots product ids.
+ */
+#define FTDI_ACTIVE_ROBOTS_PID	0xE548	/* USB comms board */
+
 /* Commands */
 /* Commands */
 #define FTDI_SIO_RESET 		0 /* Reset the port */
 #define FTDI_SIO_RESET 		0 /* Reset the port */
 #define FTDI_SIO_MODEM_CTRL 	1 /* Set the modem control register */
 #define FTDI_SIO_MODEM_CTRL 	1 /* Set the modem control register */
@@ -259,10 +279,6 @@
 #define FTDI_SIO_SET_LATENCY_TIMER	9 /* Set the latency timer */
 #define FTDI_SIO_SET_LATENCY_TIMER	9 /* Set the latency timer */
 #define FTDI_SIO_GET_LATENCY_TIMER	10 /* Get the latency timer */
 #define FTDI_SIO_GET_LATENCY_TIMER	10 /* Get the latency timer */
 
 
-/* Port interface code for FT2232C */
-#define INTERFACE_A		1
-#define INTERFACE_B		2
-
 
 
 /*
 /*
  *   BmRequestType:  1100 0000b
  *   BmRequestType:  1100 0000b

+ 1 - 1
drivers/usb/serial/io_usbvend.h

@@ -289,7 +289,7 @@
 //
 //
 
 
 //
 //
-// Edgeport Compatiblity Descriptor
+// Edgeport Compatibility Descriptor
 //
 //
 // This descriptor is only returned by Edgeport-compatible devices
 // This descriptor is only returned by Edgeport-compatible devices
 // supporting the EPiC spec. True ION devices do not return this
 // supporting the EPiC spec. True ION devices do not return this

+ 1 - 1
drivers/usb/serial/keyspan_usa90msg.h

@@ -19,7 +19,7 @@
 
 
         	This file is available under a BSD-style copyright
         	This file is available under a BSD-style copyright
 
 
-	2. The name of InnoSys Incorprated may not be used to endorse or promote
+	2. The name of InnoSys Incorporated may not be used to endorse or promote
    	products derived from this software without specific prior written
    	products derived from this software without specific prior written
    	permission.
    	permission.
 
 

+ 1 - 0
drivers/usb/storage/debug.c

@@ -47,6 +47,7 @@
 #include <linux/cdrom.h>
 #include <linux/cdrom.h>
 #include <scsi/scsi.h>
 #include <scsi/scsi.h>
 #include <scsi/scsi_cmnd.h>
 #include <scsi/scsi_cmnd.h>
+#include <scsi/scsi_dbg.h>
 
 
 #include "debug.h"
 #include "debug.h"
 #include "scsi.h"
 #include "scsi.h"

+ 1 - 1
drivers/usb/storage/shuttle_usbat.c

@@ -786,7 +786,7 @@ static int usbat_flash_check_media(struct us_data *us,
 	if (rc != USB_STOR_XFER_GOOD)
 	if (rc != USB_STOR_XFER_GOOD)
 		return USB_STOR_TRANSPORT_ERROR;
 		return USB_STOR_TRANSPORT_ERROR;
 
 
-	// Check for media existance
+	// Check for media existence
 	rc = usbat_flash_check_media_present(uio);
 	rc = usbat_flash_check_media_present(uio);
 	if (rc == USBAT_FLASH_MEDIA_NONE) {
 	if (rc == USBAT_FLASH_MEDIA_NONE) {
 		info->sense_key = 0x02;
 		info->sense_key = 0x02;

+ 16 - 1
drivers/usb/storage/unusual_devs.h

@@ -1,5 +1,5 @@
 /* Driver for USB Mass Storage compliant devices
 /* Driver for USB Mass Storage compliant devices
- * Ununsual Devices File
+ * Unusual Devices File
  *
  *
  * $Id: unusual_devs.h,v 1.32 2002/02/25 02:41:24 mdharm Exp $
  * $Id: unusual_devs.h,v 1.32 2002/02/25 02:41:24 mdharm Exp $
  *
  *
@@ -48,6 +48,14 @@
  * USB development list <linux-usb-devel@lists.sourceforge.net>.
  * USB development list <linux-usb-devel@lists.sourceforge.net>.
  */
  */
 
 
+/* patch submitted by Vivian Bregier <Vivian.Bregier@imag.fr>
+ */
+UNUSUAL_DEV(  0x03eb, 0x2002, 0x0100, 0x0100,
+                "ATMEL",
+                "SND1 Storage",
+                US_SC_DEVICE, US_PR_DEVICE, NULL,
+                US_FL_IGNORE_RESIDUE),
+
 UNUSUAL_DEV(  0x03ee, 0x6901, 0x0000, 0x0100,
 UNUSUAL_DEV(  0x03ee, 0x6901, 0x0000, 0x0100,
 		"Mitsumi",
 		"Mitsumi",
 		"USB FDD",
 		"USB FDD",
@@ -994,6 +1002,13 @@ UNUSUAL_DEV(  0x1019, 0x0c55, 0x0000, 0x9999,
 		US_SC_DEVICE, US_PR_DEVICE, usb_stor_ucr61s2b_init,
 		US_SC_DEVICE, US_PR_DEVICE, usb_stor_ucr61s2b_init,
 		0 ),
 		0 ),
 
 
+/* Reported by Vilius Bilinkevicius <vilisas AT xxx DOT lt) */
+UNUSUAL_DEV(  0x132b, 0x000b, 0x0001, 0x0001,
+		"Minolta",
+		"Dimage Z10",
+		US_SC_DEVICE, US_PR_DEVICE, NULL,
+		0 ),
+
 /* Reported by Kotrla Vitezslav <kotrla@ceb.cz> */
 /* Reported by Kotrla Vitezslav <kotrla@ceb.cz> */
 UNUSUAL_DEV(  0x1370, 0x6828, 0x0110, 0x0110,
 UNUSUAL_DEV(  0x1370, 0x6828, 0x0110, 0x0110,
 		"SWISSBIT",
 		"SWISSBIT",

+ 4 - 2
drivers/video/i810/i810_main.c

@@ -1000,8 +1000,10 @@ static int i810_check_params(struct fb_var_screeninfo *var,
 
 
 	if (fb_validate_mode(var, info)) {
 	if (fb_validate_mode(var, info)) {
 		if (fb_get_mode(FB_MAXTIMINGS, 0, var, info)) {
 		if (fb_get_mode(FB_MAXTIMINGS, 0, var, info)) {
-			int default_sync = (hsync1-HFMIN)|(hsync2-HFMAX)
-					    |(vsync1-VFMIN)|(vsync2-VFMAX);
+			int default_sync = (info->monspecs.hfmin-HFMIN)
+						|(info->monspecs.hfmax-HFMAX)
+						|(info->monspecs.vfmin-VFMIN)
+						|(info->monspecs.vfmax-VFMAX);
 			printk("i810fb: invalid video mode%s\n",
 			printk("i810fb: invalid video mode%s\n",
 			    default_sync ? "" :
 			    default_sync ? "" :
 			    ". Specifying vsyncN/hsyncN parameters may help");
 			    ". Specifying vsyncN/hsyncN parameters may help");

+ 1 - 10
include/asm-alpha/signal.h

@@ -113,16 +113,7 @@ typedef unsigned long sigset_t;
 #define SIG_UNBLOCK        2	/* for unblocking signals */
 #define SIG_UNBLOCK        2	/* for unblocking signals */
 #define SIG_SETMASK        3	/* for setting the signal mask */
 #define SIG_SETMASK        3	/* for setting the signal mask */
 
 
-/* Type of a signal handler.  */
-typedef void __signalfn_t(int);
-typedef __signalfn_t __user *__sighandler_t;
-
-typedef void __restorefn_t(void);
-typedef __restorefn_t __user *__sigrestore_t;
-
-#define SIG_DFL	((__sighandler_t)0)	/* default signal handling */
-#define SIG_IGN	((__sighandler_t)1)	/* ignore signal */
-#define SIG_ERR	((__sighandler_t)-1)	/* error return from signal */
+#include <asm-generic/signal.h>
 
 
 #ifdef __KERNEL__
 #ifdef __KERNEL__
 struct osf_sigaction {
 struct osf_sigaction {

+ 1 - 14
include/asm-arm/signal.h

@@ -117,20 +117,7 @@ typedef unsigned long sigset_t;
 #define SA_IRQNOMASK		0x08000000
 #define SA_IRQNOMASK		0x08000000
 #endif
 #endif
 
 
-#define SIG_BLOCK          0	/* for blocking signals */
-#define SIG_UNBLOCK        1	/* for unblocking signals */
-#define SIG_SETMASK        2	/* for setting the signal mask */
-
-/* Type of a signal handler.  */
-typedef void __signalfn_t(int);
-typedef __signalfn_t __user *__sighandler_t;
-
-typedef void __restorefn_t(void);
-typedef __restorefn_t __user *__sigrestore_t;
-
-#define SIG_DFL	((__sighandler_t)0)	/* default signal handling */
-#define SIG_IGN	((__sighandler_t)1)	/* ignore signal */
-#define SIG_ERR	((__sighandler_t)-1)	/* error return from signal */
+#include <asm-generic/signal.h>
 
 
 #ifdef __KERNEL__
 #ifdef __KERNEL__
 struct old_sigaction {
 struct old_sigaction {

+ 1 - 10
include/asm-arm26/signal.h

@@ -117,16 +117,7 @@ typedef unsigned long sigset_t;
 #define SA_IRQNOMASK		0x08000000
 #define SA_IRQNOMASK		0x08000000
 #endif
 #endif
 
 
-#define SIG_BLOCK          0	/* for blocking signals */
-#define SIG_UNBLOCK        1	/* for unblocking signals */
-#define SIG_SETMASK        2	/* for setting the signal mask */
-
-/* Type of a signal handler.  */
-typedef void (*__sighandler_t)(int);
-
-#define SIG_DFL	((__sighandler_t)0)	/* default signal handling */
-#define SIG_IGN	((__sighandler_t)1)	/* ignore signal */
-#define SIG_ERR	((__sighandler_t)-1)	/* error return from signal */
+#include <asm-generic/signal.h>
 
 
 #ifdef __KERNEL__
 #ifdef __KERNEL__
 struct old_sigaction {
 struct old_sigaction {

+ 1 - 10
include/asm-cris/signal.h

@@ -108,16 +108,7 @@ typedef unsigned long sigset_t;
 #define MINSIGSTKSZ	2048
 #define MINSIGSTKSZ	2048
 #define SIGSTKSZ	8192
 #define SIGSTKSZ	8192
 
 
-#define SIG_BLOCK          0	/* for blocking signals */
-#define SIG_UNBLOCK        1	/* for unblocking signals */
-#define SIG_SETMASK        2	/* for setting the signal mask */
-
-/* Type of a signal handler.  */
-typedef void (*__sighandler_t)(int);
-
-#define SIG_DFL	((__sighandler_t)0)	/* default signal handling */
-#define SIG_IGN	((__sighandler_t)1)	/* ignore signal */
-#define SIG_ERR	((__sighandler_t)-1)	/* error return from signal */
+#include <asm-generic/signal.h>
 
 
 #ifdef __KERNEL__
 #ifdef __KERNEL__
 struct old_sigaction {
 struct old_sigaction {

+ 1 - 10
include/asm-frv/signal.h

@@ -107,16 +107,7 @@ typedef unsigned long sigset_t;
 #define MINSIGSTKSZ	2048
 #define MINSIGSTKSZ	2048
 #define SIGSTKSZ	8192
 #define SIGSTKSZ	8192
 
 
-#define SIG_BLOCK          0	/* for blocking signals */
-#define SIG_UNBLOCK        1	/* for unblocking signals */
-#define SIG_SETMASK        2	/* for setting the signal mask */
-
-/* Type of a signal handler.  */
-typedef void (*__sighandler_t)(int);
-
-#define SIG_DFL	((__sighandler_t)0)	/* default signal handling */
-#define SIG_IGN	((__sighandler_t)1)	/* ignore signal */
-#define SIG_ERR	((__sighandler_t)-1)	/* error return from signal */
+#include <asm-generic/signal.h>
 
 
 #ifdef __KERNEL__
 #ifdef __KERNEL__
 struct old_sigaction {
 struct old_sigaction {

+ 21 - 0
include/asm-generic/signal.h

@@ -0,0 +1,21 @@
+#ifndef SIG_BLOCK
+#define SIG_BLOCK          0	/* for blocking signals */
+#endif
+#ifndef SIG_UNBLOCK
+#define SIG_UNBLOCK        1	/* for unblocking signals */
+#endif
+#ifndef SIG_SETMASK
+#define SIG_SETMASK        2	/* for setting the signal mask */
+#endif
+
+#ifndef __ASSEMBLY__
+typedef void __signalfn_t(int);
+typedef __signalfn_t __user *__sighandler_t;
+
+typedef void __restorefn_t(void);
+typedef __restorefn_t __user *__sigrestore_t;
+
+#define SIG_DFL	((__force __sighandler_t)0)	/* default signal handling */
+#define SIG_IGN	((__force __sighandler_t)1)	/* ignore signal */
+#define SIG_ERR	((__force __sighandler_t)-1)	/* error return from signal */
+#endif

+ 1 - 10
include/asm-h8300/signal.h

@@ -107,16 +107,7 @@ typedef unsigned long sigset_t;
 #define MINSIGSTKSZ	2048
 #define MINSIGSTKSZ	2048
 #define SIGSTKSZ	8192
 #define SIGSTKSZ	8192
 
 
-#define SIG_BLOCK          0	/* for blocking signals */
-#define SIG_UNBLOCK        1	/* for unblocking signals */
-#define SIG_SETMASK        2	/* for setting the signal mask */
-
-/* Type of a signal handler.  */
-typedef void (*__sighandler_t)(int);
-
-#define SIG_DFL	((__sighandler_t)0)	/* default signal handling */
-#define SIG_IGN	((__sighandler_t)1)	/* ignore signal */
-#define SIG_ERR	((__sighandler_t)-1)	/* error return from signal */
+#include <asm-generic/signal.h>
 
 
 #ifdef __KERNEL__
 #ifdef __KERNEL__
 struct old_sigaction {
 struct old_sigaction {

+ 1 - 14
include/asm-i386/signal.h

@@ -110,20 +110,7 @@ typedef unsigned long sigset_t;
 #define MINSIGSTKSZ	2048
 #define MINSIGSTKSZ	2048
 #define SIGSTKSZ	8192
 #define SIGSTKSZ	8192
 
 
-#define SIG_BLOCK          0	/* for blocking signals */
-#define SIG_UNBLOCK        1	/* for unblocking signals */
-#define SIG_SETMASK        2	/* for setting the signal mask */
-
-/* Type of a signal handler.  */
-typedef void __signalfn_t(int);
-typedef __signalfn_t __user *__sighandler_t;
-
-typedef void __restorefn_t(void);
-typedef __restorefn_t __user *__sigrestore_t;
-
-#define SIG_DFL	((__sighandler_t)0)	/* default signal handling */
-#define SIG_IGN	((__sighandler_t)1)	/* ignore signal */
-#define SIG_ERR	((__sighandler_t)-1)	/* error return from signal */
+#include <asm-generic/signal.h>
 
 
 #ifdef __KERNEL__
 #ifdef __KERNEL__
 struct old_sigaction {
 struct old_sigaction {

+ 1 - 10
include/asm-ia64/signal.h

@@ -118,13 +118,7 @@
 
 
 #endif /* __KERNEL__ */
 #endif /* __KERNEL__ */
 
 
-#define SIG_BLOCK          0	/* for blocking signals */
-#define SIG_UNBLOCK        1	/* for unblocking signals */
-#define SIG_SETMASK        2	/* for setting the signal mask */
-
-#define SIG_DFL	((__sighandler_t)0)	/* default signal handling */
-#define SIG_IGN	((__sighandler_t)1)	/* ignore signal */
-#define SIG_ERR	((__sighandler_t)-1)	/* error return from signal */
+#include <asm-generic/signal.h>
 
 
 # ifndef __ASSEMBLY__
 # ifndef __ASSEMBLY__
 
 
@@ -133,9 +127,6 @@
 /* Avoid too many header ordering problems.  */
 /* Avoid too many header ordering problems.  */
 struct siginfo;
 struct siginfo;
 
 
-/* Type of a signal handler.  */
-typedef void __user (*__sighandler_t)(int);
-
 typedef struct sigaltstack {
 typedef struct sigaltstack {
 	void __user *ss_sp;
 	void __user *ss_sp;
 	int ss_flags;
 	int ss_flags;

+ 1 - 14
include/asm-m32r/signal.h

@@ -114,20 +114,7 @@ typedef unsigned long sigset_t;
 #define MINSIGSTKSZ	2048
 #define MINSIGSTKSZ	2048
 #define SIGSTKSZ	8192
 #define SIGSTKSZ	8192
 
 
-#define SIG_BLOCK          0	/* for blocking signals */
-#define SIG_UNBLOCK        1	/* for unblocking signals */
-#define SIG_SETMASK        2	/* for setting the signal mask */
-
-/* Type of a signal handler.  */
-typedef void __signalfn_t(int);
-typedef __signalfn_t __user *__sighandler_t;
-
-typedef void __restorefn_t(void);
-typedef __restorefn_t __user *__sigrestore_t;
-
-#define SIG_DFL	((__sighandler_t)0)	/* default signal handling */
-#define SIG_IGN	((__sighandler_t)1)	/* ignore signal */
-#define SIG_ERR	((__sighandler_t)-1)	/* error return from signal */
+#include <asm-generic/signal.h>
 
 
 #ifdef __KERNEL__
 #ifdef __KERNEL__
 struct old_sigaction {
 struct old_sigaction {

+ 3 - 12
include/asm-m68k/signal.h

@@ -105,29 +105,20 @@ typedef unsigned long sigset_t;
 #define MINSIGSTKSZ	2048
 #define MINSIGSTKSZ	2048
 #define SIGSTKSZ	8192
 #define SIGSTKSZ	8192
 
 
-#define SIG_BLOCK          0	/* for blocking signals */
-#define SIG_UNBLOCK        1	/* for unblocking signals */
-#define SIG_SETMASK        2	/* for setting the signal mask */
-
-/* Type of a signal handler.  */
-typedef void (*__sighandler_t)(int);
-
-#define SIG_DFL	((__sighandler_t)0)	/* default signal handling */
-#define SIG_IGN	((__sighandler_t)1)	/* ignore signal */
-#define SIG_ERR	((__sighandler_t)-1)	/* error return from signal */
+#include <asm-generic/signal.h>
 
 
 #ifdef __KERNEL__
 #ifdef __KERNEL__
 struct old_sigaction {
 struct old_sigaction {
 	__sighandler_t sa_handler;
 	__sighandler_t sa_handler;
 	old_sigset_t sa_mask;
 	old_sigset_t sa_mask;
 	unsigned long sa_flags;
 	unsigned long sa_flags;
-	void (*sa_restorer)(void);
+	__sigrestore_t sa_restorer;
 };
 };
 
 
 struct sigaction {
 struct sigaction {
 	__sighandler_t sa_handler;
 	__sighandler_t sa_handler;
 	unsigned long sa_flags;
 	unsigned long sa_flags;
-	void (*sa_restorer)(void);
+	__sigrestore_t sa_restorer;
 	sigset_t sa_mask;		/* mask last for extensibility */
 	sigset_t sa_mask;		/* mask last for extensibility */
 };
 };
 
 

+ 1 - 10
include/asm-m68knommu/signal.h

@@ -105,16 +105,7 @@ typedef unsigned long sigset_t;
 #define MINSIGSTKSZ	2048
 #define MINSIGSTKSZ	2048
 #define SIGSTKSZ	8192
 #define SIGSTKSZ	8192
 
 
-#define SIG_BLOCK          0	/* for blocking signals */
-#define SIG_UNBLOCK        1	/* for unblocking signals */
-#define SIG_SETMASK        2	/* for setting the signal mask */
-
-/* Type of a signal handler.  */
-typedef void (*__sighandler_t)(int);
-
-#define SIG_DFL	((__sighandler_t)0)	/* default signal handling */
-#define SIG_IGN	((__sighandler_t)1)	/* ignore signal */
-#define SIG_ERR	((__sighandler_t)-1)	/* error return from signal */
+#include <asm-generic/signal.h>
 
 
 #ifdef __KERNEL__
 #ifdef __KERNEL__
 struct old_sigaction {
 struct old_sigaction {

+ 1 - 8
include/asm-mips/signal.h

@@ -103,14 +103,7 @@ typedef unsigned long old_sigset_t;		/* at least 32 bits */
 #define SIG_SETMASK	3	/* for setting the signal mask */
 #define SIG_SETMASK	3	/* for setting the signal mask */
 #define SIG_SETMASK32	256	/* Goodie from SGI for BSD compatibility:
 #define SIG_SETMASK32	256	/* Goodie from SGI for BSD compatibility:
 				   set only the low 32 bit of the sigset.  */
 				   set only the low 32 bit of the sigset.  */
-
-/* Type of a signal handler.  */
-typedef void (*__sighandler_t)(int);
-
-/* Fake signal functions */
-#define SIG_DFL	((__sighandler_t)0)	/* default signal handling */
-#define SIG_IGN	((__sighandler_t)1)	/* ignore signal */
-#define SIG_ERR	((__sighandler_t)-1)	/* error return from signal */
+#include <asm-generic/signal.h>
 
 
 struct sigaction {
 struct sigaction {
 	unsigned int	sa_flags;
 	unsigned int	sa_flags;

+ 1 - 14
include/asm-ppc/signal.h

@@ -100,20 +100,7 @@ typedef struct {
 #define MINSIGSTKSZ	2048
 #define MINSIGSTKSZ	2048
 #define SIGSTKSZ	8192
 #define SIGSTKSZ	8192
 
 
-#define SIG_BLOCK          0	/* for blocking signals */
-#define SIG_UNBLOCK        1	/* for unblocking signals */
-#define SIG_SETMASK        2	/* for setting the signal mask */
-
-/* Type of a signal handler.  */
-typedef void __signalfn_t(int);
-typedef __signalfn_t __user *__sighandler_t;
-
-typedef void __restorefn_t(void);
-typedef __restorefn_t __user *__sigrestore_t;
-
-#define SIG_DFL	((__sighandler_t)0)	/* default signal handling */
-#define SIG_IGN	((__sighandler_t)1)	/* ignore signal */
-#define SIG_ERR	((__sighandler_t)-1)	/* error return from signal */
+#include <asm-generic/signal.h>
 
 
 struct old_sigaction {
 struct old_sigaction {
 	__sighandler_t sa_handler;
 	__sighandler_t sa_handler;

部分文件因文件數量過多而無法顯示