[SeaBIOS] [PATCH] Abstract reset call (and possible 16bit mode switch) into reset() function.
Kevin O'Connor
kevin at koconnor.net
Wed Jun 11 20:54:48 CEST 2014
Signed-off-by: Kevin O'Connor <kevin at koconnor.net>
---
src/boot.c | 5 +----
src/kbd.c | 2 +-
src/stacks.c | 10 ++++++++++
src/stacks.h | 1 +
src/util.h | 3 ---
5 files changed, 13 insertions(+), 8 deletions(-)
diff --git a/src/boot.c b/src/boot.c
index 9be8b2a..5837ad0 100644
--- a/src/boot.c
+++ b/src/boot.c
@@ -689,10 +689,7 @@ boot_fail(void)
yield_toirq();
}
printf("Rebooting.\n");
- struct bregs br;
- memset(&br, 0, sizeof(br));
- br.code = SEGOFF(SEG_BIOS, (u32)reset_vector);
- farcall16big(&br);
+ reset();
}
// Determine next boot method and attempt a boot using it.
diff --git a/src/kbd.c b/src/kbd.c
index 33a95a3..3677a12 100644
--- a/src/kbd.c
+++ b/src/kbd.c
@@ -502,7 +502,7 @@ __process_key(u8 scancode)
== (KF0_CTRLACTIVE|KF0_ALTACTIVE))) {
// Ctrl+alt+del - reset machine.
SET_BDA(soft_reset_flag, 0x1234);
- reset_vector();
+ reset();
}
if (scancode >= ARRAY_SIZE(scan_to_scanascii)) {
dprintf(1, "KBD: int09h_handler(): unknown scancode read: 0x%02x!\n"
diff --git a/src/stacks.c b/src/stacks.c
index beccc0f..df719fd 100644
--- a/src/stacks.c
+++ b/src/stacks.c
@@ -238,6 +238,16 @@ __call16_int(struct bregs *callregs, u16 offset)
farcall16(callregs);
}
+// Reset the machine
+void
+reset(void)
+{
+ extern void reset_vector(void) __noreturn;
+ if (!MODESEGMENT)
+ call16(0, 0, reset_vector);
+ reset_vector();
+}
+
/****************************************************************
* Threads
diff --git a/src/stacks.h b/src/stacks.h
index d8584f2..22fb943 100644
--- a/src/stacks.h
+++ b/src/stacks.h
@@ -17,6 +17,7 @@ inline void __call16_int(struct bregs *callregs, u16 offset);
extern void irq_trampoline_ ##nr (); \
__call16_int((callregs), (u32)&irq_trampoline_ ##nr ); \
} while (0)
+void reset(void);
extern struct thread_info MainThread;
struct thread_info *getCurThread(void);
void yield(void);
diff --git a/src/util.h b/src/util.h
index 8b078e8..ed90e03 100644
--- a/src/util.h
+++ b/src/util.h
@@ -217,9 +217,6 @@ void reloc_preinit(void *f, void *arg);
// resume.c
extern int HaveRunPost;
-// romlayout.S
-void reset_vector(void) __noreturn;
-
// serial.c
void serial_setup(void);
void lpt_setup(void);
--
1.9.3
More information about the SeaBIOS
mailing list