summaryrefslogtreecommitdiffstats
path: root/src/usr/diag/prdf/common/plat/pegasus/prdfCalloutUtil.H
blob: 502467ba9e74188ca814067c0dba4f83010e12d7 (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
/* 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
OpenPOWER on IntegriCloud