use HPET timer in standard interrupt delivery mode
PATCH 6/8 use HPET timer in standard interrupt delivery mode
Add support for HPET timers in "standard" interrupt delivery mode as opposed to "legacy replacement" mode. This enables HPET timer to be
tied to regular IRQ lines and can enable different HPET timers to be targetted to different CPUs. And with this change, HPET timer need not have to overstep on legacy IRQ0 or IRQ8 lines.
Signed-off-by Venkatesh Pallipadi <[email protected]>
include/asm-i386/hpet.h +24 -14
@@ -43,15 +43,18 @@#define HPET_CFG 0x010#define HPET_STATUS 0x020#define HPET_COUNTER 0x0f0 -#define HPET_T0_CFG 0x100 -#define HPET_T0_CMP 0x108 -#define HPET_T0_ROUTE 0x110 -#define HPET_T1_CFG 0x120 -#define HPET_T1_CMP 0x128 -#define HPET_T1_ROUTE 0x130 -#define HPET_T2_CFG 0x140 -#define HPET_T2_CMP 0x148 -#define HPET_T2_ROUTE 0x150 + +#define HPET_Tn_OFFSET 0x20 +#define HPET_Tn_CFG (n) (0x100 + (n) * HPET_Tn_OFFSET) +#define HPET_Tn_ROUTE (n) (0x104 + (n) * HPET_Tn_OFFSET) +#define HPET_Tn_CMP (n) (0x108 + (n) * HPET_Tn_OFFSET) + +#define HPET_T0_CFG HPET_Tn_CFG(0) +#define HPET_T0_CMP HPET_Tn_CMP(0) +#define HPET_T1_CFG HPET_Tn_CFG(1) +#define HPET_T1_CMP HPET_Tn_CMP(1) +#define HPET_T2_CFG HPET_Tn_CFG(2) +#define HPET_T2_CMP HPET_Tn_CMP(2)#define HPET_ID_LEGSUP 0x00008000#define HPET_ID_NUMBER 0x00001f00
@@ -63,11 +66,18 @@#define HPET_LEGACY_8254 2#define HPET_LEGACY_RTC 8 -#define HPET_TN_ENABLE 0x004 -#define HPET_TN_PERIODIC 0x008 -#define HPET_TN_PERIODIC_CAP 0x010 -#define HPET_TN_SETVAL 0x040 -#define HPET_TN_32BIT 0x100 +#define HPET_TN_LEVEL 0x0002 +#define HPET_TN_ENABLE 0x0004 +#define HPET_TN_PERIODIC 0x0008 +#define HPET_TN_PERIODIC_CAP 0x0010 +#define HPET_TN_64BIT_CAP 0x0020 +#define HPET_TN_SETVAL 0x0040 +#define HPET_TN_32BIT 0x0100 +#define HPET_TN_ROUTE 0x3e00 +#define HPET_TN_FSB 0x4000 +#define HPET_TN_FSB_CAP 0x8000 + +#define HPET_TN_ROUTE_SHIFT 9/* Use our own asm for 64 bit multiply/divide */ #define ASM_MUL64_REG (eax_out,edx_out,reg_in,eax_in) \
arch/i386/kernel/hpet.c +470 -12
528 lines not on this page · raw message
include/asm-i386/io_apic.h +11 -0
@@ -144,6 +144,12 @@extern int io_apic_get_redir_entries (int ioapic);extern int io_apic_set_pci_routing (int ioapic,int pin,int irq,int edge_level,int active_high_low);extern int timer_uses_ioapic_pin_0; +#else +static inline int io_apic_set_pci_routing (int ioapic,int pin,int irq, +int edge_level,int active_high_low) +{ +return -1 ; +}#endif /* CONFIG_ACPI */ extern int (*ioapic_renumber_irq)(int ioapic,int irq);
@@ -151,6 +157,11 @@#else /* !CONFIG_X86_IO_APIC */ #define io_apic_assign_pci_irqs 0static inline void disable_ioapic_setup (void ) { } +static inline int io_apic_set_pci_routing (int ioapic,int pin,int irq, +int edge_level,int active_high_low) +{ +return -1 ; +}#endif #endif