Esempio n. 1
0
void init_idt() 
{
	int i;
	const static int_handler handlers[16] = {
		divide_error,
		single_step_exception,
		nmi,
		breakpoint_exception,
		overflow,
		bounds_check,
		inval_opcode,
		copr_not_available,
		double_fault,
		copr_seg_overrun,
		inval_tss,
		segment_not_present,
		stack_exception,
		general_protection,
		page_fault,
		copr_error
	};

	for(i = 0; i <= 14; ++i) {
		init_idt_desc(i, DA_386IGate,
			handlers[i], PRIVILEGE_KRNL);
	}

	init_idt_desc(16, DA_386IGate,
		handlers[15], PRIVILEGE_KRNL);

	for(i = 0x20; i < IDTSIZE; ++i) {
		init_idt_desc(i, DA_386IGate,
		hwint00, PRIVILEGE_KRNL);
	}

	u16* p_idt_limit = (u16*)(&g_idt_ptr[0]);
	u32* p_idt_base  = (u32*)(&g_idt_ptr[2]);
	
	*p_idt_limit = IDTSIZE * sizeof(gate) - 1;
	*p_idt_base  = (u32)&g_idt;

	load_idt(g_idt_ptr);
}
Esempio n. 2
0
void idt_loader::init_idt(void)
{
	int i;

	// Initialisation des descripteurs systeme par defaut
	for (i = 0; i < IDTSIZE; i++) 
		init_idt_desc(0x08, (u32) _asm_default_int, INTGATE, &kidt[i]);

	init_idt_desc(0x08, (u32) _asm_irq_0, INTGATE, &kidt[32]);	// horloge
	init_idt_desc(0x08, (u32) _asm_irq_1, INTGATE, &kidt[33]);	// clavier

	// Initialisation de la structure pour IDTR
	kidtr.limite = IDTSIZE * 8;
	kidtr.base = IDTBASE;

	// Recopie de la IDT a son adresse
	memcpy((char *) kidtr.base, (char *) kidt, kidtr.limite);

	// Chargement du registre IDT 		
	ext_kidtr = kidtr;
	asm("lidtl (ext_kidtr)");

}
Esempio n. 3
0
/*
 * Cette fonction initialise la IDT apres que le kernel soit charge 
 * en memoire. 
 */
