5f05c79450
When running as a PVH guest, there's no emulated i8254, so we need to use the Xen PV timer as the early source for DELAY. This change allows for different implementations of the early DELAY function and implements a Xen variant for it. Approved by: gibbs Sponsored by: Citrix Systems R&D dev/xen/timer/timer.c: dev/xen/timer/timer.h: - Implement Xen early delay functions using the PV timer and declare them. x86/include/init.h: - Add hooks for early clock source initialization and early delay functions. i386/i386/machdep.c: pc98/pc98/machdep.c: amd64/amd64/machdep.c: - Set early delay hooks to use the i8254 on bare metal. - Use clock_init (that will in turn make use of init_ops) to initialize the early clock source. amd64/include/clock.h: i386/include/clock.h: - Declare i8254_delay and clock_init. i386/xen/clock.c: - Rename DELAY to i8254_delay. x86/isa/clock.c: - Introduce clock_init that will take care of initializing the early clock by making use of the init_ops hooks. - Move non ISA related delay functions to the newly introduced delay file. x86/x86/delay.c: - Add moved delay related functions. - Implement generic DELAY function that will use the init_ops hooks. x86/xen/pv.c: - Set PVH hooks for the early delay related functions in init_ops. conf/files.amd64: conf/files.i386: conf/files.pc98: - Add delay.c to the kernel build.
44 lines
856 B
C
44 lines
856 B
C
/*-
|
|
* Kernel interface to machine-dependent clock driver.
|
|
* Garrett Wollman, September 1994.
|
|
* This file is in the public domain.
|
|
*
|
|
* $FreeBSD$
|
|
*/
|
|
|
|
#ifndef _MACHINE_CLOCK_H_
|
|
#define _MACHINE_CLOCK_H_
|
|
|
|
#ifdef _KERNEL
|
|
/*
|
|
* i386 to clock driver interface.
|
|
* XXX large parts of the driver and its interface are misplaced.
|
|
*/
|
|
extern int clkintr_pending;
|
|
extern u_int i8254_freq;
|
|
extern int i8254_max_count;
|
|
extern uint64_t tsc_freq;
|
|
extern int tsc_is_invariant;
|
|
extern int tsc_perf_stat;
|
|
|
|
void i8254_init(void);
|
|
void i8254_delay(int);
|
|
void clock_init(void);
|
|
|
|
/*
|
|
* Driver to clock driver interface.
|
|
*/
|
|
|
|
void startrtclock(void);
|
|
void timer_restore(void);
|
|
void init_TSC(void);
|
|
|
|
#define HAS_TIMER_SPKR 1
|
|
int timer_spkr_acquire(void);
|
|
int timer_spkr_release(void);
|
|
void timer_spkr_setfreq(int freq);
|
|
|
|
#endif /* _KERNEL */
|
|
|
|
#endif /* !_MACHINE_CLOCK_H_ */
|