|
|
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.