From 08942d46056ad4038f22c271c33bce8fb6dfb65d Mon Sep 17 00:00:00 2001 From: Steve Passe Date: Thu, 29 May 1997 05:57:43 +0000 Subject: [PATCH] apic.h now has structure definitions for both the local APIC and io APIC. apic.h has defines like: #define lapic__id lapic->id Once private pages and "known virtual addr" mapping of the APICs is ready all 'lapic__XXX' will be changed to 'lapic.XXX', and the defines will be removed. Changes to smp.h for lapic_t lapic && ioapic_t ioapic pointers, currently equal to apic_base && io_apic_base, will stand alone with the private page mapping. --- sys/amd64/include/apicreg.h | 141 +++++++++++++++++++++++++++++++++++- sys/amd64/include/smp.h | 14 +++- sys/i386/include/apic.h | 141 +++++++++++++++++++++++++++++++++++- sys/i386/include/apicreg.h | 141 +++++++++++++++++++++++++++++++++++- sys/i386/include/mpapic.h | 19 ++++- sys/i386/include/smp.h | 14 +++- sys/sys/smp.h | 14 +++- 7 files changed, 475 insertions(+), 9 deletions(-) diff --git a/sys/amd64/include/apicreg.h b/sys/amd64/include/apicreg.h index 9007e20f3af..1d92faf6bd3 100644 --- a/sys/amd64/include/apicreg.h +++ b/sys/amd64/include/apicreg.h @@ -22,7 +22,7 @@ * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF * SUCH DAMAGE. * - * $Id: apic.h,v 1.1 1997/04/26 11:45:32 peter Exp $ + * $Id: apic.h,v 1.1 1997/05/28 19:43:45 smp Exp smp $ */ #ifndef _MACHINE_APIC_H_ @@ -120,6 +120,102 @@ #define MULTIPLE_IOAPICS */ +/****************************************************************************** + * LOCAL APIC structure + */ + +#ifndef LOCORE +#include + +#define PAD3 int : 32; int : 32; int : 32 +#define PAD4 int : 32; int : 32; int : 32; int : 32 + +struct LAPIC { + /* reserved */ PAD4; + /* reserved */ PAD4; + u_int32_t id; PAD3; + u_int32_t version; PAD3; + /* reserved */ PAD4; + /* reserved */ PAD4; + /* reserved */ PAD4; + /* reserved */ PAD4; + u_int32_t tpr; PAD3; + u_int32_t apr; PAD3; + u_int32_t ppr; PAD3; + u_int32_t eoi; PAD3; + /* reserved */ PAD4; + u_int32_t ldr; PAD3; + u_int32_t dfr; PAD3; + u_int32_t svr; PAD3; + u_int32_t isr0; PAD3; + u_int32_t isr1; PAD3; + u_int32_t isr2; PAD3; + u_int32_t isr3; PAD3; + u_int32_t isr4; PAD3; + u_int32_t isr5; PAD3; + u_int32_t isr6; PAD3; + u_int32_t isr7; PAD3; + u_int32_t tmr0; PAD3; + u_int32_t tmr1; PAD3; + u_int32_t tmr2; PAD3; + u_int32_t tmr3; PAD3; + u_int32_t tmr4; PAD3; + u_int32_t tmr5; PAD3; + u_int32_t tmr6; PAD3; + u_int32_t tmr7; PAD3; + u_int32_t irr0; PAD3; + u_int32_t irr1; PAD3; + u_int32_t irr2; PAD3; + u_int32_t irr3; PAD3; + u_int32_t irr4; PAD3; + u_int32_t irr5; PAD3; + u_int32_t irr6; PAD3; + u_int32_t irr7; PAD3; + u_int32_t esr; PAD3; + /* reserved */ PAD4; + /* reserved */ PAD4; + /* reserved */ PAD4; + /* reserved */ PAD4; + /* reserved */ PAD4; + /* reserved */ PAD4; + /* reserved */ PAD4; + u_int32_t icr_lo; PAD3; + u_int32_t icr_hi; PAD3; + u_int32_t lvt_timer; PAD3; + /* reserved */ PAD4; + u_int32_t lvt_pcint; PAD3; + u_int32_t lvt_lint0; PAD3; + u_int32_t lvt_lint1; PAD3; + u_int32_t lvt_error; PAD3; + u_int32_t icr_timer; PAD3; + u_int32_t ccr_timer; PAD3; + /* reserved */ PAD4; + /* reserved */ PAD4; + /* reserved */ PAD4; + /* reserved */ PAD4; + u_int32_t dcr_timer; PAD3; + /* reserved */ PAD4; +}; + +typedef struct LAPIC lapic_t; + +/****************************************************************************** + * I/O APIC structure + */ + +struct IOAPIC { + u_int32_t ioregsel; PAD3; + u_int32_t iowin; PAD3; +}; + +typedef struct IOAPIC ioapic_t; + +#undef PAD4 +#undef PAD3 + +#endif /* LOCORE */ + + /****************************************************************************** * LOCAL APIC defines */ @@ -161,6 +257,7 @@ # else /* !LOCORE */ +#if 0 /** XXX APIC_STRUCT */ /* offsets in apic_base[] */ #define APIC_ID (0x020/4) #define APIC_VER (0x030/4) @@ -191,6 +288,7 @@ #define APIC_TICR (0x380/4) #define APIC_TCCR (0x390/4) #define APIC_TDCR (0x3e0/4) +#endif /** XXX APIC_STRUCT */ # endif /* LOCORE */ @@ -403,4 +501,45 @@ #define IOART_INTVEC 0x000000ff /* R/W: INTerrupt vector field */ +/** + * XXX FIXME: temproary defines till we get private pages... + */ +#if 1 /** XXX APIC_STRUCT */ + +/* XXX when automatically mapped to a virtual page */ +#define lapic__id lapic->id +#define lapic__version lapic->version +#define lapic__eoi lapic->eoi +#define lapic__irr1 lapic->irr1 +#define lapic__lvt_lint0 lapic->lvt_lint0 +#define lapic__lvt_lint1 lapic->lvt_lint1 +#define lapic__tpr lapic->tpr +#define lapic__svr lapic->svr +#define lapic__icr_lo lapic->icr_lo +#define lapic__icr_hi lapic->icr_hi +#define lapic__dcr_timer lapic->dcr_timer +#define lapic__lvt_timer lapic->lvt_timer +#define lapic__icr_timer lapic->icr_timer +#define lapic__ccr_timer lapic->ccr_timer + +#else + +/* XXX when mapped to a known virtual address */ +#define lapic__id lapic.id +#define lapic__version lapic.version +#define lapic__eoi lapic.eoi +#define lapic__irr1 lapic.irr1 +#define lapic__lvt_lint0 lapic.lvt_lint0 +#define lapic__lvt_lint1 lapic.lvt_lint1 +#define lapic__tpr lapic.tpr +#define lapic__svr lapic.svr +#define lapic__icr_lo lapic.icr_lo +#define lapic__icr_hi lapic.icr_hi +#define lapic__dcr_timer lapic.dcr_timer +#define lapic__lvt_timer lapic.lvt_timer +#define lapic__icr_timer lapic.icr_timer +#define lapic__ccr_timer lapic.ccr_timer + +#endif /** XXX APIC_STRUCT */ + #endif /* _MACHINE_APIC_H_ */ diff --git a/sys/amd64/include/smp.h b/sys/amd64/include/smp.h index ca4b2e5fdfc..ee9626965a1 100644 --- a/sys/amd64/include/smp.h +++ b/sys/amd64/include/smp.h @@ -6,7 +6,7 @@ * this stuff is worth it, you can buy me a beer in return. Poul-Henning Kamp * ---------------------------------------------------------------------------- * - * $Id: smp.h,v 1.8 1997/05/07 19:53:20 peter Exp $ + * $Id: smp.h,v 1.9 1997/05/28 18:44:11 fsmp Exp $ * */ @@ -25,6 +25,8 @@ #if defined(SMP) || defined(APIC_IO) +#include + /* global data in mpboot.s */ extern int bootMP_size; @@ -78,11 +80,17 @@ void smp_invltlb __P((void)); /* global data in mpapic.c */ extern volatile u_int* apic_base; +#if 1 /** XXX APIC_STRUCT */ +extern volatile lapic_t* lapic; +#endif /** XXX APIC_STRUCT */ #if defined(MULTIPLE_IOAPICS) #error MULTIPLE_IOAPICSXXX #else extern volatile u_int* io_apic_base; +#if 1 /** XXX APIC_STRUCT */ +extern volatile ioapic_t* ioapic; +#endif /** XXX APIC_STRUCT */ #endif /* MULTIPLE_IOAPICS */ /* functions in mpapic.c */ @@ -125,7 +133,11 @@ cpunumber(void) static __inline unsigned cpunumber(void) { +#if 0 return (unsigned)(apic_id_to_logical[(apic_base[8] & 0x0f000000) >> 24]); +#else + return (unsigned)(apic_id_to_logical[(lapic__id & 0x0f000000) >> 24]); +#endif } #endif /* 0 */ diff --git a/sys/i386/include/apic.h b/sys/i386/include/apic.h index 9007e20f3af..1d92faf6bd3 100644 --- a/sys/i386/include/apic.h +++ b/sys/i386/include/apic.h @@ -22,7 +22,7 @@ * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF * SUCH DAMAGE. * - * $Id: apic.h,v 1.1 1997/04/26 11:45:32 peter Exp $ + * $Id: apic.h,v 1.1 1997/05/28 19:43:45 smp Exp smp $ */ #ifndef _MACHINE_APIC_H_ @@ -120,6 +120,102 @@ #define MULTIPLE_IOAPICS */ +/****************************************************************************** + * LOCAL APIC structure + */ + +#ifndef LOCORE +#include + +#define PAD3 int : 32; int : 32; int : 32 +#define PAD4 int : 32; int : 32; int : 32; int : 32 + +struct LAPIC { + /* reserved */ PAD4; + /* reserved */ PAD4; + u_int32_t id; PAD3; + u_int32_t version; PAD3; + /* reserved */ PAD4; + /* reserved */ PAD4; + /* reserved */ PAD4; + /* reserved */ PAD4; + u_int32_t tpr; PAD3; + u_int32_t apr; PAD3; + u_int32_t ppr; PAD3; + u_int32_t eoi; PAD3; + /* reserved */ PAD4; + u_int32_t ldr; PAD3; + u_int32_t dfr; PAD3; + u_int32_t svr; PAD3; + u_int32_t isr0; PAD3; + u_int32_t isr1; PAD3; + u_int32_t isr2; PAD3; + u_int32_t isr3; PAD3; + u_int32_t isr4; PAD3; + u_int32_t isr5; PAD3; + u_int32_t isr6; PAD3; + u_int32_t isr7; PAD3; + u_int32_t tmr0; PAD3; + u_int32_t tmr1; PAD3; + u_int32_t tmr2; PAD3; + u_int32_t tmr3; PAD3; + u_int32_t tmr4; PAD3; + u_int32_t tmr5; PAD3; + u_int32_t tmr6; PAD3; + u_int32_t tmr7; PAD3; + u_int32_t irr0; PAD3; + u_int32_t irr1; PAD3; + u_int32_t irr2; PAD3; + u_int32_t irr3; PAD3; + u_int32_t irr4; PAD3; + u_int32_t irr5; PAD3; + u_int32_t irr6; PAD3; + u_int32_t irr7; PAD3; + u_int32_t esr; PAD3; + /* reserved */ PAD4; + /* reserved */ PAD4; + /* reserved */ PAD4; + /* reserved */ PAD4; + /* reserved */ PAD4; + /* reserved */ PAD4; + /* reserved */ PAD4; + u_int32_t icr_lo; PAD3; + u_int32_t icr_hi; PAD3; + u_int32_t lvt_timer; PAD3; + /* reserved */ PAD4; + u_int32_t lvt_pcint; PAD3; + u_int32_t lvt_lint0; PAD3; + u_int32_t lvt_lint1; PAD3; + u_int32_t lvt_error; PAD3; + u_int32_t icr_timer; PAD3; + u_int32_t ccr_timer; PAD3; + /* reserved */ PAD4; + /* reserved */ PAD4; + /* reserved */ PAD4; + /* reserved */ PAD4; + u_int32_t dcr_timer; PAD3; + /* reserved */ PAD4; +}; + +typedef struct LAPIC lapic_t; + +/****************************************************************************** + * I/O APIC structure + */ + +struct IOAPIC { + u_int32_t ioregsel; PAD3; + u_int32_t iowin; PAD3; +}; + +typedef struct IOAPIC ioapic_t; + +#undef PAD4 +#undef PAD3 + +#endif /* LOCORE */ + + /****************************************************************************** * LOCAL APIC defines */ @@ -161,6 +257,7 @@ # else /* !LOCORE */ +#if 0 /** XXX APIC_STRUCT */ /* offsets in apic_base[] */ #define APIC_ID (0x020/4) #define APIC_VER (0x030/4) @@ -191,6 +288,7 @@ #define APIC_TICR (0x380/4) #define APIC_TCCR (0x390/4) #define APIC_TDCR (0x3e0/4) +#endif /** XXX APIC_STRUCT */ # endif /* LOCORE */ @@ -403,4 +501,45 @@ #define IOART_INTVEC 0x000000ff /* R/W: INTerrupt vector field */ +/** + * XXX FIXME: temproary defines till we get private pages... + */ +#if 1 /** XXX APIC_STRUCT */ + +/* XXX when automatically mapped to a virtual page */ +#define lapic__id lapic->id +#define lapic__version lapic->version +#define lapic__eoi lapic->eoi +#define lapic__irr1 lapic->irr1 +#define lapic__lvt_lint0 lapic->lvt_lint0 +#define lapic__lvt_lint1 lapic->lvt_lint1 +#define lapic__tpr lapic->tpr +#define lapic__svr lapic->svr +#define lapic__icr_lo lapic->icr_lo +#define lapic__icr_hi lapic->icr_hi +#define lapic__dcr_timer lapic->dcr_timer +#define lapic__lvt_timer lapic->lvt_timer +#define lapic__icr_timer lapic->icr_timer +#define lapic__ccr_timer lapic->ccr_timer + +#else + +/* XXX when mapped to a known virtual address */ +#define lapic__id lapic.id +#define lapic__version lapic.version +#define lapic__eoi lapic.eoi +#define lapic__irr1 lapic.irr1 +#define lapic__lvt_lint0 lapic.lvt_lint0 +#define lapic__lvt_lint1 lapic.lvt_lint1 +#define lapic__tpr lapic.tpr +#define lapic__svr lapic.svr +#define lapic__icr_lo lapic.icr_lo +#define lapic__icr_hi lapic.icr_hi +#define lapic__dcr_timer lapic.dcr_timer +#define lapic__lvt_timer lapic.lvt_timer +#define lapic__icr_timer lapic.icr_timer +#define lapic__ccr_timer lapic.ccr_timer + +#endif /** XXX APIC_STRUCT */ + #endif /* _MACHINE_APIC_H_ */ diff --git a/sys/i386/include/apicreg.h b/sys/i386/include/apicreg.h index 9007e20f3af..1d92faf6bd3 100644 --- a/sys/i386/include/apicreg.h +++ b/sys/i386/include/apicreg.h @@ -22,7 +22,7 @@ * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF * SUCH DAMAGE. * - * $Id: apic.h,v 1.1 1997/04/26 11:45:32 peter Exp $ + * $Id: apic.h,v 1.1 1997/05/28 19:43:45 smp Exp smp $ */ #ifndef _MACHINE_APIC_H_ @@ -120,6 +120,102 @@ #define MULTIPLE_IOAPICS */ +/****************************************************************************** + * LOCAL APIC structure + */ + +#ifndef LOCORE +#include + +#define PAD3 int : 32; int : 32; int : 32 +#define PAD4 int : 32; int : 32; int : 32; int : 32 + +struct LAPIC { + /* reserved */ PAD4; + /* reserved */ PAD4; + u_int32_t id; PAD3; + u_int32_t version; PAD3; + /* reserved */ PAD4; + /* reserved */ PAD4; + /* reserved */ PAD4; + /* reserved */ PAD4; + u_int32_t tpr; PAD3; + u_int32_t apr; PAD3; + u_int32_t ppr; PAD3; + u_int32_t eoi; PAD3; + /* reserved */ PAD4; + u_int32_t ldr; PAD3; + u_int32_t dfr; PAD3; + u_int32_t svr; PAD3; + u_int32_t isr0; PAD3; + u_int32_t isr1; PAD3; + u_int32_t isr2; PAD3; + u_int32_t isr3; PAD3; + u_int32_t isr4; PAD3; + u_int32_t isr5; PAD3; + u_int32_t isr6; PAD3; + u_int32_t isr7; PAD3; + u_int32_t tmr0; PAD3; + u_int32_t tmr1; PAD3; + u_int32_t tmr2; PAD3; + u_int32_t tmr3; PAD3; + u_int32_t tmr4; PAD3; + u_int32_t tmr5; PAD3; + u_int32_t tmr6; PAD3; + u_int32_t tmr7; PAD3; + u_int32_t irr0; PAD3; + u_int32_t irr1; PAD3; + u_int32_t irr2; PAD3; + u_int32_t irr3; PAD3; + u_int32_t irr4; PAD3; + u_int32_t irr5; PAD3; + u_int32_t irr6; PAD3; + u_int32_t irr7; PAD3; + u_int32_t esr; PAD3; + /* reserved */ PAD4; + /* reserved */ PAD4; + /* reserved */ PAD4; + /* reserved */ PAD4; + /* reserved */ PAD4; + /* reserved */ PAD4; + /* reserved */ PAD4; + u_int32_t icr_lo; PAD3; + u_int32_t icr_hi; PAD3; + u_int32_t lvt_timer; PAD3; + /* reserved */ PAD4; + u_int32_t lvt_pcint; PAD3; + u_int32_t lvt_lint0; PAD3; + u_int32_t lvt_lint1; PAD3; + u_int32_t lvt_error; PAD3; + u_int32_t icr_timer; PAD3; + u_int32_t ccr_timer; PAD3; + /* reserved */ PAD4; + /* reserved */ PAD4; + /* reserved */ PAD4; + /* reserved */ PAD4; + u_int32_t dcr_timer; PAD3; + /* reserved */ PAD4; +}; + +typedef struct LAPIC lapic_t; + +/****************************************************************************** + * I/O APIC structure + */ + +struct IOAPIC { + u_int32_t ioregsel; PAD3; + u_int32_t iowin; PAD3; +}; + +typedef struct IOAPIC ioapic_t; + +#undef PAD4 +#undef PAD3 + +#endif /* LOCORE */ + + /****************************************************************************** * LOCAL APIC defines */ @@ -161,6 +257,7 @@ # else /* !LOCORE */ +#if 0 /** XXX APIC_STRUCT */ /* offsets in apic_base[] */ #define APIC_ID (0x020/4) #define APIC_VER (0x030/4) @@ -191,6 +288,7 @@ #define APIC_TICR (0x380/4) #define APIC_TCCR (0x390/4) #define APIC_TDCR (0x3e0/4) +#endif /** XXX APIC_STRUCT */ # endif /* LOCORE */ @@ -403,4 +501,45 @@ #define IOART_INTVEC 0x000000ff /* R/W: INTerrupt vector field */ +/** + * XXX FIXME: temproary defines till we get private pages... + */ +#if 1 /** XXX APIC_STRUCT */ + +/* XXX when automatically mapped to a virtual page */ +#define lapic__id lapic->id +#define lapic__version lapic->version +#define lapic__eoi lapic->eoi +#define lapic__irr1 lapic->irr1 +#define lapic__lvt_lint0 lapic->lvt_lint0 +#define lapic__lvt_lint1 lapic->lvt_lint1 +#define lapic__tpr lapic->tpr +#define lapic__svr lapic->svr +#define lapic__icr_lo lapic->icr_lo +#define lapic__icr_hi lapic->icr_hi +#define lapic__dcr_timer lapic->dcr_timer +#define lapic__lvt_timer lapic->lvt_timer +#define lapic__icr_timer lapic->icr_timer +#define lapic__ccr_timer lapic->ccr_timer + +#else + +/* XXX when mapped to a known virtual address */ +#define lapic__id lapic.id +#define lapic__version lapic.version +#define lapic__eoi lapic.eoi +#define lapic__irr1 lapic.irr1 +#define lapic__lvt_lint0 lapic.lvt_lint0 +#define lapic__lvt_lint1 lapic.lvt_lint1 +#define lapic__tpr lapic.tpr +#define lapic__svr lapic.svr +#define lapic__icr_lo lapic.icr_lo +#define lapic__icr_hi lapic.icr_hi +#define lapic__dcr_timer lapic.dcr_timer +#define lapic__lvt_timer lapic.lvt_timer +#define lapic__icr_timer lapic.icr_timer +#define lapic__ccr_timer lapic.ccr_timer + +#endif /** XXX APIC_STRUCT */ + #endif /* _MACHINE_APIC_H_ */ diff --git a/sys/i386/include/mpapic.h b/sys/i386/include/mpapic.h index baf00a04a63..9d4e352ed06 100644 --- a/sys/i386/include/mpapic.h +++ b/sys/i386/include/mpapic.h @@ -22,7 +22,7 @@ * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF * SUCH DAMAGE. * - * $Id: mpapic.h,v 1.4 1997/05/22 22:04:45 fsmp Exp $ + * $Id: mpapic.h,v 1.5 1997/05/25 02:43:42 fsmp Exp $ */ #ifndef _MACHINE_MPAPIC_H_ @@ -90,11 +90,17 @@ enum busTypes { #error MULTIPLE_IOAPICSXXX #else static __inline u_int32_t +#if 1 /** XXX APIC_STRUCT */ +io_apic_read(int apic, int reg) +{ + ioapic[apic].ioregsel = reg; + return ioapic[apic].iowin; +#else io_apic_read(int apic __attribute__ ((unused)), int reg) - { (*io_apic_base) = reg; return (*(io_apic_base + (IOAPIC_WINDOW / sizeof(u_int)))); +#endif /** XXX APIC_STRUCT */ } #endif /* MULTIPLE_IOAPICS */ @@ -106,10 +112,17 @@ io_apic_read(int apic __attribute__ ((unused)), int reg) #error MULTIPLE_IOAPICSXXX #else static __inline void +#if 1 /** XXX APIC_STRUCT */ +io_apic_write(int apic, int reg, u_int32_t value) +{ + ioapic[apic].ioregsel = reg; + ioapic[apic].iowin = value; +#else io_apic_write(int apic __attribute__ ((unused)), int reg, u_int32_t value) { (*io_apic_base) = reg; (*(io_apic_base + (IOAPIC_WINDOW / sizeof(u_int)))) = value; +#endif /** XXX APIC_STRUCT */ } #endif /* MULTIPLE_IOAPICS */ @@ -184,7 +197,7 @@ read_io_apic_mask24(int apic __attribute__ ((unused))) static __inline void apic_eoi(void) { - apic_base[APIC_EOI] = 0; + lapic__eoi = 0; } diff --git a/sys/i386/include/smp.h b/sys/i386/include/smp.h index ca4b2e5fdfc..ee9626965a1 100644 --- a/sys/i386/include/smp.h +++ b/sys/i386/include/smp.h @@ -6,7 +6,7 @@ * this stuff is worth it, you can buy me a beer in return. Poul-Henning Kamp * ---------------------------------------------------------------------------- * - * $Id: smp.h,v 1.8 1997/05/07 19:53:20 peter Exp $ + * $Id: smp.h,v 1.9 1997/05/28 18:44:11 fsmp Exp $ * */ @@ -25,6 +25,8 @@ #if defined(SMP) || defined(APIC_IO) +#include + /* global data in mpboot.s */ extern int bootMP_size; @@ -78,11 +80,17 @@ void smp_invltlb __P((void)); /* global data in mpapic.c */ extern volatile u_int* apic_base; +#if 1 /** XXX APIC_STRUCT */ +extern volatile lapic_t* lapic; +#endif /** XXX APIC_STRUCT */ #if defined(MULTIPLE_IOAPICS) #error MULTIPLE_IOAPICSXXX #else extern volatile u_int* io_apic_base; +#if 1 /** XXX APIC_STRUCT */ +extern volatile ioapic_t* ioapic; +#endif /** XXX APIC_STRUCT */ #endif /* MULTIPLE_IOAPICS */ /* functions in mpapic.c */ @@ -125,7 +133,11 @@ cpunumber(void) static __inline unsigned cpunumber(void) { +#if 0 return (unsigned)(apic_id_to_logical[(apic_base[8] & 0x0f000000) >> 24]); +#else + return (unsigned)(apic_id_to_logical[(lapic__id & 0x0f000000) >> 24]); +#endif } #endif /* 0 */ diff --git a/sys/sys/smp.h b/sys/sys/smp.h index ca4b2e5fdfc..ee9626965a1 100644 --- a/sys/sys/smp.h +++ b/sys/sys/smp.h @@ -6,7 +6,7 @@ * this stuff is worth it, you can buy me a beer in return. Poul-Henning Kamp * ---------------------------------------------------------------------------- * - * $Id: smp.h,v 1.8 1997/05/07 19:53:20 peter Exp $ + * $Id: smp.h,v 1.9 1997/05/28 18:44:11 fsmp Exp $ * */ @@ -25,6 +25,8 @@ #if defined(SMP) || defined(APIC_IO) +#include + /* global data in mpboot.s */ extern int bootMP_size; @@ -78,11 +80,17 @@ void smp_invltlb __P((void)); /* global data in mpapic.c */ extern volatile u_int* apic_base; +#if 1 /** XXX APIC_STRUCT */ +extern volatile lapic_t* lapic; +#endif /** XXX APIC_STRUCT */ #if defined(MULTIPLE_IOAPICS) #error MULTIPLE_IOAPICSXXX #else extern volatile u_int* io_apic_base; +#if 1 /** XXX APIC_STRUCT */ +extern volatile ioapic_t* ioapic; +#endif /** XXX APIC_STRUCT */ #endif /* MULTIPLE_IOAPICS */ /* functions in mpapic.c */ @@ -125,7 +133,11 @@ cpunumber(void) static __inline unsigned cpunumber(void) { +#if 0 return (unsigned)(apic_id_to_logical[(apic_base[8] & 0x0f000000) >> 24]); +#else + return (unsigned)(apic_id_to_logical[(lapic__id & 0x0f000000) >> 24]); +#endif } #endif /* 0 */