|
|
1.1 root 1: #include <stddef.h>
2: #include <stdio.h>
3: #include "scsi.h"
4: #include "juke.h"
5:
6: struct Jstatus j_status;
7:
8: static
9: dolun(struct Lunstatus *lun, uchar *u)
10: {
11: lun->poweron = ((*u)&0x80) == 0;
12: lun->diskin = ((*u)&0x40) != 0;
13: lun->ready = ((*u)&0x01) != 0;
14: u++;
15: lun->diskindrive = ((*u)&0x80) != 0;
16: lun->driveshelf = (*u)&0x7F;
17: u++;
18: lun->shelfvalid = ((*u)&0x80) != 0;
19: lun->retshelf = (*u)&0x7F;
20: }
21:
22: j_getstatus(char *err)
23: {
24: struct scsi_cmd cmd;
25: struct scsi_return ret;
26: int i;
27:
28: set6(cmd, 0x1D, 0, 0, 0, 10, 0);
29: memset(cmd.data, 0, 10);
30: cmd.data[0] = 0xE2;
31: if(s_io(1, &cmd, 10, &ret, 0, err))
32: return(-1);
33: set6(cmd, 0x1C, 0, 0, 0, 128, 0);
34: if(s_io(0, &cmd, 0, &ret, 128, err))
35: return(-1);
36: for(i = 0; i < 8; i++)
37: dolun(&j_status.lun[i], &ret.data[16+4*i]);
38: for(i = 0; i < NSHELF; i++)
39: j_status.shelf[i] = ret.data[48+i];
40: j_status.iounit = ret.data[98];
41: j_status.carrier = ret.data[99];
42: j_status.udrive = ret.data[100];
43: j_status.ldrive = ret.data[101];
44: return(0);
45: }
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.