• 设为首页
  • 点击收藏
  • 手机版
    手机扫一扫访问
    迪恩网络手机版
  • 关注官方公众号
    微信扫一扫关注
    迪恩网络公众号

C++ idt_set_gate函数代码示例

原作者: [db:作者] 来自: [db:来源] 收藏 邀请

本文整理汇总了C++中idt_set_gate函数的典型用法代码示例。如果您正苦于以下问题:C++ idt_set_gate函数的具体用法?C++ idt_set_gate怎么用?C++ idt_set_gate使用的例子?那么恭喜您, 这里精选的函数代码示例或许可以为您提供帮助。



在下文中一共展示了idt_set_gate函数的20个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于我们的系统推荐出更棒的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");
}
开发者ID:robertdfrench,项目名称:jForth_Kernel,代码行数:11,代码来源:irq.c


示例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);
}
开发者ID:amnaut,项目名称:SBUNiX_X86,代码行数:11,代码来源:idt.c


示例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);

}
开发者ID:zmr961006,项目名称:ParalleX,代码行数:14,代码来源:intr.c


示例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.
}
开发者ID:Alexis211,项目名称:macroscope,代码行数:28,代码来源:idt.c


示例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");
}
开发者ID:rajesh5310,项目名称:SBUnix,代码行数:17,代码来源:idt.c


示例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);
};
开发者ID:rajesh5310,项目名称:SBUnix,代码行数:9,代码来源:idt.c


示例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);
}
开发者ID:kobemiller,项目名称:Hurlex-II,代码行数:20,代码来源:intr.c


示例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);
}
开发者ID:coolcoca,项目名称:TinyOS,代码行数:13,代码来源:irq.c


示例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);
}
开发者ID:coolcoca,项目名称:TinyOS,代码行数:23,代码来源:irq.c


示例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);
	}
}
开发者ID:darksideos,项目名称:darkside-kernel,代码行数:44,代码来源:syscall.c


示例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();
}
开发者ID:haseebniaz,项目名称:OS,代码行数:20,代码来源:idt.c


示例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);
}
开发者ID:aadarshkenia,项目名称:Preemptive-Unix-OS,代码行数:17,代码来源:idt.c


示例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);
}
开发者ID:charliegreen,项目名称:moss,代码行数:74,代码来源:desctab.c


示例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);
}
开发者ID:dakk,项目名称:abstract-os,代码行数:35,代码来源:dt.c


示例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);
}
开发者ID:ArtemGrzeca,项目名称:zdos,代码行数:35,代码来源:isr.c


示例16: idt_install

/* Installs the IDT */
void idt_install()
{
  /* Sets the special IDT pointer up, just like in 'gdt.c' */
  idtp.limit = (sizeof (struct idt_entry) * 256) - 1;
  idtp.base = (dword)&idt;

  /* Clear out the entire IDT, initializing it to zeros */
  memset((unsigned char *)&idt, 0, (sizeof(struct idt_entry) * 256));

  /* ISRs to the IDT here using idt_set_gate */
  idt_set_gate(0, (dword)&handler_0, 0x08, 0xEE);
  idt_set_gate(1, (dword)&handler_1, 0x08, 0xEE);
  idt_set_gate(2, (dword)&handler_2, 0x08, 0xEE);
  idt_set_gate(3, (dword)&handler_3, 0x08, 0xEE);
  idt_set_gate(4, (dword)&handler_4, 0x08, 0xEE);
  idt_set_gate(5, (dword)&handler_5, 0x08, 0xEE);
  idt_set_gate(6, (dword)&handler_6, 0x08, 0xEE);
  idt_set_gate(7, (dword)&handler_7, 0x08, 0xEE);
  idt_set_gate(8, (dword)&handler_8, 0x08, 0xEE);
  idt_set_gate(9, (dword)&handler_9, 0x08, 0xEE);
  idt_set_gate(10, (dword)&handler_10, 0x08, 0xEE);
  idt_set_gate(11, (dword)&handler_11, 0x08, 0xEE);
  idt_set_gate(12, (dword)&handler_12, 0x08, 0xEE);
  idt_set_gate(13, (dword)&handler_13, 0x08, 0xEE);
  idt_set_gate(14, (dword)&handler_14, 0x08, 0xEE);
  idt_set_gate(15, (dword)&handler_15, 0x08, 0xEE);
  idt_set_gate(16, (dword)&handler_16, 0x08, 0xEE);
  idt_set_gate(17, (dword)&handler_17, 0x08, 0xEE);
  idt_set_gate(18, (dword)&handler_18, 0x08, 0xEE);
  idt_set_gate(19, (dword)&handler_19, 0x08, 0xEE);
  idt_set_gate(20, (dword)&handler_20, 0x08, 0xEE);

  /* Points the processor's internal register to the new IDT */
  idt_load();
}
开发者ID:Hovo-Infinity,项目名称:DendyOS,代码行数:36,代码来源:idt.c


