Subversion Repositories HelenOS

Compare Revisions

Ignore whitespace Rev 1941 → Rev 1942

/trunk/kernel/arch/ia64/src/drivers/it.c
41,16 → 41,29
#include <arch/asm.h>
#include <arch/barrier.h>
#include <time/clock.h>
#include <ddi/irq.h>
#include <ddi/device.h>
#include <arch.h>
 
 
#define IT_SERVICE_CLOCKS 64
 
static irq_t it_irq;
 
static irq_ownership_t it_claim(void);
static void it_interrupt(irq_t *irq, void *arg, ...);
 
/** Initialize Interval Timer. */
void it_init(void)
{
cr_itv_t itv;
 
irq_initialize(&it_irq);
it_irq.inr = INTERRUPT_TIMER;
it_irq.devno = device_assign_devno();
it_irq.claim = it_claim;
it_irq.handler = it_interrupt;
irq_register(&it_irq);
 
/* initialize Interval Timer external interrupt vector */
itv.value = itv_read();
itv.vector = INTERRUPT_TIMER;
67,9 → 80,19
srlz_d();
}
 
/** Always claim ownership for this IRQ.
*
* Other devices are responsible to avoid using INR 0.
*
* @return Always IRQ_ACCEPT.
*/
irq_ownership_t it_claim(void)
{
return IRQ_ACCEPT;
}
 
/** Process Interval Timer interrupt. */
void it_interrupt(void)
void it_interrupt(irq_t *irq, void *arg, ...)
{
int64_t c;
int64_t m;
83,7 → 106,7
c += IT_SERVICE_CLOCKS;
 
m += IT_DELTA;
if (m-c<0)
if (m - c < 0)
CPU->missed_clock_ticks++;
else
break;
93,6 → 116,11
srlz_d(); /* propagate changes */
clock();
/*
* This one is a good candidate for moving to a separate
* kernel thread private to ski.c
*/
poll_keyboard();
}