void init_idt(void) {
	idtdesc desc;
	int i;

	/* initialisation des descripteurs systeme */
	for(i=0;i<IDTSIZE;i++) {
		init_idt_desc(default_int, 0x08, INTGATE, &desc);
		add_idt_desc(desc);
	}

	init_idt_desc(k_int0, 0x08, INTGATE, &kidt[0]);
	init_idt_desc(k_int1, 0x08, INTGATE, &kidt[1]);
	init_idt_desc(k_int2, 0x08, INTGATE, &kidt[2]);
	init_idt_desc(k_int3, 0x08, INTGATE, &kidt[3]);
	init_idt_desc(k_int4, 0x08, INTGATE, &kidt[4]);
	init_idt_desc(k_int5, 0x08, INTGATE, &kidt[5]);
	init_idt_desc(k_int6, 0x08, INTGATE, &kidt[6]);
	init_idt_desc(k_int7, 0x08, INTGATE, &kidt[7]);
	init_idt_desc(k_int8, 0x08, INTGATE, &kidt[8]);
	init_idt_desc(k_int9, 0x08, INTGATE, &kidt[9]);
	init_idt_desc(k_int10, 0x08, INTGATE, &kidt[10]);
	init_idt_desc(k_int11, 0x08, INTGATE, &kidt[11]);
	init_idt_desc(k_int12, 0x08, INTGATE, &kidt[12]);
	init_idt_desc(k_int13, 0x08, INTGATE, &kidt[13]);
	init_idt_desc(k_int14, 0x08, INTGATE, &kidt[14]);
	init_idt_desc(k_int15, 0x08, INTGATE, &kidt[15]);
	init_idt_desc(k_int16, 0x08, INTGATE, &kidt[16]);
	init_idt_desc(k_int17, 0x08, INTGATE, &kidt[17]);
	init_idt_desc(k_int18, 0x08, INTGATE, &kidt[18]);

	init_idt_desc(k_irq0, 0x08, INTGATE, &kidt[32]);
	init_idt_desc(k_irq1, 0x08, INTGATE, &kidt[33]);
	init_idt_desc(k_irq2, 0x08, INTGATE, &kidt[34]);
	init_idt_desc(k_irq3, 0x08, INTGATE, &kidt[35]);
	init_idt_desc(k_irq4, 0x08, INTGATE, &kidt[36]);
	init_idt_desc(k_irq5, 0x08, INTGATE, &kidt[37]);
	init_idt_desc(k_irq6, 0x08, INTGATE, &kidt[38]);
	init_idt_desc(k_irq7, 0x08, INTGATE, &kidt[39]);
	init_idt_desc(k_irq8, 0x08, INTGATE, &kidt[40]);

	/* initialisation de la structure pour IDTR */
	kidtr.limite = IDTSIZE*8;
	kidtr.base = IDTBASE;

	/* recopie de la IDT a son adresse */
	memcopy(kidt, kidtr.base, kidtr.limite);

	/* chargement du registre IDTR */
	asm("lidtl (kidtr)");
}
Esempio n. 4
0
void
init_port(void)
{
    init_8259A();

    /* all initialize as interrupt gate */
    init_idt_desc(INT_VECTOR_DIVIDE, DA_386IGATE,
                  divide_error, PRIVILEGE_KERNAL);
    init_idt_desc(INT_VECTOR_DEBUG, DA_386IGATE,
                  single_step_exception, PRIVILEGE_KERNAL);
    init_idt_desc(INT_VECTOR_NMI, DA_386IGATE,
                  nmi, PRIVILEGE_KERNAL);
    init_idt_desc(INT_VECTOR_BREAKPOINT, DA_386IGATE,
                  breakpoint_exception, PRIVILEGE_USER);
    init_idt_desc(INT_VECTOR_OVERFLOW, DA_386IGATE,
                  overflow, PRIVILEGE_USER);
    init_idt_desc(INT_VECTOR_BOUNDS, DA_386IGATE,
                  bounds_check, PRIVILEGE_KERNAL);
    init_idt_desc(INT_VECTOR_INVAL_OP, DA_386IGATE,
                  inval_opcode, PRIVILEGE_KERNAL);
    init_idt_desc(INT_VECTOR_COPROC_NOT, DA_386IGATE,
                  copr_not_available, PRIVILEGE_KERNAL);
    init_idt_desc(INT_VECTOR_DOUBLE_FAULT, DA_386IGATE,
                  double_fault, PRIVILEGE_KERNAL);
    init_idt_desc(INT_VECTOR_COPROC_SEG, DA_386IGATE,
                  copr_seg_overrun, PRIVILEGE_KERNAL);
    init_idt_desc(INT_VECTOR_INVAL_TSS, DA_386IGATE,
                  inval_tss, PRIVILEGE_KERNAL);
    init_idt_desc(INT_VECTOR_SEG_NOT, DA_386IGATE,
                  segment_not_present, PRIVILEGE_KERNAL);
    init_idt_desc(INT_VECTOR_STACK_FAULT, DA_386IGATE,
                  stack_exception, PRIVILEGE_KERNAL);
    init_idt_desc(INT_VECTOR_PROTECTION, DA_386IGATE,
                  general_protection, PRIVILEGE_KERNAL);
    init_idt_desc(INT_VECTOR_PAGE_FAULT, DA_386IGATE,
                  page_fault, PRIVILEGE_KERNAL);
    init_idt_desc(INT_VECTOR_COPROC_ERR, DA_386IGATE,
                  copr_error, PRIVILEGE_KERNAL);
}
Esempio n. 5
0
/*======================================================================*
                            init_prot
 *----------------------------------------------------------------------*
 * 作用:初始化IDT和8529
 *======================================================================*/
