libata: make ata_tf_to_lba[48]() generic
Tejun Heo [Thu, 27 Mar 2008 10:14:23 +0000 (19:14 +0900)]
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>

drivers/ata/libata-core.c
drivers/ata/libata.h

index 9121cc4..4d78f5d 100644 (file)
@@ -1211,7 +1211,7 @@ static u64 ata_id_n_sectors(const u16 *id)
        }
 }
 
-static u64 ata_tf_to_lba48(struct ata_taskfile *tf)
+u64 ata_tf_to_lba48(const struct ata_taskfile *tf)
 {
        u64 sectors = 0;
 
@@ -1222,10 +1222,10 @@ static u64 ata_tf_to_lba48(struct ata_taskfile *tf)
        sectors |= (tf->lbam & 0xff) << 8;
        sectors |= (tf->lbal & 0xff);
 
-       return ++sectors;
+       return sectors;
 }
 
-static u64 ata_tf_to_lba(struct ata_taskfile *tf)
+u64 ata_tf_to_lba(const struct ata_taskfile *tf)
 {
        u64 sectors = 0;
 
@@ -1234,7 +1234,7 @@ static u64 ata_tf_to_lba(struct ata_taskfile *tf)
        sectors |= (tf->lbam & 0xff) << 8;
        sectors |= (tf->lbal & 0xff);
 
-       return ++sectors;
+       return sectors;
 }
 
 /**
@@ -1279,9 +1279,9 @@ static int ata_read_native_max_address(struct ata_device *dev, u64 *max_sectors)
        }
 
        if (lba48)
-               *max_sectors = ata_tf_to_lba48(&tf);
+               *max_sectors = ata_tf_to_lba48(&tf) + 1;
        else
-               *max_sectors = ata_tf_to_lba(&tf);
+               *max_sectors = ata_tf_to_lba(&tf) + 1;
        if (dev->horkage & ATA_HORKAGE_HPA_SIZE)
                (*max_sectors)--;
        return 0;
index a69f663..5e8d035 100644 (file)
@@ -61,6 +61,8 @@ extern int libata_fua;
 extern int libata_noacpi;
 extern int libata_allow_tpm;
 extern void ata_force_cbl(struct ata_port *ap);
+extern u64 ata_tf_to_lba(const struct ata_taskfile *tf);
+extern u64 ata_tf_to_lba48(const struct ata_taskfile *tf);
 extern struct ata_queued_cmd *ata_qc_new_init(struct ata_device *dev);
 extern int ata_build_rw_tf(struct ata_taskfile *tf, struct ata_device *dev,
                           u64 block, u32 n_block, unsigned int tf_flags,