summaryrefslogtreecommitdiffstats
path: root/src/include/usr/diag/prdf/prdf_proto.H
blob: 4a4d0a2670b82fe3ce073d1403e9485df72fbc0f (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
//  IBM_PROLOG_BEGIN_TAG
//  This is an automatically generated prolog.
//
//  $Source: src/include/usr/diag/prdf/prdf_proto.H $
//
//  IBM CONFIDENTIAL
//
//  COPYRIGHT International Business Machines Corp. 2012
//
//  p1
//
//  Object Code Only (OCO) source materials
//  Licensed Internal Code Source Materials
//  IBM HostBoot Licensed Internal Code
//
//  The source code for this program is not published or other-
//  wise divested of its trade secrets, irrespective of what has
//  been deposited with the U.S. Copyright Office.
//
//  Origin: 30
//
//  IBM_PROLOG_END


#ifndef PRDF_PROTO_H
#define PRDF_PROTO_H

/**
 * @file prdf_proto.H
 * @brief Interface to Processor Run-time Diagnostics (PRD)
 * @par
 * This includes all type definitions, function interfaces/contracts and
 * return codes for PRD.
 * These prototypes specify the functions that can be called externally
 * from other binds.
 */


#include <stdint.h>
#include <errlentry.H>
#include <target.H>

namespace PRDF
{

// Move here from iipsdbug.h
/**
 *  @brief Enum specifying attention type
 */
enum ATTENTION_VALUE_TYPE
{
  INVALID_ATTENTION_TYPE = 0,
  MACHINE_CHECK = 1,
  CHECK_STOP = MACHINE_CHECK,
  UNIT_CS = 2,
  PROC_CS = UNIT_CS,
  RECOVERABLE = 3,
  SPECIAL = 4,
  END_ATTENTION_TYPE = 5
};

// Move here from xspprdsdbug.C
/**
 *  @brief Structure of target handle and its attention type
 */
struct AttnData
{
  TARGETING::TargetHandle_t targetHndl;
  ATTENTION_VALUE_TYPE attnType;
};

typedef std::vector<AttnData> AttnList;


/**
 *  @brief Enum specifying all possible PRD returned code
 */
enum prd_return_code_t
{
    //! DD00: An assert statement failed in PRD
    PRD_ASSERT = 0xDD00,

    //! DD01: An attention of this type is not expected
    PRD_INVALID_ATTENTION_TYPE = 0xDD01,

    /*! DD02: A Scan Comm Register Read indicates no bits are set in the SCR
      where active bits were expected */
    PRD_SCAN_COMM_REGISTER_ZERO = 0xDD02,

    /*! DD03: Attempted to cross a chip connection but could not resolve target
     *        chip */
    PRD_UNRESOLVED_CHIP_CONNECTION = 0xDD03,

    //! DD05: Error is internal to PRD code
    PRD_INTERNAL_CODE_ERROR = 0xDD05,

    //! DD09: Failure accessing attention data from Registry
    PRD_ATTN_DATA_ACCESS_FAILED = 0xDD09,

    //! DD11: SRC ACCESS FAILED
    SCR_ACCESS_FAILED = 0xDD11,

    //! DD12: HOM ACCESS FAILED
    HOM_ACCESS_FAILED = 0xDD12,

    //! DD20: System Analyze() is called with no domains in System (init failed?)
    NO_DOMAINS_IN_SYSTEM = 0xDD20,

    //! DD21: System Analyze() is called, but no domains in the system are at attention
    NO_DOMAINS_AT_ATTENTION = 0xDD21,

    //! DD23: PRD did not perform an analysis - Unknown chip raised attention
    NO_PRD_ANALYSIS = 0xDD23,

    //! DD24: prdMain() called before prdInitialize()
    PRD_NOT_INITIALIZED = 0xDD24,

    //! DD28: PrdStartScrub failure
    PRD_RBS_START_SCRUB_ERROR = 0xDD28,

    //! DD29: PrdResoreRbs failure
    PRD_RBS_RESTORE_ERROR = 0xDD29,

    //! DD81: Multiple bits on in Error Register
    PRD_MULTIPLE_ERRORS = 0xDD81,

    //! DD90: Scan comm access from Error Register failed
    PRD_SCANCOM_FAILURE = 0xDD90,

    //! DD91: Scan comm access from Error Register failed due to Power Fault
    PRD_POWER_FAULT = 0xDD91,

    //! DDFF: Special return code indicating Not to reset or mask FIR bits.
    PRD_NO_CLEAR_FIR_BITS = 0xDDFF,

    //! 7FFD: word13 of src 7FFDxxxx - An assert failed in PRD
    PRD_ASSERT_ERROR_SIGNATURE = 0x7FFD,

    //! 7FFF: word13 of src 7FFFxxxx - xxxx will describe the error
    PRD_EXECUTION_ERROR_SIGNATURE = 0x7FFF

};


/**
 * @brief Initialize PRD system model and data
 * @return - Error log if error occurs
 */
extern errlHndl_t PrdInitialize();

/**
 * @brief analyze attention errors
 * @param[in] i_attnType - global attention type
 * @param[in] i_attnList - list of chips at attention
 * @return - Error log if error occurs
 *
 * @note If the i_attnType is CHECK_STOP than an error log is returned
 * containing the analysis; otherwise, for other attention types, PRD
 * commits the error log itself and NULL is returned.
 */
extern errlHndl_t PrdMain(ATTENTION_VALUE_TYPE i_attnType, const AttnList & i_attnList);

/**
 *  @brief initiate memory background scrubbing
 *  @param[in] i_pTarget - Target handle of System or Node
 *  @return - Error log if error occurs
 */
extern errlHndl_t PrdStartScrub(const TARGETING::TargetHandle_t i_pTarget);

/**
 * @brief  Restores hardware DRAM repairs to reflect what is stored in VPD.
 * @param[in]  i_pTarget - Target handle of the memory controller
 * @return Non-SUCCESS if conditions are such that a callout had to be made, SUCCESS othewise.
 */
extern int32_t prdfRestoreDramRepairs(const TARGETING::TargetHandle_t i_pTarget);


/**
 *  @brief Clean up pieces of PRD for fresh IPLs.
 *
 *  Cleans up the PRD persistent storage areas in P1.
 */
extern void PrdIplCleanup();


#ifndef __HOSTBOOT_MODULE

/**
 *  @brief handle service data collector sync over
 *  @return - Error log if error occurs
 */
extern errlHndl_t prdfFailoverComplete(void);

#endif


} // End namespace PRDF

#endif       // PRDF_PROTO_H
OpenPOWER on IntegriCloud