|  | /* | 
|  | * This file is part of the UCB release of Plan 9. It is subject to the license | 
|  | * terms in the LICENSE file found in the top-level directory of this | 
|  | * distribution and at http://akaros.cs.berkeley.edu/files/Plan9License. No | 
|  | * part of the UCB release of Plan 9, including this file, may be copied, | 
|  | * modified, propagated, or distributed except according to the terms contained | 
|  | * in the LICENSE file. | 
|  | */ | 
|  |  | 
|  | #pragma once | 
|  |  | 
|  | #include <atomic.h> | 
|  | #include <arch/apic.h> | 
|  |  | 
|  | enum { | 
|  | MaxAPICNO	= 254,		/* 255 is physical broadcast */ | 
|  | }; | 
|  |  | 
|  | enum {					/* I/O APIC registers */ | 
|  | IoapicID	= 0x00,		/* ID */ | 
|  | IoapicVER	= 0x01,		/* version */ | 
|  | IoapicARB	= 0x02,		/* arbitration ID */ | 
|  | IoapicRDT	= 0x10,		/* redirection table */ | 
|  | }; | 
|  |  | 
|  | /* | 
|  | * Common bits for | 
|  | *	I/O APIC Redirection Table Entry; | 
|  | *	Local APIC Local Interrupt Vector Table; | 
|  | *	Local APIC Inter-Processor Interrupt; | 
|  | *	Local APIC Timer Vector Table. | 
|  | */ | 
|  | enum { | 
|  | ApicFIXED	= 0x00000000,	/* [10:8] Delivery Mode */ | 
|  | ApicLOWEST	= 0x00000100,	/* Lowest priority */ | 
|  | ApicSMI		= 0x00000200,	/* System Management Interrupt */ | 
|  | ApicRR		= 0x00000300,	/* Remote Read */ | 
|  | ApicNMI		= 0x00000400, | 
|  | ApicINIT	= 0x00000500,	/* INIT/RESET */ | 
|  | ApicSTARTUP	= 0x00000600,	/* Startup IPI */ | 
|  | ApicExtINT	= 0x00000700, | 
|  |  | 
|  | ApicPHYSICAL	= 0x00000000,	/* [11] Destination Mode (RW) */ | 
|  | ApicLOGICAL	= 0x00000800, | 
|  |  | 
|  | ApicDELIVS	= 0x00001000,	/* [12] Delivery Status (RO) */ | 
|  | ApicHIGH	= 0x00000000,	/* [13] Interrupt Input Pin Polarity (RW) */ | 
|  | ApicLOW		= 0x00002000, | 
|  | ApicRemoteIRR	= 0x00004000,	/* [14] Remote IRR (RO) */ | 
|  | ApicEDGE	= 0x00000000,	/* [15] Trigger Mode (RW) */ | 
|  | ApicLEVEL	= 0x00008000, | 
|  | ApicIMASK	= 0x00010000,	/* [16] Interrupt Mask */ | 
|  | IOAPIC_PBASE    = 0xfec00000, /* default *physical* address */ | 
|  | }; | 
|  |  | 
|  | extern int mpisabusno; | 
|  |  | 
|  | void ioapicintrinit(int busno, int apicno, int intin, int devno, int lo); | 
|  | void ioapiconline(void); | 
|  | void ioapicinit(int id, int ibase, uintptr_t pa); | 
|  | void ioapicrdtr(struct apic*, int unused_int, int*, int*); | 
|  | void ioapicrdtw(struct apic*, int unused_int, int, int); | 
|  | char *ioapicdump(char *start, char *end); |