示例17: syscll_install

void syscll_install () {
    idt_set_gate ( 48, ( unsigned ) sys1, 0x08, 0x8E );
}
开发者ID:MasterSS,项目名称:HOS,代码行数:3,代码来源:syscll.c


示例18: init_idt

static void init_idt() 
{ 
  idt_ptr.limit = sizeof(idt_entry_t) * 256 - 1;
  idt_ptr.base  = (u32int)&idt_entries;

  memset(&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);
  
  idt_set_gate( 0, (u32int)isr0 , 0x08, 0x8E);
  idt_set_gate( 1, (u32int)isr1 , 0x08, 0x8E);
  idt_set_gate( 2, (u32int)isr2 , 0x08, 0x8E);
  idt_set_gate( 3, (u32int)isr3 , 0x08, 0x8E);
  idt_set_gate( 4, (u32int)isr4 , 0x08, 0x8E);
  idt_set_gate( 5, (u32int)isr5 , 0x08, 0x8E);
  idt_set_gate( 6, (u32int)isr6 , 0x08, 0x8E);
  idt_set_gate( 7, (u32int)isr7 , 0x08, 0x8E);
  idt_set_gate( 8, (u32int)isr8 , 0x08, 0x8E);
  idt_set_gate( 9, (u32int)isr9 , 0x08, 0x8E);
  idt_set_gate(10, (u32int)isr10, 0x08, 0x8E);
  idt_set_gate(11, (u32int)isr11, 0x08, 0x8E);
  idt_set_gate(12, (u32int)isr12, 0x08, 0x8E);
  idt_set_gate(13, (u32int)isr13, 0x08, 0x8E);
  idt_set_gate(14, (u32int)isr14, 0x08, 0x8E);
  idt_set_gate(15, (u32int)isr15, 0x08, 0x8E);
  idt_set_gate(16, (u32int)isr16, 0x08, 0x8E);
  idt_set_gate(17, (u32int)isr17, 0x08, 0x8E);
  idt_set_gate(18, (u32int)isr18, 0x08, 0x8E);
  idt_set_gate(19, (u32int)isr19, 0x08, 0x8E);
  idt_set_gate(20, (u32int)isr20, 0x08, 0x8E);
  idt_set_gate(21, (u32int)isr21, 0x08, 0x8E);
  idt_set_gate(22, (u32int)isr22, 0x08, 0x8E);
  idt_set_gate(23, (u32int)isr23, 0x08, 0x8E);
  idt_set_gate(24, (u32int)isr24, 0x08, 0x8E);
  idt_set_gate(25, (u32int)isr25, 0x08, 0x8E);
  idt_set_gate(26, (u32int)isr26, 0x08, 0x8E);
  idt_set_gate(27, (u32int)isr27, 0x08, 0x8E);
  idt_set_gate(28, (u32int)isr28, 0x08, 0x8E);
  idt_set_gate(29, (u32int)isr29, 0x08, 0x8E);
  idt_set_gate(30, (u32int)isr30, 0x08, 0x8E);
  idt_set_gate(31, (u32int)isr31, 0x08, 0x8E);
  idt_set_gate(32, (u32int)irq0, 0x08, 0x8E);
  idt_set_gate(33, (u32int)irq1, 0x08, 0x8E);
  idt_set_gate(34, (u32int)irq2, 0x08, 0x8E);
  idt_set_gate(35, (u32int)irq3, 0x08, 0x8E);
  idt_set_gate(36, (u32int)irq4, 0x08, 0x8E);
  idt_set_gate(37, (u32int)irq5, 0x08, 0x8E);
  idt_set_gate(38, (u32int)irq6, 0x08, 0x8E);
  idt_set_gate(39, (u32int)irq7, 0x08, 0x8E);
  idt_set_gate(40, (u32int)irq8, 0x08, 0x8E);
  idt_set_gate(41, (u32int)irq9, 0x08, 0x8E);
  idt_set_gate(42, (u32int)irq10, 0x08, 0x8E);
  idt_set_gate(43, (u32int)irq11, 0x08, 0x8E);
  idt_set_gate(44, (u32int)irq12, 0x08, 0x8E);
  idt_set_gate(45, (u32int)irq13, 0x08, 0x8E);
  idt_set_gate(46, (u32int)irq14, 0x08, 0x8E);
  idt_set_gate(47, (u32int)irq15, 0x08, 0x8E);

  idt_flush((u32int)&idt_ptr);
}
开发者ID:LainIwakura,项目名称:LainOS,代码行数:70,代码来源:descriptor_tables.c


