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