X-Git-Url: https://git.saurik.com/apple/xnu.git/blobdiff_plain/1c79356b52d46aa6b508fb032f5ae709b1f2897b..5d5c5d0d5b79ade9a973d55186ffda2638ba2b6e:/osfmk/ipc/ipc_table.h diff --git a/osfmk/ipc/ipc_table.h b/osfmk/ipc/ipc_table.h index 0fe414ca9..cab7be75f 100644 --- a/osfmk/ipc/ipc_table.h +++ b/osfmk/ipc/ipc_table.h @@ -1,93 +1,35 @@ /* - * Copyright (c) 2000 Apple Computer, Inc. All rights reserved. + * Copyright (c) 2000-2004 Apple Computer, Inc. All rights reserved. * - * @APPLE_LICENSE_HEADER_START@ - * - * The contents of this file constitute Original Code as defined in and - * are subject to the Apple Public Source License Version 1.1 (the - * "License"). You may not use this file except in compliance with the - * License. Please obtain a copy of the License at - * http://www.apple.com/publicsource and read it before using this file. - * - * This Original Code and all software distributed under the License are - * distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY KIND, EITHER - * EXPRESS OR IMPLIED, AND APPLE HEREBY DISCLAIMS ALL SUCH WARRANTIES, - * INCLUDING WITHOUT LIMITATION, ANY WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE OR NON-INFRINGEMENT. Please see the - * License for the specific language governing rights and limitations - * under the License. - * - * @APPLE_LICENSE_HEADER_END@ - */ -/* - * @OSF_COPYRIGHT@ - */ -/* - * HISTORY - * - * Revision 1.1.1.1 1998/09/22 21:05:28 wsanchez - * Import of Mac OS X kernel (~semeria) - * - * Revision 1.2 1998/05/29 23:50:33 youngwor - * Added infrastructure for shared port space support + * @APPLE_LICENSE_OSREFERENCE_HEADER_START@ + * + * This file contains Original Code and/or Modifications of Original Code + * as defined in and that are subject to the Apple Public Source License + * Version 2.0 (the 'License'). You may not use this file except in + * compliance with the License. The rights granted to you under the + * License may not be used to create, or enable the creation or + * redistribution of, unlawful or unlicensed copies of an Apple operating + * system, or to circumvent, violate, or enable the circumvention or + * violation of, any terms of an Apple operating system software license + * agreement. * - * Revision 1.1.1.1 1998/03/07 02:26:16 wsanchez - * Import of OSF Mach kernel (~mburg) + * Please obtain a copy of the License at + * http://www.opensource.apple.com/apsl/ and read it before using this + * file. * - * Revision 1.1.8.3 1995/01/06 19:46:05 devrcs - * mk6 CR668 - 1.3b26 merge - * 64bit cleanup - * [1994/10/14 03:41:41 dwm] + * The Original Code and all software distributed under the License are + * distributed on an 'AS IS' basis, WITHOUT WARRANTY OF ANY KIND, EITHER + * EXPRESS OR IMPLIED, AND APPLE HEREBY DISCLAIMS ALL SUCH WARRANTIES, + * INCLUDING WITHOUT LIMITATION, ANY WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE, QUIET ENJOYMENT OR NON-INFRINGEMENT. + * Please see the License for the specific language governing rights and + * limitations under the License. * - * Revision 1.1.8.2 1994/09/23 02:12:26 ezf - * change marker to not FREE - * [1994/09/22 21:30:53 ezf] - * - * Revision 1.1.8.1 1994/08/18 23:11:45 widyono - * RT IPC from RT2_SHARED - * [1994/08/18 15:49:24 widyono] - * - * Revision 1.1.6.1 1994/07/29 07:33:22 widyono - * Define default target size, ITS_SIZE_NONE - * [1994/07/28 22:27:01 widyono] - * - * Revision 1.1.2.4 1993/07/22 16:17:33 rod - * Add ANSI prototypes. CR #9523. - * [1993/07/22 13:33:33 rod] - * - * Revision 1.1.2.3 1993/06/07 22:11:46 jeffc - * CR9176 - ANSI C violations: trailing tokens on CPP - * directives, extra semicolons after decl_ ..., asm keywords - * [1993/06/07 19:02:58 jeffc] - * - * Revision 1.1.2.2 1993/06/02 23:34:02 jeffc - * Added to OSF/1 R1.3 from NMK15.0. - * [1993/06/02 21:11:17 jeffc] - * - * Revision 1.1 1992/09/30 02:29:14 robert - * Initial revision - * - * $EndLog$ + * @APPLE_LICENSE_OSREFERENCE_HEADER_END@ */ -/* CMU_HIST */ /* - * Revision 2.5 91/05/14 16:37:52 mrt - * Correcting copyright - * - * Revision 2.4 91/03/16 14:49:01 rpd - * Added ipc_table_realloc. - * [91/03/04 rpd] - * - * Revision 2.3 91/02/05 17:24:19 mrt - * Changed to new Mach copyright - * [91/02/01 15:52:19 mrt] - * - * Revision 2.2 90/06/02 14:52:02 rpd - * Created for new IPC. - * [90/03/26 21:04:35 rpd] - * + * @OSF_COPYRIGHT@ */ -/* CMU_ENDHIST */ /* * Mach Operating System * Copyright (c) 1991,1990,1989 Carnegie Mellon University @@ -127,9 +69,12 @@ #ifndef _IPC_IPC_TABLE_H_ #define _IPC_IPC_TABLE_H_ +#include #include #include +#include + /* * The is_table_next field of an ipc_space_t points to * an ipc_table_size structure. These structures must @@ -158,15 +103,9 @@ * The ipr_size field points to the currently used ipc_table_size. */ -typedef natural_t ipc_table_index_t; /* index into tables */ -typedef natural_t ipc_table_elems_t; /* size of tables */ - -typedef struct ipc_table_size { +struct ipc_table_size { ipc_table_elems_t its_size; /* number of elements in table */ -} *ipc_table_size_t; - -#define ITS_NULL ((ipc_table_size_t) 0) -#define ITS_SIZE_NONE -1 +}; extern ipc_table_size_t ipc_table_entries; extern ipc_table_size_t ipc_table_dnrequests; @@ -185,41 +124,43 @@ extern void ipc_table_init(void); */ /* Allocate a table */ -extern vm_offset_t ipc_table_alloc( +extern void * ipc_table_alloc( vm_size_t size); /* Reallocate a big table */ -extern vm_offset_t ipc_table_realloc( +extern void * ipc_table_realloc( vm_size_t old_size, - vm_offset_t old_table, + void * old_table, vm_size_t new_size); /* Free a table */ extern void ipc_table_free( vm_size_t size, - vm_offset_t table); + void * table); + +#define it_entries_reallocable(its) \ + ((its)->its_size * sizeof(struct ipc_entry) >= PAGE_SIZE) #define it_entries_alloc(its) \ ((ipc_entry_t) \ - ipc_table_alloc(round_page( \ - (its)->its_size * sizeof(struct ipc_entry)))) - -#define it_entries_reallocable(its) \ - ((its)->its_size * sizeof(struct ipc_entry) \ - >= PAGE_SIZE) + ipc_table_alloc(it_entries_reallocable(its) ? \ + round_page((its)->its_size * sizeof(struct ipc_entry)) : \ + (its)->its_size * sizeof(struct ipc_entry) \ + )) #define it_entries_realloc(its, table, nits) \ ((ipc_entry_t) \ ipc_table_realloc( \ round_page((its)->its_size * sizeof(struct ipc_entry)), \ - (vm_offset_t)(table), \ + (void *)(table), \ round_page((nits)->its_size * sizeof(struct ipc_entry)) \ )) #define it_entries_free(its, table) \ - ipc_table_free( \ - round_page((its)->its_size * sizeof(struct ipc_entry)), \ - (vm_offset_t)(table) \ + ipc_table_free(it_entries_reallocable(its) ? \ + round_page((its)->its_size * sizeof(struct ipc_entry)) : \ + (its)->its_size * sizeof(struct ipc_entry), \ + (void *)(table) \ ) #define it_dnrequests_alloc(its) \ @@ -230,6 +171,6 @@ extern void ipc_table_free( #define it_dnrequests_free(its, table) \ ipc_table_free((its)->its_size * \ sizeof(struct ipc_port_request), \ - (vm_offset_t)(table)) + (void *)(table)) #endif /* _IPC_IPC_TABLE_H_ */