Exemple #1
0
// irq_init(): 初始化硬件中断服务
void irq_init(void)
{
	int i;
	// 硬件中断芯片初始化
	init8259();
	// 设置 idt 服务程序
	idt_setintrgate(IRQBASE + 0, irq0);
	idt_setintrgate(IRQBASE + 1, irq1);
	idt_setintrgate(IRQBASE + 2, irq2);
	idt_setintrgate(IRQBASE + 3, irq3);
	idt_setintrgate(IRQBASE + 4, irq4);
	idt_setintrgate(IRQBASE + 5, irq5);
	idt_setintrgate(IRQBASE + 6, irq6);
	idt_setintrgate(IRQBASE + 7, irq7);
	idt_setintrgate(IRQBASE + 8, irq8);
	idt_setintrgate(IRQBASE + 9, irq9);
	idt_setintrgate(IRQBASE + 10, irq10);
	idt_setintrgate(IRQBASE + 11, irq11);
	idt_setintrgate(IRQBASE + 12, irq12);
	idt_setintrgate(IRQBASE + 13, irq13);
	idt_setintrgate(IRQBASE + 14, irq14);
	idt_setintrgate(IRQBASE + 15, irq15);
	// 初始化处理函数组,这里是自己赋值
	for (i = 0; i < sizeof(irqfun) / sizeof(irqfun[0]); i++)
		irqfun[i] = (IRQ_FUN)unexpected;
	//设置系统调用
extern int *systemcall;
extern void irq_syscall(void);
	idt_setusergate(SYSCALL_INT ,irq_syscall);
	return;
}
Exemple #2
0
initevec()
{
	int		i;
	STATWORD	ps;

#ifdef __COM32__
	puts_com32("initevec() begin");
#endif
	for (i=0; i<NID; ++i)
		set_evec(i, (int)defevec[i]);
	/*
	 * "girmask" masks all (bus) interrupts with the default handler.
	 * initially, all, then cleared as handlers are set via set_evec()
	 */
	girmask = 0xfffb;	/* leave bit 2 enabled for IC cascade */

#ifdef __COM32__
	puts_com32("initevec() set_evec() done\n");
#endif
	lidt();

#ifdef __COM32__
	puts_com32("initevec() lidt() done\n");
#endif
	init8259();
	
#ifdef __COM32__
	puts_com32("initevec() init8259() done\n");
#endif
}
Exemple #3
0
void initevec(void)
{
	int		i;

        /* bzero( idt, sizeof( struct idt ) * 256 ); */
	memset( idt, 0, sizeof( struct idt ) * 256 ); 

	for (i=0; i<NID; ++i)
		set_evec(i, (long)defevec[i]);

	lidt();
	init8259();
	set_exception=&set_evec;
}
Exemple #4
0
int initevec()
{
	int		i;

	for (i=0; i<NID; ++i)
		set_evec(i, (long)defevec[i]);
	/*
	 * "girmask" masks all (bus) interrupts with the default handler.
	 * initially, all, then cleared as handlers are set via set_evec()
	 */
	girmask = 0xfffb;	/* leave bit 2 enabled for IC cascade */

	lidt();
	init8259();
        return(OK);
}