diff options
author | Bernhard Walle <bwalle@suse.de> | 2008-01-30 07:33:28 -0500 |
---|---|---|
committer | Ingo Molnar <mingo@elte.hu> | 2008-01-30 07:33:28 -0500 |
commit | 1bdbdaacf774f2979ed4cb0c4a4316c9e578c897 (patch) | |
tree | 9fd0b72aec27c32288f016790b899a05c25a8f69 /include | |
parent | 8b2f7ffffe7f247ba237322fee78c528ba88f16b (diff) |
x86, rtc: make CONFIG_HPET_EMULATE_RTC usable from modules
enabled, then interrupts don't work for the rtc-cmos driver which results in
RTC_AIE*, RTC_PIE* and RTC_ALM being unusable. This affects hwclock from
util-linux-ng at least on i386 since that uses RTC_PIE_ON. (For x86-64, a
polling method is used for unknown reasons.)
This patch series now
1. export the functions from arch/x86/kernel/hpet.c that the old char/rtc
driver uses to work around that problem,
2. makes it possible to compile the old rtc driver as module, while still
having CONFIG_HPET_EMULATE_RTC enabled and
3. makes use of the exported functions in (1) in the new rtc-cmos driver.
This patch:
This patch makes the RTC emulation functions in arch/x86/kernel/hpet.c usable
for kernel modules. It
- exports the functions (EXPORT_SYMBOL_GPL()),
- adds an interface to register the interrupt callback function
instead of using only a fixed callback function and
- replaces the rtc_get_rtc_time() function which depends on
CONFIG_RTC with a call to get_rtc_time() which is defined in
include/asm-generic/rtc.h.
The only dependency to CONFIG_RTC is the call to rtc_interrupt() which is
removed by the next patch. After this, there's no (code) dependency of
this functions to CONFIG_RTC=y any more.
Signed-off-by: Bernhard Walle <bwalle@suse.de>
Cc: Alessandro Zummo <a.zummo@towertech.it>
Cc: David Brownell <david-b@pacbell.net>
Cc: Andi Kleen <ak@suse.de>
Cc: john stultz <johnstul@us.ibm.com>
Cc: Robert Picco <Robert.Picco@hp.com>
Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
Signed-off-by: Ingo Molnar <mingo@elte.hu>
Signed-off-by: Thomas Gleixner <tglx@linutronix.de>
Diffstat (limited to 'include')
-rw-r--r-- | include/asm-x86/hpet.h | 3 |
1 files changed, 3 insertions, 0 deletions
diff --git a/include/asm-x86/hpet.h b/include/asm-x86/hpet.h index 624f600f7161..6a9b4ac59bf7 100644 --- a/include/asm-x86/hpet.h +++ b/include/asm-x86/hpet.h | |||
@@ -69,6 +69,7 @@ extern void force_hpet_resume(void); | |||
69 | 69 | ||
70 | #include <linux/interrupt.h> | 70 | #include <linux/interrupt.h> |
71 | 71 | ||
72 | typedef irqreturn_t (*rtc_irq_handler)(int interrupt, void *cookie); | ||
72 | extern int hpet_mask_rtc_irq_bit(unsigned long bit_mask); | 73 | extern int hpet_mask_rtc_irq_bit(unsigned long bit_mask); |
73 | extern int hpet_set_rtc_irq_bit(unsigned long bit_mask); | 74 | extern int hpet_set_rtc_irq_bit(unsigned long bit_mask); |
74 | extern int hpet_set_alarm_time(unsigned char hrs, unsigned char min, | 75 | extern int hpet_set_alarm_time(unsigned char hrs, unsigned char min, |
@@ -77,6 +78,8 @@ extern int hpet_set_periodic_freq(unsigned long freq); | |||
77 | extern int hpet_rtc_dropped_irq(void); | 78 | extern int hpet_rtc_dropped_irq(void); |
78 | extern int hpet_rtc_timer_init(void); | 79 | extern int hpet_rtc_timer_init(void); |
79 | extern irqreturn_t hpet_rtc_interrupt(int irq, void *dev_id); | 80 | extern irqreturn_t hpet_rtc_interrupt(int irq, void *dev_id); |
81 | extern int hpet_register_irq_handler(rtc_irq_handler handler); | ||
82 | extern void hpet_unregister_irq_handler(rtc_irq_handler handler); | ||
80 | 83 | ||
81 | #endif /* CONFIG_HPET_EMULATE_RTC */ | 84 | #endif /* CONFIG_HPET_EMULATE_RTC */ |
82 | 85 | ||