ide: respect quirk_drives[] list on all controllers
* Add ide_check_nien_quirk_list() helper to the core code and then use it in ide_port_tune_devices(). * Remove no longer needed ->quirkproc methods from hpt366.c and pdc202xx_{new,old}.c. Acked-by: Sergei Shtylyov <sshtylyov@ru.mvista.com> Signed-off-by: Bartlomiej Zolnierkiewicz <bzolnier@gmail.com>
This commit is contained in:
@@ -138,18 +138,6 @@
|
|||||||
#undef HPT_RESET_STATE_ENGINE
|
#undef HPT_RESET_STATE_ENGINE
|
||||||
#undef HPT_DELAY_INTERRUPT
|
#undef HPT_DELAY_INTERRUPT
|
||||||
|
|
||||||
static const char *quirk_drives[] = {
|
|
||||||
"QUANTUM FIREBALLlct08 08",
|
|
||||||
"QUANTUM FIREBALLP KA6.4",
|
|
||||||
"QUANTUM FIREBALLP KA9.1",
|
|
||||||
"QUANTUM FIREBALLP KX13.6",
|
|
||||||
"QUANTUM FIREBALLP KX20.5",
|
|
||||||
"QUANTUM FIREBALLP KX27.3",
|
|
||||||
"QUANTUM FIREBALLP LM20.4",
|
|
||||||
"QUANTUM FIREBALLP LM20.5",
|
|
||||||
NULL
|
|
||||||
};
|
|
||||||
|
|
||||||
static const char *bad_ata100_5[] = {
|
static const char *bad_ata100_5[] = {
|
||||||
"IBM-DTLA-307075",
|
"IBM-DTLA-307075",
|
||||||
"IBM-DTLA-307060",
|
"IBM-DTLA-307060",
|
||||||
@@ -733,20 +721,6 @@ static void hpt3xx_set_pio_mode(ide_drive_t *drive, const u8 pio)
|
|||||||
hpt3xx_set_mode(drive, XFER_PIO_0 + pio);
|
hpt3xx_set_mode(drive, XFER_PIO_0 + pio);
|
||||||
}
|
}
|
||||||
|
|
||||||
static void hpt3xx_quirkproc(ide_drive_t *drive)
|
|
||||||
{
|
|
||||||
char *m = (char *)&drive->id[ATA_ID_PROD];
|
|
||||||
const char **list = quirk_drives;
|
|
||||||
|
|
||||||
while (*list)
|
|
||||||
if (strstr(m, *list++)) {
|
|
||||||
drive->quirk_list = 2;
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
drive->quirk_list = 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
static void hpt3xx_maskproc(ide_drive_t *drive, int mask)
|
static void hpt3xx_maskproc(ide_drive_t *drive, int mask)
|
||||||
{
|
{
|
||||||
ide_hwif_t *hwif = drive->hwif;
|
ide_hwif_t *hwif = drive->hwif;
|
||||||
@@ -1408,7 +1382,6 @@ static int __devinit hpt36x_init(struct pci_dev *dev, struct pci_dev *dev2)
|
|||||||
static const struct ide_port_ops hpt3xx_port_ops = {
|
static const struct ide_port_ops hpt3xx_port_ops = {
|
||||||
.set_pio_mode = hpt3xx_set_pio_mode,
|
.set_pio_mode = hpt3xx_set_pio_mode,
|
||||||
.set_dma_mode = hpt3xx_set_mode,
|
.set_dma_mode = hpt3xx_set_mode,
|
||||||
.quirkproc = hpt3xx_quirkproc,
|
|
||||||
.maskproc = hpt3xx_maskproc,
|
.maskproc = hpt3xx_maskproc,
|
||||||
.mdma_filter = hpt3xx_mdma_filter,
|
.mdma_filter = hpt3xx_mdma_filter,
|
||||||
.udma_filter = hpt3xx_udma_filter,
|
.udma_filter = hpt3xx_udma_filter,
|
||||||
|
@@ -282,6 +282,31 @@ no_80w:
|
|||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static const char *nien_quirk_list[] = {
|
||||||
|
"QUANTUM FIREBALLlct08 08",
|
||||||
|
"QUANTUM FIREBALLP KA6.4",
|
||||||
|
"QUANTUM FIREBALLP KA9.1",
|
||||||
|
"QUANTUM FIREBALLP KX13.6",
|
||||||
|
"QUANTUM FIREBALLP KX20.5",
|
||||||
|
"QUANTUM FIREBALLP KX27.3",
|
||||||
|
"QUANTUM FIREBALLP LM20.4",
|
||||||
|
"QUANTUM FIREBALLP LM20.5",
|
||||||
|
NULL
|
||||||
|
};
|
||||||
|
|
||||||
|
void ide_check_nien_quirk_list(ide_drive_t *drive)
|
||||||
|
{
|
||||||
|
const char **list, *m = (char *)&drive->id[ATA_ID_PROD];
|
||||||
|
|
||||||
|
for (list = nien_quirk_list; *list != NULL; list++)
|
||||||
|
if (strstr(m, *list) != NULL) {
|
||||||
|
drive->quirk_list = 2;
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
drive->quirk_list = 0;
|
||||||
|
}
|
||||||
|
|
||||||
int ide_driveid_update(ide_drive_t *drive)
|
int ide_driveid_update(ide_drive_t *drive)
|
||||||
{
|
{
|
||||||
u16 *id;
|
u16 *id;
|
||||||
|
@@ -732,6 +732,8 @@ static void ide_port_tune_devices(ide_hwif_t *hwif)
|
|||||||
int i;
|
int i;
|
||||||
|
|
||||||
ide_port_for_each_present_dev(i, drive, hwif) {
|
ide_port_for_each_present_dev(i, drive, hwif) {
|
||||||
|
ide_check_nien_quirk_list(drive);
|
||||||
|
|
||||||
if (port_ops && port_ops->quirkproc)
|
if (port_ops && port_ops->quirkproc)
|
||||||
port_ops->quirkproc(drive);
|
port_ops->quirkproc(drive);
|
||||||
}
|
}
|
||||||
|
@@ -40,18 +40,6 @@
|
|||||||
#define DBG(fmt, args...)
|
#define DBG(fmt, args...)
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
static const char *pdc_quirk_drives[] = {
|
|
||||||
"QUANTUM FIREBALLlct08 08",
|
|
||||||
"QUANTUM FIREBALLP KA6.4",
|
|
||||||
"QUANTUM FIREBALLP KA9.1",
|
|
||||||
"QUANTUM FIREBALLP LM20.4",
|
|
||||||
"QUANTUM FIREBALLP KX13.6",
|
|
||||||
"QUANTUM FIREBALLP KX20.5",
|
|
||||||
"QUANTUM FIREBALLP KX27.3",
|
|
||||||
"QUANTUM FIREBALLP LM20.5",
|
|
||||||
NULL
|
|
||||||
};
|
|
||||||
|
|
||||||
static u8 max_dma_rate(struct pci_dev *pdev)
|
static u8 max_dma_rate(struct pci_dev *pdev)
|
||||||
{
|
{
|
||||||
u8 mode;
|
u8 mode;
|
||||||
@@ -200,19 +188,6 @@ static u8 pdcnew_cable_detect(ide_hwif_t *hwif)
|
|||||||
return ATA_CBL_PATA80;
|
return ATA_CBL_PATA80;
|
||||||
}
|
}
|
||||||
|
|
||||||
static void pdcnew_quirkproc(ide_drive_t *drive)
|
|
||||||
{
|
|
||||||
const char **list, *m = (char *)&drive->id[ATA_ID_PROD];
|
|
||||||
|
|
||||||
for (list = pdc_quirk_drives; *list != NULL; list++)
|
|
||||||
if (strstr(m, *list) != NULL) {
|
|
||||||
drive->quirk_list = 2;
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
drive->quirk_list = 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
static void pdcnew_reset(ide_drive_t *drive)
|
static void pdcnew_reset(ide_drive_t *drive)
|
||||||
{
|
{
|
||||||
/*
|
/*
|
||||||
@@ -473,7 +448,6 @@ static struct pci_dev * __devinit pdc20270_get_dev2(struct pci_dev *dev)
|
|||||||
static const struct ide_port_ops pdcnew_port_ops = {
|
static const struct ide_port_ops pdcnew_port_ops = {
|
||||||
.set_pio_mode = pdcnew_set_pio_mode,
|
.set_pio_mode = pdcnew_set_pio_mode,
|
||||||
.set_dma_mode = pdcnew_set_dma_mode,
|
.set_dma_mode = pdcnew_set_dma_mode,
|
||||||
.quirkproc = pdcnew_quirkproc,
|
|
||||||
.resetproc = pdcnew_reset,
|
.resetproc = pdcnew_reset,
|
||||||
.cable_detect = pdcnew_cable_detect,
|
.cable_detect = pdcnew_cable_detect,
|
||||||
};
|
};
|
||||||
|
@@ -23,18 +23,6 @@
|
|||||||
|
|
||||||
#define PDC202XX_DEBUG_DRIVE_INFO 0
|
#define PDC202XX_DEBUG_DRIVE_INFO 0
|
||||||
|
|
||||||
static const char *pdc_quirk_drives[] = {
|
|
||||||
"QUANTUM FIREBALLlct08 08",
|
|
||||||
"QUANTUM FIREBALLP KA6.4",
|
|
||||||
"QUANTUM FIREBALLP KA9.1",
|
|
||||||
"QUANTUM FIREBALLP LM20.4",
|
|
||||||
"QUANTUM FIREBALLP KX13.6",
|
|
||||||
"QUANTUM FIREBALLP KX20.5",
|
|
||||||
"QUANTUM FIREBALLP KX27.3",
|
|
||||||
"QUANTUM FIREBALLP LM20.5",
|
|
||||||
NULL
|
|
||||||
};
|
|
||||||
|
|
||||||
static void pdc_old_disable_66MHz_clock(ide_hwif_t *);
|
static void pdc_old_disable_66MHz_clock(ide_hwif_t *);
|
||||||
|
|
||||||
static void pdc202xx_set_mode(ide_drive_t *drive, const u8 speed)
|
static void pdc202xx_set_mode(ide_drive_t *drive, const u8 speed)
|
||||||
@@ -151,19 +139,6 @@ static void pdc_old_disable_66MHz_clock(ide_hwif_t *hwif)
|
|||||||
outb(clock & ~(hwif->channel ? 0x08 : 0x02), clock_reg);
|
outb(clock & ~(hwif->channel ? 0x08 : 0x02), clock_reg);
|
||||||
}
|
}
|
||||||
|
|
||||||
static void pdc202xx_quirkproc(ide_drive_t *drive)
|
|
||||||
{
|
|
||||||
const char **list, *m = (char *)&drive->id[ATA_ID_PROD];
|
|
||||||
|
|
||||||
for (list = pdc_quirk_drives; *list != NULL; list++)
|
|
||||||
if (strstr(m, *list) != NULL) {
|
|
||||||
drive->quirk_list = 2;
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
drive->quirk_list = 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
static void pdc202xx_dma_start(ide_drive_t *drive)
|
static void pdc202xx_dma_start(ide_drive_t *drive)
|
||||||
{
|
{
|
||||||
if (drive->current_speed > XFER_UDMA_2)
|
if (drive->current_speed > XFER_UDMA_2)
|
||||||
@@ -256,13 +231,11 @@ static void __devinit pdc202ata4_fixup_irq(struct pci_dev *dev,
|
|||||||
static const struct ide_port_ops pdc20246_port_ops = {
|
static const struct ide_port_ops pdc20246_port_ops = {
|
||||||
.set_pio_mode = pdc202xx_set_pio_mode,
|
.set_pio_mode = pdc202xx_set_pio_mode,
|
||||||
.set_dma_mode = pdc202xx_set_mode,
|
.set_dma_mode = pdc202xx_set_mode,
|
||||||
.quirkproc = pdc202xx_quirkproc,
|
|
||||||
};
|
};
|
||||||
|
|
||||||
static const struct ide_port_ops pdc2026x_port_ops = {
|
static const struct ide_port_ops pdc2026x_port_ops = {
|
||||||
.set_pio_mode = pdc202xx_set_pio_mode,
|
.set_pio_mode = pdc202xx_set_pio_mode,
|
||||||
.set_dma_mode = pdc202xx_set_mode,
|
.set_dma_mode = pdc202xx_set_mode,
|
||||||
.quirkproc = pdc202xx_quirkproc,
|
|
||||||
.cable_detect = pdc2026x_cable_detect,
|
.cable_detect = pdc2026x_cable_detect,
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@@ -1453,6 +1453,7 @@ static inline void ide_acpi_set_state(ide_hwif_t *hwif, int on) {}
|
|||||||
void ide_register_region(struct gendisk *);
|
void ide_register_region(struct gendisk *);
|
||||||
void ide_unregister_region(struct gendisk *);
|
void ide_unregister_region(struct gendisk *);
|
||||||
|
|
||||||
|
void ide_check_nien_quirk_list(ide_drive_t *);
|
||||||
void ide_undecoded_slave(ide_drive_t *);
|
void ide_undecoded_slave(ide_drive_t *);
|
||||||
|
|
||||||
void ide_port_apply_params(ide_hwif_t *);
|
void ide_port_apply_params(ide_hwif_t *);
|
||||||
|
Reference in New Issue
Block a user