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