PUBLIC void init_prot()
{
	init_8259A();

	// 全部初始化成中断门(没有陷阱门)
	init_idt_desc(INT_VECTOR_DIVIDE, DA_386IGate, divide_error,             PRIVILEGE_KRNL);
	init_idt_desc(INT_VECTOR_DEBUG,  DA_386IGate, single_step_exception,    PRIVILEGE_KRNL);
	init_idt_desc(INT_VECTOR_NMI,    DA_386IGate, nmi,                      PRIVILEGE_KRNL);
	init_idt_desc(INT_VECTOR_BREAKPOINT, DA_386IGate, breakpoint_exception,	   PRIVILEGE_USER);
	init_idt_desc(INT_VECTOR_OVERFLOW,   DA_386IGate, overflow,                PRIVILEGE_USER);
	init_idt_desc(INT_VECTOR_BOUNDS,    DA_386IGate, bounds_check,          PRIVILEGE_KRNL);
	init_idt_desc(INT_VECTOR_INVAL_OP,  DA_386IGate, inval_opcode,          PRIVILEGE_KRNL);
	init_idt_desc(INT_VECTOR_COPROC_NOT, DA_386IGate, copr_not_available,	PRIVILEGE_KRNL);
	init_idt_desc(INT_VECTOR_DOUBLE_FAULT, DA_386IGate, double_fault,		PRIVILEGE_KRNL);
	init_idt_desc(INT_VECTOR_COPROC_SEG, DA_386IGate, copr_seg_overrun,		PRIVILEGE_KRNL);
	init_idt_desc(INT_VECTOR_INVAL_TSS, DA_386IGate, inval_tss,             PRIVILEGE_KRNL);
	init_idt_desc(INT_VECTOR_SEG_NOT, DA_386IGate, segment_not_present,     PRIVILEGE_KRNL);
	init_idt_desc(INT_VECTOR_STACK_FAULT, DA_386IGate, stack_exception,     PRIVILEGE_KRNL);
	init_idt_desc(INT_VECTOR_PROTECTION, DA_386IGate, general_protection,   PRIVILEGE_KRNL);
	init_idt_desc(INT_VECTOR_PAGE_FAULT, DA_386IGate, page_fault,           PRIVILEGE_KRNL);
	init_idt_desc(INT_VECTOR_COPROC_ERR, DA_386IGate, copr_error,           PRIVILEGE_KRNL);
	
	// Master 8529A产生的中断
	init_idt_desc(INT_VECTOR_IRQ0 + 0,	DA_386IGate, hwint00,			PRIVILEGE_KRNL);
	init_idt_desc(INT_VECTOR_IRQ0 + 1,	DA_386IGate, hwint01,			PRIVILEGE_KRNL);
	init_idt_desc(INT_VECTOR_IRQ0 + 2,	DA_386IGate, hwint02,			PRIVILEGE_KRNL);
	init_idt_desc(INT_VECTOR_IRQ0 + 3,	DA_386IGate, hwint03,			PRIVILEGE_KRNL);
	init_idt_desc(INT_VECTOR_IRQ0 + 4,	DA_386IGate, hwint04,			PRIVILEGE_KRNL);
	init_idt_desc(INT_VECTOR_IRQ0 + 5,	DA_386IGate, hwint05,			PRIVILEGE_KRNL);
	init_idt_desc(INT_VECTOR_IRQ0 + 6,	DA_386IGate, hwint06,			PRIVILEGE_KRNL);
	init_idt_desc(INT_VECTOR_IRQ0 + 7,	DA_386IGate, hwint07,			PRIVILEGE_KRNL);
	
	// Slave 8529A产生的中断
	init_idt_desc(INT_VECTOR_IRQ8 + 0,	DA_386IGate, hwint08,			PRIVILEGE_KRNL);
	init_idt_desc(INT_VECTOR_IRQ8 + 1,	DA_386IGate, hwint09,			PRIVILEGE_KRNL);
	init_idt_desc(INT_VECTOR_IRQ8 + 2,	DA_386IGate, hwint10,			PRIVILEGE_KRNL);
	init_idt_desc(INT_VECTOR_IRQ8 + 3,	DA_386IGate, hwint11,			PRIVILEGE_KRNL);
	init_idt_desc(INT_VECTOR_IRQ8 + 4,	DA_386IGate, hwint12,			PRIVILEGE_KRNL);
	init_idt_desc(INT_VECTOR_IRQ8 + 5,	DA_386IGate, hwint13,			PRIVILEGE_KRNL);
	init_idt_desc(INT_VECTOR_IRQ8 + 6,	DA_386IGate, hwint14,			PRIVILEGE_KRNL);
	init_idt_desc(INT_VECTOR_IRQ8 + 7,	DA_386IGate, hwint15,			PRIVILEGE_KRNL);
}
Esempio n. 6
0
/*======================================================================*
                            init_prot
 *----------------------------------------------------------------------*
 初始化 IDT
 *======================================================================*/
