home *** CD-ROM | disk | FTP | other *** search
/ H4CK3R 4 / hacker04 / 04_HACK04.ISO / darwin / darwinx86.iso / usr / include / sys / malloc.h < prev    next >
Encoding:
C/C++ Source or Header  |  2001-09-30  |  11.7 KB  |  313 lines

  1. /*
  2.  * Copyright (c) 2000 Apple Computer, Inc. All rights reserved.
  3.  *
  4.  * @APPLE_LICENSE_HEADER_START@
  5.  * 
  6.  * The contents of this file constitute Original Code as defined in and
  7.  * are subject to the Apple Public Source License Version 1.1 (the
  8.  * "License").  You may not use this file except in compliance with the
  9.  * License.  Please obtain a copy of the License at
  10.  * http://www.apple.com/publicsource and read it before using this file.
  11.  * 
  12.  * This Original Code and all software distributed under the License are
  13.  * distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY KIND, EITHER
  14.  * EXPRESS OR IMPLIED, AND APPLE HEREBY DISCLAIMS ALL SUCH WARRANTIES,
  15.  * INCLUDING WITHOUT LIMITATION, ANY WARRANTIES OF MERCHANTABILITY,
  16.  * FITNESS FOR A PARTICULAR PURPOSE OR NON-INFRINGEMENT.  Please see the
  17.  * License for the specific language governing rights and limitations
  18.  * under the License.
  19.  * 
  20.  * @APPLE_LICENSE_HEADER_END@
  21.  */
  22. /* Copyright (c) 1998, 1999 Apple Computer, Inc. All Rights Reserved */
  23. /* Copyright (c) 1995, 1997 Apple Computer, Inc. All Rights Reserved */
  24. /*
  25.  * Copyright (c) 1987, 1993
  26.  *    The Regents of the University of California.  All rights reserved.
  27.  *
  28.  * Redistribution and use in source and binary forms, with or without
  29.  * modification, are permitted provided that the following conditions
  30.  * are met:
  31.  * 1. Redistributions of source code must retain the above copyright
  32.  *    notice, this list of conditions and the following disclaimer.
  33.  * 2. Redistributions in binary form must reproduce the above copyright
  34.  *    notice, this list of conditions and the following disclaimer in the
  35.  *    documentation and/or other materials provided with the distribution.
  36.  * 3. All advertising materials mentioning features or use of this software
  37.  *    must display the following acknowledgement:
  38.  *    This product includes software developed by the University of
  39.  *    California, Berkeley and its contributors.
  40.  * 4. Neither the name of the University nor the names of its contributors
  41.  *    may be used to endorse or promote products derived from this software
  42.  *    without specific prior written permission.
  43.  *
  44.  * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
  45.  * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
  46.  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
  47.  * ARE DISCLAIMED.  IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
  48.  * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
  49.  * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
  50.  * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
  51.  * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
  52.  * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
  53.  * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
  54.  * SUCH DAMAGE.
  55.  *
  56.  *    @(#)malloc.h    8.5 (Berkeley) 5/3/95
  57.  */
  58.  
  59. #ifndef _SYS_MALLOC_H_
  60. #define    _SYS_MALLOC_H_
  61.  
  62. #define KMEMSTATS
  63.  
  64. /*
  65.  * flags to malloc
  66.  */
  67. #define    M_WAITOK    0x0000
  68. #define    M_NOWAIT    0x0001
  69.  
  70. /*
  71.  * Types of memory to be allocated (not all are used by us)
  72.  */
  73. #define    M_FREE        0    /* should be on free list */
  74. #define    M_MBUF        1    /* mbuf */
  75. #define    M_DEVBUF    2    /* device driver memory */
  76. #define    M_SOCKET    3    /* socket structure */
  77. #define    M_PCB        4    /* protocol control block */
  78. #define    M_RTABLE    5    /* routing tables */
  79. #define    M_HTABLE    6    /* IMP host tables */
  80. #define    M_FTABLE    7    /* fragment reassembly header */
  81. #define    M_ZOMBIE    8    /* zombie proc status */
  82. #define    M_IFADDR    9    /* interface address */
  83. #define    M_SOOPTS    10    /* socket options */
  84. #define    M_SONAME    11    /* socket name */
  85. #define    M_NAMEI        12    /* namei path name buffer */
  86. #define    M_GPROF        13    /* kernel profiling buffer */
  87. #define    M_IOCTLOPS    14    /* ioctl data buffer */
  88. #define    M_MAPMEM    15    /* mapped memory descriptors */
  89. #define    M_CRED        16    /* credentials */
  90. #define    M_PGRP        17    /* process group header */
  91. #define    M_SESSION    18    /* session header */
  92. #define    M_IOV        19    /* large iov's */
  93. #define    M_MOUNT        20    /* vfs mount struct */
  94. #define    M_FHANDLE    21    /* network file handle */
  95. #define    M_NFSREQ    22    /* NFS request header */
  96. #define    M_NFSMNT    23    /* NFS mount structure */
  97. #define    M_NFSNODE    24    /* NFS vnode private part */
  98. #define    M_VNODE        25    /* Dynamically allocated vnodes */
  99. #define    M_CACHE        26    /* Dynamically allocated cache entries */
  100. #define    M_DQUOT        27    /* UFS quota entries */
  101. #define    M_UFSMNT    28    /* UFS mount structure */
  102. #define    M_SHM        29    /* SVID compatible shared memory segments */
  103. #define    M_VMMAP        30    /* VM map structures */
  104. #define    M_VMMAPENT    31    /* VM map entry structures */
  105. #define    M_VMOBJ        32    /* VM object structure */
  106. #define    M_VMOBJHASH    33    /* VM object hash structure */
  107. #define    M_VMPMAP    34    /* VM pmap */
  108. #define    M_VMPVENT    35    /* VM phys-virt mapping entry */
  109. #define    M_VMPAGER    36    /* XXX: VM pager struct */
  110. #define    M_VMPGDATA    37    /* XXX: VM pager private data */
  111. #define    M_FILE        38    /* Open file structure */
  112. #define    M_FILEDESC    39    /* Open file descriptor table */
  113. #define    M_LOCKF        40    /* Byte-range locking structures */
  114. #define    M_PROC        41    /* Proc structures */
  115. #define    M_SUBPROC    42    /* Proc sub-structures */
  116. #define    M_SEGMENT    43    /* Segment for LFS */
  117. #define    M_LFSNODE    44    /* LFS vnode private part */
  118. #define    M_FFSNODE    45    /* FFS vnode private part */
  119. #define    M_MFSNODE    46    /* MFS vnode private part */
  120. #define    M_NQLEASE    47    /* Nqnfs lease */
  121. #define    M_NQMHOST    48    /* Nqnfs host address table */
  122. #define    M_NETADDR    49    /* Export host address structure */
  123. #define    M_NFSSVC    50    /* Nfs server structure */
  124. #define    M_NFSUID    51    /* Nfs uid mapping structure */
  125. #define    M_NFSD        52    /* Nfs server daemon structure */
  126. #define    M_IPMOPTS    53    /* internet multicast options */
  127. #define    M_IPMADDR    54    /* internet multicast address */
  128. #define    M_IFMADDR    55    /* link-level multicast address */
  129. #define    M_MRTABLE    56    /* multicast routing tables */
  130. #define    M_ISOFSMNT    57    /* ISOFS mount structure */
  131. #define    M_ISOFSNODE    58    /* ISOFS vnode private part */
  132. #define    M_NFSRVDESC    59    /* NFS server socket descriptor */
  133. #define    M_NFSDIROFF    60    /* NFS directory offset data */
  134. #define    M_NFSBIGFH    61    /* NFS version 3 file handle */
  135. #define    M_MSDOSFSMNT    62    /* MSDOS FS mount structure */
  136. #define    M_MSDOSFSFAT    63    /* MSDOS FS fat table */
  137. #define    M_MSDOSFSNODE    64    /* MSDOS FS vnode private part */
  138. #define    M_TTYS        65    /* allocated tty structures */
  139. #define    M_EXEC        66    /* argument lists & other mem used by exec */
  140. #define    M_MISCFSMNT    67    /* miscfs mount structures */
  141. #define    M_MISCFSNODE    68    /* miscfs vnode private part */
  142. #define    M_ADOSFSMNT    69    /* adosfs mount structures */
  143. #define    M_ADOSFSNODE    70    /* adosfs vnode private part */
  144. #define    M_ANODE        71    /* adosfs anode structures and tables. */
  145. #define    M_BUFHDR    72    /* File buffer cache headers */
  146. #define    M_OFILETABL    73    /* Open file descriptor table */
  147. #define    M_MCLUST    74    /* mbuf cluster buffers */
  148. #define    M_HFSMNT    75    /* HFS mount structure */
  149. #define    M_HFSNODE    76    /* HFS private node structre */
  150. #define    M_HFSFMETA    77    /* HFS file meta data */
  151. #define M_VOLFSMNT    78  /* VOLFS mount structure */
  152. #define    M_VOLFSNODE    79    /* VOLFS private node part */
  153. #define    M_TEMP        80    /* misc temporary data buffers */
  154. #define    M_SECA        81    /* security associations, key management */
  155. #define M_DEVFS        82
  156. #define M_IPFW        83    /* IP Forwarding/NAT */
  157. #define M_UDFNODE        84    /* UDF inodes */
  158. #define M_UDFMNT        85    /* UDF mount structures */
  159. #define M_IP6NDP        86    /* IPv6 Neighbour Discovery*/
  160. #define M_IP6OPT        87    /* IPv6 options management */
  161. #define M_NATPT        88    /* KAME NAT feature */
  162.  
  163. #define    M_LAST        89    /* Must be last type + 1 */
  164.  
  165. /* Strings corresponding to types of memory */
  166. /* Must be in synch with the #defines above */
  167. #define    INITKMEMNAMES { \
  168.     "free",        /* 0 M_FREE */ \
  169.     "mbuf",        /* 1 M_MBUF */ \
  170.     "devbuf",    /* 2 M_DEVBUF */ \
  171.     "socket",    /* 3 M_SOCKET */ \
  172.     "pcb",        /* 4 M_PCB */ \
  173.     "routetbl",    /* 5 M_RTABLE */ \
  174.     "hosttbl",    /* 6 M_HTABLE */ \
  175.     "fragtbl",    /* 7 M_FTABLE */ \
  176.     "zombie",    /* 8 M_ZOMBIE */ \
  177.     "ifaddr",    /* 9 M_IFADDR */ \
  178.     "soopts",    /* 10 M_SOOPTS */ \
  179.     "soname",    /* 11 M_SONAME */ \
  180.     "namei",    /* 12 M_NAMEI */ \
  181.     "gprof",    /* 13 M_GPROF */ \
  182.     "ioctlops",    /* 14 M_IOCTLOPS */ \
  183.     "mapmem",    /* 15 M_MAPMEM */ \
  184.     "cred",        /* 16 M_CRED */ \
  185.     "pgrp",        /* 17 M_PGRP */ \
  186.     "session",    /* 18 M_SESSION */ \
  187.     "iov",        /* 19 M_IOV */ \
  188.     "mount",    /* 20 M_MOUNT */ \
  189.     "fhandle",    /* 21 M_FHANDLE */ \
  190.     "NFS req",    /* 22 M_NFSREQ */ \
  191.     "NFS mount",    /* 23 M_NFSMNT */ \
  192.     "NFS node",    /* 24 M_NFSNODE */ \
  193.     "vnodes",    /* 25 M_VNODE */ \
  194.     "namecache",    /* 26 M_CACHE */ \
  195.     "UFS quota",    /* 27 M_DQUOT */ \
  196.     "UFS mount",    /* 28 M_UFSMNT */ \
  197.     "shm",        /* 29 M_SHM */ \
  198.     "VM map",    /* 30 M_VMMAP */ \
  199.     "VM mapent",    /* 31 M_VMMAPENT */ \
  200.     "VM object",    /* 32 M_VMOBJ */ \
  201.     "VM objhash",    /* 33 M_VMOBJHASH */ \
  202.     "VM pmap",    /* 34 M_VMPMAP */ \
  203.     "VM pvmap",    /* 35 M_VMPVENT */ \
  204.     "VM pager",    /* 36 M_VMPAGER */ \
  205.     "VM pgdata",    /* 37 M_VMPGDATA */ \
  206.     "file",        /* 38 M_FILE */ \
  207.     "file desc",    /* 39 M_FILEDESC */ \
  208.     "lockf",    /* 40 M_LOCKF */ \
  209.     "proc",        /* 41 M_PROC */ \
  210.     "subproc",    /* 42 M_SUBPROC */ \
  211.     "LFS segment",    /* 43 M_SEGMENT */ \
  212.     "LFS node",    /* 44 M_LFSNODE */ \
  213.     "FFS node",    /* 45 M_FFSNODE */ \
  214.     "MFS node",    /* 46 M_MFSNODE */ \
  215.     "NQNFS Lease",    /* 47 M_NQLEASE */ \
  216.     "NQNFS Host",    /* 48 M_NQMHOST */ \
  217.     "Export Host",    /* 49 M_NETADDR */ \
  218.     "NFS srvsock",    /* 50 M_NFSSVC */ \
  219.     "NFS uid",    /* 51 M_NFSUID */ \
  220.     "NFS daemon",    /* 52 M_NFSD */ \
  221.     "ip_moptions",    /* 53 M_IPMOPTS */ \
  222.     "in_multi",    /* 54 M_IPMADDR */ \
  223.     "ether_multi",    /* 55 M_IFMADDR */ \
  224.     "mrt",        /* 56 M_MRTABLE */ \
  225.     "ISOFS mount",    /* 57 M_ISOFSMNT */ \
  226.     "ISOFS node",    /* 58 M_ISOFSNODE */ \
  227.     "NFSV3 srvdesc",/* 59 M_NFSRVDESC */ \
  228.     "NFSV3 diroff",    /* 60 M_NFSDIROFF */ \
  229.     "NFSV3 bigfh",    /* 61 M_NFSBIGFH */ \
  230.     "MSDOSFS mount",/* 62 M_MSDOSFSMNT */ \
  231.     "MSDOSFS fat",    /* 63 M_MSDOSFSFAT */ \
  232.     "MSDOSFS node",    /* 64 M_MSDOSFSNODE */ \
  233.     "ttys",        /* 65 M_TTYS */ \
  234.     "exec",        /* 66 M_EXEC */ \
  235.     "miscfs mount",    /* 67 M_MISCFSMNT */ \
  236.     "miscfs node",    /* 68 M_MISCFSNODE */ \
  237.     "adosfs mount",    /* 69 M_ADOSFSMNT */ \
  238.     "adosfs node",    /* 70 M_ADOSFSNODE */ \
  239.     "adosfs anode",    /* 71 M_ANODE */ \
  240.     "buf hdrs",    /* 72 M_BUFHDR */ \
  241.     "ofile tabl",    /* 73 M_OFILETABL */ \
  242.     "mbuf clust",    /* 74 M_MCLUST */ \
  243.     "HFS mount",    /* 75 M_HFSMNT */ \
  244.     "HFS node",        /* 76 M_HFSNODE */ \
  245.     "HFS fmeta",    /* 77 M_HFSFMETA */ \
  246.     "VOLFS mount",     /* 78 M_VOLFSMNT */ \
  247.     "VOLFS node",     /* 79 M_VOLFSNODE */ \
  248.     "temp",        /* 80 M_TEMP */ \
  249.     "key mgmt",    /* 81 M_SECA */ \
  250.     "DEVFS",    /* 82 M_DEVFS */ \
  251.     "IpFw/IpAcct",    /* 83 M_IPFW */ \
  252.     "UDF node",    /* 84 M_UDFNODE */ \
  253.     "UDF mount"    /* 85 M_UDFMNT */ \
  254.     "IPv6 NDP",    /* 86 M_IP6NDP */ \
  255.     "IPv6 options",    /* 87 M_IP6OPT */ \
  256.     "NATPT",    /* 88 M_NATPT */ \
  257. }
  258.  
  259. struct kmemstats {
  260.     long    ks_inuse;    /* # of packets of this type currently
  261.                  * in use */
  262.     long    ks_calls;    /* total packets of this type ever allocated */
  263.     long     ks_memuse;    /* total memory held in bytes */
  264.     u_short    ks_limblocks;    /* number of times blocked for hitting limit */
  265.     u_short    ks_mapblocks;    /* number of times blocked for kernel map */
  266.     long    ks_maxused;    /* maximum number ever used */
  267.     long    ks_limit;    /* most that are allowed to exist */
  268.     long    ks_size;    /* sizes of this thing that are allocated */
  269.     long    ks_spare;
  270. };
  271.  
  272. #ifdef    KERNEL
  273. extern struct kmemstats kmemstats[];
  274.  
  275. /*
  276.  * The malloc/free primatives used
  277.  * by the BSD kernel code.
  278.  */
  279. #define    MALLOC(space, cast, size, type, flags) \
  280.     (space) = (cast)_MALLOC(size, type, flags)
  281.  
  282. #define FREE(addr, type) \
  283.     _FREE((void *)addr, type)
  284.  
  285. #define MALLOC_ZONE(space, cast, size, type, flags) \
  286.     (space) = (cast)_MALLOC_ZONE(size, type, flags)
  287.  
  288. #define FREE_ZONE(addr, size, type) \
  289.     _FREE_ZONE((void *)addr, size, type)
  290.  
  291. extern void    *_MALLOC __P((
  292.             size_t        size,
  293.             int        type,
  294.             int        flags));
  295.  
  296. extern void    _FREE __P((
  297.             void        *addr,
  298.             int        type));
  299.  
  300. extern void    *_MALLOC_ZONE __P((
  301.             size_t        size,
  302.             int        type,
  303.             int        flags));
  304.  
  305. extern void    _FREE_ZONE __P((
  306.             void        *elem,
  307.             size_t        size,
  308.             int        type));
  309.  
  310. #endif    /* KERNEL */
  311.  
  312. #endif    /* _SYS_MALLOC_H_ */
  313.