aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorTejun Heo <htejun@gmail.com>2008-03-27 06:14:23 -0400
committerJeff Garzik <jgarzik@redhat.com>2008-04-17 15:44:20 -0400
commita5987e0a1b569146ed9cfa0a8c275a21b344fcaa (patch)
tree23c6f0e4ac2e521fdcb87aadf214ad8987b67b22
parent06993d2237da45615b5a9a4dde3f344ce97ca17d (diff)
libata: make ata_tf_to_lba[48]() generic
ata_tf_to_lba[48]() currently return LBA in tf + 1 for ata_read_native_max_address(). Make them return LBA and make it global so that it can be used to read LBA off TF for other purposes. ata_read_native_max_address() now adds 1 itself. Signed-off-by: Tejun Heo <htejun@gmail.com> Signed-off-by: Jeff Garzik <jeff@garzik.org>
-rw-r--r--drivers/ata/libata-core.c12
-rw-r--r--drivers/ata/libata.h2
2 files changed, 8 insertions, 6 deletions
diff --git a/drivers/ata/libata-core.c b/drivers/ata/libata-core.c
index 9121cc443be8..4d78f5debb6c 100644
--- a/drivers/ata/libata-core.c
+++ b/drivers/ata/libata-core.c
@@ -1211,7 +1211,7 @@ static u64 ata_id_n_sectors(const u16 *id)
1211 } 1211 }
1212} 1212}
1213 1213
1214static u64 ata_tf_to_lba48(struct ata_taskfile *tf) 1214u64 ata_tf_to_lba48(const struct ata_taskfile *tf)
1215{ 1215{
1216 u64 sectors = 0; 1216 u64 sectors = 0;
1217 1217
@@ -1222,10 +1222,10 @@ static u64 ata_tf_to_lba48(struct ata_taskfile *tf)
1222 sectors |= (tf->lbam & 0xff) << 8; 1222 sectors |= (tf->lbam & 0xff) << 8;
1223 sectors |= (tf->lbal & 0xff); 1223 sectors |= (tf->lbal & 0xff);
1224 1224
1225 return ++sectors; 1225 return sectors;
1226} 1226}
1227 1227
1228static u64 ata_tf_to_lba(struct ata_taskfile *tf) 1228u64 ata_tf_to_lba(const struct ata_taskfile *tf)
1229{ 1229{
1230 u64 sectors = 0; 1230 u64 sectors = 0;
1231 1231
@@ -1234,7 +1234,7 @@ static u64 ata_tf_to_lba(struct ata_taskfile *tf)
1234 sectors |= (tf->lbam & 0xff) << 8; 1234 sectors |= (tf->lbam & 0xff) << 8;
1235 sectors |= (tf->lbal & 0xff); 1235 sectors |= (tf->lbal & 0xff);
1236 1236
1237 return ++sectors; 1237 return sectors;
1238} 1238}
1239 1239
1240/** 1240/**
@@ -1279,9 +1279,9 @@ static int ata_read_native_max_address(struct ata_device *dev, u64 *max_sectors)
1279 } 1279 }
1280 1280
1281 if (lba48) 1281 if (lba48)
1282 *max_sectors = ata_tf_to_lba48(&tf); 1282 *max_sectors = ata_tf_to_lba48(&tf) + 1;
1283 else 1283 else
1284 *max_sectors = ata_tf_to_lba(&tf); 1284 *max_sectors = ata_tf_to_lba(&tf) + 1;
1285 if (dev->horkage & ATA_HORKAGE_HPA_SIZE) 1285 if (dev->horkage & ATA_HORKAGE_HPA_SIZE)
1286 (*max_sectors)--; 1286 (*max_sectors)--;
1287 return 0; 1287 return 0;
diff --git a/drivers/ata/libata.h b/drivers/ata/libata.h
index a69f663c7402..5e8d0359bccb 100644
--- a/drivers/ata/libata.h
+++ b/drivers/ata/libata.h
@@ -61,6 +61,8 @@ extern int libata_fua;
61extern int libata_noacpi; 61extern int libata_noacpi;
62extern int libata_allow_tpm; 62extern int libata_allow_tpm;
63extern void ata_force_cbl(struct ata_port *ap); 63extern void ata_force_cbl(struct ata_port *ap);
64extern u64 ata_tf_to_lba(const struct ata_taskfile *tf);
65extern u64 ata_tf_to_lba48(const struct ata_taskfile *tf);
64extern struct ata_queued_cmd *ata_qc_new_init(struct ata_device *dev); 66extern struct ata_queued_cmd *ata_qc_new_init(struct ata_device *dev);
65extern int ata_build_rw_tf(struct ata_taskfile *tf, struct ata_device *dev, 67extern int ata_build_rw_tf(struct ata_taskfile *tf, struct ata_device *dev,
66 u64 block, u32 n_block, unsigned int tf_flags, 68 u64 block, u32 n_block, unsigned int tf_flags,