Coverage Report

Created: 2017-10-25 09:10

/root/src/xen/xen/include/asm/hpet.h
Line
Count
Source (jump to first uncovered line)
1
#ifndef __X86_HPET_H__
2
#define __X86_HPET_H__
3
4
/*
5
 * Documentation on HPET can be found at:
6
 *      http://www.intel.com/content/dam/www/public/us/en/documents/
7
 *      technical-specifications/software-developers-hpet-spec-1-0a.pdf
8
 */
9
10
#define HPET_MMAP_SIZE  1024
11
12
0
#define HPET_ID   0x000
13
#define HPET_PERIOD 0x004
14
0
#define HPET_CFG  0x010
15
0
#define HPET_STATUS 0x020
16
0
#define HPET_COUNTER  0x0f0
17
0
#define HPET_Tn_CFG(n)          (0x100 + (n) * 0x20)
18
0
#define HPET_Tn_CMP(n)          (0x108 + (n) * 0x20)
19
0
#define HPET_Tn_ROUTE(n)        (0x110 + (n) * 0x20)
20
21
#define HPET_ID_VENDOR  0xffff0000
22
0
#define HPET_ID_LEGSUP  0x00008000
23
0
#define HPET_ID_64BIT 0x00002000
24
2
#define HPET_ID_NUMBER  0x00001f00
25
1
#define HPET_ID_REV 0x000000ff
26
2
#define HPET_ID_NUMBER_SHIFT  8
27
#define HPET_ID_VENDOR_SHIFT  16
28
29
2
#define HPET_CFG_ENABLE 0x001
30
1
#define HPET_CFG_LEGACY 0x002
31
#define HPET_LEGACY_8254  2
32
#define HPET_LEGACY_RTC   8
33
34
0
#define HPET_TN_LEVEL   0x002
35
8
#define HPET_TN_ENABLE    0x004
36
0
#define HPET_TN_PERIODIC  0x008
37
0
#define HPET_TN_PERIODIC_CAP  0x010
38
0
#define HPET_TN_64BIT_CAP 0x020
39
0
#define HPET_TN_SETVAL    0x040
40
0
#define HPET_TN_32BIT   0x100
41
0
#define HPET_TN_ROUTE   0x3e00
42
0
#define HPET_TN_FSB   0x4000
43
0
#define HPET_TN_FSB_CAP   0x8000
44
8
#define HPET_TN_RESERVED  0xffff0081
45
0
#define HPET_TN_ROUTE_SHIFT 9
46
47
48
#define hpet_read32(x)    \
49
86.2k
    (*(volatile u32 *)(fix_to_virt(FIX_HPET_BASE) + (x)))
50
#define hpet_write32(y,x) \
51
10
    (*(volatile u32 *)(fix_to_virt(FIX_HPET_BASE) + (x)) = (y))
52
53
extern unsigned long hpet_address;
54
extern u8 hpet_blockid;
55
extern u8 hpet_flags;
56
57
/*
58
 * Detect and initialise HPET hardware: return counter update frequency.
59
 * Return value is zero if HPET is unavailable.
60
 */
61
u64 hpet_setup(void);
62
void hpet_resume(u32 *);
63
64
/*
65
 * Disable HPET hardware: restore it to boot time state.
66
 */
67
void hpet_disable(void);
68
69
/*
70
 * Callback from legacy timer (PIT channel 0) IRQ handler.
71
 * Returns 1 if tick originated from HPET; else 0.
72
 */
73
int hpet_legacy_irq_tick(void);
74
75
/*
76
 * Temporarily use an HPET event counter for timer interrupt handling,
77
 * rather than using the LAPIC timer. Used for Cx state entry.
78
 */
79
void hpet_broadcast_init(void);
80
void hpet_broadcast_resume(void);
81
void hpet_broadcast_enter(void);
82
void hpet_broadcast_exit(void);
83
int hpet_broadcast_is_available(void);
84
void hpet_disable_legacy_broadcast(void);
85
86
extern void (*pv_rtc_handler)(uint8_t reg, uint8_t value);
87
88
#endif /* __X86_HPET_H__ */