xref: /xnu-11215/bsd/sys/malloc.h (revision 5c2921b0)
1 /*
2  * Copyright (c) 2000-2021 Apple Inc. All rights reserved.
3  *
4  * @APPLE_OSREFERENCE_LICENSE_HEADER_START@
5  *
6  * This file contains Original Code and/or Modifications of Original Code
7  * as defined in and that are subject to the Apple Public Source License
8  * Version 2.0 (the 'License'). You may not use this file except in
9  * compliance with the License. The rights granted to you under the License
10  * may not be used to create, or enable the creation or redistribution of,
11  * unlawful or unlicensed copies of an Apple operating system, or to
12  * circumvent, violate, or enable the circumvention or violation of, any
13  * terms of an Apple operating system software license agreement.
14  *
15  * Please obtain a copy of the License at
16  * http://www.opensource.apple.com/apsl/ and read it before using this file.
17  *
18  * The Original Code and all software distributed under the License are
19  * distributed on an 'AS IS' basis, WITHOUT WARRANTY OF ANY KIND, EITHER
20  * EXPRESS OR IMPLIED, AND APPLE HEREBY DISCLAIMS ALL SUCH WARRANTIES,
21  * INCLUDING WITHOUT LIMITATION, ANY WARRANTIES OF MERCHANTABILITY,
22  * FITNESS FOR A PARTICULAR PURPOSE, QUIET ENJOYMENT OR NON-INFRINGEMENT.
23  * Please see the License for the specific language governing rights and
24  * limitations under the License.
25  *
26  * @APPLE_OSREFERENCE_LICENSE_HEADER_END@
27  */
28 /* Copyright (c) 1998, 1999 Apple Computer, Inc. All Rights Reserved */
29 /* Copyright (c) 1995, 1997 Apple Computer, Inc. All Rights Reserved */
30 /*
31  * Copyright (c) 1987, 1993
32  *	The Regents of the University of California.  All rights reserved.
33  *
34  * Redistribution and use in source and binary forms, with or without
35  * modification, are permitted provided that the following conditions
36  * are met:
37  * 1. Redistributions of source code must retain the above copyright
38  *    notice, this list of conditions and the following disclaimer.
39  * 2. Redistributions in binary form must reproduce the above copyright
40  *    notice, this list of conditions and the following disclaimer in the
41  *    documentation and/or other materials provided with the distribution.
42  * 3. All advertising materials mentioning features or use of this software
43  *    must display the following acknowledgement:
44  *	This product includes software developed by the University of
45  *	California, Berkeley and its contributors.
46  * 4. Neither the name of the University nor the names of its contributors
47  *    may be used to endorse or promote products derived from this software
48  *    without specific prior written permission.
49  *
50  * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
51  * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
52  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
53  * ARE DISCLAIMED.  IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
54  * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
55  * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
56  * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
57  * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
58  * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
59  * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
60  * SUCH DAMAGE.
61  *
62  *	@(#)malloc.h	8.5 (Berkeley) 5/3/95
63  */
64 /*
65  * NOTICE: This file was modified by SPARTA, Inc. in 2005 to introduce
66  * support for mandatory and extensible security protections.  This notice
67  * is included in support of clause 2.2 (b) of the Apple Public License,
68  * Version 2.0.
69  */
70 
71 #ifndef _SYS_MALLOC_H_
72 #define _SYS_MALLOC_H_
73 
74 #include <sys/cdefs.h>
75 #include <sys/appleapiopts.h>
76 
77 #ifdef KERNEL
78 #ifdef XNU_KERNEL_PRIVATE
79 #include <mach/vm_types.h>
80 #include <kern/kalloc.h>
81 #endif
82 
83 __BEGIN_DECLS
84 
85 /*
86  * flags to malloc
87  */
88 #define M_WAITOK        0x0000
89 #define M_NOWAIT        0x0001
90 #define M_ZERO          0x0004          /* bzero the allocation */
91 #define M_NULL          0x0008          /* return NULL if space is unavailable*/
92 
93 #ifdef XNU_KERNEL_PRIVATE
94 
95 /*
96  * Types of memory to be allocated (not all are used by us)
97  */
98 #define M_PCB           4       /* protocol control block */
99 #define M_RTABLE        5       /* routing tables */
100 #define M_IFADDR        9       /* interface address */
101 #define M_SONAME        11      /* socket name */
102 #define M_PGRP          17      /* process group header */
103 #define M_FHANDLE       21      /* network file handle */
104 #define M_VNODE         25      /* Dynamically allocated vnodes */
105 #define M_CACHE         26      /* Dynamically allocated cache entries */
106 #define M_DQUOT         27      /* UFS quota entries */
107 #define M_PROC_UUID_POLICY      28      /* proc UUID policy entries */
108 #define M_SHM           29      /* SVID compatible shared memory segments */
109 #define M_LOCKF         40      /* Byte-range locking structures */
110 #define M_PROC          41      /* Proc structures */
111 #define M_NETADDR       49      /* Export host address structure */
112 #define M_NFSSVC        50      /* NFS server structure */
113 #define M_NFSD          52      /* NFS server daemon structure */
114 #define M_IPMOPTS       53      /* internet multicast options */
115 #define M_TTYS          65      /* allocated tty structures */
116 #define M_OFILETABL     73      /* Open file descriptor table */
117 #define M_TEMP          80      /* misc temporary data buffers */
118 #define M_SECA          81      /* security associations, key management */
119 #define M_UDFNODE       84      /* UDF inodes */
120 #define M_UDFMNT        85      /* UDF mount structures */
121 #define M_KQUEUE        94      /* kqueue system */
122 #define M_KAUTH         100     /* kauth subsystem */
123 #define M_SBUF          105     /* string buffers */
124 #define M_SELECT        107     /* per-thread select memory */
125 #define M_IP6MOPTS      113     /* IPv6 multicast options */
126 #define M_IP6CGA        117
127 #define M_NECP          118     /* General NECP policy data */
128 #define M_FD_VN_DATA    122     /* Per fd vnode data */
129 #define M_FD_DIRBUF     123     /* Directory entries' buffer */
130 #define M_EVENTHANDLER  125     /* Eventhandler */
131 #define M_LLTABLE       126     /* Link layer table */
132 #define M_CFIL          128     /* Content Filter */
133 #define M_TRACKER       129     /* Tracker socket management */
134 
135 ZONE_VIEW_DECLARE(ZV_NAMEI);
136 
137 #else /* XNU_KERNEL_PRIVATE */
138 
139 #define M_PCB           4       /* protocol control block (smb) */
140 #define M_RTABLE        5       /* routing tables */
141 #define M_IFADDR        9       /* interface address (IOFireWireIP)*/
142 #define M_SONAME        11      /* socket name (smb) */
143 #define M_LOCKF         40      /* Byte-range locking structures (msdos) */
144 #define M_TEMP          80      /* misc temporary data buffers */
145 #define M_UDFNODE       84      /* UDF inodes (udf)*/
146 #define M_UDFMNT        85      /* UDF mount structures (udf)*/
147 #define M_KAUTH         100     /* kauth subsystem (smb) */
148 
149 #if XNU_PLATFORM_MacOSX
150 
151 #define MALLOC(space, cast, size, type, flags) \
152 	(space) = (cast)_MALLOC(size, type, flags)
153 
154 #define FREE(addr, type) \
155 	_FREE((void *)addr, type)
156 
157 #define MALLOC_ZONE(space, cast, size, type, flags) \
158 	(space) = (cast)_MALLOC_ZONE(size, type, flags)
159 
160 #define FREE_ZONE(addr, size, type) \
161 	_FREE_ZONE((void *)addr, size, type)
162 
163 #if defined(KERNEL_PRIVATE)
164 __deprecated_msg("Please use IOMallocType()/kalloc_type() instead")
165 #endif
166 extern void     *_MALLOC(
167 	size_t          size,
168 	int             type,
169 	int             flags);
170 
171 #if defined(KERNEL_PRIVATE)
172 __deprecated_msg("Please use IOFreeType()/kfree_type() instead")
173 #endif
174 extern void     _FREE(
175 	void            *addr,
176 	int             type);
177 
178 #if defined(KERNEL_PRIVATE)
179 __deprecated_msg("Please use IOMallocType()/kalloc_type() instead")
180 #endif
181 extern void     *_MALLOC_ZONE(
182 	size_t          size,
183 	int             type,
184 	int             flags);
185 
186 #if defined(KERNEL_PRIVATE)
187 __deprecated_msg("Please use IOFreeType()/kfree_type() instead")
188 #endif
189 extern void     _FREE_ZONE(
190 	void            *elem,
191 	size_t          size,
192 	int             type);
193 
194 #endif /* XNU_PLATFORM_MacOSX */
195 #endif /* !XNU_KERNEL_PRIVATE */
196 
197 __END_DECLS
198 
199 #endif  /* KERNEL */
200 #endif  /* _SYS_MALLOC_H_ */
201