示例19: init_idt

// Initialisation routine - zeroes all the interrupt service routines, and
// initialises the IDT.
void init_idt ()
{
  // Zero all interrupt handlers initially.
  memset (&interrupt_handlers, 0, sizeof (interrupt_handler_t) * 256);

  // Just like the GDT, the IDT has a "limit" field that is set to the last valid byte in the IDT,
  // after adding in the start position (i.e. size-1).
  idt_ptr.limit = sizeof (idt_entry_t) * 256 - 1;
  idt_ptr.base  = (uint32_t) &idt_entries;

  // Zero the IDT to start with.
  memset (&idt_entries, 0, sizeof (idt_entry_t) * 255);

  // 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);

  // Set each gate in the IDT that we care about - that is:
  // 0-32:  Used by the CPU to report conditions, both normal and error.
  // 255:   Will be used later as a way to execute system calls.
  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);

  idt_set_gate (32, (uint32_t)irq0, 0x08, 0x8E);
  idt_set_gate (33, (uint32_t)irq1, 0x08, 0x8E);
  idt_set_gate (34, (uint32_t)irq2, 0x08, 0x8E);
  idt_set_gate (35, (uint32_t)irq3, 0x08, 0x8E);
  idt_set_gate (36, (uint32_t)irq4, 0x08, 0x8E);
  idt_set_gate (37, (uint32_t)irq5, 0x08, 0x8E);
  idt_set_gate (38, (uint32_t)irq6, 0x08, 0x8E);
  idt_set_gate (39, (uint32_t)irq7, 0x08, 0x8E);
  idt_set_gate (40, (uint32_t)irq8, 0x08, 0x8E);
  idt_set_gate (41, (uint32_t)irq9, 0x08, 0x8E);
  idt_set_gate (42, (uint32_t)irq10, 0x08, 0x8E);
  idt_set_gate (43, (uint32_t)irq11, 0x08, 0x8E);
  idt_set_gate (44, (uint32_t)irq12, 0x08, 0x8E);
  idt_set_gate (45, (uint32_t)irq13, 0x08, 0x8E);
  idt_set_gate (46, (uint32_t)irq14, 0x08, 0x8E);
  idt_set_gate (47, (uint32_t)irq15, 0x08, 0x8E);
  idt_set_gate (255, (uint32_t)isr255, 0x08, 0x8E);


  // Tell the CPU about our new IDT.
  idt_flush ((uint32_t)&idt_ptr);
}
开发者ID:drewwalton19216801,项目名称:SimpleKernel,代码行数:85,代码来源:idt.c


示例20: reload_idt

