]> xenbits.xensource.com Git - seabios.git/commitdiff
Abstract reset call (and possible 16bit mode switch) into reset() function.
authorKevin O'Connor <kevin@koconnor.net>
Fri, 6 Jun 2014 17:49:33 +0000 (13:49 -0400)
committerKevin O'Connor <kevin@koconnor.net>
Fri, 6 Jun 2014 17:49:33 +0000 (13:49 -0400)
Signed-off-by: Kevin O'Connor <kevin@koconnor.net>
src/boot.c
src/kbd.c
src/stacks.c
src/stacks.h
src/util.h

index 9be8b2a2e3e00c8e0f4a673befdfb97294975fc3..5837ad01a168ac89f417793ce014bf69009ea4f2 100644 (file)
@@ -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.
index 33a95a398feb935593d9763c32596029427d21c1..3677a12c3f49a1cb34e3306e88760d47033fe109 100644 (file)
--- 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"
index beccc0fa645c14aa3e9428df4f72717987bf3172..df719fd81a88de3ca3e032cfc62218d2c70ad777 100644 (file)
@@ -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
index d8584f22fa1fb3610f37903d4b0b6ff549bfd78d..22fb9439e20ee7b33d15f018a44e92a0d934b6a6 100644 (file)
@@ -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);
index 8b078e841bc03022563ac320a4e16942ae0bb809..ed90e03cf4e8ff4ea2ac5fc8949981c86144e9b3 100644 (file)
@@ -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);