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