Browse Source

Plan 9 from Bell Labs 2005-07-10

David du Colombier 19 years ago
parent
commit
62ec2f0a60
5 changed files with 62 additions and 20 deletions
  1. 2 2
      dist/replica/_plan9.db
  2. 2 2
      dist/replica/plan9.db
  3. 2 0
      dist/replica/plan9.log
  4. 29 10
      sys/src/9/pc/vganvidia.c
  5. 27 6
      sys/src/cmd/cpu.c

+ 2 - 2
dist/replica/_plan9.db

@@ -8020,7 +8020,7 @@ sys/src/9/pc/vgamach64xx.c - 664 sys sys 1071245447 29146
 sys/src/9/pc/vgamga2164w.c - 664 sys sys 1015014527 5654
 sys/src/9/pc/vgamga4xx.c - 664 sys sys 1015014527 11122
 sys/src/9/pc/vganeomagic.c - 664 sys sys 1104430511 11327
-sys/src/9/pc/vganvidia.c - 664 sys sys 1081358011 12205
+sys/src/9/pc/vganvidia.c - 664 sys sys 1120909910 12617
 sys/src/9/pc/vgargb524.c - 664 sys sys 1015014527 4235
 sys/src/9/pc/vgas3.c - 664 sys sys 1090439162 12189
 sys/src/9/pc/vgasavage.c - 664 sys sys 1064679984 16251
@@ -9874,7 +9874,7 @@ sys/src/cmd/cpp/mkfile - 664 sys sys 944960879 178
 sys/src/cmd/cpp/nlist.c - 664 sys sys 1116770041 4645
 sys/src/cmd/cpp/test.c - 664 sys sys 944960879 47
 sys/src/cmd/cpp/tokens.c - 664 sys sys 944960879 6755
-sys/src/cmd/cpu.c - 664 sys sys 1084471915 20651
+sys/src/cmd/cpu.c - 664 sys sys 1120909565 21106
 sys/src/cmd/crop.c - 664 sys sys 1039753034 4136
 sys/src/cmd/date.c - 664 sys sys 944961351 449
 sys/src/cmd/db - 20000000775 sys sys 988249965 0

+ 2 - 2
dist/replica/plan9.db

@@ -8020,7 +8020,7 @@ sys/src/9/pc/vgamach64xx.c - 664 sys sys 1071245447 29146
 sys/src/9/pc/vgamga2164w.c - 664 sys sys 1015014527 5654
 sys/src/9/pc/vgamga4xx.c - 664 sys sys 1015014527 11122
 sys/src/9/pc/vganeomagic.c - 664 sys sys 1104430511 11327
-sys/src/9/pc/vganvidia.c - 664 sys sys 1081358011 12205
+sys/src/9/pc/vganvidia.c - 664 sys sys 1120909910 12617
 sys/src/9/pc/vgargb524.c - 664 sys sys 1015014527 4235
 sys/src/9/pc/vgas3.c - 664 sys sys 1090439162 12189
 sys/src/9/pc/vgasavage.c - 664 sys sys 1064679984 16251
@@ -9874,7 +9874,7 @@ sys/src/cmd/cpp/mkfile - 664 sys sys 944960879 178
 sys/src/cmd/cpp/nlist.c - 664 sys sys 1116770041 4645
 sys/src/cmd/cpp/test.c - 664 sys sys 944960879 47
 sys/src/cmd/cpp/tokens.c - 664 sys sys 944960879 6755
-sys/src/cmd/cpu.c - 664 sys sys 1084471915 20651
+sys/src/cmd/cpu.c - 664 sys sys 1120909565 21106
 sys/src/cmd/crop.c - 664 sys sys 1039753034 4136
 sys/src/cmd/date.c - 664 sys sys 944961351 449
 sys/src/cmd/db - 20000000775 sys sys 988249965 0

+ 2 - 0
dist/replica/plan9.log

@@ -19625,3 +19625,5 @@
 1120793474 1 c 386/bin/ip/httpd/webls - 775 sys sys 1120792314 131226
 1120793474 2 c 386/bin/upas/smtpd - 775 sys sys 1120792315 328918
 1120793474 3 c 386/lib/libmemdraw.a - 664 sys sys 1120792317 284130
+1120910500 0 c sys/src/9/pc/vganvidia.c - 664 sys sys 1120909910 12617
+1120910500 1 c sys/src/cmd/cpu.c - 664 sys sys 1120909565 21106

+ 29 - 10
sys/src/9/pc/vganvidia.c

@@ -165,13 +165,9 @@ nvidiaenable(VGAscr* scr)
 	}
 
 	/* find video memory size */
-	if (scr->id & 0x0F00) {
-		q = KADDR(scr->io + Pfb +  0x020C);
-		tmp = (*q >> 20) & 0xFF;
-		if (tmp == 0)
-			tmp = 16;
-		scr->storage =  tmp*1024*1024;
-	} else {
+	switch (scr->id & 0x0ff0) {
+	case 0x0020:
+	case 0x00A0:
 		q = KADDR(scr->io + Pfb);
 		tmp = *q;
 		if (tmp & 0x0100) {
@@ -183,6 +179,24 @@ nvidiaenable(VGAscr* scr)
 			else
 				scr->storage = 1024*1024*32;
 		}
+		break;
+	case 0x01A0:
+		p = pcimatchtbdf(MKBUS(BusPCI, 0, 0, 1));
+		tmp = pcicfgr32(p, 0x7C);
+		scr->storage = (((tmp >> 6) & 31) + 1) * 1024 * 1024;
+		break;
+	case 0x01F0:
+		p = pcimatchtbdf(MKBUS(BusPCI, 0, 0, 1));
+		tmp = pcicfgr32(p, 0x84);
+		scr->storage = (((tmp >> 4) & 127) + 1) * 1024 * 1024;
+		break;
+	default:
+		q = KADDR(scr->io + Pfb +  0x020C);
+		tmp = (*q >> 20) & 0xFF;
+		if (tmp == 0)
+			tmp = 16;
+		scr->storage =  tmp*1024*1024;
+		break;
 	}
 }
 
