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.
This commit is contained in:
Steve Passe 1997-05-29 05:57:43 +00:00
parent 4fd20a6b2a
commit 08942d4605
7 changed files with 475 additions and 9 deletions

View file

@ -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 <sys/types.h>
#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_ */

View file

@ -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 <machine/apic.h>
/* 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 */

View file

@ -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 <sys/types.h>
#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_ */

View file

@ -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 <sys/types.h>
#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_ */

View file

@ -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;
}

View file

@ -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 <machine/apic.h>
/* 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 */

View file

@ -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 <machine/apic.h>
/* 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 */