remove Apic structure as it only conflated two different ideas. replace with either Lapic or Ioapic. Reference: /n/atom/patch/applied/apicdivorce Date: Thu Sep 17 05:14:15 CES 2015 Signed-off-by: quanstro@quanstro.net --- /sys/src/nix/k10/mpacpi.c Thu Sep 17 05:13:28 2015 +++ /sys/src/nix/k10/mpacpi.c Thu Sep 17 05:13:29 2015 @@ -15,7 +15,7 @@ { char *already; int np, bp; - Apic *apic; + Ioapic *apic; Apicst *st; if(apics == nil) --- /sys/src/nix/k10/mp.c Thu Sep 17 05:13:31 2015 +++ /sys/src/nix/k10/mp.c Thu Sep 17 05:13:32 2015 @@ -68,7 +68,8 @@ mpmkintr(u8int* p) { u32int v; - Apic *apic; + Ioapic *ioapic; + Lapic *lapic; int n, polarity, trigger; /* @@ -94,25 +95,25 @@ mpintrprint("INTIN botch", p); return 0; case 3: /* IOINTR */ - if((apic = ioapiclookup(p[6])) == nil){ + if((ioapic = ioapiclookup(p[6])) == nil){ mpintrprint("unuseable ioapic", p); return 0; } - if(p[7] >= apic->nrdt){ + if(p[7] >= ioapic->nrdt){ mpintrprint("IO INTIN out of range", p); return 0; } break; case 4: /* LINTR */ - if((apic = lapiclookup(p[6])) == nil){ + if((lapic = lapiclookup(p[6])) == nil){ mpintrprint("unuseable lapic", p); return 0; } - if(p[7] >= nelem(apic->lvt)){ + if(p[7] >= nelem(lapic->lvt)){ mpintrprint("LOCAL INTIN out of range", p); return 0; } - USED(apic); + USED(lapic); break; } } @@ -179,7 +180,7 @@ u8int *e, *p; int nmach, bustype, i, n; u32int lo; - Apic *a; + Lapic *a; nmach = 0; p = pcmp->entries; @@ -287,7 +288,7 @@ */ if(p[6] == 0xff){ for(i = 0; i < Napic; i++){ - if((a = lapiclookup(i)) == nil || a->addr != nil) + if((a = lapiclookup(i)) == nil) continue; a->lvt[p[7]] = lo; } --- /sys/src/nix/k10/lapic.c Thu Sep 17 05:13:34 2015 +++ /sys/src/nix/k10/lapic.c Thu Sep 17 05:13:35 2015 @@ -74,14 +74,14 @@ static u32int* lapicbase; static int lapmachno = 1; -static Apic xlapic[Napic]; +static Lapic xlapic[Napic]; -Apic* +Lapic* lapiclookup(uint id) { - Apic *a; + Lapic *a; - if(id > nelem(xlapic)) + if(id >= nelem(xlapic)) return nil; a = xlapic + id; if(a->useable) @@ -150,7 +150,7 @@ void lapicinit(int lapicno, uintmem pa, int isbp) { - Apic *apic; + Lapic *apic; /* * Mark the LAPIC useable if it has a good ID, and the registers can @@ -193,7 +193,7 @@ void lapicsetcolor(int lapicno, int color) { - Apic *apic; + Lapic *apic; DBG("lapic%d: setcolor: %d\n", lapicno, color); if(lapicno >= Napic){ @@ -213,9 +213,9 @@ } static void -lapicdump0(Apic *apic, int i) +lapicdump0(Lapic *apic, int i) { - if(!apic->useable || apic->addr != 0) + if(!apic->useable) return; DBG("lapic%d: machno %d lint0 %#8.8ux lint1 %#8.8ux\n", i, apic->machno, apic->lvt[0], apic->lvt[1]); @@ -242,7 +242,7 @@ int lapiconline(void) { - Apic *apic; + Lapic *apic; u64int tsc; u32int dfr, ver; int apicno, nlvt; @@ -260,9 +260,9 @@ apicno = m->apicno; } apic = &xlapic[apicno]; - if(!apic->useable || apic->addr != nil) - panic("lapiconline: lapic%d: useable %d addr %#p", - apicno, apic->useable, apic->addr); + if(!apic->useable) + panic("lapiconline: lapic%d: useable %d", + apicno, apic->useable); /* * Things that can only be done when on the processor @@ -374,7 +374,7 @@ void lapictimerset(uvlong next) { - Apic *apic; + Lapic *apic; vlong period; apic = xlapic + m->apicno; --- /sys/src/nix/k10/apic.h Thu Sep 17 05:13:37 2015 +++ /sys/src/nix/k10/apic.h Thu Sep 17 05:13:38 2015 @@ -7,9 +7,9 @@ */ typedef struct Ioapic Ioapic; typedef struct Lapic Lapic; -typedef struct Apic Apic; struct Ioapic { + int useable; /* en */ Lock; /* register access */ u32int* addr; /* register base */ uintmem paddr; /* register base */ @@ -18,6 +18,7 @@ }; struct Lapic { + int useable; /* en */ int machno; /* APIC */ int color; @@ -34,12 +35,6 @@ uchar vecalloc[256/8]; }; -struct Apic { - int useable; /* en */ - Ioapic; - Lapic; -}; - enum { Nbus = 256, /* must be 256 */ Napic = 254, /* xAPIC architectural limit */ @@ -83,18 +78,18 @@ int gsitoapicid(int, uint*); void ioapicdump(void); -Apic* ioapicinit(int, int, uintmem); +Ioapic* ioapicinit(int, int, uintmem); int ioapicintrdisable(int); int ioapicintrenable(Vctl*); void ioapicintrinit(int, int, int, int, int, u32int); -Apic* ioapiclookup(uint); +Ioapic* ioapiclookup(uint); void ioapiconline(void); int ioapicphysdd(Vctl*, u32int*, u32int*); void lapicdump(void); int lapiceoi(int); void lapicinit(int, uintmem, int); void lapicipi(int); -Apic* lapiclookup(uint); +Lapic* lapiclookup(uint); int lapiconline(void); void lapicpri(int); void lapicsetcolor(int, int); --- /sys/src/nix/k10/sipi.c Thu Sep 17 05:13:40 2015 +++ /sys/src/nix/k10/sipi.c Thu Sep 17 05:13:41 2015 @@ -13,7 +13,7 @@ void sipi(void) { - Apic *apic; + Lapic *apic; Mach *mach; int apicno, i, nproc; u32int *sipiptr; @@ -42,7 +42,7 @@ */ nproc = 0; for(apicno = 0; apicno < Napic; apicno++){ - if((apic = lapiclookup(apicno)) == nil || apic->addr != 0 || apic->machno == 0) + if((apic = lapiclookup(apicno)) == nil || apic->machno == 0) continue; nproc++; if(nproc == MACHMAX){ --- /sys/src/nix/k10/ioapic.c Thu Sep 17 05:13:43 2015 +++ /sys/src/nix/k10/ioapic.c Thu Sep 17 05:13:44 2015 @@ -19,7 +19,7 @@ }; struct Rdt { - Apic *apic; + Ioapic *apic; int intin; u32int lo; @@ -48,7 +48,7 @@ static Rbus* rdtbus[Nbus]; static Rdt* rdtvecno[IdtMAX+1]; -static Apic xioapic[Napic]; +static Ioapic xioapic[Napic]; static int isabusno = -1; /* BOTCH: no need for this concept; we've got the bustype */ @@ -65,10 +65,10 @@ isabusno = busno; } -Apic* +Ioapic* ioapiclookup(uint id) { - Apic *a; + Ioapic *a; if(id > nelem(xioapic)) return nil; @@ -82,7 +82,7 @@ gsitoapicid(int gsi, uint *intin) { int i; - Apic *a; + Ioapic *a; for(i=0; i= Nbus || apicno >= Napic || nrdtarray >= Nrdt) return; @@ -191,11 +191,11 @@ * (the pc kernel ignores this issue.) it could be that mp and * acpi have different numbering? */ -static Apic* +static Ioapic* dupaddr(uintmem pa) { int i; - Apic *p; + Ioapic *p; for(i = 0; i < nelem(xioapic); i++){ p = xioapic + i; @@ -205,10 +205,10 @@ return nil; } -Apic* +Ioapic* ioapicinit(int id, int ibase, uintmem pa) { - Apic *apic, *p; + Ioapic *apic, *p; static int base; /* @@ -263,7 +263,7 @@ int i, n; Rbus *rbus; Rdt *rdt; - Apic *apic; + Ioapic *apic; u32int hi, lo; if(!DBGFLG) @@ -335,7 +335,7 @@ ioapiconline(void) { int i; - Apic *apic; + Ioapic *apic; addarchfile("ioapic", 0444, ioapicread, nil); for(apic = xioapic; apic < &xioapic[Napic]; apic++){ @@ -356,7 +356,7 @@ static Mach* selmach(void) { - Apic *lapic; + Lapic *lapic; Mach *mach; static int i; @@ -485,7 +485,7 @@ v->type = "msi-x"; v->mask = msixmask; - print("msix: %T: enabling %.16llux %s vno %d affinity %d\n", + DBG("msix: %T: enabling %.16llux %s vno %d affinity %d\n", v->p->tbdf, msivec, v->name, v->vno, v->affinity); return v->vno; } --- /sys/src/nix/k10/acpi.c Thu Sep 17 05:13:47 2015 +++ /sys/src/nix/k10/acpi.c Thu Sep 17 05:13:48 2015 @@ -201,7 +201,8 @@ apicmkintr(uint src, uint inttype, int polarity, int trigger, uint apicno, uint intin) { u32int v; - Apic *apic; + Ioapic *ioapic; + Lapic *lapic; /* * Check valid bus, interrupt input pin polarity @@ -222,25 +223,25 @@ print("apic: intin botch: %d\n", intin); return 0; case Iointr: - if((apic = ioapiclookup(apicno)) == nil){ + if((ioapic = ioapiclookup(apicno)) == nil){ print("ioapic%d: ioapic unusable\n", apicno); return 0; } - if(intin >= apic->nrdt){ - print("ioapic%d: intin %d >= nrdt %d\n", apicno, intin, apic->nrdt); + if(intin >= ioapic->nrdt){ + print("ioapic%d: intin %d >= nrdt %d\n", apicno, intin, ioapic->nrdt); return 0; } break; case Lintr: - if((apic = lapiclookup(apicno)) == nil){ + if((lapic = lapiclookup(apicno)) == nil){ print("lapic%d: lapic unusable\n", apicno); return 0; } - if(intin >= nelem(apic->lvt)){ + if(intin >= nelem(lapic->lvt)){ print("lapic%d: intin beyond lvt: %d\n", apicno, intin); return 0; } - USED(apic); + USED(lapic); break; } }