From f07a4c844da9f0ecae5bbee1ab94be56505f26f7 Mon Sep 17 00:00:00 2001 From: Thomas Bushnell Date: Tue, 25 Feb 1997 21:28:37 +0000 Subject: Initial source --- ipc/ipc_init.c | 139 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 139 insertions(+) create mode 100644 ipc/ipc_init.c (limited to 'ipc/ipc_init.c') diff --git a/ipc/ipc_init.c b/ipc/ipc_init.c new file mode 100644 index 00000000..29b08190 --- /dev/null +++ b/ipc/ipc_init.c @@ -0,0 +1,139 @@ +/* + * Mach Operating System + * Copyright (c) 1991,1990,1989 Carnegie Mellon University. + * Copyright (c) 1993,1994 The University of Utah and + * the Computer Systems Laboratory (CSL). + * All rights reserved. + * + * Permission to use, copy, modify and distribute this software and its + * documentation is hereby granted, provided that both the copyright + * notice and this permission notice appear in all copies of the + * software, derivative works or modified versions, and any portions + * thereof, and that both notices appear in supporting documentation. + * + * CARNEGIE MELLON, THE UNIVERSITY OF UTAH AND CSL ALLOW FREE USE OF + * THIS SOFTWARE IN ITS "AS IS" CONDITION, AND DISCLAIM ANY LIABILITY + * OF ANY KIND FOR ANY DAMAGES WHATSOEVER RESULTING FROM THE USE OF + * THIS SOFTWARE. + * + * Carnegie Mellon requests users of this software to return to + * + * Software Distribution Coordinator or Software.Distribution@CS.CMU.EDU + * School of Computer Science + * Carnegie Mellon University + * Pittsburgh PA 15213-3890 + * + * any improvements or extensions that they make and grant Carnegie Mellon + * the rights to redistribute these changes. + */ +/* + * File: ipc/ipc_init.c + * Author: Rich Draves + * Date: 1989 + * + * Functions to initialize the IPC system. + */ + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + + + +vm_map_t ipc_kernel_map; +vm_size_t ipc_kernel_map_size = 1024 * 1024; + +int ipc_space_max = SPACE_MAX; +int ipc_tree_entry_max = ITE_MAX; +int ipc_port_max = PORT_MAX; +int ipc_pset_max = SET_MAX; + +/* + * Routine: ipc_bootstrap + * Purpose: + * Initialization needed before the kernel task + * can be created. + */ + +void +ipc_bootstrap(void) +{ + kern_return_t kr; + + ipc_port_multiple_lock_init(); + + ipc_port_timestamp_lock_init(); + ipc_port_timestamp_data = 0; + + ipc_space_zone = zinit(sizeof(struct ipc_space), + ipc_space_max * sizeof(struct ipc_space), + sizeof(struct ipc_space), + IPC_ZONE_TYPE, "ipc spaces"); + + ipc_tree_entry_zone = + zinit(sizeof(struct ipc_tree_entry), + ipc_tree_entry_max * sizeof(struct ipc_tree_entry), + sizeof(struct ipc_tree_entry), + IPC_ZONE_TYPE, "ipc tree entries"); + + ipc_object_zones[IOT_PORT] = + zinit(sizeof(struct ipc_port), + ipc_port_max * sizeof(struct ipc_port), + sizeof(struct ipc_port), + ZONE_EXHAUSTIBLE, "ipc ports"); + + ipc_object_zones[IOT_PORT_SET] = + zinit(sizeof(struct ipc_pset), + ipc_pset_max * sizeof(struct ipc_pset), + sizeof(struct ipc_pset), + IPC_ZONE_TYPE, "ipc port sets"); + + /* create special spaces */ + + kr = ipc_space_create_special(&ipc_space_kernel); + assert(kr == KERN_SUCCESS); + + kr = ipc_space_create_special(&ipc_space_reply); + assert(kr == KERN_SUCCESS); + +#if NORMA_IPC + kr = ipc_space_create_special(&ipc_space_remote); + assert(kr == KERN_SUCCESS); +#endif NORMA_IPC + + /* initialize modules with hidden data structures */ + + ipc_table_init(); + ipc_notify_init(); + ipc_hash_init(); + ipc_marequest_init(); +} + +/* + * Routine: ipc_init + * Purpose: + * Final initialization of the IPC system. + */ + +void +ipc_init() +{ + vm_offset_t min, max; + + ipc_kernel_map = kmem_suballoc(kernel_map, &min, &max, + ipc_kernel_map_size, TRUE); + + ipc_host_init(); +} -- cgit v1.2.3