Remove prototypes for removed functions power_off(), reboot().
[pintos-anon] / src / threads / init.c
index 9815a2030749dcece5d2c4e378a5b79120d1d9b7..01eec1120c923804083b747367b4e1a621ea5e19 100644 (file)
@@ -11,6 +11,7 @@
 #include "devices/kbd.h"
 #include "devices/input.h"
 #include "devices/serial.h"
 #include "devices/kbd.h"
 #include "devices/input.h"
 #include "devices/serial.h"
+#include "devices/shutdown.h"
 #include "devices/timer.h"
 #include "devices/vga.h"
 #include "devices/rtc.h"
 #include "devices/timer.h"
 #include "devices/vga.h"
 #include "devices/rtc.h"
@@ -40,7 +41,7 @@
 size_t ram_pages;
 
 /* Page directory with kernel mappings only. */
 size_t ram_pages;
 
 /* Page directory with kernel mappings only. */
-uint32_t *base_page_dir;
+uint32_t *init_page_dir;
 
 #ifdef FILESYS
 /* -f: Format the file system? */
 
 #ifdef FILESYS
 /* -f: Format the file system? */
@@ -53,6 +54,9 @@ bool power_off_when_done;
 /* -r: Reboot after kernel tasks complete? */
 static bool reboot_when_done;
 
 /* -r: Reboot after kernel tasks complete? */
 static bool reboot_when_done;
 
+/* -ul: Maximum number of pages to put into palloc's user pool. */
+static size_t user_page_limit = SIZE_MAX;
+
 static void ram_init (void);
 static void paging_init (void);
 
 static void ram_init (void);
 static void paging_init (void);
 
@@ -61,9 +65,6 @@ static char **parse_options (char **argv);
 static void run_actions (char **argv);
 static void usage (void);
 
 static void run_actions (char **argv);
 static void usage (void);
 
-static void print_stats (void);
-
-
 int main (void) NO_RETURN;
 
 /* Pintos main program. */
 int main (void) NO_RETURN;
 
 /* Pintos main program. */
@@ -88,7 +89,7 @@ main (void)
   printf ("Pintos booting with %'zu kB RAM...\n", ram_pages * PGSIZE / 1024);
 
   /* Initialize memory system. */
   printf ("Pintos booting with %'zu kB RAM...\n", ram_pages * PGSIZE / 1024);
 
   /* Initialize memory system. */
-  palloc_init ();
+  palloc_init (user_page_limit);
   malloc_init ();
   paging_init ();
 
   malloc_init ();
   paging_init ();
 
@@ -126,10 +127,10 @@ main (void)
 
   /* Finish up. */
   if (reboot_when_done)
 
   /* Finish up. */
   if (reboot_when_done)
-    reboot ();
+    shutdown_reboot ();
 
   if (power_off_when_done)
 
   if (power_off_when_done)
-    power_off ();
+    shutdown_power_off ();
   thread_exit ();
 }
 \f
   thread_exit ();
 }
 \f
@@ -152,7 +153,7 @@ ram_init (void)
 
 /* Populates the base page directory and page table with the
    kernel virtual mapping, and then sets up the CPU to use the
 
 /* Populates the base page directory and page table with the
    kernel virtual mapping, and then sets up the CPU to use the
-   new page directory.  Points base_page_dir to the page
+   new page directory.  Points init_page_dir to the page
    directory it creates.
 
    At the time this function is called, the active page table
    directory it creates.
 
    At the time this function is called, the active page table
@@ -166,7 +167,7 @@ paging_init (void)
   size_t page;
   extern char _start, _end_kernel_text;
 
   size_t page;
   extern char _start, _end_kernel_text;
 
-  pd = base_page_dir = palloc_get_page (PAL_ASSERT | PAL_ZERO);
+  pd = init_page_dir = palloc_get_page (PAL_ASSERT | PAL_ZERO);
   pt = NULL;
   for (page = 0; page < ram_pages; page++) 
     {
   pt = NULL;
   for (page = 0; page < ram_pages; page++) 
     {
@@ -190,7 +191,7 @@ paging_init (void)
      new page tables immediately.  See [IA32-v2a] "MOV--Move
      to/from Control Registers" and [IA32-v3a] 3.7.5 "Base Address
      of the Page Directory". */
      new page tables immediately.  See [IA32-v2a] "MOV--Move
      to/from Control Registers" and [IA32-v3a] 3.7.5 "Base Address
      of the Page Directory". */
-  asm volatile ("movl %0, %%cr3" : : "r" (vtop (base_page_dir)));
+  asm volatile ("movl %0, %%cr3" : : "r" (vtop (init_page_dir)));
 }
 
 /* Breaks the kernel command line into words and returns them as
 }
 
 /* Breaks the kernel command line into words and returns them as
@@ -373,77 +374,5 @@ usage (void)
           "  -ul=COUNT          Limit user memory to COUNT pages.\n"
 #endif
           );
           "  -ul=COUNT          Limit user memory to COUNT pages.\n"
 #endif
           );
-  power_off ();
-}
-
-
-/* Reboots the machine we're running on. */
-void
-reboot (void)
-{
-    int i;
-
-    printf ("Rebooting...\n");
-
-    /* based on reboot.c code by Osamu Tomita <tomita@cinet.co.jp>
-     * See http://www.win.tue.nl/~aeb/linux/kbd/scancodes-11.html */
-    for (i = 0; i < 100; i++) {
-        int j;
-
-        /* Poll keyboard controller's status byte until 
-         * 'input buffer empty' is reported, so it's ok to write */
-        for (j = 0; j < 0x10000; j++) 
-          {
-            if ((inb (0x64) & 0x02) == 0)   
-              break;
-            timer_usleep (2);
-          }
-
-        timer_usleep (50);
-
-        /* Pulse bit 0 of the output port P2 of the keyboard controller. 
-         * This will reset the CPU. */
-        outb (0x64, 0xfe);
-        timer_usleep (50);
-    }
-}
-
-/* Powers down the machine we're running on,
-   as long as we're running on Bochs or QEMU. */
-void
-power_off (void) 
-{
-  const char s[] = "Shutdown";
-  const char *p;
-
-#ifdef FILESYS
-  filesys_done ();
-#endif
-
-  print_stats ();
-
-  printf ("Powering off...\n");
-  serial_flush ();
-
-  for (p = s; *p != '\0'; p++)
-    outb (0x8900, *p);
-  asm volatile ("cli; hlt" : : : "memory");
-  printf ("still running...\n");
-  for (;;);
-}
-
-/* Print statistics about Pintos execution. */
-static void
-print_stats (void) 
-{
-  timer_print_stats ();
-  thread_print_stats ();
-#ifdef FILESYS
-  disk_print_stats ();
-#endif
-  console_print_stats ();
-  kbd_print_stats ();
-#ifdef USERPROG
-  exception_print_stats ();
-#endif
+  shutdown_power_off ();
 }
 }