|
|
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: static
8: shelf(int i)
9: {
10: printf(": ");
11: if(i&0x80){
12: printf("%s,", (i&0x40)? "disk":"temporary");
13: if(i&0x10) printf("wait loading,");
14: if(i&0x08) printf("wait ejection,");
15: if(i&0x20) printf("use shelf instead of drive for LUN %d", i&7);
16: } else
17: printf("no disk");
18: printf("\n");
19: }
20:
21: int
22: sony_istatus(struct scsi_return *ret, char *err)
23: {
24: struct scsi_cmd cmd;
25: int n;
26:
27: set6(cmd, 0x1D, 0, 0, 0, 10, 0);
28: cmd.data[0] = 0xE2; /* internal status */
29: cmd.data[1] = 0;
30: cmd.data[2] = 0;
31: cmd.data[3] = 0;
32: cmd.data[4] = 0;
33: cmd.data[5] = 0;
34: cmd.data[6] = 0;
35: cmd.data[7] = 0;
36: cmd.data[8] = 0;
37: cmd.data[9] = 0;
38: if(n = s_io(0, &cmd, 10, ret, 0, err))
39: return(n);
40: setdiag(cmd, 0, 128);
41: if(n = s_io(0, &cmd, 0, ret, 128, err))
42: return(n);
43: return(0);
44: }
45:
46: int
47: sony_status(ClientData cd, Tcl_Interp *it, int argc, char **argv)
48: {
49: struct scsi_return ret;
50: int i, start;
51: uchar *d;
52:
53: #pragma ref argc
54: #pragma ref argv
55:
56: if(sony_istatus(&ret, cd->err))
57: ERR_RETURN
58: d = &ret.data[16];
59: for(i = 0; i < 8; i++, d += 4){
60: printf("drive %d: %sready,%sdisk in LUN,power %s,", i,
61: (d[0]&1)?"":"not ", (d[0]&0x40)?"":"no ",
62: (d[0]&0x80)?"off":"on");
63: if(d[0]&0x40){
64: if(d[1]&0x80){
65: printf("disk in drive %d", d[1]&0x7f);
66: if(d[2]&0x80)
67: printf(", return shelf %d%c", (d[2]&0x7F)/2, "ab"[d[2]&1]);
68: } else
69: printf("disk in shelf %d%c (%d)", (d[1]&0x7f)/2, (d[1]&1)+'a', d[1]&0x7f);
70: }
71: printf("\n");
72: }
73: for(i = 0; i < 50;){
74: for(start = i; ++i < 50;)
75: if(d[i] != d[start])
76: break;
77: if(i == start+1)
78: printf("%d", start);
79: else
80: printf("%d-%d", start, i-1);
81: shelf(d[start]);
82: }
83: d += 50;
84: printf("I/O shelf");
85: shelf(*d);
86: d++;
87: printf("carrier: ");
88: i = *d&0x7F;
89: if(*d&0x80)
90: printf("disk shelf=%d%c (%d)\n", i/2, 'a'+(i&1), i);
91: else
92: printf("no disk\n");
93: d++;
94: if(*d&0x80)
95: printf("upper drive: disk, LUN=%d\n", *d&7);
96: else
97: printf("upper drive: no disk\n");
98: d++;
99: if(*d&0x80)
100: printf("lower drive: disk, LUN=%d\n", *d&7);
101: else
102: printf("lower drive: no disk\n");
103: return(TCL_OK);
104: }
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.