Merge git://git.kernel.org/pub/scm/linux/kernel/git/tglx/linux-2.6-x86
* git://git.kernel.org/pub/scm/linux/kernel/git/tglx/linux-2.6-x86: (40 commits) x86: HPET add another ICH7 PCI id x86: HPET force enable ICH5 suspend/resume fix x86: HPET force enable for ICH5 x86: HPET try to activate force detected hpet x86: HPET force enable o ICH7 and later x86: HPET restructure hpet code for hpet force enable clock events: allow replacement of broadcast timer i386/x8664: cleanup the shared hpet code i386: Remove the useless #ifdef in i8253.h ACPI: remove the now unused ifdef code jiffies: remove unused macros x86_64: cleanup apic.c after clock events switch x86_64: remove now unused code x86: unify timex.h variants x86: kill 8253pit.h x86: disable apic timer for AMD C1E enabled CPUs x86: Fix irq0 / local apic timer accounting x86_64: convert to clock events x86_64: Add (not yet used) clock event functions x86_64: prepare idle loop for dynamic ticks ...
This commit is contained in:
@@ -1,5 +0,0 @@
|
||||
#ifdef CONFIG_X86_32
|
||||
# include "8253pit_32.h"
|
||||
#else
|
||||
# include "8253pit_64.h"
|
||||
#endif
|
||||
@@ -1,12 +0,0 @@
|
||||
/*
|
||||
* 8253/8254 Programmable Interval Timer
|
||||
*/
|
||||
|
||||
#ifndef _8253PIT_H
|
||||
#define _8253PIT_H
|
||||
|
||||
#include <asm/timex.h>
|
||||
|
||||
#define PIT_TICK_RATE CLOCK_TICK_RATE
|
||||
|
||||
#endif
|
||||
@@ -1,10 +0,0 @@
|
||||
/*
|
||||
* 8253/8254 Programmable Interval Timer
|
||||
*/
|
||||
|
||||
#ifndef _8253PIT_H
|
||||
#define _8253PIT_H
|
||||
|
||||
#define PIT_TICK_RATE 1193182UL
|
||||
|
||||
#endif
|
||||
@@ -19,7 +19,7 @@
|
||||
extern int apic_verbosity;
|
||||
extern int apic_runs_main_timer;
|
||||
extern int ioapic_force;
|
||||
extern int apic_mapped;
|
||||
extern int disable_apic_timer;
|
||||
|
||||
/*
|
||||
* Define the default level of output to be very little
|
||||
@@ -79,8 +79,6 @@ extern void smp_local_timer_interrupt (void);
|
||||
extern void setup_boot_APIC_clock (void);
|
||||
extern void setup_secondary_APIC_clock (void);
|
||||
extern int APIC_init_uniprocessor (void);
|
||||
extern void disable_APIC_timer(void);
|
||||
extern void enable_APIC_timer(void);
|
||||
extern void setup_apic_routing(void);
|
||||
|
||||
extern void setup_APIC_extended_lvt(unsigned char lvt_off, unsigned char vector,
|
||||
@@ -95,10 +93,6 @@ extern int apic_is_clustered_box(void);
|
||||
#define K8_APIC_EXT_INT_MSG_EXT 0x7
|
||||
#define K8_APIC_EXT_LVT_ENTRY_THRESHOLD 0
|
||||
|
||||
void smp_send_timer_broadcast_ipi(void);
|
||||
void switch_APIC_timer_to_ipi(void *cpumask);
|
||||
void switch_ipi_to_APIC_timer(void *cpumask);
|
||||
|
||||
#define ARCH_APICTIMER_STOPS_ON_C3 1
|
||||
|
||||
extern unsigned boot_cpu_id;
|
||||
|
||||
@@ -156,4 +156,54 @@ static inline int is_geode(void)
|
||||
return (is_geode_gx() || is_geode_lx());
|
||||
}
|
||||
|
||||
/* MFGPTs */
|
||||
|
||||
#define MFGPT_MAX_TIMERS 8
|
||||
#define MFGPT_TIMER_ANY -1
|
||||
|
||||
#define MFGPT_DOMAIN_WORKING 1
|
||||
#define MFGPT_DOMAIN_STANDBY 2
|
||||
#define MFGPT_DOMAIN_ANY (MFGPT_DOMAIN_WORKING | MFGPT_DOMAIN_STANDBY)
|
||||
|
||||
#define MFGPT_CMP1 0
|
||||
#define MFGPT_CMP2 1
|
||||
|
||||
#define MFGPT_EVENT_IRQ 0
|
||||
#define MFGPT_EVENT_NMI 1
|
||||
#define MFGPT_EVENT_RESET 3
|
||||
|
||||
#define MFGPT_REG_CMP1 0
|
||||
#define MFGPT_REG_CMP2 2
|
||||
#define MFGPT_REG_COUNTER 4
|
||||
#define MFGPT_REG_SETUP 6
|
||||
|
||||
#define MFGPT_SETUP_CNTEN (1 << 15)
|
||||
#define MFGPT_SETUP_CMP2 (1 << 14)
|
||||
#define MFGPT_SETUP_CMP1 (1 << 13)
|
||||
#define MFGPT_SETUP_SETUP (1 << 12)
|
||||
#define MFGPT_SETUP_STOPEN (1 << 11)
|
||||
#define MFGPT_SETUP_EXTEN (1 << 10)
|
||||
#define MFGPT_SETUP_REVEN (1 << 5)
|
||||
#define MFGPT_SETUP_CLKSEL (1 << 4)
|
||||
|
||||
static inline void geode_mfgpt_write(int timer, u16 reg, u16 value)
|
||||
{
|
||||
u32 base = geode_get_dev_base(GEODE_DEV_MFGPT);
|
||||
outw(value, base + reg + (timer * 8));
|
||||
}
|
||||
|
||||
static inline u16 geode_mfgpt_read(int timer, u16 reg)
|
||||
{
|
||||
u32 base = geode_get_dev_base(GEODE_DEV_MFGPT);
|
||||
return inw(base + reg + (timer * 8));
|
||||
}
|
||||
|
||||
extern int __init geode_mfgpt_detect(void);
|
||||
extern int geode_mfgpt_toggle_event(int timer, int cmp, int event, int enable);
|
||||
extern int geode_mfgpt_set_irq(int timer, int cmp, int irq, int enable);
|
||||
extern int geode_mfgpt_alloc_timer(int timer, int domain, struct module *owner);
|
||||
|
||||
#define geode_mfgpt_setup_irq(t, c, i) geode_mfgpt_set_irq((t), (c), (i), 1)
|
||||
#define geode_mfgpt_release_irq(t, c, i) geode_mfgpt_set_irq((t), (c), (i), 0)
|
||||
|
||||
#endif
|
||||
|
||||
@@ -9,6 +9,7 @@ typedef struct {
|
||||
unsigned long idle_timestamp;
|
||||
unsigned int __nmi_count; /* arch dependent */
|
||||
unsigned int apic_timer_irqs; /* arch dependent */
|
||||
unsigned int irq0_irqs;
|
||||
} ____cacheline_aligned irq_cpustat_t;
|
||||
|
||||
DECLARE_PER_CPU(irq_cpustat_t, irq_stat);
|
||||
|
||||
+92
-4
@@ -1,5 +1,93 @@
|
||||
#ifdef CONFIG_X86_32
|
||||
# include "hpet_32.h"
|
||||
#ifndef ASM_X86_HPET_H
|
||||
#define ASM_X86_HPET_H
|
||||
|
||||
#ifdef CONFIG_HPET_TIMER
|
||||
|
||||
/*
|
||||
* Documentation on HPET can be found at:
|
||||
* http://www.intel.com/ial/home/sp/pcmmspec.htm
|
||||
* ftp://download.intel.com/ial/home/sp/mmts098.pdf
|
||||
*/
|
||||
|
||||
#define HPET_MMAP_SIZE 1024
|
||||
|
||||
#define HPET_ID 0x000
|
||||
#define HPET_PERIOD 0x004
|
||||
#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_ID_REV 0x000000ff
|
||||
#define HPET_ID_NUMBER 0x00001f00
|
||||
#define HPET_ID_64BIT 0x00002000
|
||||
#define HPET_ID_LEGSUP 0x00008000
|
||||
#define HPET_ID_VENDOR 0xffff0000
|
||||
#define HPET_ID_NUMBER_SHIFT 8
|
||||
#define HPET_ID_VENDOR_SHIFT 16
|
||||
|
||||
#define HPET_ID_VENDOR_8086 0x8086
|
||||
|
||||
#define HPET_CFG_ENABLE 0x001
|
||||
#define HPET_CFG_LEGACY 0x002
|
||||
#define HPET_LEGACY_8254 2
|
||||
#define HPET_LEGACY_RTC 8
|
||||
|
||||
#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
|
||||
|
||||
/* Max HPET Period is 10^8 femto sec as in HPET spec */
|
||||
#define HPET_MAX_PERIOD 100000000UL
|
||||
/*
|
||||
* Min HPET period is 10^5 femto sec just for safety. If it is less than this,
|
||||
* then 32 bit HPET counter wrapsaround in less than 0.5 sec.
|
||||
*/
|
||||
#define HPET_MIN_PERIOD 100000UL
|
||||
|
||||
/* hpet memory map physical address */
|
||||
extern unsigned long hpet_address;
|
||||
extern unsigned long force_hpet_address;
|
||||
extern int is_hpet_enabled(void);
|
||||
extern int hpet_enable(void);
|
||||
extern unsigned long hpet_readl(unsigned long a);
|
||||
extern void force_hpet_resume(void);
|
||||
|
||||
#ifdef CONFIG_HPET_EMULATE_RTC
|
||||
|
||||
#include <linux/interrupt.h>
|
||||
|
||||
extern int hpet_mask_rtc_irq_bit(unsigned long bit_mask);
|
||||
extern int hpet_set_rtc_irq_bit(unsigned long bit_mask);
|
||||
extern int hpet_set_alarm_time(unsigned char hrs, unsigned char min,
|
||||
unsigned char sec);
|
||||
extern int hpet_set_periodic_freq(unsigned long freq);
|
||||
extern int hpet_rtc_dropped_irq(void);
|
||||
extern int hpet_rtc_timer_init(void);
|
||||
extern irqreturn_t hpet_rtc_interrupt(int irq, void *dev_id);
|
||||
|
||||
#endif /* CONFIG_HPET_EMULATE_RTC */
|
||||
|
||||
#else
|
||||
# include "hpet_64.h"
|
||||
#endif
|
||||
|
||||
static inline int hpet_enable(void) { return 0; }
|
||||
static inline unsigned long hpet_readl(unsigned long a) { return 0; }
|
||||
|
||||
#endif /* CONFIG_HPET_TIMER */
|
||||
#endif /* ASM_X86_HPET_H */
|
||||
|
||||
@@ -1,90 +0,0 @@
|
||||
|
||||
#ifndef _I386_HPET_H
|
||||
#define _I386_HPET_H
|
||||
|
||||
#ifdef CONFIG_HPET_TIMER
|
||||
|
||||
/*
|
||||
* Documentation on HPET can be found at:
|
||||
* http://www.intel.com/ial/home/sp/pcmmspec.htm
|
||||
* ftp://download.intel.com/ial/home/sp/mmts098.pdf
|
||||
*/
|
||||
|
||||
#define HPET_MMAP_SIZE 1024
|
||||
|
||||
#define HPET_ID 0x000
|
||||
#define HPET_PERIOD 0x004
|
||||
#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_ID_REV 0x000000ff
|
||||
#define HPET_ID_NUMBER 0x00001f00
|
||||
#define HPET_ID_64BIT 0x00002000
|
||||
#define HPET_ID_LEGSUP 0x00008000
|
||||
#define HPET_ID_VENDOR 0xffff0000
|
||||
#define HPET_ID_NUMBER_SHIFT 8
|
||||
#define HPET_ID_VENDOR_SHIFT 16
|
||||
|
||||
#define HPET_ID_VENDOR_8086 0x8086
|
||||
|
||||
#define HPET_CFG_ENABLE 0x001
|
||||
#define HPET_CFG_LEGACY 0x002
|
||||
#define HPET_LEGACY_8254 2
|
||||
#define HPET_LEGACY_RTC 8
|
||||
|
||||
#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
|
||||
|
||||
/* Max HPET Period is 10^8 femto sec as in HPET spec */
|
||||
#define HPET_MAX_PERIOD 100000000UL
|
||||
/*
|
||||
* Min HPET period is 10^5 femto sec just for safety. If it is less than this,
|
||||
* then 32 bit HPET counter wrapsaround in less than 0.5 sec.
|
||||
*/
|
||||
#define HPET_MIN_PERIOD 100000UL
|
||||
|
||||
/* hpet memory map physical address */
|
||||
extern unsigned long hpet_address;
|
||||
extern int is_hpet_enabled(void);
|
||||
extern int hpet_enable(void);
|
||||
|
||||
#ifdef CONFIG_HPET_EMULATE_RTC
|
||||
|
||||
#include <linux/interrupt.h>
|
||||
|
||||
extern int hpet_mask_rtc_irq_bit(unsigned long bit_mask);
|
||||
extern int hpet_set_rtc_irq_bit(unsigned long bit_mask);
|
||||
extern int hpet_set_alarm_time(unsigned char hrs, unsigned char min,
|
||||
unsigned char sec);
|
||||
extern int hpet_set_periodic_freq(unsigned long freq);
|
||||
extern int hpet_rtc_dropped_irq(void);
|
||||
extern int hpet_rtc_timer_init(void);
|
||||
extern irqreturn_t hpet_rtc_interrupt(int irq, void *dev_id);
|
||||
|
||||
#endif /* CONFIG_HPET_EMULATE_RTC */
|
||||
|
||||
#else
|
||||
|
||||
static inline int hpet_enable(void) { return 0; }
|
||||
|
||||
#endif /* CONFIG_HPET_TIMER */
|
||||
#endif /* _I386_HPET_H */
|
||||
@@ -1,18 +0,0 @@
|
||||
#ifndef _ASM_X8664_HPET_H
|
||||
#define _ASM_X8664_HPET_H 1
|
||||
|
||||
#include <asm/hpet_32.h>
|
||||
|
||||
#define HPET_TICK_RATE (HZ * 100000UL)
|
||||
|
||||
extern int hpet_rtc_timer_init(void);
|
||||
extern int hpet_arch_init(void);
|
||||
extern int hpet_timer_stop_set_go(unsigned long tick);
|
||||
extern int hpet_reenable(void);
|
||||
extern unsigned int hpet_calibrate_tsc(void);
|
||||
|
||||
extern int hpet_use_timer;
|
||||
extern unsigned long hpet_period;
|
||||
extern unsigned long hpet_tick;
|
||||
|
||||
#endif
|
||||
+15
-5
@@ -1,5 +1,15 @@
|
||||
#ifdef CONFIG_X86_32
|
||||
# include "i8253_32.h"
|
||||
#else
|
||||
# include "i8253_64.h"
|
||||
#endif
|
||||
#ifndef __ASM_I8253_H__
|
||||
#define __ASM_I8253_H__
|
||||
|
||||
/* i8253A PIT registers */
|
||||
#define PIT_MODE 0x43
|
||||
#define PIT_CH0 0x40
|
||||
#define PIT_CH2 0x42
|
||||
|
||||
extern spinlock_t i8253_lock;
|
||||
|
||||
extern struct clock_event_device *global_clock_event;
|
||||
|
||||
extern void setup_pit_timer(void);
|
||||
|
||||
#endif /* __ASM_I8253_H__ */
|
||||
|
||||
@@ -1,17 +0,0 @@
|
||||
#ifndef __ASM_I8253_H__
|
||||
#define __ASM_I8253_H__
|
||||
|
||||
#include <linux/clockchips.h>
|
||||
|
||||
/* i8253A PIT registers */
|
||||
#define PIT_MODE 0x43
|
||||
#define PIT_CH0 0x40
|
||||
#define PIT_CH2 0x42
|
||||
|
||||
extern spinlock_t i8253_lock;
|
||||
|
||||
extern struct clock_event_device *global_clock_event;
|
||||
|
||||
extern void setup_pit_timer(void);
|
||||
|
||||
#endif /* __ASM_I8253_H__ */
|
||||
@@ -1,6 +0,0 @@
|
||||
#ifndef __ASM_I8253_H__
|
||||
#define __ASM_I8253_H__
|
||||
|
||||
extern spinlock_t i8253_lock;
|
||||
|
||||
#endif /* __ASM_I8253_H__ */
|
||||
@@ -29,6 +29,7 @@ struct x8664_pda {
|
||||
short isidle;
|
||||
struct mm_struct *active_mm;
|
||||
unsigned apic_timer_irqs;
|
||||
unsigned irq0_irqs;
|
||||
} ____cacheline_aligned_in_smp;
|
||||
|
||||
extern struct x8664_pda *_cpu_pda[];
|
||||
|
||||
@@ -51,9 +51,6 @@ extern void reserve_bootmem_generic(unsigned long phys, unsigned len);
|
||||
|
||||
extern void load_gs_index(unsigned gs);
|
||||
|
||||
extern void stop_timer_interrupt(void);
|
||||
extern void main_timer_handler(void);
|
||||
|
||||
extern unsigned long end_pfn_map;
|
||||
|
||||
extern void show_trace(struct task_struct *, struct pt_regs *, unsigned long * rsp);
|
||||
@@ -90,14 +87,10 @@ extern int timer_over_8254;
|
||||
|
||||
extern int gsi_irq_sharing(int gsi);
|
||||
|
||||
extern void smp_local_timer_interrupt(void);
|
||||
|
||||
extern int force_mwait;
|
||||
|
||||
long do_arch_prctl(struct task_struct *task, int code, unsigned long addr);
|
||||
|
||||
void i8254_timer_resume(void);
|
||||
|
||||
#define round_up(x,y) (((x) + (y) - 1) & ~((y)-1))
|
||||
#define round_down(x,y) ((x) & ~((y)-1))
|
||||
|
||||
|
||||
+16
-3
@@ -1,5 +1,18 @@
|
||||
#ifdef CONFIG_X86_32
|
||||
# include "timex_32.h"
|
||||
/* x86 architecture timex specifications */
|
||||
#ifndef _ASM_X86_TIMEX_H
|
||||
#define _ASM_X86_TIMEX_H
|
||||
|
||||
#include <asm/processor.h>
|
||||
#include <asm/tsc.h>
|
||||
|
||||
#ifdef CONFIG_X86_ELAN
|
||||
# define PIT_TICK_RATE 1189200 /* AMD Elan has different frequency! */
|
||||
#else
|
||||
# include "timex_64.h"
|
||||
# define PIT_TICK_RATE 1193182 /* Underlying HZ */
|
||||
#endif
|
||||
#define CLOCK_TICK_RATE PIT_TICK_RATE
|
||||
|
||||
extern int read_current_timer(unsigned long *timer_value);
|
||||
#define ARCH_HAS_READ_CURRENT_TIMER 1
|
||||
|
||||
#endif
|
||||
|
||||
@@ -1,22 +0,0 @@
|
||||
/*
|
||||
* linux/include/asm-i386/timex.h
|
||||
*
|
||||
* i386 architecture timex specifications
|
||||
*/
|
||||
#ifndef _ASMi386_TIMEX_H
|
||||
#define _ASMi386_TIMEX_H
|
||||
|
||||
#include <asm/processor.h>
|
||||
#include <asm/tsc.h>
|
||||
|
||||
#ifdef CONFIG_X86_ELAN
|
||||
# define CLOCK_TICK_RATE 1189200 /* AMD Elan has different frequency! */
|
||||
#else
|
||||
# define CLOCK_TICK_RATE 1193182 /* Underlying HZ */
|
||||
#endif
|
||||
|
||||
|
||||
extern int read_current_timer(unsigned long *timer_value);
|
||||
#define ARCH_HAS_READ_CURRENT_TIMER 1
|
||||
|
||||
#endif
|
||||
@@ -1,31 +0,0 @@
|
||||
/*
|
||||
* linux/include/asm-x86_64/timex.h
|
||||
*
|
||||
* x86-64 architecture timex specifications
|
||||
*/
|
||||
#ifndef _ASMx8664_TIMEX_H
|
||||
#define _ASMx8664_TIMEX_H
|
||||
|
||||
#include <asm/8253pit.h>
|
||||
#include <asm/msr.h>
|
||||
#include <asm/vsyscall.h>
|
||||
#include <asm/system.h>
|
||||
#include <asm/processor.h>
|
||||
#include <asm/tsc.h>
|
||||
#include <linux/compiler.h>
|
||||
|
||||
#define CLOCK_TICK_RATE PIT_TICK_RATE /* Underlying HZ */
|
||||
|
||||
extern int read_current_timer(unsigned long *timer_value);
|
||||
#define ARCH_HAS_READ_CURRENT_TIMER 1
|
||||
|
||||
#define USEC_PER_TICK (USEC_PER_SEC / HZ)
|
||||
#define NSEC_PER_TICK (NSEC_PER_SEC / HZ)
|
||||
#define FSEC_PER_TICK (FSEC_PER_SEC / HZ)
|
||||
|
||||
#define NS_SCALE 10 /* 2^10, carefully chosen */
|
||||
#define US_SCALE 32 /* 2^32, arbitralrily chosen */
|
||||
|
||||
extern void mark_tsc_unstable(char *msg);
|
||||
extern void set_cyc2ns_scale(unsigned long khz);
|
||||
#endif
|
||||
+10
-5
@@ -1,13 +1,14 @@
|
||||
/*
|
||||
* linux/include/asm-i386/tsc.h
|
||||
*
|
||||
* i386 TSC related functions
|
||||
* x86 TSC related functions
|
||||
*/
|
||||
#ifndef _ASM_i386_TSC_H
|
||||
#define _ASM_i386_TSC_H
|
||||
#ifndef _ASM_X86_TSC_H
|
||||
#define _ASM_X86_TSC_H
|
||||
|
||||
#include <asm/processor.h>
|
||||
|
||||
#define NS_SCALE 10 /* 2^10, carefully chosen */
|
||||
#define US_SCALE 32 /* 2^32, arbitralrily chosen */
|
||||
|
||||
/*
|
||||
* Standard way to access the cycle counter.
|
||||
*/
|
||||
@@ -72,4 +73,8 @@ int check_tsc_unstable(void);
|
||||
extern void check_tsc_sync_source(int cpu);
|
||||
extern void check_tsc_sync_target(void);
|
||||
|
||||
#ifdef CONFIG_X86_64
|
||||
extern void tsc_calibrate(void);
|
||||
#endif
|
||||
|
||||
#endif
|
||||
|
||||
@@ -29,9 +29,6 @@ enum vsyscall_num {
|
||||
#define VGETCPU_RDTSCP 1
|
||||
#define VGETCPU_LSL 2
|
||||
|
||||
#define hpet_readl(a) readl((const void __iomem *)fix_to_virt(FIX_HPET_BASE) + a)
|
||||
#define hpet_writel(d,a) writel(d, (void __iomem *)fix_to_virt(FIX_HPET_BASE) + a)
|
||||
|
||||
extern int __vgetcpu_mode;
|
||||
extern volatile unsigned long __jiffies;
|
||||
|
||||
|
||||
@@ -8,7 +8,7 @@
|
||||
#ifndef _LINUX_CLOCKCHIPS_H
|
||||
#define _LINUX_CLOCKCHIPS_H
|
||||
|
||||
#ifdef CONFIG_GENERIC_CLOCKEVENTS
|
||||
#ifdef CONFIG_GENERIC_CLOCKEVENTS_BUILD
|
||||
|
||||
#include <linux/clocksource.h>
|
||||
#include <linux/cpumask.h>
|
||||
@@ -126,11 +126,14 @@ extern int clockevents_register_notifier(struct notifier_block *nb);
|
||||
extern int clockevents_program_event(struct clock_event_device *dev,
|
||||
ktime_t expires, ktime_t now);
|
||||
|
||||
#ifdef CONFIG_GENERIC_CLOCKEVENTS
|
||||
extern void clockevents_notify(unsigned long reason, void *arg);
|
||||
|
||||
#else
|
||||
# define clockevents_notify(reason, arg) do { } while (0)
|
||||
#endif
|
||||
|
||||
#else /* CONFIG_GENERIC_CLOCKEVENTS_BUILD */
|
||||
|
||||
static inline void clockevents_resume_events(void) { }
|
||||
#define clockevents_notify(reason, arg) do { } while (0)
|
||||
|
||||
#endif
|
||||
|
||||
@@ -36,8 +36,6 @@
|
||||
/* LATCH is used in the interval timer and ftape setup. */
|
||||
#define LATCH ((CLOCK_TICK_RATE + HZ/2) / HZ) /* For divider */
|
||||
|
||||
#define LATCH_HPET ((HPET_TICK_RATE + HZ/2) / HZ)
|
||||
|
||||
/* Suppose we want to devide two numbers NOM and DEN: NOM/DEN, the we can
|
||||
* improve accuracy by shifting LSH bits, hence calculating:
|
||||
* (NOM << LSH) / DEN
|
||||
@@ -53,13 +51,9 @@
|
||||
/* HZ is the requested value. ACTHZ is actual HZ ("<< 8" is for accuracy) */
|
||||
#define ACTHZ (SH_DIV (CLOCK_TICK_RATE, LATCH, 8))
|
||||
|
||||
#define ACTHZ_HPET (SH_DIV (HPET_TICK_RATE, LATCH_HPET, 8))
|
||||
|
||||
/* TICK_NSEC is the time between ticks in nsec assuming real ACTHZ */
|
||||
#define TICK_NSEC (SH_DIV (1000000UL * 1000, ACTHZ, 8))
|
||||
|
||||
#define TICK_NSEC_HPET (SH_DIV(1000000UL * 1000, ACTHZ_HPET, 8))
|
||||
|
||||
/* TICK_USEC is the time between ticks in usec assuming fake USER_HZ */
|
||||
#define TICK_USEC ((1000000UL + USER_HZ/2) / USER_HZ)
|
||||
|
||||
|
||||
@@ -2242,6 +2242,7 @@
|
||||
#define PCI_DEVICE_ID_INTEL_82801EB_5 0x24d5
|
||||
#define PCI_DEVICE_ID_INTEL_82801EB_6 0x24d6
|
||||
#define PCI_DEVICE_ID_INTEL_82801EB_11 0x24db
|
||||
#define PCI_DEVICE_ID_INTEL_82801EB_12 0x24dc
|
||||
#define PCI_DEVICE_ID_INTEL_82801EB_13 0x24dd
|
||||
#define PCI_DEVICE_ID_INTEL_ESB_1 0x25a1
|
||||
#define PCI_DEVICE_ID_INTEL_ESB_2 0x25a2
|
||||
|
||||
Reference in New Issue
Block a user