Reverted the removal of configure_idt_entry()
Commit 227cc19890
"add alpha version of x64 support"
removed configure_idt_entry(), but this is used within the
lguest branch.
This commit is contained in:
parent
49eb099b80
commit
ecb3fb5af2
2 changed files with 25 additions and 13 deletions
|
@ -119,6 +119,16 @@ void idt_install(void);
|
||||||
void idt_set_gate(unsigned char num, size_t base, unsigned short sel,
|
void idt_set_gate(unsigned char num, size_t base, unsigned short sel,
|
||||||
unsigned char flags);
|
unsigned char flags);
|
||||||
|
|
||||||
|
/** @brief Configures and returns a IDT entry with chosen attributes
|
||||||
|
*
|
||||||
|
* Just feed this function with base, selector and the flags
|
||||||
|
* you have seen in idt.h
|
||||||
|
*
|
||||||
|
* @return a preconfigured idt descriptor
|
||||||
|
*/
|
||||||
|
void configure_idt_entry(idt_entry_t *dest_entry, size_t base,
|
||||||
|
unsigned short sel, unsigned char flags);
|
||||||
|
|
||||||
#ifdef __cplusplus
|
#ifdef __cplusplus
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
|
@ -46,6 +46,20 @@ static idt_entry_t idt[256] = {[0 ... 255] = {0, 0, 0, 0, 0}};
|
||||||
#endif
|
#endif
|
||||||
static idt_ptr_t idtp;
|
static idt_ptr_t idtp;
|
||||||
|
|
||||||
|
void configure_idt_entry(idt_entry_t *dest_entry, size_t base,
|
||||||
|
unsigned short sel, unsigned char flags)
|
||||||
|
{
|
||||||
|
/* The interrupt routine's base address */
|
||||||
|
dest_entry->base_lo = (base & 0xFFFF);
|
||||||
|
dest_entry->base_hi = (base >> 16) & 0xFFFF;
|
||||||
|
|
||||||
|
/* The segment or 'selector' that this IDT entry will use
|
||||||
|
* is set here, along with any access flags */
|
||||||
|
dest_entry->sel = sel;
|
||||||
|
dest_entry->always0 = 0;
|
||||||
|
dest_entry->flags = flags;
|
||||||
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Use this function to set an entry in the IDT. Alot simpler
|
* Use this function to set an entry in the IDT. Alot simpler
|
||||||
* than twiddling with the GDT ;)
|
* than twiddling with the GDT ;)
|
||||||
|
@ -53,19 +67,7 @@ static idt_ptr_t idtp;
|
||||||
void idt_set_gate(unsigned char num, size_t base, unsigned short sel,
|
void idt_set_gate(unsigned char num, size_t base, unsigned short sel,
|
||||||
unsigned char flags)
|
unsigned char flags)
|
||||||
{
|
{
|
||||||
/* The interrupt routine's base address */
|
configure_idt_entry(&idt[num], base, sel, flags);
|
||||||
idt[num].base_lo = (base & 0xFFFF);
|
|
||||||
idt[num].base_hi = (base >> 16) & 0xFFFF;
|
|
||||||
#ifdef CONFIG_X86_64
|
|
||||||
idt[num].base_hi64 = (base >> 32) & 0xFFFFFFFF;
|
|
||||||
idt[num].reserved = 0x0;
|
|
||||||
#endif
|
|
||||||
|
|
||||||
/* The segment or 'selector' that this IDT entry will use
|
|
||||||
* is set here, along with any access flags */
|
|
||||||
idt[num].sel = sel;
|
|
||||||
idt[num].always0 = 0x0;
|
|
||||||
idt[num].flags = flags;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
extern void isrsyscall(void);
|
extern void isrsyscall(void);
|
||||||
|
|
Loading…
Add table
Reference in a new issue