Add constants for fields in the local APIC error status register and a
routine to read it.
This commit is contained in:
parent
8210f38296
commit
660f08b291
@ -299,6 +299,7 @@ lapic_setup(int boot)
|
||||
/* Program LINT[01] LVT entries. */
|
||||
lapic->lvt_lint0 = lvt_mode(la, LVT_LINT0, lapic->lvt_lint0);
|
||||
lapic->lvt_lint1 = lvt_mode(la, LVT_LINT1, lapic->lvt_lint1);
|
||||
|
||||
#ifdef HWPMC_HOOKS
|
||||
/* Program the PMC LVT entry if present. */
|
||||
if (maxlvt >= LVT_PMC)
|
||||
@ -644,6 +645,18 @@ lapic_eoi(void)
|
||||
lapic->eoi = 0;
|
||||
}
|
||||
|
||||
/*
|
||||
* Read the contents of the error status register. We have to write
|
||||
* to the register first before reading from it.
|
||||
*/
|
||||
u_int
|
||||
lapic_error(void)
|
||||
{
|
||||
|
||||
lapic->esr = 0;
|
||||
return (lapic->esr);
|
||||
}
|
||||
|
||||
void
|
||||
lapic_handle_intr(int vector, struct trapframe *frame)
|
||||
{
|
||||
|
@ -260,6 +260,14 @@ typedef struct IOAPIC ioapic_t;
|
||||
# define APIC_TPR_INT 0x000000f0
|
||||
# define APIC_TPR_SUB 0x0000000f
|
||||
|
||||
/* fields in ESR */
|
||||
#define APIC_ESR_SEND_CS_ERROR 0x00000001
|
||||
#define APIC_ESR_RECEIVE_CS_ERROR 0x00000002
|
||||
#define APIC_ESR_SEND_ACCEPT 0x00000004
|
||||
#define APIC_ESR_RECEIVE_ACCEPT 0x00000008
|
||||
#define APIC_ESR_SEND_ILLEGAL_VECTOR 0x00000020
|
||||
#define APIC_ESR_RECEIVE_ILLEGAL_VECTOR 0x00000040
|
||||
#define APIC_ESR_ILLEGAL_REGISTER 0x00000080
|
||||
|
||||
/* fields in ICR_LOW */
|
||||
#define APIC_VECTOR_MASK 0x000000ff
|
||||
|
@ -200,6 +200,7 @@ void lapic_create(u_int apic_id, int boot_cpu);
|
||||
void lapic_disable(void);
|
||||
void lapic_dump(const char *str);
|
||||
void lapic_eoi(void);
|
||||
u_int lapic_error(void);
|
||||
int lapic_id(void);
|
||||
void lapic_init(vm_paddr_t addr);
|
||||
int lapic_intr_pending(u_int vector);
|
||||
|
@ -301,6 +301,7 @@ lapic_setup(int boot)
|
||||
/* Program LINT[01] LVT entries. */
|
||||
lapic->lvt_lint0 = lvt_mode(la, LVT_LINT0, lapic->lvt_lint0);
|
||||
lapic->lvt_lint1 = lvt_mode(la, LVT_LINT1, lapic->lvt_lint1);
|
||||
|
||||
#ifdef HWPMC_HOOKS
|
||||
/* Program the PMC LVT entry if present. */
|
||||
if (maxlvt >= LVT_PMC)
|
||||
@ -646,6 +647,18 @@ lapic_eoi(void)
|
||||
lapic->eoi = 0;
|
||||
}
|
||||
|
||||
/*
|
||||
* Read the contents of the error status register. We have to write
|
||||
* to the register first before reading from it.
|
||||
*/
|
||||
u_int
|
||||
lapic_error(void)
|
||||
{
|
||||
|
||||
lapic->esr = 0;
|
||||
return (lapic->esr);
|
||||
}
|
||||
|
||||
void
|
||||
lapic_handle_intr(int vector, struct trapframe *frame)
|
||||
{
|
||||
|
@ -260,6 +260,14 @@ typedef struct IOAPIC ioapic_t;
|
||||
# define APIC_TPR_INT 0x000000f0
|
||||
# define APIC_TPR_SUB 0x0000000f
|
||||
|
||||
/* fields in ESR */
|
||||
#define APIC_ESR_SEND_CS_ERROR 0x00000001
|
||||
#define APIC_ESR_RECEIVE_CS_ERROR 0x00000002
|
||||
#define APIC_ESR_SEND_ACCEPT 0x00000004
|
||||
#define APIC_ESR_RECEIVE_ACCEPT 0x00000008
|
||||
#define APIC_ESR_SEND_ILLEGAL_VECTOR 0x00000020
|
||||
#define APIC_ESR_RECEIVE_ILLEGAL_VECTOR 0x00000040
|
||||
#define APIC_ESR_ILLEGAL_REGISTER 0x00000080
|
||||
|
||||
/* fields in ICR_LOW */
|
||||
#define APIC_VECTOR_MASK 0x000000ff
|
||||
|
@ -211,6 +211,7 @@ void lapic_create(u_int apic_id, int boot_cpu);
|
||||
void lapic_disable(void);
|
||||
void lapic_dump(const char *str);
|
||||
void lapic_eoi(void);
|
||||
u_int lapic_error(void);
|
||||
int lapic_id(void);
|
||||
void lapic_init(vm_paddr_t addr);
|
||||
int lapic_intr_pending(u_int vector);
|
||||
|
Loading…
x
Reference in New Issue
Block a user