aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--drivers/ata/ata_generic.c17
-rw-r--r--drivers/ata/libata-core.c43
-rw-r--r--include/linux/libata.h1
3 files changed, 16 insertions, 45 deletions
diff --git a/drivers/ata/ata_generic.c b/drivers/ata/ata_generic.c
index fb5434c8ae6e..d11a4f1fe86a 100644
--- a/drivers/ata/ata_generic.c
+++ b/drivers/ata/ata_generic.c
@@ -63,7 +63,22 @@ static int generic_set_mode(struct ata_link *link, struct ata_device **unused)
63 /* We do need the right mode information for DMA or PIO 63 /* We do need the right mode information for DMA or PIO
64 and this comes from the current configuration flags */ 64 and this comes from the current configuration flags */
65 if (dma_enabled & (1 << (5 + dev->devno))) { 65 if (dma_enabled & (1 << (5 + dev->devno))) {
66 ata_id_to_dma_mode(dev, XFER_MW_DMA_0); 66 unsigned int xfer_mask = ata_id_xfermask(dev->id);
67 const char *name;
68
69 if (xfer_mask & (ATA_MASK_MWDMA | ATA_MASK_UDMA))
70 name = ata_mode_string(xfer_mask);
71 else {
72 /* SWDMA perhaps? */
73 name = "DMA";
74 xfer_mask |= ata_xfer_mode2mask(XFER_MW_DMA_0);
75 }
76
77 ata_dev_printk(dev, KERN_INFO, "configured for %s\n",
78 name);
79
80 dev->xfer_mode = ata_xfer_mask2mode(xfer_mask);
81 dev->xfer_shift = ata_xfer_mode2shift(dev->xfer_mode);
67 dev->flags &= ~ATA_DFLAG_PIO; 82 dev->flags &= ~ATA_DFLAG_PIO;
68 } else { 83 } else {
69 ata_dev_printk(dev, KERN_INFO, "configured for PIO\n"); 84 ata_dev_printk(dev, KERN_INFO, "configured for PIO\n");
diff --git a/drivers/ata/libata-core.c b/drivers/ata/libata-core.c
index a70ed7b3bc55..ab84772235c9 100644
--- a/drivers/ata/libata-core.c
+++ b/drivers/ata/libata-core.c
@@ -1288,48 +1288,6 @@ static int ata_hpa_resize(struct ata_device *dev)
1288} 1288}
1289 1289
1290/** 1290/**
1291 * ata_id_to_dma_mode - Identify DMA mode from id block
1292 * @dev: device to identify
1293 * @unknown: mode to assume if we cannot tell
1294 *
1295 * Set up the timing values for the device based upon the identify
1296 * reported values for the DMA mode. This function is used by drivers
1297 * which rely upon firmware configured modes, but wish to report the
1298 * mode correctly when possible.
1299 *
1300 * In addition we emit similarly formatted messages to the default
1301 * ata_dev_set_mode handler, in order to provide consistency of
1302 * presentation.
1303 */
1304
1305void ata_id_to_dma_mode(struct ata_device *dev, u8 unknown)
1306{
1307 unsigned int mask;
1308 u8 mode;
1309
1310 /* Pack the DMA modes */
1311 mask = ((dev->id[63] >> 8) << ATA_SHIFT_MWDMA) & ATA_MASK_MWDMA;
1312 if (dev->id[53] & 0x04)
1313 mask |= ((dev->id[88] >> 8) << ATA_SHIFT_UDMA) & ATA_MASK_UDMA;
1314
1315 /* Select the mode in use */
1316 mode = ata_xfer_mask2mode(mask);
1317
1318 if (mode != 0xff) {
1319 ata_dev_printk(dev, KERN_INFO, "configured for %s\n",
1320 ata_mode_string(mask));
1321 } else {
1322 /* SWDMA perhaps ? */
1323 mode = unknown;
1324 ata_dev_printk(dev, KERN_INFO, "configured for DMA\n");
1325 }
1326
1327 /* Configure the device reporting */
1328 dev->xfer_mode = mode;
1329 dev->xfer_shift = ata_xfer_mode2shift(mode);
1330}
1331
1332/**
1333 * ata_noop_dev_select - Select device 0/1 on ATA bus 1291 * ata_noop_dev_select - Select device 0/1 on ATA bus
1334 * @ap: ATA channel to manipulate 1292 * @ap: ATA channel to manipulate
1335 * @device: ATA device (numbered from zero) to select 1293 * @device: ATA device (numbered from zero) to select
@@ -7653,7 +7611,6 @@ EXPORT_SYMBOL_GPL(ata_host_resume);
7653#endif /* CONFIG_PM */ 7611#endif /* CONFIG_PM */
7654EXPORT_SYMBOL_GPL(ata_id_string); 7612EXPORT_SYMBOL_GPL(ata_id_string);
7655EXPORT_SYMBOL_GPL(ata_id_c_string); 7613EXPORT_SYMBOL_GPL(ata_id_c_string);
7656EXPORT_SYMBOL_GPL(ata_id_to_dma_mode);
7657EXPORT_SYMBOL_GPL(ata_scsi_simulate); 7614EXPORT_SYMBOL_GPL(ata_scsi_simulate);
7658 7615
7659EXPORT_SYMBOL_GPL(ata_pio_need_iordy); 7616EXPORT_SYMBOL_GPL(ata_pio_need_iordy);
diff --git a/include/linux/libata.h b/include/linux/libata.h
index e2ed3bac8c5b..d33702fe78f9 100644
--- a/include/linux/libata.h
+++ b/include/linux/libata.h
@@ -890,7 +890,6 @@ extern void ata_id_string(const u16 *id, unsigned char *s,
890 unsigned int ofs, unsigned int len); 890 unsigned int ofs, unsigned int len);
891extern void ata_id_c_string(const u16 *id, unsigned char *s, 891extern void ata_id_c_string(const u16 *id, unsigned char *s,
892 unsigned int ofs, unsigned int len); 892 unsigned int ofs, unsigned int len);
893extern void ata_id_to_dma_mode(struct ata_device *dev, u8 unknown);
894extern void ata_bmdma_setup(struct ata_queued_cmd *qc); 893extern void ata_bmdma_setup(struct ata_queued_cmd *qc);
895extern void ata_bmdma_start(struct ata_queued_cmd *qc); 894extern void ata_bmdma_start(struct ata_queued_cmd *qc);
896extern void ata_bmdma_stop(struct ata_queued_cmd *qc); 895extern void ata_bmdma_stop(struct ata_queued_cmd *qc);