1ac2bc7e7aaad957f235992ff74d5f9af34dc5f88Dmitry Shmidt/* 2ac2bc7e7aaad957f235992ff74d5f9af34dc5f88Dmitry Shmidt * Memory pools library, Public interface 3ac2bc7e7aaad957f235992ff74d5f9af34dc5f88Dmitry Shmidt * 4ac2bc7e7aaad957f235992ff74d5f9af34dc5f88Dmitry Shmidt * API Overview 5ac2bc7e7aaad957f235992ff74d5f9af34dc5f88Dmitry Shmidt * 6ac2bc7e7aaad957f235992ff74d5f9af34dc5f88Dmitry Shmidt * This package provides a memory allocation subsystem based on pools of 7ac2bc7e7aaad957f235992ff74d5f9af34dc5f88Dmitry Shmidt * homogenous objects. 8ac2bc7e7aaad957f235992ff74d5f9af34dc5f88Dmitry Shmidt * 9ac2bc7e7aaad957f235992ff74d5f9af34dc5f88Dmitry Shmidt * Instrumentation is available for reporting memory utilization both 10ac2bc7e7aaad957f235992ff74d5f9af34dc5f88Dmitry Shmidt * on a per-data-structure basis and system wide. 11ac2bc7e7aaad957f235992ff74d5f9af34dc5f88Dmitry Shmidt * 12ac2bc7e7aaad957f235992ff74d5f9af34dc5f88Dmitry Shmidt * There are two main types defined in this API. 13ac2bc7e7aaad957f235992ff74d5f9af34dc5f88Dmitry Shmidt * 14ac2bc7e7aaad957f235992ff74d5f9af34dc5f88Dmitry Shmidt * pool manager: A singleton object that acts as a factory for 15ac2bc7e7aaad957f235992ff74d5f9af34dc5f88Dmitry Shmidt * pool allocators. It also is used for global 16ac2bc7e7aaad957f235992ff74d5f9af34dc5f88Dmitry Shmidt * instrumentation, such as reporting all blocks 17ac2bc7e7aaad957f235992ff74d5f9af34dc5f88Dmitry Shmidt * in use across all data structures. The pool manager 18ac2bc7e7aaad957f235992ff74d5f9af34dc5f88Dmitry Shmidt * creates and provides individual memory pools 19ac2bc7e7aaad957f235992ff74d5f9af34dc5f88Dmitry Shmidt * upon request to application code. 20ac2bc7e7aaad957f235992ff74d5f9af34dc5f88Dmitry Shmidt * 21ac2bc7e7aaad957f235992ff74d5f9af34dc5f88Dmitry Shmidt * memory pool: An object for allocating homogenous memory blocks. 22ac2bc7e7aaad957f235992ff74d5f9af34dc5f88Dmitry Shmidt * 23ac2bc7e7aaad957f235992ff74d5f9af34dc5f88Dmitry Shmidt * Global identifiers in this module use the following prefixes: 24ac2bc7e7aaad957f235992ff74d5f9af34dc5f88Dmitry Shmidt * bcm_mpm_* Memory pool manager 25ac2bc7e7aaad957f235992ff74d5f9af34dc5f88Dmitry Shmidt * bcm_mp_* Memory pool 26ac2bc7e7aaad957f235992ff74d5f9af34dc5f88Dmitry Shmidt * 27ac2bc7e7aaad957f235992ff74d5f9af34dc5f88Dmitry Shmidt * There are two main types of memory pools: 28ac2bc7e7aaad957f235992ff74d5f9af34dc5f88Dmitry Shmidt * 29ac2bc7e7aaad957f235992ff74d5f9af34dc5f88Dmitry Shmidt * prealloc: The contiguous memory block of objects can either be supplied 30ac2bc7e7aaad957f235992ff74d5f9af34dc5f88Dmitry Shmidt * by the client or malloc'ed by the memory manager. The objects are 31ac2bc7e7aaad957f235992ff74d5f9af34dc5f88Dmitry Shmidt * allocated out of a block of memory and freed back to the block. 32ac2bc7e7aaad957f235992ff74d5f9af34dc5f88Dmitry Shmidt * 33ac2bc7e7aaad957f235992ff74d5f9af34dc5f88Dmitry Shmidt * heap: The memory pool allocator uses the heap (malloc/free) for memory. 34ac2bc7e7aaad957f235992ff74d5f9af34dc5f88Dmitry Shmidt * In this case, the pool allocator is just providing statistics 35ac2bc7e7aaad957f235992ff74d5f9af34dc5f88Dmitry Shmidt * and instrumentation on top of the heap, without modifying the heap 36ac2bc7e7aaad957f235992ff74d5f9af34dc5f88Dmitry Shmidt * allocation implementation. 37ac2bc7e7aaad957f235992ff74d5f9af34dc5f88Dmitry Shmidt * 3838eaaf5a34502fe465cf8b6ac7a2dfcafa17ba41Dmitry Shmidt * Copyright (C) 1999-2013, Broadcom Corporation 39ac2bc7e7aaad957f235992ff74d5f9af34dc5f88Dmitry Shmidt * 40ac2bc7e7aaad957f235992ff74d5f9af34dc5f88Dmitry Shmidt * Permission to use, copy, modify, and/or distribute this software for any 41ac2bc7e7aaad957f235992ff74d5f9af34dc5f88Dmitry Shmidt * purpose with or without fee is hereby granted, provided that the above 42ac2bc7e7aaad957f235992ff74d5f9af34dc5f88Dmitry Shmidt * copyright notice and this permission notice appear in all copies. 43ac2bc7e7aaad957f235992ff74d5f9af34dc5f88Dmitry Shmidt * 44ac2bc7e7aaad957f235992ff74d5f9af34dc5f88Dmitry Shmidt * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES 45ac2bc7e7aaad957f235992ff74d5f9af34dc5f88Dmitry Shmidt * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF 46ac2bc7e7aaad957f235992ff74d5f9af34dc5f88Dmitry Shmidt * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY 47ac2bc7e7aaad957f235992ff74d5f9af34dc5f88Dmitry Shmidt * SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES 48ac2bc7e7aaad957f235992ff74d5f9af34dc5f88Dmitry Shmidt * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION 49ac2bc7e7aaad957f235992ff74d5f9af34dc5f88Dmitry Shmidt * OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN 50ac2bc7e7aaad957f235992ff74d5f9af34dc5f88Dmitry Shmidt * CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. 51ac2bc7e7aaad957f235992ff74d5f9af34dc5f88Dmitry Shmidt * 52ac2bc7e7aaad957f235992ff74d5f9af34dc5f88Dmitry Shmidt * $Id$ 53ac2bc7e7aaad957f235992ff74d5f9af34dc5f88Dmitry Shmidt */ 54ac2bc7e7aaad957f235992ff74d5f9af34dc5f88Dmitry Shmidt 55ac2bc7e7aaad957f235992ff74d5f9af34dc5f88Dmitry Shmidt#ifndef _BCM_MPOOL_PUB_H 56ac2bc7e7aaad957f235992ff74d5f9af34dc5f88Dmitry Shmidt#define _BCM_MPOOL_PUB_H 1 57ac2bc7e7aaad957f235992ff74d5f9af34dc5f88Dmitry Shmidt 58ac2bc7e7aaad957f235992ff74d5f9af34dc5f88Dmitry Shmidt#include <typedefs.h> /* needed for uint16 */ 59ac2bc7e7aaad957f235992ff74d5f9af34dc5f88Dmitry Shmidt 60ac2bc7e7aaad957f235992ff74d5f9af34dc5f88Dmitry Shmidt 61ac2bc7e7aaad957f235992ff74d5f9af34dc5f88Dmitry Shmidt/* 62ac2bc7e7aaad957f235992ff74d5f9af34dc5f88Dmitry Shmidt************************************************************************** 63ac2bc7e7aaad957f235992ff74d5f9af34dc5f88Dmitry Shmidt* 64ac2bc7e7aaad957f235992ff74d5f9af34dc5f88Dmitry Shmidt* Type definitions, handles 65ac2bc7e7aaad957f235992ff74d5f9af34dc5f88Dmitry Shmidt* 66ac2bc7e7aaad957f235992ff74d5f9af34dc5f88Dmitry Shmidt************************************************************************** 67ac2bc7e7aaad957f235992ff74d5f9af34dc5f88Dmitry Shmidt*/ 68ac2bc7e7aaad957f235992ff74d5f9af34dc5f88Dmitry Shmidt 69ac2bc7e7aaad957f235992ff74d5f9af34dc5f88Dmitry Shmidt/* Forward declaration of OSL handle. */ 70ac2bc7e7aaad957f235992ff74d5f9af34dc5f88Dmitry Shmidtstruct osl_info; 71ac2bc7e7aaad957f235992ff74d5f9af34dc5f88Dmitry Shmidt 72ac2bc7e7aaad957f235992ff74d5f9af34dc5f88Dmitry Shmidt/* Forward declaration of string buffer. */ 73ac2bc7e7aaad957f235992ff74d5f9af34dc5f88Dmitry Shmidtstruct bcmstrbuf; 74ac2bc7e7aaad957f235992ff74d5f9af34dc5f88Dmitry Shmidt 75ac2bc7e7aaad957f235992ff74d5f9af34dc5f88Dmitry Shmidt/* 76ac2bc7e7aaad957f235992ff74d5f9af34dc5f88Dmitry Shmidt * Opaque type definition for the pool manager handle. This object is used for global 77ac2bc7e7aaad957f235992ff74d5f9af34dc5f88Dmitry Shmidt * memory pool operations such as obtaining a new pool, deleting a pool, iterating and 78ac2bc7e7aaad957f235992ff74d5f9af34dc5f88Dmitry Shmidt * instrumentation/debugging. 79ac2bc7e7aaad957f235992ff74d5f9af34dc5f88Dmitry Shmidt */ 80ac2bc7e7aaad957f235992ff74d5f9af34dc5f88Dmitry Shmidtstruct bcm_mpm_mgr; 81ac2bc7e7aaad957f235992ff74d5f9af34dc5f88Dmitry Shmidttypedef struct bcm_mpm_mgr *bcm_mpm_mgr_h; 82ac2bc7e7aaad957f235992ff74d5f9af34dc5f88Dmitry Shmidt 83ac2bc7e7aaad957f235992ff74d5f9af34dc5f88Dmitry Shmidt/* 84ac2bc7e7aaad957f235992ff74d5f9af34dc5f88Dmitry Shmidt * Opaque type definition for an instance of a pool. This handle is used for allocating 85ac2bc7e7aaad957f235992ff74d5f9af34dc5f88Dmitry Shmidt * and freeing memory through the pool, as well as management/instrumentation on this 86ac2bc7e7aaad957f235992ff74d5f9af34dc5f88Dmitry Shmidt * specific pool. 87ac2bc7e7aaad957f235992ff74d5f9af34dc5f88Dmitry Shmidt */ 88ac2bc7e7aaad957f235992ff74d5f9af34dc5f88Dmitry Shmidtstruct bcm_mp_pool; 89ac2bc7e7aaad957f235992ff74d5f9af34dc5f88Dmitry Shmidttypedef struct bcm_mp_pool *bcm_mp_pool_h; 90ac2bc7e7aaad957f235992ff74d5f9af34dc5f88Dmitry Shmidt 91ac2bc7e7aaad957f235992ff74d5f9af34dc5f88Dmitry Shmidt 92ac2bc7e7aaad957f235992ff74d5f9af34dc5f88Dmitry Shmidt/* 93ac2bc7e7aaad957f235992ff74d5f9af34dc5f88Dmitry Shmidt * To make instrumentation more readable, every memory 94ac2bc7e7aaad957f235992ff74d5f9af34dc5f88Dmitry Shmidt * pool must have a readable name. Pool names are up to 95ac2bc7e7aaad957f235992ff74d5f9af34dc5f88Dmitry Shmidt * 8 bytes including '\0' termination. (7 printable characters.) 96ac2bc7e7aaad957f235992ff74d5f9af34dc5f88Dmitry Shmidt */ 97ac2bc7e7aaad957f235992ff74d5f9af34dc5f88Dmitry Shmidt#define BCM_MP_NAMELEN 8 98ac2bc7e7aaad957f235992ff74d5f9af34dc5f88Dmitry Shmidt 99ac2bc7e7aaad957f235992ff74d5f9af34dc5f88Dmitry Shmidt 100ac2bc7e7aaad957f235992ff74d5f9af34dc5f88Dmitry Shmidt/* 101ac2bc7e7aaad957f235992ff74d5f9af34dc5f88Dmitry Shmidt * Type definition for pool statistics. 102ac2bc7e7aaad957f235992ff74d5f9af34dc5f88Dmitry Shmidt */ 103ac2bc7e7aaad957f235992ff74d5f9af34dc5f88Dmitry Shmidttypedef struct bcm_mp_stats { 104ac2bc7e7aaad957f235992ff74d5f9af34dc5f88Dmitry Shmidt char name[BCM_MP_NAMELEN]; /* Name of this pool. */ 105ac2bc7e7aaad957f235992ff74d5f9af34dc5f88Dmitry Shmidt unsigned int objsz; /* Object size allocated in this pool */ 106ac2bc7e7aaad957f235992ff74d5f9af34dc5f88Dmitry Shmidt uint16 nobj; /* Total number of objects in this pool */ 107ac2bc7e7aaad957f235992ff74d5f9af34dc5f88Dmitry Shmidt uint16 num_alloc; /* Number of objects currently allocated */ 108ac2bc7e7aaad957f235992ff74d5f9af34dc5f88Dmitry Shmidt uint16 high_water; /* Max number of allocated objects. */ 109ac2bc7e7aaad957f235992ff74d5f9af34dc5f88Dmitry Shmidt uint16 failed_alloc; /* Failed allocations. */ 110ac2bc7e7aaad957f235992ff74d5f9af34dc5f88Dmitry Shmidt} bcm_mp_stats_t; 111ac2bc7e7aaad957f235992ff74d5f9af34dc5f88Dmitry Shmidt 112ac2bc7e7aaad957f235992ff74d5f9af34dc5f88Dmitry Shmidt 113ac2bc7e7aaad957f235992ff74d5f9af34dc5f88Dmitry Shmidt/* 114ac2bc7e7aaad957f235992ff74d5f9af34dc5f88Dmitry Shmidt************************************************************************** 115ac2bc7e7aaad957f235992ff74d5f9af34dc5f88Dmitry Shmidt* 116ac2bc7e7aaad957f235992ff74d5f9af34dc5f88Dmitry Shmidt* API Routines on the pool manager. 117ac2bc7e7aaad957f235992ff74d5f9af34dc5f88Dmitry Shmidt* 118ac2bc7e7aaad957f235992ff74d5f9af34dc5f88Dmitry Shmidt************************************************************************** 119ac2bc7e7aaad957f235992ff74d5f9af34dc5f88Dmitry Shmidt*/ 120ac2bc7e7aaad957f235992ff74d5f9af34dc5f88Dmitry Shmidt 121ac2bc7e7aaad957f235992ff74d5f9af34dc5f88Dmitry Shmidt/* 122ac2bc7e7aaad957f235992ff74d5f9af34dc5f88Dmitry Shmidt * bcm_mpm_init() - initialize the whole memory pool system. 123ac2bc7e7aaad957f235992ff74d5f9af34dc5f88Dmitry Shmidt * 124ac2bc7e7aaad957f235992ff74d5f9af34dc5f88Dmitry Shmidt * Parameters: 125ac2bc7e7aaad957f235992ff74d5f9af34dc5f88Dmitry Shmidt * osh: INPUT Operating system handle. Needed for heap memory allocation. 126ac2bc7e7aaad957f235992ff74d5f9af34dc5f88Dmitry Shmidt * max_pools: INPUT Maximum number of mempools supported. 127ac2bc7e7aaad957f235992ff74d5f9af34dc5f88Dmitry Shmidt * mgr: OUTPUT The handle is written with the new pools manager object/handle. 128ac2bc7e7aaad957f235992ff74d5f9af34dc5f88Dmitry Shmidt * 129ac2bc7e7aaad957f235992ff74d5f9af34dc5f88Dmitry Shmidt * Returns: 130ac2bc7e7aaad957f235992ff74d5f9af34dc5f88Dmitry Shmidt * BCME_OK Object initialized successfully. May be used. 131ac2bc7e7aaad957f235992ff74d5f9af34dc5f88Dmitry Shmidt * BCME_NOMEM Initialization failed due to no memory. Object must not be used. 132ac2bc7e7aaad957f235992ff74d5f9af34dc5f88Dmitry Shmidt */ 133ac2bc7e7aaad957f235992ff74d5f9af34dc5f88Dmitry Shmidtint bcm_mpm_init(struct osl_info *osh, int max_pools, bcm_mpm_mgr_h *mgrp); 134ac2bc7e7aaad957f235992ff74d5f9af34dc5f88Dmitry Shmidt 135ac2bc7e7aaad957f235992ff74d5f9af34dc5f88Dmitry Shmidt 136ac2bc7e7aaad957f235992ff74d5f9af34dc5f88Dmitry Shmidt/* 137ac2bc7e7aaad957f235992ff74d5f9af34dc5f88Dmitry Shmidt * bcm_mpm_deinit() - de-initialize the whole memory pool system. 138ac2bc7e7aaad957f235992ff74d5f9af34dc5f88Dmitry Shmidt * 139ac2bc7e7aaad957f235992ff74d5f9af34dc5f88Dmitry Shmidt * Parameters: 140ac2bc7e7aaad957f235992ff74d5f9af34dc5f88Dmitry Shmidt * mgr: INPUT Pointer to pool manager handle. 141ac2bc7e7aaad957f235992ff74d5f9af34dc5f88Dmitry Shmidt * 142ac2bc7e7aaad957f235992ff74d5f9af34dc5f88Dmitry Shmidt * Returns: 143ac2bc7e7aaad957f235992ff74d5f9af34dc5f88Dmitry Shmidt * BCME_OK Memory pool manager successfully de-initialized. 144ac2bc7e7aaad957f235992ff74d5f9af34dc5f88Dmitry Shmidt * other Indicated error occured during de-initialization. 145ac2bc7e7aaad957f235992ff74d5f9af34dc5f88Dmitry Shmidt */ 146ac2bc7e7aaad957f235992ff74d5f9af34dc5f88Dmitry Shmidtint bcm_mpm_deinit(bcm_mpm_mgr_h *mgrp); 147ac2bc7e7aaad957f235992ff74d5f9af34dc5f88Dmitry Shmidt 148ac2bc7e7aaad957f235992ff74d5f9af34dc5f88Dmitry Shmidt/* 149ac2bc7e7aaad957f235992ff74d5f9af34dc5f88Dmitry Shmidt * bcm_mpm_create_prealloc_pool() - Create a new pool for fixed size objects. The 150ac2bc7e7aaad957f235992ff74d5f9af34dc5f88Dmitry Shmidt * pool uses a contiguous block of pre-alloced 151ac2bc7e7aaad957f235992ff74d5f9af34dc5f88Dmitry Shmidt * memory. The memory block may either be provided 152ac2bc7e7aaad957f235992ff74d5f9af34dc5f88Dmitry Shmidt * by the client or dynamically allocated by the 153ac2bc7e7aaad957f235992ff74d5f9af34dc5f88Dmitry Shmidt * pool manager. 154ac2bc7e7aaad957f235992ff74d5f9af34dc5f88Dmitry Shmidt * 155ac2bc7e7aaad957f235992ff74d5f9af34dc5f88Dmitry Shmidt * Parameters: 156ac2bc7e7aaad957f235992ff74d5f9af34dc5f88Dmitry Shmidt * mgr: INPUT The handle to the pool manager 157ac2bc7e7aaad957f235992ff74d5f9af34dc5f88Dmitry Shmidt * obj_sz: INPUT Size of objects that will be allocated by the new pool 158ac2bc7e7aaad957f235992ff74d5f9af34dc5f88Dmitry Shmidt * Must be >= sizeof(void *). 159ac2bc7e7aaad957f235992ff74d5f9af34dc5f88Dmitry Shmidt * nobj: INPUT Maximum number of concurrently existing objects to support 160ac2bc7e7aaad957f235992ff74d5f9af34dc5f88Dmitry Shmidt * memstart INPUT Pointer to the memory to use, or NULL to malloc() 161ac2bc7e7aaad957f235992ff74d5f9af34dc5f88Dmitry Shmidt * memsize INPUT Number of bytes referenced from memstart (for error checking). 162ac2bc7e7aaad957f235992ff74d5f9af34dc5f88Dmitry Shmidt * Must be 0 if 'memstart' is NULL. 163ac2bc7e7aaad957f235992ff74d5f9af34dc5f88Dmitry Shmidt * poolname INPUT For instrumentation, the name of the pool 164ac2bc7e7aaad957f235992ff74d5f9af34dc5f88Dmitry Shmidt * newp: OUTPUT The handle for the new pool, if creation is successful 165ac2bc7e7aaad957f235992ff74d5f9af34dc5f88Dmitry Shmidt * 166ac2bc7e7aaad957f235992ff74d5f9af34dc5f88Dmitry Shmidt * Returns: 167ac2bc7e7aaad957f235992ff74d5f9af34dc5f88Dmitry Shmidt * BCME_OK Pool created ok. 168ac2bc7e7aaad957f235992ff74d5f9af34dc5f88Dmitry Shmidt * other Pool not created due to indicated error. newpoolp set to NULL. 169ac2bc7e7aaad957f235992ff74d5f9af34dc5f88Dmitry Shmidt * 170ac2bc7e7aaad957f235992ff74d5f9af34dc5f88Dmitry Shmidt * 171ac2bc7e7aaad957f235992ff74d5f9af34dc5f88Dmitry Shmidt */ 172ac2bc7e7aaad957f235992ff74d5f9af34dc5f88Dmitry Shmidtint bcm_mpm_create_prealloc_pool(bcm_mpm_mgr_h mgr, 173ac2bc7e7aaad957f235992ff74d5f9af34dc5f88Dmitry Shmidt unsigned int obj_sz, 174ac2bc7e7aaad957f235992ff74d5f9af34dc5f88Dmitry Shmidt int nobj, 175ac2bc7e7aaad957f235992ff74d5f9af34dc5f88Dmitry Shmidt void *memstart, 176ac2bc7e7aaad957f235992ff74d5f9af34dc5f88Dmitry Shmidt unsigned int memsize, 177ac2bc7e7aaad957f235992ff74d5f9af34dc5f88Dmitry Shmidt char poolname[BCM_MP_NAMELEN], 178ac2bc7e7aaad957f235992ff74d5f9af34dc5f88Dmitry Shmidt bcm_mp_pool_h *newp); 179ac2bc7e7aaad957f235992ff74d5f9af34dc5f88Dmitry Shmidt 180ac2bc7e7aaad957f235992ff74d5f9af34dc5f88Dmitry Shmidt 181ac2bc7e7aaad957f235992ff74d5f9af34dc5f88Dmitry Shmidt/* 182ac2bc7e7aaad957f235992ff74d5f9af34dc5f88Dmitry Shmidt * bcm_mpm_delete_prealloc_pool() - Delete a memory pool. This should only be called after 183ac2bc7e7aaad957f235992ff74d5f9af34dc5f88Dmitry Shmidt * all memory objects have been freed back to the pool. 184ac2bc7e7aaad957f235992ff74d5f9af34dc5f88Dmitry Shmidt * 185ac2bc7e7aaad957f235992ff74d5f9af34dc5f88Dmitry Shmidt * Parameters: 186ac2bc7e7aaad957f235992ff74d5f9af34dc5f88Dmitry Shmidt * mgr: INPUT The handle to the pools manager 187ac2bc7e7aaad957f235992ff74d5f9af34dc5f88Dmitry Shmidt * pool: INPUT The handle of the pool to delete 188ac2bc7e7aaad957f235992ff74d5f9af34dc5f88Dmitry Shmidt * 189ac2bc7e7aaad957f235992ff74d5f9af34dc5f88Dmitry Shmidt * Returns: 190ac2bc7e7aaad957f235992ff74d5f9af34dc5f88Dmitry Shmidt * BCME_OK Pool deleted ok. 191ac2bc7e7aaad957f235992ff74d5f9af34dc5f88Dmitry Shmidt * other Pool not deleted due to indicated error. 192ac2bc7e7aaad957f235992ff74d5f9af34dc5f88Dmitry Shmidt * 193ac2bc7e7aaad957f235992ff74d5f9af34dc5f88Dmitry Shmidt */ 194ac2bc7e7aaad957f235992ff74d5f9af34dc5f88Dmitry Shmidtint bcm_mpm_delete_prealloc_pool(bcm_mpm_mgr_h mgr, bcm_mp_pool_h *poolp); 195ac2bc7e7aaad957f235992ff74d5f9af34dc5f88Dmitry Shmidt 196ac2bc7e7aaad957f235992ff74d5f9af34dc5f88Dmitry Shmidt/* 197ac2bc7e7aaad957f235992ff74d5f9af34dc5f88Dmitry Shmidt * bcm_mpm_create_heap_pool() - Create a new pool for fixed size objects. The memory 198ac2bc7e7aaad957f235992ff74d5f9af34dc5f88Dmitry Shmidt * pool allocator uses the heap (malloc/free) for memory. 199ac2bc7e7aaad957f235992ff74d5f9af34dc5f88Dmitry Shmidt * In this case, the pool allocator is just providing 200ac2bc7e7aaad957f235992ff74d5f9af34dc5f88Dmitry Shmidt * statistics and instrumentation on top of the heap, 201ac2bc7e7aaad957f235992ff74d5f9af34dc5f88Dmitry Shmidt * without modifying the heap allocation implementation. 202ac2bc7e7aaad957f235992ff74d5f9af34dc5f88Dmitry Shmidt * 203ac2bc7e7aaad957f235992ff74d5f9af34dc5f88Dmitry Shmidt * Parameters: 204ac2bc7e7aaad957f235992ff74d5f9af34dc5f88Dmitry Shmidt * mgr: INPUT The handle to the pool manager 205ac2bc7e7aaad957f235992ff74d5f9af34dc5f88Dmitry Shmidt * obj_sz: INPUT Size of objects that will be allocated by the new pool 206ac2bc7e7aaad957f235992ff74d5f9af34dc5f88Dmitry Shmidt * poolname INPUT For instrumentation, the name of the pool 207ac2bc7e7aaad957f235992ff74d5f9af34dc5f88Dmitry Shmidt * newp: OUTPUT The handle for the new pool, if creation is successful 208ac2bc7e7aaad957f235992ff74d5f9af34dc5f88Dmitry Shmidt * 209ac2bc7e7aaad957f235992ff74d5f9af34dc5f88Dmitry Shmidt * Returns: 210ac2bc7e7aaad957f235992ff74d5f9af34dc5f88Dmitry Shmidt * BCME_OK Pool created ok. 211ac2bc7e7aaad957f235992ff74d5f9af34dc5f88Dmitry Shmidt * other Pool not created due to indicated error. newpoolp set to NULL. 212ac2bc7e7aaad957f235992ff74d5f9af34dc5f88Dmitry Shmidt * 213ac2bc7e7aaad957f235992ff74d5f9af34dc5f88Dmitry Shmidt * 214ac2bc7e7aaad957f235992ff74d5f9af34dc5f88Dmitry Shmidt */ 215ac2bc7e7aaad957f235992ff74d5f9af34dc5f88Dmitry Shmidtint bcm_mpm_create_heap_pool(bcm_mpm_mgr_h mgr, unsigned int obj_sz, 216ac2bc7e7aaad957f235992ff74d5f9af34dc5f88Dmitry Shmidt char poolname[BCM_MP_NAMELEN], 217ac2bc7e7aaad957f235992ff74d5f9af34dc5f88Dmitry Shmidt bcm_mp_pool_h *newp); 218ac2bc7e7aaad957f235992ff74d5f9af34dc5f88Dmitry Shmidt 219ac2bc7e7aaad957f235992ff74d5f9af34dc5f88Dmitry Shmidt 220ac2bc7e7aaad957f235992ff74d5f9af34dc5f88Dmitry Shmidt/* 221ac2bc7e7aaad957f235992ff74d5f9af34dc5f88Dmitry Shmidt * bcm_mpm_delete_heap_pool() - Delete a memory pool. This should only be called after 222ac2bc7e7aaad957f235992ff74d5f9af34dc5f88Dmitry Shmidt * all memory objects have been freed back to the pool. 223ac2bc7e7aaad957f235992ff74d5f9af34dc5f88Dmitry Shmidt * 224ac2bc7e7aaad957f235992ff74d5f9af34dc5f88Dmitry Shmidt * Parameters: 225ac2bc7e7aaad957f235992ff74d5f9af34dc5f88Dmitry Shmidt * mgr: INPUT The handle to the pools manager 226ac2bc7e7aaad957f235992ff74d5f9af34dc5f88Dmitry Shmidt * pool: INPUT The handle of the pool to delete 227ac2bc7e7aaad957f235992ff74d5f9af34dc5f88Dmitry Shmidt * 228ac2bc7e7aaad957f235992ff74d5f9af34dc5f88Dmitry Shmidt * Returns: 229ac2bc7e7aaad957f235992ff74d5f9af34dc5f88Dmitry Shmidt * BCME_OK Pool deleted ok. 230ac2bc7e7aaad957f235992ff74d5f9af34dc5f88Dmitry Shmidt * other Pool not deleted due to indicated error. 231ac2bc7e7aaad957f235992ff74d5f9af34dc5f88Dmitry Shmidt * 232ac2bc7e7aaad957f235992ff74d5f9af34dc5f88Dmitry Shmidt */ 233ac2bc7e7aaad957f235992ff74d5f9af34dc5f88Dmitry Shmidtint bcm_mpm_delete_heap_pool(bcm_mpm_mgr_h mgr, bcm_mp_pool_h *poolp); 234ac2bc7e7aaad957f235992ff74d5f9af34dc5f88Dmitry Shmidt 235ac2bc7e7aaad957f235992ff74d5f9af34dc5f88Dmitry Shmidt 236ac2bc7e7aaad957f235992ff74d5f9af34dc5f88Dmitry Shmidt/* 237ac2bc7e7aaad957f235992ff74d5f9af34dc5f88Dmitry Shmidt * bcm_mpm_stats() - Return stats for all pools 238ac2bc7e7aaad957f235992ff74d5f9af34dc5f88Dmitry Shmidt * 239ac2bc7e7aaad957f235992ff74d5f9af34dc5f88Dmitry Shmidt * Parameters: 240ac2bc7e7aaad957f235992ff74d5f9af34dc5f88Dmitry Shmidt * mgr: INPUT The handle to the pools manager 241ac2bc7e7aaad957f235992ff74d5f9af34dc5f88Dmitry Shmidt * stats: OUTPUT Array of pool statistics. 242ac2bc7e7aaad957f235992ff74d5f9af34dc5f88Dmitry Shmidt * nentries: MOD Max elements in 'stats' array on INPUT. Actual number 243ac2bc7e7aaad957f235992ff74d5f9af34dc5f88Dmitry Shmidt * of array elements copied to 'stats' on OUTPUT. 244ac2bc7e7aaad957f235992ff74d5f9af34dc5f88Dmitry Shmidt * 245ac2bc7e7aaad957f235992ff74d5f9af34dc5f88Dmitry Shmidt * Returns: 246ac2bc7e7aaad957f235992ff74d5f9af34dc5f88Dmitry Shmidt * BCME_OK Ok 247ac2bc7e7aaad957f235992ff74d5f9af34dc5f88Dmitry Shmidt * other Error getting stats. 248ac2bc7e7aaad957f235992ff74d5f9af34dc5f88Dmitry Shmidt * 249ac2bc7e7aaad957f235992ff74d5f9af34dc5f88Dmitry Shmidt */ 250ac2bc7e7aaad957f235992ff74d5f9af34dc5f88Dmitry Shmidtint bcm_mpm_stats(bcm_mpm_mgr_h mgr, bcm_mp_stats_t *stats, int *nentries); 251ac2bc7e7aaad957f235992ff74d5f9af34dc5f88Dmitry Shmidt 252ac2bc7e7aaad957f235992ff74d5f9af34dc5f88Dmitry Shmidt 253ac2bc7e7aaad957f235992ff74d5f9af34dc5f88Dmitry Shmidt/* 254ac2bc7e7aaad957f235992ff74d5f9af34dc5f88Dmitry Shmidt * bcm_mpm_dump() - Display statistics on all pools 255ac2bc7e7aaad957f235992ff74d5f9af34dc5f88Dmitry Shmidt * 256ac2bc7e7aaad957f235992ff74d5f9af34dc5f88Dmitry Shmidt * Parameters: 257ac2bc7e7aaad957f235992ff74d5f9af34dc5f88Dmitry Shmidt * mgr: INPUT The handle to the pools manager 258ac2bc7e7aaad957f235992ff74d5f9af34dc5f88Dmitry Shmidt * b: OUTPUT Output buffer. 259ac2bc7e7aaad957f235992ff74d5f9af34dc5f88Dmitry Shmidt * 260ac2bc7e7aaad957f235992ff74d5f9af34dc5f88Dmitry Shmidt * Returns: 261ac2bc7e7aaad957f235992ff74d5f9af34dc5f88Dmitry Shmidt * BCME_OK Ok 262ac2bc7e7aaad957f235992ff74d5f9af34dc5f88Dmitry Shmidt * other Error during dump. 263ac2bc7e7aaad957f235992ff74d5f9af34dc5f88Dmitry Shmidt * 264ac2bc7e7aaad957f235992ff74d5f9af34dc5f88Dmitry Shmidt */ 265ac2bc7e7aaad957f235992ff74d5f9af34dc5f88Dmitry Shmidtint bcm_mpm_dump(bcm_mpm_mgr_h mgr, struct bcmstrbuf *b); 266ac2bc7e7aaad957f235992ff74d5f9af34dc5f88Dmitry Shmidt 267ac2bc7e7aaad957f235992ff74d5f9af34dc5f88Dmitry Shmidt 268ac2bc7e7aaad957f235992ff74d5f9af34dc5f88Dmitry Shmidt/* 269ac2bc7e7aaad957f235992ff74d5f9af34dc5f88Dmitry Shmidt * bcm_mpm_get_obj_size() - The size of memory objects may need to be padded to 270ac2bc7e7aaad957f235992ff74d5f9af34dc5f88Dmitry Shmidt * compensate for alignment requirements of the objects. 271ac2bc7e7aaad957f235992ff74d5f9af34dc5f88Dmitry Shmidt * This function provides the padded object size. If clients 272ac2bc7e7aaad957f235992ff74d5f9af34dc5f88Dmitry Shmidt * pre-allocate a memory slab for a memory pool, the 273ac2bc7e7aaad957f235992ff74d5f9af34dc5f88Dmitry Shmidt * padded object size should be used by the client to allocate 274ac2bc7e7aaad957f235992ff74d5f9af34dc5f88Dmitry Shmidt * the memory slab (in order to provide sufficent space for 275ac2bc7e7aaad957f235992ff74d5f9af34dc5f88Dmitry Shmidt * the maximum number of objects). 276ac2bc7e7aaad957f235992ff74d5f9af34dc5f88Dmitry Shmidt * 277ac2bc7e7aaad957f235992ff74d5f9af34dc5f88Dmitry Shmidt * Parameters: 278ac2bc7e7aaad957f235992ff74d5f9af34dc5f88Dmitry Shmidt * mgr: INPUT The handle to the pools manager. 279ac2bc7e7aaad957f235992ff74d5f9af34dc5f88Dmitry Shmidt * obj_sz: INPUT Input object size. 280ac2bc7e7aaad957f235992ff74d5f9af34dc5f88Dmitry Shmidt * padded_obj_sz: OUTPUT Padded object size. 281ac2bc7e7aaad957f235992ff74d5f9af34dc5f88Dmitry Shmidt * 282ac2bc7e7aaad957f235992ff74d5f9af34dc5f88Dmitry Shmidt * Returns: 283ac2bc7e7aaad957f235992ff74d5f9af34dc5f88Dmitry Shmidt * BCME_OK Ok 284ac2bc7e7aaad957f235992ff74d5f9af34dc5f88Dmitry Shmidt * BCME_BADARG Bad arguments. 285ac2bc7e7aaad957f235992ff74d5f9af34dc5f88Dmitry Shmidt * 286ac2bc7e7aaad957f235992ff74d5f9af34dc5f88Dmitry Shmidt */ 287ac2bc7e7aaad957f235992ff74d5f9af34dc5f88Dmitry Shmidtint bcm_mpm_get_obj_size(bcm_mpm_mgr_h mgr, unsigned int obj_sz, unsigned int *padded_obj_sz); 288ac2bc7e7aaad957f235992ff74d5f9af34dc5f88Dmitry Shmidt 289ac2bc7e7aaad957f235992ff74d5f9af34dc5f88Dmitry Shmidt 290ac2bc7e7aaad957f235992ff74d5f9af34dc5f88Dmitry Shmidt/* 291ac2bc7e7aaad957f235992ff74d5f9af34dc5f88Dmitry Shmidt*************************************************************************** 292ac2bc7e7aaad957f235992ff74d5f9af34dc5f88Dmitry Shmidt* 293ac2bc7e7aaad957f235992ff74d5f9af34dc5f88Dmitry Shmidt* API Routines on a specific pool. 294ac2bc7e7aaad957f235992ff74d5f9af34dc5f88Dmitry Shmidt* 295ac2bc7e7aaad957f235992ff74d5f9af34dc5f88Dmitry Shmidt*************************************************************************** 296ac2bc7e7aaad957f235992ff74d5f9af34dc5f88Dmitry Shmidt*/ 297ac2bc7e7aaad957f235992ff74d5f9af34dc5f88Dmitry Shmidt 298ac2bc7e7aaad957f235992ff74d5f9af34dc5f88Dmitry Shmidt 299ac2bc7e7aaad957f235992ff74d5f9af34dc5f88Dmitry Shmidt/* 300ac2bc7e7aaad957f235992ff74d5f9af34dc5f88Dmitry Shmidt * bcm_mp_alloc() - Allocate a memory pool object. 301ac2bc7e7aaad957f235992ff74d5f9af34dc5f88Dmitry Shmidt * 302ac2bc7e7aaad957f235992ff74d5f9af34dc5f88Dmitry Shmidt * Parameters: 303ac2bc7e7aaad957f235992ff74d5f9af34dc5f88Dmitry Shmidt * pool: INPUT The handle to the pool. 304ac2bc7e7aaad957f235992ff74d5f9af34dc5f88Dmitry Shmidt * 305ac2bc7e7aaad957f235992ff74d5f9af34dc5f88Dmitry Shmidt * Returns: 306ac2bc7e7aaad957f235992ff74d5f9af34dc5f88Dmitry Shmidt * A pointer to the new object. NULL on error. 307ac2bc7e7aaad957f235992ff74d5f9af34dc5f88Dmitry Shmidt * 308ac2bc7e7aaad957f235992ff74d5f9af34dc5f88Dmitry Shmidt */ 309ac2bc7e7aaad957f235992ff74d5f9af34dc5f88Dmitry Shmidtvoid* bcm_mp_alloc(bcm_mp_pool_h pool); 310ac2bc7e7aaad957f235992ff74d5f9af34dc5f88Dmitry Shmidt 311ac2bc7e7aaad957f235992ff74d5f9af34dc5f88Dmitry Shmidt/* 312ac2bc7e7aaad957f235992ff74d5f9af34dc5f88Dmitry Shmidt * bcm_mp_free() - Free a memory pool object. 313ac2bc7e7aaad957f235992ff74d5f9af34dc5f88Dmitry Shmidt * 314ac2bc7e7aaad957f235992ff74d5f9af34dc5f88Dmitry Shmidt * Parameters: 315ac2bc7e7aaad957f235992ff74d5f9af34dc5f88Dmitry Shmidt * pool: INPUT The handle to the pool. 316ac2bc7e7aaad957f235992ff74d5f9af34dc5f88Dmitry Shmidt * objp: INPUT A pointer to the object to free. 317ac2bc7e7aaad957f235992ff74d5f9af34dc5f88Dmitry Shmidt * 318ac2bc7e7aaad957f235992ff74d5f9af34dc5f88Dmitry Shmidt * Returns: 319ac2bc7e7aaad957f235992ff74d5f9af34dc5f88Dmitry Shmidt * BCME_OK Ok 320ac2bc7e7aaad957f235992ff74d5f9af34dc5f88Dmitry Shmidt * other Error during free. 321ac2bc7e7aaad957f235992ff74d5f9af34dc5f88Dmitry Shmidt * 322ac2bc7e7aaad957f235992ff74d5f9af34dc5f88Dmitry Shmidt */ 323ac2bc7e7aaad957f235992ff74d5f9af34dc5f88Dmitry Shmidtint bcm_mp_free(bcm_mp_pool_h pool, void *objp); 324ac2bc7e7aaad957f235992ff74d5f9af34dc5f88Dmitry Shmidt 325ac2bc7e7aaad957f235992ff74d5f9af34dc5f88Dmitry Shmidt/* 326ac2bc7e7aaad957f235992ff74d5f9af34dc5f88Dmitry Shmidt * bcm_mp_stats() - Return stats for this pool 327ac2bc7e7aaad957f235992ff74d5f9af34dc5f88Dmitry Shmidt * 328ac2bc7e7aaad957f235992ff74d5f9af34dc5f88Dmitry Shmidt * Parameters: 329ac2bc7e7aaad957f235992ff74d5f9af34dc5f88Dmitry Shmidt * pool: INPUT The handle to the pool 330ac2bc7e7aaad957f235992ff74d5f9af34dc5f88Dmitry Shmidt * stats: OUTPUT Pool statistics 331ac2bc7e7aaad957f235992ff74d5f9af34dc5f88Dmitry Shmidt * 332ac2bc7e7aaad957f235992ff74d5f9af34dc5f88Dmitry Shmidt * Returns: 333ac2bc7e7aaad957f235992ff74d5f9af34dc5f88Dmitry Shmidt * BCME_OK Ok 334ac2bc7e7aaad957f235992ff74d5f9af34dc5f88Dmitry Shmidt * other Error getting statistics. 335ac2bc7e7aaad957f235992ff74d5f9af34dc5f88Dmitry Shmidt * 336ac2bc7e7aaad957f235992ff74d5f9af34dc5f88Dmitry Shmidt */ 337ac2bc7e7aaad957f235992ff74d5f9af34dc5f88Dmitry Shmidtint bcm_mp_stats(bcm_mp_pool_h pool, bcm_mp_stats_t *stats); 338ac2bc7e7aaad957f235992ff74d5f9af34dc5f88Dmitry Shmidt 339ac2bc7e7aaad957f235992ff74d5f9af34dc5f88Dmitry Shmidt 340ac2bc7e7aaad957f235992ff74d5f9af34dc5f88Dmitry Shmidt/* 341ac2bc7e7aaad957f235992ff74d5f9af34dc5f88Dmitry Shmidt * bcm_mp_dump() - Dump a pool 342ac2bc7e7aaad957f235992ff74d5f9af34dc5f88Dmitry Shmidt * 343ac2bc7e7aaad957f235992ff74d5f9af34dc5f88Dmitry Shmidt * Parameters: 344ac2bc7e7aaad957f235992ff74d5f9af34dc5f88Dmitry Shmidt * pool: INPUT The handle to the pool 345ac2bc7e7aaad957f235992ff74d5f9af34dc5f88Dmitry Shmidt * b OUTPUT Output buffer 346ac2bc7e7aaad957f235992ff74d5f9af34dc5f88Dmitry Shmidt * 347ac2bc7e7aaad957f235992ff74d5f9af34dc5f88Dmitry Shmidt * Returns: 348ac2bc7e7aaad957f235992ff74d5f9af34dc5f88Dmitry Shmidt * BCME_OK Ok 349ac2bc7e7aaad957f235992ff74d5f9af34dc5f88Dmitry Shmidt * other Error during dump. 350ac2bc7e7aaad957f235992ff74d5f9af34dc5f88Dmitry Shmidt * 351ac2bc7e7aaad957f235992ff74d5f9af34dc5f88Dmitry Shmidt */ 352ac2bc7e7aaad957f235992ff74d5f9af34dc5f88Dmitry Shmidtint bcm_mp_dump(bcm_mp_pool_h pool, struct bcmstrbuf *b); 353ac2bc7e7aaad957f235992ff74d5f9af34dc5f88Dmitry Shmidt 354ac2bc7e7aaad957f235992ff74d5f9af34dc5f88Dmitry Shmidt 355ac2bc7e7aaad957f235992ff74d5f9af34dc5f88Dmitry Shmidt#endif /* _BCM_MPOOL_PUB_H */ 356