| Linus Torvalds | 1da177e | 2005-04-16 15:20:36 -0700 | [diff] [blame] | 1 |  | 
|  | 2 | #ifndef _I386_HPET_H | 
|  | 3 | #define _I386_HPET_H | 
|  | 4 |  | 
|  | 5 | #ifdef CONFIG_HPET_TIMER | 
|  | 6 |  | 
| Linus Torvalds | 1da177e | 2005-04-16 15:20:36 -0700 | [diff] [blame] | 7 | /* | 
|  | 8 | * Documentation on HPET can be found at: | 
|  | 9 | *      http://www.intel.com/ial/home/sp/pcmmspec.htm | 
|  | 10 | *      ftp://download.intel.com/ial/home/sp/mmts098.pdf | 
|  | 11 | */ | 
|  | 12 |  | 
| Thomas Gleixner | 0655d7c | 2007-07-21 17:10:16 +0200 | [diff] [blame^] | 13 | #define HPET_MMAP_SIZE		1024 | 
| Linus Torvalds | 1da177e | 2005-04-16 15:20:36 -0700 | [diff] [blame] | 14 |  | 
| Thomas Gleixner | 0655d7c | 2007-07-21 17:10:16 +0200 | [diff] [blame^] | 15 | #define HPET_ID			0x000 | 
|  | 16 | #define HPET_PERIOD		0x004 | 
|  | 17 | #define HPET_CFG		0x010 | 
|  | 18 | #define HPET_STATUS		0x020 | 
|  | 19 | #define HPET_COUNTER		0x0f0 | 
|  | 20 | #define HPET_T0_CFG		0x100 | 
|  | 21 | #define HPET_T0_CMP		0x108 | 
|  | 22 | #define HPET_T0_ROUTE		0x110 | 
|  | 23 | #define HPET_T1_CFG		0x120 | 
|  | 24 | #define HPET_T1_CMP		0x128 | 
|  | 25 | #define HPET_T1_ROUTE		0x130 | 
|  | 26 | #define HPET_T2_CFG		0x140 | 
|  | 27 | #define HPET_T2_CMP		0x148 | 
|  | 28 | #define HPET_T2_ROUTE		0x150 | 
| Linus Torvalds | 1da177e | 2005-04-16 15:20:36 -0700 | [diff] [blame] | 29 |  | 
| Thomas Gleixner | 0655d7c | 2007-07-21 17:10:16 +0200 | [diff] [blame^] | 30 | #define HPET_ID_REV		0x000000ff | 
|  | 31 | #define HPET_ID_NUMBER		0x00001f00 | 
|  | 32 | #define HPET_ID_64BIT		0x00002000 | 
|  | 33 | #define HPET_ID_LEGSUP		0x00008000 | 
|  | 34 | #define HPET_ID_VENDOR		0xffff0000 | 
| Linus Torvalds | 1da177e | 2005-04-16 15:20:36 -0700 | [diff] [blame] | 35 | #define	HPET_ID_NUMBER_SHIFT	8 | 
| Thomas Gleixner | 0655d7c | 2007-07-21 17:10:16 +0200 | [diff] [blame^] | 36 | #define HPET_ID_VENDOR_SHIFT	16 | 
| Linus Torvalds | 1da177e | 2005-04-16 15:20:36 -0700 | [diff] [blame] | 37 |  | 
| Thomas Gleixner | 0655d7c | 2007-07-21 17:10:16 +0200 | [diff] [blame^] | 38 | #define HPET_ID_VENDOR_8086	0x8086 | 
|  | 39 |  | 
|  | 40 | #define HPET_CFG_ENABLE		0x001 | 
|  | 41 | #define HPET_CFG_LEGACY		0x002 | 
| Linus Torvalds | 1da177e | 2005-04-16 15:20:36 -0700 | [diff] [blame] | 42 | #define	HPET_LEGACY_8254	2 | 
|  | 43 | #define	HPET_LEGACY_RTC		8 | 
|  | 44 |  | 
| Thomas Gleixner | 0655d7c | 2007-07-21 17:10:16 +0200 | [diff] [blame^] | 45 | #define HPET_TN_LEVEL		0x0002 | 
|  | 46 | #define HPET_TN_ENABLE		0x0004 | 
|  | 47 | #define HPET_TN_PERIODIC	0x0008 | 
|  | 48 | #define HPET_TN_PERIODIC_CAP	0x0010 | 
|  | 49 | #define HPET_TN_64BIT_CAP	0x0020 | 
|  | 50 | #define HPET_TN_SETVAL		0x0040 | 
|  | 51 | #define HPET_TN_32BIT		0x0100 | 
|  | 52 | #define HPET_TN_ROUTE		0x3e00 | 
|  | 53 | #define HPET_TN_FSB		0x4000 | 
|  | 54 | #define HPET_TN_FSB_CAP		0x8000 | 
|  | 55 | #define HPET_TN_ROUTE_SHIFT	9 | 
| Linus Torvalds | 1da177e | 2005-04-16 15:20:36 -0700 | [diff] [blame] | 56 |  | 
| Linus Torvalds | 1da177e | 2005-04-16 15:20:36 -0700 | [diff] [blame] | 57 | /* Max HPET Period is 10^8 femto sec as in HPET spec */ | 
| Thomas Gleixner | 0655d7c | 2007-07-21 17:10:16 +0200 | [diff] [blame^] | 58 | #define HPET_MAX_PERIOD		100000000UL | 
| Linus Torvalds | 1da177e | 2005-04-16 15:20:36 -0700 | [diff] [blame] | 59 | /* | 
|  | 60 | * Min HPET period is 10^5 femto sec just for safety. If it is less than this, | 
|  | 61 | * then 32 bit HPET counter wrapsaround in less than 0.5 sec. | 
|  | 62 | */ | 
| Thomas Gleixner | 0655d7c | 2007-07-21 17:10:16 +0200 | [diff] [blame^] | 63 | #define HPET_MIN_PERIOD		100000UL | 
| Linus Torvalds | 1da177e | 2005-04-16 15:20:36 -0700 | [diff] [blame] | 64 |  | 
| Thomas Gleixner | 0655d7c | 2007-07-21 17:10:16 +0200 | [diff] [blame^] | 65 | /* hpet memory map physical address */ | 
|  | 66 | extern unsigned long hpet_address; | 
| Thomas Gleixner | e9e2cdb | 2007-02-16 01:28:04 -0800 | [diff] [blame] | 67 | extern int is_hpet_enabled(void); | 
| Linus Torvalds | 1da177e | 2005-04-16 15:20:36 -0700 | [diff] [blame] | 68 | extern int hpet_enable(void); | 
| Linus Torvalds | 1da177e | 2005-04-16 15:20:36 -0700 | [diff] [blame] | 69 |  | 
|  | 70 | #ifdef CONFIG_HPET_EMULATE_RTC | 
| Thomas Gleixner | 0655d7c | 2007-07-21 17:10:16 +0200 | [diff] [blame^] | 71 |  | 
|  | 72 | #include <linux/interrupt.h> | 
|  | 73 |  | 
| Linus Torvalds | 1da177e | 2005-04-16 15:20:36 -0700 | [diff] [blame] | 74 | extern int hpet_mask_rtc_irq_bit(unsigned long bit_mask); | 
|  | 75 | extern int hpet_set_rtc_irq_bit(unsigned long bit_mask); | 
| Thomas Gleixner | 0655d7c | 2007-07-21 17:10:16 +0200 | [diff] [blame^] | 76 | extern int hpet_set_alarm_time(unsigned char hrs, unsigned char min, | 
|  | 77 | unsigned char sec); | 
| Linus Torvalds | 1da177e | 2005-04-16 15:20:36 -0700 | [diff] [blame] | 78 | extern int hpet_set_periodic_freq(unsigned long freq); | 
|  | 79 | extern int hpet_rtc_dropped_irq(void); | 
|  | 80 | extern int hpet_rtc_timer_init(void); | 
| David Howells | 7d12e78 | 2006-10-05 14:55:46 +0100 | [diff] [blame] | 81 | extern irqreturn_t hpet_rtc_interrupt(int irq, void *dev_id); | 
| Thomas Gleixner | 0655d7c | 2007-07-21 17:10:16 +0200 | [diff] [blame^] | 82 |  | 
| Linus Torvalds | 1da177e | 2005-04-16 15:20:36 -0700 | [diff] [blame] | 83 | #endif /* CONFIG_HPET_EMULATE_RTC */ | 
| Thomas Gleixner | e9e2cdb | 2007-02-16 01:28:04 -0800 | [diff] [blame] | 84 |  | 
|  | 85 | #else | 
|  | 86 |  | 
|  | 87 | static inline int hpet_enable(void) { return 0; } | 
|  | 88 |  | 
| Linus Torvalds | 1da177e | 2005-04-16 15:20:36 -0700 | [diff] [blame] | 89 | #endif /* CONFIG_HPET_TIMER */ | 
|  | 90 | #endif /* _I386_HPET_H */ |