diff options
Diffstat (limited to 'drivers/ide/ide-lib.c')
| -rw-r--r-- | drivers/ide/ide-lib.c | 28 | 
1 files changed, 15 insertions, 13 deletions
diff --git a/drivers/ide/ide-lib.c b/drivers/ide/ide-lib.c index 217b7fdf2b1..56ff8c46c7d 100644 --- a/drivers/ide/ide-lib.c +++ b/drivers/ide/ide-lib.c @@ -49,16 +49,17 @@ static void ide_dump_opcode(ide_drive_t *drive)  		printk(KERN_CONT "0x%02x\n", cmd->tf.command);  } -u64 ide_get_lba_addr(struct ide_taskfile *tf, int lba48) +u64 ide_get_lba_addr(struct ide_cmd *cmd, int lba48)  { +	struct ide_taskfile *tf = &cmd->tf;  	u32 high, low; -	if (lba48) -		high = (tf->hob_lbah << 16) | (tf->hob_lbam << 8) | -			tf->hob_lbal; -	else -		high = tf->device & 0xf;  	low  = (tf->lbah << 16) | (tf->lbam << 8) | tf->lbal; +	if (lba48) { +		tf = &cmd->hob; +		high = (tf->lbah << 16) | (tf->lbam << 8) | tf->lbal; +	} else +		high = tf->device & 0xf;  	return ((u64)high << 24) | low;  } @@ -71,17 +72,18 @@ static void ide_dump_sector(ide_drive_t *drive)  	u8 lba48 = !!(drive->dev_flags & IDE_DFLAG_LBA48);  	memset(&cmd, 0, sizeof(cmd)); -	if (lba48) -		cmd.tf_flags = IDE_TFLAG_IN_LBA | IDE_TFLAG_IN_HOB_LBA | -				IDE_TFLAG_LBA48; -	else -		cmd.tf_flags = IDE_TFLAG_IN_LBA | IDE_TFLAG_IN_DEVICE; +	if (lba48) { +		cmd.valid.in.tf  = IDE_VALID_LBA; +		cmd.valid.in.hob = IDE_VALID_LBA; +		cmd.tf_flags = IDE_TFLAG_LBA48; +	} else +		cmd.valid.in.tf  = IDE_VALID_LBA | IDE_VALID_DEVICE; -	drive->hwif->tp_ops->tf_read(drive, &cmd); +	ide_tf_readback(drive, &cmd);  	if (lba48 || (tf->device & ATA_LBA))  		printk(KERN_CONT ", LBAsect=%llu", -			(unsigned long long)ide_get_lba_addr(tf, lba48)); +			(unsigned long long)ide_get_lba_addr(&cmd, lba48));  	else  		printk(KERN_CONT ", CHS=%d/%d/%d", (tf->lbah << 8) + tf->lbam,  			tf->device & 0xf, tf->lbal);  | 
