ide: idedisk_supports_lba48() -> ata_id_lba48_enabled()
PATCH 3/3 ide: idedisk_supports_lba48() -> ata_id_lba48_enabled()
* Add ata_id_lba48_enabled() inline helper to <linux/ata.h>.
* idedisk_supports_lba48() -> ata_id_lba48_enabled()
The latter one also checks validity of words 83 & 86.
Cc Jeff Garzik <[email protected]>
Signed-off-by Bartlomiej Zolnierkiewicz <[email protected]>
--- drivers/ide/ide-disk.c | 21 ++++++--------------- include/linux/ata.h | 9 +++++++++ 2 files changed, 15 insertions(+), 15 deletions(-)
drivers/ide/ide-disk.c +6 -15
@@ -377,16 +377,6 @@ static unsigned long long sectors_to_MB( }/* -* The same here. -*/ -static inline int idedisk_supports_lba48 (const u16 *id) -{ -return (id[ATA_ID_COMMAND_SET_2 ] &0x0400 ) && - (id[ATA_ID_CFS_ENABLE_2 ] &0x0400 ) && -ata_id_u64 (id,ATA_ID_LBA_CAPACITY_2 ); -} - -/* * Some disks report total number of sectors instead of * maximum sector address. We list them here. */
@@ -400,7 +390,7 @@ static const struct drive_list_entry hpastatic void idedisk_check_hpa (ide_drive_t *drive) {unsigned long long capacity, set_max; -int lba48 =idedisk_supports_lba48 (drive->id); +int lba48 =ata_id_lba48_enabled (drive->id); capacity = drive->capacity64;
@@ -457,7 +447,7 @@ static void init_idedisk_capacity(ide_dr*/ int hpa =ata_id_hpa_enabled (id); -if (idedisk_supports_lba48 (id)) { +if (ata_id_lba48_enabled (id)) {/* drive speaks 48-bit LBA */ drive->select.b.lba =1 ; drive->capacity64 =ata_id_u64 (id,ATA_ID_LBA_CAPACITY_2 );
@@ -761,9 +751,11 @@ static int set_lba_addressing(ide_drive_if (drive->hwif->host_flags &IDE_HFLAG_NO_LBA48 )return 0 ; -if (!idedisk_supports_lba48 (drive->id)) +if (ata_id_lba48_enabled (drive->id) ==0 )return -EIO ; + drive->addressing = arg; +return 0 ; }
@@ -860,8 +852,7 @@ static void idedisk_setup(ide_drive_t *d capacity =idedisk_capacity (drive);if (!drive->forced_geom) { - -if (idedisk_supports_lba48 (drive->id)) { +if (ata_id_lba48_enabled (drive->id)) {/* compatibility */ drive->bios_sect =63 ; drive->bios_head =255 ;
include/linux/ata.h +9 -0
@@ -573,6 +573,15 @@ static inline int ata_id_has_lba48(constreturn id[ATA_ID_COMMAND_SET_2 ] & (1 <<10 ); } +static inline int ata_id_lba48_enabled (const u16 *id) +{ +if (ata_id_has_lba48 (id) ==0 ) +return 0 ; +if ((id[ATA_ID_CSF_DEFAULT ] &0xC000 ) !=0x4000 ) +return 0 ; +return id[ATA_ID_CFS_ENABLE_2 ] & (1 <<10 ); +} +static inline int ata_id_hpa_enabled (const u16 *id) {/* Yes children, word 83 valid bits cover word 82 data */