Add a nice little KIDT_ACCESS structure for setting IDT entries in a pretty way Modified: trunk/reactos/hal/halx86/mp/apic.c Modified: trunk/reactos/include/ndk/ketypes.h _____
Modified: trunk/reactos/hal/halx86/mp/apic.c --- trunk/reactos/hal/halx86/mp/apic.c 2005-06-29 19:05:46 UTC (rev 16328) +++ trunk/reactos/hal/halx86/mp/apic.c 2005-06-29 19:06:28 UTC (rev 16329) @@ -906,11 +906,19 @@
SetInterruptGate(ULONG index, ULONG address) { KIDTENTRY *idt; + KIDT_ACCESS Access;
+ /* Set the IDT Access Bits */ + Access.Reserved = 0; + Access.Present = 1; + Access.Dpl = 0; /* Kernel-Mode */ + Access.SystemSegmentFlag = 0; + Access.SegmentType = I386_INTERRUPT_GATE; + idt = (KIDTENTRY*)((ULONG)KeGetCurrentKPCR()->IDT + index * sizeof(KIDTENTRY)); idt->Offset = address & 0xffff; idt->Selector = KERNEL_CS; - idt->Access = 0x8e00; + idt->Access = Access.Value; idt->ExtendedOffset = address >> 16; }
_____
Modified: trunk/reactos/include/ndk/ketypes.h --- trunk/reactos/include/ndk/ketypes.h 2005-06-29 19:05:46 UTC (rev 16328) +++ trunk/reactos/include/ndk/ketypes.h 2005-06-29 19:06:28 UTC (rev 16329) @@ -23,6 +23,13 @@
#define THREAD_WAIT_OBJECTS 4
+/* X86 80386 Segment Types */ +#define I386_TSS 0x9 +#define I386_ACTIVE_TSS 0xB +#define I386_CALL_GATE 0xC +#define I386_INTERRUPT_GATE 0xE +#define I386_TRAP_GATE 0xF + /* EXPORTED DATA *************************************************************/ extern CHAR NTOSAPI KeNumberProcessors; extern LOADER_PARAMETER_BLOCK NTOSAPI KeLoaderBlock; @@ -226,6 +233,22 @@ } HighWord; } KGDTENTRY, *PKGDTENTRY;
+typedef struct _KIDT_ACCESS +{ + union + { + struct + { + UCHAR Reserved; + UCHAR SegmentType:4; + UCHAR SystemSegmentFlag:1; + UCHAR Dpl:2; + UCHAR Present:1; + }; + USHORT Value; + }; +} KIDT_ACCESS, *PKIDT_ACCESS; + typedef struct _KIDTENTRY { USHORT Offset;