/* IBM_PROLOG_BEGIN_TAG */ /* This is an automatically generated prolog. */ /* */ /* $Source: src/include/usr/hwpf/hwp/erepairAccessorHwpFuncs.H $ */ /* */ /* OpenPOWER HostBoot Project */ /* */ /* COPYRIGHT International Business Machines Corp. 2012,2014 */ /* */ /* 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 */ // $Id: erepairAccessorHwpFuncs.H,v 1.2 2014/04/29 11:59:25 bilicon Exp $ /** * @file erepairAccessorHwpFuncs.H * * @brief FW Team Utility functions that accesses fabric and memory eRepair * data. */ /* * Change Log ****************************************************************** * Flag Defect/Feature User Date Description * ------ -------------- ---------- ----------- ---------------------------- * bilicon 10/24/2012 Created. */ #ifndef EREPAIRACCESSORHWPFUNCS_H_ #define EREPAIRACCESSORHWPFUNCS_H_ #include <fapi.H> #include <algorithm> const uint8_t EREPAIR_MAX_CENTAUR_PER_MCS = 1; typedef fapi::ReturnCode (*getLanes_t)( const fapi::Target &i_tgtHandle, std::vector<uint8_t> &o_txFailLanes, std::vector<uint8_t> &o_rxFailLanes); typedef fapi::ReturnCode (*setLanes_t)( const fapi::Target &i_tgtHandle, const std::vector<uint8_t> &i_txFailLanes, const std::vector<uint8_t> &i_rxFailLanes); /** * @brief FW Team Utility function that gets eRepair data from the VPD * This function gets the eRepair data from both the Field VPD * and the Manufacturing VPD. * * @param[in] i_endp_target Reference to X-Bus or A-Bus or MCS or memBuf Target * @param[out] o_txFailLanes Reference to a Vector that will contain the fail * lanes read from the VPD for Drive side * @param[out] o_rxFailLanes Reference to a Vector that will contain the fail * lanes read from the VPD for Receive side * @return ReturnCode * */ fapi::ReturnCode erepairGetFailedLanes(const fapi::Target &i_endp_target, std::vector<uint8_t> &o_txFailLanes, std::vector<uint8_t> &o_rxFailLanes); /** * @brief FW Team Utility function that gets eRepair data * * This is a wrapper function for the Accessor HWP which reads failed lane * numbers from the Field VPD * * @param[in] i_endp_target Reference to X-Bus or A-Bus or MCS or memBuf Target * @param[out] o_txFailLanes Reference to a Vector that will contain the fail * lanes read from the Field VPD for Drive side * @param[out] o_rxFailLanes Reference to a Vector that will contain the fail * lanes read from the Field VPD for Receive side * @return ReturnCode * */ fapi::ReturnCode erepairGetFieldFailedLanes(const fapi::Target &i_endp_target, std::vector<uint8_t> &o_txFailLanes, std::vector<uint8_t> &o_rxFailLanes); /** * @brief FW Team Utility function that gets eRepair data * * This is a wrapper function for the Accessor HWP which reads failed lane * numbers from the Manufacturing VPD * * @param[in] i_endp_target Reference to X-Bus or A-Bus or MCS or memBuf Target * @param[out] o_txFailLanes Reference to a Vector that will contain the fail * lanes read from the Mnfg VPD for Drive side * @param[out] o_rxFailLanes Reference to a Vector that will contain the fail * lanes read from the Mnfg VPD for Receive side * @return ReturnCode * */ fapi::ReturnCode erepairGetMnfgFailedLanes(const fapi::Target &i_endp_target, std::vector<uint8_t> &o_txFailLanes, std::vector<uint8_t> &o_rxFailLanes); /** * @brief FW Team Utility function that sets eRepair data in the VPD. * This functions sets the eRepair data to either the Field VPD * or the Manufacturing VPD depending on whether the IPL was done * in normal mode or Manufacturing mode. * It writes eRepair data to the VPD of both the endpoint targets * passed as arguments. * * @param[in] i_txEndp_target Reference to X-Bus or A-Bus or MCS or memBuf * Target. This is the peer target of * i_rxEndp_target * @param[in] i_rxEndp_target Reference to X-Bus or A-Bus or MCS or memBuf * Target. This is the target on which the * badlanes were found * @param[in] i_rxFailLanes Vector that will contain the fail lanes * to be written to VPD for Receive side * @param[out] o_thresholdExceed If TRUE, indicates that the eRepair threshold * has exceeded, FALSE otherwise. * * @return ReturnCode */ fapi::ReturnCode erepairSetFailedLanes( const fapi::Target &i_txEndp_target, const fapi::Target &i_rxEndp_target, const std::vector<uint8_t> &i_rxFailLanes, bool &o_thresholdExceed); /** * @brief FW Team Utility function that sets eRepair data in Field VPD * * This is a wrapper function for the Accessor HWP which writes failed lane * numbers to the Field VPD * * @param[in] i_endp_target Reference to X-Bus or A-Bus or MCS or memBuf Target * @param[in] i_txFailLanes Vector that will contain the fail lane * to be written to Field VPD for Drive side * @param[in] i_rxFailLanes Vector that will contain the fail lanes * to be written to Field VPD for Receive side * * @return ReturnCode */ fapi::ReturnCode erepairSetFieldFailedLanes( const fapi::Target &i_endp_target, const std::vector<uint8_t> &i_txFailLanes, const std::vector<uint8_t> &i_rxFailLanes); /** * @brief FW Team Utility function that sets eRepair data in Manufacturing VPD * * This is a wrapper function for the Accessor HWP which writes failed lane * numbers to the Manufacturing VPD * * @param[in] i_endp_target Reference to X-Bus or A-Bus or MCS or memBuf Target * @param[in] i_txFailLanes Vector that will contain the fail lane * to be written to Mnfg VPD for Drive side * @param[in] i_rxFailLanes Vector that will contain the fail lanes * to be written to Mnfg VPD for Receive side * * @return ReturnCode */ fapi::ReturnCode erepairSetMnfgFailedLanes( const fapi::Target &i_endp_target, const std::vector<uint8_t> &i_txFailLanes, const std::vector<uint8_t> &i_rxFailLanes); /** * @brief Function which retrieves the lanes that need to be restored for the * given end point targets * * This function is called by the iStep dispatcher during the Restore Repair * iStep for Fabric buses and DMI buses. The caller need to make sure that the * first and fourth arguments are the endpoint targets of a Fabric bus or * DMI bus. * It calls the wrapper functions of Accessor HWP to read the fail lane data * recorded in the VPD on both the ends and verifies that there are matching * records on both the ends. If matching fail lanes are not found, the * corresponding fail lane data is invalidated using the wrapper Accessor HWP * that writes data to the VPD. * * @param [in] i_endp1_target Reference to X-Bus or A-Bus or MCS Target * @param [out] o_endp1_txFaillanes Reference to vector that will have the * fail lane numbers that need to be restored * for the Tx side of the target passed * as first param * @param [out] o_endp1_rxFaillanes Reference to vector that will have the * fail lane numbers that need to be restored * for the Rx side of the target passed * as first param * @param [in] i_endp2_target Reference to X-Bus or A-Bus or MCS Target * @param [out] o_endp2_txFaillanes Reference to vector that will have the * fail lane numbers that need to be restored * for the Tx side of the target passed * as fourth param * @param [out] o_endp2_rxFaillanes Reference to vector that will have the * fail lane numbers that need to be restored * for the Rx side of the target passed * as fourth param * * @return ReturnCode * */ fapi::ReturnCode erepairGetRestoreLanes(const fapi::Target &i_endp1_target, std::vector<uint8_t> &o_endp1_txFaillanes, std::vector<uint8_t> &o_endp1_rxFaillanes, const fapi::Target &i_endp2_target, std::vector<uint8_t> &o_endp2_txFaillanes, std::vector<uint8_t> &o_endp2_rxFaillanes); #endif