PUBLIC void
init_prot ()
{
  init_8259A ();

  // 全部初始化成中断门(没有陷阱门)
  init_idt_desc (INT_VECTOR_DIVIDE, DA_386IGate,
		 divide_error, PRIVILEGE_KRNL);

  init_idt_desc (INT_VECTOR_DEBUG, DA_386IGate,
		 single_step_exception, PRIVILEGE_KRNL);

  init_idt_desc (INT_VECTOR_NMI, DA_386IGate, nmi, PRIVILEGE_KRNL);

  init_idt_desc (INT_VECTOR_BREAKPOINT, DA_386IGate,
		 breakpoint_exception, PRIVILEGE_USER);

  init_idt_desc (INT_VECTOR_OVERFLOW, DA_386IGate, overflow, PRIVILEGE_USER);

  init_idt_desc (INT_VECTOR_BOUNDS, DA_386IGate,
		 bounds_check, PRIVILEGE_KRNL);

  init_idt_desc (INT_VECTOR_INVAL_OP, DA_386IGate,
		 inval_opcode, PRIVILEGE_KRNL);

  init_idt_desc (INT_VECTOR_COPROC_NOT, DA_386IGate,
		 copr_not_available, PRIVILEGE_KRNL);

  init_idt_desc (INT_VECTOR_DOUBLE_FAULT, DA_386IGate,
		 double_fault, PRIVILEGE_KRNL);

  init_idt_desc (INT_VECTOR_COPROC_SEG, DA_386IGate,
		 copr_seg_overrun, PRIVILEGE_KRNL);

  init_idt_desc (INT_VECTOR_INVAL_TSS, DA_386IGate,
		 inval_tss, PRIVILEGE_KRNL);

  init_idt_desc (INT_VECTOR_SEG_NOT, DA_386IGate,
		 segment_not_present, PRIVILEGE_KRNL);

  init_idt_desc (INT_VECTOR_STACK_FAULT, DA_386IGate,
		 stack_exception, PRIVILEGE_KRNL);

  init_idt_desc (INT_VECTOR_PROTECTION, DA_386IGate,
		 general_protection, PRIVILEGE_KRNL);

  init_idt_desc (INT_VECTOR_PAGE_FAULT, DA_386IGate,
		 page_fault, PRIVILEGE_KRNL);

  init_idt_desc (INT_VECTOR_COPROC_ERR, DA_386IGate,
		 copr_error, PRIVILEGE_KRNL);

  init_idt_desc (INT_VECTOR_IRQ0 + 0, DA_386IGate, hwint00, PRIVILEGE_KRNL);

  init_idt_desc (INT_VECTOR_IRQ0 + 1, DA_386IGate, hwint01, PRIVILEGE_KRNL);

  init_idt_desc (INT_VECTOR_IRQ0 + 2, DA_386IGate, hwint02, PRIVILEGE_KRNL);

  init_idt_desc (INT_VECTOR_IRQ0 + 3, DA_386IGate, hwint03, PRIVILEGE_KRNL);

  init_idt_desc (INT_VECTOR_IRQ0 + 4, DA_386IGate, hwint04, PRIVILEGE_KRNL);

  init_idt_desc (INT_VECTOR_IRQ0 + 5, DA_386IGate, hwint05, PRIVILEGE_KRNL);

  init_idt_desc (INT_VECTOR_IRQ0 + 6, DA_386IGate, hwint06, PRIVILEGE_KRNL);

  init_idt_desc (INT_VECTOR_IRQ0 + 7, DA_386IGate, hwint07, PRIVILEGE_KRNL);

  init_idt_desc (INT_VECTOR_IRQ8 + 0, DA_386IGate, hwint08, PRIVILEGE_KRNL);

  init_idt_desc (INT_VECTOR_IRQ8 + 1, DA_386IGate, hwint09, PRIVILEGE_KRNL);

  init_idt_desc (INT_VECTOR_IRQ8 + 2, DA_386IGate, hwint10, PRIVILEGE_KRNL);

  init_idt_desc (INT_VECTOR_IRQ8 + 3, DA_386IGate, hwint11, PRIVILEGE_KRNL);

  init_idt_desc (INT_VECTOR_IRQ8 + 4, DA_386IGate, hwint12, PRIVILEGE_KRNL);

  init_idt_desc (INT_VECTOR_IRQ8 + 5, DA_386IGate, hwint13, PRIVILEGE_KRNL);

  init_idt_desc (INT_VECTOR_IRQ8 + 6, DA_386IGate, hwint14, PRIVILEGE_KRNL);

  init_idt_desc (INT_VECTOR_IRQ8 + 7, DA_386IGate, hwint15, PRIVILEGE_KRNL);

  init_idt_desc (INT_VECTOR_SYS_CALL, DA_386IGate, sys_call, PRIVILEGE_USER);

  /* 填充 GDT 中 TSS 这个描述符 */
  memset (&tss, 0, sizeof (tss));
  tss.ss0 = SELECTOR_KERNEL_DS;
  init_descriptor (&gdt[INDEX_TSS],
		   vir2phys (seg2phys (SELECTOR_KERNEL_DS), &tss),
		   sizeof (tss) - 1, DA_386TSS);
  tss.iobase = sizeof (tss);	/* 没有I/O许可位图 */

  // 填充 GDT 中进程的 LDT 的描述符
  int i;
  PROCESS *p_proc = proc_table;
  u16 selector_ldt = INDEX_LDT_FIRST << 3;
  for (i = 0; i < NR_TASKS; i++)
    {
      init_descriptor (&gdt[selector_ldt >> 3],
		       vir2phys (seg2phys (SELECTOR_KERNEL_DS),
				 proc_table[i].ldts),
		       LDT_SIZE * sizeof (DESCRIPTOR) - 1, DA_LDT);
      p_proc++;
      selector_ldt += 1 << 3;
    }
}
Esempio n. 7
0
PUBLIC void init_prot()
{
	init_8259A();
	
	/* 全部初始化为中断门 */
	init_idt_desc(INT_VECTOR_DIVIDE, DA_386IGate, divide_error, PRIVILEGE_KRNL);
	init_idt_desc(INT_VECTOR_DEBUG, DA_386IGate, single_step_exception, PRIVILEGE_KRNL);
	init_idt_desc(INT_VECTOR_NMI, DA_386IGate, nmi, PRIVILEGE_KRNL);
	init_idt_desc(INT_VECTOR_BREAKPOINT, DA_386IGate, breakpoint_exception, PRIVILEGE_KRNL);
	init_idt_desc(INT_VECTOR_OVERFLOW, DA_386IGate, overflow, PRIVILEGE_KRNL);
	init_idt_desc(INT_VECTOR_BOUNDS, DA_386IGate, bounds_check, PRIVILEGE_KRNL);
	init_idt_desc(INT_VECTOR_INVAL_OP, DA_386IGate, invalid_opcode, PRIVILEGE_KRNL);
	init_idt_desc(INT_VECTOR_COPROC_NOT, DA_386IGate, copr_not_available, PRIVILEGE_KRNL);
	init_idt_desc(INT_VECTOR_DOUBLE_FAULT, DA_386IGate, double_fault, PRIVILEGE_KRNL);
	init_idt_desc(INT_VECTOR_COPROC_SEG, DA_386IGate, copr_seg_overrun, PRIVILEGE_KRNL);
	init_idt_desc(INT_VECTOR_INVAL_TSS, DA_386IGate, invalid_tss, PRIVILEGE_KRNL);
	init_idt_desc(INT_VECTOR_SEG_NOT, DA_386IGate, segment_not_present, PRIVILEGE_KRNL);
	init_idt_desc(INT_VECTOR_STACK_FAULT, DA_386IGate, stack_exception, PRIVILEGE_KRNL);
	init_idt_desc(INT_VECTOR_PROTECTION, DA_386IGate, general_protection, PRIVILEGE_KRNL);
	init_idt_desc(INT_VECTOR_PAGE_FAULT, DA_386IGate, page_fault, PRIVILEGE_KRNL);
	init_idt_desc(INT_VECTOR_COPROC_ERR, DA_386IGate, copr_error, PRIVILEGE_KRNL);
}
Esempio n. 8
0
PUBLIC void init_prot()
{
	init_8259A();
	
	/* 全部初始化为中断门 */
	init_idt_desc(INT_VECTOR_DIVIDE, DA_386IGate, divide_error, PRIVILEGE_KRNL);
	init_idt_desc(INT_VECTOR_DEBUG, DA_386IGate, single_step_exception, PRIVILEGE_KRNL);
	init_idt_desc(INT_VECTOR_NMI, DA_386IGate, nmi, PRIVILEGE_KRNL);
	init_idt_desc(INT_VECTOR_BREAKPOINT, DA_386IGate, breakpoint_exception, PRIVILEGE_KRNL);
	init_idt_desc(INT_VECTOR_OVERFLOW, DA_386IGate, overflow, PRIVILEGE_KRNL);
	init_idt_desc(INT_VECTOR_BOUNDS, DA_386IGate, bounds_check, PRIVILEGE_KRNL);
	init_idt_desc(INT_VECTOR_INVAL_OP, DA_386IGate, invalid_opcode, PRIVILEGE_KRNL);
	init_idt_desc(INT_VECTOR_COPROC_NOT, DA_386IGate, copr_not_available, PRIVILEGE_KRNL);
	init_idt_desc(INT_VECTOR_DOUBLE_FAULT, DA_386IGate, double_fault, PRIVILEGE_KRNL);
	init_idt_desc(INT_VECTOR_COPROC_SEG, DA_386IGate, copr_seg_overrun, PRIVILEGE_KRNL);
	init_idt_desc(INT_VECTOR_INVAL_TSS, DA_386IGate, invalid_tss, PRIVILEGE_KRNL);
	init_idt_desc(INT_VECTOR_SEG_NOT, DA_386IGate, segment_not_present, PRIVILEGE_KRNL);
	init_idt_desc(INT_VECTOR_STACK_FAULT, DA_386IGate, stack_exception, PRIVILEGE_KRNL);
	init_idt_desc(INT_VECTOR_PROTECTION, DA_386IGate, general_protection, PRIVILEGE_KRNL);
	init_idt_desc(INT_VECTOR_PAGE_FAULT, DA_386IGate, page_fault, PRIVILEGE_KRNL);
	init_idt_desc(INT_VECTOR_COPROC_ERR, DA_386IGate, copr_error, PRIVILEGE_KRNL);

	/* 初始化8259A的处理程序 */
	init_idt_desc(INT_VECTOR_IRQ0 + 0, DA_386IGate, hwint_00, PRIVILEGE_KRNL);
	init_idt_desc(INT_VECTOR_IRQ0 + 1, DA_386IGate, hwint_01, PRIVILEGE_KRNL);
	init_idt_desc(INT_VECTOR_IRQ0 + 2, DA_386IGate, hwint_02, PRIVILEGE_KRNL);
	init_idt_desc(INT_VECTOR_IRQ0 + 3, DA_386IGate, hwint_03, PRIVILEGE_KRNL);
	init_idt_desc(INT_VECTOR_IRQ0 + 4, DA_386IGate, hwint_04, PRIVILEGE_KRNL);
	init_idt_desc(INT_VECTOR_IRQ0 + 5, DA_386IGate, hwint_05, PRIVILEGE_KRNL);
	init_idt_desc(INT_VECTOR_IRQ0 + 6, DA_386IGate, hwint_06, PRIVILEGE_KRNL);
	init_idt_desc(INT_VECTOR_IRQ0 + 7, DA_386IGate, hwint_07, PRIVILEGE_KRNL);
	init_idt_desc(INT_VECTOR_IRQ8 + 0, DA_386IGate, hwint_08, PRIVILEGE_KRNL);
	init_idt_desc(INT_VECTOR_IRQ8 + 1, DA_386IGate, hwint_09, PRIVILEGE_KRNL);
	init_idt_desc(INT_VECTOR_IRQ8 + 2, DA_386IGate, hwint_10, PRIVILEGE_KRNL);
	init_idt_desc(INT_VECTOR_IRQ8 + 3, DA_386IGate, hwint_11, PRIVILEGE_KRNL);
	init_idt_desc(INT_VECTOR_IRQ8 + 4, DA_386IGate, hwint_12, PRIVILEGE_KRNL);
	init_idt_desc(INT_VECTOR_IRQ8 + 5, DA_386IGate, hwint_13, PRIVILEGE_KRNL);
	init_idt_desc(INT_VECTOR_IRQ8 + 6, DA_386IGate, hwint_14, PRIVILEGE_KRNL);
	init_idt_desc(INT_VECTOR_IRQ8 + 7, DA_386IGate, hwint_15, PRIVILEGE_KRNL);
}