Subversion Repositories shark

Rev

Details | Last modification | View Log | RSS feed

Rev Author Line No. Line
424 giacomo 1
/* defines for inline arch setup functions */
2
 
3
#include <asm/fixmap.h>
4
#include "cobalt.h"
5
 
6
static inline void do_timer_interrupt_hook(struct pt_regs *regs)
7
{
8
        /* Clear the interrupt */
9
        co_cpu_write(CO_CPU_STAT,co_cpu_read(CO_CPU_STAT) & ~CO_STAT_TIMEINTR);
10
 
11
        do_timer(regs);
12
/*
13
 * In the SMP case we use the local APIC timer interrupt to do the
14
 * profiling, except when we simulate SMP mode on a uniprocessor
15
 * system, in that case we have to call the local interrupt handler.
16
 */
17
#ifndef CONFIG_X86_LOCAL_APIC
18
        x86_do_profile(regs);
19
#else
20
        if (!using_apic_timer)
21
                smp_local_timer_interrupt(regs);
22
#endif
23
}
24
 
25
static inline int do_timer_overflow(int count)
26
{
27
        int i;
28
 
29
        spin_lock(&i8259A_lock);
30
        /*
31
         * This is tricky when I/O APICs are used;
32
         * see do_timer_interrupt().
33
         */
34
        i = inb(0x20);
35
        spin_unlock(&i8259A_lock);
36
 
37
        /* assumption about timer being IRQ0 */
38
        if (i & 0x01) {
39
                /*
40
                 * We cannot detect lost timer interrupts ...
41
                 * well, that's why we call them lost, don't we? :)
42
                 * [hmm, on the Pentium and Alpha we can ... sort of]
43
                 */
44
                count -= LATCH;
45
        } else {
46
                printk("do_slow_gettimeoffset(): hardware timer problem?\n");
47
        }
48
        return count;
49
}