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
|
/* IBM_PROLOG_BEGIN_TAG */
/* This is an automatically generated prolog. */
/* */
/* $Source: src/usr/diag/prdf/common/plat/pegasus/prdfCalloutUtil.H $ */
/* */
/* OpenPOWER HostBoot Project */
/* */
/* Contributors Listed Below - COPYRIGHT 2012,2015 */
/* [+] International Business Machines Corp. */
/* */
/* */
/* 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 */
#ifndef prdfCalloutUtil_H
#define prdfCalloutUtil_H
/** @file prdfCalloutUtil.H
* @brief Utility functions for common, non-trivial callouts.
*/
#include <prdfPlatServices.H>
#include <prdfCallouts.H>
#include <prdfCenMemUtils.H>
namespace PRDF
{
class CenMark;
class CenRank;
struct STEP_CODE_DATA_STRUCT;
namespace CalloutUtil
{
/**
* @brief In many cases, an internal logic error may occur in which 2nd level
* support and FSP code need to be called out. This function is intended
* to help eliminate the need to constantly repeat the list of callouts.
* @param i_sc The step code data struct.
*/
void defaultError( STEP_CODE_DATA_STRUCT & i_sc );
/**
* @brief Will add a MemoryMru to the callout list for the chip mark and symbol
* mark, if they exist.
* @param i_mba Target MBA.
* @param i_rank Target rank.
* @param i_mark Target mark.
* @param io_sc The step code data struct.
* @param i_priority Callout priority (default MRU_MED).
*/
void calloutMark( TARGETING::TargetHandle_t i_mba, const CenRank & i_rank,
const CenMark & i_mark, STEP_CODE_DATA_STRUCT & io_sc,
PRDpriority i_priority = MRU_MED );
/**
* @brief Will add all DIMMs with symbols that exist in the given list to the
* callout list.
* @note We cannot just callout a MemoryMru for each symbol because there could
* be a lot more symbols in the list than we have room for in the PFA
* data section in the error log.
* @param i_mba Target MBA.
* @param i_rank Target rank.
* @param i_symData The list of symbols.
* @param io_sc The step code data struct.
* @param i_priority Callout priority (default MRU_MED).
*/
void calloutSymbolData( TARGETING::TargetHandle_t i_mba, const CenRank & i_rank,
const MemUtils::MaintSymbols & i_symData,
STEP_CODE_DATA_STRUCT & io_sc,
PRDpriority i_priority = MRU_MED );
/**
* @param i_mba The target MBA.
* @param i_rank The target rank.
* @return A list of DIMMs connected to the MBA and rank.
*/
TARGETING::TargetHandleList getConnectedDimms( TARGETING::TargetHandle_t i_mba,
const CenRank & i_rank );
/**
* @param i_mba The target MBA.
* @return A list of DIMMs connected to the MBA.
*/
TARGETING::TargetHandleList getConnectedDimms(TARGETING::TargetHandle_t i_mba);
/**
* @param i_mba The target MBA.
* @param i_rank The target rank.
* @param i_port MBA port.
* @return A list of DIMMs connected to the MBA and rank on a port.
*/
TARGETING::TargetHandleList getConnectedDimms( TARGETING::TargetHandle_t i_mba,
const CenRank & i_rank,
uint8_t i_port );
/**
* @param i_mba The target MBA.
* @param i_port MBA port.
* @return A list of DIMMs connected to the MBA on given port.
*/
TARGETING::TargetHandleList getConnectedDimms( TARGETING::TargetHandle_t i_mba,
uint8_t i_port );
/**
* @brief Will return the bus endpoint targets based in the given information.
*
* Supported configurations:
* i_chip i_busType i_busPos o_rxTrgt o_txTrgt
* ------ ----------- -------- ------------- -------------
* PROC TYPE_ABUS 0-2 ABUS target ABUS target
* PROC TYPE_XBUS 0-3 XBUS target XBUS target
* PROC TYPE_MCS 0-7 MCS target MEMBUF target
* MCS n/a n/a MCS target MEMBUF target
* MEMBUF n/a n/a MEMBUF target MCS target
*
* @param i_chip Chip or unit on the RX side of the bus.
* @param o_rxTrgt The RX target, NULL on failure.
* @param o_txTrgt The TX target, NULL on failure.
* @param i_busType Bus type.
* @param i_busPos Bus position.
* @return Non-SUCCESS if an internal function fails. SUCCESS otherwise.
*
*/
int32_t getBusEndpoints( ExtensibleChip * i_chip,
TARGETING::TargetHandle_t & o_rxTrgt,
TARGETING::TargetHandle_t & o_txTrgt,
TARGETING::TYPE i_busType = TARGETING::TYPE_NA,
uint32_t i_busPos = 0 );
/**
* @brief Will add target bus interface endpoints and all parts in between the
* endpoints to the global error log in RasServices.
* @param i_rxTrgt The RX target.
* @param i_txTrgt The TX target.
* @param i_priority Callout priority (default MRU_LOW).
* @return Non-SUCCESS if an internal function fails. SUCCESS otherwise.
*/
int32_t calloutBusInterface( TARGETING::TargetHandle_t i_rxTrgt,
TARGETING::TargetHandle_t i_txTrgt,
PRDpriority i_priority = MRU_LOW );
/**
* @brief Will add target bus interface endpoints and all parts in between the
* endpoints to the global error log in RasServices.
* @note See function getBusEndpoints() for parameter rules.
* @param i_chip Chip or unit on the RX side of the bus.
* @param i_priority Callout priority (default MRU_LOW).
* @param i_busType Bus type.
* @param i_busPos Bus position.
* @return Non-SUCCESS if an internal function fails. SUCCESS otherwise.
*/
int32_t calloutBusInterface( ExtensibleChip * i_chip,
PRDpriority i_priority = MRU_LOW,
TARGETING::TYPE i_busType = TARGETING::TYPE_NA,
uint32_t i_busPos = 0 );
} // end namespace CalloutUtil
} // end namespace PRDF
#endif // prdfCalloutUtil_H
|