@@ -209,10 +223,15 @@ nvidiacurload(VGAscr* scr, Cursor* curs)
 
 	vgaxo(Crtx, 0x31, vgaxi(Crtx, 0x31) & ~0x01);
 
-	if (scr->id & 0x0F00)
-		p = KADDR(scr->aperture + scr->storage - 96*1024);
-	else
+	switch (scr->id & 0x0ff0) {
+	case 0x0020:
+	case 0x00A0:
 		p = KADDR(scr->io + Pramin + 0x1E00 * 4);
+		break;
+	default:
+		p = KADDR(scr->aperture + scr->storage - 96*1024);
+		break;
+	}
 
 	for(i=0; i<16; i++) {
 		c = (curs->clr[2 * i] << 8) | curs->clr[2 * i+1];

+ 27 - 6
sys/src/cmd/cpu.c

@@ -28,6 +28,7 @@ int	setamalg(char*);
 char *keyspec = "";
 
 int 	notechan;
+int	exportpid;
 char	*system;
 int	cflag;
 int	dbg;
@@ -70,7 +71,7 @@ int setam(char*);
 void
 usage(void)
 {
-	fprint(2, "usage: cpu [-h system] [-a authmethod] [-e 'crypt hash'] [-k keypattern] [-p patternfile] [-c cmd args ...]\n");
+	fprint(2, "usage: cpu [-h system] [-u user] [-a authmethod] [-e 'crypt hash'] [-k keypattern] [-P patternfile] [-c cmd args ...]\n");
 	exits("usage");
 }
 int fdd;
@@ -733,6 +734,7 @@ struct Fid
 {
 	int	fid;
 	int	file;
+	int	omode;
 };
 Fid fids[Nfid];
 
@@ -897,7 +899,7 @@ void
 notefs(int fd)
 {
 	uchar buf[IOHDRSZ+Maxfdata];
-	int i, j, n;
+	int i, j, n, ncpunote;
 	char err[ERRMAX];
 	Fcall f;
 	Fid *fid, *nfid;
@@ -906,9 +908,12 @@ notefs(int fd)
 	rfork(RFNOTEG);
 	fmtinstall('F', fcallfmt);
 
-	for(n = 0; n < Nfid; n++)
+	for(n = 0; n < Nfid; n++){
 		fids[n].file = -1;
+		fids[n].omode = -1;
+	}
 
+	ncpunote = 0;
 	for(;;){
 		n = read9pmsg(fd, buf, sizeof(buf));
 		if(n <= 0){
@@ -999,6 +1004,9 @@ nofids:
 				f.type = Rerror;
 				f.ename = Eperm;
 			}
+			fid->omode = f.mode;
+			if(fid->file == Qcpunote)
+				ncpunote++;
 			f.qid = fstab[fid->file].qid;
 			break;
 		case Tcreate:
@@ -1015,7 +1023,13 @@ nofids:
 			f.ename = Eperm;
 			break;
 		case Tclunk:
+			if(fid->omode != -1 && fid->file == Qcpunote){
+				ncpunote--;
+				if(ncpunote == 0)	/* remote side is done */
+					goto err;
+			}
 			fid->file = -1;
+			fid->omode = -1;
 			break;
 		case Tremove:
 			f.type = Rerror;
@@ -1038,6 +1052,10 @@ nofids:
 err:
 	if(dbg)
 		fprint(2, "notefs exiting: %r\n");
+	werrstr("success");
+	postnote(PNGROUP, exportpid, "hangup");
+	if(dbg)
+		fprint(2, "postnote PNGROUP %d: %r\n", exportpid);
 	close(fd);
 }
 
@@ -1062,10 +1080,10 @@ catcher(void*, char *text)
 void
 lclnoteproc(int netfd)
 {
-	int exportfspid;
 	Waitmsg *w;
 	Note *np;
 	int pfd[2];
+	int pid;
 
 	if(pipe(pfd) < 0){
 		fprint(2, "cpu: can't start note proc: pipe: %r\n");
@@ -1073,7 +1091,10 @@ lclnoteproc(int netfd)
 	}
 
 	/* new proc mounts and returns to start exportfs */
-	switch(exportfspid = rfork(RFPROC|RFNAMEG|RFFDG|RFMEM)){
+	switch(pid = rfork(RFPROC|RFNAMEG|RFFDG|RFMEM)){
+	default:
+		exportpid = pid;
+		break;
 	case -1:
 		fprint(2, "cpu: can't start note proc: rfork: %r\n");
 		return;
@@ -1121,7 +1142,7 @@ lclnoteproc(int netfd)
 				kick(pfd[0]);
 			}
 			unlock(&nfs);
-		} else if(w->pid == exportfspid)
+		} else if(w->pid == exportpid)
 			break;
 	}