summaryrefslogtreecommitdiffstats
path: root/src/include/usr/hwpf/hwp/erepairAccessorHwpFuncs.H
blob: b0899683e7f9dbf673936bf4c46f2c72f046349b (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
/* 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
OpenPOWER on IntegriCloud