Subversion Repositories HelenOS

Compare Revisions

Ignore whitespace Rev 432 → Rev 433

/SPARTAN/trunk/arch/ia64/src/ia64.c
28,7 → 28,14
 
#include <arch.h>
#include <arch/ski/ski.h>
#include <arch/asm.h>
#include <arch/register.h>
#include <arch/barrier.h>
#include <arch/interrupt.h>
 
/** TODO: read ticks per second from firmware */
#define IT_DELTA 50000000
 
void arch_pre_mm_init(void)
{
ski_init_console();
36,4 → 43,20
 
void arch_post_mm_init(void)
{
cr_itv_t itv;
 
/* initialize Interval Timer external interrupt vector */
itv.value = itv_read();
itv.vector = INTERRUPT_TIMER;
itv.m = 0;
itv_write(itv.value);
srlz_d();
 
/* set Interval Timer Counter to zero */
itc_write(0);
srlz_d();
/* generate first Interval Timer interrupt in IT_DELTA ticks */
itm_write(IT_DELTA);
srlz_d();
}
/SPARTAN/trunk/arch/ia64/src/interrupt.c
29,21 → 29,29
 
#include <arch/interrupt.h>
#include <panic.h>
#include <print.h>
#include <arch/types.h>
#include <arch/asm.h>
#include <arch/barrier.h>
#include <arch/register.h>
#include <arch.h>
 
void external_interrupt(void)
{
__u8 ivr;
cr_ivr_t ivr;
ivr.value = ivr_read();
srlz_d();
ivr = ivr_read() & CR_IVR_MASK;
srlz_d();
switch(ivr) {
switch(ivr.value) {
case INTERRUPT_TIMER:
panic("cpu%d: timer interrupt\n", CPU->id);
break;
case INTERRUPT_SPURIOUS:
printf("cpu%d: spurious interrupt\n", CPU->id);
break;
default:
panic("\nUnhandled External Interrupt Vector %d\n", ivr);
panic("\nUnhandled External Interrupt Vector %d\n", ivr.vector);
break;
}
}