diff options
author | Bartlomiej Zolnierkiewicz <bzolnier@gmail.com> | 2007-07-09 17:17:58 -0400 |
---|---|---|
committer | Bartlomiej Zolnierkiewicz <bzolnier@gmail.com> | 2007-07-09 17:17:58 -0400 |
commit | 49521f97ccd3c2bf6e71a91cea8fe65d170fa4fb (patch) | |
tree | f61c34da6092f2f1a97a78da567afc59ad40850b /drivers/ide/pci/serverworks.c | |
parent | 75b1d97535327d0428c6bffd9d5407e65546fd5d (diff) |
ide: add short cables support
This patch allows users to override both host and device side cable detection
with "ideX=ata66" kernel parameter. Thanks to this it should be now possible
to use UDMA > 2 modes on systems (laptops mainly) which use short 40-pin cable
instead of 80-pin one.
Next patches add automatic detection of some systems using short cables.
Changes:
* Rename hwif->udma_four to hwif->cbl and make it u8.
* Convert all existing users accordingly (use ATA_CBL_* defines while at it).
* Add ATA_CBL_PATA40_SHORT support to ide-iops.c:eighty_ninty_three().
* Use ATA_CBL_PATA40_SHORT for "ideX=ata66" kernel parameter.
Signed-off-by: Bartlomiej Zolnierkiewicz <bzolnier@gmail.com>
Reviewed-by: Sergei Shtylyov <sshtylyov@ru.mvista.com>
Diffstat (limited to 'drivers/ide/pci/serverworks.c')
-rw-r--r-- | drivers/ide/pci/serverworks.c | 26 |
1 files changed, 13 insertions, 13 deletions
diff --git a/drivers/ide/pci/serverworks.c b/drivers/ide/pci/serverworks.c index 09a7aedf63ac..1371b5bf6bf0 100644 --- a/drivers/ide/pci/serverworks.c +++ b/drivers/ide/pci/serverworks.c | |||
@@ -329,9 +329,9 @@ static unsigned int __devinit init_chipset_svwks (struct pci_dev *dev, const cha | |||
329 | return dev->irq; | 329 | return dev->irq; |
330 | } | 330 | } |
331 | 331 | ||
332 | static unsigned int __devinit ata66_svwks_svwks (ide_hwif_t *hwif) | 332 | static u8 __devinit ata66_svwks_svwks(ide_hwif_t *hwif) |
333 | { | 333 | { |
334 | return 1; | 334 | return ATA_CBL_PATA80; |
335 | } | 335 | } |
336 | 336 | ||
337 | /* On Dell PowerEdge servers with a CSB5/CSB6, the top two bits | 337 | /* On Dell PowerEdge servers with a CSB5/CSB6, the top two bits |
@@ -341,7 +341,7 @@ static unsigned int __devinit ata66_svwks_svwks (ide_hwif_t *hwif) | |||
341 | * Bit 14 clear = primary IDE channel does not have 80-pin cable. | 341 | * Bit 14 clear = primary IDE channel does not have 80-pin cable. |
342 | * Bit 14 set = primary IDE channel has 80-pin cable. | 342 | * Bit 14 set = primary IDE channel has 80-pin cable. |
343 | */ | 343 | */ |
344 | static unsigned int __devinit ata66_svwks_dell (ide_hwif_t *hwif) | 344 | static u8 __devinit ata66_svwks_dell(ide_hwif_t *hwif) |
345 | { | 345 | { |
346 | struct pci_dev *dev = hwif->pci_dev; | 346 | struct pci_dev *dev = hwif->pci_dev; |
347 | if (dev->subsystem_vendor == PCI_VENDOR_ID_DELL && | 347 | if (dev->subsystem_vendor == PCI_VENDOR_ID_DELL && |
@@ -349,8 +349,8 @@ static unsigned int __devinit ata66_svwks_dell (ide_hwif_t *hwif) | |||
349 | (dev->device == PCI_DEVICE_ID_SERVERWORKS_CSB5IDE || | 349 | (dev->device == PCI_DEVICE_ID_SERVERWORKS_CSB5IDE || |
350 | dev->device == PCI_DEVICE_ID_SERVERWORKS_CSB6IDE)) | 350 | dev->device == PCI_DEVICE_ID_SERVERWORKS_CSB6IDE)) |
351 | return ((1 << (hwif->channel + 14)) & | 351 | return ((1 << (hwif->channel + 14)) & |
352 | dev->subsystem_device) ? 1 : 0; | 352 | dev->subsystem_device) ? ATA_CBL_PATA80 : ATA_CBL_PATA40; |
353 | return 0; | 353 | return ATA_CBL_PATA40; |
354 | } | 354 | } |
355 | 355 | ||
356 | /* Sun Cobalt Alpine hardware avoids the 80-pin cable | 356 | /* Sun Cobalt Alpine hardware avoids the 80-pin cable |
@@ -359,18 +359,18 @@ static unsigned int __devinit ata66_svwks_dell (ide_hwif_t *hwif) | |||
359 | * | 359 | * |
360 | * WARNING: this only works on Alpine hardware! | 360 | * WARNING: this only works on Alpine hardware! |
361 | */ | 361 | */ |
362 | static unsigned int __devinit ata66_svwks_cobalt (ide_hwif_t *hwif) | 362 | static u8 __devinit ata66_svwks_cobalt(ide_hwif_t *hwif) |
363 | { | 363 | { |
364 | struct pci_dev *dev = hwif->pci_dev; | 364 | struct pci_dev *dev = hwif->pci_dev; |
365 | if (dev->subsystem_vendor == PCI_VENDOR_ID_SUN && | 365 | if (dev->subsystem_vendor == PCI_VENDOR_ID_SUN && |
366 | dev->vendor == PCI_VENDOR_ID_SERVERWORKS && | 366 | dev->vendor == PCI_VENDOR_ID_SERVERWORKS && |
367 | dev->device == PCI_DEVICE_ID_SERVERWORKS_CSB5IDE) | 367 | dev->device == PCI_DEVICE_ID_SERVERWORKS_CSB5IDE) |
368 | return ((1 << (hwif->channel + 14)) & | 368 | return ((1 << (hwif->channel + 14)) & |
369 | dev->subsystem_device) ? 1 : 0; | 369 | dev->subsystem_device) ? ATA_CBL_PATA80 : ATA_CBL_PATA40; |
370 | return 0; | 370 | return ATA_CBL_PATA40; |
371 | } | 371 | } |
372 | 372 | ||
373 | static unsigned int __devinit ata66_svwks (ide_hwif_t *hwif) | 373 | static u8 __devinit ata66_svwks(ide_hwif_t *hwif) |
374 | { | 374 | { |
375 | struct pci_dev *dev = hwif->pci_dev; | 375 | struct pci_dev *dev = hwif->pci_dev; |
376 | 376 | ||
@@ -389,9 +389,9 @@ static unsigned int __devinit ata66_svwks (ide_hwif_t *hwif) | |||
389 | /* Per Specified Design by OEM, and ASIC Architect */ | 389 | /* Per Specified Design by OEM, and ASIC Architect */ |
390 | if ((dev->device == PCI_DEVICE_ID_SERVERWORKS_CSB6IDE) || | 390 | if ((dev->device == PCI_DEVICE_ID_SERVERWORKS_CSB6IDE) || |
391 | (dev->device == PCI_DEVICE_ID_SERVERWORKS_CSB6IDE2)) | 391 | (dev->device == PCI_DEVICE_ID_SERVERWORKS_CSB6IDE2)) |
392 | return 1; | 392 | return ATA_CBL_PATA80; |
393 | 393 | ||
394 | return 0; | 394 | return ATA_CBL_PATA40; |
395 | } | 395 | } |
396 | 396 | ||
397 | static void __devinit init_hwif_svwks (ide_hwif_t *hwif) | 397 | static void __devinit init_hwif_svwks (ide_hwif_t *hwif) |
@@ -422,8 +422,8 @@ static void __devinit init_hwif_svwks (ide_hwif_t *hwif) | |||
422 | 422 | ||
423 | hwif->ide_dma_check = &svwks_config_drive_xfer_rate; | 423 | hwif->ide_dma_check = &svwks_config_drive_xfer_rate; |
424 | if (hwif->pci_dev->device != PCI_DEVICE_ID_SERVERWORKS_OSB4IDE) { | 424 | if (hwif->pci_dev->device != PCI_DEVICE_ID_SERVERWORKS_OSB4IDE) { |
425 | if (!hwif->udma_four) | 425 | if (hwif->cbl != ATA_CBL_PATA40_SHORT) |
426 | hwif->udma_four = ata66_svwks(hwif); | 426 | hwif->cbl = ata66_svwks(hwif); |
427 | } | 427 | } |
428 | if (!noautodma) | 428 | if (!noautodma) |
429 | hwif->autodma = 1; | 429 | hwif->autodma = 1; |