]> Zhao Yanbai Git Server - minix.git/commitdiff
kernel: mon_return cleanup
authorBen Gras <ben@minix3.org>
Wed, 25 Apr 2012 15:44:55 +0000 (17:44 +0200)
committerBen Gras <ben@minix3.org>
Wed, 25 Apr 2012 15:59:43 +0000 (17:59 +0200)
cleanup of boot monitor related code.

kernel/arch/i386/Makefile.inc
kernel/arch/i386/arch_system.c
kernel/arch/i386/do_int86.c [deleted file]
kernel/arch/i386/include/arch_proto.h
kernel/arch/i386/klib.S
kernel/arch/i386/mpx.S
kernel/glo.h
kernel/proto.h
kernel/system.c
kernel/system.h

index 407ea69b820ecef675c1a79a7cc0d64cbc44c811..2e13ff8859209ae38689abdf8cf0d69bcdc26f64 100644 (file)
@@ -6,7 +6,6 @@ HERE=${.CURDIR}/arch/${ARCH}
 .PATH: ${HERE}
 SRCS+= arch_do_vmctl.c \
        arch_clock.c \
-       do_int86.c \
        do_iopenable.c \
        do_readbios.c \
        do_sdevio.c \
index 8e1c0de0252712a4447c6174fa312d44135d3f80..fd732d6df8dbab57c71897ab09a41346a48b5758 100644 (file)
@@ -57,11 +57,6 @@ static void ser_dump_proc_cpu(void);
 static void ser_init(void);
 #endif
 
-__dead void arch_monitor(void)
-{
-       monitor();
-}
-
 #define     KBCMDP          4       /* kbd controller port (O) */
 #define      KBC_PULSE0     0xfe    /* pulse output bit 0 */
 #define      IO_KBD          0x060           /* 8042 Keyboard */
