ide: kill duplicate code in ide_dump_{ata,atapi}_status()

* Move the common code from ide_dump_{ata,atapi}_status() to
  ide_dump_status().

* ide_dump_{ata,atapi}_status() -> ide_dump_{ata,atapi}_error().

There should be no functionality changes caused by this patch.
Acked-by: default avatarSergei Shtylyov <sshtylyov@ru.mvista.com>
Signed-off-by: default avatarBartlomiej Zolnierkiewicz <bzolnier@gmail.com>
parent a501633c
...@@ -517,61 +517,51 @@ static void ide_dump_sector(ide_drive_t *drive) ...@@ -517,61 +517,51 @@ static void ide_dump_sector(ide_drive_t *drive)
tf->device & 0xf, tf->lbal); tf->device & 0xf, tf->lbal);
} }
static u8 ide_dump_ata_status(ide_drive_t *drive, const char *msg, u8 stat) static void ide_dump_ata_error(ide_drive_t *drive, u8 err)
{ {
ide_hwif_t *hwif = HWIF(drive); printk("{ ");
unsigned long flags; if (err & ABRT_ERR) printk("DriveStatusError ");
u8 err = 0; if (err & ICRC_ERR)
printk((err & ABRT_ERR) ? "BadCRC " : "BadSector ");
local_irq_save(flags); if (err & ECC_ERR) printk("UncorrectableError ");
printk("%s: %s: status=0x%02x { ", drive->name, msg, stat); if (err & ID_ERR) printk("SectorIdNotFound ");
if (stat & BUSY_STAT) if (err & TRK0_ERR) printk("TrackZeroNotFound ");
printk("Busy "); if (err & MARK_ERR) printk("AddrMarkNotFound ");
else { printk("}");
if (stat & READY_STAT) printk("DriveReady "); if ((err & (BBD_ERR | ABRT_ERR)) == BBD_ERR ||
if (stat & WRERR_STAT) printk("DeviceFault "); (err & (ECC_ERR|ID_ERR|MARK_ERR))) {
if (stat & SEEK_STAT) printk("SeekComplete "); ide_dump_sector(drive);
if (stat & DRQ_STAT) printk("DataRequest "); if (HWGROUP(drive) && HWGROUP(drive)->rq)
if (stat & ECC_STAT) printk("CorrectedError "); printk(", sector=%llu",
if (stat & INDEX_STAT) printk("Index "); (unsigned long long)HWGROUP(drive)->rq->sector);
if (stat & ERR_STAT) printk("Error ");
} }
printk("\n");
}
static void ide_dump_atapi_error(ide_drive_t *drive, u8 err)
{
printk("{ ");
if (err & ILI_ERR) printk("IllegalLengthIndication ");
if (err & EOM_ERR) printk("EndOfMedia ");
if (err & ABRT_ERR) printk("AbortedCommand ");
if (err & MCR_ERR) printk("MediaChangeRequested ");
if (err & LFS_ERR) printk("LastFailedSense=0x%02x ",
(err & LFS_ERR) >> 4);
printk("}\n"); printk("}\n");
if ((stat & (BUSY_STAT|ERR_STAT)) == ERR_STAT) {
err = hwif->INB(IDE_ERROR_REG);
printk("%s: %s: error=0x%02x { ", drive->name, msg, err);
if (err & ABRT_ERR) printk("DriveStatusError ");
if (err & ICRC_ERR)
printk((err & ABRT_ERR) ? "BadCRC " : "BadSector ");
if (err & ECC_ERR) printk("UncorrectableError ");
if (err & ID_ERR) printk("SectorIdNotFound ");
if (err & TRK0_ERR) printk("TrackZeroNotFound ");
if (err & MARK_ERR) printk("AddrMarkNotFound ");
printk("}");
if ((err & (BBD_ERR | ABRT_ERR)) == BBD_ERR ||
(err & (ECC_ERR|ID_ERR|MARK_ERR))) {
ide_dump_sector(drive);
if (HWGROUP(drive) && HWGROUP(drive)->rq)
printk(", sector=%llu",
(unsigned long long)HWGROUP(drive)->rq->sector);
}
printk("\n");
}
ide_dump_opcode(drive);
local_irq_restore(flags);
return err;
} }
/** /**
* ide_dump_atapi_status - print human readable atapi status * ide_dump_status - translate ATA/ATAPI error
* @drive: drive that status applies to * @drive: drive that status applies to
* @msg: text message to print * @msg: text message to print
* @stat: status byte to decode * @stat: status byte to decode
* *
* Error reporting, in human readable form (luxurious, but a memory hog). * Error reporting, in human readable form (luxurious, but a memory hog).
* Combines the drive name, message and status byte to provide a
* user understandable explanation of the device error.
*/ */
static u8 ide_dump_atapi_status(ide_drive_t *drive, const char *msg, u8 stat) u8 ide_dump_status(ide_drive_t *drive, const char *msg, u8 stat)
{ {
unsigned long flags; unsigned long flags;
u8 err = 0; u8 err = 0;
...@@ -592,36 +582,15 @@ static u8 ide_dump_atapi_status(ide_drive_t *drive, const char *msg, u8 stat) ...@@ -592,36 +582,15 @@ static u8 ide_dump_atapi_status(ide_drive_t *drive, const char *msg, u8 stat)
printk("}\n"); printk("}\n");
if ((stat & (BUSY_STAT|ERR_STAT)) == ERR_STAT) { if ((stat & (BUSY_STAT|ERR_STAT)) == ERR_STAT) {
err = drive->hwif->INB(IDE_ERROR_REG); err = drive->hwif->INB(IDE_ERROR_REG);
printk("%s: %s: error=0x%02x { ", drive->name, msg, err); printk("%s: %s: error=0x%02x ", drive->name, msg, err);
if (err & ILI_ERR) printk("IllegalLengthIndication "); if (drive->media == ide_disk)
if (err & EOM_ERR) printk("EndOfMedia "); ide_dump_ata_error(drive, err);
if (err & ABRT_ERR) printk("AbortedCommand "); else
if (err & MCR_ERR) printk("MediaChangeRequested "); ide_dump_atapi_error(drive, err);
if (err & LFS_ERR) printk("LastFailedSense=0x%02x ",
(err & LFS_ERR) >> 4);
printk("}\n");
} }
ide_dump_opcode(drive); ide_dump_opcode(drive);
local_irq_restore(flags); local_irq_restore(flags);
return err; return err;
} }
/**
* ide_dump_status - translate ATA/ATAPI error
* @drive: drive the error occured on
* @msg: information string
* @stat: status byte
*
* Error reporting, in human readable form (luxurious, but a memory hog).
* Combines the drive name, message and status byte to provide a
* user understandable explanation of the device error.
*/
u8 ide_dump_status(ide_drive_t *drive, const char *msg, u8 stat)
{
if (drive->media == ide_disk)
return ide_dump_ata_status(drive, msg, stat);
return ide_dump_atapi_status(drive, msg, stat);
}
EXPORT_SYMBOL(ide_dump_status); EXPORT_SYMBOL(ide_dump_status);
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment