1 /* 2 * Copyright (c) 2016, The OpenThread Authors. 3 * All rights reserved. 4 * 5 * Redistribution and use in source and binary forms, with or without 6 * modification, are permitted provided that the following conditions are met: 7 * 1. Redistributions of source code must retain the above copyright 8 * notice, this list of conditions and the following disclaimer. 9 * 2. Redistributions in binary form must reproduce the above copyright 10 * notice, this list of conditions and the following disclaimer in the 11 * documentation and/or other materials provided with the distribution. 12 * 3. Neither the name of the copyright holder nor the 13 * names of its contributors may be used to endorse or promote products 14 * derived from this software without specific prior written permission. 15 * 16 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" 17 * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 18 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 19 * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE 20 * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR 21 * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF 22 * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS 23 * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN 24 * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) 25 * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE 26 * POSSIBILITY OF SUCH DAMAGE. 27 */ 28 29 /** 30 * @file 31 * @brief 32 * This file includes the platform abstraction for the message pool. 33 */ 34 35 #ifndef OPENTHREAD_PLATFORM_MESSAGEPOOL_H_ 36 #define OPENTHREAD_PLATFORM_MESSAGEPOOL_H_ 37 38 #include <stdint.h> 39 40 #include <openthread/message.h> 41 42 /** 43 * @addtogroup plat-messagepool 44 * 45 * @brief 46 * This module includes the platform abstraction for the message pool. 47 * 48 * @{ 49 */ 50 51 #ifdef __cplusplus 52 extern "C" { 53 #endif 54 55 /** 56 * Represents an OpenThread message buffer. 57 */ 58 typedef struct otMessageBuffer 59 { 60 struct otMessageBuffer *mNext; ///< Pointer to the next buffer. 61 } otMessageBuffer; 62 63 /** 64 * Initialize the platform implemented message pool. 65 * 66 * Is used when `OPENTHREAD_CONFIG_PLATFORM_MESSAGE_MANAGEMENT` is enabled. 67 * 68 * @param[in] aInstance A pointer to the OpenThread instance. 69 * @param[in] aMinNumFreeBuffers An uint16 containing the minimum number of free buffers desired by OpenThread. 70 * @param[in] aBufferSize The size in bytes of a buffer object. 71 */ 72 void otPlatMessagePoolInit(otInstance *aInstance, uint16_t aMinNumFreeBuffers, size_t aBufferSize); 73 74 /** 75 * Allocate a buffer from the platform managed buffer pool. 76 * 77 * Is used when `OPENTHREAD_CONFIG_PLATFORM_MESSAGE_MANAGEMENT` is enabled. 78 * 79 * The returned buffer instance MUST have at least `aBufferSize` bytes (as specified in `otPlatMessagePoolInit()`). 80 * 81 * @param[in] aInstance A pointer to the OpenThread instance. 82 * 83 * @returns A pointer to the buffer or NULL if no buffers are available. 84 */ 85 otMessageBuffer *otPlatMessagePoolNew(otInstance *aInstance); 86 87 /** 88 * Is used to free a buffer back to the platform managed buffer pool. 89 * 90 * Is used when `OPENTHREAD_CONFIG_PLATFORM_MESSAGE_MANAGEMENT` is enabled. 91 * 92 * @param[in] aInstance A pointer to the OpenThread instance. 93 * @param[in] aBuffer The buffer to free. 94 */ 95 void otPlatMessagePoolFree(otInstance *aInstance, otMessageBuffer *aBuffer); 96 97 /** 98 * Get the number of free buffers. 99 * 100 * Is used when `OPENTHREAD_CONFIG_PLATFORM_MESSAGE_MANAGEMENT` is enabled. 101 * 102 * @param[in] aInstance A pointer to the OpenThread instance. 103 * 104 * @returns The number of buffers currently free and available to OpenThread. 105 */ 106 uint16_t otPlatMessagePoolNumFreeBuffers(otInstance *aInstance); 107 108 #ifdef __cplusplus 109 } // extern "C" 110 #endif 111 112 /** 113 * @} 114 */ 115 116 #endif // OPENTHREAD_PLATFORM_MESSAGEPOOL_H_ 117