summaryrefslogtreecommitdiffstats
path: root/src/sbefw/core/sbeHostMsg.H
diff options
context:
space:
mode:
Diffstat (limited to 'src/sbefw/core/sbeHostMsg.H')
-rw-r--r--src/sbefw/core/sbeHostMsg.H184
1 files changed, 184 insertions, 0 deletions
diff --git a/src/sbefw/core/sbeHostMsg.H b/src/sbefw/core/sbeHostMsg.H
new file mode 100644
index 00000000..d6bd8576
--- /dev/null
+++ b/src/sbefw/core/sbeHostMsg.H
@@ -0,0 +1,184 @@
+/* IBM_PROLOG_BEGIN_TAG */
+/* This is an automatically generated prolog. */
+/* */
+/* $Source: src/sbefw/core/sbeHostMsg.H $ */
+/* */
+/* OpenPOWER sbe Project */
+/* */
+/* Contributors Listed Below - COPYRIGHT 2016,2017 */
+/* */
+/* */
+/* Licensed under the Apache License, Version 2.0 (the "License"); */
+/* you may not use this file except in compliance with the License. */
+/* You may obtain a copy of the License at */
+/* */
+/* http://www.apache.org/licenses/LICENSE-2.0 */
+/* */
+/* Unless required by applicable law or agreed to in writing, software */
+/* distributed under the License is distributed on an "AS IS" BASIS, */
+/* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or */
+/* implied. See the License for the specific language governing */
+/* permissions and limitations under the License. */
+/* */
+/* IBM_PROLOG_END_TAG */
+/*
+ * @file: ppe/sbe/sbefw/sbeHostMsg.H
+ *
+ * @brief This file contains the message structures for SBE Host
+ * communication.
+ *
+ */
+
+#ifndef __SBEFW_SBEHOST_MSG_H
+#define __SBEFW_SBEHOST_MSG_H
+
+#include <stdint.h>
+#include "sbe_host_intf.H"
+#include "sbe_sp_intf.H"
+#include "sbe_link.H"
+
+/*****************************************************************/
+/* SBE->PSU request structures */
+/*****************************************************************/
+
+/**
+ * @brief structure for Host->SBE command request format denoting
+ * mininum header (as of now, contained in mbx 0)
+ */
+typedef struct
+{
+ // mbxReg0
+ uint64_t res:16;
+ uint64_t flags:16;
+ uint64_t seqID:16;
+ uint64_t cmdClass:8;
+ uint64_t command:8;
+
+ /**
+ * @brief initialize the fields contained in PSU Mbx0
+ *
+ */
+ void init()
+ {
+ res = 0;
+ flags = 0;
+ seqID = 0;
+ cmdClass = SBE_PSU_CMD_CLASS_UNKNOWN;
+ command = SBE_PSU_CMD_UNKNOWN;
+ }
+} sbePsu2SbeCmdReqHdr_t;
+
+/* @brief Address and size of memory allocated by Host
+ * for FFDC/pass through commands
+ */
+typedef struct
+{
+ uint32_t size;
+ uint64_t addr;
+} sbeHostAddr_t;
+
+/* @brief Set FFDC Address message
+ */
+typedef struct
+{
+ uint64_t ffdcDataSize:32;
+ uint64_t passCmdDataSize:32;
+ uint64_t ffdcAddr;
+ uint64_t passCmdDataAddr;
+
+ void getFFDCAddr(sbeHostAddr_t &i_hostFFDCAddr)
+ {
+ i_hostFFDCAddr.size = ffdcDataSize;
+ i_hostFFDCAddr.addr = ffdcAddr;
+ }
+
+ void getPassThroughCmdAddr(sbeHostAddr_t &i_hostPassCmdAddr)
+ {
+ i_hostPassCmdAddr.size = passCmdDataSize;
+ i_hostPassCmdAddr.addr = passCmdDataAddr;
+ }
+} sbeSetFFDCAddrReq_t;
+
+/* @brief Read SBE MEM structure
+ */
+typedef struct
+{
+ uint64_t offset:32;
+ uint64_t size:32;
+ uint64_t responseAddr;
+
+ // validate request parameters
+ bool validateReq()
+ {
+ // On ppe reading 8 bytes is optimal. So offset
+ // should be multiple of 8.
+ uint32_t const OFFSET_ALLIGNMENT = 8;
+ // As we use PBA operation, size should be multiple
+ // of 128bytes.
+ uint32_t const SIZE_ALLIGNMENT = 128;
+ // There are 4 seeprom devices each of 64KB,
+ // aso there is 1 ecc byte per 8 bytes of data
+ uint32_t const MAX_SEEPROM_SIZE = ((65536 - (65536 % 9)) / 9) * 8 * 4;
+
+ return ( !(( offset % OFFSET_ALLIGNMENT != 0) ||
+ ( size % SIZE_ALLIGNMENT != 0 ) ||
+ ( ( offset + size ) > MAX_SEEPROM_SIZE )) );
+ }
+ // Return effective seeprom address
+ uint64_t * getEffectiveAddr()
+ {
+ return ( uint64_t *)( SBE_SEEPROM_BASE_ORIGIN + offset );
+ }
+} sbeReadMemReq_t;
+
+/*****************************************************************/
+/* SBE->PSU response structures */
+/*****************************************************************/
+
+/**
+ * @brief SBE->Host Generic response structure
+ *
+ */
+typedef struct
+{
+ uint64_t mbxReg4;
+ uint64_t mbxReg5;
+ uint64_t mbxReg6;
+ uint64_t mbxReg7;
+} sbeSbe2PsuGenericResp_t ;
+
+/**
+ * @brief Structure for SBE->Host response header contained in
+ * mbx4 register
+ *
+ */
+typedef struct
+{
+ // mbxReg 4
+ uint64_t primStatus:16;
+ uint64_t secStatus:16;
+ uint64_t seqID:16;
+ uint64_t cmdClass:8;
+ uint64_t command:8;
+
+ /**
+ * @brief set the primary and secondary status
+ *
+ * @param[in] i_prim Primary status
+ * @param[in] i_sec Secondary status
+ *
+ */
+ void setStatus(const uint16_t i_prim, const uint16_t i_sec)
+ {
+ primStatus = i_prim;
+ secStatus = i_sec;
+ }
+
+ /**
+ * @brief initialize the response fields contained in PSU Mbx3
+ *
+ */
+ void init();
+} sbeSbe2PsuRespHdr_t;
+
+#endif // __SBEFW_SBEHOST_MSG_H
OpenPOWER on IntegriCloud