aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/message/i2o/pci.c
diff options
context:
space:
mode:
authorMarkus Lidel <Markus.Lidel@shadowconnect.com>2005-06-24 01:02:19 -0400
committerLinus Torvalds <torvalds@ppc970.osdl.org>2005-06-24 03:05:28 -0400
commitb2aaee33fbb354a2f08121aa1c1be55841102761 (patch)
tree7567ca61aaf5eed8bb1acd01cd87aa235b854fd4 /drivers/message/i2o/pci.c
parentf10378fff658f61307496e0ae00095041725cf07 (diff)
[PATCH] I2O: Adaptec specific SG_IO access, firmware access through sysfs and 2400A workaround
Changes: - Provide SG_IO access to BLOCK and EXECUTIVE class on Adaptec controllers - Use PRIVATE messages in SCSI-OSM because on some controllers normal SCSI class commands like READ or READ CAPACITY cause errors - Use new DMA and SG list creation function - Added workaround to limit sectors per request for Adaptec 2400A controllers Signed-off-by: Markus Lidel <Markus.Lidel@shadowconnect.com> Signed-off-by: Andrew Morton <akpm@osdl.org> Signed-off-by: Linus Torvalds <torvalds@osdl.org>
Diffstat (limited to 'drivers/message/i2o/pci.c')
-rw-r--r--drivers/message/i2o/pci.c22
1 files changed, 22 insertions, 0 deletions
diff --git a/drivers/message/i2o/pci.c b/drivers/message/i2o/pci.c
index a499af096a68..964fe481849e 100644
--- a/drivers/message/i2o/pci.c
+++ b/drivers/message/i2o/pci.c
@@ -362,11 +362,33 @@ static int __devinit i2o_pci_probe(struct pci_dev *pdev,
362 c->promise = 1; 362 c->promise = 1;
363 } 363 }
364 364
365 if (pdev->subsystem_vendor == PCI_VENDOR_ID_DPT)
366 c->adaptec = 1;
367
365 /* Cards that go bananas if you quiesce them before you reset them. */ 368 /* Cards that go bananas if you quiesce them before you reset them. */
366 if (pdev->vendor == PCI_VENDOR_ID_DPT) { 369 if (pdev->vendor == PCI_VENDOR_ID_DPT) {
367 c->no_quiesce = 1; 370 c->no_quiesce = 1;
368 if (pdev->device == 0xa511) 371 if (pdev->device == 0xa511)
369 c->raptor = 1; 372 c->raptor = 1;
373
374 if (pdev->subsystem_device == 0xc05a) {
375 c->limit_sectors = 1;
376 printk(KERN_INFO
377 "%s: limit sectors per request to %d\n", c->name,
378 I2O_MAX_SECTORS_LIMITED);
379 }
380#ifdef CONFIG_I2O_EXT_ADAPTEC_DMA64
381 if (sizeof(dma_addr_t) > 4) {
382 if (pci_set_dma_mask(pdev, DMA_64BIT_MASK))
383 printk(KERN_INFO "%s: 64-bit DMA unavailable\n",
384 c->name);
385 else {
386 c->pae_support = 1;
387 printk(KERN_INFO "%s: using 64-bit DMA\n",
388 c->name);
389 }
390 }
391#endif
370 } 392 }
371 393
372 if ((rc = i2o_pci_alloc(c))) { 394 if ((rc = i2o_pci_alloc(c))) {