# HG changeset patch # User Francisco J Ballesteros # Date 1317223190 0 # Node ID c1fa71ee7a7c5015076017967ad71d693e4e8d30 # Parent 88e74744e7480ce8c17170928123b5044e916dca nixsync: this is hg change from the nix cpu server if it works, it should get hg state up to date wrt nix. which means we should be able to hg sync here. Most files should not have changed, but I removed some files that shouldn't be useful for nix, and that shows up in this change. R=nix-dev, nemo, rminnich CC=nix-dev http://codereview.appspot.com/5050052 diff -r 88e74744e748 -r c1fa71ee7a7c sys/man/1/cb --- a/sys/man/1/cb Tue Sep 27 15:43:56 2011 +0200 +++ b/sys/man/1/cb Wed Sep 28 15:19:50 2011 +0000 @@ -4,7 +4,7 @@ .SH SYNOPSIS .B cb [ -.B -js +.B -9js ] [ .B -l @@ -35,6 +35,9 @@ .B -l length Split lines that are longer than .IR length . +.TP +.B -9 +prints code close to Plan 9 style. .PD .SH SOURCE .B /sys/src/cmd/cb diff -r 88e74744e748 -r c1fa71ee7a7c sys/src/cmd/cb/cb.c --- a/sys/src/cmd/cb/cb.c Tue Sep 27 15:43:56 2011 +0200 +++ b/sys/src/cmd/cb/cb.c Wed Sep 28 15:19:50 2011 +0000 @@ -28,6 +28,10 @@ maxtabs = maxleng/TABLENG - 2; maxleng -= (maxleng + 5)/10; continue; + case '9': + strict = 1; + plan9 = 1; + continue; default: fprint(2, "cb: illegal option %c\n", *argv[1]); exits("boom"); @@ -74,7 +78,7 @@ clev->pdepth = 0; clev->tabs = (clev-1)->tabs; clearif(clev); - if(strict && clev->tabs > 0) + if(strict && clev->tabs > 0 && !plan9) putspace(' ',NO); putch(c,NO); getnl(); @@ -91,7 +95,8 @@ if(c == Beof)error("{"); putch(c,NO); if(strict){ - putch(' ',NO); + if(!plan9) + putch(' ',NO); eatspace(); } keyflag = SINIT; @@ -115,7 +120,8 @@ if(cc == Beof)error("}"); putch(cc,NO); if(strict){ - putch(' ',NO); + if(!plan9) + putch(' ',NO); eatspace(); } getnext(0); @@ -127,7 +133,7 @@ continue; } else if(keyflag == SINIT && *pt == '}'){ - if(strict) + if(strict && !plan9) putspace(' ',NO); putch(c,NO); getnl(); @@ -155,7 +161,8 @@ OUTK; } else if(strict || (lptr != 0 && lptr->type == ELSE && ct == 0)){ - putspace(' ',NO); + if(!plan9) + putspace(' ',NO); eatspace(); } else if(lptr != 0 && lptr->type == ELSE){ @@ -200,7 +207,8 @@ if ((lptr = lookup(lastlook,p)) != 0){ if(!(lptr->type == TYPE || lptr->type == STRUCT))keyflag=KEYWORD; if (strict){ - putspace(lptr->punc,NO); + if(!plan9) + putspace(lptr->punc,NO); opflag = 1; } putch(c,NO); diff -r 88e74744e748 -r c1fa71ee7a7c sys/src/cmd/cb/cb.h --- a/sys/src/cmd/cb/cb.h Tue Sep 27 15:43:56 2011 +0200 +++ b/sys/src/cmd/cb/cb.h Wed Sep 28 15:19:50 2011 +0000 @@ -117,6 +117,7 @@ Biobuf *input; Biobuf *output; int strict = 0; +int plan9 = 0; int join = 0; int opflag = 1; int keyflag = 0; diff -r 88e74744e748 -r c1fa71ee7a7c sys/src/nix/k10/9k8cpufs Binary file sys/src/nix/k10/9k8cpufs has changed diff -r 88e74744e748 -r c1fa71ee7a7c sys/src/nix/k10/acpi.c --- a/sys/src/nix/k10/acpi.c Tue Sep 27 15:43:56 2011 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,412 +0,0 @@ -#include "u.h" -#include "../port/lib.h" -#include "mem.h" -#include "dat.h" -#include "fns.h" - -#define l16get(p) (((p)[1]<<8)|(p)[0]) -#define l32get(p) (((u32int)l16get(p+2)<<16)|l16get(p)) - -static u64int -l64get(u8int* p) -{ - /* - * Doing this as a define - * #define l64get(p) (((u64int)l32get(p+4)<<32)|l32get(p)) - * causes 8c to abort with "out of fixed registers" in - * rsdlink() below. - */ - return (((u64int)l32get(p+4)<<32)|l32get(p)); -} - -/* - * A System Descriptor Table starts with a header of 4 bytes of signature - * followed by 4 bytes of total table length then 28 bytes of ID information - * (including the table checksum). - * Only the signature and length are of interest. A byte array is used - * rather than an embedded structure to avoid structure alignment - * problems. - */ -typedef struct { /* Differentiated System DT */ - u8int sdthdr[36]; /* "DSDT" + length[4] + [28] */ - u8int db[]; /* Definition Block */ -} _DSDT_; - -typedef struct { /* Fixed ACPI DT */ - u8int sdthdr[36]; /* "FACP" + length[4] + [28] */ - u8int faddr[4]; /* Firmware Control Address */ - u8int dsdt[4]; /* DSDT Address */ - u8int _44_[200]; /* total table is 244 */ -} _FACP_; - -static void -acpigasdump(char* s, u8int* a) -{ - DBG("%s %#2.2ux %d %d %d %#16.16llux\n", - s, - a[0], a[1], a[2], a[3], - l64get(a+4)); -} - -static void -acpifacpdump(_FACP_* facp) -{ - u8int *p; - u32int r; - - if(!DBGFLG){ - SET(r); USED(r); - return; - } - - p = facp->_44_; - DBG("Preferred PM Profile: %d\n", p[1]); - DBG("SCI Int %d\n", l16get(p+2)); - DBG("SMI CMD %#8.8ux\n", l32get(p+4)); - DBG("ACPI Enable %#2.2ux\n", p[8]); - DBG("ACPI Disable %#2.2ux\n", p[9]); - DBG("S4BIOS REQ %#2.2ux\n", p[10]); - DBG("PSTATE CNT %#2.2ux\n", p[11]); - DBG("PM1a EVT BLK %#8.8ux\n", l32get(p+12)); - DBG("PM1b EVT BLK %#8.8ux\n", l32get(p+156)); - DBG("PM1a CNT BLK %#8.8ux\n", l32get(p+20)); - DBG("PM1b CNT BLK %#8.8ux\n", l32get(p+24)); - DBG("PM2 CNT BLK %#8.8ux\n", l32get(p+28)); - DBG("PM TMR BLK %#8.8ux\n", l32get(p+32)); - DBG("GPE0 BLK %#8.8ux\n", l32get(p+36)); - DBG("GPE1 BLK %#8.8ux\n", l32get(p+40)); - DBG("PM1 EVT LEN %d\n", p[44]); - DBG("PM1 CNT LEN %d\n", p[45]); - DBG("PM2 CNT LEN %d\n", p[46]); - DBG("PM TMR LEN %d\n", p[47]); - DBG("GPE0 BLK LEN %d\n", p[48]); - DBG("GPE1 BLK LEN %d\n", p[49]); - DBG("GPE1 BASE %d\n", p[50]); - DBG("CST CNT %#2.2ux\n", p[51]); - DBG("P LVL2 LAT %d\n", l16get(p+52)); - DBG("P LVL3 LAT %d\n", l16get(p+54)); - DBG("FLUSH SIZE %d\n", l16get(p+56)); - DBG("FLUSH STRIDE %d\n", l16get(p+58)); - DBG("DUTY OFFSET %d\n", p[60]); - DBG("DUTY WIDTH %d\n", p[61]); - DBG("DAY ALARM %d\n", p[62]); - DBG("MON ALARM %d\n", p[63]); - DBG("CENTURY %d\n", p[64]); - DBG("IAPC BOOT ARCH %#4.4ux\n", l16get(p+65)); - DBG("Flags %#8.8ux\n", l32get(p+68)); - acpigasdump("RESET REG", p+72); - DBG("RESET VALUE %#2.2ux\n", p[84]); - DBG("X FIRMWARE CTRL %#16.16llux\n", l64get(p+88)); - DBG("X DSDT %#16.16llux\n", l64get(p+96)); - acpigasdump("X PM1a EVT BLK", p+104); - acpigasdump("X PM1b EVT BLK", p+116); - acpigasdump("X PM1a CNT BLK", p+128); - acpigasdump("X PM1b CNT BLK", p+140); - acpigasdump("X PM2 CNT BLK", p+152); - acpigasdump("X PM TMR BLK", p+164); - acpigasdump("X GPE0 BLK", p+176); - acpigasdump("X GPE1 BLK", p+188); -} - -static void -acpifacp(void* _facp_) -{ - u8int *p; - int i, l, n; - _FACP_ *facp; - - facp = _facp_; - DBG("acpi: faddr @ %#8.8ux dsdt @ %#8.8ux\n", - l32get(facp->faddr), l32get(facp->dsdt)); - - if(DBGFLG > 1){ - //for(i = 0; i < 200; i++){ - // DBG(" %2.2ux", facp->_44_[i]); - // if((i % 16) == 15) - // DBG("\n"); - //} - //DBG("\n"); - acpifacpdump(facp); - } - - if((p = vmap(l32get(facp->dsdt), 8)) == nil) - return; - if(memcmp(p, "DSDT", 4) != 0){ - vunmap(p, 8); - return; - } - l = l32get(p+4); - vunmap(p, 8); - DBG("acpi: DSDT length %ud\n", l); - - if(DBGFLG > 1){ - if((p = vmap(l32get(facp->dsdt), l)) == nil) - return; - if(DBGFLG > 2) - n = l; - else - n = 256; - for(i = 0; i < n; i++){ - DBG(" %2.2ux", p[36+i]); - if((i % 16) == 15) - DBG("\n"); - } - vunmap(p, l); - } - else - USED(l); -} - -typedef struct { /* Multiple APIC DT */ - u8int sdthdr[36]; /* "MADT" + length[4] + [28] */ - u8int addr[4]; /* Local APIC Address */ - u8int flags[4]; - u8int structures[]; -} _MADT_; - -static void -acpiapic(void* _madt_) -{ - u8int *p; - int i, l, n; - _MADT_ *madt; - - madt = _madt_; - DBG("acpi: Local APIC Address %#8.8ux, flags %#8.8ux\n", - l32get(madt->addr), l32get(madt->flags)); - - n = l32get(&madt->sdthdr[4]); - p = madt->structures; - for(i = offsetof(_MADT_, structures[0]); i < n; i += l){ - DBG("acpi: type %d, length %d\n", p[0], p[1]); - switch(p[0]){ - default: - break; - case 0: /* Processor Local APIC */ - DBG("acpi: ACPI Processor ID %d\n", p[2]); - DBG("acpi: APIC ID %d\n", p[3]); - DBG("acpi: Flags %#8.8ux\n", l32get(p+4)); - break; - case 1: /* I/O APIC */ - DBG("acpi: I/O APIC ID %d\n", p[2]); - DBG("acpi: I/O APIC Address %#8.8ux\n", l32get(p+4)); - DBG("acpi: Global System Interrupt Base %#8.8ux\n", - l32get(p+8)); - break; - case 2: /* Interrupt Source Override */ - DBG("acpi: IRQ %d\n", p[3]); - DBG("acpi: Global System Interrupt %#8.8ux\n", - l32get(p+4)); - DBG("acpi: Flags %#4.4ux\n", l16get(p+8)); - break; - case 3: /* NMI Source */ - case 4: /* Local APIC NMI Structure */ - case 5: /* Local APIC Address Override */ - case 6: /* I/O SAPIC */ - case 7: /* Local SAPIC */ - case 8: /* Platform Interrupt Sources */ - break; - } - l = p[1]; - p += l; - } -} - -typedef struct { /* _MCFG_ Descriptor */ - u8int addr[8]; /* base address */ - u8int segno[2]; /* segment group number */ - u8int sbno; /* start bus number */ - u8int ebno; /* end bus number */ - u8int _12_[4]; /* reserved */ -} _MCFGD_; - -typedef struct { /* PCI Memory Mapped Config */ - u8int sdthdr[36]; /* "MCFG" + length[4] + [28] */ - u8int _36_[8]; /* reserved */ - _MCFGD_ mcfgd[]; /* descriptors */ -} _MCFG_; - -static void -acpimcfg(void* _mcfg_) -{ - int i, n; - _MCFG_ *mcfg; - _MCFGD_ *mcfgd; - - mcfg = _mcfg_; - n = l32get(&mcfg->sdthdr[4]); - mcfgd = mcfg->mcfgd; - for(i = offsetof(_MCFG_, mcfgd[0]); i < n; i += sizeof(_MCFGD_)){ - DBG("acpi: addr %#16.16llux segno %d sbno %d ebno %d\n", - l64get(mcfgd->addr), l16get(mcfgd->segno), - mcfgd->sbno, mcfgd->ebno); - mcfgd++; - } -} - -typedef struct { /* HPET DT */ - u8int sdthdr[36]; /* "FACP" + length[4] + [28] */ - u8int id[4]; /* Event Timer Bock ID */ - u8int addr[12]; /* ACPI Format Address */ - u8int seqno; /* Sequence Number */ - u8int minticks[2]; /* Minimum Clock Tick */ - u8int attr; /* Page Protection */ -} _HPET_; - -static void -acpihpet(void* _hpet_) -{ - _HPET_ *hpet; - uintptr addr; - int minticks; - extern void hpetinit(int, uintptr, int); - - hpet = _hpet_; - addr = l64get(&hpet->addr[4]); - minticks = l16get(hpet->minticks); - - DBG("acpi: id %#ux addr %d %d %d %#p seqno %d ticks %d attr %#ux\n", - l32get(hpet->id), hpet->addr[0], hpet->addr[1], hpet->addr[2], - addr, hpet->seqno, minticks, hpet->attr); - - hpetinit(hpet->seqno, addr, minticks); -} - -typedef struct { /* Root System Description * */ - u8int signature[8]; /* "RSD PTR " */ - u8int rchecksum; /* */ - u8int oemid[6]; - u8int revision; - u8int raddr[4]; /* RSDT */ - u8int length[4]; - u8int xaddr[8]; /* XSDT */ - u8int xchecksum; /* XSDT */ - u8int _33_[3]; /* reserved */ -} _RSD_; - -static void* -rsdchecksum(void* addr, int length) -{ - u8int *p, sum; - - sum = 0; - for(p = addr; length-- > 0; p++) - sum += *p; - if(sum == 0) - return addr; - - return nil; -} - -static void* -rsdscan(u8int* addr, int len, char* signature) -{ - int sl; - u8int *e, *p; - - e = addr+len; - sl = strlen(signature); - for(p = addr; p+sl < e; p += 16){ - if(memcmp(p, signature, sl)) - continue; - return p; - } - - return nil; -} - -static void* -rsdsearch(char* signature) -{ - uintptr p; - u8int *bda; - _RSD_ *rsd; - - /* - * Search for the data structure signature: - * 1) in the first KB of the EBDA; - * 2) in the BIOS ROM between 0xE0000 and 0xFFFFF. - */ - if(strncmp((char*)KADDR(0xFFFD9), "EISA", 4) == 0){ - bda = BIOSSEG(0x40); - if((p = (bda[0x0F]<<8)|bda[0x0E])){ - if(rsd = rsdscan(KADDR(p), 1024, signature)) - return rsd; - } - } - return rsdscan(BIOSSEG(0xE000), 0x20000, signature); -} - -static void -rsdlink(void) -{ - _RSD_ *rsd; - uchar *p, *sdt; - int asize, i, l, n; - uintptr dhpa, sdtpa; - - if((rsd = rsdsearch("RSD PTR ")) == nil) - return; - DBG("acpi: RSD PTR @ %#p, physaddr %#ux length %ud %#llux rev %d\n", - rsd, l32get(rsd->raddr), l32get(rsd->length), - l64get(rsd->xaddr), rsd->revision); - - if(rsd->revision == 2){ - if(rsdchecksum(rsd, 36) == nil) - return; - sdtpa = l64get(rsd->xaddr); - asize = 8; - } - else{ - if(rsdchecksum(rsd, 20) == nil) - return; - sdtpa = l32get(rsd->raddr); - asize = 4; - } - if((sdt = vmap(sdtpa, 8)) == nil) - return; - if((sdt[0] != 'R' && sdt[0] != 'X') || memcmp(sdt+1, "SDT", 3) != 0){ - vunmap(sdt, 8); - return; - } - - n = l32get(sdt+4); - vunmap(sdt, 8); - if((sdt = vmap(sdtpa, n)) == nil) - return; - if(rsdchecksum(sdt, n) == nil){ - vunmap(sdt, n); - return; - } - for(i = 36; i < n; i += asize){ - if(asize == 8) - dhpa = l64get(sdt+i); - else - dhpa = l32get(sdt+i); - if((p = vmap(dhpa, 8)) == nil) - continue; - l = l32get(p+4); - vunmap(p, 8); - if((p = vmap(dhpa, l)) == nil) - continue; - if(rsdchecksum(p, l) != nil){ - DBG("acpi: %c%c%c%c\n", p[0], p[1], p[2], p[3]); - if(memcmp(p, "FACP", 4) == 0) - acpifacp(p); - else if(memcmp(p, "APIC", 4) == 0) - acpiapic(p); - else if(memcmp(p, "MCFG", 4) == 0) - acpimcfg(p); - else if(memcmp(p, "HPET", 4) == 0) - acpihpet(p); - } - vunmap(p, l); - } - vunmap(sdt, n); -} - -void -acpilink(void) -{ - rsdlink(); -} diff -r 88e74744e748 -r c1fa71ee7a7c sys/src/nix/k10/amd64l.h --- a/sys/src/nix/k10/amd64l.h Tue Sep 27 15:43:56 2011 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,162 +0,0 @@ -#define Pe 0x00000001 /* Protected Mode Enable */ -#define Mp 0x00000002 /* Monitor Coprocessor */ -#define Em 0x00000004 /* Emulate Coprocessor */ -#define Ts 0x00000008 /* Task Switched */ -#define Et 0x00000010 /* Extension Type */ -#define Ne 0x00000020 /* Numeric Error */ -#define Wp 0x00010000 /* Write Protect */ -#define Am 0x00040000 /* Alignment Mask */ -#define Nw 0x20000000 /* Not Writethrough */ -#define Cd 0x40000000 /* Cache Disable */ -#define Pg 0x80000000 /* Paging Enable */ - -#define Pwt 0x00000008 /* Page-Level Writethrough */ -#define Pcd 0x00000010 /* Page-Level Cache Disable */ - -#define Vme 0x00000001 /* Virtual-8086 Mode Extensions */ -#define Pvi 0x00000002 /* Protected Mode Virtual Interrupts */ -#define Tsd 0x00000004 /* Time-Stamp Disable */ -#define De 0x00000008 /* Debugging Extensions */ -#define Pse 0x00000010 /* Page-Size Extensions */ -#define Pae 0x00000020 /* Physical Address Extension */ -#define Mce 0x00000040 /* Machine Check Enable */ -#define Pge 0x00000080 /* Page-Global Enable */ -#define Pce 0x00000100 /* Performance Monitoring Counter Enable */ -#define Osfxsr 0x00000200 /* FXSAVE/FXRSTOR Support */ -#define Osxmmexcpt 0x00000400 /* Unmasked Exception Support */ - -#define Cf 0x00000001 /* Carry Flag */ -#define Pf 0x00000004 /* Parity Flag */ -#define Af 0x00000010 /* Auxiliary Flag */ -#define Zf 0x00000040 /* Zero Flag */ -#define Sf 0x00000080 /* Sign Flag */ -#define Tf 0x00000100 /* Trap Flag */ -#define If 0x00000200 /* Interrupt Flag */ -#define Df 0x00000400 /* Direction Flag */ -#define Of 0x00000800 /* Overflow Flag */ -#define Iopl0 0x00000000 /* I/O Privilege Level */ -#define Iopl1 0x00001000 -#define Iopl2 0x00002000 -#define Iopl3 0x00003000 -#define Nt 0x00004000 /* Nested Task */ -#define Rf 0x00010000 /* Resume Flag */ -#define Vm 0x00020000 /* Virtual-8086 Mode */ -#define Ac 0x00040000 /* Alignment Check */ -#define Vif 0x00080000 /* Virtual Interrupt Flag */ -#define Vip 0x00100000 /* Virtual Interrupt Pending */ -#define Id 0x00200000 /* ID Flag */ - -#define PerfEvtbase 0xc0010000 /* Performance Event Select */ -#define PerfCtrbase 0xc0010004 /* Performance Counters */ - -#define Efer 0xc0000080 /* Extended Feature Enable */ -#define Star 0xc0000081 /* Legacy Target IP and [CS]S */ -#define Lstar 0xc0000082 /* Long Mode Target IP */ -#define Cstar 0xc0000083 /* Compatibility Target IP */ -#define Sfmask 0xc0000084 /* SYSCALL Flags Mask */ -#define FSbase 0xc0000100 /* 64-bit FS Base Address */ -#define GSbase 0xc0000101 /* 64-bit GS Base Address */ -#define KernelGSbase 0xc0000102 /* SWAPGS instruction */ - -#define Sce 0x00000001 /* System Call Extension */ -#define Lme 0x00000100 /* Long Mode Enable */ -#define Lma 0x00000400 /* Long Mode Active */ -#define Nxe 0x00000800 /* No-Execute Enable */ -#define Svme 0x00001000 /* SVM Extension Enable */ -#define Ffxsr 0x00004000 /* Fast FXSAVE/FXRSTOR */ - -#define PteP 0x0000000000000001ull /* Present */ -#define PteRW 0x0000000000000002ull /* Read/Write */ -#define PteU 0x0000000000000004ull /* User/Supervisor */ -#define PtePWT 0x0000000000000008ull /* Page-Level Write Through */ -#define PtePCD 0x0000000000000010ull /* Page Level Cache Disable */ -#define PteA 0x0000000000000020ull /* Accessed */ -#define PteD 0x0000000000000040ull /* Dirty */ -#define PtePS 0x0000000000000080ull /* Page Size */ -#define Pte4KPAT PtePS /* PTE PAT */ -#define PteG 0x0000000000000100ull /* Global */ -#define Pte2MPAT 0x0000000000001000ull /* PDE PAT */ -#define Pte1GPAT Pte2MPAT /* PDPE PAT */ -#define PteNX 0x8000000000000000ull /* No Execute */ - -#define IdtDE 0 /* Divide-by-Zero Error */ -#define IdtDB 1 /* Debug */ -#define IdtNMI 2 /* Non-Maskable-Interrupt */ -#define IdtBP 3 /* Breakpoint */ -#define IdtOF 4 /* Overflow */ -#define IdtBR 5 /* Bound-Range */ -#define IdtUD 6 /* Invalid-Opcode */ -#define IdtNM 7 /* Device-Not-Available */ -#define IdtDF 8 /* Double-Fault */ -#define Idt09 9 /* unsupported */ -#define IdtTS 10 /* Invalid-TSS */ -#define IdtNP 11 /* Segment-Not-Present */ -#define IdtSS 12 /* Stack */ -#define IdtGP 13 /* General-Protection */ -#define IdtPF 14 /* Page-Fault */ -#define Idt0F 15 /* reserved */ -#define IdtMF 16 /* x87 FPE-Pending */ -#define IdtAC 17 /* Alignment-Check */ -#define IdtMC 18 /* Machine-Check */ -#define IdtXF 19 /* SIMD Floating-Point */ - -#define SdISTM 0x0000000700000000ull /* Interrupt Stack Table Mask */ -#define SdA 0x0000010000000000ull /* Accessed */ -#define SdR 0x0000020000000000ull /* Readable (Code) */ -#define SdW 0x0000020000000000ull /* Writeable (Data) */ -#define SdE 0x0000040000000000ull /* Expand Down */ -#define SdaTSS 0x0000090000000000ull /* Available TSS */ -#define SdbTSS 0x00000b0000000000ull /* Busy TSS */ -#define SdCG 0x00000c0000000000ull /* Call Gate */ -#define SdIG 0x00000e0000000000ull /* Interrupt Gate */ -#define SdTG 0x00000f0000000000ull /* Trap Gate */ -#define SdCODE 0x0000080000000000ull /* Code/Data */ -#define SdS 0x0000100000000000ull /* System/User */ -#define SdDPL0 0x0000000000000000ull /* Descriptor Privilege Level */ -#define SdDPL1 0x0000200000000000ull -#define SdDPL2 0x0000400000000000ull -#define SdDPL3 0x0000600000000000ull -#define SdP 0x0000800000000000ull /* Present */ -#define Sd4G 0x000f00000000ffffull /* 4G Limit */ -#define SdL 0x0020000000000000ull /* Long Attribute */ -#define SdD 0x0040000000000000ull /* Default Operand Size */ -#define SdG 0x0080000000000000ull /* Granularity */ - -#define PeHo 0x0000020000000000ull /* Host only */ -#define PeGo 0x0000010000000000ull /* Guest only */ -#define PeEvMskH 0x0000000f00000000ull /* Event mask H */ -#define PeCtMsk 0x00000000ff000000ull /* Counter mask */ -#define PeInMsk 0x0000000000800000ull /* Invert mask */ -#define PeCtEna 0x0000000000400000ull /* Counter enable */ -#define PeInEna 0x0000000000100000ull /* Interrupt enable */ -#define PePnCtl 0x0000000000080000ull /* Pin control */ -#define PeEdg 0x0000000000040000ull /* Edge detect */ -#define PeOS 0x0000000000020000ull /* OS mode */ -#define PeUsr 0x0000000000010000ull /* User mode */ -#define PeUnMsk 0x000000000000ff00ull /* Unit Mask */ -#define PeEvMskL 0x00000000000000ffull /* Event Mask L */ - -#define PeEvMsksh 32ull /* Event mask shift */ - -#define SsRPL0 0x0000 /* Requestor Privilege Level */ -#define SsRPL1 0x0001 -#define SsRPL2 0x0002 -#define SsRPL3 0x0003 -#define SsTIGDT 0x0000 /* GDT Table Indicator */ -#define SsTILDT 0x0004 /* LDT Table Indicator */ -#define SsSIM 0xfff8 /* Selector Index Mask */ - -#define SSEL(si, tirpl) (((si)<<3)|(tirpl)) /* Segment Selector */ - -#define SiNULL 0 /* NULL selector index */ -#define SiCS 1 /* CS selector index */ -#define SiDS 2 /* DS selector index */ -#define SiU32CS 3 /* User CS selector index */ -#define SiUDS 4 /* User DS selector index */ -#define SiUCS 5 /* User CS selector index */ -#define SiFS 6 /* FS selector index */ -#define SiGS 7 /* GS selector index */ -#define SiTSS 8 /* TSS selector index */ - -#define RMACH R15 /* m-> */ -#define RUSER R14 /* up-> */ diff -r 88e74744e748 -r c1fa71ee7a7c sys/src/nix/k10/bal.c --- a/sys/src/nix/k10/bal.c Tue Sep 27 15:43:56 2011 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,254 +0,0 @@ -#include "u.h" -#include "../port/lib.h" -#include "mem.h" -#include "dat.h" -#include "fns.h" - -/* - * Buddy allocator from forsyth, possible tweaked to - * be used in nix for physical memory allocation. - * - * - locks - * - auxilary structure allocation and sizing - * - largest size - * - could instead coalesce free items on demand (cf. Wulf) - * - or lazy buddy (cf. Barkley) - */ - -#define DPRINT if(0)iprint - -enum{ - MinK= 16, /* 64k */ - MinBsize= 1<>MinK) -#define IB(x) (((x)< round up */ - if((n>>8) == 0) - return log2v[n] + r; - if((n>>16) == 0) - return 8 + log2v[n>>8] + r; - if((n>>24) == 0) - return 16 + log2v[n>>16] + r; - return 24 + log2v[n>>24] + r; -} - -void -balinit(physaddr base, usize size) -{ - int k; - Blk *b; - - loginit(); - for(k = 0; k < nelem(blist); k++){ - b = &blist[k]; - b->forw = b->back = b; - } - memset(kofb, 0, sizeof(kofb)); - balfreephys(base, size); - DPRINT("Aspace=%#ux MaxBlocks=%#ux (%d) len bdesc=%d\n", - Aspace, MaxBlocks, MaxBlocks, nelem(blocks)); - baldump(); -} - -physaddr -bal(usize size) -{ - int j, k; - Blk *b, *b2; - physaddr a, a2; - uint bi; - - k = log2of(size); - if(k < MinK) - k = MinK; - DPRINT("size=%lud k=%d\n", size, k); - lock(&balk); - for(j = k;;){ - b = blist[j].forw; - if(b != &blist[j]) - break; - if(++j > MaxK){ - unlock(&balk); - return 0; /* out of space */ - } - } - b->forw->back = b->back; - b->back->forw = b->forw; - /* set busy state */ - bi = b-blocks; - a = IB(bi); - kofb[bi] = k | Busy; - while(j != k){ - /* split */ - j--; - a2 = a+((physaddr)1<forw = &blist[j]; - b2->back = blist[j].back; - blist[j].back = b2; - b2->back->forw = b2; - } - unlock(&balk); - return a; -} - -void -bfree(physaddr a, usize size) -{ - int k; - Blk *b, *b2; - physaddr a2; - uint bi, bi2; - - k = log2of(size); /* could look it up in kofb */ - if(k < MinK) - k = MinK; - DPRINT("free %#llux %d\n", a, k); - bi = BI(a); - lock(&balk); - if(kofb[bi] != 0 && kofb[bi] != (Busy|k)){ - unlock(&balk); - panic("balfree: busy %#llux odd k k=%d kfob=%#ux\n", a, k, kofb[bi]); - } - for(; k != MaxK; k++){ - a2 = a ^ ((physaddr)1<back->forw = b2->forw; - b2->forw->back = b2->back; - if(a2 < a) - a = a2; - } - kofb[bi] = k; /* sets size and resets Busy */ - b = &blocks[bi]; - b->forw = &blist[k]; - b->back = blist[k].back; - blist[k].back = b; - b->back->forw = b; - unlock(&balk); -} - -void -balfreephys(physaddr base, usize size) -{ - physaddr top, a, lim; - usize m; - int i; - - /* round base to min block size */ - if(base & (MinBsize-1)){ - i = MinBsize - (base & (MinBsize-1)); - base += i; - size -= i; - } - size &= ~(MinBsize-1); - if(size < MinBsize) - return; - DPRINT("%#.8llux %#lux (%lud) start\n", base, size, size); - if(BI(base+size) >= MaxBlocks) - panic("balfreephys: address space too large"); - /* split base and size into suitable chunks */ - for(top = MinBsize; top < base+size; top <<= 1) - {} - /* free maximal power-of-2 chunks below mid-point */ - lim = base+size; - a = top>>1; - m = a>>1; - DPRINT("a=%llux m=%#lux (%ld)\n", a, m, m); - if(m > ((usize)1<= MinBsize){ - DPRINT("a==%#llux m=%#lux base=%#llux\n", a, m, base); - if(a-m >= base && a <= lim){ - a -= m; - bfree(a, m); - }else - m >>= 1; - } - /* free chunks above mid-point */ - a = top>>1; - m = a>>1; - if(m > ((usize)1<= MinBsize){ - DPRINT("a[2]==%#llux m=%#lux base=%#llux\n", a, m, base); - if(a >= base && a+m <= lim){ - bfree(a, m); - a += m; - }else - m >>= 1; - } -} - -void -baldump(void) -{ - physaddr a; - uint bi; - int i, k; - Blk *b; - - for(i=0; iforw){ - bi = b-blocks; - a = IB(bi); - k = kofb[bi]; - print(" [%#llux %d %#ux b=%#llux]", a, k, 1< -#include - -#include "../boot/boot.h" - -Method method[] = { - { "tcp", configtcp, connecttcp, nil, }, - { nil }, -}; - -int cpuflag = 1; -char* rootdir = "/root"; -char* bootdisk = "#S/sdC0/"; -extern void boot(int, char**); - -void -main(int argc, char **argv) -{ - boot(argc, argv); -} -int (*cfs)(int) = 0; diff -r 88e74744e748 -r c1fa71ee7a7c sys/src/nix/k10/errstr.h --- a/sys/src/nix/k10/errstr.h Tue Sep 27 15:43:56 2011 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,52 +0,0 @@ -char Enoerror[] = "no error"; -char Emount[] = "inconsistent mount"; -char Eunmount[] = "not mounted"; -char Eismtpt[] = "is a mount point"; -char Eunion[] = "not in union"; -char Emountrpc[] = "mount rpc error"; -char Eshutdown[] = "device shut down"; -char Enocreate[] = "mounted directory forbids creation"; -char Enonexist[] = "file does not exist"; -char Eexist[] = "file already exists"; -char Ebadsharp[] = "unknown device in # filename"; -char Enotdir[] = "not a directory"; -char Eisdir[] = "file is a directory"; -char Ebadchar[] = "bad character in file name"; -char Efilename[] = "file name syntax"; -char Eperm[] = "permission denied"; -char Ebadusefd[] = "inappropriate use of fd"; -char Ebadarg[] = "bad arg in system call"; -char Einuse[] = "device or object already in use"; -char Eio[] = "i/o error"; -char Etoobig[] = "read or write too large"; -char Etoosmall[] = "read or write too small"; -char Enoport[] = "network port not available"; -char Ehungup[] = "i/o on hungup channel"; -char Ebadctl[] = "bad process or channel control request"; -char Enodev[] = "no free devices"; -char Eprocdied[] = "process exited"; -char Enochild[] = "no living children"; -char Eioload[] = "i/o error in demand load"; -char Enovmem[] = "virtual memory allocation failed"; -char Ebadfd[] = "fd out of range or not open"; -char Enofd[] = "no free file descriptors"; -char Eisstream[] = "seek on a stream"; -char Ebadexec[] = "exec header invalid"; -char Etimedout[] = "connection timed out"; -char Econrefused[] = "connection refused"; -char Econinuse[] = "connection in use"; -char Eintr[] = "interrupted"; -char Enomem[] = "kernel allocate failed"; -char Enoswap[] = "swap space full"; -char Esoverlap[] = "segments overlap"; -char Eshort[] = "i/o count too small"; -char Egreg[] = "ken has left the building"; -char Ebadspec[] = "bad attach specifier"; -char Enoreg[] = "process has no saved registers"; -char Enoattach[] = "mount/attach disallowed"; -char Eshortstat[] = "stat buffer too small"; -char Ebadstat[] = "malformed stat buffer"; -char Enegoff[] = "negative i/o offset"; -char Ecmdargs[] = "wrong #args in control message"; -char Ebadip[] = "bad ip address syntax"; -char Edirseek[] = "seek in directory"; diff -r 88e74744e748 -r c1fa71ee7a7c sys/src/nix/k10/hpet.c --- a/sys/src/nix/k10/hpet.c Tue Sep 27 15:43:56 2011 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,70 +0,0 @@ -#include "u.h" -#include "../port/lib.h" -#include "mem.h" -#include "dat.h" -#include "fns.h" - -typedef struct Hpet Hpet; -typedef struct Tn Tn; - -struct Hpet { /* Event Timer Block */ - u32int cap; /* General Capabilities */ - u32int period; /* Main Counter Tick Period */ - u32int _8_[2]; - u32int cnf; /* General Configuration */ - u32int _20_[3]; - u32int sts; /* General Interrupt Status */ - u32int _36_[51]; - union { /* Main Counter Value */ - u32int u32[2]; - u64int u64; - } counter; - u32int _248[2]; - Tn tn[]; /* Timers */ -}; - -struct Tn { /* Timer */ - u32int cnf; /* Configuration */ - u32int cap; /* Capabilities */ - union { /* Comparator */ - u32int u32[2]; - u64int u64; - } comparator; - u32int val; /* FSB Interrupt Value */ - u32int addr; /* FSB Interrupt Address */ - u32int _24_[2]; -}; - -static Hpet* etb[8]; /* Event Timer Blocks */ - -void -hpetinit(int seqno, uintptr pa, int minticks) -{ - Tn *tn; - int i, n; - Hpet *hpet; - u64int val; - - DBG("hpet: seqno %d pa %#p minticks %d\n", seqno, pa, minticks); - if(seqno < 0 || seqno > nelem(etb) || (hpet = vmap(pa, 1024)) == nil) - return; - etb[seqno] = hpet; - - DBG("HPET: cap %#8.8ux period %#8.8ux\n", hpet->cap, hpet->period); - DBG("HPET: cnf %#8.8ux sts %#8.8ux\n",hpet->cnf, hpet->sts); - DBG("HPET: counter %#16.16llux\n", - (((u64int)hpet->counter.u32[1])<<32)|hpet->counter.u32[0]); - - n = ((hpet->cap>>8) & 0x0F) + 1; - for(i = 0; i < n; i++){ - tn = &hpet->tn[i]; - DBG("Tn%d: cnf %#8.8ux cap %#8.8ux\n", i, tn->cnf, tn->cap); - DBG("Tn%d: comparator %#16.16llux\n", i, - (((u64int)tn->comparator.u32[1])<<32)|tn->comparator.u32[0]); - DBG("Tn%d: val %#8.8ux addr %#8.8ux\n", i, tn->val, tn->addr); - } - - /* - * hpet->period is the number of femtoseconds per counter tick. - */ -} diff -r 88e74744e748 -r c1fa71ee7a7c sys/src/nix/k10/ht.c --- a/sys/src/nix/k10/ht.c Tue Sep 27 15:43:56 2011 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,200 +0,0 @@ -#include "u.h" -#include "../port/lib.h" -#include "mem.h" -#include "dat.h" -#include "fns.h" - -#include "io.h" - -static void -htcapabilities(Pcidev* pci, int cp) -{ - u64int idr; - u32int command, r; - - /* - * Top 5 bits of command give type: - * 000xx slave or primary interface - * 001xx host or secondary interface - * 10000 interrupt discovery and configuration - * Other values don't concern this interface. - */ - r = pcicfgr32(pci, cp); - command = (r>>16) & 0xFFFF; - if((command & 0xE000) == 0x0000){ - DBG("HT: slave or primary interface\n"); - } - else if((command & 0xE000) == 0x2000){ - DBG("HT: host or secondary interface\n"); - } - else if((command & 0xF800) == 0x8000){ - /* - * The Interrupt and Discovery block uses - * an index and data scheme to access the - * registers. Index is a byte at +2, data is - * 32 bits at +4. - * The only interesting information is the 64-bit - * Interrupt Definition Register at offset 0x10. - */ - pcicfgw8(pci, cp+0x02, 0x11); - idr = pcicfgr32(pci, cp+0x04); - idr <<= 32; - pcicfgw8(pci, cp+0x02, 0x10); - idr |= (u32int)pcicfgr32(pci, cp+0x04); - DBG("HT: Interrupt and discovery block: idr %#16.16llux\n", idr); - } - else{ - DBG("HT: capability code %#ux\n", command>>11); - } -} - -void -htlink(void) -{ - int cp; - char *p; - Pcidev *pci; - u32int r, *rp; - - pci = nil; - while(pci = pcimatch(pci, 0, 0)){ - /* - * AMD-8111 Hypertransport I/O Hub - */ - if(pci->vid == 0x1022 && pci->did == 0x1100){ - DBG("HT: AMD-8111: tc %#8.8ux ic %#8.8ux\n", - pcicfgr32(pci, 0x68), pcicfgr32(pci, 0x6C)); - } - - /* - * AMD-8111 PCI Bridge - */ - if(pci->vid == 0x1022 && pci->did == 0x7460){ - pcicfgw32(pci, 0xF0, 1); - DBG("HT: AMD-8111: 0xF4: %#8.8ux\n", - pcicfgr32(pci, 0xF4)); - pcicfgw32(pci, 0xF0, 0x10); - DBG("HT: AMD-8111: 0x10: %#8.8ux\n", - pcicfgr32(pci, 0xF4)); - pcicfgw32(pci, 0xF0, 0x11); - DBG("HT: AMD-8111: 0x11: %#8.8ux\n", - pcicfgr32(pci, 0xF4)); - } - - /* - * AMD-8111 LPC Bridge - */ - if(pci->vid == 0x1022 && pci->did == 0x7468){ - r = pcicfgr32(pci, 0xA0); - DBG("HT: HPET @ %#ux\n", r); - if((rp = vmap(r & ~0x0F, 0x200)) != nil){ - DBG("HT: HPET00: %#8.8ux%8.8ux\n", - rp[4/4], rp[0/4]); - DBG("HT: HPET10: %#8.8ux%8.8ux\n", - rp[0x10/4], rp[0x10/4]); - DBG("HT: HPET20: %#8.8ux%8.8ux\n", - rp[0x24/4], rp[0x20/4]); - DBG("HT: HPETF0: %#8.8ux%8.8ux\n", - rp[0xF4/4], rp[0xF0/4]); - DBG("HT: HPET100: %#8.8ux%8.8ux\n", - rp[0x104/4], rp[0x100/4]); - DBG("HT: HPET120: %#8.8ux%8.8ux\n", - rp[0x124/4], rp[0x120/4]); - DBG("HT: HPET140: %#8.8ux%8.8ux\n", - rp[0x144/4], rp[0x140/4]); - vunmap(rp, 0x200); - } - } - - /* - * Check if there are extended capabilities implemented, - * (bit 4 in the status register). - * Find the capabilities pointer based on PCI header type. - * - * Make this more general (e.g. pcigetcap(pcidev, id, cp)) - * and merge back into PCI code. - */ - if(!(pcicfgr16(pci, PciPSR) & 0x0010)) - continue; - - switch(pcicfgr8(pci, PciHDT)){ - default: - continue; - case 0: /* all other */ - case 1: /* PCI to PCI bridge */ - cp = PciCP; - break; - } - - for(cp = pcicfgr8(pci, cp); cp != 0; cp = pcicfgr8(pci, cp+1)){ - /* - * Check for validity. - * Can't be in standard header and must be double - * word aligned. - */ - if(cp < 0x40 || (cp & ~0xFC)) - break; - r = pcicfgr32(pci, cp); - switch(r & 0xFF){ - default: - DBG("HT: %#4.4ux/%#4.4ux: unknown ID %d\n", - pci->vid, pci->did, r & 0xFF); - continue; - case 0x01: - p = "PMI"; - break; - case 0x02: - p = "AGP"; - break; - case 0x03: - p = "VPD"; - break; - case 0x04: - p = "Slot Identification"; - break; - case 0x05: - p = "MSI"; - break; - case 0x06: - p = "CPCI Hot Swap"; - break; - case 0x07: - p = "PCI-X"; - break; - case 0x08: - DBG("HT: %#4.4ux/%#4.4ux: HT\n", - pci->vid, pci->did); - htcapabilities(pci, cp); - continue; - case 0x09: - p = "Vendor Specific"; - break; - case 0x0A: - p = "Debug Port"; - break; - case 0x0B: - p = "CPCI Central Resource Control"; - break; - case 0x0C: - p = "PCI Hot-Plug"; - break; - case 0x0E: - p = "AGP 8x"; - break; - case 0x0F: - p = "Secure Device"; - break; - case 0x10: - p = "PCIe"; - break; - case 0x11: - p = "MSI-X"; - break; - case 0x12: - p = "SATA HBA"; - break; - } - DBG("HT: %#4.4ux/%#4.4ux: %s\n", pci->vid, pci->did, p); - } - } -} diff -r 88e74744e748 -r c1fa71ee7a7c sys/src/nix/k10/init.h --- a/sys/src/nix/k10/init.h Tue Sep 27 15:43:56 2011 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,51 +0,0 @@ -uchar initcode[]={ -0x00,0x00,0x8a,0x97,0x00,0x00,0x02,0x97,0x00,0x00,0x00,0x40,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x20,0x00,0x28,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x20,0x00,0x28,0x48,0x83,0xec,0x18,0x48,0x89,0x6c,0x24, -0x20,0x48,0x8b,0x6c,0x24,0x20,0x48,0x8d,0x44,0x24,0x20,0x48,0x89,0x44,0x24,0x08, -0xe8,0x05,0x00,0x00,0x00,0x48,0x83,0xc4,0x18,0xc3,0x48,0x81,0xec,0xf0,0x00,0x00, -0x00,0xbd,0xe7,0x02,0x20,0x00,0xc7,0x44,0x24,0x08,0x00,0x00,0x00,0x00,0xe8,0xde, -0x00,0x00,0x00,0xbd,0xe7,0x02,0x20,0x00,0xb8,0x01,0x00,0x00,0x00,0x89,0x44,0x24, -0x08,0xe8,0xcb,0x00,0x00,0x00,0xbd,0xe7,0x02,0x20,0x00,0xb8,0x01,0x00,0x00,0x00, -0x89,0x44,0x24,0x08,0xe8,0xb8,0x00,0x00,0x00,0xbd,0xbf,0x02,0x20,0x00,0xb8,0xcf, -0x02,0x20,0x00,0x48,0x89,0x44,0x24,0x08,0xb8,0x02,0x00,0x00,0x00,0x89,0x44,0x24, -0x10,0xe8,0xb9,0x00,0x00,0x00,0xbd,0xcb,0x02,0x20,0x00,0xb8,0xd7,0x02,0x20,0x00, -0x48,0x89,0x44,0x24,0x08,0xb8,0x02,0x00,0x00,0x00,0x89,0x44,0x24,0x10,0xe8,0x9c, -0x00,0x00,0x00,0xbd,0xc3,0x02,0x20,0x00,0xb8,0xd7,0x02,0x20,0x00,0x48,0x89,0x44, -0x24,0x08,0xb8,0x06,0x00,0x00,0x00,0x89,0x44,0x24,0x10,0xe8,0x7f,0x00,0x00,0x00, -0xbd,0xc7,0x02,0x20,0x00,0xb8,0xdf,0x02,0x20,0x00,0x48,0x89,0x44,0x24,0x08,0xb8, -0x04,0x00,0x00,0x00,0x89,0x44,0x24,0x10,0xe8,0x62,0x00,0x00,0x00,0xbd,0xef,0x02, -0x20,0x00,0x48,0x8b,0x84,0x24,0x00,0x01,0x00,0x00,0x48,0x89,0x44,0x24,0x08,0xe8, -0x3c,0x00,0x00,0x00,0x48,0x8d,0x6c,0x24,0x28,0xb8,0xc8,0x00,0x00,0x00,0x89,0x44, -0x24,0x08,0xe8,0x56,0x00,0x00,0x00,0xc6,0x84,0x24,0xef,0x00,0x00,0x00,0x00,0x48, -0x8d,0x6c,0x24,0x28,0xe8,0x35,0x00,0x00,0x00,0x48,0x81,0xc4,0xf0,0x00,0x00,0x00, -0xc3,0x48,0x89,0x6c,0x24,0x08,0x48,0xc7,0xc5,0x0e,0x00,0x00,0x00,0x0f,0x05,0xc3, -0x48,0x89,0x6c,0x24,0x08,0x48,0xc7,0xc5,0x07,0x00,0x00,0x00,0x0f,0x05,0xc3,0x48, -0x89,0x6c,0x24,0x08,0x48,0xc7,0xc5,0x02,0x00,0x00,0x00,0x0f,0x05,0xc3,0x48,0x89, -0x6c,0x24,0x08,0x48,0xc7,0xc5,0x08,0x00,0x00,0x00,0x0f,0x05,0xc3,0x48,0x81,0xec, -0xa8,0x00,0x00,0x00,0x48,0x89,0xac,0x24,0xb0,0x00,0x00,0x00,0xc6,0x44,0x24,0x28, -0x00,0x48,0x8d,0x6c,0x24,0x28,0xb8,0x80,0x00,0x00,0x00,0x89,0x44,0x24,0x08,0xe8, -0xbb,0x00,0x00,0x00,0x48,0x8b,0xac,0x24,0xb0,0x00,0x00,0x00,0x8b,0x8c,0x24,0xb8, -0x00,0x00,0x00,0x48,0x89,0xea,0x48,0x8d,0x04,0x0a,0x48,0x89,0x44,0x24,0x08,0x48, -0x8d,0x44,0x24,0x28,0x48,0x89,0x44,0x24,0x10,0xe8,0x1b,0x00,0x00,0x00,0x48,0x8d, -0x6c,0x24,0x28,0xb8,0x80,0x00,0x00,0x00,0x89,0x44,0x24,0x08,0xe8,0x7e,0x00,0x00, -0x00,0x48,0x81,0xc4,0xa8,0x00,0x00,0x00,0xc3,0x48,0x83,0xec,0x38,0x48,0x8b,0x5c, -0x24,0x48,0x48,0x39,0xdd,0x72,0x08,0x48,0x89,0xe8,0x48,0x83,0xc4,0x38,0xc3,0x48, -0x8b,0x4c,0x24,0x50,0x48,0x89,0x4c,0x24,0x08,0xc7,0x44,0x24,0x10,0x00,0x00,0x00, -0x00,0x48,0x89,0xd9,0x48,0x29,0xe9,0x48,0x89,0x6c,0x24,0x40,0x89,0x4c,0x24,0x18, -0xe8,0x49,0x00,0x00,0x00,0x48,0x8b,0x54,0x24,0x40,0x48,0x89,0xc1,0x48,0x83,0xf8, -0x00,0x75,0x27,0x48,0x8b,0x4c,0x24,0x48,0x48,0x39,0xd1,0x76,0x12,0x48,0xff,0xc9, -0x0f,0xbe,0x01,0x25,0xc0,0x00,0x00,0x00,0x3d,0x80,0x00,0x00,0x00,0x74,0xe9,0xc6, -0x01,0x00,0x48,0x89,0xc8,0x48,0x83,0xc4,0x38,0xc3,0x48,0xff,0xc9,0xeb,0xf3,0x48, -0x89,0x6c,0x24,0x08,0x48,0xc7,0xc5,0x29,0x00,0x00,0x00,0x0f,0x05,0xc3,0x8b,0x4c, -0x24,0x20,0x83,0xf9,0x00,0x74,0x0f,0x48,0x8b,0x7c,0x24,0x10,0x0f,0xb6,0x44,0x24, -0x18,0xfc,0xf2,0xae,0x74,0x29,0x31,0xc0,0x8b,0x5c,0x24,0x20,0x48,0x89,0xef,0x48, -0x8b,0x74,0x24,0x10,0x48,0x89,0xfa,0x48,0x09,0xf2,0x83,0xe2,0x03,0x75,0x0b,0x89, -0xd9,0x48,0xc1,0xe9,0x02,0xf3,0xa5,0x83,0xe3,0x03,0x89,0xd9,0xf3,0xa4,0xc3,0x48, -0x89,0xf8,0x48,0x2b,0x44,0x24,0x10,0x48,0x89,0xc3,0x48,0x01,0xe8,0xeb,0xcd,0x23, -0x63,0x00,0x00,0x23,0x65,0x00,0x00,0x23,0x73,0x00,0x00,0x23,0x65,0x63,0x00,0x2f, -0x64,0x65,0x76,0x00,0x00,0x00,0x00,0x2f,0x65,0x6e,0x76,0x00,0x00,0x00,0x00,0x2f, -0x73,0x72,0x76,0x00,0x00,0x00,0x00,0x23,0x63,0x2f,0x63,0x6f,0x6e,0x73,0x00,0x2f, -0x62,0x6f,0x6f,0x74,0x2f,0x62,0x6f,0x6f,0x74,0x00,0x00,0x00,0x00,0x00,0x00, - -}; diff -r 88e74744e748 -r c1fa71ee7a7c sys/src/nix/k10/init.out Binary file sys/src/nix/k10/init.out has changed diff -r 88e74744e748 -r c1fa71ee7a7c sys/src/nix/k10/k8cpu --- a/sys/src/nix/k10/k8cpu Tue Sep 27 15:43:56 2011 +0200 +++ b/sys/src/nix/k10/k8cpu Wed Sep 28 15:19:50 2011 +0000 @@ -46,7 +46,6 @@ loopbackmedium netdevmedium -# acpi hpet # ht misc +dev @@ -83,7 +82,6 @@ #dbgflg # chan 'c' # apic 'A' -# acpi 'C' # hpet 'H' # ht 'H' # ioapic 'I' @@ -116,6 +114,7 @@ syssem 'S' syszio 'z' tcore 'c' + mmu 'v' amd64 +dev l32p diff -r 88e74744e748 -r c1fa71ee7a7c sys/src/nix/k10/k8cpu.c --- a/sys/src/nix/k10/k8cpu.c Tue Sep 27 15:43:56 2011 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,139 +0,0 @@ -#include "u.h" -#include "../port/lib.h" -#include "mem.h" -#include "dat.h" -#include "fns.h" -#include "../port/error.h" - -#include "io.h" - -extern Dev rootdevtab; -extern Dev consdevtab; -extern Dev archdevtab; -extern Dev envdevtab; -extern Dev pipedevtab; -extern Dev procdevtab; -extern Dev mntdevtab; -extern Dev srvdevtab; -extern Dev dupdevtab; -extern Dev rtcdevtab; -extern Dev ssldevtab; -extern Dev capdevtab; -extern Dev kprofdevtab; -extern Dev segmentdevtab; -extern Dev acpidevtab; -extern Dev tubedevtab; -extern Dev zpdevtab; -extern Dev etherdevtab; -extern Dev ipdevtab; -extern Dev uartdevtab; -Dev* devtab[] = { - &rootdevtab, - &consdevtab, - &archdevtab, - &envdevtab, - &pipedevtab, - &procdevtab, - &mntdevtab, - &srvdevtab, - &dupdevtab, - &rtcdevtab, - &ssldevtab, - &capdevtab, - &kprofdevtab, - &segmentdevtab, - &acpidevtab, - &tubedevtab, - &zpdevtab, - ðerdevtab, - &ipdevtab, - &uartdevtab, - nil, -}; - -extern uchar bootk8cpu_outcode[]; -extern usize bootk8cpu_outlen; -extern uchar _amd64_bin_auth_factotumcode[]; -extern usize _amd64_bin_auth_factotumlen; -extern uchar _amd64_bin_ip_ipconfigcode[]; -extern usize _amd64_bin_ip_ipconfiglen; -extern uchar ___root_nvramcode[]; -extern usize ___root_nvramlen; -extern void ether8169link(void); -extern void ether82557link(void); -extern void ether82563link(void); -extern void etherigbelink(void); -extern void ethermediumlink(void); -extern void loopbackmediumlink(void); -extern void netdevmediumlink(void); -void -links(void) -{ - addbootfile("boot", bootk8cpu_outcode, bootk8cpu_outlen); - addbootfile("factotum", _amd64_bin_auth_factotumcode, _amd64_bin_auth_factotumlen); - addbootfile("ipconfig", _amd64_bin_ip_ipconfigcode, _amd64_bin_ip_ipconfiglen); - addbootfile("nvram", ___root_nvramcode, ___root_nvramlen); - ether8169link(); - ether82557link(); - ether82563link(); - etherigbelink(); - ethermediumlink(); - loopbackmediumlink(); - netdevmediumlink(); -} - -#include "../ip/ip.h" -extern void tcpinit(Fs*); -extern void udpinit(Fs*); -extern void ipifcinit(Fs*); -extern void icmpinit(Fs*); -extern void icmp6init(Fs*); -void (*ipprotoinit[])(Fs*) = { - tcpinit, - udpinit, - ipifcinit, - icmpinit, - icmp6init, - nil, -}; - -extern PhysUart i8250physuart; -extern PhysUart pciphysuart; -PhysUart* physuart[] = { - &i8250physuart, - &pciphysuart, - nil, -}; - -Physseg physseg[8] = { - { .attr = SG_SHARED, - .name = "shared", - .size = SEGMAXSIZE, - }, - { .attr = SG_BSS, - .name = "memory", - .size = SEGMAXSIZE, - }, -}; -int nphysseg = 8; - -char dbgflg[256]; - -void (*mfcinit)(void) = nil; -void (*mfcopen)(Chan*) = nil; -int (*mfcread)(Chan*, uchar*, int, vlong) = nil; -void (*mfcupdate)(Chan*, uchar*, int, vlong) = nil; -void (*mfcwrite)(Chan*, uchar*, int, vlong) = nil; - -void -rdb(void) -{ - splhi(); - iprint("rdb...not installed\n"); - for(;;); -} - -int cpuserver = 1; - -char* conffile = "/sys/src/nix/k10/k8cpu"; -ulong kerndate = KERNDATE; diff -r 88e74744e748 -r c1fa71ee7a7c sys/src/nix/k10/k8cpufs.c --- a/sys/src/nix/k10/k8cpufs.c Tue Sep 27 15:43:56 2011 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,168 +0,0 @@ -#include "u.h" -#include "../port/lib.h" -#include "mem.h" -#include "dat.h" -#include "fns.h" -#include "../port/error.h" - -#include "io.h" - -extern Dev rootdevtab; -extern Dev consdevtab; -extern Dev archdevtab; -extern Dev envdevtab; -extern Dev pipedevtab; -extern Dev procdevtab; -extern Dev mntdevtab; -extern Dev srvdevtab; -extern Dev dupdevtab; -extern Dev rtcdevtab; -extern Dev ssldevtab; -extern Dev capdevtab; -extern Dev kprofdevtab; -extern Dev pmcdevtab; -extern Dev segmentdevtab; -extern Dev etherdevtab; -extern Dev ipdevtab; -extern Dev uartdevtab; -Dev* devtab[] = { - &rootdevtab, - &consdevtab, - &archdevtab, - &envdevtab, - &pipedevtab, - &procdevtab, - &mntdevtab, - &srvdevtab, - &dupdevtab, - &rtcdevtab, - &ssldevtab, - &capdevtab, - &kprofdevtab, - &pmcdevtab, - &segmentdevtab, - ðerdevtab, - &ipdevtab, - &uartdevtab, - nil, -}; - -extern uchar boot_fscode[]; -extern usize boot_fslen; -extern uchar _amd64_bin_rccode[]; -extern usize _amd64_bin_rclen; -extern uchar _rc_lib_rcmaincode[]; -extern usize _rc_lib_rcmainlen; -extern uchar _amd64_bin_echocode[]; -extern usize _amd64_bin_echolen; -extern uchar _amd64_bin_datecode[]; -extern usize _amd64_bin_datelen; -extern uchar _amd64_bin_lscode[]; -extern usize _amd64_bin_lslen; -extern uchar _amd64_bin_pscode[]; -extern usize _amd64_bin_pslen; -extern uchar _amd64_bin_bindcode[]; -extern usize _amd64_bin_bindlen; -extern uchar _amd64_bin_catcode[]; -extern usize _amd64_bin_catlen; -extern uchar _amd64_bin_auth_factotumcode[]; -extern usize _amd64_bin_auth_factotumlen; -extern uchar _amd64_bin_ip_ipconfigcode[]; -extern usize _amd64_bin_ip_ipconfiglen; -extern uchar ___root_bigcode[]; -extern usize ___root_biglen; -extern uchar ___root_nvramcode[]; -extern usize ___root_nvramlen; -extern void ether8169link(void); -extern void ether82557link(void); -extern void ether82563link(void); -extern void etherigbelink(void); -extern void ethermediumlink(void); -extern void loopbackmediumlink(void); -extern void netdevmediumlink(void); -void -links(void) -{ - addbootfile("boot", boot_fscode, boot_fslen); - addbootfile("rc", _amd64_bin_rccode, _amd64_bin_rclen); - addbootfile("rcmain", _rc_lib_rcmaincode, _rc_lib_rcmainlen); - addbootfile("echo", _amd64_bin_echocode, _amd64_bin_echolen); - addbootfile("date", _amd64_bin_datecode, _amd64_bin_datelen); - addbootfile("ls", _amd64_bin_lscode, _amd64_bin_lslen); - addbootfile("ps", _amd64_bin_pscode, _amd64_bin_pslen); - addbootfile("bind", _amd64_bin_bindcode, _amd64_bin_bindlen); - addbootfile("cat", _amd64_bin_catcode, _amd64_bin_catlen); - addbootfile("factotum", _amd64_bin_auth_factotumcode, _amd64_bin_auth_factotumlen); - addbootfile("ipconfig", _amd64_bin_ip_ipconfigcode, _amd64_bin_ip_ipconfiglen); - addbootfile("big", ___root_bigcode, ___root_biglen); - addbootfile("nvram", ___root_nvramcode, ___root_nvramlen); - ether8169link(); - ether82557link(); - ether82563link(); - etherigbelink(); - ethermediumlink(); - loopbackmediumlink(); - netdevmediumlink(); -} - -#include "../ip/ip.h" -extern void tcpinit(Fs*); -extern void udpinit(Fs*); -extern void ipifcinit(Fs*); -extern void icmpinit(Fs*); -extern void icmp6init(Fs*); -void (*ipprotoinit[])(Fs*) = { - tcpinit, - udpinit, - ipifcinit, - icmpinit, - icmp6init, - nil, -}; - -extern PhysUart i8250physuart; -extern PhysUart pciphysuart; -PhysUart* physuart[] = { - &i8250physuart, - &pciphysuart, - nil, -}; - -Physseg physseg[8] = { - { .attr = SG_SHARED, - .name = "shared", - .size = SEGMAXSIZE, - }, - { .attr = SG_BSS, - .name = "memory", - .size = SEGMAXSIZE, - }, -}; -int nphysseg = 8; - -char dbgflg[256]; - -extern void cinit(void); -extern void copen(Chan*); -extern int cread(Chan*, uchar*, int, vlong); -extern void cupdate(Chan*, uchar*, int, vlong); -extern void cwrite(Chan*, uchar*, int, vlong); - -void (*mfcinit)(void) = cinit; -void (*mfcopen)(Chan*) = copen; -int (*mfcread)(Chan*, uchar*, int, vlong) = cread; -void (*mfcupdate)(Chan*, uchar*, int, vlong) = cupdate; -void (*mfcwrite)(Chan*, uchar*, int, vlong) = cwrite; - -void -rdb(void) -{ - splhi(); - iprint("rdb...not installed\n"); - for(;;); -} - -int cpuserver = 1; - -char* conffile = "/sys/src/nix/k8/k8cpufs"; -ulong kerndate = KERNDATE; diff -r 88e74744e748 -r c1fa71ee7a7c sys/src/nix/k10/lsipi.out Binary file sys/src/nix/k10/lsipi.out has changed diff -r 88e74744e748 -r c1fa71ee7a7c sys/src/nix/k10/main.c --- a/sys/src/nix/k10/main.c Tue Sep 27 15:43:56 2011 +0200 +++ b/sys/src/nix/k10/main.c Wed Sep 28 15:19:50 2011 +0000 @@ -7,6 +7,8 @@ #include "init.h" #include "io.h" + + Conf conf; /* XXX - must go - gag */ extern void crapoptions(void); /* XXX - must go */ @@ -29,6 +31,8 @@ static char oargb[128]; static int oargblen; +static int maxcores = 1024; /* max # of cores given as an argument */ + char dbgflg[256]; static int vflag = 0; @@ -65,6 +69,11 @@ } } vflag = dbgflg['v']; + if(argc > 0){ + maxcores = strtol(argv[0], 0, 0); + //argc--; + //argv++; + } } void @@ -133,11 +142,16 @@ */ vsvminit(MACHSTKSZ, NIXTC); + /* + * Enable the timer interrupt. + */ + apicpri(0); + timersinit(); adec(&active.nbooting); ainc(&active.nonline); -ndnr(); - schedinit(); + + ndnr(); schedinit(); break; } panic("squidboy returns (type %d)", m->nixtype); @@ -312,7 +326,7 @@ */ i8259init(32); - mpsinit(32); /* Use at most 32 cores */ + mpsinit(maxcores); apiconline(); sipi(); @@ -507,6 +521,7 @@ if(once) iprint("cpu%d: exiting\n", m->machno); + spllo(); for(ms = 5*1000; ms > 0; ms -= TK2MS(2)){ delay(TK2MS(2)); diff -r 88e74744e748 -r c1fa71ee7a7c sys/src/nix/port/xalloc.c --- a/sys/src/nix/port/xalloc.c Tue Sep 27 15:43:56 2011 +0200 +++ b/sys/src/nix/port/xalloc.c Wed Sep 28 15:19:50 2011 +0000 @@ -4,6 +4,9 @@ #include "dat.h" #include "fns.h" +THIS FILE IS NOT USED FOR NIX. +I'm leaving it here, and making sure it does not compile. -nemo + enum { Nhole = 128, diff -r 88e74744e748 -r c1fa71ee7a7c sys/src/nix/root/big --- a/sys/src/nix/root/big Tue Sep 27 15:43:56 2011 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,78 +0,0 @@ -alarm.c -alloc.c -allocb.c -aoe.h -cache.c -chan.c -dev.c -devaoe.c -devcap.c -devcec.c -devcons.c -devdup.c -devenv.c -devkprof.c -devmnt.c -devpipe.c -devpmc.c -devprobe.c -devproc.c -devroot.c -devsd.c -devsegment.c -devsrv.c -devssl.c -devtab.c -devtls.c -devtrace.c -devtube.c -devuart.c -devwd.c -devzp.c -edf.c -edf.h -error.h -ethermii.c -ethermii.h -fault.c -image.c -initcode.c -latin1.c -latin1.h -lib.h -mul64fract.c -netif.c -netif.h -nixcall.c -page.c -pager.c -parse.c -pgrp.c -pmc.h -portclock.c -portdat.h -portfns.h -print.c -proc.c -ps.c -qio.c -qlock.c -rdb.c -rebootcmd.c -rmap.c -sd.h -sdaoe.c -sdscsi.c -segment.c -sysauth.c -syscallfmt.c -sysfile.c -sysproc.c -sysseg.c -syssem.c -systab.c -syszio.c -taslock.c -tod.c -tube.h -xalloc.c