/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__ */ |