void
reload_idt ()
{
    idt_init ();
    _x86_64_asm_lidt (&idtr);
    //register CPU exception handler
    idt_set_gate (0x00, (uint64_t) exception0, 0x08, 0x8E);
    idt_set_gate (0x01, (uint64_t) exception1, 0x08, 0x8E);
    idt_set_gate (0x02, (uint64_t) exception2, 0x08, 0x8E);
    idt_set_gate (0x03, (uint64_t) exception3, 0x08, 0x8E);
    idt_set_gate (0x04, (uint64_t) exception4, 0x08, 0x8E);
    idt_set_gate (0x05, (uint64_t) exception5, 0x08, 0x8E);
    idt_set_gate (0x06, (uint64_t) exception6, 0x08, 0x8E);
    idt_set_gate (0x07, (uint64_t) exception7, 0x08, 0x8E);
    idt_set_gate (0x08, (uint64_t) exception8, 0x08, 0x8E);
    idt_set_gate (0x09, (uint64_t) exception9, 0x08, 0x8E);
    idt_set_gate (0x0A, (uint64_t) exception10, 0x08, 0x8E);
    idt_set_gate (0x0B, (uint64_t) exception11, 0x08, 0x8E);
    idt_set_gate (0x0C, (uint64_t) exception12, 0x08, 0x8E);
    idt_set_gate (0x0D, (uint64_t) exception13, 0x08, 0x8E);
    idt_set_gate (0x0E, (uint64_t) exception14, 0x08, 0x8E);
    idt_set_gate (0x0F, (uint64_t) exception15, 0x08, 0x8E);
    idt_set_gate (0x10, (uint64_t) exception16, 0x08, 0x8E);
    idt_set_gate (0x11, (uint64_t) exception17, 0x08, 0x8E);
    idt_set_gate (0x12, (uint64_t) exception18, 0x08, 0x8E);
    idt_set_gate (0x13, (uint64_t) exception19, 0x08, 0x8E);
    idt_set_gate (0x14, (uint64_t) exception20, 0x08, 0x8E);
    idt_set_gate (0x15, (uint64_t) exception21, 0x08, 0x8E);
    idt_set_gate (0x16, (uint64_t) exception22, 0x08, 0x8E);
    idt_set_gate (0x17, (uint64_t) exception23, 0x08, 0x8E);
    idt_set_gate (0x18, (uint64_t) exception24, 0x08, 0x8E);
    idt_set_gate (0x19, (uint64_t) exception25, 0x08, 0x8E);
    idt_set_gate (0x1A, (uint64_t) exception26, 0x08, 0x8E);
    idt_set_gate (0x1B, (uint64_t) exception27, 0x08, 0x8E);
    idt_set_gate (0x1C, (uint64_t) exception28, 0x08, 0x8E);
    idt_set_gate (0x1D, (uint64_t) exception29, 0x08, 0x8E);
    idt_set_gate (0x1E, (uint64_t) exception30, 0x08, 0x8E);
    idt_set_gate (0x1F, (uint64_t) exception31, 0x08, 0x8E);
    //register timer & kerboard interrupt handler
    idt_set_gate (0x20, (uint64_t) isr32, 0x08, 0x8E);
    idt_set_gate (0x21, (uint64_t) isr33, 0x08, 0x8E);
    //regiter yield func for cooperative scheduling
    idt_set_gate (0x80, (uint64_t) co_yield, 0x08, 0x8E);
    
}
开发者ID:csarron,项目名称:cse506os,代码行数:45,代码来源:idt.c



注:本文中的idt_set_gate函数示例由纯净天空整理自Github/MSDocs等源码及文档管理平台,相关代码片段筛选自各路编程大神贡献的开源项目,源码版权归原作者所有,传播和使用请参考对应项目的License;未经允许,请勿转载。


鲜花

握手

雷人

路过

鸡蛋
该文章已有0人参与评论

请发表评论

全部评论

专题导读
上一篇:
C++ idxamax函数代码示例发布时间:2022-05-31
下一篇:
C++ idnLogPrintf函数代码示例发布时间:2022-05-31
热门推荐
阅读排行榜

扫描微信二维码

查看手机版网站

随时了解更新最新资讯

139-2527-9053

在线客服(服务时间 9:00~18:00)

在线QQ客服
地址:深圳市南山区西丽大学城创智工业园
电邮:jeky_zhao#qq.com
移动电话:139-2527-9053

Powered by 互联科技 X3.4© 2001-2213 极客世界.|Sitemap