Commit 6c952a0d authored by Hannes Reinecke's avatar Hannes Reinecke Committed by Damien Le Moal

ata: libata: Add ata_port_classify() helper

Add an ata_port_classify() helper to print out the results from
the device classification and remove the debugging statements
from ata_dev_classify().
Signed-off-by: default avatarHannes Reinecke <hare@suse.de>
Signed-off-by: default avatarDamien Le Moal <damien.lemoal@opensource.wdc.com>
parent bb6a42d7
...@@ -1300,7 +1300,7 @@ unsigned int ahci_dev_classify(struct ata_port *ap) ...@@ -1300,7 +1300,7 @@ unsigned int ahci_dev_classify(struct ata_port *ap)
tf.lbal = (tmp >> 8) & 0xff; tf.lbal = (tmp >> 8) & 0xff;
tf.nsect = (tmp) & 0xff; tf.nsect = (tmp) & 0xff;
return ata_dev_classify(&tf); return ata_port_classify(ap, &tf);
} }
EXPORT_SYMBOL_GPL(ahci_dev_classify); EXPORT_SYMBOL_GPL(ahci_dev_classify);
......
...@@ -1007,32 +1007,21 @@ unsigned int ata_dev_classify(const struct ata_taskfile *tf) ...@@ -1007,32 +1007,21 @@ unsigned int ata_dev_classify(const struct ata_taskfile *tf)
* SEMB signature. This is worked around in * SEMB signature. This is worked around in
* ata_dev_read_id(). * ata_dev_read_id().
*/ */
if ((tf->lbam == 0) && (tf->lbah == 0)) { if (tf->lbam == 0 && tf->lbah == 0)
DPRINTK("found ATA device by sig\n");
return ATA_DEV_ATA; return ATA_DEV_ATA;
}
if ((tf->lbam == 0x14) && (tf->lbah == 0xeb)) { if (tf->lbam == 0x14 && tf->lbah == 0xeb)
DPRINTK("found ATAPI device by sig\n");
return ATA_DEV_ATAPI; return ATA_DEV_ATAPI;
}
if ((tf->lbam == 0x69) && (tf->lbah == 0x96)) { if (tf->lbam == 0x69 && tf->lbah == 0x96)
DPRINTK("found PMP device by sig\n");
return ATA_DEV_PMP; return ATA_DEV_PMP;
}
if ((tf->lbam == 0x3c) && (tf->lbah == 0xc3)) { if (tf->lbam == 0x3c && tf->lbah == 0xc3)
DPRINTK("found SEMB device by sig (could be ATA device)\n");
return ATA_DEV_SEMB; return ATA_DEV_SEMB;
}
if ((tf->lbam == 0xcd) && (tf->lbah == 0xab)) { if (tf->lbam == 0xcd && tf->lbah == 0xab)
DPRINTK("found ZAC device by sig\n");
return ATA_DEV_ZAC; return ATA_DEV_ZAC;
}
DPRINTK("unknown device\n");
return ATA_DEV_UNKNOWN; return ATA_DEV_UNKNOWN;
} }
EXPORT_SYMBOL_GPL(ata_dev_classify); EXPORT_SYMBOL_GPL(ata_dev_classify);
......
...@@ -1853,7 +1853,7 @@ unsigned int ata_sff_dev_classify(struct ata_device *dev, int present, ...@@ -1853,7 +1853,7 @@ unsigned int ata_sff_dev_classify(struct ata_device *dev, int present,
return ATA_DEV_NONE; return ATA_DEV_NONE;
/* determine if device is ATA or ATAPI */ /* determine if device is ATA or ATAPI */
class = ata_dev_classify(&tf); class = ata_port_classify(ap, &tf);
if (class == ATA_DEV_UNKNOWN) { if (class == ATA_DEV_UNKNOWN) {
/* If the device failed diagnostic, it's likely to /* If the device failed diagnostic, it's likely to
......
...@@ -321,6 +321,36 @@ int ata_tport_add(struct device *parent, ...@@ -321,6 +321,36 @@ int ata_tport_add(struct device *parent,
return error; return error;
} }
/**
* ata_port_classify - determine device type based on ATA-spec signature
* @ap: ATA port device on which the classification should be run
* @tf: ATA taskfile register set for device to be identified
*
* A wrapper around ata_dev_classify() to provide additional logging
*
* RETURNS:
* Device type, %ATA_DEV_ATA, %ATA_DEV_ATAPI, %ATA_DEV_PMP,
* %ATA_DEV_ZAC, or %ATA_DEV_UNKNOWN the event of failure.
*/
unsigned int ata_port_classify(struct ata_port *ap,
const struct ata_taskfile *tf)
{
int i;
unsigned int class = ata_dev_classify(tf);
/* Start with index '1' to skip the 'unknown' entry */
for (i = 1; i < ARRAY_SIZE(ata_class_names); i++) {
if (ata_class_names[i].value == class) {
ata_port_dbg(ap, "found %s device by sig\n",
ata_class_names[i].name);
return class;
}
}
ata_port_info(ap, "found unknown device (class %u)\n", class);
return class;
}
EXPORT_SYMBOL_GPL(ata_port_classify);
/* /*
* ATA link attributes * ATA link attributes
......
...@@ -814,7 +814,7 @@ static unsigned int sata_fsl_dev_classify(struct ata_port *ap) ...@@ -814,7 +814,7 @@ static unsigned int sata_fsl_dev_classify(struct ata_port *ap)
tf.lbal = (temp >> 8) & 0xff; tf.lbal = (temp >> 8) & 0xff;
tf.nsect = temp & 0xff; tf.nsect = temp & 0xff;
return ata_dev_classify(&tf); return ata_port_classify(ap, &tf);
} }
static int sata_fsl_hardreset(struct ata_link *link, unsigned int *class, static int sata_fsl_hardreset(struct ata_link *link, unsigned int *class,
......
...@@ -657,7 +657,7 @@ static int inic_hardreset(struct ata_link *link, unsigned int *class, ...@@ -657,7 +657,7 @@ static int inic_hardreset(struct ata_link *link, unsigned int *class,
} }
inic_tf_read(ap, &tf); inic_tf_read(ap, &tf);
*class = ata_dev_classify(&tf); *class = ata_port_classify(ap, &tf);
} }
return 0; return 0;
......
...@@ -680,7 +680,7 @@ static int sil24_softreset(struct ata_link *link, unsigned int *class, ...@@ -680,7 +680,7 @@ static int sil24_softreset(struct ata_link *link, unsigned int *class,
} }
sil24_read_tf(ap, 0, &tf); sil24_read_tf(ap, 0, &tf);
*class = ata_dev_classify(&tf); *class = ata_port_classify(ap, &tf);
DPRINTK("EXIT, class=%u\n", *class); DPRINTK("EXIT, class=%u\n", *class);
return 0; return 0;
......
...@@ -1160,6 +1160,8 @@ extern enum ata_completion_errors ata_noop_qc_prep(struct ata_queued_cmd *qc); ...@@ -1160,6 +1160,8 @@ extern enum ata_completion_errors ata_noop_qc_prep(struct ata_queued_cmd *qc);
extern void ata_sg_init(struct ata_queued_cmd *qc, struct scatterlist *sg, extern void ata_sg_init(struct ata_queued_cmd *qc, struct scatterlist *sg,
unsigned int n_elem); unsigned int n_elem);
extern unsigned int ata_dev_classify(const struct ata_taskfile *tf); extern unsigned int ata_dev_classify(const struct ata_taskfile *tf);
extern unsigned int ata_port_classify(struct ata_port *ap,
const struct ata_taskfile *tf);
extern void ata_dev_disable(struct ata_device *adev); extern void ata_dev_disable(struct ata_device *adev);
extern void ata_id_string(const u16 *id, unsigned char *s, extern void ata_id_string(const u16 *id, unsigned char *s,
unsigned int ofs, unsigned int len); unsigned int ofs, unsigned int len);
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment