本文整理汇总了C++中idt_set_gate函数的典型用法代码示例。如果您正苦于以下问题:C++ idt_set_gate函数的具体用法?C++ idt_set_gate怎么用?C++ idt_set_gate使用的例子?那么恭喜您, 这里精选的函数代码示例或许可以为您提供帮助。
在下文中一共展示了idt_set_gate函数的15个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C++代码示例。
示例1: install_irq
void install_irq()
{
//reprogram the PICs
init_PIC();
//install the appropriate ISRs into the IDT
idt_set_gate(32, (unsigned)irq0, 0x08, 0x8E);
idt_set_gate(33, (unsigned)irq1, 0x08, 0x8E);
idt_set_gate(34, (unsigned)irq2, 0x08, 0x8E);
//turn on interupts!
__asm__ __volatile__("sti");
}
示例2: idt_install
void idt_install()
{
idtp.size = sizeof(idt);
idtp.addr = (uint64_t)idt;
idt_set_gate(0, (uint64_t)isr0, 0x08, 0x8E);
idt_set_gate(14, (uint64_t)isr14, 0x08, 0x8E);
idt_set_gate(32, (uint64_t)irq0, 0x08, 0x8E);
idt_set_gate(33, (uint64_t)irq1, 0x08, 0x8E);
idt_set_gate(128, (uint64_t)isr80, 0x08, 0xEE);
idt_load(&idtp);
}
示例3: idt_init
void idt_init(void){
init_interrupt_chip();
idt_ptr.limit = sizeof(idt_entry_t) * INTERRUPT_MAX - 1;
idt_ptr.base = (uint32)&idt_entries;
for(uint32 i = 0;i < 48;i++){
idt_set_gate(i,(uint32)isr_irq_func[i],0x08,0x8E);
}
idt_set_gate(128,(uint32)isr128,0x08,0xEF);
idt_flush((uint32)&idt_ptr);
}
示例4: idt_init
/* Remaps the IRQs. Sets up the IDT. */
void idt_init() {
memset((uint8_t*)&idt_entries, 0, sizeof(idt_entry_t) * 256);
//Remap the IRQ table
outb(0x20, 0x11);
outb(0xA0, 0x11);
outb(0x21, 0x20);
outb(0xA1, 0x28);
outb(0x21, 0x04);
outb(0xA1, 0x02);
outb(0x21, 0x01);
outb(0xA1, 0x01);
outb(0x21, 0x0);
outb(0xA1, 0x0);
for (int i = 0; gates[i].type != 0; i++) {
idt_set_gate(gates[i].num, gates[i].fun, gates[i].type);
}
idt_ptr.limit = (sizeof(idt_entry_t) * 256) - 1;
idt_ptr.base = (uint32_t)&idt_entries;
asm volatile ("lidt %0"::"m"(idt_ptr):"memory");
// Some setup calls that come later on are not preemptible,
// so we wait until then to enable interrupts.
}
示例5: load_irq
void load_irq()
{
outb(0x20, 0x11);
outb(0xA0, 0x11);
outb(0x21, 0x20);
outb(0xA1, 0x28);
outb(0x21, 0x04);
outb(0xA1, 0x02);
outb(0x21, 0x01);
outb(0xA1, 0x01);
outb(0x21, 0x0);
outb(0xA1, 0x0);
idt_set_gate(32,8, 0, 0x8E, 0, ((uint64_t)isr32));
idt_set_gate(33,8, 0, 0x8E, 0, ((uint64_t)isr33));
__asm__("sti");
}
示例6: init_idt
static void init_idt()
{
memset(&idt_entries, 0, sizeof(idt_entry_t ) * 256);
idt_ptr.limit = sizeof(idt_entry_t) * 256 - 1;
idt_ptr.base = (uint64_t)&idt_entries;
idt_set_gate(0,8, 0, 0x0e, 0, ((uint64_t)&isr0));
_x86_64_asm_igdt(&idt_ptr);
};
示例7: init_idt
// 初始化中断描述符表
void init_idt(void)
{
init_interrupt_chip();
idt_ptr.limit = sizeof(idt_entry_t) * INTERRUPT_MAX - 1;
idt_ptr.base = (uint32_t)&idt_entries;
// 0~31: 用于 CPU 的中断处理
// 32~47: Intel 保留
for (uint32_t i = 0; i < 48; ++i) {
idt_set_gate(i, (uint32_t)isr_irq_func[i], 0x08, 0x8E);
}
// 128 (0x80) 将来用于实现系统调用
idt_set_gate(128, (uint32_t)isr128, 0x08, 0xEF);
// 更新设置中断描述符表
idt_flush((uint32_t)&idt_ptr);
}
示例8: idt_install
void idt_install(){
idtp.limit = sizeof(idt) - 1;
idtp.base = (unsigned int)idt;
char * _s = (char*)idt;
int n = sizeof(idt);
while (n > 0){
n -= 1;
_s[n] = (char)0;
}
idt_load();
idt_set_gate(0,(int)__isr0,0x8,0x8e);
}
示例9: pic_install
void pic_install(){
outb(PIC_1_CTRL,0x11); //icw1_init
outb(PIC_2_CTRL,0x11); //icw1_init
outb(PIC_1_DATA,32); //icw2 map pic_1_data to offset1(32);
outb(PIC_2_DATA,40); //icw2 map pic_2_data to offset2(40);
outb(PIC_1_DATA,4); //set bit 0x00000100, use line 2 connect to slave
outb(PIC_2_DATA,2); //set bit 0x00000010, tell slave that master use line 2
outb(PIC_1_DATA,1); //8086 mode
outb(PIC_2_DATA,1); //8086 mode
outb(PIC_1_DATA,0x0); //clear mask
outb(PIC_2_DATA,0x0); //clear mask
set_timer(CLOCK_FREQ);
irq_install_handler(0,timer_handler);
idt_set_gate(32, (unsigned)__irq0, 0x08, 0x8e);
irq_install_handler(1,keyboard_handler);
idt_set_gate(33, (unsigned)__irq1, 0x08, 0x8e);
}
示例10: syscalls_init
/* Initialize the syscall manager */
void syscalls_init()
{
/* Get the current CPU data area */
cpu_t *cpu = cpu_data_area(CPU_CURRENT);
/* Software interrupts always work */
idt_set_gate(0x80, (uint32_t) &software_int_entry, IDT_GATE_INT, true);
/* SYSENTER is supported */
if (cpu->features[0] & CPUID_FEAT_EDX_SEP)
{
/* Set the SYSENTER support flag */
sysenter = true;
/* Set the kernel ESP value */
uint32_t low = 0, high = 0;
wrmsr(IA32_MSR_SYSENTER_ESP, low, high);
/* Set the kernel CS value */
low = KERNEL_CS;
wrmsr(IA32_MSR_SYSENTER_CS, low, high);
/* Set the kernel EIP value */
low = (uint32_t) &sysenter_entry;
wrmsr(IA32_MSR_SYSENTER_EIP, low, high);
}
/* SYSCALL is supported */
if (cpu->ext_features[0] & CPUID_FEAT_EDX_SEP)
{
/* Set the SYSCALL support flag */
syscall = true;
/* Set the kernel EFLAGS mask value */
uint32_t low = 0, high = 0;
wrmsr(AMD64_MSR_SFMASK, low, high);
/* Set the kernel EIP and segment registers */
low = (uint32_t) &syscall_entry;
high = (KERNEL_CS | (USER_CS << 16));
wrmsr(AMD64_MSR_STAR, low, high);
}
}
示例11: idt_install
/* Installs the IDT */
void idt_install()
{
memset(&idt, 0, sizeof(struct idt_entry) * 256);
idtp.limit = (sizeof (struct idt_entry) * 256) - 1;
idtp.base = (uint64_t)&idt;
_x86_64_asm_igdt(&idtp);
idt_set_gate(0, (uint64_t)&x86_64_isr_vector0, 0x08, 0x8e);
idt_set_gate(13, (uint64_t)&x86_64_isr_vector13, 0x08, 0x8e); //gpf handler
idt_set_gate(14, (uint64_t)&x86_64_isr_vector14, 0x08, 0x8e); //pf handleR
idt_set_gate(32, (uint64_t)&x86_64_isr_vector1, 0x08, 0x8e); //timer
idt_set_gate(33, (uint64_t)&x86_64_isr_vector2, 0x08, 0x8e); //key board
idt_set_gate(128, (uint64_t)&x86_64_isr_vector3, 0x08, 0x8e); /*putchar, exit, malloc, getpid, getppid etc syscall */
idt_set_gate(129, (uint64_t)&x86_64_isr_vector4, 0x08, 0x8e);
//_x86_64_asm_igdt(&idtp);
irq_remap();
}
示例12: init_idt
void init_idt()
{
idtPtr.limit = (sizeof(struct idt_entry) * MAX_IDT); //- 1;
idtPtr.base = (uint64_t) idtEntry;
memset(&idtEntry,0,(sizeof(struct idt_entry) * MAX_IDT));
//isr
idt_set_gate(0,(uint64_t)isr0,0x08, 0x8E);
idt_set_gate(13,(uint64_t)isr13,0x08, 0x8E);
idt_set_gate(14,(uint64_t)isr14,0x08, 0x8E);
idt_set_gate(128,(uint64_t)isr128,0x08, 0xEE);
//irq
idt_set_gate(32,(uint64_t)irq0,0x08,0x8E);
idt_set_gate(33,(uint64_t)irq1,0x08,0x8E);
_x86_64_asm_lidt(&idtPtr);
}
示例13: init_idt
static void init_idt(void){
_idt_ptr.limit = sizeof(idt_entry_t) * 256 -1;
_idt_ptr.base = (uint32_t)&_idt;
memset(&_idt, 0, sizeof(idt_entry_t)*256);
idt_set_gate( 0, (uint32_t)__isr0 , 0x08, 0x8E);
idt_set_gate( 1, (uint32_t)__isr1 , 0x08, 0x8E);
idt_set_gate( 2, (uint32_t)__isr2 , 0x08, 0x8E);
idt_set_gate( 3, (uint32_t)__isr3 , 0x08, 0x8E);
idt_set_gate( 4, (uint32_t)__isr4 , 0x08, 0x8E);
idt_set_gate( 5, (uint32_t)__isr5 , 0x08, 0x8E);
idt_set_gate( 6, (uint32_t)__isr6 , 0x08, 0x8E);
idt_set_gate( 7, (uint32_t)__isr7 , 0x08, 0x8E);
idt_set_gate( 8, (uint32_t)__isr8 , 0x08, 0x8E);
idt_set_gate( 9, (uint32_t)__isr9 , 0x08, 0x8E);
idt_set_gate(10, (uint32_t)__isr10, 0x08, 0x8E);
idt_set_gate(11, (uint32_t)__isr11, 0x08, 0x8E);
idt_set_gate(12, (uint32_t)__isr12, 0x08, 0x8E);
idt_set_gate(13, (uint32_t)__isr13, 0x08, 0x8E);
idt_set_gate(14, (uint32_t)__isr14, 0x08, 0x8E);
idt_set_gate(15, (uint32_t)__isr15, 0x08, 0x8E);
idt_set_gate(16, (uint32_t)__isr16, 0x08, 0x8E);
idt_set_gate(17, (uint32_t)__isr17, 0x08, 0x8E);
idt_set_gate(18, (uint32_t)__isr18, 0x08, 0x8E);
idt_set_gate(19, (uint32_t)__isr19, 0x08, 0x8E);
idt_set_gate(20, (uint32_t)__isr20, 0x08, 0x8E);
idt_set_gate(21, (uint32_t)__isr21, 0x08, 0x8E);
idt_set_gate(22, (uint32_t)__isr22, 0x08, 0x8E);
idt_set_gate(23, (uint32_t)__isr23, 0x08, 0x8E);
idt_set_gate(24, (uint32_t)__isr24, 0x08, 0x8E);
idt_set_gate(25, (uint32_t)__isr25, 0x08, 0x8E);
idt_set_gate(26, (uint32_t)__isr26, 0x08, 0x8E);
idt_set_gate(27, (uint32_t)__isr27, 0x08, 0x8E);
idt_set_gate(28, (uint32_t)__isr28, 0x08, 0x8E);
idt_set_gate(29, (uint32_t)__isr29, 0x08, 0x8E);
idt_set_gate(30, (uint32_t)__isr30, 0x08, 0x8E);
idt_set_gate(31, (uint32_t)__isr31, 0x08, 0x8E);
outb(0x20, 0x11);
outb(0xA0, 0x11);
outb(0x21, 0x20);
outb(0xA1, 0x28);
outb(0x21, 0x04);
outb(0xA1, 0x02);
outb(0x21, 0x01);
outb(0xA1, 0x01);
outb(0x21, 0x0);
outb(0xA1, 0x0);
idt_set_gate(IRQ0, (uint32_t)__irq0, 0x08, 0x8E);
idt_set_gate(IRQ1, (uint32_t)__irq1, 0x08, 0x8E);
idt_set_gate(IRQ2, (uint32_t)__irq2, 0x08, 0x8E);
idt_set_gate(IRQ3, (uint32_t)__irq3, 0x08, 0x8E);
idt_set_gate(IRQ4, (uint32_t)__irq4, 0x08, 0x8E);
idt_set_gate(IRQ5, (uint32_t)__irq5, 0x08, 0x8E);
idt_set_gate(IRQ6, (uint32_t)__irq6, 0x08, 0x8E);
idt_set_gate(IRQ7, (uint32_t)__irq7, 0x08, 0x8E);
idt_set_gate(IRQ8, (uint32_t)__irq8, 0x08, 0x8E);
idt_set_gate(IRQ9, (uint32_t)__irq9, 0x08, 0x8E);
idt_set_gate(IRQ10, (uint32_t)__irq10, 0x08, 0x8E);
idt_set_gate(IRQ11, (uint32_t)__irq11, 0x08, 0x8E);
idt_set_gate(IRQ12, (uint32_t)__irq12, 0x08, 0x8E);
idt_set_gate(IRQ13, (uint32_t)__irq13, 0x08, 0x8E);
idt_set_gate(IRQ14, (uint32_t)__irq14, 0x08, 0x8E);
idt_set_gate(IRQ15, (uint32_t)__irq15, 0x08, 0x8E);
desctab_registerIntHandler(0 , isr0 );
desctab_registerIntHandler(1 , isr1 );
desctab_registerIntHandler(8 , isr8 );
desctab_registerIntHandler(13, isr13);
__flush_idt((uint32_t)&_idt_ptr);
}
示例14: isrs_install
void isrs_install()
{
idt_set_gate(0, (unsigned)isr0, 0x08, 0x8E);
idt_set_gate(1, (unsigned)isr1, 0x08, 0x8E);
idt_set_gate(2, (unsigned)isr2, 0x08, 0x8E);
idt_set_gate(3, (unsigned)isr3, 0x08, 0x8E);
idt_set_gate(4, (unsigned)isr4, 0x08, 0x8E);
idt_set_gate(5, (unsigned)isr5, 0x08, 0x8E);
idt_set_gate(6, (unsigned)isr6, 0x08, 0x8E);
idt_set_gate(7, (unsigned)isr7, 0x08, 0x8E);
idt_set_gate(8, (unsigned)isr8, 0x08, 0x8E);
idt_set_gate(9, (unsigned)isr9, 0x08, 0x8E);
idt_set_gate(10, (unsigned)isr10, 0x08, 0x8E);
idt_set_gate(11, (unsigned)isr11, 0x08, 0x8E);
idt_set_gate(12, (unsigned)isr12, 0x08, 0x8E);
idt_set_gate(13, (unsigned)isr13, 0x08, 0x8E);
idt_set_gate(14, (unsigned)isr14, 0x08, 0x8E);
idt_set_gate(15, (unsigned)isr15, 0x08, 0x8E);
idt_set_gate(16, (unsigned)isr16, 0x08, 0x8E);
idt_set_gate(17, (unsigned)isr17, 0x08, 0x8E);
idt_set_gate(18, (unsigned)isr18, 0x08, 0x8E);
idt_set_gate(19, (unsigned)isr19, 0x08, 0x8E);
idt_set_gate(20, (unsigned)isr20, 0x08, 0x8E);
idt_set_gate(21, (unsigned)isr21, 0x08, 0x8E);
idt_set_gate(22, (unsigned)isr22, 0x08, 0x8E);
idt_set_gate(23, (unsigned)isr23, 0x08, 0x8E);
idt_set_gate(24, (unsigned)isr24, 0x08, 0x8E);
idt_set_gate(25, (unsigned)isr25, 0x08, 0x8E);
idt_set_gate(26, (unsigned)isr26, 0x08, 0x8E);
idt_set_gate(27, (unsigned)isr27, 0x08, 0x8E);
idt_set_gate(28, (unsigned)isr28, 0x08, 0x8E);
idt_set_gate(29, (unsigned)isr29, 0x08, 0x8E);
idt_set_gate(30, (unsigned)isr30, 0x08, 0x8E);
idt_set_gate(31, (unsigned)isr31, 0x08, 0x8E);
}
示例15: isr_install
void isr_install()
{
idt_set_gate(0, (unsigned long)isr0, 0x08, 0x8E);
idt_set_gate(1, (unsigned long)isr1, 0x08, 0x8E);
idt_set_gate(2, (unsigned long)isr2, 0x08, 0x8E);
idt_set_gate(3, (unsigned long)isr3, 0x08, 0x8E);
idt_set_gate(4, (unsigned long)isr4, 0x08, 0x8E);
idt_set_gate(5, (unsigned long)isr5, 0x08, 0x8E);
idt_set_gate(6, (unsigned long)isr6, 0x08, 0x8E);
idt_set_gate(7, (unsigned long)isr7, 0x08, 0x8E);
idt_set_gate(8, (unsigned long)isr8, 0x08, 0x8E);
idt_set_gate(9, (unsigned long)isr9, 0x08, 0x8E);
idt_set_gate(10, (unsigned long)isr10, 0x08, 0x8E);
idt_set_gate(11, (unsigned long)isr11, 0x08, 0x8E);
idt_set_gate(12, (unsigned long)isr12, 0x08, 0x8E);
idt_set_gate(13, (unsigned long)isr13, 0x08, 0x8E);
//Page fault look for handle in paging.c
idt_set_gate(15, (unsigned long)isr15, 0x08, 0x8E);
idt_set_gate(16, (unsigned long)isr16, 0x08, 0x8E);
idt_set_gate(17, (unsigned long)isr17, 0x08, 0x8E);
idt_set_gate(18, (unsigned long)isr18, 0x08, 0x8E);
idt_set_gate(19, (unsigned long)isr19, 0x08, 0x8E);
idt_set_gate(20, (unsigned long)isr20, 0x08, 0x8E);
idt_set_gate(21, (unsigned long)isr21, 0x08, 0x8E);
idt_set_gate(22, (unsigned long)isr22, 0x08, 0x8E);
idt_set_gate(23, (unsigned long)isr23, 0x08, 0x8E);
idt_set_gate(24, (unsigned long)isr24, 0x08, 0x8E);
idt_set_gate(25, (unsigned long)isr25, 0x08, 0x8E);
idt_set_gate(26, (unsigned long)isr26, 0x08, 0x8E);
idt_set_gate(27, (unsigned long)isr27, 0x08, 0x8E);
idt_set_gate(28, (unsigned long)isr28, 0x08, 0x8E);
idt_set_gate(29, (unsigned long)isr29, 0x08, 0x8E);
idt_set_gate(30, (unsigned long)isr30, 0x08, 0x8E);
idt_set_gate(31, (unsigned long)isr31, 0x08, 0x8E);
}