summaryrefslogtreecommitdiff
path: root/kern
diff options
context:
space:
mode:
authorDamien Zammit <damien@zamaudio.com>2019-11-11 20:35:17 +1100
committerDamien Zammit <damien@zamaudio.com>2019-11-11 20:42:51 +1100
commitaf33188fc5a13ad7ad8e6160e9bc1884a8d4af29 (patch)
treeff740bbfee86a4ad39cd28292b5114763e9c2dd3 /kern
parente45601b0780b2c81a6448cdafd952cb98112b9f4 (diff)
deb base
Diffstat (limited to 'kern')
-rw-r--r--kern/boot_script.c8
-rw-r--r--kern/bootstrap.c18
-rw-r--r--kern/experimental.srv3
-rw-r--r--kern/ipc_kobject.c3
-rw-r--r--kern/startup.c4
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
/*