idt stuff
This commit is contained in:
parent
5d9324ab68
commit
0614070cfc
|
@ -31,6 +31,11 @@
|
||||||
|
|
||||||
// -------------------------------------------------------------------------- //
|
// -------------------------------------------------------------------------- //
|
||||||
|
|
||||||
|
typedef struct IdtDescriptor_t IdtDescriptor_t;
|
||||||
|
typedef struct IdtEntry_t IdtEntry_t;
|
||||||
|
|
||||||
|
// -------------------------------------------------------------------------- //
|
||||||
|
//
|
||||||
// CPU features masks
|
// CPU features masks
|
||||||
enum {
|
enum {
|
||||||
FEAT_ECX_SSE3 = 1 << 0,
|
FEAT_ECX_SSE3 = 1 << 0,
|
||||||
|
@ -92,6 +97,23 @@ enum {
|
||||||
FEAT_EDX_PBE = 1 << 31
|
FEAT_EDX_PBE = 1 << 31
|
||||||
};
|
};
|
||||||
|
|
||||||
|
typedef struct IdtDescriptor_t
|
||||||
|
{
|
||||||
|
ushort limit;
|
||||||
|
ulong base;
|
||||||
|
} __attribute__((packed));
|
||||||
|
|
||||||
|
typedef struct IdtEntry_t
|
||||||
|
{
|
||||||
|
ushort baseLow;
|
||||||
|
ushort selector;
|
||||||
|
uchar reservedIst;
|
||||||
|
uchar flags;
|
||||||
|
ushort baseMiddle;
|
||||||
|
uint baseHigh;
|
||||||
|
uint reserved;
|
||||||
|
} __attribute__((packed));
|
||||||
|
|
||||||
// -------------------------------------------------------------------------- //
|
// -------------------------------------------------------------------------- //
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
|
|
@ -23,16 +23,20 @@
|
||||||
//----------------------------------------------------------------------------//
|
//----------------------------------------------------------------------------//
|
||||||
|
|
||||||
|
|
||||||
|
idtp
|
||||||
|
|
||||||
//
|
//
|
||||||
// Registers the new idt in the idtr register.
|
// Registers the new idt in the idtr register.
|
||||||
//
|
//
|
||||||
static inline void lidt(void* idtAddr, ushort size)
|
static inline void lidt(IdtDescriptor_t idtDesc)
|
||||||
{
|
{
|
||||||
// The IDTR register structure that will be sent
|
asm volatile( "lidt %0" : : "m"(idtDesc) );
|
||||||
struct {
|
}
|
||||||
ushort length;
|
|
||||||
void* base;
|
//
|
||||||
} __attribute__((packed)) IDTR = { size, idtAddr };
|
// Initializes the IDT
|
||||||
|
//
|
||||||
asm volatile( "lidt %0" : : "m"(IDTR) );
|
error_t CpuInitIdt(void)
|
||||||
|
{
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue