diff options
| -rw-r--r-- | drivers/ide/ide-iops.c | 40 |
1 files changed, 21 insertions, 19 deletions
diff --git a/drivers/ide/ide-iops.c b/drivers/ide/ide-iops.c index 925fd037cdde..91182ebed468 100644 --- a/drivers/ide/ide-iops.c +++ b/drivers/ide/ide-iops.c | |||
| @@ -940,6 +940,25 @@ static ide_startstop_t atapi_reset_pollfunc (ide_drive_t *drive) | |||
| 940 | return ide_stopped; | 940 | return ide_stopped; |
| 941 | } | 941 | } |
| 942 | 942 | ||
| 943 | static void ide_reset_report_error(ide_hwif_t *hwif, u8 err) | ||
| 944 | { | ||
| 945 | static const char *err_master_vals[] = | ||
| 946 | { NULL, "passed", "formatter device error", | ||
| 947 | "sector buffer error", "ECC circuitry error", | ||
| 948 | "controlling MPU error" }; | ||
| 949 | |||
| 950 | u8 err_master = err & 0x7f; | ||
| 951 | |||
| 952 | printk(KERN_ERR "%s: reset: master: ", hwif->name); | ||
| 953 | if (err_master && err_master < 6) | ||
| 954 | printk(KERN_CONT "%s", err_master_vals[err_master]); | ||
| 955 | else | ||
| 956 | printk(KERN_CONT "error (0x%02x?)", err); | ||
| 957 | if (err & 0x80) | ||
| 958 | printk(KERN_CONT "; slave: failed"); | ||
| 959 | printk(KERN_CONT "\n"); | ||
| 960 | } | ||
| 961 | |||
| 943 | /* | 962 | /* |
| 944 | * reset_pollfunc() gets invoked to poll the interface for completion every 50ms | 963 | * reset_pollfunc() gets invoked to poll the interface for completion every 50ms |
| 945 | * during an ide reset operation. If the drives have not yet responded, | 964 | * during an ide reset operation. If the drives have not yet responded, |
| @@ -975,31 +994,14 @@ static ide_startstop_t reset_pollfunc (ide_drive_t *drive) | |||
| 975 | drive->failures++; | 994 | drive->failures++; |
| 976 | err = -EIO; | 995 | err = -EIO; |
| 977 | } else { | 996 | } else { |
| 978 | printk("%s: reset: ", hwif->name); | ||
| 979 | tmp = ide_read_error(drive); | 997 | tmp = ide_read_error(drive); |
| 980 | 998 | ||
| 981 | if (tmp == 1) { | 999 | if (tmp == 1) { |
| 982 | printk("success\n"); | 1000 | printk(KERN_INFO "%s: reset: success\n", hwif->name); |
| 983 | drive->failures = 0; | 1001 | drive->failures = 0; |
| 984 | } else { | 1002 | } else { |
| 1003 | ide_reset_report_error(hwif, tmp); | ||
| 985 | drive->failures++; | 1004 | drive->failures++; |
| 986 | printk("master: "); | ||
| 987 | switch (tmp & 0x7f) { | ||
| 988 | case 1: printk("passed"); | ||
| 989 | break; | ||
| 990 | case 2: printk("formatter device error"); | ||
| 991 | break; | ||
| 992 | case 3: printk("sector buffer error"); | ||
| 993 | break; | ||
| 994 | case 4: printk("ECC circuitry error"); | ||
| 995 | break; | ||
| 996 | case 5: printk("controlling MPU error"); | ||
| 997 | break; | ||
| 998 | default:printk("error (0x%02x?)", tmp); | ||
| 999 | } | ||
| 1000 | if (tmp & 0x80) | ||
| 1001 | printk("; slave: failed"); | ||
| 1002 | printk("\n"); | ||
| 1003 | err = -EIO; | 1005 | err = -EIO; |
| 1004 | } | 1006 | } |
| 1005 | } | 1007 | } |
