M pc/devether.c => pc/devether.c +3 -0
@@ 444,6 444,9 @@ etherreset(void)
etherxx[ctlrno] = ether;
}
+ if(getconf("*noetherprobe"))
+ return;
+
cardno = ctlrno = 0;
while(cards[cardno].type != nil && ctlrno < MaxEther){
if(etherxx[ctlrno] != nil){
M pc/devi82365.c => pc/devi82365.c +4 -1
@@ 575,12 575,15 @@ devi82365link(void)
int i, j;
I82365 *cp;
PCMslot *pp;
- char buf[32];
+ char buf[32], *p;
if(already)
return;
already = 1;
+ if((p=getconf("pcmcia0")) && strncmp(p, "disabled", 8)==0)
+ return;
+
if(_pcmspecial)
return;
M pc/devpccard.c => pc/devpccard.c +4 -0
@@ 504,11 504,15 @@ devpccardlink(void)
Pcidev *pci;
int i;
uchar intl;
+ char *p;
if (initialized)
return;
initialized = 1;
+ if((p=getconf("pccard0")) && strncmp(p, "disabled", 8)==0)
+ return;
+
if(_pcmspecial)
return;
M pc/devusb.c => pc/devusb.c +3 -0
@@ 451,6 451,9 @@ usbreset(void)
usbhost[ctlrno] = uh;
}
+ if(getconf("*nousbprobe"))
+ return;
+
cardno = ctlrno = 0;
while(usbtypes[cardno].type != nil && ctlrno < MaxUsb){
if(usbhost[ctlrno] != nil){
M pc/etherelnk3.c => pc/etherelnk3.c +2 -0
@@ 26,6 26,8 @@
* 5950 PCI 3C595-TX Fast Etherlink Shared 10BASE-T/100BASE-TX
* 5951 PCI 3C595-T4 Fast Etherlink Shared 10BASE-T/100BASE-T4
* 5952 PCI 3C595-MII Fast Etherlink 10BASE-T/MII
+
+ * 7646 PCI 3CSOHO100-TX Fast Etherlink Small Office Connect (9050 downsized clone)
*
* 9000 PCI 3C900-TPO Etherlink III XL PCI 10BASE-T
* 9001 PCI 3C900-COMBO Etherlink III XL PCI 10BASE-T/10BASE-2/AUI
M pc/uarti8250.c => pc/uarti8250.c +5 -5
@@ 564,12 564,12 @@ i8250enable(Uart* uart, int ie)
/*
- * During startup, the i8259 interrupt controler is reset.
+ * During startup, the i8259 interrupt controller is reset.
* This may result in a lost interrupt from the i8250 uart.
* The i8250 thinks the interrupt is still outstanding and does not
- * generate any further interrupts. To work around this we call the
- * interrupt handler to clear any pending inerrupt events.
- * Note this must be done after setting Ier.
+ * generate any further interrupts. The workaround is to call the
+ * interrupt handler to clear any pending interrupt events.
+ * Note: this must be done after setting Ier.
*/
if(ie)
i8250interrupt(nil, uart);
@@ 670,4 670,4 @@ i8250console(void)
consuart = uart;
uart->console = 1;
-}
+}
M pc/usbuhci.c => pc/usbuhci.c +6 -3
@@ 1480,10 1480,13 @@ reset(Usbhost *uh)
t->link = PCIWADDR(t);
ctlr->bwsop->entries = PCIWADDR(t);
- ctlr->ctlq->head = PCIWADDR(ctlr->bwsop) | IsQH;
- ctlr->bwsop->head = PCIWADDR(ctlr->bulkq) | IsQH;
+ ctlr->ctlq->head = PCIWADDR(ctlr->bulkq) | IsQH;
ctlr->bulkq->head = PCIWADDR(ctlr->recvq) | IsQH;
- ctlr->recvq->head = PCIWADDR(ctlr->bwsop) | IsQH; /* loop back */
+ ctlr->recvq->head = PCIWADDR(ctlr->bwsop) | IsQH;
+ if (1) /* don't use loop back */
+ ctlr->bwsop->head = Terminate;
+ else /* set up loop back */
+ ctlr->bwsop->head = PCIWADDR(ctlr->bwsop) | IsQH;
ctlr->frames = xspanalloc(FRAMESIZE, FRAMESIZE, 0);
ctlr->frameld = xallocz(FRAMESIZE, 1);
M pc/vganvidia.c => pc/vganvidia.c +7 -5
@@ 43,6 43,8 @@ static ushort nvidiadid[] = {
0x0152, /* GeForce2 Ultra */
0x0153, /* Quadro 2 Pro */
0x0200, /* GeForce3 */
+ 0x0201,
+ 0x0202,
0,
};
@@ 219,11 221,11 @@ nvidiacurenable(VGAscr* scr)
}
enum {
- RopFifo = 0x00000000,
- ClipFifo = 0x00002000,
- PattFifo = 0x00004000,
- BltFifo = 0x00008000,
- BitmapFifo = 0x0000A000,
+ RopFifo = 0x00000000,
+ ClipFifo = 0x00002000,
+ PattFifo = 0x00004000,
+ BltFifo = 0x00008000,
+ BitmapFifo = 0x0000A000,
};
enum {
M port/devmouse.c => port/devmouse.c +2 -1
@@ 153,7 153,8 @@ mouseopen(Chan *c, int omode)
unlock(&mouse);
break;
case Qmousein:
- /* error("disabled"); */
+ if(!iseve())
+ error(Eperm);
lock(&mouse);
if(mouse.inopen){
unlock(&mouse);
M port/devproc.c => port/devproc.c +5 -0
@@ 36,6 36,7 @@ enum
CMhang,
CMkill,
CMnohang,
+ CMnoswap,
CMpri,
CMprivate,
CMprofile,
@@ 80,6 81,7 @@ Cmdtab proccmd[] = {
CMfixedpri, "fixedpri", 2,
CMhang, "hang", 1,
CMnohang, "nohang", 1,
+ CMnoswap, "noswap", 1,
CMkill, "kill", 1,
CMpri, "pri", 2,
CMprivate, "private", 1,
@@ 1116,6 1118,9 @@ procctlreq(Proc *p, char *va, int n)
case CMnohang:
p->hang = 0;
break;
+ case CMnoswap:
+ p->noswap = 1;
+ break;
case CMpri:
i = atoi(cb->f[1]);
if(i < 0)
M port/portdat.h => port/portdat.h +5 -4
@@ 605,6 605,7 @@ struct Proc
Proc *palarm; /* Next alarm time */
ulong alarm; /* Time of call */
int newtlb; /* Pager has changed my pte's, I must flush */
+ int noswap; /* process is not swappable */
ulong rendtag; /* Tag for rendezvous */
ulong rendval; /* Value for rendezvous */
@@ 622,10 623,10 @@ struct Proc
Sargs s; /* address of this is known by db */
int nerrlab;
Label errlab[NERR];
- char *syserrstr; /* last error from a system call, errbuf0 or 1 */
- char *errstr; /* reason we're unwinding the error stack, errbuf1 or 0 */
- char errbuf0[ERRMAX];
- char errbuf1[ERRMAX];
+ char *syserrstr; /* last error from a system call, errbuf0 or 1 */
+ char *errstr; /* reason we're unwinding the error stack, errbuf1 or 0 */
+ char errbuf0[ERRMAX];
+ char errbuf1[ERRMAX];
char genbuf[128]; /* buffer used e.g. for last name element from namec */
Chan *slash;
Chan *dot;
M port/proc.c => port/proc.c +2 -0
@@ 355,6 355,7 @@ newproc(void)
p->wired = 0;
p->ureg = 0;
p->privatemem = 0;
+ p->noswap = 0;
p->lockwait = nil;
p->errstr = p->errbuf0;
p->syserrstr = p->errbuf1;
@@ 1056,6 1057,7 @@ kproc(char *name, void (*func)(void *), void *arg)
p->psstate = 0;
p->procmode = 0640;
p->kp = 1;
+ p->noswap = 1;
p->fpsave = up->fpsave;
p->scallnr = up->scallnr;
M port/swap.c => port/swap.c +1 -1
@@ 124,7 124,7 @@ loop:
if(p >= ep)
p = proctab(0);
- if(p->state == Dead || p->kp)
+ if(p->state == Dead || p->noswap)
continue;
if(!canqlock(&p->seglock))
M port/sysproc.c => port/sysproc.c +1 -0
@@ 109,6 109,7 @@ sysrfork(ulong *arg)
memmove(p->note, up->note, sizeof(p->note));
p->privatemem = up->privatemem;
+ p->noswap = up->noswap;
p->nnote = up->nnote;
p->notified = 0;
p->lastnote = up->lastnote;