Refactor APIC delivery mode handling and unify naming
All checks were successful
Builds / ExectOS (amd64, debug) (push) Successful in 1m15s
Builds / ExectOS (amd64, release) (push) Successful in 25s
Builds / ExectOS (i686, release) (push) Successful in 26s
Builds / ExectOS (i686, debug) (push) Successful in 1m24s

This commit is contained in:
Aiken Harris 2025-09-01 19:54:12 +02:00
parent d45cc5ffe5
commit 6ee7243e04
Signed by: harraiken
GPG Key ID: C40F06CB7493C1F5
5 changed files with 68 additions and 88 deletions

View File

@ -42,16 +42,6 @@
#define APIC_DF_FLAT 0xFFFFFFFF #define APIC_DF_FLAT 0xFFFFFFFF
#define APIC_DF_CLUSTER 0x0FFFFFFF #define APIC_DF_CLUSTER 0x0FFFFFFF
/* APIC delivery modes */
#define APIC_DM_FIXED 0x0
#define APIC_DM_LOWPRIO 0x1
#define APIC_DM_SMI 0x2
#define APIC_DM_REMOTE 0x3
#define APIC_DM_NMI 0x4
#define APIC_DM_INIT 0x5
#define APIC_DM_STARTUP 0x6
#define APIC_DM_EXTINT 0x7
/* APIC trigger modes */ /* APIC trigger modes */
#define APIC_TGM_EDGE 0 #define APIC_TGM_EDGE 0
#define APIC_TGM_LEVEL 1 #define APIC_TGM_LEVEL 1
@ -79,6 +69,35 @@
/* Initial stall factor */ /* Initial stall factor */
#define INITIAL_STALL_FACTOR 100 #define INITIAL_STALL_FACTOR 100
/* APIC delivery mode enumeration list */
typedef enum _APIC_DM
{
APIC_DM_FIXED,
APIC_DM_LOWPRIO,
APIC_DM_SMI,
APIC_DM_REMOTE,
APIC_DM_NMI,
APIC_DM_INIT,
APIC_DM_STARTUP,
APIC_DM_EXTINT,
} APIC_DM, *PAPIC_DM;
/* APIC destination short-hand enumeration list */
typedef enum _APIC_DSH
{
APIC_DSH_Destination,
APIC_DSH_Self,
APIC_DSH_AllIncludingSelf,
APIC_DSH_AllExclusingSelf
} APIC_DSH, *PAPIC_DSH;
/* APIC mode list */
typedef enum _APIC_MODE
{
APIC_MODE_COMPAT,
APIC_MODE_X2APIC
} APIC_MODE, *PAPIC_MODE;
/* APIC Register Address Map */ /* APIC Register Address Map */
typedef enum _APIC_REGISTER typedef enum _APIC_REGISTER
{ {
@ -116,35 +135,6 @@ typedef enum _APIC_REGISTER
APIC_EXT3LVTR = 0x53 /* Extended Interrupt 3 Local Vector Table */ APIC_EXT3LVTR = 0x53 /* Extended Interrupt 3 Local Vector Table */
} APIC_REGISTER, *PAPIC_REGISTER; } APIC_REGISTER, *PAPIC_REGISTER;
/* APIC mode list */
typedef enum _APIC_MODE
{
APIC_MODE_COMPAT,
APIC_MODE_X2APIC
} APIC_MODE, *PAPIC_MODE;
/* APIC destination short-hand enumeration list */
typedef enum _APIC_DSH
{
APIC_DSH_Destination,
APIC_DSH_Self,
APIC_DSH_AllIncludingSelf,
APIC_DSH_AllExclusingSelf
} APIC_DSH, *PAPIC_DSH;
/* APIC message type enumeration list */
typedef enum _APIC_MT
{
APIC_MT_Fixed,
APIC_MT_LowestPriority,
APIC_MT_SMI,
APIC_MT_RemoteRead,
APIC_MT_NMI,
APIC_MT_INIT,
APIC_MT_Startup,
APIC_MT_ExtInt,
} APIC_MT, *PAPIC_MT;
/* I8259 PIC interrupt mode enumeration list */ /* I8259 PIC interrupt mode enumeration list */
typedef enum _PIC_I8259_ICW1_INTERRUPT_MODE typedef enum _PIC_I8259_ICW1_INTERRUPT_MODE
{ {
@ -217,7 +207,7 @@ typedef union _APIC_COMMAND_REGISTER
struct struct
{ {
ULONGLONG Vector:8; ULONGLONG Vector:8;
ULONGLONG MessageType:3; ULONGLONG DeliveryMode:3;
ULONGLONG DestinationMode:1; ULONGLONG DestinationMode:1;
ULONGLONG DeliveryStatus:1; ULONGLONG DeliveryStatus:1;
ULONGLONG ReservedMBZ:1; ULONGLONG ReservedMBZ:1;
@ -237,7 +227,7 @@ typedef union _APIC_LVT_REGISTER
struct struct
{ {
ULONG Vector:8; ULONG Vector:8;
ULONG MessageType:3; ULONG DeliveryMode:3;
ULONG Reserved1:1; ULONG Reserved1:1;
ULONG DeliveryStatus:1; ULONG DeliveryStatus:1;
ULONG Reserved2:1; ULONG Reserved2:1;

View File

@ -13,9 +13,9 @@
/* Architecture-specific enumeration lists forward references */ /* Architecture-specific enumeration lists forward references */
typedef enum _APIC_DM APIC_DM, *PAPIC_DM;
typedef enum _APIC_DSH APIC_DSH, *PAPIC_DSH; typedef enum _APIC_DSH APIC_DSH, *PAPIC_DSH;
typedef enum _APIC_MODE APIC_MODE, *PAPIC_MODE; typedef enum _APIC_MODE APIC_MODE, *PAPIC_MODE;
typedef enum _APIC_MT APIC_MT, *PAPIC_MT;
typedef enum _APIC_REGISTER APIC_REGISTER, *PAPIC_REGISTER; typedef enum _APIC_REGISTER APIC_REGISTER, *PAPIC_REGISTER;
typedef enum _CPU_VENDOR CPU_VENDOR, *PCPU_VENDOR; typedef enum _CPU_VENDOR CPU_VENDOR, *PCPU_VENDOR;
typedef enum _CPUID_FEATURES_EXTENDED CPUID_FEATURES_EXTENDED, *PCPUID_FEATURES_EXTENDED; typedef enum _CPUID_FEATURES_EXTENDED CPUID_FEATURES_EXTENDED, *PCPUID_FEATURES_EXTENDED;

View File

@ -47,16 +47,6 @@
#define APIC_DF_FLAT 0xFFFFFFFF #define APIC_DF_FLAT 0xFFFFFFFF
#define APIC_DF_CLUSTER 0x0FFFFFFF #define APIC_DF_CLUSTER 0x0FFFFFFF
/* APIC delivery modes */
#define APIC_DM_FIXED 0x0
#define APIC_DM_LOWPRIO 0x1
#define APIC_DM_SMI 0x2
#define APIC_DM_REMOTE 0x3
#define APIC_DM_NMI 0x4
#define APIC_DM_INIT 0x5
#define APIC_DM_STARTUP 0x6
#define APIC_DM_EXTINT 0x7
/* APIC trigger modes */ /* APIC trigger modes */
#define APIC_TGM_EDGE 0 #define APIC_TGM_EDGE 0
#define APIC_TGM_LEVEL 1 #define APIC_TGM_LEVEL 1
@ -86,6 +76,35 @@
/* Initial stall factor */ /* Initial stall factor */
#define INITIAL_STALL_FACTOR 100 #define INITIAL_STALL_FACTOR 100
/* APIC delivery mode enumeration list */
typedef enum _APIC_DM
{
APIC_DM_FIXED,
APIC_DM_LOWPRIO,
APIC_DM_SMI,
APIC_DM_REMOTE,
APIC_DM_NMI,
APIC_DM_INIT,
APIC_DM_STARTUP,
APIC_DM_EXTINT,
} APIC_DM, *PAPIC_DM;
/* APIC destination short-hand enumeration list */
typedef enum _APIC_DSH
{
APIC_DSH_Destination,
APIC_DSH_Self,
APIC_DSH_AllIncludingSelf,
APIC_DSH_AllExclusingSelf
} APIC_DSH, *PAPIC_DSH;
/* APIC mode list */
typedef enum _APIC_MODE
{
APIC_MODE_COMPAT,
APIC_MODE_X2APIC
} APIC_MODE, *PAPIC_MODE;
/* APIC Register Address Map */ /* APIC Register Address Map */
typedef enum _APIC_REGISTER typedef enum _APIC_REGISTER
{ {
@ -123,35 +142,6 @@ typedef enum _APIC_REGISTER
APIC_EXT3LVTR = 0x53 /* Extended Interrupt 3 Local Vector Table */ APIC_EXT3LVTR = 0x53 /* Extended Interrupt 3 Local Vector Table */
} APIC_REGISTER, *PAPIC_REGISTER; } APIC_REGISTER, *PAPIC_REGISTER;
/* APIC mode list */
typedef enum _APIC_MODE
{
APIC_MODE_COMPAT,
APIC_MODE_X2APIC
} APIC_MODE, *PAPIC_MODE;
/* APIC destination short-hand enumeration list */
typedef enum _APIC_DSH
{
APIC_DSH_Destination,
APIC_DSH_Self,
APIC_DSH_AllIncludingSelf,
APIC_DSH_AllExclusingSelf
} APIC_DSH, *PAPIC_DSH;
/* APIC message type enumeration list */
typedef enum _APIC_MT
{
APIC_MT_Fixed,
APIC_MT_LowestPriority,
APIC_MT_SMI,
APIC_MT_RemoteRead,
APIC_MT_NMI,
APIC_MT_INIT,
APIC_MT_Startup,
APIC_MT_ExtInt,
} APIC_MT, *PAPIC_MT;
/* I8259 PIC interrupt mode enumeration list */ /* I8259 PIC interrupt mode enumeration list */
typedef enum _PIC_I8259_ICW1_INTERRUPT_MODE typedef enum _PIC_I8259_ICW1_INTERRUPT_MODE
{ {
@ -224,7 +214,7 @@ typedef union _APIC_COMMAND_REGISTER
struct struct
{ {
ULONGLONG Vector:8; ULONGLONG Vector:8;
ULONGLONG MessageType:3; ULONGLONG DeliveryMode:3;
ULONGLONG DestinationMode:1; ULONGLONG DestinationMode:1;
ULONGLONG DeliveryStatus:1; ULONGLONG DeliveryStatus:1;
ULONGLONG ReservedMBZ:1; ULONGLONG ReservedMBZ:1;
@ -244,7 +234,7 @@ typedef union _APIC_LVT_REGISTER
struct struct
{ {
ULONG Vector:8; ULONG Vector:8;
ULONG MessageType:3; ULONG DeliveryMode:3;
ULONG Reserved1:1; ULONG Reserved1:1;
ULONG DeliveryStatus:1; ULONG DeliveryStatus:1;
ULONG Reserved2:1; ULONG Reserved2:1;

View File

@ -13,9 +13,9 @@
/* Architecture-specific enumeration lists forward references */ /* Architecture-specific enumeration lists forward references */
typedef enum _APIC_DM APIC_DM, *PAPIC_DM;
typedef enum _APIC_DSH APIC_DSH, *PAPIC_DSH; typedef enum _APIC_DSH APIC_DSH, *PAPIC_DSH;
typedef enum _APIC_MODE APIC_MODE, *PAPIC_MODE; typedef enum _APIC_MODE APIC_MODE, *PAPIC_MODE;
typedef enum _APIC_MT APIC_MT, *PAPIC_MT;
typedef enum _APIC_REGISTER APIC_REGISTER, *PAPIC_REGISTER; typedef enum _APIC_REGISTER APIC_REGISTER, *PAPIC_REGISTER;
typedef enum _CPU_VENDOR CPU_VENDOR, *PCPU_VENDOR; typedef enum _CPU_VENDOR CPU_VENDOR, *PCPU_VENDOR;
typedef enum _CPUID_FEATURES_EXTENDED CPUID_FEATURES_EXTENDED, *PCPUID_FEATURES_EXTENDED; typedef enum _CPUID_FEATURES_EXTENDED CPUID_FEATURES_EXTENDED, *PCPUID_FEATURES_EXTENDED;

View File

@ -243,7 +243,7 @@ HlpInitializeApic(VOID)
/* Program the APIC timer for periodic mode */ /* Program the APIC timer for periodic mode */
LvtRegister.Long = 0; LvtRegister.Long = 0;
LvtRegister.Mask = 1; LvtRegister.Mask = 1;
LvtRegister.MessageType = APIC_DM_FIXED; LvtRegister.DeliveryMode = APIC_DM_FIXED;
LvtRegister.TimerMode = 1; LvtRegister.TimerMode = 1;
LvtRegister.TriggerMode = APIC_TGM_EDGE; LvtRegister.TriggerMode = APIC_TGM_EDGE;
LvtRegister.Vector = APIC_VECTOR_PROFILE; LvtRegister.Vector = APIC_VECTOR_PROFILE;
@ -252,7 +252,7 @@ HlpInitializeApic(VOID)
/* Configure the performance counter overflow */ /* Configure the performance counter overflow */
LvtRegister.Long = 0; LvtRegister.Long = 0;
LvtRegister.Mask = 0; LvtRegister.Mask = 0;
LvtRegister.MessageType = APIC_DM_FIXED; LvtRegister.DeliveryMode = APIC_DM_FIXED;
LvtRegister.TimerMode = 0; LvtRegister.TimerMode = 0;
LvtRegister.TriggerMode = APIC_TGM_EDGE; LvtRegister.TriggerMode = APIC_TGM_EDGE;
LvtRegister.Vector = APIC_VECTOR_PERF; LvtRegister.Vector = APIC_VECTOR_PERF;
@ -261,7 +261,7 @@ HlpInitializeApic(VOID)
/* Configure the LINT0 pin */ /* Configure the LINT0 pin */
LvtRegister.Long = 0; LvtRegister.Long = 0;
LvtRegister.Mask = 1; LvtRegister.Mask = 1;
LvtRegister.MessageType = APIC_DM_FIXED; LvtRegister.DeliveryMode = APIC_DM_FIXED;
LvtRegister.TimerMode = 0; LvtRegister.TimerMode = 0;
LvtRegister.TriggerMode = APIC_TGM_EDGE; LvtRegister.TriggerMode = APIC_TGM_EDGE;
LvtRegister.Vector = APIC_VECTOR_SPURIOUS; LvtRegister.Vector = APIC_VECTOR_SPURIOUS;
@ -270,7 +270,7 @@ HlpInitializeApic(VOID)
/* Configure the LINT1 pin */ /* Configure the LINT1 pin */
LvtRegister.Long = 0; LvtRegister.Long = 0;
LvtRegister.Mask = 0; LvtRegister.Mask = 0;
LvtRegister.MessageType = APIC_DM_NMI; LvtRegister.DeliveryMode = APIC_DM_NMI;
LvtRegister.TimerMode = 0; LvtRegister.TimerMode = 0;
LvtRegister.TriggerMode = APIC_TGM_EDGE; LvtRegister.TriggerMode = APIC_TGM_EDGE;
LvtRegister.Vector = APIC_VECTOR_NMI; LvtRegister.Vector = APIC_VECTOR_NMI;