~kris/9p

9hist

cc1412aaa6949f4080fc9b1cfb6e79242d977424 — David du Colombier 31 years ago dbde4a0
Plan 9 from Bell Labs 1995-03-28
3 files changed, 55 insertions(+), 33 deletions(-)

M pc/devi82365.c
M pc/fns.h
M pc/scsi.c
M pc/devi82365.c => pc/devi82365.c +23 -18
@@ 559,6 559,19 @@ i82386probe(int x, int d, int dev)
	return cp;
}

static void
i82365dump(Slot *pp)
{
	int i;

	for(i = 0; i < 0x40; i++){
		if((i&0x7) == 0)
			print("\n%ux:	", i);
		print("%ux ", rdreg(pp, i));
	}
	print("\n");
}

/*
 *  set up for slot cards
 */


@@ 593,7 606,10 @@ i82365reset(void)
			pp->memlen = 64*MB;
			pp->base = (cp->dev<<7) | (j<<6);
			pp->cp = cp;
if(pp == slot)i82365dump(pp);
/*
			slotdis(pp);
*/

			/* interrupt on status change */
			wrreg(pp, Rcscic, ((PCMCIAvec-Int0vec)<<4) | Fchangeena);


@@ 780,18 796,6 @@ i82365read(Chan *c, void *a, long n, ulong offset)
		if(pp->busy)
			cp += sprint(cp, "busy\n");
		cp += sprint(cp, "battery lvl %d\n", pp->battery);
{
	int i;

	cp += sprint(cp, "x %x d %x b %x\n", pp->cp->xreg, pp->cp->dreg, pp->base);
	for(i = 0; i < 0x40; i++){
		cp += sprint(cp, "%2.2ux ", rdreg(pp, i));
		if((i%8) == 7)
			cp += sprint(cp, "\n");
	}
	if(i%8)
		cp += sprint(cp, "\n");
}
		*cp = 0;
		return readstr(offset, a, n, buf);
	default:


@@ 934,21 938,21 @@ pcmio(int slotno, ISAConf *isa)
		/*  Reset adapter */
		m = pcmmap(slotno, pp->caddr + Rconfig, 1, 1);
		p = (uchar*)(KZERO|(m->isa + pp->caddr + Rconfig - m->ca));
if(strstr(pp->verstr, "KeepInTouch") == 0){
		*p = Creset;
		delay(5);
		*p = 0;
		delay(5);
	
		/*
		 *  Set level sensitive (not pulsed) interrupts and
		 *  configuration number 1.
		 *  Setting the configuration number enables IO port access.
		 */
}

		/* set configuration */
if(strstr(pp->verstr, "KeepInTouch") == 0){
		if(isa->irq > 7)
			*p = Clevel | ct->index;
		else
			*p = ct->index;
		delay(5);
} else i82365dump(pp);
		pcmunmap(slotno, m);
	}
	return 0;


@@ 1306,3 1310,4 @@ tvers1(Slot *pp, int ttype)
	}
	pp->verstr[i] = 0;
}


M pc/fns.h => pc/fns.h +5 -1
@@ 2,7 2,7 @@

void	aamloop(int);
void	addconf(char*, char*);
void	addscsicard(char*, Scsiio (*)(int, ISAConf*));
void	addscsilink(char*, Scsiio (*)(int, ISAConf*));
void	bbinit(void);
void	bigcursor(void);
void	bootargs(ulong);


@@ 125,3 125,7 @@ ulong	ifunroute(ulong);
void	parseip(char*, char*);

#define	dcflush(a, b)

int scsibtissue(int, int, uchar*, int, uchar*, int);
Scsiio scsibt24(int, int, ISAConf*);
Scsiio scsibt32(int, int, ISAConf*);

M pc/scsi.c => pc/scsi.c +27 -14
@@ 25,28 25,38 @@ typedef struct {

static Ctlr *scsi[MaxScsi];

static struct {
typedef struct Link Link;
typedef struct Link {
	char	*type;
	Scsiio	(*reset)(int, ISAConf*);
} cards[MaxScsi+1];

	Link*	link;
} Link;

static Link *link;
static int linkcount;

void
addscsicard(char *t, Scsiio (*r)(int, ISAConf*))
addscsilink(char *t, Scsiio (*r)(int, ISAConf*))
{
	static int ncard;
	Link *lp;

	if((lp = xalloc(sizeof(Link))) == 0)
		return;
	lp->type = t;
	lp->reset = r;

	if(ncard == MaxScsi)
		panic("too many scsi cards\n");
	cards[ncard].type = t;
	cards[ncard].reset = r;
	ncard++;
	lp->link = link;
	link = lp;
	linkcount++;
}

void
scsireset(void)
{
	Ctlr *ctlr;
	int ctlrno, n, t;
	int ctlrno, t;
	Link *lp;

	for(ctlr = 0, ctlrno = 0; ctlrno < MaxScsi; ctlrno++){
		if(ctlr == 0)


@@ 54,15 64,18 @@ scsireset(void)
		memset(ctlr, 0, sizeof(Ctlr));
		if(isaconfig("scsi", ctlrno, ctlr) == 0)
			continue;
		for(n = 0; cards[n].type; n++){
			if(strcmp(cards[n].type, ctlr->type))
		for(lp = link; lp; lp = lp->link){
			if(strcmp(lp->type, ctlr->type))
				continue;
			if((ctlr->io = (*cards[n].reset)(ctlrno, ctlr)) == 0)
			if((ctlr->io = (*lp->reset)(ctlrno, ctlr)) == 0)
				break;

			print("scsi%d: %s: port %lux irq %d addr %lux size %d\n",
			print("scsi%d: %s: port %lux irq %d",
				ctlrno, ctlr->type, ctlr->port,
				ctlr->irq, ctlr->mem, ctlr->size);
			if(ctlr->mem)
				print(" addr %lux size %d\n", ctlr->mem, ctlr->size);
			print("\n");

			for(t = 0; t < NTarget; t++){
				ctlr->target[t].ctlrno = ctlrno;