@@ -138,7 +133,6 @@ int cpu_has_tsc;
 
 __dead void arch_shutdown(int how)
 {
-       u16_t magic;
        vm_stop();
 
        /* Mask all interrupts, including the clock. */
@@ -171,44 +165,10 @@ __dead void arch_shutdown(int how)
 
 #if USE_BOOTPARAM
        if (how == RBT_DEFAULT) {
-               how = mon_return ? RBT_HALT : RBT_RESET;
-       }
-
-       if(how != RBT_RESET) {
-               /* return to boot monitor */
-
-               outb( INT_CTLMASK, 0);            
-               outb( INT2_CTLMASK, 0);
-        
-               /* Return to the boot monitor. Set
-                * the program if not already done.
-                */
-               if (how != RBT_MONITOR)
-                       arch_set_params("", 1);
-
-               if (mon_return)
-                       arch_monitor();
-
-               /* monitor command with no monitor: reset or poweroff 
-                * depending on the parameters
-                */
-               if (how == RBT_MONITOR) {
-                       how = RBT_RESET;
-               }
+               how = RBT_RESET;
        }
 
        switch (how) {
-               case RBT_REBOOT:
-               case RBT_RESET:
-                       /* Reset the system by forcing a processor shutdown. 
-                        * First stop the BIOS memory test by setting a soft
-                        * reset flag.
-                        */
-                       magic = STOP_MEM_CHECK;
-                       phys_copy(vir2phys(&magic), SOFT_RESET_FLAG_ADDR,
-                               SOFT_RESET_FLAG_SIZE);
-                       reset();
-                       NOT_REACHABLE;
 
                case RBT_HALT:
                        /* Poweroff without boot monitor */
@@ -221,11 +181,13 @@ __dead void arch_shutdown(int how)
                        NOT_REACHABLE;
 
                default:        
-                       /* Not possible! trigger panic */
-                       assert(how != RBT_MONITOR);
-                       assert(how != RBT_DEFAULT);
-                       assert(how < RBT_INVALID);
-                       panic("unexpected value for how: %d", how);
+               case RBT_REBOOT:
+               case RBT_RESET:
+                       /* Reset the system by forcing a processor shutdown. 
+                        * First stop the BIOS memory test by setting a soft
+                        * reset flag.
+                        */
+                       reset();
                        NOT_REACHABLE;
        }
 #else /* !USE_BOOTPARAM */
diff --git a/kernel/arch/i386/do_int86.c b/kernel/arch/i386/do_int86.c
deleted file mode 100644 (file)
index 3ed1c4b..0000000
+++ /dev/null
@@ -1,39 +0,0 @@
-/* The kernel call implemented in this file:
- *   m_type:   SYS_INT86
- *
- * The parameters for this kernel call are:
- *    m1_p1:   INT86_REG86     
- */
-
-#include "kernel/system.h"
-#include <minix/type.h>
-#include <minix/endpoint.h>
-#include <machine/int86.h>
-
-#include "arch_proto.h"
-
-struct reg86u reg86;
-
-/*===========================================================================*
- *                             do_int86                                             *
- *===========================================================================*/
-int do_int86(struct proc * caller, message * m_ptr)
-{
-  data_copy(caller->p_endpoint, (vir_bytes) m_ptr->INT86_REG86,
-       KERNEL, (vir_bytes) &reg86, sizeof(reg86));
-
-  int86();
-
-  /* Copy results back to the caller */
-  data_copy(KERNEL, (vir_bytes) &reg86,
-       caller->p_endpoint, (vir_bytes) m_ptr->INT86_REG86, sizeof(reg86));
-
-  /* The BIOS call eats interrupts. Call get_randomness to generate some
-   * entropy. Normally, get_randomness is called from an interrupt handler.
-   * Figuring out the exact source is too complicated. CLOCK_IRQ is normally
-   * not very random.
-   */
-  get_randomness(&krandom, CLOCK_IRQ);
-
-  return(OK);
-}
index 61b6a73e222bc9c5b7811335eb583ff0abfdae20..a19d98ec77d17ee015d2004e96440c784bd91b87 100644 (file)
@@ -76,7 +76,6 @@ void exception(struct exception_frame * frame);
 __dead void monitor(void);
 __dead void reset(void);
 __dead void x86_triplefault(void);
-void int86(void);
 reg_t read_cr0(void);
 reg_t read_cr2(void);
 void write_cr0(unsigned long value);
index 648c5cb0aaf2f735081f88ddc313621f5d4c7a68..55bf9b2c9e73d250af48ad3629de5904d009e0a5 100644 (file)
  * kernel.
  */
 
-/*
- * The routines only guarantee to preserve the registers the C compiler 
- * expects to be preserved (ebx, esi, edi, ebp, esp, segment registers, and 
- * direction bit in the flags). 
- */
-
-/*===========================================================================*/
-/*                             monitor                                      */
-/*===========================================================================*/
-/* PUBLIC void monitor(); */
-/* exit Minix and return to the monitor */
-ENTRY(monitor)
-       movl    _C_LABEL(mon_sp), %esp  /* restore monitor stack pointer */
-       movw    $SS_SELECTOR, %dx       /* monitor data segment */
-       mov     %dx, %ds
-       mov     %dx, %es
-       mov     %dx, %fs
-       mov     %dx, %gs
-       mov     %dx, %ss
-       pop     %edi
-       pop     %esi
-       pop     %ebp
-       lretw   /* return to the monitor */
-
-
-/*===========================================================================*/
-/*                             int86                                        */
-/*===========================================================================*/
-/* PUBLIC void int86(); */
-/* let the monitor make an 8086 interrupt call */
-ENTRY(int86)
-       cmpb    $0, _C_LABEL(mon_return)        /* is the monitor there? */
-       jne     0f
-       movb    $0x01, %ah      /* an int 13 error seems appropriate */
-       movb    %ah, _C_LABEL(reg86)+0  /* reg86.w.f = 1 (set carry flag) */
-       movb    %ah, _C_LABEL(reg86)+13 /* reg86.b.ah = 0x01 = "invalid command" */
-       ret
-0:
-       push    %ebp    /* save C registers */
-       push    %esi
-       push    %edi
-       push    %ebx
-       pushf   /* save flags */
-       cli     /* no interruptions */
-
-       inb     $INT2_CTLMASK
-       movb    %al, %ah
-       inb     $INT_CTLMASK
-       push    %eax    /* save interrupt masks */
-       movl    _C_LABEL(irq_use), %eax /* map of in-use IRQ's */
-       and     $~(1<<CLOCK_IRQ), %eax  /* keep the clock ticking */
-       outb    $INT_CTLMASK    /* enable all unused IRQ's and vv. */
-       movb    %ah, %al
-       outb    $INT2_CTLMASK
-
-       mov     $SS_SELECTOR, %eax      /* monitor data segment */
-       mov     %ax, %ss
-       xchgl   _C_LABEL(mon_sp), %esp  /* switch stacks */
-       push    _C_LABEL(reg86)+36      /* parameters used in INT call */
-       push    _C_LABEL(reg86)+32
-       push    _C_LABEL(reg86)+28
-       push    _C_LABEL(reg86)+24
-       push    _C_LABEL(reg86)+20
-       push    _C_LABEL(reg86)+16
-       push    _C_LABEL(reg86)+12
-       push    _C_LABEL(reg86)+8
-       push    _C_LABEL(reg86)+4
-       push    _C_LABEL(reg86)+0
-       mov     %ax, %ds        /* remaining data selectors */
-       mov     %ax, %es
-       mov     %ax, %fs
-       mov     %ax, %gs
-       push    %cs
-       push    $return /* kernel return address and selector */
-        ljmpw    *20+2*4+10*4+2*4(%esp)
-return:
-       pop     _C_LABEL(reg86)+0
-       pop     _C_LABEL(reg86)+4
-       pop     _C_LABEL(reg86)+8
-       pop     _C_LABEL(reg86)+12
-       pop     _C_LABEL(reg86)+16
-       pop     _C_LABEL(reg86)+20
-       pop     _C_LABEL(reg86)+24
-       pop     _C_LABEL(reg86)+28
-       pop     _C_LABEL(reg86)+32
-       pop     _C_LABEL(reg86)+36
-       lgdt    _C_LABEL(gdt)+GDT_SELECTOR /* reload global descriptor table */
-        ljmp    $CS_SELECTOR, $csinit
-csinit:
-       mov     $DS_SELECTOR, %eax
-       mov     %ax, %ds
-       mov     %ax, %es
-       mov     %ax, %fs
-       mov     %ax, %gs
-       mov     %ax, %ss
-       xchgl   _C_LABEL(mon_sp), %esp  /* unswitch stacks */
-       lidt    _C_LABEL(gdt)+IDT_SELECTOR /* reload interrupt descriptor table */
-
-       pop     %eax
-       outb    $INT_CTLMASK    /* restore interrupt masks */
-       movb    %ah, %al
-       outb    $INT2_CTLMASK
-
-6:
-       addl    %ecx, _C_LABEL(lost_ticks)      /* record lost clock ticks */
-
-       popf    /* restore flags */
-       pop     %ebx    /* restore C registers */
-       pop     %edi
-       pop     %esi
-       pop     %ebp
-       ret
-
-
 ENTRY(__main)
        ret
 
index 13ed040095786b89dcf429218504fe6b152ecbde..89c0d86597693c33e34186cf2e64594e4833da5d 100644 (file)
@@ -95,12 +95,6 @@ kernel_init: /* after pre-init*/
        mov     %esp, %ebp
        push    %esi
        push    %edi
-       cmp     $0, 4(%ebp)     /* monitor return vector is */
-       je      noret   /* nonzero if return possible */
-       incl    _C_LABEL(mon_return)
-noret:
-       movl    %esp, _C_LABEL(mon_sp) /* save stack pointer for later return */
-
 /* Copy the monitor global descriptor table to the address space of kernel and */
 /* switch over to it.  Prot_init() can then update it with immediate effect. */
 
index a0deadf212ee6a1292b6c572f6a40b21bc8cdbc7..bb0ef72356f69ec31cc22ad649e4323f950ddd38 100644 (file)
@@ -40,8 +40,6 @@ EXTERN int irq_use;                           /* map of all in-use irq's */
 EXTERN u32_t system_hz;                                /* HZ value */
 
 /* Miscellaneous. */
-EXTERN reg_t mon_sp;                   /* boot monitor stack */
-EXTERN int mon_return;                 /* true if we can return to monitor */
 EXTERN int do_serial_debug;
 EXTERN int serial_debug_baud;
 EXTERN time_t boottime;
index 19eb2f52aace9bf7c469ef3759c178de6af31ab8..4a61bbb0bd936784e7ffeec2c5f5daefa8e793df 100644 (file)
@@ -186,7 +186,6 @@ void fpu_init(void);
 int is_fpu(void);
 void ser_putc(char);
 __dead void arch_shutdown(int);
-__dead void arch_monitor(void);
 void restore_user_context(struct proc * p);
 void read_tsc(u32_t *high, u32_t *low);
 int arch_init_profile_clock(u32_t freq);
index 85b3b44d99b7e22227a35e67300d578c35c46480..2b08d4cfec3e43ee621cc4b55561161b15571ade 100644 (file)
@@ -253,7 +253,6 @@ void system_init(void)
 
   /* i386-specific. */
 #if _MINIX_CHIP == _CHIP_INTEL
-  map(SYS_INT86, do_int86);            /* real-mode BIOS calls */ 
   map(SYS_READBIOS, do_readbios);      /* read from BIOS locations */
   map(SYS_IOPENABLE, do_iopenable);    /* Enable I/O */
   map(SYS_SDEVIO, do_sdevio);          /* phys_insb, _insw, _outsb, _outsw */
index 5a1fa7d335e4e7961b93c34c8ed518bfb24d958c..59c9ef31fe0a36259bd8276309594f01f7790be6 100644 (file)
@@ -132,8 +132,6 @@ int do_vdevio(struct proc * caller, message *m_ptr);
 #define do_vdevio NULL
 #endif
 
-int do_int86(struct proc * caller, message *m_ptr);
-
 int do_sdevio(struct proc * caller, message *m_ptr);
 #if ! USE_SDEVIO
 #define do_sdevio NULL