diff options
Diffstat (limited to 'drivers/ide/pci')
-rw-r--r-- | drivers/ide/pci/alim15x3.c | 4 | ||||
-rw-r--r-- | drivers/ide/pci/cs5530.c | 10 | ||||
-rw-r--r-- | drivers/ide/pci/hpt366.c | 8 | ||||
-rw-r--r-- | drivers/ide/pci/it821x.c | 51 | ||||
-rw-r--r-- | drivers/ide/pci/pdc202xx_new.c | 4 | ||||
-rw-r--r-- | drivers/ide/pci/pdc202xx_old.c | 6 | ||||
-rw-r--r-- | drivers/ide/pci/sc1200.c | 10 | ||||
-rw-r--r-- | drivers/ide/pci/serverworks.c | 4 | ||||
-rw-r--r-- | drivers/ide/pci/siimage.c | 8 |
9 files changed, 56 insertions, 49 deletions
diff --git a/drivers/ide/pci/alim15x3.c b/drivers/ide/pci/alim15x3.c index d647526af557..fcc701b3c0a2 100644 --- a/drivers/ide/pci/alim15x3.c +++ b/drivers/ide/pci/alim15x3.c | |||
@@ -134,8 +134,8 @@ static u8 ali_udma_filter(ide_drive_t *drive) | |||
134 | if (m5229_revision > 0x20 && m5229_revision < 0xC2) { | 134 | if (m5229_revision > 0x20 && m5229_revision < 0xC2) { |
135 | if (drive->media != ide_disk) | 135 | if (drive->media != ide_disk) |
136 | return 0; | 136 | return 0; |
137 | if (chip_is_1543c_e && strstr(drive->id->model, "WDC ") && | 137 | if (wdc_udma == 0 && chip_is_1543c_e && |
138 | wdc_udma == 0) | 138 | strstr((char *)&drive->id[ATA_ID_PROD], "WDC ")) |
139 | return 0; | 139 | return 0; |
140 | } | 140 | } |
141 | 141 | ||
diff --git a/drivers/ide/pci/cs5530.c b/drivers/ide/pci/cs5530.c index f235db8c678b..774ff58603a2 100644 --- a/drivers/ide/pci/cs5530.c +++ b/drivers/ide/pci/cs5530.c | |||
@@ -82,16 +82,18 @@ static u8 cs5530_udma_filter(ide_drive_t *drive) | |||
82 | { | 82 | { |
83 | ide_hwif_t *hwif = drive->hwif; | 83 | ide_hwif_t *hwif = drive->hwif; |
84 | ide_drive_t *mate = &hwif->drives[(drive->dn & 1) ^ 1]; | 84 | ide_drive_t *mate = &hwif->drives[(drive->dn & 1) ^ 1]; |
85 | struct hd_driveid *mateid = mate->id; | 85 | u16 *mateid = mate->id; |
86 | u8 mask = hwif->ultra_mask; | 86 | u8 mask = hwif->ultra_mask; |
87 | 87 | ||
88 | if (mate->present == 0) | 88 | if (mate->present == 0) |
89 | goto out; | 89 | goto out; |
90 | 90 | ||
91 | if ((mateid->capability & 1) && __ide_dma_bad_drive(mate) == 0) { | 91 | if ((mate->driveid->capability & 1) && __ide_dma_bad_drive(mate) == 0) { |
92 | if ((mateid->field_valid & 4) && (mateid->dma_ultra & 7)) | 92 | if ((mateid[ATA_ID_FIELD_VALID] & 4) && |
93 | (mateid[ATA_ID_UDMA_MODES] & 7)) | ||
93 | goto out; | 94 | goto out; |
94 | if ((mateid->field_valid & 2) && (mateid->dma_mword & 7)) | 95 | if ((mateid[ATA_ID_FIELD_VALID] & 2) && |
96 | (mateid[ATA_ID_MWDMA_MODES] & 7)) | ||
95 | mask = 0; | 97 | mask = 0; |
96 | } | 98 | } |
97 | out: | 99 | out: |
diff --git a/drivers/ide/pci/hpt366.c b/drivers/ide/pci/hpt366.c index c37ab1743819..b7f77fd3cb6e 100644 --- a/drivers/ide/pci/hpt366.c +++ b/drivers/ide/pci/hpt366.c | |||
@@ -605,10 +605,10 @@ static const struct hpt_info hpt371n __devinitdata = { | |||
605 | 605 | ||
606 | static int check_in_drive_list(ide_drive_t *drive, const char **list) | 606 | static int check_in_drive_list(ide_drive_t *drive, const char **list) |
607 | { | 607 | { |
608 | struct hd_driveid *id = drive->id; | 608 | char *m = (char *)&drive->id[ATA_ID_PROD]; |
609 | 609 | ||
610 | while (*list) | 610 | while (*list) |
611 | if (!strcmp(*list++,id->model)) | 611 | if (!strcmp(*list++, m)) |
612 | return 1; | 612 | return 1; |
613 | return 0; | 613 | return 0; |
614 | } | 614 | } |
@@ -731,11 +731,11 @@ static void hpt3xx_set_pio_mode(ide_drive_t *drive, const u8 pio) | |||
731 | 731 | ||
732 | static void hpt3xx_quirkproc(ide_drive_t *drive) | 732 | static void hpt3xx_quirkproc(ide_drive_t *drive) |
733 | { | 733 | { |
734 | struct hd_driveid *id = drive->id; | 734 | char *m = (char *)&drive->id[ATA_ID_PROD]; |
735 | const char **list = quirk_drives; | 735 | const char **list = quirk_drives; |
736 | 736 | ||
737 | while (*list) | 737 | while (*list) |
738 | if (strstr(id->model, *list++)) { | 738 | if (strstr(m, *list++)) { |
739 | drive->quirk_list = 1; | 739 | drive->quirk_list = 1; |
740 | return; | 740 | return; |
741 | } | 741 | } |
diff --git a/drivers/ide/pci/it821x.c b/drivers/ide/pci/it821x.c index 4a1508a707cc..31d4e6aef1b8 100644 --- a/drivers/ide/pci/it821x.c +++ b/drivers/ide/pci/it821x.c | |||
@@ -446,8 +446,7 @@ static u8 it821x_cable_detect(ide_hwif_t *hwif) | |||
446 | static void it821x_quirkproc(ide_drive_t *drive) | 446 | static void it821x_quirkproc(ide_drive_t *drive) |
447 | { | 447 | { |
448 | struct it821x_dev *itdev = ide_get_hwifdata(drive->hwif); | 448 | struct it821x_dev *itdev = ide_get_hwifdata(drive->hwif); |
449 | struct hd_driveid *id = drive->id; | 449 | u16 *id = drive->id; |
450 | u16 *idbits = (u16 *)drive->id; | ||
451 | 450 | ||
452 | if (!itdev->smart) { | 451 | if (!itdev->smart) { |
453 | /* | 452 | /* |
@@ -466,36 +465,36 @@ static void it821x_quirkproc(ide_drive_t *drive) | |||
466 | */ | 465 | */ |
467 | 466 | ||
468 | /* Check for RAID v native */ | 467 | /* Check for RAID v native */ |
469 | if(strstr(id->model, "Integrated Technology Express")) { | 468 | if (strstr((char *)&id[ATA_ID_PROD], |
469 | "Integrated Technology Express")) { | ||
470 | /* In raid mode the ident block is slightly buggy | 470 | /* In raid mode the ident block is slightly buggy |
471 | We need to set the bits so that the IDE layer knows | 471 | We need to set the bits so that the IDE layer knows |
472 | LBA28. LBA48 and DMA ar valid */ | 472 | LBA28. LBA48 and DMA ar valid */ |
473 | id->capability |= 3; /* LBA28, DMA */ | 473 | drive->driveid->capability |= 3; /* LBA28, DMA */ |
474 | id->command_set_2 |= 0x0400; /* LBA48 valid */ | 474 | id[ATA_ID_COMMAND_SET_2] |= 0x0400; /* LBA48 valid */ |
475 | id->cfs_enable_2 |= 0x0400; /* LBA48 on */ | 475 | id[ATA_ID_CFS_ENABLE_2] |= 0x0400; /* LBA48 on */ |
476 | /* Reporting logic */ | 476 | /* Reporting logic */ |
477 | printk(KERN_INFO "%s: IT8212 %sRAID %d volume", | 477 | printk(KERN_INFO "%s: IT8212 %sRAID %d volume", |
478 | drive->name, | 478 | drive->name, id[147] ? "Bootable " : "", |
479 | idbits[147] ? "Bootable ":"", | 479 | id[ATA_ID_CSFO]); |
480 | idbits[129]); | 480 | if (id[ATA_ID_CSFO] != 1) |
481 | if(idbits[129] != 1) | 481 | printk(KERN_CONT "(%dK stripe)", id[146]); |
482 | printk("(%dK stripe)", idbits[146]); | 482 | printk(KERN_CONT ".\n"); |
483 | printk(".\n"); | ||
484 | } else { | 483 | } else { |
485 | /* Non RAID volume. Fixups to stop the core code | 484 | /* Non RAID volume. Fixups to stop the core code |
486 | doing unsupported things */ | 485 | doing unsupported things */ |
487 | id->field_valid &= 3; | 486 | id[ATA_ID_FIELD_VALID] &= 3; |
488 | id->queue_depth = 0; | 487 | id[ATA_ID_QUEUE_DEPTH] = 0; |
489 | id->command_set_1 = 0; | 488 | id[ATA_ID_COMMAND_SET_1] = 0; |
490 | id->command_set_2 &= 0xC400; | 489 | id[ATA_ID_COMMAND_SET_2] &= 0xC400; |
491 | id->cfsse &= 0xC000; | 490 | id[ATA_ID_CFSSE] &= 0xC000; |
492 | id->cfs_enable_1 = 0; | 491 | id[ATA_ID_CFS_ENABLE_1] = 0; |
493 | id->cfs_enable_2 &= 0xC400; | 492 | id[ATA_ID_CFS_ENABLE_2] &= 0xC400; |
494 | id->csf_default &= 0xC000; | 493 | id[ATA_ID_CSF_DEFAULT] &= 0xC000; |
495 | id->word127 = 0; | 494 | id[127] = 0; |
496 | id->dlf = 0; | 495 | id[ATA_ID_DLF] = 0; |
497 | id->csfo = 0; | 496 | id[ATA_ID_CSFO] = 0; |
498 | id->cfa_power = 0; | 497 | id[ATA_ID_CFA_POWER] = 0; |
499 | printk(KERN_INFO "%s: Performing identify fixups.\n", | 498 | printk(KERN_INFO "%s: Performing identify fixups.\n", |
500 | drive->name); | 499 | drive->name); |
501 | } | 500 | } |
@@ -505,8 +504,8 @@ static void it821x_quirkproc(ide_drive_t *drive) | |||
505 | * IDE core that DMA is supported (it821x hardware | 504 | * IDE core that DMA is supported (it821x hardware |
506 | * takes care of DMA mode programming). | 505 | * takes care of DMA mode programming). |
507 | */ | 506 | */ |
508 | if (id->capability & 1) { | 507 | if (drive->driveid->capability & 1) { |
509 | id->dma_mword |= 0x0101; | 508 | id[ATA_ID_MWDMA_MODES] |= 0x0101; |
510 | drive->current_speed = XFER_MW_DMA_0; | 509 | drive->current_speed = XFER_MW_DMA_0; |
511 | } | 510 | } |
512 | } | 511 | } |
diff --git a/drivers/ide/pci/pdc202xx_new.c b/drivers/ide/pci/pdc202xx_new.c index d477da6b5858..7ecfcd06f47e 100644 --- a/drivers/ide/pci/pdc202xx_new.c +++ b/drivers/ide/pci/pdc202xx_new.c | |||
@@ -203,10 +203,10 @@ static u8 pdcnew_cable_detect(ide_hwif_t *hwif) | |||
203 | 203 | ||
204 | static void pdcnew_quirkproc(ide_drive_t *drive) | 204 | static void pdcnew_quirkproc(ide_drive_t *drive) |
205 | { | 205 | { |
206 | const char **list, *model = drive->id->model; | 206 | const char **list, *m = (char *)&drive->id[ATA_ID_PROD]; |
207 | 207 | ||
208 | for (list = pdc_quirk_drives; *list != NULL; list++) | 208 | for (list = pdc_quirk_drives; *list != NULL; list++) |
209 | if (strstr(model, *list) != NULL) { | 209 | if (strstr(m, *list) != NULL) { |
210 | drive->quirk_list = 2; | 210 | drive->quirk_list = 2; |
211 | return; | 211 | return; |
212 | } | 212 | } |
diff --git a/drivers/ide/pci/pdc202xx_old.c b/drivers/ide/pci/pdc202xx_old.c index de9a27400462..23e861b177ce 100644 --- a/drivers/ide/pci/pdc202xx_old.c +++ b/drivers/ide/pci/pdc202xx_old.c | |||
@@ -86,7 +86,7 @@ static void pdc202xx_set_mode(ide_drive_t *drive, const u8 speed) | |||
86 | * Prefetch_EN / IORDY_EN / PA[3:0] bits of register A | 86 | * Prefetch_EN / IORDY_EN / PA[3:0] bits of register A |
87 | */ | 87 | */ |
88 | AP &= ~0x3f; | 88 | AP &= ~0x3f; |
89 | if (drive->id->capability & 4) | 89 | if (drive->driveid->capability & 4) |
90 | AP |= 0x20; /* set IORDY_EN bit */ | 90 | AP |= 0x20; /* set IORDY_EN bit */ |
91 | if (drive->media == ide_disk) | 91 | if (drive->media == ide_disk) |
92 | AP |= 0x10; /* set Prefetch_EN bit */ | 92 | AP |= 0x10; /* set Prefetch_EN bit */ |
@@ -154,10 +154,10 @@ static void pdc_old_disable_66MHz_clock(ide_hwif_t *hwif) | |||
154 | 154 | ||
155 | static void pdc202xx_quirkproc(ide_drive_t *drive) | 155 | static void pdc202xx_quirkproc(ide_drive_t *drive) |
156 | { | 156 | { |
157 | const char **list, *model = drive->id->model; | 157 | const char **list, *m = (char *)&drive->id[ATA_ID_PROD]; |
158 | 158 | ||
159 | for (list = pdc_quirk_drives; *list != NULL; list++) | 159 | for (list = pdc_quirk_drives; *list != NULL; list++) |
160 | if (strstr(model, *list) != NULL) { | 160 | if (strstr(m, *list) != NULL) { |
161 | drive->quirk_list = 2; | 161 | drive->quirk_list = 2; |
162 | return; | 162 | return; |
163 | } | 163 | } |
diff --git a/drivers/ide/pci/sc1200.c b/drivers/ide/pci/sc1200.c index 8efaed16fea3..5c8367df14e4 100644 --- a/drivers/ide/pci/sc1200.c +++ b/drivers/ide/pci/sc1200.c | |||
@@ -105,16 +105,18 @@ static u8 sc1200_udma_filter(ide_drive_t *drive) | |||
105 | { | 105 | { |
106 | ide_hwif_t *hwif = drive->hwif; | 106 | ide_hwif_t *hwif = drive->hwif; |
107 | ide_drive_t *mate = &hwif->drives[(drive->dn & 1) ^ 1]; | 107 | ide_drive_t *mate = &hwif->drives[(drive->dn & 1) ^ 1]; |
108 | struct hd_driveid *mateid = mate->id; | 108 | u16 *mateid = mate->id; |
109 | u8 mask = hwif->ultra_mask; | 109 | u8 mask = hwif->ultra_mask; |
110 | 110 | ||
111 | if (mate->present == 0) | 111 | if (mate->present == 0) |
112 | goto out; | 112 | goto out; |
113 | 113 | ||
114 | if ((mateid->capability & 1) && __ide_dma_bad_drive(mate) == 0) { | 114 | if ((mate->driveid->capability & 1) && __ide_dma_bad_drive(mate) == 0) { |
115 | if ((mateid->field_valid & 4) && (mateid->dma_ultra & 7)) | 115 | if ((mateid[ATA_ID_FIELD_VALID] & 4) && |
116 | (mateid[ATA_ID_UDMA_MODES] & 7)) | ||
116 | goto out; | 117 | goto out; |
117 | if ((mateid->field_valid & 2) && (mateid->dma_mword & 7)) | 118 | if ((mateid[ATA_ID_FIELD_VALID] & 2) && |
119 | (mateid[ATA_ID_MWDMA_MODES] & 7)) | ||
118 | mask = 0; | 120 | mask = 0; |
119 | } | 121 | } |
120 | out: | 122 | out: |
diff --git a/drivers/ide/pci/serverworks.c b/drivers/ide/pci/serverworks.c index c3bdc6e51a48..ded6a13fd406 100644 --- a/drivers/ide/pci/serverworks.c +++ b/drivers/ide/pci/serverworks.c | |||
@@ -57,8 +57,10 @@ static struct pci_dev *isa_dev; | |||
57 | 57 | ||
58 | static int check_in_drive_lists (ide_drive_t *drive, const char **list) | 58 | static int check_in_drive_lists (ide_drive_t *drive, const char **list) |
59 | { | 59 | { |
60 | char *m = (char *)&drive->id[ATA_ID_PROD]; | ||
61 | |||
60 | while (*list) | 62 | while (*list) |
61 | if (!strcmp(*list++, drive->id->model)) | 63 | if (!strcmp(*list++, m)) |
62 | return 1; | 64 | return 1; |
63 | return 0; | 65 | return 0; |
64 | } | 66 | } |
diff --git a/drivers/ide/pci/siimage.c b/drivers/ide/pci/siimage.c index db2b88a369ab..7b5bd8729f64 100644 --- a/drivers/ide/pci/siimage.c +++ b/drivers/ide/pci/siimage.c | |||
@@ -223,7 +223,9 @@ static u8 sil_pata_udma_filter(ide_drive_t *drive) | |||
223 | 223 | ||
224 | static u8 sil_sata_udma_filter(ide_drive_t *drive) | 224 | static u8 sil_sata_udma_filter(ide_drive_t *drive) |
225 | { | 225 | { |
226 | return strstr(drive->id->model, "Maxtor") ? ATA_UDMA5 : ATA_UDMA6; | 226 | char *m = (char *)&drive->id[ATA_ID_PROD]; |
227 | |||
228 | return strstr(m, "Maxtor") ? ATA_UDMA5 : ATA_UDMA6; | ||
227 | } | 229 | } |
228 | 230 | ||
229 | /** | 231 | /** |
@@ -616,8 +618,8 @@ static void __devinit init_mmio_iops_siimage(ide_hwif_t *hwif) | |||
616 | 618 | ||
617 | static int is_dev_seagate_sata(ide_drive_t *drive) | 619 | static int is_dev_seagate_sata(ide_drive_t *drive) |
618 | { | 620 | { |
619 | const char *s = &drive->id->model[0]; | 621 | const char *s = (const char *)&drive->id[ATA_ID_PROD]; |
620 | unsigned len = strnlen(s, sizeof(drive->id->model)); | 622 | unsigned len = strnlen(s, ATA_ID_PROD_LEN); |
621 | 623 | ||
622 | if ((len > 4) && (!memcmp(s, "ST", 2))) | 624 | if ((len > 4) && (!memcmp(s, "ST", 2))) |
623 | if ((!memcmp(s + len - 2, "AS", 2)) || | 625 | if ((!memcmp(s + len - 2, "AS", 2)) || |