|
Lines 2092-2115
int ata_dev_read_id(struct ata_device *dev, unsigned int *p_class,
Link Here
|
| 2092 |
id, sizeof(id[0]) * ATA_ID_WORDS, 0); |
2092 |
id, sizeof(id[0]) * ATA_ID_WORDS, 0); |
| 2093 |
if (err_mask) { |
2093 |
if (err_mask) { |
| 2094 |
if (err_mask & AC_ERR_NODEV_HINT) { |
2094 |
if (err_mask & AC_ERR_NODEV_HINT) { |
| 2095 |
DPRINTK("ata%u.%d: NODEV after polling detection\n", |
2095 |
ata_dev_printk(dev, KERN_DEBUG, |
| 2096 |
ap->print_id, dev->devno); |
2096 |
"NODEV after polling detection\n"); |
| 2097 |
return -ENOENT; |
2097 |
return -ENOENT; |
| 2098 |
} |
2098 |
} |
| 2099 |
|
2099 |
|
| 2100 |
/* Device or controller might have reported the wrong |
2100 |
if ((err_mask == AC_ERR_DEV) && (tf.feature & ATA_ABORTED)) { |
| 2101 |
* device class. Give a shot at the other IDENTIFY if |
2101 |
/* Device or controller might have reported |
| 2102 |
* the current one is aborted by the device. |
2102 |
* the wrong device class. Give a shot at the |
| 2103 |
*/ |
2103 |
* other IDENTIFY if the current one is |
| 2104 |
if (may_fallback && |
2104 |
* aborted by the device. |
| 2105 |
(err_mask == AC_ERR_DEV) && (tf.feature & ATA_ABORTED)) { |
2105 |
*/ |
| 2106 |
may_fallback = 0; |
2106 |
if (may_fallback) { |
|
|
2107 |
may_fallback = 0; |
| 2107 |
|
2108 |
|
| 2108 |
if (class == ATA_DEV_ATA) |
2109 |
if (class == ATA_DEV_ATA) |
| 2109 |
class = ATA_DEV_ATAPI; |
2110 |
class = ATA_DEV_ATAPI; |
| 2110 |
else |
2111 |
else |
| 2111 |
class = ATA_DEV_ATA; |
2112 |
class = ATA_DEV_ATA; |
| 2112 |
goto retry; |
2113 |
goto retry; |
|
|
2114 |
} |
| 2115 |
|
| 2116 |
/* Control reaches iff the device aborted both |
| 2117 |
* flavors of IDENTIFYs which sometimes |
| 2118 |
* happens with phantom devices. |
| 2119 |
*/ |
| 2120 |
ata_dev_printk(dev, KERN_DEBUG, |
| 2121 |
"both IDENTIFYs aborted, assuming NODEV\n"); |
| 2122 |
return -ENOENT; |
| 2113 |
} |
2123 |
} |
| 2114 |
|
2124 |
|
| 2115 |
rc = -EIO; |
2125 |
rc = -EIO; |