📄 scsierrs.c
字号:
"\147\003modification of logical unit failed", /* 67 03 */ "\147\004exchange of logical unit failed", /* 67 04 */ "\147\005remove of logical unit failed", /* 67 05 */ "\147\006attachment of logical unit failed", /* 67 06 */ "\147\007creation of logical unit failed", /* 67 07 */ "\150\000logical unit not configured", /* 68 00 */ "\151\000data loss on logical unit", /* 69 00 */ "\151\001multiple logical unit failures", /* 69 01 */ "\151\002parity/data mismatch", /* 69 02 */ "\152\000informational, refer to log", /* 6A 00 */ "\153\000state change has occurred", /* 6B 00 */ "\153\001redundancy level got better", /* 6B 01 */ "\153\002redundancy level got worse", /* 6B 02 */ "\154\000rebuild failure occurred", /* 6C 00 */ "\155\000recalculate failure occurred", /* 6D 00 */ "\156\000command to logical unit failed", /* 6E 00 */#ifdef XXX "\160\000nn decompression exception short algorithm id of nn", /* 70 00 */#endif "\161\000decompression exception long algorithm id", /* 71 00 */ "\162\000session fixation error", /* 72 00 */ "\162\001session fixation error writing lead-in", /* 72 01 */ "\162\002session fixation error writing lead-out", /* 72 02 */ "\162\003session fixation error - incomplete track in session", /* 72 03 */ "\162\004empty or partially written reserved track", /* 72 04 */ "\163\000cd control error", /* 73 00 */ "\163\001power calibration area almost full", /* 73 01 */ "\163\002power calibration area is full", /* 73 02 */ "\163\003power calibration area error", /* 73 03 */ "\163\004program memory area update failure", /* 73 04 */ "\163\005program memory area is full", /* 73 05 */#ifdef XXX "\200\000start vendor unique", /* 80 00 */#endif};#ifdef SMO_C501static const char *sd_smo_c501_error_str[] = { "\012\000disk not inserted", /* 0x0a */ "\013\000load/unload failure", /* 0x0b */ "\014\000spindle failure", /* 0x0c */ "\015\000focus failure", /* 0x0d */ "\016\000tracking failure", /* 0x0e */ "\017\000bias magnet failure", /* 0x0f */ "\043\000illegal function for medium type", /* 0x23 *//*XXX*/ "\070\000recoverable write error", /* 0x38 *//*XXX*/ "\071\000write error recovery failed", /* 0x39 */ "\072\000defect list update failed", /* 0x3a */ "\075\000defect list not available", /* 0x3d */ "\200\000limited laser life", /* 0x80 */ "\201\000laser focus coil over-current", /* 0x81 */ "\202\000laser tracking coil over-current", /* 0x82 */ "\203\000temperature alarm", /* 0x83 */ NULL};#endifstatic char *sd_sense_keys[] = { "No Additional Sense", /* 0x00 */ "Recovered Error", /* 0x01 */ "Not Ready", /* 0x02 */ "Medium Error", /* 0x03 */ "Hardware Error", /* 0x04 */ "Illegal Request", /* 0x05 */ "Unit Attention", /* 0x06 */ "Data Protect", /* 0x07 */ "Blank Check", /* 0x08 */ "Vendor Unique", /* 0x09 */ "Copy Aborted", /* 0x0a */ "Aborted Command", /* 0x0b */ "Equal", /* 0x0c */ "Volume Overflow", /* 0x0d */ "Miscompare", /* 0x0e */ "Reserved" /* 0x0f */};static char *sd_cmds[] = { "\000test unit ready", /* 0x00 */ "\001rezero", /* 0x01 */ "\003request sense", /* 0x03 */ "\004format", /* 0x04 */ "\007reassign", /* 0x07 */ "\010read", /* 0x08 */ "\012write", /* 0x0a */ "\013seek", /* 0x0b */ "\022inquiry", /* 0x12 */ "\025mode select", /* 0x15 */ "\026reserve", /* 0x16 */ "\027release", /* 0x17 */ "\030copy", /* 0x18 */ "\032mode sense", /* 0x1a */ "\033start/stop", /* 0x1b */ "\036door lock", /* 0x1e */ "\067read defect data", /* 0x37 */ NULL};EXPORTconst char *scsisensemsg(ctype, code, qual, vec, sbuf) register int ctype; register int code; register int qual; register const char **vec; char *sbuf;{ register int i; /* * Ignore controller type if error vec is supplied. */ if (vec == (const char **)NULL) switch (ctype) { case DEV_MD21: vec = sd_ccs_error_str; break; case DEV_ACB40X0: case DEV_ACB4000: case DEV_ACB4010: case DEV_ACB4070: case DEV_ACB5500: vec = sd_adaptec_error_str; break;#ifdef SMO_C501 case DEV_SONY_SMO: vec = sd_smo_c501_error_str; break;#endif default: vec = sd_ccs_error_str; } if (vec == (const char **)NULL) return (""); for (i = 0; i < 2; i++) { while (*vec != (char *) NULL) { if (code == (u_char)(*vec)[0] && qual == (u_char)(*vec)[1]) { return (&(*vec)[2]); } else { vec++; /* Next entry */ } } if (*vec == (char *) NULL) /* End of List: switch over */ vec = sd_ccs_error_str; } if (code == 0x40) { sprintf(sbuf, "diagnostic failure on component 0x%X", qual); return (sbuf); } if (code == 0x4D) { sprintf(sbuf, "tagged overlapped commands, queue tag is 0x%X", qual); return (sbuf); } if (code == 0x70) { sprintf(sbuf, "decompression exception short algorithm id of 0x%X", qual); return (sbuf); } if (qual != 0) return ((char *)NULL); if (code <= 0x80) { sprintf(sbuf, "invalid sense code 0x%X", code); return (sbuf); } sprintf(sbuf, "vendor unique sense code 0x%X", code); return (sbuf);}#undef sense /*XXX JS Hack, solange scgio.h noch nicht fertig ist */EXPORT voidscsierrmsg(sense, status, sense_code, errvec) register struct scsi_sense *sense; register struct scsi_status *status; int sense_code; const char **errvec;{ char sbuf[80]; const char *sensemsg, *cmdname, *sensekey;#define ext_sense ((struct scsi_ext_sense* ) sense) register int blkno = 0; register int code; int badqual = 0; int qual = 0; int fru = 0; int key = 0; int segment = 0; int blkvalid = 0; int fm = 0; int eom = 0; int ili = 0; int sksv = 0; extern int dev; sensekey = sensemsg = "[]"; if (sense->code >= 0x70) { if (sense_code >= 0) code = sense_code; else code = ext_sense->sense_code; segment = ext_sense->seg_num; qual = ext_sense->qual_code; fru = ext_sense->fru_code; sksv = ext_sense->sksv; } else { code = sense->code; } if (status->chk == 0) { sensemsg = "no sense"; } else { if (sense->code >= 0x70) { key = ext_sense->key; if (key < 0x10) sensekey = sd_sense_keys[ext_sense->key]; else sensekey = "invalid sensekey"; blkno = (ext_sense->info_1 << 24) | (ext_sense->info_2 << 16) | (ext_sense->info_3 << 8) | ext_sense->info_4; fm = ext_sense->fil_mk; eom = ext_sense->eom; ili = ext_sense->ili; } else { key = -1; sensekey = "[]"; blkno = (sense->high_addr << 16) | (sense->mid_addr << 8) | sense->low_addr; fm = eom = 0; } blkvalid = sense->adr_val; sensemsg = scsisensemsg(dev, code, qual, errvec, sbuf); if (sensemsg == NULL) { sensemsg = scsisensemsg(dev, code, 0, errvec, sbuf); badqual = 1; } }/* if (un->un_cmd < sizeof(scsi_cmds)) { cmdname = scsi_cmds[un->un_cmd]; } else { cmdname = "unknown cmd"; }*/ cmdname = ""; printf("%sSense Key: 0x%X %s%s, Segment %d\n", cmdname, key, sensekey, (sense->code == 0x71)?", deferred error":"", segment); printf("Sense Code: 0x%02X Qual 0x%02X %s%s%s%s Fru 0x%X\n", code, qual, *sensemsg?"(":"", sensemsg, *sensemsg?")":"", badqual? " [No matching qualifier]":"", fru); printf("Sense flags: Blk %d %s%s%s%s", blkno, blkvalid?"(valid) ":"(not valid) ", fm?"file mark detected ":"", eom?"end of medium ":"", ili?"illegal block length ":""); if (!sksv) { printf("\n"); return; } switch (key) { case SC_ILLEGAL_REQUEST: printf("error refers to %s part, bit ptr %d %s field ptr %d", ext_sense->cd? "command":"data", ext_sense->bptr, ext_sense->bpv? "(valid)":"(not valid)", ext_sense->field_ptr[0] << 8 | ext_sense->field_ptr[1]); break; case SC_RECOVERABLE_ERROR: case SC_HARDWARE_ERROR: case SC_MEDIUM_ERROR: printf("actual retry count %d", ext_sense->field_ptr[0] << 8 | ext_sense->field_ptr[1]); break; case SC_NOT_READY: printf("operation %d%% done", (100*(ext_sense->field_ptr[0] << 8 | ext_sense->field_ptr[1]))/0x1000); break; } printf("\n");}#ifdef DEBUGprint_err(code, ctype){ register int i; register char **vec = (char **)NULL; switch (ctype) { case CTYPE_MD21: case CTYPE_CCS: vec = sd_ccs_error_str; break; case CTYPE_ACB4000: vec = sd_adaptec_error_str; break;#ifdef SMO_C501 case CTYPE_SMO_C501: vec = sd_smo_c501_error_str; break;#endif#ifdef CDD_521 case DEV_CDD_521: vec = sd_cdd_521_error_str; break;#endif } printf("error code: 0x%x", code); if (vec == (char **)NULL) return; for (i = 0; i < 2; i++) { while (*vec != (char *) NULL) { if (code == (u_char)*vec[0]) { printf(" (%s)", (char *)((int)(*vec)+1)); return; } else vec++; } if (*vec == (char *) NULL) vec = sd_ccs_error_str; }}int dev;main(){ int i;#ifdef ACB for (i = 0; i < 0x30; i++) {/* printf("Code: 0x%x Key: 0x%x ", i, sd_adaptec_keys[i]);*/ printf("Key: 0x%x %-16s ", sd_adaptec_keys[i], sd_sense_keys[sd_adaptec_keys[i]] ); print_err(i, CTYPE_ACB4000); printf("\n"); }#else/* for (i = 0; i < 0x84; i++) {*/ for (i = 0; i < 0xd8; i++) {/* print_err(i, CTYPE_SMO_C501);*/ print_err(i, DEV_CDD_521); printf("\n"); }#endif}#endif
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -