hpet.h 3.3 KB
Newer Older
H
H. Peter Anvin 已提交
1 2
#ifndef _ASM_X86_HPET_H
#define _ASM_X86_HPET_H
T
Thomas Gleixner 已提交
3

4 5
#include <linux/msi.h>

T
Thomas Gleixner 已提交
6 7 8 9 10 11 12 13 14
#ifdef CONFIG_HPET_TIMER

#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
15 16 17 18 19

#define HPET_Tn_CFG(n)		(0x100 + 0x20 * n)
#define HPET_Tn_CMP(n)		(0x108 + 0x20 * n)
#define HPET_Tn_ROUTE(n)	(0x110 + 0x20 * n)

T
Thomas Gleixner 已提交
20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64
#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_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;
65
extern unsigned long force_hpet_address;
66
extern int boot_hpet_disable;
67
extern u8 hpet_blockid;
T
Thomas Gleixner 已提交
68
extern int hpet_force_user;
69
extern u8 hpet_msi_disable;
T
Thomas Gleixner 已提交
70 71
extern int is_hpet_enabled(void);
extern int hpet_enable(void);
O
OGAWA Hirofumi 已提交
72
extern void hpet_disable(void);
J
Jan Beulich 已提交
73
extern unsigned int hpet_readl(unsigned int a);
V
Venki Pallipadi 已提交
74
extern void force_hpet_resume(void);
T
Thomas Gleixner 已提交
75

76
struct irq_data;
77 78 79
struct hpet_dev;
struct irq_domain;

80 81 82 83
extern void hpet_msi_unmask(struct irq_data *data);
extern void hpet_msi_mask(struct irq_data *data);
extern void hpet_msi_write(struct hpet_dev *hdev, struct msi_msg *msg);
extern void hpet_msi_read(struct hpet_dev *hdev, struct msi_msg *msg);
84 85 86
extern struct irq_domain *hpet_create_irq_domain(int hpet_id);
extern int hpet_assign_irq(struct irq_domain *domain,
			   struct hpet_dev *dev, int dev_num);
87

T
Thomas Gleixner 已提交
88 89 90 91
#ifdef CONFIG_HPET_EMULATE_RTC

#include <linux/interrupt.h>

92
typedef irqreturn_t (*rtc_irq_handler)(int interrupt, void *cookie);
T
Thomas Gleixner 已提交
93 94 95 96 97 98 99 100
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);
101 102
extern int hpet_register_irq_handler(rtc_irq_handler handler);
extern void hpet_unregister_irq_handler(rtc_irq_handler handler);
T
Thomas Gleixner 已提交
103 104 105

#endif /* CONFIG_HPET_EMULATE_RTC */

106
#else /* CONFIG_HPET_TIMER */
T
Thomas Gleixner 已提交
107 108

static inline int hpet_enable(void) { return 0; }
109
static inline int is_hpet_enabled(void) { return 0; }
A
Alok Kataria 已提交
110
#define hpet_readl(a) 0
111
#define default_setup_hpet_msi	NULL
T
Thomas Gleixner 已提交
112

113
#endif
H
H. Peter Anvin 已提交
114
#endif /* _ASM_X86_HPET_H */