From c68ffdc4fa75f9ed29ccdea16c9a910442e2fc20 Mon Sep 17 00:00:00 2001 From: Keir Fraser Date: Mon, 9 Jun 2008 13:26:30 +0100 Subject: minios: add proper shutdown facilities Signed-off-by: Samuel Thibault --- extras/mini-os/arch/ia64/common.c | 6 ++++++ extras/mini-os/arch/ia64/time.c | 6 ++++++ extras/mini-os/arch/x86/setup.c | 10 ++++++++++ extras/mini-os/arch/x86/time.c | 9 ++++++++- extras/mini-os/arch/x86/traps.c | 4 ++++ 5 files changed, 34 insertions(+), 1 deletion(-) (limited to 'extras/mini-os/arch') diff --git a/extras/mini-os/arch/ia64/common.c b/extras/mini-os/arch/ia64/common.c index cd4cec1e20..c65f0a0d07 100644 --- a/extras/mini-os/arch/ia64/common.c +++ b/extras/mini-os/arch/ia64/common.c @@ -235,6 +235,12 @@ arch_init(start_info_t *si) initialized = 1; } +void +arch_fini(void) +{ + /* TODO */ +} + void arch_print_info(void) { diff --git a/extras/mini-os/arch/ia64/time.c b/extras/mini-os/arch/ia64/time.c index bbaa6b1864..baf9096330 100644 --- a/extras/mini-os/arch/ia64/time.c +++ b/extras/mini-os/arch/ia64/time.c @@ -280,3 +280,9 @@ init_time(void) ia64_set_itm(new); ia64_srlz_d(); } + +void +fini_time(void) +{ + /* TODO */ +} diff --git a/extras/mini-os/arch/x86/setup.c b/extras/mini-os/arch/x86/setup.c index ca97131315..3671fee332 100644 --- a/extras/mini-os/arch/x86/setup.c +++ b/extras/mini-os/arch/x86/setup.c @@ -99,6 +99,16 @@ arch_init(start_info_t *si) } +void +arch_fini(void) +{ +#ifdef __i386__ + HYPERVISOR_set_callbacks(0, 0, 0, 0); +#else + HYPERVISOR_set_callbacks(0, 0, 0); +#endif +} + void arch_print_info(void) { diff --git a/extras/mini-os/arch/x86/time.c b/extras/mini-os/arch/x86/time.c index d7b387f95f..4af0b89b94 100644 --- a/extras/mini-os/arch/x86/time.c +++ b/extras/mini-os/arch/x86/time.c @@ -222,10 +222,17 @@ static void timer_handler(evtchn_port_t ev, struct pt_regs *regs, void *ign) +static evtchn_port_t port; void init_time(void) { - evtchn_port_t port; printk("Initialising timer interface\n"); port = bind_virq(VIRQ_TIMER, &timer_handler, NULL); unmask_evtchn(port); } + +void fini_time(void) +{ + /* Clear any pending timer */ + HYPERVISOR_set_timer_op(0); + unbind_evtchn(port); +} diff --git a/extras/mini-os/arch/x86/traps.c b/extras/mini-os/arch/x86/traps.c index 5719f741e1..003ffb52b3 100644 --- a/extras/mini-os/arch/x86/traps.c +++ b/extras/mini-os/arch/x86/traps.c @@ -268,3 +268,7 @@ void trap_init(void) HYPERVISOR_set_trap_table(trap_table); } +void trap_fini(void) +{ + HYPERVISOR_set_trap_table(NULL); +} -- cgit v1.2.3