|
|
1.1 ! root 1: #include <stdio.h> ! 2: #include "../scsi.h" ! 3: #include "../scsish.h" ! 4: #include "../tcl.h" ! 5: #include "fns.h" ! 6: ! 7: int ! 8: sony_sense(ClientData cd, Tcl_Interp *it, int argc, char **argv) ! 9: { ! 10: struct scsi_cmd cmd; ! 11: struct scsi_return ret; ! 12: int i, unit; ! 13: char buf[4096]; ! 14: ! 15: #pragma ref ncargs ! 16: #pragma ref cargs ! 17: ! 18: if(argc <= 1) ! 19: argv[i = 0] = "0"; ! 20: else ! 21: i = 1; ! 22: for(; i < argc; i++){ ! 23: unit = atoi(argv[i]); ! 24: set6(cmd, 0x03, unit<<5, 0, 0, 32, 0); ! 25: if(s_io(0, &cmd, 0, &ret, -32, cd->err)) ! 26: ERR_RETURN ! 27: printf("sense(%d,%d): ", s_id, unit); ! 28: sony_extsense(ret.data, buf, sizeof buf); ! 29: printf("%s\n", buf); ! 30: } ! 31: return(TCL_OK); ! 32: } ! 33: ! 34: static char *exstab[16] = ! 35: { ! 36: "no sense", ! 37: "recovered error", ! 38: "not ready", ! 39: "medium error", ! 40: "hardware error", ! 41: "illegal request", ! 42: "unit attention", ! 43: "data protect", ! 44: "blank check", ! 45: "key #9", ! 46: "copy aborted", ! 47: "aborted command", ! 48: "key #c", ! 49: "volume overflow", ! 50: "miscompare", ! 51: "key #f", ! 52: }; ! 53: ! 54: void ! 55: sony_extsense(uchar *data, char *dest, int ndata) ! 56: { ! 57: char buf[4096]; ! 58: extern char *nesd[]; ! 59: ! 60: dest[0] = 0; ! 61: switch(data[2]) ! 62: { ! 63: case 0: ! 64: sprintf(dest, "no error"); ! 65: break; ! 66: case 0x1: /* recovered error */ ! 67: sprintf(dest, "recovered error"); ! 68: break; ! 69: case 0xA: /* recovered error */ ! 70: sprintf(dest, "recovered error"); ! 71: break; ! 72: default: ! 73: if(data[7] != 4) ! 74: sprintf((char *)data, "warning: extra data is %d, not 4! ", data[7]); ! 75: sprintf(buf, "sense: %s", nesd[data[8]&0x7f]); ! 76: strcat(dest, buf); ! 77: if(data[8]&0x80){ ! 78: sprintf(buf, " at addr #%x", data[11]+256L*data[10]+256L*256*data[9]); ! 79: strcat(dest, buf); ! 80: } ! 81: sprintf(buf, ", ext sense: %s", exstab[data[2]]); ! 82: strcat(dest, buf); ! 83: if(data[0]&0x80){ ! 84: sprintf(buf, " info=#%x", data[6]+256L*data[5]+256L*256L*data[4]+256L*256L*256L*data[3]); ! 85: strcat(dest, buf); ! 86: } ! 87: break; ! 88: } ! 89: }
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.