diff options
Diffstat (limited to 'kern')
-rw-r--r-- | kern/boot_script.c | 8 | ||||
-rw-r--r-- | kern/bootstrap.c | 18 | ||||
-rw-r--r-- | kern/experimental.srv | 3 | ||||
-rw-r--r-- | kern/ipc_kobject.c | 3 | ||||
-rw-r--r-- | kern/startup.c | 4 |
5 files changed, 36 insertions, 0 deletions
diff --git a/kern/boot_script.c b/kern/boot_script.c index b2ae901c..503a18de 100644 --- a/kern/boot_script.c +++ b/kern/boot_script.c @@ -88,12 +88,20 @@ prompt_resume_task (struct cmd *cmd, const long *val) return boot_script_prompt_task_resume (cmd); } +/* Create an initial ramdisk */ +static int +ramdisk_create (struct cmd *cmd, long *val) +{ + return boot_script_ramdisk_create (cmd, (char **) val); +} + /* List of builtin symbols. */ static struct sym builtin_symbols[] = { { "task-create", VAL_FUNC, (long) create_task, VAL_TASK, 0 }, { "task-resume", VAL_FUNC, (long) resume_task, VAL_NONE, 1 }, { "prompt-task-resume", VAL_FUNC, (long) prompt_resume_task, VAL_NONE, 1 }, + { "ramdisk-create", VAL_FUNC, (long) ramdisk_create, VAL_STR, 0 }, }; #define NUM_BUILTIN (sizeof (builtin_symbols) / sizeof (builtin_symbols[0])) diff --git a/kern/bootstrap.c b/kern/bootstrap.c index 8b88d17d..d0afa1ef 100644 --- a/kern/bootstrap.c +++ b/kern/bootstrap.c @@ -51,6 +51,7 @@ #include <vm/vm_user.h> #include <vm/pmap.h> #include <device/device_port.h> +#include <device/ramdisk.h> #if MACH_KDB #include <machine/db_machdep.h> @@ -817,6 +818,23 @@ boot_script_free (void *ptr, unsigned int size) } int +boot_script_ramdisk_create (struct cmd *cmd, char **name) +{ + struct multiboot_module *mod = cmd->hook; + vm_size_t size = mod->mod_end - mod->mod_start; + kern_return_t rc; + int no; + + rc = ramdisk_create (size, (void *) phystokv (mod->mod_start), &no); + if (rc != KERN_SUCCESS) + return BOOT_SCRIPT_MACH_ERROR; + + *name = boot_script_malloc (RAMDISK_NAMESZ); + sprintf(*name, RAMDISK_NAME "%d", no); + return 0; +} + +int boot_script_task_create (struct cmd *cmd) { kern_return_t rc = task_create_kernel(TASK_NULL, FALSE, &cmd->task); diff --git a/kern/experimental.srv b/kern/experimental.srv new file mode 100644 index 00000000..2ccfd783 --- /dev/null +++ b/kern/experimental.srv @@ -0,0 +1,3 @@ +#define KERNEL_SERVER 1 + +#include <mach/experimental.defs> diff --git a/kern/ipc_kobject.c b/kern/ipc_kobject.c index 709ec9ec..c65458ba 100644 --- a/kern/ipc_kobject.c +++ b/kern/ipc_kobject.c @@ -56,6 +56,7 @@ #include <device/device_pager.server.h> #include <kern/mach4.server.h> #include <kern/gnumach.server.h> +#include <kern/experimental.server.h> #if MACH_DEBUG #include <kern/mach_debug.server.h> @@ -159,6 +160,7 @@ ipc_kobject_server(request) * to perform the kernel function */ { + extern mig_routine_t experimental_server_routine(); check_simple_locks(); if ((routine = mach_server_routine(&request->ikm_header)) != 0 || (routine = mach_port_server_routine(&request->ikm_header)) != 0 @@ -170,6 +172,7 @@ ipc_kobject_server(request) #endif /* MACH_DEBUG */ || (routine = mach4_server_routine(&request->ikm_header)) != 0 || (routine = gnumach_server_routine(&request->ikm_header)) != 0 + || (routine = experimental_server_routine(&request->ikm_header)) != 0 #if MACH_MACHINE_ROUTINES || (routine = MACHINE_SERVER_ROUTINE(&request->ikm_header)) != 0 #endif /* MACH_MACHINE_ROUTINES */ diff --git a/kern/startup.c b/kern/startup.c index 19bd7bf6..fa9571c1 100644 --- a/kern/startup.c +++ b/kern/startup.c @@ -79,6 +79,7 @@ boolean_t reboot_on_panic = TRUE; /* XX */ extern char *kernel_cmdline; +extern void intr_thread(); /* * Running in virtual memory, on the interrupt stack. @@ -223,6 +224,9 @@ void start_kernel_threads(void) (void) kernel_thread(kernel_task, reaper_thread, (char *) 0); (void) kernel_thread(kernel_task, swapin_thread, (char *) 0); (void) kernel_thread(kernel_task, sched_thread, (char *) 0); +#ifndef MACH_XEN + (void) kernel_thread(kernel_task, intr_thread, (char *)0); +#endif /* MACH_XEN */ #if NCPUS > 1 /* |