aboutsummaryrefslogtreecommitdiffstats
path: root/drivers
diff options
context:
space:
mode:
authorJeff Garzik <jeff@garzik.org>2006-03-01 14:45:47 -0500
committerJeff Garzik <jeff@garzik.org>2006-03-01 14:45:47 -0500
commitd2dbaad8555b9a078830ac1aab7ef7a37461c640 (patch)
tree6d455666df51db6a24834e6551e246e0c0d0d078 /drivers
parentcccc65a3b60edaf721cdee5a14f68ba009341822 (diff)
parent71efa38c0eef581c69c221ceb8645f61d1e93270 (diff)
Merge branch 'master'
Diffstat (limited to 'drivers')
-rw-r--r--drivers/char/sx.c10
-rw-r--r--drivers/char/synclink_gt.c2
-rw-r--r--drivers/char/tty_io.c2
-rw-r--r--drivers/ieee1394/video1394.c2
-rw-r--r--drivers/mtd/redboot.c28
-rw-r--r--drivers/net/8139cp.c37
-rw-r--r--drivers/net/sky2.c77
-rw-r--r--drivers/net/sky2.h1
-rw-r--r--drivers/net/tg3.c9
-rw-r--r--drivers/net/via-velocity.c3
-rw-r--r--drivers/pnp/card.c12
-rw-r--r--drivers/scsi/aha152x.c85
-rw-r--r--drivers/scsi/aha152x.h2
-rw-r--r--drivers/scsi/jazz_esp.c21
-rw-r--r--drivers/scsi/libata-core.c4
-rw-r--r--drivers/scsi/libata-scsi.c2
-rw-r--r--drivers/scsi/libata.h1
-rw-r--r--drivers/scsi/megaraid/megaraid_sas.c29
-rw-r--r--drivers/scsi/pcmcia/aha152x_stub.c4
-rw-r--r--drivers/scsi/scsi_error.c4
-rw-r--r--drivers/scsi/scsi_lib.c2
-rw-r--r--drivers/scsi/scsi_scan.c16
-rw-r--r--drivers/scsi/scsi_transport_fc.c3
-rw-r--r--drivers/scsi/sg.c2
-rw-r--r--drivers/scsi/sym53c8xx_2/sym_hipd.c2
-rw-r--r--drivers/serial/sunsu.c3
-rw-r--r--drivers/sn/Kconfig4
-rw-r--r--drivers/sn/ioc3.c11
-rw-r--r--drivers/usb/gadget/lh7a40x_udc.c6
-rw-r--r--drivers/usb/gadget/rndis.c11
-rw-r--r--drivers/usb/host/pci-quirks.c11
-rw-r--r--drivers/usb/input/hid-core.c2
-rw-r--r--drivers/usb/serial/ftdi_sio.c6
-rw-r--r--drivers/usb/serial/ftdi_sio.h10
-rw-r--r--drivers/usb/serial/visor.c3
-rw-r--r--drivers/usb/serial/visor.h3
-rw-r--r--drivers/usb/storage/unusual_devs.h7
37 files changed, 222 insertions, 215 deletions
diff --git a/drivers/char/sx.c b/drivers/char/sx.c
index 588e75ec1630..a6b4f02bdceb 100644
--- a/drivers/char/sx.c
+++ b/drivers/char/sx.c
@@ -1095,17 +1095,17 @@ static inline void sx_receive_chars (struct sx_port *port)
1095 1095
1096 sx_dprintk (SX_DEBUG_RECEIVE, "rxop=%d, c = %d.\n", rx_op, c); 1096 sx_dprintk (SX_DEBUG_RECEIVE, "rxop=%d, c = %d.\n", rx_op, c);
1097 1097
1098 /* Don't copy past the end of the hardware receive buffer */
1099 if (rx_op + c > 0x100) c = 0x100 - rx_op;
1100
1101 sx_dprintk (SX_DEBUG_RECEIVE, "c = %d.\n", c);
1102
1098 /* Don't copy more bytes than there is room for in the buffer */ 1103 /* Don't copy more bytes than there is room for in the buffer */
1099 1104
1100 c = tty_prepare_flip_string(tty, &rp, c); 1105 c = tty_prepare_flip_string(tty, &rp, c);
1101 1106
1102 sx_dprintk (SX_DEBUG_RECEIVE, "c = %d.\n", c); 1107 sx_dprintk (SX_DEBUG_RECEIVE, "c = %d.\n", c);
1103 1108
1104 /* Don't copy past the end of the hardware receive buffer */
1105 if (rx_op + c > 0x100) c = 0x100 - rx_op;
1106
1107 sx_dprintk (SX_DEBUG_RECEIVE, "c = %d.\n", c);
1108
1109 /* If for one reason or another, we can't copy more data, we're done! */ 1109 /* If for one reason or another, we can't copy more data, we're done! */
1110 if (c == 0) break; 1110 if (c == 0) break;
1111 1111
diff --git a/drivers/char/synclink_gt.c b/drivers/char/synclink_gt.c
index a85a60a93deb..b046390cd256 100644
--- a/drivers/char/synclink_gt.c
+++ b/drivers/char/synclink_gt.c
@@ -306,7 +306,7 @@ struct slgt_info {
306 int tx_active; 306 int tx_active;
307 307
308 unsigned char signals; /* serial signal states */ 308 unsigned char signals; /* serial signal states */
309 unsigned int init_error; /* initialization error */ 309 int init_error; /* initialization error */
310 310
311 unsigned char *tx_buf; 311 unsigned char *tx_buf;
312 int tx_count; 312 int tx_count;
diff --git a/drivers/char/tty_io.c b/drivers/char/tty_io.c
index e9bba94fc898..53d3d066554e 100644
--- a/drivers/char/tty_io.c
+++ b/drivers/char/tty_io.c
@@ -303,7 +303,7 @@ static struct tty_buffer *tty_buffer_find(struct tty_struct *tty, size_t size)
303 t->commit = 0; 303 t->commit = 0;
304 t->read = 0; 304 t->read = 0;
305 /* DEBUG ONLY */ 305 /* DEBUG ONLY */
306 memset(t->data, '*', size); 306/* memset(t->data, '*', size); */
307/* printk("Flip recycle %p\n", t); */ 307/* printk("Flip recycle %p\n", t); */
308 return t; 308 return t;
309 } 309 }
diff --git a/drivers/ieee1394/video1394.c b/drivers/ieee1394/video1394.c
index 39fb88309e8e..216dbbf1dc8e 100644
--- a/drivers/ieee1394/video1394.c
+++ b/drivers/ieee1394/video1394.c
@@ -744,7 +744,7 @@ static int __video1394_ioctl(struct file *file,
744 if (i == ISO_CHANNELS) { 744 if (i == ISO_CHANNELS) {
745 PRINT(KERN_ERR, ohci->host->id, 745 PRINT(KERN_ERR, ohci->host->id,
746 "No free channel found"); 746 "No free channel found");
747 return EAGAIN; 747 return -EAGAIN;
748 } 748 }
749 if (!(ohci->ISO_channel_usage & mask)) { 749 if (!(ohci->ISO_channel_usage & mask)) {
750 v.channel = i; 750 v.channel = i;
diff --git a/drivers/mtd/redboot.c b/drivers/mtd/redboot.c
index 7b7ca5ab5ae4..d01b6a9198e0 100644
--- a/drivers/mtd/redboot.c
+++ b/drivers/mtd/redboot.c
@@ -89,8 +89,34 @@ static int parse_redboot_partitions(struct mtd_info *master,
89 i = numslots; 89 i = numslots;
90 break; 90 break;
91 } 91 }
92 if (!memcmp(buf[i].name, "FIS directory", 14)) 92 if (!memcmp(buf[i].name, "FIS directory", 14)) {
93 /* This is apparently the FIS directory entry for the
94 * FIS directory itself. The FIS directory size is
95 * one erase block, if the buf[i].size field is
96 * swab32(erasesize) then we know we are looking at
97 * a byte swapped FIS directory - swap all the entries!
98 * (NOTE: this is 'size' not 'data_length', size is
99 * the full size of the entry.)
100 */
101 if (swab32(buf[i].size) == master->erasesize) {
102 int j;
103 for (j = 0; j < numslots && buf[j].name[0] != 0xff; ++j) {
104 /* The unsigned long fields were written with the
105 * wrong byte sex, name and pad have no byte sex.
106 */
107# define do_swab32(x) (x) = swab32(x)
108 do_swab32(buf[j].flash_base);
109 do_swab32(buf[j].mem_base);
110 do_swab32(buf[j].size);
111 do_swab32(buf[j].entry_point);
112 do_swab32(buf[j].data_length);
113 do_swab32(buf[j].desc_cksum);
114 do_swab32(buf[j].file_cksum);
115# undef do_swab32
116 }
117 }
93 break; 118 break;
119 }
94 } 120 }
95 if (i == numslots) { 121 if (i == numslots) {
96 /* Didn't find it */ 122 /* Didn't find it */
diff --git a/drivers/net/8139cp.c b/drivers/net/8139cp.c
index f822cd3025ff..dd410496aadb 100644
--- a/drivers/net/8139cp.c
+++ b/drivers/net/8139cp.c
@@ -1118,13 +1118,18 @@ err_out:
1118 return -ENOMEM; 1118 return -ENOMEM;
1119} 1119}
1120 1120
1121static void cp_init_rings_index (struct cp_private *cp)
1122{
1123 cp->rx_tail = 0;
1124 cp->tx_head = cp->tx_tail = 0;
1125}
1126
1121static int cp_init_rings (struct cp_private *cp) 1127static int cp_init_rings (struct cp_private *cp)
1122{ 1128{
1123 memset(cp->tx_ring, 0, sizeof(struct cp_desc) * CP_TX_RING_SIZE); 1129 memset(cp->tx_ring, 0, sizeof(struct cp_desc) * CP_TX_RING_SIZE);
1124 cp->tx_ring[CP_TX_RING_SIZE - 1].opts1 = cpu_to_le32(RingEnd); 1130 cp->tx_ring[CP_TX_RING_SIZE - 1].opts1 = cpu_to_le32(RingEnd);
1125 1131
1126 cp->rx_tail = 0; 1132 cp_init_rings_index(cp);
1127 cp->tx_head = cp->tx_tail = 0;
1128 1133
1129 return cp_refill_rx (cp); 1134 return cp_refill_rx (cp);
1130} 1135}
@@ -1886,30 +1891,30 @@ static int cp_suspend (struct pci_dev *pdev, pm_message_t state)
1886 1891
1887 spin_unlock_irqrestore (&cp->lock, flags); 1892 spin_unlock_irqrestore (&cp->lock, flags);
1888 1893
1889 if (cp->pdev && cp->wol_enabled) { 1894 pci_save_state(pdev);
1890 pci_save_state (cp->pdev); 1895 pci_enable_wake(pdev, pci_choose_state(pdev, state), cp->wol_enabled);
1891 cp_set_d3_state (cp); 1896 pci_set_power_state(pdev, pci_choose_state(pdev, state));
1892 }
1893 1897
1894 return 0; 1898 return 0;
1895} 1899}
1896 1900
1897static int cp_resume (struct pci_dev *pdev) 1901static int cp_resume (struct pci_dev *pdev)
1898{ 1902{
1899 struct net_device *dev; 1903 struct net_device *dev = pci_get_drvdata (pdev);
1900 struct cp_private *cp; 1904 struct cp_private *cp = netdev_priv(dev);
1901 unsigned long flags; 1905 unsigned long flags;
1902 1906
1903 dev = pci_get_drvdata (pdev); 1907 if (!netif_running(dev))
1904 cp = netdev_priv(dev); 1908 return 0;
1905 1909
1906 netif_device_attach (dev); 1910 netif_device_attach (dev);
1907 1911
1908 if (cp->pdev && cp->wol_enabled) { 1912 pci_set_power_state(pdev, PCI_D0);
1909 pci_set_power_state (cp->pdev, PCI_D0); 1913 pci_restore_state(pdev);
1910 pci_restore_state (cp->pdev); 1914 pci_enable_wake(pdev, PCI_D0, 0);
1911 } 1915
1912 1916 /* FIXME: sh*t may happen if the Rx ring buffer is depleted */
1917 cp_init_rings_index (cp);
1913 cp_init_hw (cp); 1918 cp_init_hw (cp);
1914 netif_start_queue (dev); 1919 netif_start_queue (dev);
1915 1920
diff --git a/drivers/net/sky2.c b/drivers/net/sky2.c
index ca8160d68229..72c1630977d6 100644
--- a/drivers/net/sky2.c
+++ b/drivers/net/sky2.c
@@ -96,10 +96,6 @@ static int copybreak __read_mostly = 256;
96module_param(copybreak, int, 0); 96module_param(copybreak, int, 0);
97MODULE_PARM_DESC(copybreak, "Receive copy threshold"); 97MODULE_PARM_DESC(copybreak, "Receive copy threshold");
98 98
99static int disable_msi = 0;
100module_param(disable_msi, int, 0);
101MODULE_PARM_DESC(disable_msi, "Disable Message Signaled Interrupt (MSI)");
102
103static const struct pci_device_id sky2_id_table[] = { 99static const struct pci_device_id sky2_id_table[] = {
104 { PCI_DEVICE(PCI_VENDOR_ID_SYSKONNECT, 0x9000) }, 100 { PCI_DEVICE(PCI_VENDOR_ID_SYSKONNECT, 0x9000) },
105 { PCI_DEVICE(PCI_VENDOR_ID_SYSKONNECT, 0x9E00) }, 101 { PCI_DEVICE(PCI_VENDOR_ID_SYSKONNECT, 0x9E00) },
@@ -3126,61 +3122,6 @@ static void __devinit sky2_show_addr(struct net_device *dev)
3126 dev->dev_addr[3], dev->dev_addr[4], dev->dev_addr[5]); 3122 dev->dev_addr[3], dev->dev_addr[4], dev->dev_addr[5]);
3127} 3123}
3128 3124
3129/* Handle software interrupt used during MSI test */
3130static irqreturn_t __devinit sky2_test_intr(int irq, void *dev_id,
3131 struct pt_regs *regs)
3132{
3133 struct sky2_hw *hw = dev_id;
3134 u32 status = sky2_read32(hw, B0_Y2_SP_ISRC2);
3135
3136 if (status == 0)
3137 return IRQ_NONE;
3138
3139 if (status & Y2_IS_IRQ_SW) {
3140 sky2_write8(hw, B0_CTST, CS_CL_SW_IRQ);
3141 hw->msi = 1;
3142 }
3143 sky2_write32(hw, B0_Y2_SP_ICR, 2);
3144
3145 sky2_read32(hw, B0_IMSK);
3146 return IRQ_HANDLED;
3147}
3148
3149/* Test interrupt path by forcing a a software IRQ */
3150static int __devinit sky2_test_msi(struct sky2_hw *hw)
3151{
3152 struct pci_dev *pdev = hw->pdev;
3153 int i, err;
3154
3155 sky2_write32(hw, B0_IMSK, Y2_IS_IRQ_SW);
3156
3157 err = request_irq(pdev->irq, sky2_test_intr, SA_SHIRQ, DRV_NAME, hw);
3158 if (err) {
3159 printk(KERN_ERR PFX "%s: cannot assign irq %d\n",
3160 pci_name(pdev), pdev->irq);
3161 return err;
3162 }
3163
3164 sky2_write8(hw, B0_CTST, CS_ST_SW_IRQ);
3165 wmb();
3166
3167 for (i = 0; i < 10; i++) {
3168 barrier();
3169 if (hw->msi)
3170 goto found;
3171 mdelay(1);
3172 }
3173
3174 err = -EOPNOTSUPP;
3175 sky2_write8(hw, B0_CTST, CS_CL_SW_IRQ);
3176 found:
3177 sky2_write32(hw, B0_IMSK, 0);
3178
3179 free_irq(pdev->irq, hw);
3180
3181 return err;
3182}
3183
3184static int __devinit sky2_probe(struct pci_dev *pdev, 3125static int __devinit sky2_probe(struct pci_dev *pdev,
3185 const struct pci_device_id *ent) 3126 const struct pci_device_id *ent)
3186{ 3127{
@@ -3302,20 +3243,6 @@ static int __devinit sky2_probe(struct pci_dev *pdev,
3302 } 3243 }
3303 } 3244 }
3304 3245
3305 if (!disable_msi && pci_enable_msi(pdev) == 0) {
3306 err = sky2_test_msi(hw);
3307 if (err == -EOPNOTSUPP) {
3308 /* MSI test failed, go back to INTx mode */
3309 printk(KERN_WARNING PFX "%s: No interrupt was generated using MSI, "
3310 "switching to INTx mode. Please report this failure to "
3311 "the PCI maintainer and include system chipset information.\n",
3312 pci_name(pdev));
3313 pci_disable_msi(pdev);
3314 }
3315 else if (err)
3316 goto err_out_unregister;
3317 }
3318
3319 err = request_irq(pdev->irq, sky2_intr, SA_SHIRQ | SA_SAMPLE_RANDOM, 3246 err = request_irq(pdev->irq, sky2_intr, SA_SHIRQ | SA_SAMPLE_RANDOM,
3320 DRV_NAME, hw); 3247 DRV_NAME, hw);
3321 if (err) { 3248 if (err) {
@@ -3332,8 +3259,6 @@ static int __devinit sky2_probe(struct pci_dev *pdev,
3332 return 0; 3259 return 0;
3333 3260
3334err_out_unregister: 3261err_out_unregister:
3335 if (hw->msi)
3336 pci_disable_msi(pdev);
3337 if (dev1) { 3262 if (dev1) {
3338 unregister_netdev(dev1); 3263 unregister_netdev(dev1);
3339 free_netdev(dev1); 3264 free_netdev(dev1);
@@ -3376,8 +3301,6 @@ static void __devexit sky2_remove(struct pci_dev *pdev)
3376 sky2_read8(hw, B0_CTST); 3301 sky2_read8(hw, B0_CTST);
3377 3302
3378 free_irq(pdev->irq, hw); 3303 free_irq(pdev->irq, hw);
3379 if (hw->msi)
3380 pci_disable_msi(pdev);
3381 pci_free_consistent(pdev, STATUS_LE_BYTES, hw->st_le, hw->st_dma); 3304 pci_free_consistent(pdev, STATUS_LE_BYTES, hw->st_le, hw->st_dma);
3382 pci_release_regions(pdev); 3305 pci_release_regions(pdev);
3383 pci_disable_device(pdev); 3306 pci_disable_device(pdev);
diff --git a/drivers/net/sky2.h b/drivers/net/sky2.h
index 3edb98075e0a..dce955c76f3c 100644
--- a/drivers/net/sky2.h
+++ b/drivers/net/sky2.h
@@ -1881,7 +1881,6 @@ struct sky2_hw {
1881 u32 intr_mask; 1881 u32 intr_mask;
1882 1882
1883 int pm_cap; 1883 int pm_cap;
1884 int msi;
1885 u8 chip_id; 1884 u8 chip_id;
1886 u8 chip_rev; 1885 u8 chip_rev;
1887 u8 copper; 1886 u8 copper;
diff --git a/drivers/net/tg3.c b/drivers/net/tg3.c
index e7dc653d5bd6..e8e92c853e89 100644
--- a/drivers/net/tg3.c
+++ b/drivers/net/tg3.c
@@ -9408,6 +9408,15 @@ static int __devinit tg3_is_sun_570X(struct tg3 *tp)
9408 return 0; 9408 return 0;
9409 if (venid == PCI_VENDOR_ID_SUN) 9409 if (venid == PCI_VENDOR_ID_SUN)
9410 return 1; 9410 return 1;
9411
9412 /* TG3 chips onboard the SunBlade-2500 don't have the
9413 * subsystem-vendor-id set to PCI_VENDOR_ID_SUN but they
9414 * are distinguishable from non-Sun variants by being
9415 * named "network" by the firmware. Non-Sun cards will
9416 * show up as being named "ethernet".
9417 */
9418 if (!strcmp(pcp->prom_name, "network"))
9419 return 1;
9411 } 9420 }
9412 return 0; 9421 return 0;
9413} 9422}
diff --git a/drivers/net/via-velocity.c b/drivers/net/via-velocity.c
index c2d5907dc8e0..ed1f837c8fda 100644
--- a/drivers/net/via-velocity.c
+++ b/drivers/net/via-velocity.c
@@ -1106,6 +1106,9 @@ static void velocity_free_rd_ring(struct velocity_info *vptr)
1106 1106
1107 for (i = 0; i < vptr->options.numrx; i++) { 1107 for (i = 0; i < vptr->options.numrx; i++) {
1108 struct velocity_rd_info *rd_info = &(vptr->rd_info[i]); 1108 struct velocity_rd_info *rd_info = &(vptr->rd_info[i]);
1109 struct rx_desc *rd = vptr->rd_ring + i;
1110
1111 memset(rd, 0, sizeof(*rd));
1109 1112
1110 if (!rd_info->skb) 1113 if (!rd_info->skb)
1111 continue; 1114 continue;
diff --git a/drivers/pnp/card.c b/drivers/pnp/card.c
index aaa568a3806e..b68eef251614 100644
--- a/drivers/pnp/card.c
+++ b/drivers/pnp/card.c
@@ -303,13 +303,11 @@ found:
303 down_write(&dev->dev.bus->subsys.rwsem); 303 down_write(&dev->dev.bus->subsys.rwsem);
304 dev->card_link = clink; 304 dev->card_link = clink;
305 dev->dev.driver = &drv->link.driver; 305 dev->dev.driver = &drv->link.driver;
306 if (drv->link.driver.probe) { 306 if (pnp_bus_type.probe(&dev->dev)) {
307 if (drv->link.driver.probe(&dev->dev)) { 307 dev->dev.driver = NULL;
308 dev->dev.driver = NULL; 308 dev->card_link = NULL;
309 dev->card_link = NULL; 309 up_write(&dev->dev.bus->subsys.rwsem);
310 up_write(&dev->dev.bus->subsys.rwsem); 310 return NULL;
311 return NULL;
312 }
313 } 311 }
314 device_bind_driver(&dev->dev); 312 device_bind_driver(&dev->dev);
315 up_write(&dev->dev.bus->subsys.rwsem); 313 up_write(&dev->dev.bus->subsys.rwsem);
diff --git a/drivers/scsi/aha152x.c b/drivers/scsi/aha152x.c
index cb2ee25f213f..531a1f9ceb51 100644
--- a/drivers/scsi/aha152x.c
+++ b/drivers/scsi/aha152x.c
@@ -1260,16 +1260,15 @@ static void free_hard_reset_SCs(struct Scsi_Host *shpnt, Scsi_Cmnd **SCs)
1260 * Reset the bus 1260 * Reset the bus
1261 * 1261 *
1262 */ 1262 */
1263static int aha152x_bus_reset(Scsi_Cmnd *SCpnt) 1263static int aha152x_bus_reset_host(struct Scsi_Host *shpnt)
1264{ 1264{
1265 struct Scsi_Host *shpnt = SCpnt->device->host;
1266 unsigned long flags; 1265 unsigned long flags;
1267 1266
1268 DO_LOCK(flags); 1267 DO_LOCK(flags);
1269 1268
1270#if defined(AHA152X_DEBUG) 1269#if defined(AHA152X_DEBUG)
1271 if(HOSTDATA(shpnt)->debug & debug_eh) { 1270 if(HOSTDATA(shpnt)->debug & debug_eh) {
1272 printk(DEBUG_LEAD "aha152x_bus_reset(%p)", CMDINFO(SCpnt), SCpnt); 1271 printk(KERN_DEBUG "scsi%d: bus reset", shpnt->host_no);
1273 show_queues(shpnt); 1272 show_queues(shpnt);
1274 } 1273 }
1275#endif 1274#endif
@@ -1277,14 +1276,14 @@ static int aha152x_bus_reset(Scsi_Cmnd *SCpnt)
1277 free_hard_reset_SCs(shpnt, &ISSUE_SC); 1276 free_hard_reset_SCs(shpnt, &ISSUE_SC);
1278 free_hard_reset_SCs(shpnt, &DISCONNECTED_SC); 1277 free_hard_reset_SCs(shpnt, &DISCONNECTED_SC);
1279 1278
1280 DPRINTK(debug_eh, DEBUG_LEAD "resetting bus\n", CMDINFO(SCpnt)); 1279 DPRINTK(debug_eh, KERN_DEBUG "scsi%d: resetting bus\n", shpnt->host_no);
1281 1280
1282 SETPORT(SCSISEQ, SCSIRSTO); 1281 SETPORT(SCSISEQ, SCSIRSTO);
1283 mdelay(256); 1282 mdelay(256);
1284 SETPORT(SCSISEQ, 0); 1283 SETPORT(SCSISEQ, 0);
1285 mdelay(DELAY); 1284 mdelay(DELAY);
1286 1285
1287 DPRINTK(debug_eh, DEBUG_LEAD "bus resetted\n", CMDINFO(SCpnt)); 1286 DPRINTK(debug_eh, KERN_DEBUG "scsi%d: bus resetted\n", shpnt->host_no);
1288 1287
1289 setup_expected_interrupts(shpnt); 1288 setup_expected_interrupts(shpnt);
1290 if(HOSTDATA(shpnt)->commands==0) 1289 if(HOSTDATA(shpnt)->commands==0)
@@ -1295,6 +1294,14 @@ static int aha152x_bus_reset(Scsi_Cmnd *SCpnt)
1295 return SUCCESS; 1294 return SUCCESS;
1296} 1295}
1297 1296
1297/*
1298 * Reset the bus
1299 *
1300 */
1301static int aha152x_bus_reset(Scsi_Cmnd *SCpnt)
1302{
1303 return aha152x_bus_reset_host(SCpnt->device->host);
1304}
1298 1305
1299/* 1306/*
1300 * Restore default values to the AIC-6260 registers and reset the fifos 1307 * Restore default values to the AIC-6260 registers and reset the fifos
@@ -1337,23 +1344,28 @@ static void reset_ports(struct Scsi_Host *shpnt)
1337 * Reset the host (bus and controller) 1344 * Reset the host (bus and controller)
1338 * 1345 *
1339 */ 1346 */
1340int aha152x_host_reset(Scsi_Cmnd * SCpnt) 1347int aha152x_host_reset_host(struct Scsi_Host *shpnt)
1341{ 1348{
1342#if defined(AHA152X_DEBUG) 1349 DPRINTK(debug_eh, KERN_DEBUG "scsi%d: host reset\n", shpnt->host_no);
1343 struct Scsi_Host *shpnt = SCpnt->device->host;
1344#endif
1345
1346 DPRINTK(debug_eh, DEBUG_LEAD "aha152x_host_reset(%p)\n", CMDINFO(SCpnt), SCpnt);
1347 1350
1348 aha152x_bus_reset(SCpnt); 1351 aha152x_bus_reset_host(shpnt);
1349 1352
1350 DPRINTK(debug_eh, DEBUG_LEAD "resetting ports\n", CMDINFO(SCpnt)); 1353 DPRINTK(debug_eh, KERN_DEBUG "scsi%d: resetting ports\n", shpnt->host_no);
1351 reset_ports(SCpnt->device->host); 1354 reset_ports(shpnt);
1352 1355
1353 return SUCCESS; 1356 return SUCCESS;
1354} 1357}
1355 1358
1356/* 1359/*
1360 * Reset the host (bus and controller)
1361 *
1362 */
1363static int aha152x_host_reset(Scsi_Cmnd *SCpnt)
1364{
1365 return aha152x_host_reset_host(SCpnt->device->host);
1366}
1367
1368/*
1357 * Return the "logical geometry" 1369 * Return the "logical geometry"
1358 * 1370 *
1359 */ 1371 */
@@ -1431,22 +1443,18 @@ static void run(void)
1431{ 1443{
1432 int i; 1444 int i;
1433 for (i = 0; i<ARRAY_SIZE(aha152x_host); i++) { 1445 for (i = 0; i<ARRAY_SIZE(aha152x_host); i++) {
1434 struct Scsi_Host *shpnt = aha152x_host[i]; 1446 is_complete(aha152x_host[i]);
1435 if (shpnt && HOSTDATA(shpnt)->service) {
1436 HOSTDATA(shpnt)->service=0;
1437 is_complete(shpnt);
1438 }
1439 } 1447 }
1440} 1448}
1441 1449
1442/* 1450/*
1443 * Interrupts handler 1451 * Interrupt handler
1444 * 1452 *
1445 */ 1453 */
1446
1447static irqreturn_t intr(int irqno, void *dev_id, struct pt_regs *regs) 1454static irqreturn_t intr(int irqno, void *dev_id, struct pt_regs *regs)
1448{ 1455{
1449 struct Scsi_Host *shpnt = lookup_irq(irqno); 1456 struct Scsi_Host *shpnt = lookup_irq(irqno);
1457 unsigned long flags;
1450 unsigned char rev, dmacntrl0; 1458 unsigned char rev, dmacntrl0;
1451 1459
1452 if (!shpnt) { 1460 if (!shpnt) {
@@ -1472,23 +1480,23 @@ static irqreturn_t intr(int irqno, void *dev_id, struct pt_regs *regs)
1472 if ((rev == 0xFF) && (dmacntrl0 == 0xFF)) 1480 if ((rev == 0xFF) && (dmacntrl0 == 0xFF))
1473 return IRQ_NONE; 1481 return IRQ_NONE;
1474 1482
1483 if( TESTLO(DMASTAT, INTSTAT) )
1484 return IRQ_NONE;
1485
1475 /* no more interrupts from the controller, while we're busy. 1486 /* no more interrupts from the controller, while we're busy.
1476 INTEN is restored by the BH handler */ 1487 INTEN is restored by the BH handler */
1477 CLRBITS(DMACNTRL0, INTEN); 1488 CLRBITS(DMACNTRL0, INTEN);
1478 1489
1479#if 0 1490 DO_LOCK(flags);
1480 /* check if there is already something to be 1491 if( HOSTDATA(shpnt)->service==0 ) {
1481 serviced; should not happen */ 1492 HOSTDATA(shpnt)->service=1;
1482 if(HOSTDATA(shpnt)->service) { 1493
1483 printk(KERN_ERR "aha152x%d: lost interrupt (%d)\n", HOSTNO, HOSTDATA(shpnt)->service); 1494 /* Poke the BH handler */
1484 show_queues(shpnt); 1495 INIT_WORK(&aha152x_tq, (void *) run, NULL);
1496 schedule_work(&aha152x_tq);
1485 } 1497 }
1486#endif 1498 DO_UNLOCK(flags);
1487 1499
1488 /* Poke the BH handler */
1489 HOSTDATA(shpnt)->service++;
1490 INIT_WORK(&aha152x_tq, (void *) run, NULL);
1491 schedule_work(&aha152x_tq);
1492 return IRQ_HANDLED; 1500 return IRQ_HANDLED;
1493} 1501}
1494 1502
@@ -2527,7 +2535,18 @@ static void is_complete(struct Scsi_Host *shpnt)
2527 unsigned long flags; 2535 unsigned long flags;
2528 int pending; 2536 int pending;
2529 2537
2538 if(!shpnt)
2539 return;
2540
2530 DO_LOCK(flags); 2541 DO_LOCK(flags);
2542
2543 if( HOSTDATA(shpnt)->service==0 ) {
2544 DO_UNLOCK(flags);
2545 return;
2546 }
2547
2548 HOSTDATA(shpnt)->service = 0;
2549
2531 if(HOSTDATA(shpnt)->in_intr) { 2550 if(HOSTDATA(shpnt)->in_intr) {
2532 DO_UNLOCK(flags); 2551 DO_UNLOCK(flags);
2533 /* aha152x_error never returns.. */ 2552 /* aha152x_error never returns.. */
diff --git a/drivers/scsi/aha152x.h b/drivers/scsi/aha152x.h
index d277613af29b..d2add24d02a3 100644
--- a/drivers/scsi/aha152x.h
+++ b/drivers/scsi/aha152x.h
@@ -332,6 +332,6 @@ struct aha152x_setup {
332 332
333struct Scsi_Host *aha152x_probe_one(struct aha152x_setup *); 333struct Scsi_Host *aha152x_probe_one(struct aha152x_setup *);
334void aha152x_release(struct Scsi_Host *); 334void aha152x_release(struct Scsi_Host *);
335int aha152x_host_reset(Scsi_Cmnd *); 335int aha152x_host_reset_host(struct Scsi_Host *);
336 336
337#endif /* _AHA152X_H */ 337#endif /* _AHA152X_H */
diff --git a/drivers/scsi/jazz_esp.c b/drivers/scsi/jazz_esp.c
index 23728d1c980c..fcd304e11c26 100644
--- a/drivers/scsi/jazz_esp.c
+++ b/drivers/scsi/jazz_esp.c
@@ -65,27 +65,6 @@ static int jazz_esp_release(struct Scsi_Host *shost)
65 return 0; 65 return 0;
66} 66}
67 67
68static struct scsi_host_template driver_template = {
69 .proc_name = "jazz_esp",
70 .proc_info = &esp_proc_info,
71 .name = "ESP 100/100a/200",
72 .detect = jazz_esp_detect,
73 .slave_alloc = esp_slave_alloc,
74 .slave_destroy = esp_slave_destroy,
75 .release = jazz_esp_release,
76 .info = esp_info,
77 .queuecommand = esp_queue,
78 .eh_abort_handler = esp_abort,
79 .eh_bus_reset_handler = esp_reset,
80 .can_queue = 7,
81 .this_id = 7,
82 .sg_tablesize = SG_ALL,
83 .cmd_per_lun = 1,
84 .use_clustering = DISABLE_CLUSTERING,
85};
86
87#include "scsi_module.c"
88
89/***************************************************************** Detection */ 68/***************************************************************** Detection */
90static int jazz_esp_detect(struct scsi_host_template *tpnt) 69static int jazz_esp_detect(struct scsi_host_template *tpnt)
91{ 70{
diff --git a/drivers/scsi/libata-core.c b/drivers/scsi/libata-core.c
index ab3257a6b860..17c1df435cc8 100644
--- a/drivers/scsi/libata-core.c
+++ b/drivers/scsi/libata-core.c
@@ -78,6 +78,10 @@ int atapi_enabled = 0;
78module_param(atapi_enabled, int, 0444); 78module_param(atapi_enabled, int, 0444);
79MODULE_PARM_DESC(atapi_enabled, "Enable discovery of ATAPI devices (0=off, 1=on)"); 79MODULE_PARM_DESC(atapi_enabled, "Enable discovery of ATAPI devices (0=off, 1=on)");
80 80
81int libata_fua = 0;
82module_param_named(fua, libata_fua, int, 0444);
83MODULE_PARM_DESC(fua, "FUA support (0=off, 1=on)");
84
81MODULE_AUTHOR("Jeff Garzik"); 85MODULE_AUTHOR("Jeff Garzik");
82MODULE_DESCRIPTION("Library module for ATA devices"); 86MODULE_DESCRIPTION("Library module for ATA devices");
83MODULE_LICENSE("GPL"); 87MODULE_LICENSE("GPL");
diff --git a/drivers/scsi/libata-scsi.c b/drivers/scsi/libata-scsi.c
index 538784e65cdc..d0bd94abb413 100644
--- a/drivers/scsi/libata-scsi.c
+++ b/drivers/scsi/libata-scsi.c
@@ -1803,6 +1803,8 @@ static int ata_dev_supports_fua(u16 *id)
1803{ 1803{
1804 unsigned char model[41], fw[9]; 1804 unsigned char model[41], fw[9];
1805 1805
1806 if (!libata_fua)
1807 return 0;
1806 if (!ata_id_has_fua(id)) 1808 if (!ata_id_has_fua(id))
1807 return 0; 1809 return 0;
1808 1810
diff --git a/drivers/scsi/libata.h b/drivers/scsi/libata.h
index 9d76923a2253..d822eba05f3c 100644
--- a/drivers/scsi/libata.h
+++ b/drivers/scsi/libata.h
@@ -41,6 +41,7 @@ struct ata_scsi_args {
41 41
42/* libata-core.c */ 42/* libata-core.c */
43extern int atapi_enabled; 43extern int atapi_enabled;
44extern int libata_fua;
44extern struct ata_queued_cmd *ata_qc_new_init(struct ata_port *ap, 45extern struct ata_queued_cmd *ata_qc_new_init(struct ata_port *ap,
45 struct ata_device *dev); 46 struct ata_device *dev);
46extern int ata_rwcmd_protocol(struct ata_queued_cmd *qc); 47extern int ata_rwcmd_protocol(struct ata_queued_cmd *qc);
diff --git a/drivers/scsi/megaraid/megaraid_sas.c b/drivers/scsi/megaraid/megaraid_sas.c
index 7de267e14458..4f39dd01936d 100644
--- a/drivers/scsi/megaraid/megaraid_sas.c
+++ b/drivers/scsi/megaraid/megaraid_sas.c
@@ -793,6 +793,20 @@ megasas_queue_command(struct scsi_cmnd *scmd, void (*done) (struct scsi_cmnd *))
793 return 0; 793 return 0;
794} 794}
795 795
796static int megasas_slave_configure(struct scsi_device *sdev)
797{
798 /*
799 * Don't export physical disk devices to the disk driver.
800 *
801 * FIXME: Currently we don't export them to the midlayer at all.
802 * That will be fixed once LSI engineers have audited the
803 * firmware for possible issues.
804 */
805 if (sdev->channel < MEGASAS_MAX_PD_CHANNELS && sdev->type == TYPE_DISK)
806 return -ENXIO;
807 return 0;
808}
809
796/** 810/**
797 * megasas_wait_for_outstanding - Wait for all outstanding cmds 811 * megasas_wait_for_outstanding - Wait for all outstanding cmds
798 * @instance: Adapter soft state 812 * @instance: Adapter soft state
@@ -943,6 +957,7 @@ static struct scsi_host_template megasas_template = {
943 .module = THIS_MODULE, 957 .module = THIS_MODULE,
944 .name = "LSI Logic SAS based MegaRAID driver", 958 .name = "LSI Logic SAS based MegaRAID driver",
945 .proc_name = "megaraid_sas", 959 .proc_name = "megaraid_sas",
960 .slave_configure = megasas_slave_configure,
946 .queuecommand = megasas_queue_command, 961 .queuecommand = megasas_queue_command,
947 .eh_device_reset_handler = megasas_reset_device, 962 .eh_device_reset_handler = megasas_reset_device,
948 .eh_bus_reset_handler = megasas_reset_bus_host, 963 .eh_bus_reset_handler = megasas_reset_bus_host,
@@ -1071,20 +1086,6 @@ megasas_complete_cmd(struct megasas_instance *instance, struct megasas_cmd *cmd,
1071 break; 1086 break;
1072 } 1087 }
1073 1088
1074 /*
1075 * Don't export physical disk devices to mid-layer.
1076 */
1077 if (!MEGASAS_IS_LOGICAL(cmd->scmd) &&
1078 (hdr->cmd_status == MFI_STAT_OK) &&
1079 (cmd->scmd->cmnd[0] == INQUIRY)) {
1080
1081 if (((*(u8 *) cmd->scmd->request_buffer) & 0x1F) ==
1082 TYPE_DISK) {
1083 cmd->scmd->result = DID_BAD_TARGET << 16;
1084 exception = 1;
1085 }
1086 }
1087
1088 case MFI_CMD_LD_READ: 1089 case MFI_CMD_LD_READ:
1089 case MFI_CMD_LD_WRITE: 1090 case MFI_CMD_LD_WRITE:
1090 1091
diff --git a/drivers/scsi/pcmcia/aha152x_stub.c b/drivers/scsi/pcmcia/aha152x_stub.c
index 0c9edb7051f4..5609847e254a 100644
--- a/drivers/scsi/pcmcia/aha152x_stub.c
+++ b/drivers/scsi/pcmcia/aha152x_stub.c
@@ -275,10 +275,8 @@ static int aha152x_resume(struct pcmcia_device *dev)
275 275
276 link->state &= ~DEV_SUSPEND; 276 link->state &= ~DEV_SUSPEND;
277 if (link->state & DEV_CONFIG) { 277 if (link->state & DEV_CONFIG) {
278 Scsi_Cmnd tmp;
279 pcmcia_request_configuration(link->handle, &link->conf); 278 pcmcia_request_configuration(link->handle, &link->conf);
280 tmp.device->host = info->host; 279 aha152x_host_reset_host(info->host);
281 aha152x_host_reset(&tmp);
282 } 280 }
283 281
284 return 0; 282 return 0;
diff --git a/drivers/scsi/scsi_error.c b/drivers/scsi/scsi_error.c
index 50f8057be75d..5d169a2881b9 100644
--- a/drivers/scsi/scsi_error.c
+++ b/drivers/scsi/scsi_error.c
@@ -1308,7 +1308,7 @@ int scsi_decide_disposition(struct scsi_cmnd *scmd)
1308 * the request was not marked fast fail. Note that above, 1308 * the request was not marked fast fail. Note that above,
1309 * even if the request is marked fast fail, we still requeue 1309 * even if the request is marked fast fail, we still requeue
1310 * for queue congestion conditions (QUEUE_FULL or BUSY) */ 1310 * for queue congestion conditions (QUEUE_FULL or BUSY) */
1311 if ((++scmd->retries) < scmd->allowed 1311 if ((++scmd->retries) <= scmd->allowed
1312 && !blk_noretry_request(scmd->request)) { 1312 && !blk_noretry_request(scmd->request)) {
1313 return NEEDS_RETRY; 1313 return NEEDS_RETRY;
1314 } else { 1314 } else {
@@ -1433,7 +1433,7 @@ void scsi_eh_flush_done_q(struct list_head *done_q)
1433 list_del_init(&scmd->eh_entry); 1433 list_del_init(&scmd->eh_entry);
1434 if (scsi_device_online(scmd->device) && 1434 if (scsi_device_online(scmd->device) &&
1435 !blk_noretry_request(scmd->request) && 1435 !blk_noretry_request(scmd->request) &&
1436 (++scmd->retries < scmd->allowed)) { 1436 (++scmd->retries <= scmd->allowed)) {
1437 SCSI_LOG_ERROR_RECOVERY(3, printk("%s: flush" 1437 SCSI_LOG_ERROR_RECOVERY(3, printk("%s: flush"
1438 " retry cmd: %p\n", 1438 " retry cmd: %p\n",
1439 current->comm, 1439 current->comm,
diff --git a/drivers/scsi/scsi_lib.c b/drivers/scsi/scsi_lib.c
index 4362dcde74af..701a328f7beb 100644
--- a/drivers/scsi/scsi_lib.c
+++ b/drivers/scsi/scsi_lib.c
@@ -1498,7 +1498,7 @@ static void scsi_kill_request(struct request *req, request_queue_t *q)
1498static void scsi_softirq_done(struct request *rq) 1498static void scsi_softirq_done(struct request *rq)
1499{ 1499{
1500 struct scsi_cmnd *cmd = rq->completion_data; 1500 struct scsi_cmnd *cmd = rq->completion_data;
1501 unsigned long wait_for = cmd->allowed * cmd->timeout_per_command; 1501 unsigned long wait_for = (cmd->allowed + 1) * cmd->timeout_per_command;
1502 int disposition; 1502 int disposition;
1503 1503
1504 INIT_LIST_HEAD(&cmd->eh_entry); 1504 INIT_LIST_HEAD(&cmd->eh_entry);
diff --git a/drivers/scsi/scsi_scan.c b/drivers/scsi/scsi_scan.c
index 5acb83ca5ae5..f9ecc3dea7df 100644
--- a/drivers/scsi/scsi_scan.c
+++ b/drivers/scsi/scsi_scan.c
@@ -752,8 +752,20 @@ static int scsi_add_lun(struct scsi_device *sdev, char *inq_result, int *bflags)
752 752
753 transport_configure_device(&sdev->sdev_gendev); 753 transport_configure_device(&sdev->sdev_gendev);
754 754
755 if (sdev->host->hostt->slave_configure) 755 if (sdev->host->hostt->slave_configure) {
756 sdev->host->hostt->slave_configure(sdev); 756 int ret = sdev->host->hostt->slave_configure(sdev);
757 if (ret) {
758 /*
759 * if LLDD reports slave not present, don't clutter
760 * console with alloc failure messages
761 */
762 if (ret != -ENXIO) {
763 sdev_printk(KERN_ERR, sdev,
764 "failed to configure device\n");
765 }
766 return SCSI_SCAN_NO_RESPONSE;
767 }
768 }
757 769
758 /* 770 /*
759 * Ok, the device is now all set up, we can 771 * Ok, the device is now all set up, we can
diff --git a/drivers/scsi/scsi_transport_fc.c b/drivers/scsi/scsi_transport_fc.c
index f2c9acf11bd0..929032e370db 100644
--- a/drivers/scsi/scsi_transport_fc.c
+++ b/drivers/scsi/scsi_transport_fc.c
@@ -1498,8 +1498,7 @@ fc_remote_port_add(struct Scsi_Host *shost, int channel,
1498 } 1498 }
1499 1499
1500 /* Search the bindings array */ 1500 /* Search the bindings array */
1501 if (likely((ids->roles & FC_RPORT_ROLE_FCP_TARGET) && 1501 if (fc_host_tgtid_bind_type(shost) != FC_TGTID_BIND_NONE) {
1502 (fc_host_tgtid_bind_type(shost) != FC_TGTID_BIND_NONE))) {
1503 1502
1504 /* search for a matching consistent binding */ 1503 /* search for a matching consistent binding */
1505 1504
diff --git a/drivers/scsi/sg.c b/drivers/scsi/sg.c
index 2a547538d444..5a0a19322d01 100644
--- a/drivers/scsi/sg.c
+++ b/drivers/scsi/sg.c
@@ -2162,7 +2162,7 @@ sg_link_reserve(Sg_fd * sfp, Sg_request * srp, int size)
2162 2162
2163 srp->res_used = 1; 2163 srp->res_used = 1;
2164 SCSI_LOG_TIMEOUT(4, printk("sg_link_reserve: size=%d\n", size)); 2164 SCSI_LOG_TIMEOUT(4, printk("sg_link_reserve: size=%d\n", size));
2165 rem = size = (size + 1) & (~1); /* round to even for aha1542 */ 2165 rem = size;
2166 2166
2167 for (k = 0; k < rsv_schp->k_use_sg; ++k, ++sg) { 2167 for (k = 0; k < rsv_schp->k_use_sg; ++k, ++sg) {
2168 num = sg->length; 2168 num = sg->length;
diff --git a/drivers/scsi/sym53c8xx_2/sym_hipd.c b/drivers/scsi/sym53c8xx_2/sym_hipd.c
index f4854c33f48d..2627000ca653 100644
--- a/drivers/scsi/sym53c8xx_2/sym_hipd.c
+++ b/drivers/scsi/sym53c8xx_2/sym_hipd.c
@@ -919,6 +919,8 @@ static int sym_prepare_setting(struct Scsi_Host *shost, struct sym_hcb *np, stru
919 919
920 tp->usrflags |= (SYM_DISC_ENABLED | SYM_TAGS_ENABLED); 920 tp->usrflags |= (SYM_DISC_ENABLED | SYM_TAGS_ENABLED);
921 tp->usrtags = SYM_SETUP_MAX_TAG; 921 tp->usrtags = SYM_SETUP_MAX_TAG;
922 tp->usr_width = np->maxwide;
923 tp->usr_period = 9;
922 924
923 sym_nvram_setup_target(tp, i, nvram); 925 sym_nvram_setup_target(tp, i, nvram);
924 926
diff --git a/drivers/serial/sunsu.c b/drivers/serial/sunsu.c
index 308704566948..4e453fa966ae 100644
--- a/drivers/serial/sunsu.c
+++ b/drivers/serial/sunsu.c
@@ -299,13 +299,10 @@ static void sunsu_start_tx(struct uart_port *port)
299static void sunsu_stop_rx(struct uart_port *port) 299static void sunsu_stop_rx(struct uart_port *port)
300{ 300{
301 struct uart_sunsu_port *up = (struct uart_sunsu_port *) port; 301 struct uart_sunsu_port *up = (struct uart_sunsu_port *) port;
302 unsigned long flags;
303 302
304 spin_lock_irqsave(&up->port.lock, flags);
305 up->ier &= ~UART_IER_RLSI; 303 up->ier &= ~UART_IER_RLSI;
306 up->port.read_status_mask &= ~UART_LSR_DR; 304 up->port.read_status_mask &= ~UART_LSR_DR;
307 serial_out(up, UART_IER, up->ier); 305 serial_out(up, UART_IER, up->ier);
308 spin_unlock_irqrestore(&up->port.lock, flags);
309} 306}
310 307
311static void sunsu_enable_ms(struct uart_port *port) 308static void sunsu_enable_ms(struct uart_port *port)
diff --git a/drivers/sn/Kconfig b/drivers/sn/Kconfig
index d95265b187a3..a34731625877 100644
--- a/drivers/sn/Kconfig
+++ b/drivers/sn/Kconfig
@@ -3,10 +3,11 @@
3# 3#
4 4
5menu "SN Devices" 5menu "SN Devices"
6 depends on SGI_SN
6 7
7config SGI_IOC4 8config SGI_IOC4
8 tristate "SGI IOC4 Base IO support" 9 tristate "SGI IOC4 Base IO support"
9 depends on (IA64_GENERIC || IA64_SGI_SN2) && MMTIMER 10 depends on MMTIMER
10 default m 11 default m
11 ---help--- 12 ---help---
12 This option enables basic support for the SGI IOC4-based Base IO 13 This option enables basic support for the SGI IOC4-based Base IO
@@ -19,7 +20,6 @@ config SGI_IOC4
19 20
20config SGI_IOC3 21config SGI_IOC3
21 tristate "SGI IOC3 Base IO support" 22 tristate "SGI IOC3 Base IO support"
22 depends on (IA64_GENERIC || IA64_SGI_SN2)
23 default m 23 default m
24 ---help--- 24 ---help---
25 This option enables basic support for the SGI IOC3-based Base IO 25 This option enables basic support for the SGI IOC3-based Base IO
diff --git a/drivers/sn/ioc3.c b/drivers/sn/ioc3.c
index 12357e1fa558..93449a1a0065 100644
--- a/drivers/sn/ioc3.c
+++ b/drivers/sn/ioc3.c
@@ -62,7 +62,7 @@ static int nic_reset(struct ioc3_driver_data *idd)
62 return presence; 62 return presence;
63} 63}
64 64
65static inline int nic_read_bit(struct ioc3_driver_data *idd) 65static int nic_read_bit(struct ioc3_driver_data *idd)
66{ 66{
67 int result; 67 int result;
68 unsigned long flags; 68 unsigned long flags;
@@ -77,7 +77,7 @@ static inline int nic_read_bit(struct ioc3_driver_data *idd)
77 return result; 77 return result;
78} 78}
79 79
80static inline void nic_write_bit(struct ioc3_driver_data *idd, int bit) 80static void nic_write_bit(struct ioc3_driver_data *idd, int bit)
81{ 81{
82 if (bit) 82 if (bit)
83 writel(mcr_pack(6, 110), &idd->vma->mcr); 83 writel(mcr_pack(6, 110), &idd->vma->mcr);
@@ -371,8 +371,7 @@ static void probe_nic(struct ioc3_driver_data *idd)
371 371
372/* Interrupts */ 372/* Interrupts */
373 373
374static inline void 374static void write_ireg(struct ioc3_driver_data *idd, uint32_t val, int which)
375write_ireg(struct ioc3_driver_data *idd, uint32_t val, int which)
376{ 375{
377 unsigned long flags; 376 unsigned long flags;
378 377
@@ -735,14 +734,12 @@ static int ioc3_probe(struct pci_dev *pdev, const struct pci_device_id *pci_id)
735 } 734 }
736 735
737 /* Add this IOC3 to all submodules */ 736 /* Add this IOC3 to all submodules */
738 read_lock(&ioc3_submodules_lock);
739 for(id=0;id<IOC3_MAX_SUBMODULES;id++) 737 for(id=0;id<IOC3_MAX_SUBMODULES;id++)
740 if(ioc3_submodules[id] && ioc3_submodules[id]->probe) { 738 if(ioc3_submodules[id] && ioc3_submodules[id]->probe) {
741 idd->active[id] = 1; 739 idd->active[id] = 1;
742 idd->active[id] = !ioc3_submodules[id]->probe 740 idd->active[id] = !ioc3_submodules[id]->probe
743 (ioc3_submodules[id], idd); 741 (ioc3_submodules[id], idd);
744 } 742 }
745 read_unlock(&ioc3_submodules_lock);
746 743
747 printk(KERN_INFO "IOC3 Master Driver loaded for %s\n", pci_name(pdev)); 744 printk(KERN_INFO "IOC3 Master Driver loaded for %s\n", pci_name(pdev));
748 745
@@ -767,7 +764,6 @@ static void ioc3_remove(struct pci_dev *pdev)
767 idd = pci_get_drvdata(pdev); 764 idd = pci_get_drvdata(pdev);
768 765
769 /* Remove this IOC3 from all submodules */ 766 /* Remove this IOC3 from all submodules */
770 read_lock(&ioc3_submodules_lock);
771 for(id=0;id<IOC3_MAX_SUBMODULES;id++) 767 for(id=0;id<IOC3_MAX_SUBMODULES;id++)
772 if(idd->active[id]) { 768 if(idd->active[id]) {
773 if(ioc3_submodules[id] && ioc3_submodules[id]->remove) 769 if(ioc3_submodules[id] && ioc3_submodules[id]->remove)
@@ -781,7 +777,6 @@ static void ioc3_remove(struct pci_dev *pdev)
781 pci_name(pdev)); 777 pci_name(pdev));
782 idd->active[id] = 0; 778 idd->active[id] = 0;
783 } 779 }
784 read_unlock(&ioc3_submodules_lock);
785 780
786 /* Clear and disable all IRQs */ 781 /* Clear and disable all IRQs */
787 write_ireg(idd, ~0, IOC3_W_IEC); 782 write_ireg(idd, ~0, IOC3_W_IEC);
diff --git a/drivers/usb/gadget/lh7a40x_udc.c b/drivers/usb/gadget/lh7a40x_udc.c
index e02fea5a5433..1a362c5e7f3d 100644
--- a/drivers/usb/gadget/lh7a40x_udc.c
+++ b/drivers/usb/gadget/lh7a40x_udc.c
@@ -1062,11 +1062,11 @@ static int lh7a40x_ep_enable(struct usb_ep *_ep,
1062 ep->pio_irqs = 0; 1062 ep->pio_irqs = 0;
1063 ep->ep.maxpacket = le16_to_cpu(desc->wMaxPacketSize); 1063 ep->ep.maxpacket = le16_to_cpu(desc->wMaxPacketSize);
1064 1064
1065 spin_unlock_irqrestore(&ep->dev->lock, flags);
1066
1065 /* Reset halt state (does flush) */ 1067 /* Reset halt state (does flush) */
1066 lh7a40x_set_halt(_ep, 0); 1068 lh7a40x_set_halt(_ep, 0);
1067 1069
1068 spin_unlock_irqrestore(&ep->dev->lock, flags);
1069
1070 DEBUG("%s: enabled %s\n", __FUNCTION__, _ep->name); 1070 DEBUG("%s: enabled %s\n", __FUNCTION__, _ep->name);
1071 return 0; 1071 return 0;
1072} 1072}
@@ -1775,6 +1775,7 @@ static void lh7a40x_ep0_setup(struct lh7a40x_udc *dev, u32 csr)
1775 break; 1775 break;
1776 1776
1777 qep = &dev->ep[ep_num]; 1777 qep = &dev->ep[ep_num];
1778 spin_unlock(&dev->lock);
1778 if (ctrl.bRequest == USB_REQ_SET_FEATURE) { 1779 if (ctrl.bRequest == USB_REQ_SET_FEATURE) {
1779 DEBUG_SETUP("SET_FEATURE (%d)\n", 1780 DEBUG_SETUP("SET_FEATURE (%d)\n",
1780 ep_num); 1781 ep_num);
@@ -1784,6 +1785,7 @@ static void lh7a40x_ep0_setup(struct lh7a40x_udc *dev, u32 csr)
1784 ep_num); 1785 ep_num);
1785 lh7a40x_set_halt(&qep->ep, 0); 1786 lh7a40x_set_halt(&qep->ep, 0);
1786 } 1787 }
1788 spin_lock(&dev->lock);
1787 usb_set_index(0); 1789 usb_set_index(0);
1788 1790
1789 /* Reply with a ZLP on next IN token */ 1791 /* Reply with a ZLP on next IN token */
diff --git a/drivers/usb/gadget/rndis.c b/drivers/usb/gadget/rndis.c
index 9689efeb364c..6d6eaad73968 100644
--- a/drivers/usb/gadget/rndis.c
+++ b/drivers/usb/gadget/rndis.c
@@ -853,11 +853,14 @@ static int rndis_query_response (int configNr, rndis_query_msg_type *buf)
853 // DEBUG("%s: OID = %08X\n", __FUNCTION__, cpu_to_le32(buf->OID)); 853 // DEBUG("%s: OID = %08X\n", __FUNCTION__, cpu_to_le32(buf->OID));
854 if (!rndis_per_dev_params [configNr].dev) return -ENOTSUPP; 854 if (!rndis_per_dev_params [configNr].dev) return -ENOTSUPP;
855 855
856 /* 856 /*
857 * we need more memory: 857 * we need more memory:
858 * oid_supported_list is the largest answer 858 * gen_ndis_query_resp expects enough space for
859 * rndis_query_cmplt_type followed by data.
860 * oid_supported_list is the largest data reply
859 */ 861 */
860 r = rndis_add_response (configNr, sizeof (oid_supported_list)); 862 r = rndis_add_response (configNr,
863 sizeof (oid_supported_list) + sizeof(rndis_query_cmplt_type));
861 if (!r) 864 if (!r)
862 return -ENOMEM; 865 return -ENOMEM;
863 resp = (rndis_query_cmplt_type *) r->buf; 866 resp = (rndis_query_cmplt_type *) r->buf;
diff --git a/drivers/usb/host/pci-quirks.c b/drivers/usb/host/pci-quirks.c
index 118288d94423..9e81c26313f9 100644
--- a/drivers/usb/host/pci-quirks.c
+++ b/drivers/usb/host/pci-quirks.c
@@ -260,12 +260,13 @@ static void __devinit quirk_usb_disable_ehci(struct pci_dev *pdev)
260 offset + EHCI_USBLEGCTLSTS, 260 offset + EHCI_USBLEGCTLSTS,
261 val | EHCI_USBLEGCTLSTS_SOOE); 261 val | EHCI_USBLEGCTLSTS_SOOE);
262#endif 262#endif
263 }
264 263
265 /* always say Linux will own the hardware 264 /* some systems get upset if this semaphore is
266 * by setting EHCI_USBLEGSUP_OS. 265 * set for any other reason than forcing a BIOS
267 */ 266 * handoff..
268 pci_write_config_byte(pdev, offset + 3, 1); 267 */
268 pci_write_config_byte(pdev, offset + 3, 1);
269 }
269 270
270 /* if boot firmware now owns EHCI, spin till 271 /* if boot firmware now owns EHCI, spin till
271 * it hands it over. 272 * it hands it over.
diff --git a/drivers/usb/input/hid-core.c b/drivers/usb/input/hid-core.c
index 772478086bd3..07a012f88772 100644
--- a/drivers/usb/input/hid-core.c
+++ b/drivers/usb/input/hid-core.c
@@ -1407,6 +1407,7 @@ void hid_init_reports(struct hid_device *hid)
1407#define USB_VENDOR_ID_WISEGROUP 0x0925 1407#define USB_VENDOR_ID_WISEGROUP 0x0925
1408#define USB_DEVICE_ID_1_PHIDGETSERVO_20 0x8101 1408#define USB_DEVICE_ID_1_PHIDGETSERVO_20 0x8101
1409#define USB_DEVICE_ID_4_PHIDGETSERVO_20 0x8104 1409#define USB_DEVICE_ID_4_PHIDGETSERVO_20 0x8104
1410#define USB_DEVICE_ID_DUAL_USB_JOYPAD 0x8866
1410 1411
1411#define USB_VENDOR_ID_CODEMERCS 0x07c0 1412#define USB_VENDOR_ID_CODEMERCS 0x07c0
1412#define USB_DEVICE_ID_CODEMERCS_IOW40 0x1500 1413#define USB_DEVICE_ID_CODEMERCS_IOW40 0x1500
@@ -1577,6 +1578,7 @@ static const struct hid_blacklist {
1577 { USB_VENDOR_ID_CHICONY, USB_DEVICE_ID_CHICONY_USBHUB_KB, HID_QUIRK_NOGET}, 1578 { USB_VENDOR_ID_CHICONY, USB_DEVICE_ID_CHICONY_USBHUB_KB, HID_QUIRK_NOGET},
1578 { USB_VENDOR_ID_HP, USB_DEVICE_ID_HP_USBHUB_KB, HID_QUIRK_NOGET }, 1579 { USB_VENDOR_ID_HP, USB_DEVICE_ID_HP_USBHUB_KB, HID_QUIRK_NOGET },
1579 { USB_VENDOR_ID_TANGTOP, USB_DEVICE_ID_TANGTOP_USBPS2, HID_QUIRK_NOGET }, 1580 { USB_VENDOR_ID_TANGTOP, USB_DEVICE_ID_TANGTOP_USBPS2, HID_QUIRK_NOGET },
1581 { USB_VENDOR_ID_WISEGROUP, USB_DEVICE_ID_DUAL_USB_JOYPAD, HID_QUIRK_NOGET | HID_QUIRK_MULTI_INPUT },
1580 1582
1581 { USB_VENDOR_ID_APPLE, USB_DEVICE_ID_APPLE_POWERMOUSE, HID_QUIRK_2WHEEL_POWERMOUSE }, 1583 { USB_VENDOR_ID_APPLE, USB_DEVICE_ID_APPLE_POWERMOUSE, HID_QUIRK_2WHEEL_POWERMOUSE },
1582 { USB_VENDOR_ID_A4TECH, USB_DEVICE_ID_A4TECH_WCP32PU, HID_QUIRK_2WHEEL_MOUSE_HACK_7 }, 1584 { USB_VENDOR_ID_A4TECH, USB_DEVICE_ID_A4TECH_WCP32PU, HID_QUIRK_2WHEEL_MOUSE_HACK_7 },
diff --git a/drivers/usb/serial/ftdi_sio.c b/drivers/usb/serial/ftdi_sio.c
index f2b4ca8692d8..c145e1ed8429 100644
--- a/drivers/usb/serial/ftdi_sio.c
+++ b/drivers/usb/serial/ftdi_sio.c
@@ -469,8 +469,14 @@ static struct usb_device_id id_table_combined [] = {
469 { USB_DEVICE(FTDI_VID, XSENS_CONVERTER_7_PID) }, 469 { USB_DEVICE(FTDI_VID, XSENS_CONVERTER_7_PID) },
470 { USB_DEVICE(MOBILITY_VID, MOBILITY_USB_SERIAL_PID) }, 470 { USB_DEVICE(MOBILITY_VID, MOBILITY_USB_SERIAL_PID) },
471 { USB_DEVICE(FTDI_VID, FTDI_ACTIVE_ROBOTS_PID) }, 471 { USB_DEVICE(FTDI_VID, FTDI_ACTIVE_ROBOTS_PID) },
472 { USB_DEVICE(FTDI_VID, FTDI_MHAM_KW_PID) },
473 { USB_DEVICE(FTDI_VID, FTDI_MHAM_YS_PID) },
472 { USB_DEVICE(FTDI_VID, FTDI_MHAM_Y6_PID) }, 474 { USB_DEVICE(FTDI_VID, FTDI_MHAM_Y6_PID) },
473 { USB_DEVICE(FTDI_VID, FTDI_MHAM_Y8_PID) }, 475 { USB_DEVICE(FTDI_VID, FTDI_MHAM_Y8_PID) },
476 { USB_DEVICE(FTDI_VID, FTDI_MHAM_IC_PID) },
477 { USB_DEVICE(FTDI_VID, FTDI_MHAM_DB9_PID) },
478 { USB_DEVICE(FTDI_VID, FTDI_MHAM_RS232_PID) },
479 { USB_DEVICE(FTDI_VID, FTDI_MHAM_Y9_PID) },
474 { USB_DEVICE(FTDI_VID, FTDI_TERATRONIK_VCP_PID) }, 480 { USB_DEVICE(FTDI_VID, FTDI_TERATRONIK_VCP_PID) },
475 { USB_DEVICE(FTDI_VID, FTDI_TERATRONIK_D2XX_PID) }, 481 { USB_DEVICE(FTDI_VID, FTDI_TERATRONIK_D2XX_PID) },
476 { USB_DEVICE(EVOLUTION_VID, EVOLUTION_ER1_PID) }, 482 { USB_DEVICE(EVOLUTION_VID, EVOLUTION_ER1_PID) },
diff --git a/drivers/usb/serial/ftdi_sio.h b/drivers/usb/serial/ftdi_sio.h
index ca40f16370f1..bdef3b8c731f 100644
--- a/drivers/usb/serial/ftdi_sio.h
+++ b/drivers/usb/serial/ftdi_sio.h
@@ -333,10 +333,18 @@
333 333
334/* 334/*
335 * microHAM product IDs (http://www.microham.com). 335 * microHAM product IDs (http://www.microham.com).
336 * Submitted by Justin Burket (KL1RL) <zorton@jtan.com>. 336 * Submitted by Justin Burket (KL1RL) <zorton@jtan.com>
337 * and Mike Studer (K6EEP) <k6eep@hamsoftware.org>.
338 * Ian Abbott <abbotti@mev.co.uk> added a few more from the driver INF file.
337 */ 339 */
340#define FTDI_MHAM_KW_PID 0xEEE8 /* USB-KW interface */
341#define FTDI_MHAM_YS_PID 0xEEE9 /* USB-YS interface */
338#define FTDI_MHAM_Y6_PID 0xEEEA /* USB-Y6 interface */ 342#define FTDI_MHAM_Y6_PID 0xEEEA /* USB-Y6 interface */
339#define FTDI_MHAM_Y8_PID 0xEEEB /* USB-Y8 interface */ 343#define FTDI_MHAM_Y8_PID 0xEEEB /* USB-Y8 interface */
344#define FTDI_MHAM_IC_PID 0xEEEC /* USB-IC interface */
345#define FTDI_MHAM_DB9_PID 0xEEED /* USB-DB9 interface */
346#define FTDI_MHAM_RS232_PID 0xEEEE /* USB-RS232 interface */
347#define FTDI_MHAM_Y9_PID 0xEEEF /* USB-Y9 interface */
340 348
341/* 349/*
342 * Active Robots product ids. 350 * Active Robots product ids.
diff --git a/drivers/usb/serial/visor.c b/drivers/usb/serial/visor.c
index bce3d55affd8..11a48d874752 100644
--- a/drivers/usb/serial/visor.c
+++ b/drivers/usb/serial/visor.c
@@ -69,6 +69,8 @@ static struct usb_device_id id_table [] = {
69 .driver_info = (kernel_ulong_t)&palm_os_4_probe }, 69 .driver_info = (kernel_ulong_t)&palm_os_4_probe },
70 { USB_DEVICE(HANDSPRING_VENDOR_ID, HANDSPRING_TREO600_ID), 70 { USB_DEVICE(HANDSPRING_VENDOR_ID, HANDSPRING_TREO600_ID),
71 .driver_info = (kernel_ulong_t)&palm_os_4_probe }, 71 .driver_info = (kernel_ulong_t)&palm_os_4_probe },
72 { USB_DEVICE(GSPDA_VENDOR_ID, GSPDA_XPLORE_M68_ID),
73 .driver_info = (kernel_ulong_t)&palm_os_4_probe },
72 { USB_DEVICE(PALM_VENDOR_ID, PALM_M500_ID), 74 { USB_DEVICE(PALM_VENDOR_ID, PALM_M500_ID),
73 .driver_info = (kernel_ulong_t)&palm_os_4_probe }, 75 .driver_info = (kernel_ulong_t)&palm_os_4_probe },
74 { USB_DEVICE(PALM_VENDOR_ID, PALM_M505_ID), 76 { USB_DEVICE(PALM_VENDOR_ID, PALM_M505_ID),
@@ -139,6 +141,7 @@ static struct usb_device_id id_table_combined [] = {
139 { USB_DEVICE(HANDSPRING_VENDOR_ID, HANDSPRING_VISOR_ID) }, 141 { USB_DEVICE(HANDSPRING_VENDOR_ID, HANDSPRING_VISOR_ID) },
140 { USB_DEVICE(HANDSPRING_VENDOR_ID, HANDSPRING_TREO_ID) }, 142 { USB_DEVICE(HANDSPRING_VENDOR_ID, HANDSPRING_TREO_ID) },
141 { USB_DEVICE(HANDSPRING_VENDOR_ID, HANDSPRING_TREO600_ID) }, 143 { USB_DEVICE(HANDSPRING_VENDOR_ID, HANDSPRING_TREO600_ID) },
144 { USB_DEVICE(GSPDA_VENDOR_ID, GSPDA_XPLORE_M68_ID) },
142 { USB_DEVICE(PALM_VENDOR_ID, PALM_M500_ID) }, 145 { USB_DEVICE(PALM_VENDOR_ID, PALM_M500_ID) },
143 { USB_DEVICE(PALM_VENDOR_ID, PALM_M505_ID) }, 146 { USB_DEVICE(PALM_VENDOR_ID, PALM_M505_ID) },
144 { USB_DEVICE(PALM_VENDOR_ID, PALM_M515_ID) }, 147 { USB_DEVICE(PALM_VENDOR_ID, PALM_M515_ID) },
diff --git a/drivers/usb/serial/visor.h b/drivers/usb/serial/visor.h
index b84d1cb4c693..765118d83fb6 100644
--- a/drivers/usb/serial/visor.h
+++ b/drivers/usb/serial/visor.h
@@ -36,6 +36,9 @@
36#define PALM_ZIRE_ID 0x0070 36#define PALM_ZIRE_ID 0x0070
37#define PALM_M100_ID 0x0080 37#define PALM_M100_ID 0x0080
38 38
39#define GSPDA_VENDOR_ID 0x115e
40#define GSPDA_XPLORE_M68_ID 0xf100
41
39#define SONY_VENDOR_ID 0x054C 42#define SONY_VENDOR_ID 0x054C
40#define SONY_CLIE_3_5_ID 0x0038 43#define SONY_CLIE_3_5_ID 0x0038
41#define SONY_CLIE_4_0_ID 0x0066 44#define SONY_CLIE_4_0_ID 0x0066
diff --git a/drivers/usb/storage/unusual_devs.h b/drivers/usb/storage/unusual_devs.h
index e71c5ca1a07b..31ca92056c27 100644
--- a/drivers/usb/storage/unusual_devs.h
+++ b/drivers/usb/storage/unusual_devs.h
@@ -753,6 +753,13 @@ UNUSUAL_DEV( 0x0693, 0x0005, 0x0100, 0x0100,
753 "Flashgate", 753 "Flashgate",
754 US_SC_SCSI, US_PR_BULK, NULL, 0 ), 754 US_SC_SCSI, US_PR_BULK, NULL, 0 ),
755 755
756/* Reported by David Hamilton <niftimusmaximus@lycos.com> */
757UNUSUAL_DEV( 0x069b, 0x3004, 0x0001, 0x0001,
758 "Thomson Multimedia Inc.",
759 "RCA RD1080 MP3 Player",
760 US_SC_DEVICE, US_PR_DEVICE, NULL,
761 US_FL_FIX_CAPACITY ),
762
756UNUSUAL_DEV( 0x0781, 0x0001, 0x0200, 0x0200, 763UNUSUAL_DEV( 0x0781, 0x0001, 0x0200, 0x0200,
757 "Sandisk", 764 "Sandisk",
758 "ImageMate SDDR-05a", 765 "ImageMate SDDR-05a",