|
|
1.1 ! root 1: #include "scsi.h" ! 2: #include "juke.h" ! 3: ! 4: j_shelf_to_drive(int sh, Side side, int dr, char *err) ! 5: { ! 6: struct scsi_cmd cmd; ! 7: struct scsi_return ret; ! 8: ! 9: set6(cmd, 0xD6, dr<<5, 0, (sh<<1)|side, 0, 0); ! 10: return(s_io(0, &cmd, 0, &ret, 0, err)); ! 11: } ! 12: ! 13: j_drive_to_shelf(int dr, int sh, Side side, char *err) ! 14: { ! 15: struct scsi_cmd cmd; ! 16: struct scsi_return ret; ! 17: ! 18: if(sh < 0) ! 19: set6(cmd, 0xD7, dr<<5, 0, 0, 0, 0); ! 20: else ! 21: set6(cmd, 0xD7, (dr<<5)|1, 0, (sh<<1)|side, 0, 0); ! 22: return(s_io(0, &cmd, 0, &ret, 0, err)); ! 23: } ! 24: ! 25: int ! 26: j_empty_drive(long tlimit, char *buf) ! 27: { ! 28: int i, tstop; ! 29: ! 30: tstop = time((long *)0) + tlimit; ! 31: while(time((long *)0) <= tstop){ ! 32: setnlun(); /* in case it changes */ ! 33: /* look for empty drives */ ! 34: for(i = 0; i < nlun; i++) ! 35: if(!j_status.lun[i].diskin) ! 36: return(i); ! 37: /* look for spun down drives */ ! 38: for(i = 0; i < nlun; i++){ ! 39: if(!j_status.lun[i].ready){ ! 40: if(j_drive_to_shelf(i, -1, SIDEA, buf)) ! 41: return(-1); ! 42: else ! 43: return(i); ! 44: } ! 45: } ! 46: sleep(10); ! 47: if(j_getstatus(buf)) /* get the jukebox status */ ! 48: return(-1); ! 49: } ! 50: return(-1); ! 51: }
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.