~kris/9p

9hist

e28345d703c7fb80b9c440c147f60886efd3a135 — David du Colombier 26 years ago ce9d20b
Plan 9 from Bell Labs 2000-08-09
4 files changed, 28 insertions(+), 13 deletions(-)

M alphapc/sd.h
M pc/vgas3.c
M port/devsd.c
M port/sd.h
M alphapc/sd.h => alphapc/sd.h +2 -1
@@ 32,7 32,8 @@ typedef struct SDunit {
	QLock	ctl;
	ulong	sectors;
	ulong	secsize;
	SDpart*	part;			/* nil or array of size SDnpart */
	SDpart*	part;			/* nil or array of size npart */
	int	npart;
	ulong	vers;
	SDperm	ctlperm;


M pc/vgas3.c => pc/vgas3.c +2 -2
@@ 193,7 193,7 @@ s3load(VGAscr* scr, Cursor* curs)

	opage = 0;
	p = KADDR(scr->aperture);
	id = (vgaxi(Crtx, 0x30)<<8)|vgaxi(Crtx, 0x2E);
	id = (vgaxi(Crtx, 0x2D)<<8)|vgaxi(Crtx, 0x2E);
	switch(id){

	case 0x5631:				/* ViRGE */


@@ 531,7 531,7 @@ s3drawinit(VGAscr *scr)
{
	ulong id;

	id = (vgaxi(Crtx, 0x30)<<8)|vgaxi(Crtx, 0x2E);
	id = (vgaxi(Crtx, 0x2D)<<8)|vgaxi(Crtx, 0x2E);
	scr->id = id;

	/*

M port/devsd.c => port/devsd.c +22 -9
@@ 55,7 55,7 @@ sdaddpart(SDunit* unit, char* name, ulong start, ulong end)
	 */
	if(unit->part != nil){
		partno = -1;
		for(i = 0; i < SDnpart; i++){
		for(i = 0; i < unit->npart; i++){
			pp = &unit->part[i];
			if(!pp->valid){
				if(partno == -1)


@@ 72,14 72,27 @@ sdaddpart(SDunit* unit, char* name, ulong start, ulong end)
	else{
		if((unit->part = malloc(sizeof(SDpart)*SDnpart)) == nil)
			error(Enomem);
		unit->npart = SDnpart;
		partno = 0;
	}

	/*
	 * Check there is a free slot and size and extent are valid.
	 * If no free slot found then increase the
	 * array size (can't get here with unit->part == nil).
	 */
	if(partno == -1){
		if((pp = malloc(sizeof(SDpart)*(unit->npart+SDnpart))) == nil)
			error(Enomem);
		memmove(pp, unit->part, sizeof(SDpart)*unit->npart);
		free(unit->part);
		unit->part = pp;
		partno = unit->npart;
		unit->npart += SDnpart;
	}

	/*
	 * Check size and extent are valid.
	 */
	if(partno == -1)
		error(Ebadctl);
	if(start > end || end > unit->sectors)
		error(Eio);
	pp = &unit->part[partno];


@@ 102,12 115,12 @@ sddelpart(SDunit* unit,  char* name)
	 * Can't delete if someone still has it open.
	 */
	pp = unit->part;
	for(i = 0; i < SDnpart; i++){
	for(i = 0; i < unit->npart; i++){
		if(strncmp(name, pp->name, NAMELEN) == 0)
			break;
		pp++;
	}
	if(i >= SDnpart)
	if(i >= unit->npart)
		error(Ebadctl);
	if(strncmp(up->user, pp->user, NAMELEN) && !iseve())
		error(Eperm);


@@ 125,7 138,7 @@ sdinitpart(SDunit* unit)
	unit->vers++;
	unit->sectors = unit->secsize = 0;
	if(unit->part){
		for(i = 0; i < SDnpart; i++){
		for(i = 0; i < unit->npart; i++){
			unit->part[i].valid = 0;
			unit->part[i].vers++;
		}


@@ 420,7 433,7 @@ sdgen(Chan* c, Dirtab*, int, int s, Dir* dp)
			return r;
		}
		i -= Qpart;
		if(unit->part == nil || i >= SDnpart){
		if(unit->part == nil || i >= unit->npart){
			qunlock(&unit->ctl);
			break;
		}


@@ 749,7 762,7 @@ sdread(Chan *c, void *a, long n, vlong off)
					"geometry %ld %ld\n",
					unit->sectors, unit->secsize);
			pp = unit->part;
			for(i = 0; i < SDnpart; i++){
			for(i = 0; i < unit->npart; i++){
				if(pp->valid)
					l += snprint(p+l, READSTR-l,
						"part %.*s %lud %lud\n",

M port/sd.h => port/sd.h +2 -1
@@ 32,7 32,8 @@ typedef struct SDunit {
	QLock	ctl;
	ulong	sectors;
	ulong	secsize;
	SDpart*	part;			/* nil or array of size SDnpart */
	SDpart*	part;			/* nil or array of size npart */
	int	npart;
	ulong	vers;
	SDperm	ctlperm;