ctl_mem_pool.h revision 259065
1295041Sbr/*- 2295041Sbr * Copyright (c) 2003, 2004 Silicon Graphics International Corp. 3295041Sbr * All rights reserved. 4295041Sbr * 5295041Sbr * Redistribution and use in source and binary forms, with or without 6295041Sbr * modification, are permitted provided that the following conditions 7295041Sbr * are met: 8295041Sbr * 1. Redistributions of source code must retain the above copyright 9295041Sbr * notice, this list of conditions, and the following disclaimer, 10295041Sbr * without modification. 11295041Sbr * 2. Redistributions in binary form must reproduce at minimum a disclaimer 12295041Sbr * substantially similar to the "NO WARRANTY" disclaimer below 13295041Sbr * ("Disclaimer") and any redistribution must be conditioned upon 14295041Sbr * including a substantially similar Disclaimer requirement for further 15295041Sbr * binary redistribution. 16295041Sbr * 17295041Sbr * NO WARRANTY 18295041Sbr * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS 19295041Sbr * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT 20295041Sbr * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTIBILITY AND FITNESS FOR 21295041Sbr * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT 22295041Sbr * HOLDERS OR CONTRIBUTORS BE LIABLE FOR SPECIAL, EXEMPLARY, OR CONSEQUENTIAL 23295041Sbr * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS 24295041Sbr * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) 25295041Sbr * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, 26295041Sbr * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING 27301126Sbr * IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE 28301126Sbr * POSSIBILITY OF SUCH DAMAGES. 29301126Sbr * 30295041Sbr * $Id: //depot/users/kenm/FreeBSD-test2/sys/cam/ctl/ctl_mem_pool.h#1 $ 31295041Sbr * $FreeBSD: releng/10.0/sys/cam/ctl/ctl_mem_pool.h 229997 2012-01-12 00:34:33Z ken $ 32295041Sbr */ 33295041Sbr/* 34295041Sbr * CAM Target Layer memory pool code. 35323770Sjpaetzel * 36295041Sbr * Author: Ken Merry <ken@FreeBSD.org> 37295041Sbr */ 38295041Sbr 39295041Sbr#ifndef _CTL_MEMPOOL_H_ 40295041Sbr#define _CTL_MEMPOOL_H_ 41295041Sbr 42295041Sbrtypedef enum { 43295041Sbr CTL_MEM_POOL_NONE, 44295041Sbr CTL_MEM_POOL_PERM_GROW 45295041Sbr} ctl_mem_pool_flags; 46295041Sbr 47295041Sbrstruct ctl_mem_pool { 48295041Sbr ctl_mem_pool_flags flags; 49295041Sbr int chunk_size; 50295041Sbr int grow_inc; 51295041Sbr struct mtx lock; 52295041Sbr struct cv wait_mem; 53295041Sbr STAILQ_HEAD(, ctl_mem_element) free_mem_list; 54295041Sbr}; 55295041Sbr 56295041Sbrtypedef enum { 57295041Sbr CTL_MEM_ELEMENT_NONE, 58295041Sbr CTL_MEM_ELEMENT_PREALLOC 59295041Sbr} ctl_mem_element_flags; 60295041Sbr 61295041Sbrstruct ctl_mem_element { 62295041Sbr ctl_mem_element_flags flags; 63295041Sbr struct ctl_mem_pool *pool; 64295041Sbr uint8_t *bytes; 65295041Sbr STAILQ_ENTRY(ctl_mem_element) links; 66295041Sbr}; 67295041Sbr 68295041Sbr#ifdef _KERNEL 69295041Sbr 70301120SbrMALLOC_DECLARE(M_CTL_POOL); 71301120Sbr 72295041Sbrint ctl_init_mem_pool(struct ctl_mem_pool *pool, int chunk_size, 73295041Sbr ctl_mem_pool_flags flags, int grow_inc, 74295041Sbr int initial_pool_size); 75295041Sbrstruct ctl_mem_element *ctl_alloc_mem_element(struct ctl_mem_pool *pool, 76295972Sbr int can_wait); 77295041Sbrvoid ctl_free_mem_element(struct ctl_mem_element *mem); 78295972Sbrint ctl_grow_mem_pool(struct ctl_mem_pool *pool, int count, 79295972Sbr int can_wait); 80295972Sbrint ctl_shrink_mem_pool(struct ctl_mem_pool *pool); 81295972Sbr#endif /* _KERNEL */ 82295972Sbr 83295972Sbr#endif /* _CTL_MEMPOOL_H_ */ 84295041Sbr