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