aboutsummaryrefslogtreecommitdiffstats
path: root/include
diff options
context:
space:
mode:
authorBernhard Walle <bwalle@suse.de>2008-01-30 07:33:28 -0500
committerIngo Molnar <mingo@elte.hu>2008-01-30 07:33:28 -0500
commit1bdbdaacf774f2979ed4cb0c4a4316c9e578c897 (patch)
tree9fd0b72aec27c32288f016790b899a05c25a8f69 /include
parent8b2f7ffffe7f247ba237322fee78c528ba88f16b (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.h3
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
72typedef irqreturn_t (*rtc_irq_handler)(int interrupt, void *cookie);
72extern int hpet_mask_rtc_irq_bit(unsigned long bit_mask); 73extern int hpet_mask_rtc_irq_bit(unsigned long bit_mask);
73extern int hpet_set_rtc_irq_bit(unsigned long bit_mask); 74extern int hpet_set_rtc_irq_bit(unsigned long bit_mask);
74extern int hpet_set_alarm_time(unsigned char hrs, unsigned char min, 75extern int hpet_set_alarm_time(unsigned char hrs, unsigned char min,
@@ -77,6 +78,8 @@ extern int hpet_set_periodic_freq(unsigned long freq);
77extern int hpet_rtc_dropped_irq(void); 78extern int hpet_rtc_dropped_irq(void);
78extern int hpet_rtc_timer_init(void); 79extern int hpet_rtc_timer_init(void);
79extern irqreturn_t hpet_rtc_interrupt(int irq, void *dev_id); 80extern irqreturn_t hpet_rtc_interrupt(int irq, void *dev_id);
81extern int hpet_register_irq_handler(rtc_irq_handler handler);
82extern 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