summaryrefslogtreecommitdiffstats
path: root/mnsl/mns_pmp.h
diff options
context:
space:
mode:
Diffstat (limited to 'mnsl/mns_pmp.h')
-rw-r--r--mnsl/mns_pmp.h211
1 files changed, 211 insertions, 0 deletions
diff --git a/mnsl/mns_pmp.h b/mnsl/mns_pmp.h
new file mode 100644
index 0000000..96b22b0
--- /dev/null
+++ b/mnsl/mns_pmp.h
@@ -0,0 +1,211 @@
+/*
+ * MOST NetServices "Light" V3.2.7.0.1796 MultiInstance Patch
+ *
+ * Copyright (C) 2015 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 3 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 <http://www.gnu.org/licenses/>.
+ *
+ * You may also obtain this software under a propriety license from Microchip.
+ * Please contact Microchip for further information.
+ *
+ */
+
+/*!
+ * \file
+ * \brief Internal header file of Port Message Protocol
+ *
+ * \cond MNS_INTERNAL_DOC
+ * \addtogroup G_PMH
+ * @{
+ */
+
+#ifndef MNS_PMP_H
+#define MNS_PMP_H
+
+/*------------------------------------------------------------------------------------------------*/
+/* Includes */
+/*------------------------------------------------------------------------------------------------*/
+#include "mns_cfg.h"
+
+#ifdef __cplusplus
+extern "C"
+{
+#endif
+
+/*------------------------------------------------------------------------------------------------*/
+/* Macros */
+/*------------------------------------------------------------------------------------------------*/
+#define PMP_PM_MAX_SIZE_HEADER 8U /*!< \brief Maximum size of a port message header */
+#define PMP_PM_MIN_SIZE_HEADER 6U /*!< \brief Minimum size of a port message header */
+#define PMP_MAX_NUM_FIFOS 7U /*!< \brief Maximum number if FIFOs an an array
+ * \details Means "3" if FIFO "0" and "2" is used
+ */
+#define PMP_CREDITS_MASK 0x3FU /*!< \brief Valid bits for credits: 5..0 */
+#define PMP_CREDITS_MIN 1U /*!< \brief Minimum value for credits: 1 */
+#define PMP_CREDITS_MAX 63U /*!< \brief Maximum value for credits: 63 */
+
+/*------------------------------------------------------------------------------------------------*/
+/* Types */
+/*------------------------------------------------------------------------------------------------*/
+
+/*! \brief Specifies the FIFO */
+typedef enum Pmp_FifoId_
+{
+ PMP_FIFO_ID_MCM = 0U, /*!< \brief FIFO dedicated to MOST Control Messages (MCM) */
+ /* PMP_FIFO_ID_MDP = 1U, < (reserved identifier) */
+ PMP_FIFO_ID_ICM = 2U, /*!< \brief FIFO dedicated to INIC Control Messages (ICM) */
+ PMP_FIFO_ID_ALL = 3U, /*!< \brief All FIFOs (ICM, MCM) */
+ /* PMP_FIFO_ID_MEP = 4U < (reserved identifier) */
+ /* PMP_FIFO_ID_IOCM = 5U < (reserved identifier) */
+ PMP_FIFO_ID_RCM = 6U /*!< \brief FIFO dedicated to Remote Control Messages (RCM) */
+ /* PMP_FIFO_ID_RSVD = 7U < (reserved identifier) */
+
+} Pmp_FifoId_t;
+
+/*! \brief Specifies the messages type */
+typedef enum Pmp_MsgType_
+{
+ PMP_MSG_TYPE_CMD = 0U, /*!< \brief FIFO command message */
+ PMP_MSG_TYPE_STATUS = 1U, /*!< \brief FIFO status message */
+ PMP_MSG_TYPE_DATA = 2U /*!< \brief FIFO data message */
+
+} Pmp_MsgType_t;
+
+/*! \brief Specifies the direction of the Port Message */
+typedef enum Pmp_Direction_
+{
+ PMP_DIR_TX = 0, /*!< \brief Direction Tx (EHC -> INIC) */
+ PMP_DIR_RX = 1 /*!< \brief Direction Rx (INIC -> EHC) */
+
+} Pmp_Direction_t;
+
+/*! \brief Specifies FIFO status types */
+typedef enum Pmp_StatusType_
+{
+ PMP_STATUS_TYPE_FAILURE = 0U, /*!< \brief PMP status type "failure" */
+ PMP_STATUS_TYPE_FLOW = 1U, /*!< \brief PMP status type "flow" */
+ PMP_STATUS_TYPE_SYNCED = 4U, /*!< \brief PMP status type "synced" */
+ PMP_STATUS_TYPE_UNSYNCED_BSY = 5U, /*!< \brief PMP status type "unsynced_busy" */
+ PMP_STATUS_TYPE_UNSYNCED_RDY = 6U /*!< \brief PMP status type "unsynced_ready" */
+
+} Pmp_StatusType_t;
+
+/*! \brief Specifies FIFO status codes */
+typedef enum Pmp_StatusCode_
+{
+ PMP_STATUS_CODE_BUSY = 0U, /*!< \brief PMP status code "busy" */
+ PMP_STATUS_CODE_SUCCESS = 1U, /*!< \brief PMP status code "success" */
+ PMP_STATUS_CODE_CANCELED = 3U, /*!< \brief PMP status code "canceled" */
+ PMP_STATUS_CODE_NACK = 8U /*!< \brief PMP status code "not_acknowledge" */
+
+} Pmp_StatusCode_t;
+
+/*! \brief Specifies FIFO status codes */
+typedef enum Pmp_UnsyncReason_
+{
+ PMP_UNSYNC_R_STARTUP = 1U, /*!< \brief PMP status code, UnsyncReason "INIC Startup" */
+ PMP_UNSYNC_R_REINIT = 2U, /*!< \brief PMP status code, UnsyncReason "Re-init of another FIFO" */
+ PMP_UNSYNC_R_COMMAND = 3U, /*!< \brief PMP status code, UnsyncReason "By sync or un-sync command" */
+ PMP_UNSYNC_R_ACK_TIMEOUT = 4U, /*!< \brief PMP status code, UnsyncReason "Missing EHC Rx acknowledge" */
+ PMP_UNSYNC_R_WD_TIMEOUT = 5U, /*!< \brief PMP status code, UnsyncReason "Missing EHC status request" */
+ PMP_UNSYNC_R_TX_TIMEOUT = 6U /*!< \brief PMP status code, UnsyncReason "Missing EHC read, or blocked communication" */
+
+} Pmp_UnsyncReason_t;
+
+/*! \brief Specifies FIFO command types */
+typedef enum Pmp_CommandType_
+{
+ PMP_CMD_TYPE_REQ_STATUS = 0U, /*!< \brief PMP command type "request_status" */
+ PMP_CMD_TYPE_MSG_ACTION = 1U, /*!< \brief PMP command type "message_action" */
+ /* PMP_CMD_TYPE_TRIGGER_NAOMDP = 2U, < (reserved identifier) */
+ PMP_CMD_TYPE_SYNCHRONIZATION = 4U /*!< \brief PMP command type "synchronization" */
+
+} Pmp_CommandType_t;
+
+/*! \brief Specifies FIFO command codes */
+typedef enum Pmp_CommandCode_
+{
+ PMP_CMD_CODE_REQ_STATUS = 0U, /*!< \brief PMP command code "request_status" */
+ /* PMP_CMD_CODE_TRIGGER_NAOMDP = 0U, < (reserved identifier)*/
+ PMP_CMD_CODE_ACTION_RETRY = 1U, /*!< \brief PMP command type "request_status" */
+ PMP_CMD_CODE_ACTION_CANCEL = 2U, /*!< \brief PMP command type "request_status" */
+ PMP_CMD_CODE_ACTION_CANCEL_ALL = 3U, /*!< \brief PMP command type "request_status" */
+ PMP_CMD_CODE_UNSYNC = 10U, /*!< \brief PMP command type "request_status" */
+ PMP_CMD_CODE_SYNC = 21U /*!< \brief PMP command type "request_status" */
+
+} Pmp_CommandCode_t;
+
+/*------------------------------------------------------------------------------------------------*/
+/* Header buffer operations */
+/*------------------------------------------------------------------------------------------------*/
+extern void Pmp_SetPml(uint8_t header[], uint8_t length);
+extern void Pmp_SetPmhl(uint8_t header[], uint8_t length);
+extern void Pmp_SetFph(uint8_t header[], Pmp_FifoId_t id, Pmp_MsgType_t type);
+extern void Pmp_SetExtType(uint8_t header[], uint8_t type, uint8_t code);
+extern void Pmp_SetSid(uint8_t header[], uint8_t sid);
+
+extern uint8_t Pmp_GetPml(uint8_t header[]);
+extern uint8_t Pmp_GetPmhl(uint8_t header[]);
+extern Pmp_FifoId_t Pmp_GetFifoId(uint8_t header[]);
+extern Pmp_MsgType_t Pmp_GetMsgType(uint8_t header[]);
+extern uint8_t Pmp_GetSid(uint8_t header[]);
+extern uint8_t Pmp_GetDataSize(uint8_t header[]);
+extern uint8_t Pmp_GetData(uint8_t header[], uint8_t index);
+extern bool Pmp_VerifyHeader(uint8_t header[], uint8_t buf_len);
+
+/*------------------------------------------------------------------------------------------------*/
+/* Class CPmh */
+/*------------------------------------------------------------------------------------------------*/
+/*! \brief Defines the content of a Port Message Header
+ * \details The current structure does not support "direction" and "retransmitted" flag.
+ */
+typedef struct CPmh_
+{
+ uint8_t pml; /*!< \brief Port Message length */
+ uint8_t pmhl; /*!< \brief Port Message Header length */
+ Pmp_MsgType_t msg_type; /*!< \brief Port Message type */
+ Pmp_FifoId_t fifo_id; /*!< \brief FIFO identifier */
+ uint8_t sid; /*!< \brief The SequenceId */
+ uint8_t ext_type; /*!< \brief status or content type */
+
+} CPmh;
+
+/*------------------------------------------------------------------------------------------------*/
+/* Function Prototypes */
+/*------------------------------------------------------------------------------------------------*/
+extern void Pmh_Ctor(CPmh *self);
+extern void Pmh_BuildHeader(CPmh *self, uint8_t data[]);
+extern void Pmh_DecodeHeader(CPmh *self, uint8_t data[]);
+extern void Pmh_SetFph(CPmh *self, Pmp_FifoId_t fifo_id, Pmp_MsgType_t msg_type);
+extern Pmp_StatusType_t Pmh_GetExtStatusType(CPmh *self);
+extern Pmp_StatusCode_t Pmh_GetExtStatusCode(CPmh *self);
+extern Pmp_CommandCode_t Pmh_GetExtCommandCode(CPmh *self);
+extern Pmp_CommandType_t Pmh_GetExtCommandType(CPmh *self);
+extern void Pmh_SetExtType(CPmh *self, uint8_t type, uint8_t code);
+
+#ifdef __cplusplus
+} /* extern "C" */
+#endif
+
+#endif /* MNS_PMP_H */
+
+/*!
+ * @}
+ * \endcond
+ */
+
+/*------------------------------------------------------------------------------------------------*/
+/* End of file */
+/*------------------------------------------------------------------------------------------------*/
+