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 52 #ifdef __cplusplus 53 extern "C" { 54 #endif 55 56 /** 57 * This struct represents an OpenThread message buffer. 58 * 59 */ 60 typedef struct otMessageBuffer 61 { 62 struct otMessageBuffer *mNext; ///< Pointer to the next buffer. 63 } otMessageBuffer; 64 65 /** 66 * Initialize the platform implemented message pool. 67 * 68 * This function is used when `OPENTHREAD_CONFIG_PLATFORM_MESSAGE_MANAGEMENT` is enabled. 69 * 70 * @param[in] aInstance A pointer to the OpenThread instance. 71 * @param[in] aMinNumFreeBuffers An uint16 containing the minimum number of free buffers desired by OpenThread. 72 * @param[in] aBufferSize The size in bytes of a buffer object. 73 * 74 */ 75 void otPlatMessagePoolInit(otInstance *aInstance, uint16_t aMinNumFreeBuffers, size_t aBufferSize); 76 77 /** 78 * Allocate a buffer from the platform managed buffer pool. 79 * 80 * This function is used when `OPENTHREAD_CONFIG_PLATFORM_MESSAGE_MANAGEMENT` is enabled. 81 * 82 * The returned buffer instance MUST have at least `aBufferSize` bytes (as specified in `otPlatMessagePoolInit()`). 83 * 84 * @param[in] aInstance A pointer to the OpenThread instance. 85 * 86 * @returns A pointer to the buffer or NULL if no buffers are available. 87 * 88 */ 89 otMessageBuffer *otPlatMessagePoolNew(otInstance *aInstance); 90 91 /** 92 * This function is used to free a buffer back to the platform managed buffer pool. 93 * 94 * This function is used when `OPENTHREAD_CONFIG_PLATFORM_MESSAGE_MANAGEMENT` is enabled. 95 * 96 * @param[in] aInstance A pointer to the OpenThread instance. 97 * @param[in] aBuffer The buffer to free. 98 * 99 */ 100 void otPlatMessagePoolFree(otInstance *aInstance, otMessageBuffer *aBuffer); 101 102 /** 103 * Get the number of free buffers. 104 * 105 * This function is used when `OPENTHREAD_CONFIG_PLATFORM_MESSAGE_MANAGEMENT` is enabled. 106 * 107 * @param[in] aInstance A pointer to the OpenThread instance. 108 * 109 * @returns The number of buffers currently free and available to OpenThread. 110 * 111 */ 112 uint16_t otPlatMessagePoolNumFreeBuffers(otInstance *aInstance); 113 114 #ifdef __cplusplus 115 } // extern "C" 116 #endif 117 118 /** 119 * @} 120 * 121 */ 122 123 #endif // OPENTHREAD_PLATFORM_MESSAGEPOOL_H_ 124