diff options
author | Albert Lee <albertcc@tw.ibm.com> | 2005-10-12 15:12:26 +0800 |
---|---|---|
committer | Jeff Garzik <jgarzik@pobox.com> | 2005-10-18 17:18:16 -0400 |
commit | c6a33e2464edd87f8c12cc2d11369a5b44c65b77 (patch) | |
tree | f15eb374fa98fb1f76bf3a7cffd9cb8ef7173091 /include/linux/ata.h | |
parent | 59a10b172fccaea793352c00fd9065f0a5b4ef70 (diff) | |
download | talos-op-linux-c6a33e2464edd87f8c12cc2d11369a5b44c65b77.tar.gz talos-op-linux-c6a33e2464edd87f8c12cc2d11369a5b44c65b77.zip |
[PATCH] libata CHS: LBA28/LBA48 optimization (revise #6)
- add lba_28_ok() and lba_48_ok() to ata.h.
- check ending block number instead of staring block number.
- use lba_28_ok() for CHS range check
- LBA28/LBA48 optimization
Suggested by Mark Lord and Alan Cox.
Signed-off-by: Albert Lee <albertcc@tw.ibm.com>
=====
Signed-off-by: Jeff Garzik <jgarzik@pobox.com>
Diffstat (limited to 'include/linux/ata.h')
-rw-r--r-- | include/linux/ata.h | 12 |
1 files changed, 12 insertions, 0 deletions
diff --git a/include/linux/ata.h b/include/linux/ata.h index 630908c9378b..b7e7e1cb2633 100644 --- a/include/linux/ata.h +++ b/include/linux/ata.h @@ -291,4 +291,16 @@ static inline int ata_ok(u8 status) == ATA_DRDY); } +static inline int lba_28_ok(u64 block, u32 n_block) +{ + /* check the ending block number */ + return ((block + n_block - 1) < ((u64)1 << 28)) && (n_block <= 256); +} + +static inline int lba_48_ok(u64 block, u32 n_block) +{ + /* check the ending block number */ + return ((block + n_block - 1) < ((u64)1 << 48)) && (n_block <= 65536); +} + #endif /* __LINUX_ATA_H__ */ |