|
|
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: char *argv0; /* not a good place, is it */ ! 8: ! 9: int ! 10: gen_sense(ClientData cd, Tcl_Interp *it, int argc, char **argv) ! 11: { ! 12: struct scsi_cmd cmd; ! 13: struct scsi_return ret; ! 14: int i, unit; ! 15: ! 16: #pragma ref it ! 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, 4, 0); ! 25: if(s_io(0, &cmd, 0, &ret, 4, cd->err)) ! 26: ERR_RETURN; ! 27: printf("sense(%d,%d): ", s_id, unit); ! 28: if((ret.data[0]&0x7F) == 0) ! 29: printf("no error\n"); ! 30: else { ! 31: printf("error class=0x%x, code=0x%x, sense=0x%x", ! 32: (ret.data[0]>>4)&7, ret.data[0]&0xF, ret.data[2]&0xF); ! 33: if(ret.data[0]&0x80) ! 34: printf(", addr=0x%x", ret.data[3]+256L*ret.data[2]+256L*256*ret.data[1]); ! 35: printf("\n"); ! 36: } ! 37: } ! 38: return(TCL_OK); ! 39: } ! 40: ! 41: static char *exstab[16] = ! 42: { ! 43: "no sense", ! 44: "recovered error", ! 45: "not ready", ! 46: "medium error", ! 47: "hardware error", ! 48: "illegal request", ! 49: "unit attention", ! 50: "data protect", ! 51: "blank check", ! 52: "vendor specific (#9)", ! 53: "copy aborted", ! 54: "aborted command", ! 55: "equal", ! 56: "volume overflow", ! 57: "miscompare", ! 58: "reserved (#f)", ! 59: }; ! 60: ! 61: void ! 62: gen_extsense(uchar *data, char *dest, int ndata) ! 63: { ! 64: int class; ! 65: ! 66: #pragma ref ndata ! 67: ! 68: class = (data[0]>>4)&7; ! 69: if(class == 7){ ! 70: if(data[0]&0x80) ! 71: sprintf(dest, "extended sense: %s info=#%2.2x#%2.2x#%2.2x#%2.2x", exstab[data[2]&0xF], data[3], data[4], data[5], data[6]); ! 72: else ! 73: sprintf(dest, "extended sense: %s", exstab[data[2]&0xF]); ! 74: } else { ! 75: sprintf(dest, "sense: class=#%x, code=#%x", class, data[0]&0xF); ! 76: } ! 77: }
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.