M ip/ethermedium.c => ip/ethermedium.c +17 -0
@@ 44,6 44,22 @@ Medium ethermedium =
.areg= sendgarp,
};
+Medium gbemedium =
+{
+.name= "gbe",
+.hsize= 14,
+.minmtu= 60,
+.maxmtu= 9014,
+.maclen= 6,
+.bind= etherbind,
+.unbind= etherunbind,
+.bwrite= etherbwrite,
+.addmulti= etheraddmulti,
+.remmulti= etherremmulti,
+.ares= arpenter,
+.areg= sendgarp,
+};
+
typedef struct Etherrock Etherrock;
struct Etherrock
{
@@ 561,4 577,5 @@ void
ethermediumlink(void)
{
addipmedium(ðermedium);
+ addipmedium(&gbemedium);
}
M pc/devarch.c => pc/devarch.c +13 -3
@@ 482,10 482,11 @@ cpuidprint(void)
int
cpuidentify(void)
{
- int family, model;
+ char *p;
+ int family, model, nomce;
X86type *t;
ulong cr4;
- vlong mct;
+ vlong mca, mct;
cpuid(m->cpuidid, &m->cpuidax, &m->cpuiddx);
if(strncmp(m->cpuidid, "AuthenticAMD", 12) == 0)
@@ 515,8 516,17 @@ cpuidentify(void)
cr4 = 0;
if(m->cpuiddx & 0x08)
cr4 |= 0x10; /* page size extensions */
- if(m->cpuiddx & 0x80)
+ if(p = getconf("*nomce"))
+ nomce = strtoul(p, 0, 0);
+ else
+ nomce = 0;
+ if((m->cpuiddx & 0x80) && !nomce){
cr4 |= 0x40; /* machine check enable */
+ if(family == 5){
+ rdmsr(0x00, &mca);
+ rdmsr(0x01, &mct);
+ }
+ }
putcr4(cr4);
if(m->cpuiddx & 0x80)
rdmsr(0x01, &mct);
M pc/ptclbsum386.s => pc/ptclbsum386.s +1 -12
@@ 84,23 84,12 @@ _2loop:
CMPL CX, $0x02
JLT _1dreg
-_2fold:
- MOVL AX, BX
- SHRL $16, BX
- JEQ _2foldx
-
- ANDL $0xFFFF, AX
- ADDL BX, AX
- JMP _2fold
-
-_2foldx:
MOVL CX, BP
SHRL $1, BP
ANDL $0x01, CX
_2loopx:
- XORL BX, BX /* in the loop for PPro */
- MOVW 0x00(SI), BX
+ MOVWLZX 0x00(SI), BX
ADCL BX, AX
LEAL 0x02(SI), SI