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