summaryrefslogtreecommitdiffstats
path: root/sys/amd64/include/apicreg.h
diff options
context:
space:
mode:
authorfsmp <fsmp@FreeBSD.org>1997-05-29 05:57:43 +0000
committerfsmp <fsmp@FreeBSD.org>1997-05-29 05:57:43 +0000
commit1d5eea67e279ee4c1df42846a2f5cbfb4badaed5 (patch)
treee8e1919865bf1cae6a6e4bc3815e98a7e548030b /sys/amd64/include/apicreg.h
parent9872779de28c7c9afa5acd60762200a1b0230010 (diff)
downloadFreeBSD-src-1d5eea67e279ee4c1df42846a2f5cbfb4badaed5.zip
FreeBSD-src-1d5eea67e279ee4c1df42846a2f5cbfb4badaed5.tar.gz
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.
Diffstat (limited to 'sys/amd64/include/apicreg.h')
-rw-r--r--sys/amd64/include/apicreg.h141
1 files changed, 140 insertions, 1 deletions
diff --git a/sys/amd64/include/apicreg.h b/sys/amd64/include/apicreg.h
index 9007e20..1d92faf 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_
@@ -121,6 +121,102 @@
*/
/******************************************************************************
+ * 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_ */
OpenPOWER on IntegriCloud