diff -ru xenomai-2.0.1/arch/i386/hal/x86.c xenomai-2.0.1-gryphon/arch/i386/hal/x86.c --- xenomai-2.0.1/arch/i386/hal/x86.c 2005-10-08 08:01:07.000000000 -0800 +++ xenomai-2.0.1-gryphon/arch/i386/hal/x86.c 2006-03-15 13:51:05.000000000 -0900 @@ -67,6 +67,8 @@ extern struct desc_struct idt_table[]; +#define PIT_CH1 0x41 + #ifdef CONFIG_X86_LOCAL_APIC static long long rthal_timers_sync_time; @@ -388,7 +390,7 @@ static rthal_time_t rthal_tsc_8254; -static int rthal_last_8254_counter2; +static int rthal_last_8254_counter1; /* TSC emulation using PIT channel #2. */ @@ -403,13 +405,13 @@ outb_p(0x0,PIT_MODE); count = inb_p(PIT_CH0); count |= inb_p(PIT_CH0) << 8; - outb_p(0xb4,PIT_MODE); - outb_p(RTHAL_8254_COUNT2LATCH & 0xff,PIT_CH2); - outb_p(RTHAL_8254_COUNT2LATCH >> 8,PIT_CH2); + outb_p(0x74,PIT_MODE); + outb_p(RTHAL_8254_COUNT2LATCH & 0xff,PIT_CH1); + outb_p(RTHAL_8254_COUNT2LATCH >> 8,PIT_CH1); rthal_tsc_8254 = count + LATCH * jiffies; - rthal_last_8254_counter2 = 0; + rthal_last_8254_counter1 = 0; /* Gate high, disable speaker */ - outb_p((inb_p(0x61)&~0x2)|1,0x61); + /* outb_p((inb_p(0x61)&~0x2)|1,0x61); */ rthal_local_irq_restore_hw(flags); } @@ -423,10 +425,11 @@ rthal_local_irq_save_hw(flags); - outb(0xd8,PIT_MODE); - count = inb(PIT_CH2); - delta = rthal_last_8254_counter2 - (count |= (inb(PIT_CH2) << 8)); - rthal_last_8254_counter2 = count; + outb(0xd4,PIT_MODE); +// outb_p(0x40,PIT_MODE); + count = inb_p(PIT_CH1); + delta = rthal_last_8254_counter1 - (count |= (inb_p(PIT_CH1) << 8)); + rthal_last_8254_counter1 = count; rthal_tsc_8254 += (delta > 0 ? delta : delta + RTHAL_8254_COUNT2LATCH); t = rthal_tsc_8254;