ide: use ->tf_read in ide_read_error()
* Add IDE_TFLAG_IN_FEATURE taskfile flag for reading Feature register and handle it in ->tf_read. * Convert ide_read_error() to use ->tf_read instead of ->INB, then uninline and export it. Signed-off-by: Bartlomiej Zolnierkiewicz <bzolnier@gmail.com>
This commit is contained in:
parent
40f095f013
commit
92eb43800a
5 changed files with 24 additions and 7 deletions
|
@ -100,6 +100,8 @@ static void h8300_tf_read(ide_drive_t *drive, ide_task_t *task)
|
|||
/* be sure we're looking at the low order bits */
|
||||
outb(ATA_DEVCTL_OBS & ~0x80, io_ports->ctl_addr);
|
||||
|
||||
if (task->tf_flags & IDE_TFLAG_IN_FEATURE)
|
||||
tf->feature = inb(io_ports->feature_addr);
|
||||
if (task->tf_flags & IDE_TFLAG_IN_NSECT)
|
||||
tf->nsect = inb(io_ports->nsect_addr);
|
||||
if (task->tf_flags & IDE_TFLAG_IN_LBAL)
|
||||
|
|
|
@ -241,6 +241,8 @@ static void ide_tf_read(ide_drive_t *drive, ide_task_t *task)
|
|||
/* be sure we're looking at the low order bits */
|
||||
tf_outb(ATA_DEVCTL_OBS & ~0x80, io_ports->ctl_addr);
|
||||
|
||||
if (task->tf_flags & IDE_TFLAG_IN_FEATURE)
|
||||
tf->feature = tf_inb(io_ports->feature_addr);
|
||||
if (task->tf_flags & IDE_TFLAG_IN_NSECT)
|
||||
tf->nsect = tf_inb(io_ports->nsect_addr);
|
||||
if (task->tf_flags & IDE_TFLAG_IN_LBAL)
|
||||
|
@ -390,6 +392,19 @@ void default_hwif_transport(ide_hwif_t *hwif)
|
|||
hwif->output_data = ata_output_data;
|
||||
}
|
||||
|
||||
u8 ide_read_error(ide_drive_t *drive)
|
||||
{
|
||||
ide_task_t task;
|
||||
|
||||
memset(&task, 0, sizeof(task));
|
||||
task.tf_flags = IDE_TFLAG_IN_FEATURE;
|
||||
|
||||
drive->hwif->tf_read(drive, &task);
|
||||
|
||||
return task.tf.error;
|
||||
}
|
||||
EXPORT_SYMBOL_GPL(ide_read_error);
|
||||
|
||||
void ide_fix_driveid (struct hd_driveid *id)
|
||||
{
|
||||
#ifndef __LITTLE_ENDIAN
|
||||
|
|
|
@ -88,6 +88,8 @@ static void superio_tf_read(ide_drive_t *drive, ide_task_t *task)
|
|||
/* be sure we're looking at the low order bits */
|
||||
outb(ATA_DEVCTL_OBS & ~0x80, io_ports->ctl_addr);
|
||||
|
||||
if (task->tf_flags & IDE_TFLAG_IN_FEATURE)
|
||||
tf->feature = inb(io_ports->feature_addr);
|
||||
if (task->tf_flags & IDE_TFLAG_IN_NSECT)
|
||||
tf->nsect = inb(io_ports->nsect_addr);
|
||||
if (task->tf_flags & IDE_TFLAG_IN_LBAL)
|
||||
|
|
|
@ -741,6 +741,8 @@ static void scc_tf_read(ide_drive_t *drive, ide_task_t *task)
|
|||
/* be sure we're looking at the low order bits */
|
||||
scc_ide_outb(ATA_DEVCTL_OBS & ~0x80, io_ports->ctl_addr);
|
||||
|
||||
if (task->tf_flags & IDE_TFLAG_IN_FEATURE)
|
||||
tf->feature = scc_ide_inb(io_ports->feature_addr);
|
||||
if (task->tf_flags & IDE_TFLAG_IN_NSECT)
|
||||
tf->nsect = scc_ide_inb(io_ports->nsect_addr);
|
||||
if (task->tf_flags & IDE_TFLAG_IN_LBAL)
|
||||
|
|
|
@ -889,6 +889,7 @@ enum {
|
|||
IDE_TFLAG_IN_HOB = IDE_TFLAG_IN_HOB_FEATURE |
|
||||
IDE_TFLAG_IN_HOB_NSECT |
|
||||
IDE_TFLAG_IN_HOB_LBA,
|
||||
IDE_TFLAG_IN_FEATURE = (1 << 1),
|
||||
IDE_TFLAG_IN_NSECT = (1 << 25),
|
||||
IDE_TFLAG_IN_LBAL = (1 << 26),
|
||||
IDE_TFLAG_IN_LBAM = (1 << 27),
|
||||
|
@ -956,6 +957,8 @@ void ide_tf_dump(const char *, struct ide_taskfile *);
|
|||
extern void SELECT_DRIVE(ide_drive_t *);
|
||||
void SELECT_MASK(ide_drive_t *, int);
|
||||
|
||||
u8 ide_read_error(ide_drive_t *);
|
||||
|
||||
extern int drive_is_ready(ide_drive_t *);
|
||||
|
||||
void ide_pktcmd_tf_load(ide_drive_t *, u32, u16, u8);
|
||||
|
@ -1357,11 +1360,4 @@ static inline ide_drive_t *ide_get_paired_drive(ide_drive_t *drive)
|
|||
|
||||
return &hwif->drives[(drive->dn ^ 1) & 1];
|
||||
}
|
||||
|
||||
static inline u8 ide_read_error(ide_drive_t *drive)
|
||||
{
|
||||
ide_hwif_t *hwif = drive->hwif;
|
||||
|
||||
return hwif->INB(hwif->io_ports.error_addr);
|
||||
}
|
||||
#endif /* _IDE_H */
|
||||
|
|
Loading…
Reference in a new issue