/*------------------------------------------------------------------------------------------------*/ /* UNICENS V2.1.0-3491 */ /* Copyright (c) 2017 Microchip Technology Germany II GmbH & Co. KG. */ /* */ /* This program is free software: you can redistribute it and/or modify */ /* it under the terms of the GNU General Public License as published by */ /* the Free Software Foundation, either version 2 of the License, or */ /* (at your option) any later version. */ /* */ /* This program is distributed in the hope that it will be useful, */ /* but WITHOUT ANY WARRANTY; without even the implied warranty of */ /* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the */ /* GNU General Public License for more details. */ /* */ /* You should have received a copy of the GNU General Public License */ /* along with this program. If not, see . */ /* */ /* You may also obtain this software under a propriety license from Microchip. */ /* Please contact Microchip for further information. */ /*------------------------------------------------------------------------------------------------*/ /*! * \file * \brief Header file of the class CStaticMemoryManager. * \cond UCS_INTERNAL_DOC * \addtogroup G_UCS_SMM_CLASS * @{ */ #ifndef UCS_SMM_H #define UCS_SMM_H /*------------------------------------------------------------------------------------------------*/ /* Includes */ /*------------------------------------------------------------------------------------------------*/ #include "ucs_smm_pb.h" #include "ucs_ret_pb.h" #include "ucs_dl.h" #include "ucs_amsmessage.h" #include "ucs_amsallocator.h" #ifdef __cplusplus extern "C" { #endif /*------------------------------------------------------------------------------------------------*/ /* Macros */ /*------------------------------------------------------------------------------------------------*/ #define SMM_NUM_TX_MSGS ((uint16_t)UCS_AMS_NUM_TX_MSGS) #define SMM_NUM_RX_MSGS ((uint16_t)UCS_AMS_NUM_RX_MSGS) #define SMM_SIZE_TX_MSG ((uint16_t)UCS_AMS_SIZE_TX_MSG) #define SMM_SIZE_RX_MSG ((uint16_t)UCS_AMS_SIZE_RX_MSG) /*------------------------------------------------------------------------------------------------*/ /* Type definitions */ /*------------------------------------------------------------------------------------------------*/ /*! \brief Tx object allocation info */ typedef struct Smm_TxObject_ { Amsg_IntMsgTx_t object; /*!< \brief Tx object memory */ CDlNode node; /*!< \brief Node that enables listing */ } Smm_TxObject_t; /*! \brief Rx object allocation info */ typedef struct Smm_RxObject_ { Amsg_IntMsgRx_t object; /*!< \brief Rx object memory */ CDlNode node; /*!< \brief Node that enables listing */ } Smm_RxObject_t; /*! \brief Tx payload allocation info */ typedef struct Smm_TxPayload_ { uint8_t data[SMM_SIZE_TX_MSG]; /*!< \brief Tx payload memory */ CDlNode node; /*!< \brief Node that enables listing */ } Smm_TxPayload_t; /*! \brief Rx payload allocation info */ typedef struct Smm_RxPayload_ { uint8_t data[SMM_SIZE_RX_MSG]; /*!< \brief Rx payload memory */ CDlNode node; /*!< \brief Node that enables listing */ } Smm_RxPayload_t; /*! \brief Static memory allocation of objects and payload */ typedef struct Smm_Resources_ { Smm_TxObject_t tx_objects[SMM_NUM_TX_MSGS]; /*!< \brief Statically allocated Tx objects */ Smm_RxObject_t rx_objects[SMM_NUM_RX_MSGS]; /*!< \brief Statically allocated Rx objects */ Smm_TxPayload_t tx_payload[SMM_NUM_TX_MSGS]; /*!< \brief Statically allocated Tx payload */ Smm_RxPayload_t rx_payload[SMM_NUM_RX_MSGS]; /*!< \brief Statically allocated Rx payload */ } Smm_Resources_t; /*! \brief Descriptor which simplifies access to different memory types */ typedef struct Smm_Descriptor_ { CDlList list; /*!< \brief The list of available memory chunks */ uint16_t max_mem_size; /*!< \brief The maximum size of one memory chunk */ } Smm_Descriptor_t; /*------------------------------------------------------------------------------------------------*/ /* Class definitions */ /*------------------------------------------------------------------------------------------------*/ /*! \brief Structure of the class CStaticMemoryManager. */ typedef struct CStaticMemoryManager_ { Smm_Resources_t resources; /*!< \brief Static allocation of memory */ Smm_Descriptor_t null_descr; /*!< \brief Descriptor for unknown memory type. Performance measure. */ Smm_Descriptor_t tx_object_descr; /*!< \brief Descriptor of Tx object type */ Smm_Descriptor_t tx_payload_descr; /*!< \brief Descriptor of Tx payload type */ Smm_Descriptor_t rx_object_descr; /*!< \brief Descriptor of Rx object type */ Smm_Descriptor_t rx_payload_descr; /*!< \brief Descriptor of Rx payload type */ void *ucs_user_ptr; /*!< \brief User reference that needs to be passed in every callback function */ } CStaticMemoryManager; /*------------------------------------------------------------------------------------------------*/ /* Prototypes of class CStaticMemoryManager */ /*------------------------------------------------------------------------------------------------*/ extern void Smm_Ctor(CStaticMemoryManager *self, void *ucs_user_ptr); extern Ucs_Return_t Smm_LoadPlugin(CStaticMemoryManager *self, Ams_MemAllocator_t *allocator_ptr, uint16_t rx_def_payload_size); extern Ucs_Return_t Smm_GetFreeBufferCnt(CStaticMemoryManager *self, uint16_t *rx_cnt_ptr, uint16_t *tx_cnt_ptr); #ifdef __cplusplus } /* extern "C" */ #endif #endif /* #ifndef UCS_SMM_H */ /*! * @} * \endcond */ /*------------------------------------------------------------------------------------------------*/ /* End of file */ /*------------------------------------------------------------------------------------------------*/