diff options
author | Markus Lidel <Markus.Lidel@shadowconnect.com> | 2005-06-24 01:02:19 -0400 |
---|---|---|
committer | Linus Torvalds <torvalds@ppc970.osdl.org> | 2005-06-24 03:05:28 -0400 |
commit | b2aaee33fbb354a2f08121aa1c1be55841102761 (patch) | |
tree | 7567ca61aaf5eed8bb1acd01cd87aa235b854fd4 /drivers/message/i2o/pci.c | |
parent | f10378fff658f61307496e0ae00095041725cf07 (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.c | 22 |
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))) { |