File:  [Research Unix] / researchv10no / cmd / worm / scsi / getstatus.c
Revision 1.1.1.1 (vendor branch): download - view: text, annotated - select for diffs
Tue Apr 24 17:21:34 2018 UTC (8 years, 1 month ago) by root
Branches: belllabs, MAIN
CVS tags: researchv10, HEAD
researchv10 Norman

#include	<stddef.h>
#include	<stdio.h>
#include	"scsi.h"
#include	"juke.h"

struct Jstatus j_status;

static
dolun(struct Lunstatus *lun, uchar *u)
{
	lun->poweron = ((*u)&0x80) == 0;
	lun->diskin = ((*u)&0x40) != 0;
	lun->ready = ((*u)&0x01) != 0;
	u++;
	lun->diskindrive = ((*u)&0x80) != 0;
	lun->driveshelf = (*u)&0x7F;
	u++;
	lun->shelfvalid = ((*u)&0x80) != 0;
	lun->retshelf = (*u)&0x7F;
}

j_getstatus(char *err)
{
	struct scsi_cmd cmd;
	struct scsi_return ret;
	int i;

	set6(cmd, 0x1D, 0, 0, 0, 10, 0);
	memset(cmd.data, 0, 10);
	cmd.data[0] = 0xE2;
	if(s_io(1, &cmd, 10, &ret, 0, err))
		return(-1);
	set6(cmd, 0x1C, 0, 0, 0, 128, 0);
	if(s_io(0, &cmd, 0, &ret, 128, err))
		return(-1);
	for(i = 0; i < 8; i++)
		dolun(&j_status.lun[i], &ret.data[16+4*i]);
	for(i = 0; i < NSHELF; i++)
		j_status.shelf[i] = ret.data[48+i];
	j_status.iounit = ret.data[98];
	j_status.carrier = ret.data[99];
	j_status.udrive = ret.data[100];
	j_status.ldrive = ret.data[101];
	return(0);
}

unix.superglobalmegacorp.com

This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.