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