xref: /freebsd-src/cddl/compat/opensolaris/lib/libumem/umem.h (revision b3e7694832e81d7a904a10f525f8797b753bf0d3)
1*f0a75d27SPawel Jakub Dawidek /*
2*f0a75d27SPawel Jakub Dawidek  * CDDL HEADER START
3*f0a75d27SPawel Jakub Dawidek  *
4*f0a75d27SPawel Jakub Dawidek  * The contents of this file are subject to the terms of the
5*f0a75d27SPawel Jakub Dawidek  * Common Development and Distribution License, Version 1.0 only
6*f0a75d27SPawel Jakub Dawidek  * (the "License").  You may not use this file except in compliance
7*f0a75d27SPawel Jakub Dawidek  * with the License.
8*f0a75d27SPawel Jakub Dawidek  *
9*f0a75d27SPawel Jakub Dawidek  * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
10*f0a75d27SPawel Jakub Dawidek  * or http://www.opensolaris.org/os/licensing.
11*f0a75d27SPawel Jakub Dawidek  * See the License for the specific language governing permissions
12*f0a75d27SPawel Jakub Dawidek  * and limitations under the License.
13*f0a75d27SPawel Jakub Dawidek  *
14*f0a75d27SPawel Jakub Dawidek  * When distributing Covered Code, include this CDDL HEADER in each
15*f0a75d27SPawel Jakub Dawidek  * file and include the License file at usr/src/OPENSOLARIS.LICENSE.
16*f0a75d27SPawel Jakub Dawidek  * If applicable, add the following below this CDDL HEADER, with the
17*f0a75d27SPawel Jakub Dawidek  * fields enclosed by brackets "[]" replaced with your own identifying
18*f0a75d27SPawel Jakub Dawidek  * information: Portions Copyright [yyyy] [name of copyright owner]
19*f0a75d27SPawel Jakub Dawidek  *
20*f0a75d27SPawel Jakub Dawidek  * CDDL HEADER END
21*f0a75d27SPawel Jakub Dawidek  */
22*f0a75d27SPawel Jakub Dawidek /*
23*f0a75d27SPawel Jakub Dawidek  * Copyright 2004 Sun Microsystems, Inc.  All rights reserved.
24*f0a75d27SPawel Jakub Dawidek  * Use is subject to license terms.
25*f0a75d27SPawel Jakub Dawidek  */
26*f0a75d27SPawel Jakub Dawidek 
27*f0a75d27SPawel Jakub Dawidek #ifndef _UMEM_H
28*f0a75d27SPawel Jakub Dawidek #define	_UMEM_H
29*f0a75d27SPawel Jakub Dawidek 
30*f0a75d27SPawel Jakub Dawidek 
31*f0a75d27SPawel Jakub Dawidek 
32*f0a75d27SPawel Jakub Dawidek #include <sys/types.h>
33*f0a75d27SPawel Jakub Dawidek #include <stdlib.h>
34*f0a75d27SPawel Jakub Dawidek 
35*f0a75d27SPawel Jakub Dawidek #ifdef	__cplusplus
36*f0a75d27SPawel Jakub Dawidek extern "C" {
37*f0a75d27SPawel Jakub Dawidek #endif
38*f0a75d27SPawel Jakub Dawidek 
39*f0a75d27SPawel Jakub Dawidek #define	UMEM_DEFAULT	0x0000	/* normal -- may fail */
40*f0a75d27SPawel Jakub Dawidek #define	UMEM_NOFAIL	0x0100	/* Never fails -- may call exit(2) */
41*f0a75d27SPawel Jakub Dawidek 
42*f0a75d27SPawel Jakub Dawidek #define	UMEM_FLAGS	0xffff	/* all settable umem flags */
43*f0a75d27SPawel Jakub Dawidek 
44*f0a75d27SPawel Jakub Dawidek extern void *umem_alloc(size_t, int);
45*f0a75d27SPawel Jakub Dawidek extern void *umem_alloc_align(size_t, size_t, int);
46*f0a75d27SPawel Jakub Dawidek extern void *umem_zalloc(size_t, int);
47*f0a75d27SPawel Jakub Dawidek extern void umem_free(void *, size_t);
48*f0a75d27SPawel Jakub Dawidek extern void umem_free_align(void *, size_t);
49*f0a75d27SPawel Jakub Dawidek 
50*f0a75d27SPawel Jakub Dawidek /*
51*f0a75d27SPawel Jakub Dawidek  * Flags for umem_cache_create()
52*f0a75d27SPawel Jakub Dawidek  */
53*f0a75d27SPawel Jakub Dawidek #define	UMC_NOTOUCH	0x00010000
54*f0a75d27SPawel Jakub Dawidek #define	UMC_NODEBUG	0x00020000
55*f0a75d27SPawel Jakub Dawidek #define	UMC_NOMAGAZINE	0x00040000
56*f0a75d27SPawel Jakub Dawidek #define	UMC_NOHASH	0x00080000
57*f0a75d27SPawel Jakub Dawidek 
58*f0a75d27SPawel Jakub Dawidek struct umem_cache;		/* cache structure is opaque to umem clients */
59*f0a75d27SPawel Jakub Dawidek 
60*f0a75d27SPawel Jakub Dawidek typedef struct umem_cache umem_cache_t;
61*f0a75d27SPawel Jakub Dawidek typedef int umem_constructor_t(void *, void *, int);
62*f0a75d27SPawel Jakub Dawidek typedef void umem_destructor_t(void *, void *);
63*f0a75d27SPawel Jakub Dawidek typedef void umem_reclaim_t(void *);
64*f0a75d27SPawel Jakub Dawidek 
65*f0a75d27SPawel Jakub Dawidek typedef int umem_nofail_callback_t(void);
66*f0a75d27SPawel Jakub Dawidek #define	UMEM_CALLBACK_RETRY		0
67*f0a75d27SPawel Jakub Dawidek #define	UMEM_CALLBACK_EXIT(status)	(0x100 | ((status) & 0xFF))
68*f0a75d27SPawel Jakub Dawidek 
69*f0a75d27SPawel Jakub Dawidek extern void umem_nofail_callback(umem_nofail_callback_t *);
70*f0a75d27SPawel Jakub Dawidek 
71*f0a75d27SPawel Jakub Dawidek extern umem_cache_t *umem_cache_create(char *, size_t,
72*f0a75d27SPawel Jakub Dawidek     size_t, umem_constructor_t *, umem_destructor_t *, umem_reclaim_t *,
73*f0a75d27SPawel Jakub Dawidek     void *, void *, int);
74*f0a75d27SPawel Jakub Dawidek extern void umem_cache_destroy(umem_cache_t *);
75*f0a75d27SPawel Jakub Dawidek 
76*f0a75d27SPawel Jakub Dawidek extern void *umem_cache_alloc(umem_cache_t *, int);
77*f0a75d27SPawel Jakub Dawidek extern void umem_cache_free(umem_cache_t *, void *);
78*f0a75d27SPawel Jakub Dawidek 
79*f0a75d27SPawel Jakub Dawidek extern void umem_reap(void);
80*f0a75d27SPawel Jakub Dawidek 
81*f0a75d27SPawel Jakub Dawidek #ifdef	__cplusplus
82*f0a75d27SPawel Jakub Dawidek }
83*f0a75d27SPawel Jakub Dawidek #endif
84*f0a75d27SPawel Jakub Dawidek 
85*f0a75d27SPawel Jakub Dawidek #endif	/* _UMEM_H */
86