|
|
1.1 root 1: #include <stdio.h>
2: #include "../scsi.h"
3: #include "../scsish.h"
4:
5: static
6: shelf(int i)
7: {
8: printf(": ");
9: if(i&0x80){
10: printf("%s,", (i&0x40)? "disk":"temporary");
11: if(i&0x10) printf("wait loading,");
12: if(i&0x08) printf("wait ejection,");
13: if(i&0x20) printf("use shelf instead of drive for LUN %d", i&7);
14: } else
15: printf("no disk");
16: printf("\n");
17: }
18:
19: int
20: sony_istatus(struct scsi_return *ret, char *err)
21: {
22: struct scsi_cmd cmd;
23: int n;
24:
25: set6(cmd, 0x1D, 0, 0, 0, 10, 0);
26: cmd.data[0] = 0xE2; /* internal status */
27: cmd.data[1] = 0;
28: cmd.data[2] = 0;
29: cmd.data[3] = 0;
30: cmd.data[4] = 0;
31: cmd.data[5] = 0;
32: cmd.data[6] = 0;
33: cmd.data[7] = 0;
34: cmd.data[8] = 0;
35: cmd.data[9] = 0;
36: if(n = s_io(0, &cmd, 10, ret, 0, err))
37: return(n);
38: setdiag(cmd, 0, 128);
39: if(n = s_io(0, &cmd, 0, ret, 128, err))
40: return(n);
41: return(0);
42: }
43:
44: int
45: sony_status(int niargs, int *iargs, int ncargs, char **cargs, char *err)
46: {
47: struct scsi_return ret;
48: int n, i, start;
49: uchar *d;
50:
51: #pragma ref niargs
52: #pragma ref iargs
53: #pragma ref ncargs
54: #pragma ref cargs
55:
56: if(n = sony_istatus(&ret, err))
57: return(n);
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(0);
104: }
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.