|
|
1.1 ! root 1: #include <stdio.h> ! 2: #include "../scsi.h" ! 3: #include "../scsish.h" ! 4: #include "fns.h" ! 5: ! 6: int ! 7: gen_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: ! 13: #pragma ref ncargs ! 14: #pragma ref cargs ! 15: ! 16: if(niargs == 0) ! 17: iargs[0] = 0; ! 18: set6(cmd, 0x03, iargs[0]<<5, 0, 0, 4, 0); ! 19: if(n = s_io(0, &cmd, 0, &ret, 4, err)) ! 20: return(n); ! 21: printf("sense(%d,%d): ", s_id, iargs[0]); ! 22: if((ret.data[0]&0x7F) == 0) ! 23: printf("no error\n"); ! 24: else { ! 25: printf("error class=0x%x, code=0x%x, sense=0x%x", ! 26: (ret.data[0]>>4)&7, ret.data[0]&0xF, ret.data[2]&0xF); ! 27: if(ret.data[0]&0x80) ! 28: printf(", addr=0x%x", ret.data[3]+256L*ret.data[2]+256L*256*ret.data[1]); ! 29: printf("\n"); ! 30: } ! 31: return(0); ! 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: "vendor specific (#9)", ! 46: "copy aborted", ! 47: "aborted command", ! 48: "equal", ! 49: "volume overflow", ! 50: "miscompare", ! 51: "reserved (#f)", ! 52: }; ! 53: ! 54: void ! 55: gen_extsense(uchar *data, char *dest, int ndata) ! 56: { ! 57: int class; ! 58: ! 59: class = (data[0]>>4)&7; ! 60: if(class == 7){ ! 61: if(data[0]&0x80) ! 62: 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]); ! 63: else ! 64: sprintf(dest, "extended sense: %s", exstab[data[2]&0xF]); ! 65: } else { ! 66: sprintf(dest, "sense: class=#%x, code=#%x", class, data[0]&0xF); ! 67: } ! 68: }
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.