~kris/9p

9hist

0d941989b452d48363e8af021d1c89eebbbc8a97 — David du Colombier 24 years ago fc63fdd
Plan 9 from Bell Labs 2001-11-01
3 files changed, 96 insertions(+), 11 deletions(-)

M pc/devlml.c
M pc/devlml.h
M pc/ether2114x.c
M pc/devlml.c => pc/devlml.c +6 -9
@@ 17,7 17,7 @@ static Pcidev *		pcidev;
#define DBGINTR	0x04
#define DBGINTS	0x08

int debug = -1;
int debug = 0;

// Lml 22 driver



@@ 44,19 44,19 @@ static FrameHeader	jpgheader[NBUF] = {
	{
		MRK_SOI, MRK_APP3, (sizeof(FrameHeader)-4) << 8,
		{ 'L', 'M', 'L', '\0'},
		-1, 0, 0, 0, 0
		-1, 0, 0,  0
	}, {
		MRK_SOI, MRK_APP3, (sizeof(FrameHeader)-4) << 8,
		{ 'L', 'M', 'L', '\0'},
		-1, 0, 0, 0, 0
		-1, 0, 0,  0
	}, {
		MRK_SOI, MRK_APP3, (sizeof(FrameHeader)-4) << 8,
		{ 'L', 'M', 'L', '\0'},
		-1, 0, 0, 0, 0
		-1, 0, 0,  0
	}, {
		MRK_SOI, MRK_APP3, (sizeof(FrameHeader)-4) << 8,
		{ 'L', 'M', 'L', '\0'},
		-1, 0, 0, 0, 0
		-1, 0, 0,  0
	}
};



@@ 331,7 331,6 @@ lmlintr(Ureg *, void *) {
	writel(0xff000000, pciBaseAddr + INTR_STAT);

	if(flags & INTR_JPEGREP) {
		vlong thetime;

		if(debug&(DBGINTR))
			print("MjpgDrv_intrHandler stat=0x%.8lux\n", flags);


@@ 348,9 347,7 @@ lmlintr(Ureg *, void *) {
				return;
			}
		}
		thetime = todget(nil);
		jpgheader[fno].sec  = (ulong)(thetime / 1000000000LL);
		jpgheader[fno].nsec = (ulong)(thetime % 1000000000LL);
		jpgheader[fno].ftime  = todget(nil);
		jpgheader[fno].frameSize =
			(codeData->statCom[fno] & 0x00ffffff) >> 1;
		jpgheader[fno].frameSeqNo = codeData->statCom[fno] >> 24;

M pc/devlml.h => pc/devlml.h +1 -2
@@ 70,8 70,7 @@ struct FrameHeader {	// Don't modify this struct, used by h/w
	ushort lenAPP3;
	char nm[4];
	ushort frameNo;
	ulong sec;
	ulong nsec;
	vlong ftime;
	ulong frameSize;
	ulong frameSeqNo;
};

M pc/ether2114x.c => pc/ether2114x.c +89 -0
@@ 1019,6 1019,83 @@ typesymmode(Ctlr *ctlr, uchar *block, int wait)
}

static int
type2mode(Ctlr* ctlr, uchar* block, int)
{
	uchar *p;
	int csr6, csr13, csr14, csr15, gpc, gpd;

	csr6 = Sc|Mbo|Ca|Sb|TrMODE;
	debug("type2mode: medium 0x%2.2uX\n", block[2]);

	/*
	 * Don't attempt full-duplex
	 * unless explicitly requested.
	 */
	if((block[2] & 0x3F) == 0x04){	/* 10BASE-TFD */
		if(!ctlr->fd)
			return -1;
		csr6 |= Fd;
	}

	/*
	 * Operating mode programming values from the datasheet
	 * unless media specific data is explicitly given.
	 */
	p = &block[3];
	if(block[2] & 0x40){
		csr13 = (block[4]<<8)|block[3];
		csr14 = (block[6]<<8)|block[5];
		csr15 = (block[8]<<8)|block[7];
		p += 6;
	}
	else switch(block[2] & 0x3F){
	default:
		return -1;
	case 0x00:			/* 10BASE-T */
		csr13 = 0x00000001;
		csr14 = 0x00007F3F;
		csr15 = 0x00000008;
		break;
	case 0x01:			/* 10BASE-2 */
		csr13 = 0x00000009;
		csr14 = 0x00000705;
		csr15 = 0x00000006;
		break;
	case 0x02:			/* 10BASE-5 (AUI) */
		csr13 = 0x00000009;
		csr14 = 0x00000705;
		csr15 = 0x0000000E;
		break;
	case 0x04:			/* 10BASE-TFD */
		csr13 = 0x00000001;
		csr14 = 0x00007F3D;
		csr15 = 0x00000008;
		break;
	}
	gpc = *p++<<16;
	gpc |= *p++<<24;
	gpd = *p++<<16;
	gpd |= *p<<24;

	csr32w(ctlr, 13, 0);
	csr32w(ctlr, 14, csr14);
	csr32w(ctlr, 15, gpc|csr15);
	delay(10);
	csr32w(ctlr, 15, gpd|csr15);
	csr32w(ctlr, 13, csr13);

	ctlr->csr6 = csr6;
	csr32w(ctlr, 6, ctlr->csr6);

	debug("type2mode: csr13 %8.8uX csr14 %8.8uX csr15 %8.8uX\n",
		csr13, csr14, csr15);
	debug("type2mode: gpc %8.8uX gpd %8.8uX csr6 %8.8uX\n",
		gpc, gpd, csr6);

	return 0;
}

static int
type0link(Ctlr* ctlr, uchar* block)
{
	int m, polarity, sense;


@@ 1109,11 1186,23 @@ mediaxx(Ether* ether, int wait)
			if(typephymode(ctlr, block, wait))
				return 0;
			break;
		case 2:
			debug("type2: medium %d block[2] %d\n",
				ctlr->medium, block[2]);
			if(ctlr->medium >= 0 && ((block[2] & 0x3F) != ctlr->medium))
				return 0;
			if(type2mode(ctlr, block, wait))
				return 0;
			break;
		case 3:
			if(typephymode(ctlr, block, wait))
				return 0;
			break;
		case 4:
			debug("type4: medium %d block[2] %d\n",
				ctlr->medium, block[2]);
			if(ctlr->medium >= 0 && ((block[2] & 0x3F) != ctlr->medium))
				return 0;
			if(typesymmode(ctlr, block, wait))
				return 0;
			break;