1 /* 2 * CDDL HEADER START 3 * 4 * The contents of this file are subject to the terms of the 5 * Common Development and Distribution License, Version 1.0 only 6 * (the "License"). You may not use this file except in compliance 7 * with the License. 8 * 9 * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE 10 * or http://www.opensolaris.org/os/licensing. 11 * See the License for the specific language governing permissions 12 * and limitations under the License. 13 * 14 * When distributing Covered Code, include this CDDL HEADER in each 15 * file and include the License file at usr/src/OPENSOLARIS.LICENSE. 16 * If applicable, add the following below this CDDL HEADER, with the 17 * fields enclosed by brackets "[]" replaced with your own identifying 18 * information: Portions Copyright [yyyy] [name of copyright owner] 19 * 20 * CDDL HEADER END 21 */ 22 /* 23 * Copyright (c) 1999 by Sun Microsystems, Inc. 24 * All rights reserved. 25 */ 26 27 #include <sys/param.h> 28 #include <sys/vmem.h> 29 #include <sys/cmn_err.h> 30 31 /* ARGSUSED */ 32 void * 33 rmallocmap(size_t mapsize) 34 { 35 return (vmem_create("rmap", NULL, 0, 1, NULL, NULL, NULL, 0, 36 VM_NOSLEEP)); 37 } 38 39 /* ARGSUSED */ 40 void * 41 rmallocmap_wait(size_t mapsize) 42 { 43 return (vmem_create("rmap", NULL, 0, 1, NULL, NULL, NULL, 0, VM_SLEEP)); 44 } 45 46 void 47 rmfreemap(void *mp) 48 { 49 vmem_destroy(mp); 50 } 51 52 ulong_t 53 rmalloc(void *mp, size_t size) 54 { 55 return ((ulong_t)vmem_alloc(mp, size, VM_NOSLEEP)); 56 } 57 58 ulong_t 59 rmalloc_wait(void *mp, size_t size) 60 { 61 return ((ulong_t)vmem_alloc(mp, size, VM_SLEEP)); 62 } 63 64 void 65 rmfree(void *mp, size_t size, ulong_t addr) 66 { 67 if (vmem_contains(mp, (void *)addr, size)) 68 vmem_free(mp, (void *)addr, size); 69 else if (vmem_add(mp, (void *)addr, size, VM_NOSLEEP) == NULL) 70 cmn_err(CE_WARN, "rmfree(%p, %lu, %lu): cannot add segment", 71 mp, size, addr); 72 } 73