1*079d581eSLawrence Tang\documentclass{report}
2*079d581eSLawrence Tang\usepackage{hyperref}
3*079d581eSLawrence Tang\usepackage{adjustbox}
4*079d581eSLawrence Tang\usepackage{placeins}
5*079d581eSLawrence Tang
6*079d581eSLawrence Tang% Metadata.
7*079d581eSLawrence Tang\title{CPER-JSON Specification}
8*079d581eSLawrence Tang\author{\parbox{\linewidth}{\centering%
9*079d581eSLawrence TangLawrence Tang\endgraf
10*079d581eSLawrence TangLawrence.Tang@arm.com\endgraf\medskip}}
11*079d581eSLawrence Tang\date{\parbox{\linewidth}{\centering%
12*079d581eSLawrence TangRevision v0.0.1 (\today)\endgraf
13*079d581eSLawrence TangFirst revision released [DATE].}}
14*079d581eSLawrence Tang
15*079d581eSLawrence Tang% Commands.
16*079d581eSLawrence Tang\newcommand*{\thead}[1]{\multicolumn{1}{|c|}{\bfseries #1}}
17*079d581eSLawrence Tang\newcommand*{\jsontable}[1]{
18*079d581eSLawrence Tang    \begin{table}[!ht]
19*079d581eSLawrence Tang    \label{#1}
20*079d581eSLawrence Tang    \centering
21*079d581eSLawrence Tang    \begin{adjustbox}{center}
22*079d581eSLawrence Tang    \begin{tabular}{|l|c|p{8cm}|}
23*079d581eSLawrence Tang    \hline
24*079d581eSLawrence Tang    \thead{Field Name} & \thead{Type} & \thead{Description} \\
25*079d581eSLawrence Tang    \hline
26*079d581eSLawrence Tang}
27*079d581eSLawrence Tang\newcommand*{\jsontableend}[1]{
28*079d581eSLawrence Tang    \hline
29*079d581eSLawrence Tang    \end{tabular}
30*079d581eSLawrence Tang    \end{adjustbox}
31*079d581eSLawrence Tang    \caption{#1}
32*079d581eSLawrence Tang    \label{table:#1}
33*079d581eSLawrence Tang    \end{table}
34*079d581eSLawrence Tang    \FloatBarrier
35*079d581eSLawrence Tang}
36*079d581eSLawrence Tang
37*079d581eSLawrence Tang\begin{document}
38*079d581eSLawrence Tang\maketitle
39*079d581eSLawrence Tang\tableofcontents
40*079d581eSLawrence Tang\listoftables
41*079d581eSLawrence Tang
42*079d581eSLawrence Tang% Introductory section.
43*079d581eSLawrence Tang\chapter{Preface}
44*079d581eSLawrence Tang\section{Introduction \& Summary}
45*079d581eSLawrence TangThis document lays out a structure for representing UEFI CPER records, as described in UEFI Appendix N
46*079d581eSLawrence Tang\footnote{Version referenced is \href{https://uefi.org/sites/default/files/resources/UEFI_Spec_2_9_2021_03_18.pdf}{UEFI Specification 2021/03/18}.},
47*079d581eSLawrence Tang in a human-readable JSON format, intended to be interoperable with standard CPER binary.
48*079d581eSLawrence Tang\\\\
49*079d581eSLawrence TangThe C library released with this specification allows for the conversion between UEFI CPER records, an intermediate format, and the JSON structures
50*079d581eSLawrence Tangdefined in this document. There is also a comprehensive JSON schema\footnote{As defined by \href{https://json-schema.org/draft/2020-12/json-schema-core.html}{JSON schema Draft (2020/12)}} included within the same repository, at \texttt{specification/json}.
51*079d581eSLawrence Tang
52*079d581eSLawrence Tang% Specification section.
53*079d581eSLawrence Tang\chapter{Main Structure Specification}
54*079d581eSLawrence Tang\section{Parent Structure}
55*079d581eSLawrence Tang\label{section:parentstructure}
56*079d581eSLawrence TangThis structure contains descriptions of the CPER log header, as well as the section descriptors and
57*079d581eSLawrence Tangsection structures themselves within arrays. This is the structure returned by \texttt{cper\_to\_ir(FILE* cper\_file)} as JSON IR.
58*079d581eSLawrence Tang
59*079d581eSLawrence Tang% Parent structure table.
60*079d581eSLawrence Tang\jsontable{table:parentstructure}
61*079d581eSLawrence Tangheader & object & A CPER header structure as defined in Section \ref{section:headerstructure}. \\
62*079d581eSLawrence Tang\hline
63*079d581eSLawrence TangsectionDescriptors & array & An array of section descriptor objects as defined in Section \ref{section:sectiondescriptorstructure}. \\
64*079d581eSLawrence Tang\hline
65*079d581eSLawrence Tangsections & array & An array of section objects as defined in Chapter \ref{chapter:sectionchapter}. These sections are at the same index as their corresponding section descriptor within the \texttt{sectionDescriptors} array.\\
66*079d581eSLawrence Tang\jsontableend{Parent structure field table.}
67*079d581eSLawrence Tang
68*079d581eSLawrence Tang% Header structure.
69*079d581eSLawrence Tang\section{Header Structure}
70*079d581eSLawrence Tang\label{section:headerstructure}
71*079d581eSLawrence TangThis structure describes the JSON format of the standard CPER header as defined in section N.2.1 of the
72*079d581eSLawrence TangUEFI specification.
73*079d581eSLawrence Tang
74*079d581eSLawrence Tang% Header structure table.
75*079d581eSLawrence Tang\jsontable{table:headerstructure}
76*079d581eSLawrence Tangrevision & object & A CPER revision object structure as defined in Subsection \ref{subsection:revisionstructure}. \\
77*079d581eSLawrence Tang\hline
78*079d581eSLawrence TangsectionCount & int & The number of sections that are described by the CPER record.\\
79*079d581eSLawrence Tang\hline
80*079d581eSLawrence Tangseverity & object & An error severity structure as described in \ref{subsection:headererrorseveritystructure}.\\
81*079d581eSLawrence Tang\hline
82*079d581eSLawrence TangvalidationBits & object & A CPER header validation bitfield as described in Subsection \ref{subsection:headervalidbitfieldstructure}.\\
83*079d581eSLawrence Tang\hline
84*079d581eSLawrence TangrecordLength & uint64 & The total length of the binary CPER record, including the header, in bytes.\\
85*079d581eSLawrence Tang\hline
86*079d581eSLawrence Tangtimestamp & string (\textbf{optional}) & The attached record timestamp, if the validity field is set. Formatted identically to \texttt{Date.toJson()} (ISO 8601), minus the trailing timezone letter. Timezone is local to the machine creating the record.\\
87*079d581eSLawrence Tang\hline
88*079d581eSLawrence TangtimestampIsPrecise & boolean (\textbf{optional}) & If a timestamp is attached, indicates whether the provided timestamp is precise.\\
89*079d581eSLawrence Tang\hline
90*079d581eSLawrence TangplatformID & string (\textbf{optional}) & If validation bit is set, uniquely identifying GUID of the platform. Platform SMBIOS UUID should be used to populate this field.\\
91*079d581eSLawrence Tang\hline
92*079d581eSLawrence TangpartitionID & string (\textbf{optional}) & If validation bit is set, GUID identifying the partition on which the error occurred.\\
93*079d581eSLawrence Tang\hline
94*079d581eSLawrence TangcreatorID & string & A GUID identifying the creator of the error record. May be overwritten by subsequent owners of the record.\\
95*079d581eSLawrence Tang\hline
96*079d581eSLawrence TangnotificationType & object & A CPER notification type structure as described in Subsection \ref{subsection:notificationtypestructure}.\\
97*079d581eSLawrence Tang\hline
98*079d581eSLawrence TangrecordID & uint64 & A unique value which, when combined with the \texttt{creatorID} field, uniquely identifies this error record on a given system.\\
99*079d581eSLawrence Tang\hline
100*079d581eSLawrence Tangflags & object & A CPER header flags structure, as defined in Subsection \ref{subsection:headerflagsstructure}.\\
101*079d581eSLawrence Tang\hline
102*079d581eSLawrence TangpersistenceInfo & uint64 & Produced and consumed by the creator of the error record identified by \texttt{creatorID}. Format undefined.\\
103*079d581eSLawrence Tang\jsontableend{Header structure field table.}
104*079d581eSLawrence Tang
105*079d581eSLawrence Tang% Header error severity.
106*079d581eSLawrence Tang\subsection{Header Error Severity Structure}
107*079d581eSLawrence Tang\label{subsection:headererrorseveritystructure}
108*079d581eSLawrence TangThis structure describes the error severity of a single CPER record.
109*079d581eSLawrence Tang\jsontable{table:headererrorseveritystructure}
110*079d581eSLawrence Tangname & string & The human readable name of this error severity, if known. \\
111*079d581eSLawrence Tang\hline
112*079d581eSLawrence Tangcode & uint64 & The integer value of this error severity. \\
113*079d581eSLawrence Tang\jsontableend{Header error severity structure field table.}
114*079d581eSLawrence Tang
115*079d581eSLawrence Tang% Header validation bitfield.
116*079d581eSLawrence Tang\subsection{Header Validation Bitfield Structure}
117*079d581eSLawrence Tang\label{subsection:headervalidbitfieldstructure}
118*079d581eSLawrence TangThis structure describes a bitfield for validating the fields of the header of a single CPER record.
119*079d581eSLawrence Tang\jsontable{table:headervalidbitfieldstructure}
120*079d581eSLawrence TangplatformIDValid & boolean & Whether the "platformID" field in the header structure (\ref{section:headerstructure}) is valid. \\
121*079d581eSLawrence Tang\hline
122*079d581eSLawrence TangtimestampValid & boolean & Whether the "timestamp" field in the header structure (\ref{section:headerstructure}) is valid. \\
123*079d581eSLawrence Tang\hline
124*079d581eSLawrence TangpartitionIDValid & boolean & Whether the "partitionID" field in the header structure (\ref{section:headerstructure}) is valid.\\
125*079d581eSLawrence Tang\jsontableend{Header validation bitfield structure field table.}
126*079d581eSLawrence Tang
127*079d581eSLawrence Tang% Header notification type.
128*079d581eSLawrence Tang\subsection{Notification Type Structure}
129*079d581eSLawrence Tang\label{subsection:notificationtypestructure}
130*079d581eSLawrence TangThis structure describes the notification type of a single CPER record.
131*079d581eSLawrence Tang\jsontable{table:notificationtypestructure}
132*079d581eSLawrence Tangguid & string & The GUID of this notification type. Assigned GUIDs for types of CPER records are defined in UEFI Specification section N.2.1.1.\\
133*079d581eSLawrence Tang\hline
134*079d581eSLawrence Tangtype & string & A human readable name, if available, of the notification type for the given GUID.\\
135*079d581eSLawrence Tang\jsontableend{Notification type structure field table.}
136*079d581eSLawrence Tang
137*079d581eSLawrence Tang% Header flags.
138*079d581eSLawrence Tang\subsection{Header Flags Structure}
139*079d581eSLawrence Tang\label{subsection:headerflagsstructure}
140*079d581eSLawrence TangThis structure describes the enabled flag on a given CPER record header.
141*079d581eSLawrence Tang\jsontable{table:headerflagsstructure}
142*079d581eSLawrence Tangname & string & A human readable name, if available, of this flag.\\
143*079d581eSLawrence Tang\hline
144*079d581eSLawrence Tangvalue & uint64 & The integer value of this flag.\\
145*079d581eSLawrence Tang\jsontableend{Header flags structure field table.}
146*079d581eSLawrence Tang
147*079d581eSLawrence Tang%Section descriptor structure.
148*079d581eSLawrence Tang\section{Section Descriptor Structure}
149*079d581eSLawrence Tang\label{section:sectiondescriptorstructure}
150*079d581eSLawrence TangThis section describes the JSON format of a single CPER record section descriptor as defined by section N.2.2 of the UEFI specification. An array of these structures is contained within the parent structure as defined in Section \ref{section:parentstructure}.
151*079d581eSLawrence Tang
152*079d581eSLawrence Tang%Section descriptor structure table.
153*079d581eSLawrence Tang\jsontable{table:sectiondescriptorstructure}
154*079d581eSLawrence TangsectionOffset & uint64 & The offset (in bytes) of the section body this section descriptor describes from the base of the record header.\\
155*079d581eSLawrence Tang\hline
156*079d581eSLawrence TangsectionLength & uint64 & The length (in bytes) of the section body.\\
157*079d581eSLawrence Tang\hline
158*079d581eSLawrence Tangrevision & object & A CPER revision structure as defined in Subsection \ref{subsection:revisionstructure}.\\
159*079d581eSLawrence Tang\hline
160*079d581eSLawrence TangvalidationBits.fruIDValid & boolean & Whether the "fruID" field on this section descriptor contains valid data.\\
161*079d581eSLawrence TangvalidationBits.fruStringValid & boolean & Whether the "fruString" field on this section descriptor contains valid data.\\
162*079d581eSLawrence Tang\hline
163*079d581eSLawrence Tangflags & object & A CPER section descriptor flags structure as described in Subsection \ref{subsection:sectiondescriptorflagsstructure}.\\
164*079d581eSLawrence Tang\hline
165*079d581eSLawrence TangsectionType.data & string & GUID data for the type of section body.\\
166*079d581eSLawrence TangsectionType.type & string & The human readable name, if possible, for the type of section body. GUIDs for types of sectoin body are defined in UEFI specification section N.2.2 Table N-5 and section N.2.4.\\
167*079d581eSLawrence Tang\hline
168*079d581eSLawrence TangfruID & string (\textbf{optional}) & If validation field set, the FRU ID of the section reporting the error.\\
169*079d581eSLawrence Tang\hline
170*079d581eSLawrence Tangseverity.code & uint64 & The integer value of the severity of the described section.\\
171*079d581eSLawrence Tangseverity.name & string & If available, the human readable name for the severity of the described section.\\
172*079d581eSLawrence Tang\hline
173*079d581eSLawrence TangfruText & string (\textbf{optional}) & If validation field set, ASCII string identifying the FRU hardware.\\
174*079d581eSLawrence Tang\jsontableend{Section descriptor structure field table.}
175*079d581eSLawrence Tang
176*079d581eSLawrence Tang% Section descriptor flags.
177*079d581eSLawrence Tang\subsection{Section Descriptor Flags Structure}
178*079d581eSLawrence Tang\label{subsection:sectiondescriptorflagsstructure}
179*079d581eSLawrence TangThis structure describes the enabled flags on a given CPER section descriptor.
180*079d581eSLawrence Tang\jsontable{table:sectiondescriptorflagsstructure}
181*079d581eSLawrence Tangprimary & boolean & If true, indicates the section body should be associated with the error condition.\\
182*079d581eSLawrence Tang\hline
183*079d581eSLawrence TangcontainmentWarning & boolean & If true, the error was not contained within the processor or memory heirarchy, and may have propagated elsewhere.\\
184*079d581eSLawrence Tang\hline
185*079d581eSLawrence Tangreset & boolean & If true, indicates the component has been reset and must be re-initialised or re-enabled by the operating system.\\
186*079d581eSLawrence Tang\hline
187*079d581eSLawrence TangerrorThresholdExceeded & boolean & If true, indicates the operating system may choose to discontinue use of this resource.\\
188*079d581eSLawrence Tang\hline
189*079d581eSLawrence TangresourceNotAccessible & boolean & If true, the resource could not be queried for error information due to conflicts with other system software or resources. Some fields of the section will be invalid.\\
190*079d581eSLawrence Tang\hline
191*079d581eSLawrence TanglatentError & boolean & If true, indicates that action has been taken to ensure error containment, but the error has not been fully corrected. System software may choose to take further action before the data is consumed.\\
192*079d581eSLawrence Tang\hline
193*079d581eSLawrence Tangpropagated & boolean & If true, indicates that the error has been propagated due to hardware poisoning.\\
194*079d581eSLawrence Tang\hline
195*079d581eSLawrence Tangoverflow & boolean & If true, overflow of data structures used to manage errors has been detected. Some error records may be lost.\\
196*079d581eSLawrence Tang\jsontableend{Section descriptor flags structure field table.}
197*079d581eSLawrence Tang
198*079d581eSLawrence Tang% Generic CPER structures.
199*079d581eSLawrence Tang\section{Generic CPER Structures}
200*079d581eSLawrence TangThis section describes generic CPER structures that are re-used throughout the specification.
201*079d581eSLawrence Tang
202*079d581eSLawrence Tang% Revision.
203*079d581eSLawrence Tang\subsection{Revision Structure}
204*079d581eSLawrence Tang\label{subsection:revisionstructure}
205*079d581eSLawrence TangThis structure describes the revision of a single CPER record or sub-structure.
206*079d581eSLawrence Tang\jsontable{table:revisionstructure}
207*079d581eSLawrence Tangmajor & int & The major version number. An increase in this revision indicates the changes are not backward compatible. \\
208*079d581eSLawrence Tang\hline
209*079d581eSLawrence Tangminor & int & The minor version number. Incremented on additions of new GUID types, errata fixes, or clarifications. Backwards compatible with the same major version number. \\
210*079d581eSLawrence Tang\jsontableend{CPER revision structure field table.}
211*079d581eSLawrence Tang
212*079d581eSLawrence Tang% Generic Error Status
213*079d581eSLawrence Tang\subsection{Generic Error Status Structure}
214*079d581eSLawrence Tang\label{subsection:genericerrorstatusstructure}
215*079d581eSLawrence TangThis structure describes the a generic CPER error status, that can be used by any CPER section.
216*079d581eSLawrence Tang\jsontable{table:genericerrorstatusstructure}
217*079d581eSLawrence TangerrorType.value & uint64 & The raw value of the error type.\\
218*079d581eSLawrence TangerrorType.name & string & The human readable name, if available, of the error type.\\
219*079d581eSLawrence TangerrorType.description & string & A human readable description, if available, of the error type.\\
220*079d581eSLawrence Tang\hline
221*079d581eSLawrence TangaddressSignal & boolean & Whether the error was detected on the address signals/address portion of the transaction.\\
222*079d581eSLawrence Tang\hline
223*079d581eSLawrence TangcontrolSignal & boolean & Whether the error was detected on the control signals/control portion of the transaction.\\
224*079d581eSLawrence Tang\hline
225*079d581eSLawrence TangdataSignal & boolean & Whether the error was detected on the data signals/data portion of the transaction.\\
226*079d581eSLawrence Tang\hline
227*079d581eSLawrence TangdetectedByResponder & boolean & Whether the error was detected by the responder of the transaction.\\
228*079d581eSLawrence Tang\hline
229*079d581eSLawrence TangdetectedByRequester & boolean & Whether the error was detected by the requester of the transaction.\\
230*079d581eSLawrence Tang\hline
231*079d581eSLawrence TangfirstError & boolean & If multiple errors are logged for a single type of section, this indicates this is the first error in a chronological sequence. This field is optional to set.\\
232*079d581eSLawrence Tang\hline
233*079d581eSLawrence TangoverflowDroppedLogs & boolean & Additional errors occurred and were not logged due to lack of resources.\\
234*079d581eSLawrence Tang\jsontableend{Generic Error Status structure field table.}
235*079d581eSLawrence Tang
236*079d581eSLawrence Tang%Sections.
237*079d581eSLawrence Tang\chapter{Section Specification}
238*079d581eSLawrence Tang\label{chapter:sectionchapter}
239*079d581eSLawrence TangThis chapter defines section body formats for all of the sections defined within UEFI Specification section N.2.4.
240*079d581eSLawrence Tang
241*079d581eSLawrence Tang% Generic processor error section.
242*079d581eSLawrence Tang\section{Generic Processor Error Section}
243*079d581eSLawrence Tang\label{section:genericprocessorerrorsection}
244*079d581eSLawrence TangThis section describes the JSON format for a single Generic Processor Error Section from a CPER record. The GUID used for Generic Processor Error Sections is \texttt{\{0x9876CCAD, 0x47B4, 0x4bdb, \{0xB6, 0x5E, 0x16, 0xF1, 0x93, 0xC4, 0xF3, 0xDB\}\}}.
245*079d581eSLawrence Tang\jsontable{table:genericprocessorerrorsection}
246*079d581eSLawrence TangvalidationBits & object & A Generic Processor Error Validation Structure, as described in Subsection \ref{subsection:genericprocessorvalidationstructure}.\\
247*079d581eSLawrence Tang\hline
248*079d581eSLawrence TangprocessorType.name & string & If available, the human readable name of the processor type.\\
249*079d581eSLawrence TangprocessorType.value & uint64 & The integer value of the processor type.\\
250*079d581eSLawrence Tang\hline
251*079d581eSLawrence TangprocessorISA.name & string & If available, the human readable name of the processor ISA.\\
252*079d581eSLawrence TangprocessorISA.value & uint64 & The integer value corresponding to the processor ISA.\\
253*079d581eSLawrence Tang\hline
254*079d581eSLawrence TangerrorType.name & string & If available, the human readable name of the type of processor error this section describes.\\
255*079d581eSLawrence TangerrorType.value & uint64 & The integer value corresponding to the processor error type.\\
256*079d581eSLawrence Tang\hline
257*079d581eSLawrence Tangoperation.name & string & If available, the human readable name of the operation.\\
258*079d581eSLawrence Tangoperation.value & uint64 & The integer value corresponding to the operation.\\
259*079d581eSLawrence Tang\hline
260*079d581eSLawrence Tangflags & object & Flag information for the Generic Processor Error as described in Subsection \ref{subsection:genericprocessorflagsstructure}.\\
261*079d581eSLawrence Tang\hline
262*079d581eSLawrence Tanglevel & int & The level of the structure at which the error occurred.\\
263*079d581eSLawrence Tang\hline
264*079d581eSLawrence TangcpuVersionInfo & uint64 & The CPU version information as reported by CPUID with EAX=1. On ARM, this is MIDR\_EL1.\\
265*079d581eSLawrence Tang\hline
266*079d581eSLawrence TangcpuBrandString & string & The ASCII brand string of the CPU. This field is optional on ARM.\\
267*079d581eSLawrence Tang\hline
268*079d581eSLawrence TangprocessorID & uint64 & The unique identifier of the logical processor. On ARM, this is MPIDR\_EL1.\\
269*079d581eSLawrence Tang\hline
270*079d581eSLawrence TangtargetAddress & uint64 & The target address associated with the error.\\
271*079d581eSLawrence Tang\hline
272*079d581eSLawrence TangrequestorID & uint64 & ID of the requestor associated with the error.\\
273*079d581eSLawrence Tang\hline
274*079d581eSLawrence TangresponderID & uint64 & ID of the responder associated with the error.\\
275*079d581eSLawrence Tang\hline
276*079d581eSLawrence TanginstructionIP & uint64 & Identifies the instruction pointer at the point of error.\\
277*079d581eSLawrence Tang\jsontableend{Generic Processor Error structure field table.}
278*079d581eSLawrence Tang
279*079d581eSLawrence Tang% Generic processor error validation structure.
280*079d581eSLawrence Tang\subsection{Generic Processor Error Validation Structure}
281*079d581eSLawrence Tang\label{subsection:genericprocessorvalidationstructure}
282*079d581eSLawrence TangThis structure describes the valdation bits structure of a General Processor Error CPER section.
283*079d581eSLawrence Tang\jsontable{table:genericprocessorvalidationstructure}
284*079d581eSLawrence TangprocessorTypeValid & boolean & Whether the "processorType" field of the Generic Processor Error section (\ref{section:genericprocessorerrorsection}) is valid.\\
285*079d581eSLawrence Tang\hline
286*079d581eSLawrence TangprocessorISAValid & boolean & Whether the "processorISA" field of the Generic Processor Error section (\ref{section:genericprocessorerrorsection}) is valid.\\
287*079d581eSLawrence Tang\hline
288*079d581eSLawrence TangerrorTypeValid & boolean & Whether the "errorType" field of the Generic Processor Error section (\ref{section:genericprocessorerrorsection}) is valid.\\
289*079d581eSLawrence Tang\hline
290*079d581eSLawrence TangoperationValid & boolean & Whether the "operation" field of the Generic Processor Error section (\ref{section:genericprocessorerrorsection}) is valid.\\
291*079d581eSLawrence Tang\hline
292*079d581eSLawrence TangflagsValid & boolean & Whether the "flags" field of the Generic Processor Error section (\ref{section:genericprocessorerrorsection}) is valid.\\
293*079d581eSLawrence Tang\hline
294*079d581eSLawrence TanglevelValid & boolean & Whether the "levelValid" field of the Generic Processor Error section (\ref{section:genericprocessorerrorsection}) is valid.\\
295*079d581eSLawrence Tang\hline
296*079d581eSLawrence TangcpuVersionValid & boolean & Whether the "cpuVersion" field of the Generic Processor Error section (\ref{section:genericprocessorerrorsection}) is valid.\\
297*079d581eSLawrence Tang\hline
298*079d581eSLawrence TangcpuBrandInfoValid & boolean & Whether the "cpuBrandInfo" field of the Generic Processor Error section (\ref{section:genericprocessorerrorsection}) is valid.\\
299*079d581eSLawrence Tang\hline
300*079d581eSLawrence TangcpuIDValid & boolean & Whether the "cpuID" field of the Generic Processor Error section (\ref{section:genericprocessorerrorsection}) is valid.\\
301*079d581eSLawrence Tang\hline
302*079d581eSLawrence TangtargetAddressValid & boolean & Whether the "targetAddress" field of the Generic Processor Error section (\ref{section:genericprocessorerrorsection}) is valid.\\
303*079d581eSLawrence Tang\hline
304*079d581eSLawrence TangrequestorIDValid & boolean & Whether the "requestorID" field of the Generic Processor Error section (\ref{section:genericprocessorerrorsection}) is valid.\\
305*079d581eSLawrence Tang\hline
306*079d581eSLawrence TangresponderIDValid & boolean & Whether the "responderID" field of the Generic Processor Error section (\ref{section:genericprocessorerrorsection}) is valid.\\
307*079d581eSLawrence Tang\hline
308*079d581eSLawrence TanginstructionIPValid & boolean & Whether the "instructionIP" field of the Generic Processor Error section (\ref{section:genericprocessorerrorsection}) is valid.\\
309*079d581eSLawrence Tang\jsontableend{Generic Processor Error validation structure field table.}
310*079d581eSLawrence Tang
311*079d581eSLawrence Tang% Generic processor error flags structure.
312*079d581eSLawrence Tang\subsection{Generic Processor Error Flags Structure}
313*079d581eSLawrence Tang\label{subsection:genericprocessorflagsstructure}
314*079d581eSLawrence TangThis structure describes the flags structure of a General Processor Error CPER section.
315*079d581eSLawrence Tang\jsontable{table:genericprocessorflagsstructure}
316*079d581eSLawrence Tangrestartable & boolean & Whether program execution can be restarted reliably after the error.\\
317*079d581eSLawrence Tang\hline
318*079d581eSLawrence TangpreciseIP & boolean & Whether the instruction IP captured is directly associated with the error.\\
319*079d581eSLawrence Tang\hline
320*079d581eSLawrence Tangoverflow & boolean & Whether a machine check overflow occurred (multiple errors occurred at once).\\
321*079d581eSLawrence Tang\hline
322*079d581eSLawrence Tangcorrected & boolean & Whether the error was corrected by hardware/firmware.\\
323*079d581eSLawrence Tang\jsontableend{Generic Processor Error flags structure field table.}
324*079d581eSLawrence Tang
325*079d581eSLawrence Tang% IA32/x64 error section.
326*079d581eSLawrence Tang\section{IA32/x64 Processor Error Section}
327*079d581eSLawrence Tang\label{section:ia32x64errorsection}
328*079d581eSLawrence TangThis section describes the JSON format for a single IA32/x64 Error Section from a CPER record. The GUID used for IA32/x64 Processor Error Sections is \texttt{\{0xDC3EA0B0, 0xA144, 0x4797, \{0xB9, 0x5B, 0x53, 0xFA, 0x24, 0x2B, 0x6E, 0x1D\}\}}.
329*079d581eSLawrence Tang\jsontable{table:genericprocessorerrorsection}
330*079d581eSLawrence TangvalidationBits & object & IA32/x64 Processor Error Validation Structure as described in Subsection \ref{subsection:ia32x64processorflagsstructure}.\\
331*079d581eSLawrence Tang\hline
332*079d581eSLawrence TanglocalAPICID & uint64 & The APIC ID of the processor.\\
333*079d581eSLawrence Tang\hline
334*079d581eSLawrence TangcpuidInfo & object & IA32/x64 CPUINFO Structure as defined in Subsection \ref{subsection:ia32x64cpuinfostructure}.\\
335*079d581eSLawrence Tang\hline
336*079d581eSLawrence TangprocessorErrorInfo & array & Array of IA32/x64 Processor Error Info Structures as described in Subsection \ref{subsection:ia32x64processorerrorinfostructure}.\\
337*079d581eSLawrence Tang\hline
338*079d581eSLawrence TangprocessorContextInfo & array & Array of IA32/x64 Processor Context Info Structures as described in Subsection \ref{subsection:ia32x64processorcontextinfostructure}.\\
339*079d581eSLawrence Tang\jsontableend{IA32/x64 Processor Error structure field table.}
340*079d581eSLawrence Tang
341*079d581eSLawrence Tang% IA32/x64 validation bitfield structure.
342*079d581eSLawrence Tang\subsection{IA32/x64 Processor Error Validation Structure}
343*079d581eSLawrence Tang\label{subsection:ia32x64processorflagsstructure}
344*079d581eSLawrence TangThis structure describes the validation bitfield structure of an IA32/x64 Error CPER section.
345*079d581eSLawrence Tang\jsontable{table:ia32x64processorflagsstructure}
346*079d581eSLawrence TanglocalAPICIDValid & boolean & Whether the "localAPICID" field of the IA32/x64 Error section (\ref{section:ia32x64errorsection}) is valid.\\
347*079d581eSLawrence Tang\hline
348*079d581eSLawrence TangcpuIDInfoValid & boolean & Whether the "cpuidInfo" field of the IA32/x64 Error section (\ref{section:ia32x64errorsection}) is valid.\\
349*079d581eSLawrence Tang\hline
350*079d581eSLawrence TangprocessorErrorInfoNum & int & The number of IA32/x64 Processor Error Info Structures (\ref{subsection:ia32x64processorerrorinfostructure}) that are included with this error section.\\
351*079d581eSLawrence Tang\hline
352*079d581eSLawrence TangprocessorContextInfoNum & int & The number of IA32/x64 Processor Context Info Structures (\ref{subsection:ia32x64processorcontextinfostructure}) that are included with this error section.\\
353*079d581eSLawrence Tang\jsontableend{IA32/x64 Processor Error validation structure field table.}
354*079d581eSLawrence Tang
355*079d581eSLawrence Tang% IA32/x64 CPUINFO structure.
356*079d581eSLawrence Tang\subsection{IA32/x64 CPUINFO Structure}
357*079d581eSLawrence Tang\label{subsection:ia32x64cpuinfostructure}
358*079d581eSLawrence TangThis structure describes the CPUINFO structure of an IA32/x64 Error CPER section.
359*079d581eSLawrence Tang\jsontable{table:ia32x64cpuinfostructure}
360*079d581eSLawrence Tangeax & uint64 & Value of the EAX register resulting from a call to CPUID with EAX=1.\\
361*079d581eSLawrence Tang\hline
362*079d581eSLawrence Tangebx & uint64 & Value of the EBX register resulting from a call to CPUID with EAX=1.\\
363*079d581eSLawrence Tang\hline
364*079d581eSLawrence Tangecx & uint64 & Value of the ECX register resulting from a call to CPUID with EAX=1.\\
365*079d581eSLawrence Tang\hline
366*079d581eSLawrence Tangedx & uint64 & Value of the EDX register resulting from a call to CPUID with EAX=1.\\
367*079d581eSLawrence Tang\jsontableend{IA32/x64 CPUINFO structure field table.}
368*079d581eSLawrence Tang
369*079d581eSLawrence Tang% IA32/x64 Processor Error Info structure.
370*079d581eSLawrence Tang\subsection{IA32/x64 Processor Error Info Structure}
371*079d581eSLawrence Tang\label{subsection:ia32x64processorerrorinfostructure}
372*079d581eSLawrence TangThis structure describes a single IA32/x64 Processor Error Info sub-section, which is part of the larger IA32/x64 record (\ref{section:ia32x64errorsection}).
373*079d581eSLawrence Tang\jsontable{table:ia32x64processorerrorinfostructure}
374*079d581eSLawrence Tangtype & string & A GUID indicating the type of processor error defined in this structure. See \texttt{edk/Cper.h} in the library repository for the defined GUID values.\\
375*079d581eSLawrence Tang\hline
376*079d581eSLawrence TangvalidationBits & object & An IA32/x64 Processor Error Info Validation structure, as defined in Subsection \ref{subsection:ia32x64processorerrorinfovalidationstructure}.\\
377*079d581eSLawrence Tang\hline
378*079d581eSLawrence TangcheckInfo & object & Check information structure for this error. One of the structures defined in Subsections \ref{subsection:ia32x64processorerrorcheckinfocachetlbstructure}, \ref{subsection:ia32x64processorerrorcheckinfobusstructure}, or \ref{subsection:ia32x64processorerrorcheckinfomscheckstructure}. Which section is placed here is dependent on the \texttt{type} field.\\
379*079d581eSLawrence Tang\hline
380*079d581eSLawrence TangtargetAddressID & uint64 & Identifies the target address associated with the error.\\
381*079d581eSLawrence Tang\hline
382*079d581eSLawrence TangrequestorID & uint64 & Identifies the requestor associated with the error.\\
383*079d581eSLawrence Tang\hline
384*079d581eSLawrence TangresponderID & uint64 & Identifies the responder associated with the error.\\
385*079d581eSLawrence Tang\hline
386*079d581eSLawrence TanginstructionPointer & uint64 & Identifies the instruction executing when the error occurred.\\
387*079d581eSLawrence Tang\jsontableend{IA32/x64 Processor Error Info structure field table.}
388*079d581eSLawrence Tang
389*079d581eSLawrence Tang% IA32/x64 Processor Error Info Validation structure.
390*079d581eSLawrence Tang\subsection{IA32/x64 Processor Error Info Validation Structure}
391*079d581eSLawrence Tang\label{subsection:ia32x64processorerrorinfovalidationstructure}
392*079d581eSLawrence TangThis structure describes a single IA32/x64 Processor Error Info structure's valid fields, as a set of boolean values.
393*079d581eSLawrence Tang\jsontable{table:ia32x64processorerrorinfovalidationstructure}
394*079d581eSLawrence TangcheckInfoValid & boolean & Whether the "checkInfo" field in the Processor Error Info structure (\ref{subsection:ia32x64processorerrorinfostructure}) is valid.\\
395*079d581eSLawrence Tang\hline
396*079d581eSLawrence TangtargetAddressIDValid & boolean & Whether the "targetAddressID" field in the Processor Error Info structure (\ref{subsection:ia32x64processorerrorinfostructure}) is valid.\\
397*079d581eSLawrence Tang\hline
398*079d581eSLawrence TangrequestorIDValid & boolean & Whether the "requestorID" field in the Processor Error Info structure (\ref{subsection:ia32x64processorerrorinfostructure}) is valid.\\
399*079d581eSLawrence Tang\hline
400*079d581eSLawrence TangresponderIDValid & boolean & Whether the "responderID" field in the Processor Error Info structure (\ref{subsection:ia32x64processorerrorinfostructure}) is valid.\\
401*079d581eSLawrence Tang\hline
402*079d581eSLawrence TanginstructionPointerValid & boolean & Whether the "instructionPointer" field in the Processor Error Info structure (\ref{subsection:ia32x64processorerrorinfostructure}) is valid.\\
403*079d581eSLawrence Tang\hline
404*079d581eSLawrence Tang\jsontableend{IA32/x64 Processor Error Info validation structure field table.}
405*079d581eSLawrence Tang
406*079d581eSLawrence Tang% IA32/x64 Processor Error Check Info (Cache/TLB Error)
407*079d581eSLawrence Tang\subsection{IA32/x64 Processor Error Check Info (Cache/TLB Error) Structure}
408*079d581eSLawrence Tang\label{subsection:ia32x64processorerrorcheckinfocachetlbstructure}
409*079d581eSLawrence TangThis structure describes check info for an IA32/x64 Processor Error Info structure (\ref{subsection:ia32x64processorerrorinfostructure}) stemming from a cache or TLB error.
410*079d581eSLawrence TangThe GUIDs for cache and TLB error check info structures can be found in the library repository's \texttt{edk/Cper.h}.
411*079d581eSLawrence Tang\jsontable{table:ia32x64processorerrorcheckinfocachetlbstructure}
412*079d581eSLawrence TangvalidationBits & object & An IA32/x64 Processor Error Check Info (Cache/TLB/Bus) Validation structure, as defined in Subsection \ref{subsection:ia32x64processorerrorcheckinfovalidationstructure}.\\
413*079d581eSLawrence Tang\hline
414*079d581eSLawrence TangtransactionType.value & uint64 & The raw value of the type of cache/TLB error that occurred.\\
415*079d581eSLawrence TangtransactionType.name & string & The human readable name, if available, of the type of cache/TLB error that occurred.\\
416*079d581eSLawrence Tang\hline
417*079d581eSLawrence Tangoperation.value & uint64 & The raw value of the type of cache/TLB operation that caused the error.\\
418*079d581eSLawrence Tangoperation.name & string & The human readable name, if available, of the type of cache/TLB operation that caused the error.\\
419*079d581eSLawrence Tang\hline
420*079d581eSLawrence Tanglevel & uint64 & The cache/TLB level at which the error occurred.\\
421*079d581eSLawrence Tang\hline
422*079d581eSLawrence TangprocessorContextCorrupt & boolean & Whether the processor context might have been corrupted.\\
423*079d581eSLawrence Tang\hline
424*079d581eSLawrence Tanguncorrected & boolean & Whether the error remained uncorrected.\\
425*079d581eSLawrence Tang\hline
426*079d581eSLawrence TangpreciseIP & boolean & Whether the instruction pointed pushed onto the stack is directly associated with the error.\\
427*079d581eSLawrence Tang\hline
428*079d581eSLawrence TangrestartableIP & boolean & Whether program execution can be restarted reliably at the instruction pointer pushed onto the stack.\\
429*079d581eSLawrence Tang\hline
430*079d581eSLawrence Tangoverflow & boolean & Whether an error overflow occurred (multiple errors within a short timeframe may cause this, can indicate loss of data).\\
431*079d581eSLawrence Tang\jsontableend{IA32/x64 Processor Error Check Info (Cache/TLB Error) structure field table.}
432*079d581eSLawrence Tang
433*079d581eSLawrence Tang% IA32/x64 Processor Error Check Info (Bus Error)
434*079d581eSLawrence Tang\subsection{IA32/x64 Processor Error Check Info (Bus Error) Structure}
435*079d581eSLawrence Tang\label{subsection:ia32x64processorerrorcheckinfobusstructure}
436*079d581eSLawrence TangThis structure describes check info for an IA32/x64 Processor Error Info structure (\ref{subsection:ia32x64processorerrorinfostructure}) stemming from a bus error.
437*079d581eSLawrence TangThe GUID for bus error check info structures can be found in the library repository's \texttt{edk/Cper.h}.
438*079d581eSLawrence Tang\jsontable{table:ia32x64processorerrorcheckinfobusstructure}
439*079d581eSLawrence TangvalidationBits & object & An IA32/x64 Processor Error Check Info (Cache/TLB/Bus) Validation structure, as defined in Subsection \ref{subsection:ia32x64processorerrorcheckinfovalidationstructure}.\\
440*079d581eSLawrence Tang\hline
441*079d581eSLawrence TangtransactionType.value & uint64 & The raw value of the type of bus error that occurred.\\
442*079d581eSLawrence TangtransactionType.name & string & The human readable name, if available, of the type of bus error that occurred.\\
443*079d581eSLawrence Tang\hline
444*079d581eSLawrence Tangoperation.value & uint64 & The raw value of the type of bus operation that caused the error.\\
445*079d581eSLawrence Tangoperation.name & string & The human readable name, if available, of the type of bus operation that caused the error.\\
446*079d581eSLawrence Tang\hline
447*079d581eSLawrence Tanglevel & uint64 & The bus heirarchy level at which the error occurred.\\
448*079d581eSLawrence Tang\hline
449*079d581eSLawrence TangprocessorContextCorrupt & boolean & Whether the processor context might have been corrupted.\\
450*079d581eSLawrence Tang\hline
451*079d581eSLawrence Tanguncorrected & boolean & Whether the error remained uncorrected.\\
452*079d581eSLawrence Tang\hline
453*079d581eSLawrence TangpreciseIP & boolean & Whether the instruction pointed pushed onto the stack is directly associated with the error.\\
454*079d581eSLawrence Tang\hline
455*079d581eSLawrence TangrestartableIP & boolean & Whether program execution can be restarted reliably at the instruction pointer pushed onto the stack.\\
456*079d581eSLawrence Tang\hline
457*079d581eSLawrence Tangoverflow & boolean & Whether an error overflow occurred (multiple errors within a short timeframe may cause this, can indicate loss of data).\\
458*079d581eSLawrence Tang\hline
459*079d581eSLawrence TangparticipationType.value & uint64 & The raw value of the type of participation.\\
460*079d581eSLawrence TangparticipationType.name & string & The human readable name, if available, of the type of participation.\\
461*079d581eSLawrence Tang\hline
462*079d581eSLawrence TangtimedOut & boolean & Whether the request timed out.\\
463*079d581eSLawrence Tang\hline
464*079d581eSLawrence TangaddressSpace.value & uint64 & The raw value of the address space the error was in.\\
465*079d581eSLawrence TangaddressSpace.name  & string & The human readable name, if available, of the address space the error was in.\\
466*079d581eSLawrence Tang\jsontableend{IA32/x64 Processor Error Check Info (Bus Error) structure field table.}
467*079d581eSLawrence Tang
468*079d581eSLawrence Tang% IA32/x64 Processor Error Check Info (MS Check Error)
469*079d581eSLawrence Tang\subsection{IA32/x64 Processor Error Check Info (MS Check Error) Structure}
470*079d581eSLawrence Tang\label{subsection:ia32x64processorerrorcheckinfomscheckstructure}
471*079d581eSLawrence TangThis structure describes check info for an IA32/x64 Processor Error Info structure (\ref{subsection:ia32x64processorerrorinfostructure}) stemming from an MS check error.
472*079d581eSLawrence TangThe GUID for MS check check info structures can be found in the library repository's \texttt{edk/Cper.h}.
473*079d581eSLawrence Tang\jsontable{table:ia32x64processorerrorcheckinfomscheckstructure}
474*079d581eSLawrence TangvalidationBits & object & An IA32/x64 Processor Error Check Info (MS Check) Validation structure, as defined in Subsection \ref{subsection:ia32x64processorerrorcheckinfomscheckvalidationstructure}.\\
475*079d581eSLawrence Tang\hline
476*079d581eSLawrence TangerrorType.value & uint64 & The raw value of the type of operation that caused the error.\\
477*079d581eSLawrence TangerrorType.name & string & The human readable name, if available, of the type of operation that caused the error.\\
478*079d581eSLawrence Tang\hline
479*079d581eSLawrence TangprocessorContextCorrupt & boolean & Whether the processor context might have been corrupted.\\
480*079d581eSLawrence Tang\hline
481*079d581eSLawrence Tanguncorrected & boolean & Whether the error remained uncorrected.\\
482*079d581eSLawrence Tang\hline
483*079d581eSLawrence TangpreciseIP & boolean & Whether the instruction pointed pushed onto the stack is directly associated with the error.\\
484*079d581eSLawrence Tang\hline
485*079d581eSLawrence TangrestartableIP & boolean & Whether program execution can be restarted reliably at the instruction pointer pushed onto the stack.\\
486*079d581eSLawrence Tang\hline
487*079d581eSLawrence Tangoverflow & boolean & Whether an error overflow occurred (multiple errors within a short timeframe may cause this, can indicate loss of data).\\
488*079d581eSLawrence Tang\jsontableend{IA32/x64 Processor Error Check Info (MS Check Error) structure field table.}
489*079d581eSLawrence Tang
490*079d581eSLawrence Tang% IA32/x64 Processor Error Check Info Validation structure.
491*079d581eSLawrence Tang\subsection{IA32/x64 Processor Error Check Info (Cache/TLB/Bus) Validation Structure}
492*079d581eSLawrence Tang\label{subsection:ia32x64processorerrorcheckinfovalidationstructure}
493*079d581eSLawrence TangThis structure describes a single IA32/x64 Processor Error Check Info structure's valid fields for cache, TLB and bus errors, as a set of boolean values.
494*079d581eSLawrence Tang\jsontable{table:ia32x64processorerrorcheckinfovalidationstructure}
495*079d581eSLawrence TangtransactionTypeValid & boolean & Whether the "transactionType" field in a Processor Error Check Info structure is valid.\\
496*079d581eSLawrence Tang\hline
497*079d581eSLawrence TangoperationValid & boolean & Whether the "operation" field in a Processor Error Check Info structure is valid.\\
498*079d581eSLawrence Tang\hline
499*079d581eSLawrence TanglevelValid & boolean & Whether the "level" field in a Processor Error Check Info structure is valid.\\
500*079d581eSLawrence Tang\hline
501*079d581eSLawrence TangprocessorContextCorruptValid & boolean & Whether the "processorContextCorrupt" field in a Processor Error Check Info structure is valid.\\
502*079d581eSLawrence Tang\hline
503*079d581eSLawrence TanguncorrectedValid & boolean & Whether the "uncorrected" field in a Processor Error Check Info structure is valid.\\
504*079d581eSLawrence Tang\hline
505*079d581eSLawrence TangpreciseIPValid & boolean & Whether the "preciseIP" field in a Processor Error Check Info structure is valid.\\
506*079d581eSLawrence Tang\hline
507*079d581eSLawrence TangrestartableIPValid & boolean & Whether the "restartableIP" field in a Processor Error Check Info structure is valid.\\
508*079d581eSLawrence Tang\hline
509*079d581eSLawrence TangoverflowValid & boolean & Whether the "overflow" field in a Processor Error Check Info structure is valid.\\
510*079d581eSLawrence Tang\hline
511*079d581eSLawrence TangparticipationTypeValid & boolean (\textbf{optional}) & Whether the "participationType" field in the Processor Error Check Info (Bus Error) structure (\ref{subsection:ia32x64processorerrorcheckinfobusstructure}) is valid. \textbf{This field is only present on bus related check info structures.}\\
512*079d581eSLawrence Tang\hline
513*079d581eSLawrence TangtimedOutValid & boolean (\textbf{optional}) & Whether the "timeOut" field in the Processor Error Check Info (Bus Error) structure (\ref{subsection:ia32x64processorerrorcheckinfobusstructure}) is valid. \textbf{This field is only present on bus related check info structures.}\\
514*079d581eSLawrence Tang\jsontableend{IA32/x64 Processor Error Check Info (Cache/TLB/Bus) validation structure field table.}
515*079d581eSLawrence Tang
516*079d581eSLawrence Tang% IA32/x64 Processor Error Check Info (MS Check) Validation structure.
517*079d581eSLawrence Tang\subsection{IA32/x64 Processor Error Check Info (MS Check) Validation Structure}
518*079d581eSLawrence Tang\label{subsection:ia32x64processorerrorcheckinfomscheckvalidationstructure}
519*079d581eSLawrence TangThis structure describes a single IA32/x64 Processor Error Check Info structure's valid fields for MS check errors, as a set of boolean values.
520*079d581eSLawrence Tang\jsontable{table:ia32x64processorerrorcheckinfomscheckvalidationstructure}
521*079d581eSLawrence TangerrorTypeValid & boolean & Whether the "transactionType" field in a Processor Error Check Info (MS Check) (\ref{subsection:ia32x64processorerrorcheckinfomscheckstructure}) structure is valid.\\
522*079d581eSLawrence Tang\hline
523*079d581eSLawrence TangprocessorContextCorruptValid & boolean & Whether the "processorContextCorrupt" field in a Processor Error Check Info (MS Check) (\ref{subsection:ia32x64processorerrorcheckinfomscheckstructure}) structure is valid.\\
524*079d581eSLawrence Tang\hline
525*079d581eSLawrence TanguncorrectedValid & boolean & Whether the "uncorrected" field in a Processor Error Check Info (MS Check) (\ref{subsection:ia32x64processorerrorcheckinfomscheckstructure}) structure is valid.\\
526*079d581eSLawrence Tang\hline
527*079d581eSLawrence TangpreciseIPValid & boolean & Whether the "preciseIP" field in a Processor Error Check Info (MS Check) (\ref{subsection:ia32x64processorerrorcheckinfomscheckstructure}) structure is valid.\\
528*079d581eSLawrence Tang\hline
529*079d581eSLawrence TangrestartableIPValid & boolean & Whether the "restartableIP" field in a Processor Error Check Info (MS Check) (\ref{subsection:ia32x64processorerrorcheckinfomscheckstructure}) structure is valid.\\
530*079d581eSLawrence Tang\hline
531*079d581eSLawrence TangoverflowValid & boolean & Whether the "overflow" field in a Processor Error Check Info (MS Check) (\ref{subsection:ia32x64processorerrorcheckinfomscheckstructure}) structure is valid.\\
532*079d581eSLawrence Tang\jsontableend{IA32/x64 Processor Error Check Info (MS Check) validation structure field table.}
533*079d581eSLawrence Tang
534*079d581eSLawrence Tang% IA32/x64 Processor Context Info structure.
535*079d581eSLawrence Tang\subsection{IA32/x64 Processor Context Info Structure}
536*079d581eSLawrence Tang\label{subsection:ia32x64processorcontextinfostructure}
537*079d581eSLawrence TangThis structure describes a single IA32/x64 Processor Context Info sub-section, which is part of the larger IA32/x64 record (\ref{section:ia32x64errorsection}).
538*079d581eSLawrence Tang\jsontable{table:ia32x64processorcontextinfostructure}
539*079d581eSLawrence TangregisterContextType.value & uint64 & The raw value of the type of processor context state being reported.\\
540*079d581eSLawrence TangregisterContextType.name & string & The human readable name, if available, of the type of processor context state being reported.\\
541*079d581eSLawrence Tang\hline
542*079d581eSLawrence TangregisterArraySize & uint64 & The total size of the array for the data type being reported, in bytes.\\
543*079d581eSLawrence Tang\hline
544*079d581eSLawrence TangmsrAddress & uint64 & The starting MSR address. Valid when the \texttt{registerContextType.value} field is "1" (MSR Registers).\\
545*079d581eSLawrence Tang\hline
546*079d581eSLawrence TangmmRegisterAddress & uint64 & The starting memory address for when the \texttt{registerContextType.value} field is "7" (Memory Mapped Registers).\\
547*079d581eSLawrence Tang\hline
548*079d581eSLawrence TangregisterArray & object & Register data, formatted as object fields. If the \texttt{registerContextType.value} field has the value "2" or "3", this takes the structure of Subsections \ref{subsection:ia32x64ia32registerstatestructure} and \ref{subsection:ia32x64x64registerstatestructure} respectively. If the value is any other, it takes the form of the structure defined in Subsection \ref{subsection:ia32x64unformattedregisterstatestructure}.\\
549*079d581eSLawrence Tang\jsontableend{IA32/x64 Processor Context Info structure field table.}
550*079d581eSLawrence Tang
551*079d581eSLawrence Tang% IA32/x64 IA32 Register State structure
552*079d581eSLawrence Tang\subsection{IA32/x64 IA32 Register State Structure}
553*079d581eSLawrence Tang\label{subsection:ia32x64ia32registerstatestructure}
554*079d581eSLawrence TangThis structure describes a single IA32/x64 IA32 register state, which is contained in IA32/x64 Processor Context Info structures (\ref{subsection:ia32x64processorcontextinfostructure}) when \texttt{registerContextType.value} has the value "2".
555*079d581eSLawrence Tang\jsontable{table:ia32x64ia32registerstatestructure}
556*079d581eSLawrence Tangeax & uint64 & The EAX register. Real maximum is \texttt{UINT32}, null extended to \texttt{UINT64}.\\
557*079d581eSLawrence Tang\hline
558*079d581eSLawrence Tangebx & uint64 & The EBX register. Real maximum is \texttt{UINT32}, null extended to \texttt{UINT64}.\\
559*079d581eSLawrence Tang\hline
560*079d581eSLawrence Tangecx & uint64 & The ECX register. Real maximum is \texttt{UINT32}, null extended to \texttt{UINT64}.\\
561*079d581eSLawrence Tang\hline
562*079d581eSLawrence Tangedx & uint64 & The EDX register. Real maximum is \texttt{UINT32}, null extended to \texttt{UINT64}.\\
563*079d581eSLawrence Tang\hline
564*079d581eSLawrence Tangesi & uint64 & The ESI register. Real maximum is \texttt{UINT32}, null extended to \texttt{UINT64}.\\
565*079d581eSLawrence Tang\hline
566*079d581eSLawrence Tangedi & uint64 & The EDI register. Real maximum is \texttt{UINT32}, null extended to \texttt{UINT64}.\\
567*079d581eSLawrence Tang\hline
568*079d581eSLawrence Tangebp & uint64 & The EBP register. Real maximum is \texttt{UINT32}, null extended to \texttt{UINT64}.\\
569*079d581eSLawrence Tang\hline
570*079d581eSLawrence Tangesp & uint64 & The ESP register. Real maximum is \texttt{UINT32}, null extended to \texttt{UINT64}.\\
571*079d581eSLawrence Tang\hline
572*079d581eSLawrence Tangcs & uint64 & The CS register. Real maximum is \texttt{UINT32}, null extended to \texttt{UINT64}.\\
573*079d581eSLawrence Tang\hline
574*079d581eSLawrence Tangds & uint64 & The DS register. Real maximum is \texttt{UINT32}, null extended to \texttt{UINT64}.\\
575*079d581eSLawrence Tang\hline
576*079d581eSLawrence Tangss & uint64 & The SS register. Real maximum is \texttt{UINT32}, null extended to \texttt{UINT64}.\\
577*079d581eSLawrence Tang\hline
578*079d581eSLawrence Tanges & uint64 & The ES register. Real maximum is \texttt{UINT32}, null extended to \texttt{UINT64}.\\
579*079d581eSLawrence Tang\hline
580*079d581eSLawrence Tangfs & uint64 & The FS register. Real maximum is \texttt{UINT32}, null extended to \texttt{UINT64}.\\
581*079d581eSLawrence Tang\hline
582*079d581eSLawrence Tanggs & uint64 & The GS register. Real maximum is \texttt{UINT32}, null extended to \texttt{UINT64}.\\
583*079d581eSLawrence Tang\hline
584*079d581eSLawrence Tangeflags & uint64 & The EFLAGS register. Real maximum is \texttt{UINT32}, null extended to \texttt{UINT64}.\\
585*079d581eSLawrence Tang\hline
586*079d581eSLawrence Tangeip & uint64 & The EIP register. Real maximum is \texttt{UINT32}, null extended to \texttt{UINT64}.\\
587*079d581eSLawrence Tang\hline
588*079d581eSLawrence Tangcr0 & uint64 & The CR0 register. Real maximum is \texttt{UINT32}, null extended to \texttt{UINT64}.\\
589*079d581eSLawrence Tang\hline
590*079d581eSLawrence Tangcr1 & uint64 & The CR1 register. Real maximum is \texttt{UINT32}, null extended to \texttt{UINT64}.\\
591*079d581eSLawrence Tang\hline
592*079d581eSLawrence Tangcr2 & uint64 & The CR2 register. Real maximum is \texttt{UINT32}, null extended to \texttt{UINT64}.\\
593*079d581eSLawrence Tang\hline
594*079d581eSLawrence Tangcr3 & uint64 & The CR3 register. Real maximum is \texttt{UINT32}, null extended to \texttt{UINT64}.\\
595*079d581eSLawrence Tang\hline
596*079d581eSLawrence Tangcr4 & uint64 & The CR4 register. Real maximum is \texttt{UINT32}, null extended to \texttt{UINT64}.\\
597*079d581eSLawrence Tang\hline
598*079d581eSLawrence Tanggdtr & uint64 & The GDTR register.\\
599*079d581eSLawrence Tang\hline
600*079d581eSLawrence Tangidtr & uint64 & The IDTR register.\\
601*079d581eSLawrence Tang\hline
602*079d581eSLawrence Tangldtr & uint64 & The LDTR register.\\
603*079d581eSLawrence Tang\hline
604*079d581eSLawrence Tangtr & uint64 & The TR register. Real maximum is \texttt{UINT32}, null extended to \texttt{UINT64}.\\
605*079d581eSLawrence Tang\jsontableend{IA32/x64 IA32 Register State structure field table.}
606*079d581eSLawrence Tang
607*079d581eSLawrence Tang% IA32/x64 x64 Register State structure
608*079d581eSLawrence Tang\subsection{IA32/x64 x64 Register State Structure}
609*079d581eSLawrence Tang\label{subsection:ia32x64x64registerstatestructure}
610*079d581eSLawrence TangThis structure describes a single IA32/x64 x64 register state, which is contained in IA32/x64 Processor Context Info structures (\ref{subsection:ia32x64processorcontextinfostructure}) when \texttt{registerContextType.value} has the value "3".
611*079d581eSLawrence Tang\jsontable{table:ia32x64x64registerstatestructure}
612*079d581eSLawrence Tangrax & uint64 & The RAX register.\\
613*079d581eSLawrence Tang\hline
614*079d581eSLawrence Tangrbx & uint64 & The RBX register.\\
615*079d581eSLawrence Tang\hline
616*079d581eSLawrence Tangrcx & uint64 & The RCX register.\\
617*079d581eSLawrence Tang\hline
618*079d581eSLawrence Tangrdx & uint64 & The RDX register.\\
619*079d581eSLawrence Tang\hline
620*079d581eSLawrence Tangrsi & uint64 & The RSI register.\\
621*079d581eSLawrence Tang\hline
622*079d581eSLawrence Tangrdi & uint64 & The RDI register.\\
623*079d581eSLawrence Tang\hline
624*079d581eSLawrence Tangrbp & uint64 & The RBP register.\\
625*079d581eSLawrence Tang\hline
626*079d581eSLawrence Tangrsp & uint64 & The RSP register.\\
627*079d581eSLawrence Tang\hline
628*079d581eSLawrence Tangr8 & uint64 & The R8 register.\\
629*079d581eSLawrence Tang\hline
630*079d581eSLawrence Tangr9 & uint64 & The R9 register.\\
631*079d581eSLawrence Tang\hline
632*079d581eSLawrence Tangr10 & uint64 & The R10 register.\\
633*079d581eSLawrence Tang\hline
634*079d581eSLawrence Tangr11 & uint64 & The R11 register.\\
635*079d581eSLawrence Tang\hline
636*079d581eSLawrence Tangr12 & uint64 & The R12 register.\\
637*079d581eSLawrence Tang\hline
638*079d581eSLawrence Tangr13 & uint64 & The R13 register.\\
639*079d581eSLawrence Tang\hline
640*079d581eSLawrence Tangr14 & uint64 & The R14 register.\\
641*079d581eSLawrence Tang\hline
642*079d581eSLawrence Tangr15 & uint64 & The R15 register.\\
643*079d581eSLawrence Tang\hline
644*079d581eSLawrence Tangcs & uint64 & The CS register.\\
645*079d581eSLawrence Tang\hline
646*079d581eSLawrence Tangds & uint64 & The DS register.\\
647*079d581eSLawrence Tang\hline
648*079d581eSLawrence Tangss & uint64 & The SS register.\\
649*079d581eSLawrence Tang\hline
650*079d581eSLawrence Tanges & uint64 & The ES register.\\
651*079d581eSLawrence Tang\hline
652*079d581eSLawrence Tangfs & uint64 & The FS register.\\
653*079d581eSLawrence Tang\hline
654*079d581eSLawrence Tanggs & uint64 & The GS register.\\
655*079d581eSLawrence Tang\hline
656*079d581eSLawrence Tangrflags & uint64 & The RFLAGS register.\\
657*079d581eSLawrence Tang\hline
658*079d581eSLawrence Tangeip & uint64 & The EIP register.\\
659*079d581eSLawrence Tang\hline
660*079d581eSLawrence Tangcr0 & uint64 & The CR0 register.\\
661*079d581eSLawrence Tang\hline
662*079d581eSLawrence Tangcr1 & uint64 & The CR1 register.\\
663*079d581eSLawrence Tang\hline
664*079d581eSLawrence Tangcr2 & uint64 & The CR2 register.\\
665*079d581eSLawrence Tang\hline
666*079d581eSLawrence Tangcr3 & uint64 & The CR3 register.\\
667*079d581eSLawrence Tang\hline
668*079d581eSLawrence Tangcr4 & uint64 & The CR4 register.\\
669*079d581eSLawrence Tang\hline
670*079d581eSLawrence Tangcr8 & uint64 & The CR8 register.\\
671*079d581eSLawrence Tang\hline
672*079d581eSLawrence Tanggdtr\_0 & uint64 & The first \texttt{UINT64} of the GDTR register.\\
673*079d581eSLawrence Tang\hline
674*079d581eSLawrence Tanggdtr\_1 & uint64 & The second \texttt{UINT64} of the GDTR register.\\
675*079d581eSLawrence Tang\hline
676*079d581eSLawrence Tangidtr\_0 & uint64 & The first \texttt{UINT64} of the IDTR register.\\
677*079d581eSLawrence Tang\hline
678*079d581eSLawrence Tangidtr\_1 & uint64 & The second \texttt{UINT64} of the IDTR register.\\
679*079d581eSLawrence Tang\hline
680*079d581eSLawrence Tangldtr & uint64 & The LDTR register.\\
681*079d581eSLawrence Tang\hline
682*079d581eSLawrence Tangtr & uint64 & The TR register.\\
683*079d581eSLawrence Tang\jsontableend{IA32/x64 x64 Register State structure field table.}
684*079d581eSLawrence Tang
685*079d581eSLawrence Tang% IA32/x64 IA32 Register State structure
686*079d581eSLawrence Tang\subsection{IA32/x64 Unformatted Register State Structure}
687*079d581eSLawrence Tang\label{subsection:ia32x64unformattedregisterstatestructure}
688*079d581eSLawrence TangThis structure describes a single IA32/x64 unformatted register state, which is contained in IA32/x64 Processor Context Info structures (\ref{subsection:ia32x64processorcontextinfostructure}) when\\\texttt{registerContextType.value} has a value other than "2" or "3".
689*079d581eSLawrence Tang\jsontable{table:ia32x64unformattedregisterstatestructure}
690*079d581eSLawrence Tangdata & string & A base64-formatted binary representation of the register array.\\
691*079d581eSLawrence Tang\jsontableend{IA32/x64 Unformatted Register State structure field table.}
692*079d581eSLawrence Tang
693*079d581eSLawrence Tang% ARM processor error section.
694*079d581eSLawrence Tang\section{ARM Processor Error Section}
695*079d581eSLawrence Tang\label{section:armprocessorerrorsection}
696*079d581eSLawrence TangThis section describes the JSON format for a single ARM Processor Error Section from a CPER record. The GUID used for ARM Processor Error Sections is \texttt{\{ 0xe19e3d16, 0xbc11, 0x11e4, \{ 0x9c, 0xaa, 0xc2, 0x05, 0x1d, 0x5d, 0x46, 0xb0 \}\}}.
697*079d581eSLawrence Tang\jsontable{table:armprocessorerrorsection}
698*079d581eSLawrence TangvalidationBits & object & An ARM Processor Error Validation structure, as defined in Subsection \ref{subsection:armprocessorerrorvalidationstructure}.\\
699*079d581eSLawrence Tang\hline
700*079d581eSLawrence TangerrorInfoNum & int & The number of error info structures attached to this error.\\
701*079d581eSLawrence Tang\hline
702*079d581eSLawrence TangcontextInfoNum & int & The number of context info structures attached to this error.\\
703*079d581eSLawrence Tang\hline
704*079d581eSLawrence TangsectionLength & uint64 & The total size (in bytes) of this error section.\\
705*079d581eSLawrence Tang\hline
706*079d581eSLawrence TangerrorAffinity.value & int & The raw value of the error affinity for this error.\\
707*079d581eSLawrence TangerrorAffinity.type & string & The human readable type of the error affinity for this error. All values are vendor defined, so specific names cannot be provided.\\
708*079d581eSLawrence Tang\hline
709*079d581eSLawrence TangmpidrEl1 & uint64 & The processor ID (\texttt{MPIDR\_EL1}) for this error.\\
710*079d581eSLawrence Tang\hline
711*079d581eSLawrence TangmidrEl1 & uint64 & The chip ID (\texttt{MIDR\_EL1}) for this error.\\
712*079d581eSLawrence Tang\hline
713*079d581eSLawrence Tangrunning & boolean & Whether the processor is running or not. If true, the \texttt{psciState} field is not included.\\
714*079d581eSLawrence Tang\hline
715*079d581eSLawrence TangpsciState & uint64 (\textbf{optional}) & The PSCI state of the processor. Only \textbf{optionally} included when the "running" field is false. Cannot be made human readable, as this could either be in the pre-PSCI 1.0 format, or the newer "Extended StateID" format. For more information, see the ARM PSCI specification.\\
716*079d581eSLawrence Tang\hline
717*079d581eSLawrence TangerrorInfo & array & Array of ARM Processor Error Info structures, as defined in Subsection \ref{subsection:armprocessorerrorinfostructure}.\\
718*079d581eSLawrence Tang\hline
719*079d581eSLawrence TangcontextInfo & array & Array of ARM Processor Context Info structures, as defined in Subsection \ref{subsection:armprocessorcontextinfostructure}.\\
720*079d581eSLawrence Tang\hline
721*079d581eSLawrence TangvendorSpecificInfo.data & string (\textbf{optional}) & If it exists, a base64-encoded binary representation of any attached vendor specific information.\\
722*079d581eSLawrence Tang\jsontableend{ARM Processor Error structure field table.}
723*079d581eSLawrence Tang
724*079d581eSLawrence Tang% ARM Processor Error Validation structure
725*079d581eSLawrence Tang\subsection{ARM Processor Error Validation Structure}
726*079d581eSLawrence Tang\label{subsection:armprocessorerrorvalidationstructure}
727*079d581eSLawrence TangThis structure describes which fields are valid in a single ARM Processor Error structure (\ref{section:armprocessorerrorsection}) with boolean fields.
728*079d581eSLawrence Tang\jsontable{table:armprocessorerrorvalidationstructure}
729*079d581eSLawrence TangmpidrValid & boolean & Whether the "mpidrEl1" field in the ARM Processor Error structure (\ref{section:armprocessorerrorsection}) is valid.\\
730*079d581eSLawrence Tang\hline
731*079d581eSLawrence TangerrorAffinityLevelValid & boolean & Whether the "errorAffinity" field in the ARM Processor Error structure (\ref{section:armprocessorerrorsection}) is valid.\\
732*079d581eSLawrence Tang\hline
733*079d581eSLawrence TangrunningStateValid & boolean & Whether the "running" field in the ARM Processor Error structure (\ref{section:armprocessorerrorsection}) is valid.\\
734*079d581eSLawrence Tang\hline
735*079d581eSLawrence TangvendorSpecificInfoValid & boolean & Whether the trailing vendor specific info (if present) in the ARM Processor Error Structure (\ref{section:armprocessorerrorsection}) is valid.\\
736*079d581eSLawrence Tang\jsontableend{ARM Processor Error validation structure field table.}
737*079d581eSLawrence Tang
738*079d581eSLawrence Tang% ARM Processor Error Info structure
739*079d581eSLawrence Tang\subsection{ARM Processor Error Info Structure}
740*079d581eSLawrence Tang\label{subsection:armprocessorerrorinfostructure}
741*079d581eSLawrence TangThis structure describes a single ARM Processor Error Info structure, as part of a whole ARM Processor Error structure (\ref{section:armprocessorerrorsection}).
742*079d581eSLawrence Tang\jsontable{table:armprocessorerrorinfostructure}
743*079d581eSLawrence Tangversion & int & The version of the structure that is implemented.\\
744*079d581eSLawrence Tang\hline
745*079d581eSLawrence Tanglength & int & The length of the structure, in bytes. For version 0, this is 32.\\
746*079d581eSLawrence Tang\hline
747*079d581eSLawrence TangvalidationBits & object & An ARM Processor Error Info Validation structure as defined in Subsection \ref{subsection:armprocessorerrorinfovalidationstructure}.\\
748*079d581eSLawrence Tang\hline
749*079d581eSLawrence TangerrorType.value & uint64 & The raw value of the error type this error info describes.\\
750*079d581eSLawrence TangerrorType.name & string & The human readable name, if available, of the error type this error info describes.\\
751*079d581eSLawrence Tang\hline
752*079d581eSLawrence TangmultipleError.value & int & If the value of this field is 2 or greater, the raw value of the number of errors that occurred. Otherwise, the raw value of the multiple error status.\\
753*079d581eSLawrence TangmultipleError.type & string & The human readable value, if available, of what type of multiple error this is (single error, multiple error).\\
754*079d581eSLawrence Tang\hline
755*079d581eSLawrence Tangflags & object & An ARM Processor Error Info Flags structure as defined in Subsection \ref{subsection:armprocessorerrorinfoflagsstructure}.\\
756*079d581eSLawrence Tang\hline
757*079d581eSLawrence TangerrorInformation & object & An error information structure, as defined in one of Subsections \ref{subsection:armprocessorerrorinfoerrorinformationcachetlbstructure} or \ref{subsection:armprocessorerrorinfoerrorinformationbusstructure}. Which structure this is depends on the \texttt{errorType.value} field.\\
758*079d581eSLawrence Tang\hline
759*079d581eSLawrence TangvirtualFaultAddress & uint64 & Indicates a virtual fault address associated with the error, such as when an error occurs in virtually indexed cache.\\
760*079d581eSLawrence Tang\hline
761*079d581eSLawrence TangphysicalFaultAddress & uint64 & Indicates a physical fault address associated with the error.\\
762*079d581eSLawrence Tang\jsontableend{ARM Processor Error Info structure field table.}
763*079d581eSLawrence Tang
764*079d581eSLawrence Tang% ARM Processor Error Info Validation structure
765*079d581eSLawrence Tang\subsection{ARM Processor Error Info Validation Structure}
766*079d581eSLawrence Tang\label{subsection:armprocessorerrorinfovalidationstructure}
767*079d581eSLawrence TangThis structure describes the valid fields in a single ARM Processor Error Info structure (\ref{subsection:armprocessorerrorinfostructure}), using boolean fields.
768*079d581eSLawrence Tang\jsontable{table:armprocessorerrorinfovalidationstructure}
769*079d581eSLawrence TangmultipleErrorValid & boolean & Whether the "multipleError" field in the ARM Processor Error Info structure (\ref{subsection:armprocessorerrorinfostructure}) is valid.\\
770*079d581eSLawrence Tang\hline
771*079d581eSLawrence TangflagsValid & boolean & Whether the "flags" field in the ARM Processor Error Info structure (\ref{subsection:armprocessorerrorinfostructure}) is valid.\\
772*079d581eSLawrence Tang\hline
773*079d581eSLawrence TangerrorInformationValid & boolean & Whether the "errorInformation" field in the ARM Processor Error Info structure (\ref{subsection:armprocessorerrorinfostructure}) is valid.\\
774*079d581eSLawrence Tang\hline
775*079d581eSLawrence TangvirtualFaultAddressValid & boolean & Whether the "virtualFaultAddress" field in the ARM Processor Error Info structure (\ref{subsection:armprocessorerrorinfostructure}) is valid.\\
776*079d581eSLawrence Tang\hline
777*079d581eSLawrence TangphysicalFaultAddressValid & boolean & Whether the "physicalFaultAddress" field in the ARM Processor Error Info structure (\ref{subsection:armprocessorerrorinfostructure}) is valid.\\
778*079d581eSLawrence Tang\jsontableend{ARM Processor Error Info validation structure field table.}
779*079d581eSLawrence Tang
780*079d581eSLawrence Tang% ARM Processor Error Info Validation structure
781*079d581eSLawrence Tang\subsection{ARM Processor Error Info Flags Structure}
782*079d581eSLawrence Tang\label{subsection:armprocessorerrorinfoflagsstructure}
783*079d581eSLawrence TangThis structure describes the flags in a single ARM Processor Error Info structure (\ref{subsection:armprocessorerrorinfostructure}), using boolean fields.
784*079d581eSLawrence Tang\jsontable{table:armprocessorerrorinfoflagsstructure}
785*079d581eSLawrence TangfirstErrorCaptured & boolean & Whether this is the first error captured.\\
786*079d581eSLawrence Tang\hline
787*079d581eSLawrence TanglastErrorCaptured & boolean & Whether this is the last error captured.\\
788*079d581eSLawrence Tang\hline
789*079d581eSLawrence Tangpropagated & boolean & Whether the error has propagated.\\
790*079d581eSLawrence Tang\hline
791*079d581eSLawrence Tangoverflow & boolean & Whether error buffer overflow was detected. This is usually from multiple errors occurring in a short timespan, and indicates loss of error data.\\
792*079d581eSLawrence Tang\jsontableend{ARM Processor Error Info Flags structure field table.}
793*079d581eSLawrence Tang
794*079d581eSLawrence Tang% ARM Processor Error Info Error Information (Cache/TLB) structure
795*079d581eSLawrence Tang\subsection{ARM Processor Error Info Cache/TLB Information Structure}
796*079d581eSLawrence Tang\label{subsection:armprocessorerrorinfoerrorinformationcachetlbstructure}
797*079d581eSLawrence TangThis structure describes cache/TLB error information for a single ARM Processor Error Info structure (\ref{subsection:armprocessorerrorinfostructure}).
798*079d581eSLawrence Tang\jsontable{table:armprocessorerrorinfoerrorinformationcachetlbstructure}
799*079d581eSLawrence TangvalidationBits & object & An ARM Processor Info Cache/TLB Validation structure as defined in Subsection \ref{subsection:armprocessorerrorinfocachetlbvalidationstructure}.\\
800*079d581eSLawrence Tang\hline
801*079d581eSLawrence TangtransactionType.value & uint64 & The raw value of the type of cache/TLB error.\\
802*079d581eSLawrence TangtransactionType.name & string & The human readable name, if available, of the type of cache/TLB error.\\
803*079d581eSLawrence Tang\hline
804*079d581eSLawrence Tangoperation.value & uint64 & The raw value of the cache/TLB operation that caused the error.\\
805*079d581eSLawrence Tangoperation.name & string & The human readable name, if available, of the cache/TLB operation that caused the error.\\
806*079d581eSLawrence Tang\hline
807*079d581eSLawrence Tanglevel & int & The cache/TLB level that the error occurred at.\\
808*079d581eSLawrence Tang\hline
809*079d581eSLawrence TangprocessorContextCorrupt & boolean & Whether the processor context may have been corrupted.\\
810*079d581eSLawrence Tang\hline
811*079d581eSLawrence Tangcorrected & boolean & Whether the error was corrected.\\
812*079d581eSLawrence Tang\hline
813*079d581eSLawrence TangprecisePC & boolean & Whether the program counter is directly associated with the error.\\
814*079d581eSLawrence Tang\hline
815*079d581eSLawrence TangrestartablePC & boolean & Whether program execution can be restarted reliably at the program counter associated with the error.\\
816*079d581eSLawrence Tang\jsontableend{ARM Processor Error Info Cache/TLB Information structure field table.}
817*079d581eSLawrence Tang
818*079d581eSLawrence Tang% ARM Processor Error Info Error Information (Cache/TLB) validation structure
819*079d581eSLawrence Tang\subsection{ARM Processor Error Info Cache/TLB Validation Structure}
820*079d581eSLawrence Tang\label{subsection:armprocessorerrorinfocachetlbvalidationstructure}
821*079d581eSLawrence TangThis structure describes valid fields in a single ARM Processor Error Info Cache/TLB Information structure (\ref{subsection:armprocessorerrorinfoerrorinformationcachetlbstructure}), as a set of boolean fields.
822*079d581eSLawrence Tang\jsontable{table:armprocessorerrorinfocachetlbvalidationstructure}
823*079d581eSLawrence TangtransactionTypeValid & boolean & Whether the "transactionType" field in the ARM Processor Info Cache/TLB Information structure (\ref{subsection:armprocessorerrorinfoerrorinformationcachetlbstructure}) is valid.\\
824*079d581eSLawrence Tang\hline
825*079d581eSLawrence TangoperationValid & boolean & Whether the "operation" field in the ARM Processor Info Cache/TLB Information structure (\ref{subsection:armprocessorerrorinfoerrorinformationcachetlbstructure}) is valid.\\
826*079d581eSLawrence Tang\hline
827*079d581eSLawrence TanglevelValid & boolean & Whether the "level" field in the ARM Processor Info Cache/TLB Information structure (\ref{subsection:armprocessorerrorinfoerrorinformationcachetlbstructure}) is valid.\\
828*079d581eSLawrence Tang\hline
829*079d581eSLawrence TangprocessorContextCorruptValid & boolean & Whether the "processorContextCorrupt" field in the ARM Processor Info Cache/TLB Information structure (\ref{subsection:armprocessorerrorinfoerrorinformationcachetlbstructure}) is valid.\\
830*079d581eSLawrence Tang\hline
831*079d581eSLawrence TangcorrectedValid & boolean & Whether the "corrected" field in the ARM Processor Info Cache/TLB Information structure (\ref{subsection:armprocessorerrorinfoerrorinformationcachetlbstructure}) is valid.\\
832*079d581eSLawrence Tang\hline
833*079d581eSLawrence TangprecisePCValid & boolean & Whether the "precisePC" field in the ARM Processor Info Cache/TLB Information structure (\ref{subsection:armprocessorerrorinfoerrorinformationcachetlbstructure}) is valid.\\
834*079d581eSLawrence Tang\hline
835*079d581eSLawrence TangrestartablePCValid & boolean & Whether the "restartablePC" field in the ARM Processor Info Cache/TLB Information structure (\ref{subsection:armprocessorerrorinfoerrorinformationcachetlbstructure}) is valid.\\
836*079d581eSLawrence Tang\jsontableend{ARM Processor Error Info Cache/TLB validation structure field table.}
837*079d581eSLawrence Tang
838*079d581eSLawrence Tang% ARM Processor Error Info Error Information (Bus) structure
839*079d581eSLawrence Tang\subsection{ARM Processor Error Info Bus Information Structure}
840*079d581eSLawrence Tang\label{subsection:armprocessorerrorinfoerrorinformationbusstructure}
841*079d581eSLawrence TangThis structure describes bus error information for a single ARM Processor Error Info structure (\ref{subsection:armprocessorerrorinfostructure}).
842*079d581eSLawrence Tang\jsontable{table:armprocessorerrorinfoerrorinformationbusstructure}
843*079d581eSLawrence TangvalidationBits & object & An ARM Processor Info Bus Validation structure as defined in Subsection \ref{subsection:armprocessorerrorinfobusvalidationstructure}.\\
844*079d581eSLawrence Tang\hline
845*079d581eSLawrence TangtransactionType.value & uint64 & The raw value of the type of bus error.\\
846*079d581eSLawrence TangtransactionType.name & string & The human readable name, if available, of the type of bus error.\\
847*079d581eSLawrence Tang\hline
848*079d581eSLawrence Tangoperation.value & uint64 & The raw value of the bus operation that caused the error.\\
849*079d581eSLawrence Tangoperation.name & string & The human readable name, if available, of the bus operation that caused the error.\\
850*079d581eSLawrence Tang\hline
851*079d581eSLawrence Tanglevel & int & The affinity level that the bus error occurred at.\\
852*079d581eSLawrence Tang\hline
853*079d581eSLawrence TangprocessorContextCorrupt & boolean & Whether the processor context may have been corrupted.\\
854*079d581eSLawrence Tang\hline
855*079d581eSLawrence Tangcorrected & boolean & Whether the error was corrected.\\
856*079d581eSLawrence Tang\hline
857*079d581eSLawrence TangprecisePC & boolean & Whether the program counter is directly associated with the error.\\
858*079d581eSLawrence Tang\hline
859*079d581eSLawrence TangrestartablePC & boolean & Whether program execution can be restarted reliably at the program counter associated with the error.\\
860*079d581eSLawrence Tang\hline
861*079d581eSLawrence TangtimedOut & boolean & Whether the request timed out.\\
862*079d581eSLawrence Tang\hline
863*079d581eSLawrence TangparticipationType.value & uint64 & The raw value of the type of participation that occurred in the bus error.\\
864*079d581eSLawrence TangparticipationType.name & string & The human readable name, if available, of the type of participation that occurred in the bus error.\\
865*079d581eSLawrence Tang\hline
866*079d581eSLawrence TangaddressSpace.value & uint64 & The raw value of the address space in which the bus error occurred.\\
867*079d581eSLawrence TangaddressSpace.name & string & The human readable name, if available, of the address space in which the bus error occurred.\\
868*079d581eSLawrence Tang\hline
869*079d581eSLawrence TangmemoryAttributes & int & Memory access attributes for this bus error as described in the ARM ARM.\\
870*079d581eSLawrence Tang\hline
871*079d581eSLawrence TangaccessMode.value & int & The raw value of the access mode of the bus request (secure/normal).\\
872*079d581eSLawrence TangaccessMode.name & string & The human readable name, if available, of the access mode of the bus request (secure/normal).\\
873*079d581eSLawrence Tang\jsontableend{ARM Processor Error Info Bus Information structure field table.}
874*079d581eSLawrence Tang
875*079d581eSLawrence Tang% ARM Processor Error Info Error Information (Bus) validation structure
876*079d581eSLawrence Tang\subsection{ARM Processor Error Info Bus Validation Structure}
877*079d581eSLawrence Tang\label{subsection:armprocessorerrorinfobusvalidationstructure}
878*079d581eSLawrence TangThis structure describes valid fields in a single ARM Processor Error Info Cache/TLB Information structure (\ref{subsection:armprocessorerrorinfoerrorinformationbusstructure}), as a set of boolean fields.
879*079d581eSLawrence Tang\jsontable{table:armprocessorerrorinfobusvalidationstructure}
880*079d581eSLawrence TangtransactionTypeValid & boolean & Whether the "transactionType" field in the ARM Processor Info Bus Information structure (\ref{subsection:armprocessorerrorinfoerrorinformationbusstructure}) is valid.\\
881*079d581eSLawrence Tang\hline
882*079d581eSLawrence TangoperationValid & boolean & Whether the "operation" field in the ARM Processor Info Bus Information structure (\ref{subsection:armprocessorerrorinfoerrorinformationbusstructure}) is valid.\\
883*079d581eSLawrence Tang\hline
884*079d581eSLawrence TanglevelValid & boolean & Whether the "level" field in the ARM Processor Info Bus Information structure (\ref{subsection:armprocessorerrorinfoerrorinformationbusstructure}) is valid.\\
885*079d581eSLawrence Tang\hline
886*079d581eSLawrence TangprocessorContextCorruptValid & boolean & Whether the "processorContextCorrupt" field in the ARM Processor Info Bus Information structure (\ref{subsection:armprocessorerrorinfoerrorinformationbusstructure}) is valid.\\
887*079d581eSLawrence Tang\hline
888*079d581eSLawrence TangcorrectedValid & boolean & Whether the "corrected" field in the ARM Processor Info Bus Information structure (\ref{subsection:armprocessorerrorinfoerrorinformationbusstructure}) is valid.\\
889*079d581eSLawrence Tang\hline
890*079d581eSLawrence TangprecisePCValid & boolean & Whether the "precisePC" field in the ARM Processor Info Bus Information structure (\ref{subsection:armprocessorerrorinfoerrorinformationbusstructure}) is valid.\\
891*079d581eSLawrence Tang\hline
892*079d581eSLawrence TangrestartablePCValid & boolean & Whether the "restartablePC" field in the ARM Processor Info Bus Information structure (\ref{subsection:armprocessorerrorinfoerrorinformationbusstructure}) is valid.\\
893*079d581eSLawrence Tang\hline
894*079d581eSLawrence TangparticipationTypeValid & boolean & Whether the "participationType" field in the ARM Processor Info Bus Information structure (\ref{subsection:armprocessorerrorinfoerrorinformationbusstructure}) is valid.\\
895*079d581eSLawrence Tang\hline
896*079d581eSLawrence TangtimedOutValid & boolean & Whether the "timedOut" field in the ARM Processor Info Bus Information structure (\ref{subsection:armprocessorerrorinfoerrorinformationbusstructure}) is valid.\\
897*079d581eSLawrence Tang\hline
898*079d581eSLawrence TangaddressSpaceValid & boolean & Whether the "addressSpace" field in the ARM Processor Info Bus Information structure (\ref{subsection:armprocessorerrorinfoerrorinformationbusstructure}) is valid.\\
899*079d581eSLawrence Tang\hline
900*079d581eSLawrence TangmemoryAttributesValid & boolean & Whether the "memoryAttributes" field in the ARM Processor Info Bus Information structure (\ref{subsection:armprocessorerrorinfoerrorinformationbusstructure}) is valid.\\
901*079d581eSLawrence Tang\hline
902*079d581eSLawrence TangaccessModeValid & boolean & Whether the "accessMode" field in the ARM Processor Info Bus Information structure (\ref{subsection:armprocessorerrorinfoerrorinformationbusstructure}) is valid.\\
903*079d581eSLawrence Tang\jsontableend{ARM Processor Error Info Bus validation structure field table.}
904*079d581eSLawrence Tang
905*079d581eSLawrence Tang% ARM Processor Context Info structure
906*079d581eSLawrence Tang\subsection{ARM Processor Context Info Structure}
907*079d581eSLawrence Tang\label{subsection:armprocessorcontextinfostructure}
908*079d581eSLawrence TangThis structure describes a single ARM Processor Context Info structure, as part of a whole ARM Processor Error structure (\ref{section:armprocessorerrorsection}).
909*079d581eSLawrence Tang\jsontable{table:armprocessorcontextinfostructure}
910*079d581eSLawrence TangregisterContextType.value & uint64 & The raw value of the type of processor context state being reported.\\
911*079d581eSLawrence TangregisterContextType.name & string & The human readable name, if available, of the type of processor context state being reported.\\
912*079d581eSLawrence Tang\hline
913*079d581eSLawrence TangregisterArraySize & uint64 & The size of the attached register array, in bytes.\\
914*079d581eSLawrence Tang\hline
915*079d581eSLawrence TangregisterArray & object & The attached register array, with registers encoded as object fields. Structured as shown in one of subsections \ref{subsection:armaarch32gprstructure}, \ref{subsection:armaarch32el1contextregistersstructure}, \ref{subsection:armaarch32el2contextregistersstructure}, \ref{subsection:armaarch32secureregistersstructure}, \ref{subsection:armaarch64gprstructure}, \ref{subsection:armaarch64el1contextregistersstructure}, \ref{subsection:armaarch64el2contextregistersstructure}, \ref{subsection:armaarch64el3contextregistersstructure}, \ref{subsection:armmiscregistersstructure} or \ref{subsection:armunknownregistersstructure}. Type of structure depends on the \texttt{registerContextType.value} field.\\
916*079d581eSLawrence Tang\jsontableend{ARM Processor Context Info structure field table.}
917*079d581eSLawrence Tang
918*079d581eSLawrence Tang% ARM AARCH32 General Purpose Registers structure
919*079d581eSLawrence Tang\subsection{ARM AARCH32 General Purpose Registers Structure}
920*079d581eSLawrence Tang\label{subsection:armaarch32gprstructure}
921*079d581eSLawrence TangThis structure describes the register array for AARCH32 GPRs as part of an ARM Processor Context Info Structure (\ref{subsection:armprocessorcontextinfostructure}). This structure is included when the field \texttt{registerContextType.value} has the value 0.
922*079d581eSLawrence Tang\jsontable{table:armaarch32gprstructure}
923*079d581eSLawrence Tangr0 & uint64 & Register R0. \texttt{UINT32} value null extended to \texttt{UINT64}.\\
924*079d581eSLawrence Tang\hline
925*079d581eSLawrence Tangr1 & uint64 & Register R1. \texttt{UINT32} value null extended to \texttt{UINT64}.\\
926*079d581eSLawrence Tang\hline
927*079d581eSLawrence Tangr2 & uint64 & Register R2. \texttt{UINT32} value null extended to \texttt{UINT64}.\\
928*079d581eSLawrence Tang\hline
929*079d581eSLawrence Tangr3 & uint64 & Register R3. \texttt{UINT32} value null extended to \texttt{UINT64}.\\
930*079d581eSLawrence Tang\hline
931*079d581eSLawrence Tangr4 & uint64 & Register R4. \texttt{UINT32} value null extended to \texttt{UINT64}.\\
932*079d581eSLawrence Tang\hline
933*079d581eSLawrence Tangr5 & uint64 & Register R5. \texttt{UINT32} value null extended to \texttt{UINT64}.\\
934*079d581eSLawrence Tang\hline
935*079d581eSLawrence Tangr6 & uint64 & Register R6. \texttt{UINT32} value null extended to \texttt{UINT64}.\\
936*079d581eSLawrence Tang\hline
937*079d581eSLawrence Tangr7 & uint64 & Register R7. \texttt{UINT32} value null extended to \texttt{UINT64}.\\
938*079d581eSLawrence Tang\hline
939*079d581eSLawrence Tangr8 & uint64 & Register R8. \texttt{UINT32} value null extended to \texttt{UINT64}.\\
940*079d581eSLawrence Tang\hline
941*079d581eSLawrence Tangr9 & uint64 & Register R9. \texttt{UINT32} value null extended to \texttt{UINT64}.\\
942*079d581eSLawrence Tang\hline
943*079d581eSLawrence Tangr10 & uint64 & Register R10. \texttt{UINT32} value null extended to \texttt{UINT64}.\\
944*079d581eSLawrence Tang\hline
945*079d581eSLawrence Tangr11 & uint64 & Register R11. \texttt{UINT32} value null extended to \texttt{UINT64}.\\
946*079d581eSLawrence Tang\hline
947*079d581eSLawrence Tangr12 & uint64 & Register R12. \texttt{UINT32} value null extended to \texttt{UINT64}.\\
948*079d581eSLawrence Tang\hline
949*079d581eSLawrence Tangr13\_sp & uint64 & Register R13 (SP). \texttt{UINT32} value null extended to \texttt{UINT64}.\\
950*079d581eSLawrence Tang\hline
951*079d581eSLawrence Tangr14\_lr & uint64 & Register R14 (LR). \texttt{UINT32} value null extended to \texttt{UINT64}.\\
952*079d581eSLawrence Tang\hline
953*079d581eSLawrence Tangr15\_pc & uint64 & Register R15 (PC). \texttt{UINT32} value null extended to \texttt{UINT64}.\\
954*079d581eSLawrence Tang\jsontableend{ARM AARCH32 General Purpose Registers structure field table.}
955*079d581eSLawrence Tang
956*079d581eSLawrence Tang% ARM AARCH32 EL1 Context Registers structure
957*079d581eSLawrence Tang\subsection{ARM AARCH32 EL1 Context Registers Structure}
958*079d581eSLawrence Tang\label{subsection:armaarch32el1contextregistersstructure}
959*079d581eSLawrence TangThis structure describes the register array for AARCH32 EL1 context registers as part of an ARM Processor Context Info Structure (\ref{subsection:armprocessorcontextinfostructure}). This structure is included when the field \texttt{registerContextType.value} has the value 1.
960*079d581eSLawrence Tang\jsontable{table:armaarch32el1contextregistersstructure}
961*079d581eSLawrence Tangdfar & uint64 & Register DFAR. \texttt{UINT32} value null extended to \texttt{UINT64}.\\
962*079d581eSLawrence Tang\hline
963*079d581eSLawrence Tangdfsr & uint64 & Register DFSR. \texttt{UINT32} value null extended to \texttt{UINT64}.\\
964*079d581eSLawrence Tang\hline
965*079d581eSLawrence Tangifar & uint64 & Register IFAR. \texttt{UINT32} value null extended to \texttt{UINT64}.\\
966*079d581eSLawrence Tang\hline
967*079d581eSLawrence Tangisr & uint64 & Register ISR. \texttt{UINT32} value null extended to \texttt{UINT64}.\\
968*079d581eSLawrence Tang\hline
969*079d581eSLawrence Tangmair0 & uint64 & Register MAIR0. \texttt{UINT32} value null extended to \texttt{UINT64}.\\
970*079d581eSLawrence Tang\hline
971*079d581eSLawrence Tangmair1 & uint64 & Register MAIR1. \texttt{UINT32} value null extended to \texttt{UINT64}.\\
972*079d581eSLawrence Tang\hline
973*079d581eSLawrence Tangmidr & uint64 & Register MIDR. \texttt{UINT32} value null extended to \texttt{UINT64}.\\
974*079d581eSLawrence Tang\hline
975*079d581eSLawrence Tangmpidr & uint64 & Register MPIDR. \texttt{UINT32} value null extended to \texttt{UINT64}.\\
976*079d581eSLawrence Tang\hline
977*079d581eSLawrence Tangnmrr & uint64 & Register NMRR. \texttt{UINT32} value null extended to \texttt{UINT64}.\\
978*079d581eSLawrence Tang\hline
979*079d581eSLawrence Tangprrr & uint64 & Register PRRR. \texttt{UINT32} value null extended to \texttt{UINT64}.\\
980*079d581eSLawrence Tang\hline
981*079d581eSLawrence Tangsctlr\_ns & uint64 & Register SCTLR (NS). \texttt{UINT32} value null extended to \texttt{UINT64}.\\
982*079d581eSLawrence Tang\hline
983*079d581eSLawrence Tangspsr & uint64 & Register SPSR. \texttt{UINT32} value null extended to \texttt{UINT64}.\\
984*079d581eSLawrence Tang\hline
985*079d581eSLawrence Tangspsr\_abt & uint64 & Register SPSR (ABT). \texttt{UINT32} value null extended to \texttt{UINT64}.\\
986*079d581eSLawrence Tang\hline
987*079d581eSLawrence Tangspsr\_fiq & uint64 & Register SPSR (FIQ). \texttt{UINT32} value null extended to \texttt{UINT64}.\\
988*079d581eSLawrence Tang\hline
989*079d581eSLawrence Tangspsr\_irq & uint64 & Register SPSR (IRQ). \texttt{UINT32} value null extended to \texttt{UINT64}.\\
990*079d581eSLawrence Tang\hline
991*079d581eSLawrence Tangspsr\_svc & uint64 & Register SPSR (SVC). \texttt{UINT32} value null extended to \texttt{UINT64}.\\
992*079d581eSLawrence Tang\hline
993*079d581eSLawrence Tangspsr\_und & uint64 & Register SPSR (UND). \texttt{UINT32} value null extended to \texttt{UINT64}.\\
994*079d581eSLawrence Tang\hline
995*079d581eSLawrence Tangtpidrprw & uint64 & Register TPIDR (PRW). \texttt{UINT32} value null extended to \texttt{UINT64}.\\
996*079d581eSLawrence Tang\hline
997*079d581eSLawrence Tangtpidruro & uint64 & Register TPIDR (URO). \texttt{UINT32} value null extended to \texttt{UINT64}.\\
998*079d581eSLawrence Tang\hline
999*079d581eSLawrence Tangtpidrurw & uint64 & Register TPIDR (URW). \texttt{UINT32} value null extended to \texttt{UINT64}.\\
1000*079d581eSLawrence Tang\hline
1001*079d581eSLawrence Tangttbcr & uint64 & Register TTBCR. \texttt{UINT32} value null extended to \texttt{UINT64}.\\
1002*079d581eSLawrence Tang\hline
1003*079d581eSLawrence Tangttbr0 & uint64 & Register TTBR0. \texttt{UINT32} value null extended to \texttt{UINT64}.\\
1004*079d581eSLawrence Tang\hline
1005*079d581eSLawrence Tangttbr1 & uint64 & Register TTBR1. \texttt{UINT32} value null extended to \texttt{UINT64}.\\
1006*079d581eSLawrence Tang\hline
1007*079d581eSLawrence Tangdacr & uint64 & Register DACR. \texttt{UINT32} value null extended to \texttt{UINT64}.\\
1008*079d581eSLawrence Tang\jsontableend{ARM AARCH32 EL1 Context Registers structure field table.}
1009*079d581eSLawrence Tang
1010*079d581eSLawrence Tang% ARM AARCH32 EL2 Context Registers structure
1011*079d581eSLawrence Tang\subsection{ARM AARCH32 EL2 Context Registers Structure}
1012*079d581eSLawrence Tang\label{subsection:armaarch32el2contextregistersstructure}
1013*079d581eSLawrence TangThis structure describes the register array for AARCH32 EL2 context registers as part of an ARM Processor Context Info Structure (\ref{subsection:armprocessorcontextinfostructure}). This structure is included when the field \texttt{registerContextType.value} has the value 2.
1014*079d581eSLawrence Tang\jsontable{table:armaarch32el2contextregistersstructure}
1015*079d581eSLawrence Tangelr\_hyp & uint64 & Register ELR\_HYP. \texttt{UINT32} value null extended to \texttt{UINT64}.\\
1016*079d581eSLawrence Tang\hline
1017*079d581eSLawrence Tanghamair0 & uint64 & Register HAMAIR0. \texttt{UINT32} value null extended to \texttt{UINT64}.\\
1018*079d581eSLawrence Tang\hline
1019*079d581eSLawrence Tanghamair1 & uint64 & Register HAMAIR1. \texttt{UINT32} value null extended to \texttt{UINT64}.\\
1020*079d581eSLawrence Tang\hline
1021*079d581eSLawrence Tanghcr & uint64 & Register HCR. \texttt{UINT32} value null extended to \texttt{UINT64}.\\
1022*079d581eSLawrence Tang\hline
1023*079d581eSLawrence Tanghcr2 & uint64 & Register HCR2. \texttt{UINT32} value null extended to \texttt{UINT64}.\\
1024*079d581eSLawrence Tang\hline
1025*079d581eSLawrence Tanghdfar & uint64 & Register HDFAR. \texttt{UINT32} value null extended to \texttt{UINT64}.\\
1026*079d581eSLawrence Tang\hline
1027*079d581eSLawrence Tanghifar & uint64 & Register HIFAR. \texttt{UINT32} value null extended to \texttt{UINT64}.\\
1028*079d581eSLawrence Tang\hline
1029*079d581eSLawrence Tanghpfar & uint64 & Register HPFAR. \texttt{UINT32} value null extended to \texttt{UINT64}.\\
1030*079d581eSLawrence Tang\hline
1031*079d581eSLawrence Tanghsr & uint64 & Register HSR. \texttt{UINT32} value null extended to \texttt{UINT64}.\\
1032*079d581eSLawrence Tang\hline
1033*079d581eSLawrence Tanghtcr & uint64 & Register HTCR. \texttt{UINT32} value null extended to \texttt{UINT64}.\\
1034*079d581eSLawrence Tang\hline
1035*079d581eSLawrence Tanghtpidr & uint64 & Register HTPIDR. \texttt{UINT32} value null extended to \texttt{UINT64}.\\
1036*079d581eSLawrence Tang\hline
1037*079d581eSLawrence Tanghttbr & uint64 & Register HTTBR. \texttt{UINT32} value null extended to \texttt{UINT64}.\\
1038*079d581eSLawrence Tang\hline
1039*079d581eSLawrence Tangspsr\_hyp & uint64 & Register SPSR (HYP). \texttt{UINT32} value null extended to \texttt{UINT64}.\\
1040*079d581eSLawrence Tang\hline
1041*079d581eSLawrence Tangvtcr & uint64 & Register VTCR. \texttt{UINT32} value null extended to \texttt{UINT64}.\\
1042*079d581eSLawrence Tang\hline
1043*079d581eSLawrence Tangvttbr & uint64 & Register VTTBR. \texttt{UINT32} value null extended to \texttt{UINT64}.\\
1044*079d581eSLawrence Tang\hline
1045*079d581eSLawrence Tangdacr32\_el2 & uint64 & Register DACR32 (EL2). \texttt{UINT32} value null extended to \texttt{UINT64}.\\
1046*079d581eSLawrence Tang\hline
1047*079d581eSLawrence Tang\jsontableend{ARM AARCH32 EL2 Context Registers structure field table.}
1048*079d581eSLawrence Tang
1049*079d581eSLawrence Tang% ARM AARCH32 Secure Registers structure
1050*079d581eSLawrence Tang\subsection{ARM AARCH32 Secure Registers Structure}
1051*079d581eSLawrence Tang\label{subsection:armaarch32secureregistersstructure}
1052*079d581eSLawrence TangThis structure describes the register array for AARCH32 secure registers as part of an ARM Processor Context Info Structure (\ref{subsection:armprocessorcontextinfostructure}). This structure is included when the field \texttt{registerContextType.value} has the value 3.
1053*079d581eSLawrence Tang\jsontable{table:armaarch32secureregistersstructure}
1054*079d581eSLawrence Tangsctlr\_s & uint64 & Register SCTLR\_S. \texttt{UINT32} value null extended to \texttt{UINT64}.\\
1055*079d581eSLawrence Tang\hline
1056*079d581eSLawrence Tangspsr\_mon & uint64 & Register SPSR (MON). \texttt{UINT32} value null extended to \texttt{UINT64}.\\
1057*079d581eSLawrence Tang\jsontableend{ARM AARCH32 Secure Registers structure field table.}
1058*079d581eSLawrence Tang
1059*079d581eSLawrence Tang% ARM AARCH64 General Purpose Registers structure
1060*079d581eSLawrence Tang\subsection{ARM AARCH64 General Purpose Registers Structure}
1061*079d581eSLawrence Tang\label{subsection:armaarch64gprstructure}
1062*079d581eSLawrence TangThis structure describes the register array for AARCH64 GPRs as part of an ARM Processor Context Info Structure (\ref{subsection:armprocessorcontextinfostructure}). This structure is included when the field \texttt{registerContextType.value} has the value 4.
1063*079d581eSLawrence Tang\jsontable{table:armaarch64gprstructure}
1064*079d581eSLawrence Tangx0 & uint64 & Register X0.\\
1065*079d581eSLawrence Tang\hline
1066*079d581eSLawrence Tangx1 & uint64 & Register X1.\\
1067*079d581eSLawrence Tang\hline
1068*079d581eSLawrence Tangx2 & uint64 & Register X2.\\
1069*079d581eSLawrence Tang\hline
1070*079d581eSLawrence Tangx3 & uint64 & Register X3.\\
1071*079d581eSLawrence Tang\hline
1072*079d581eSLawrence Tangx4 & uint64 & Register X4.\\
1073*079d581eSLawrence Tang\hline
1074*079d581eSLawrence Tangx5 & uint64 & Register X5.\\
1075*079d581eSLawrence Tang\hline
1076*079d581eSLawrence Tangx6 & uint64 & Register X6.\\
1077*079d581eSLawrence Tang\hline
1078*079d581eSLawrence Tangx7 & uint64 & Register X7.\\
1079*079d581eSLawrence Tang\hline
1080*079d581eSLawrence Tangx8 & uint64 & Register X8.\\
1081*079d581eSLawrence Tang\hline
1082*079d581eSLawrence Tangx9 & uint64 & Register X9.\\
1083*079d581eSLawrence Tang\hline
1084*079d581eSLawrence Tangx10 & uint64 & Register X10.\\
1085*079d581eSLawrence Tang\hline
1086*079d581eSLawrence Tangx11 & uint64 & Register X11.\\
1087*079d581eSLawrence Tang\hline
1088*079d581eSLawrence Tangx12 & uint64 & Register X12.\\
1089*079d581eSLawrence Tang\hline
1090*079d581eSLawrence Tangx13 & uint64 & Register X13.\\
1091*079d581eSLawrence Tang\hline
1092*079d581eSLawrence Tangx14 & uint64 & Register X14.\\
1093*079d581eSLawrence Tang\hline
1094*079d581eSLawrence Tangx15 & uint64 & Register X15.\\
1095*079d581eSLawrence Tang\hline
1096*079d581eSLawrence Tangx16 & uint64 & Register X16.\\
1097*079d581eSLawrence Tang\hline
1098*079d581eSLawrence Tangx17 & uint64 & Register X17.\\
1099*079d581eSLawrence Tang\hline
1100*079d581eSLawrence Tangx18 & uint64 & Register X18.\\
1101*079d581eSLawrence Tang\hline
1102*079d581eSLawrence Tangx19 & uint64 & Register X19.\\
1103*079d581eSLawrence Tang\hline
1104*079d581eSLawrence Tangx20 & uint64 & Register X20.\\
1105*079d581eSLawrence Tang\hline
1106*079d581eSLawrence Tangx21 & uint64 & Register X21.\\
1107*079d581eSLawrence Tang\hline
1108*079d581eSLawrence Tangx22 & uint64 & Register X22.\\
1109*079d581eSLawrence Tang\hline
1110*079d581eSLawrence Tangx23 & uint64 & Register X23.\\
1111*079d581eSLawrence Tang\hline
1112*079d581eSLawrence Tangx24 & uint64 & Register X24.\\
1113*079d581eSLawrence Tang\hline
1114*079d581eSLawrence Tangx25 & uint64 & Register X25.\\
1115*079d581eSLawrence Tang\hline
1116*079d581eSLawrence Tangx26 & uint64 & Register X26.\\
1117*079d581eSLawrence Tang\hline
1118*079d581eSLawrence Tangx27 & uint64 & Register X27.\\
1119*079d581eSLawrence Tang\hline
1120*079d581eSLawrence Tangx28 & uint64 & Register X28.\\
1121*079d581eSLawrence Tang\hline
1122*079d581eSLawrence Tangx29 & uint64 & Register X29.\\
1123*079d581eSLawrence Tang\hline
1124*079d581eSLawrence Tangx30 & uint64 & Register X30.\\
1125*079d581eSLawrence Tang\hline
1126*079d581eSLawrence Tangsp & uint64 & Register SP.\\
1127*079d581eSLawrence Tang\jsontableend{ARM AARCH64 General Purpose Registers structure field table.}
1128*079d581eSLawrence Tang
1129*079d581eSLawrence Tang% ARM AARCH64 EL1 Context Registers structure
1130*079d581eSLawrence Tang\subsection{ARM AARCH64 EL1 Context Registers Structure}
1131*079d581eSLawrence Tang\label{subsection:armaarch64el1contextregistersstructure}
1132*079d581eSLawrence TangThis structure describes the register array for AARCH64 EL1 context registers as part of an ARM Processor Context Info Structure (\ref{subsection:armprocessorcontextinfostructure}). This structure is included when the field \texttt{registerContextType.value} has the value 5.
1133*079d581eSLawrence Tang\jsontable{table:armaarch64el1contextregistersstructure}
1134*079d581eSLawrence Tangelr\_el1 & uint64 & Register ELR (EL1).\\
1135*079d581eSLawrence Tang\hline
1136*079d581eSLawrence Tangesr\_el1 & uint64 & Register ESR (EL1).\\
1137*079d581eSLawrence Tang\hline
1138*079d581eSLawrence Tangfar\_el1 & uint64 & Register FAR (EL1).\\
1139*079d581eSLawrence Tang\hline
1140*079d581eSLawrence Tangisr\_el1 & uint64 & Register ISR (EL1).\\
1141*079d581eSLawrence Tang\hline
1142*079d581eSLawrence Tangmair\_el1 & uint64 & Register MAIR (EL1).\\
1143*079d581eSLawrence Tang\hline
1144*079d581eSLawrence Tangmidr\_el1 & uint64 & Register MIDR (EL1).\\
1145*079d581eSLawrence Tang\hline
1146*079d581eSLawrence Tangmpidr\_el1 & uint64 & Register MPIDR (EL1).\\
1147*079d581eSLawrence Tang\hline
1148*079d581eSLawrence Tangsctlr\_el1 & uint64 & Register SCTLR (EL1).\\
1149*079d581eSLawrence Tang\hline
1150*079d581eSLawrence Tangsp\_el0 & uint64 & Register SP (EL0).\\
1151*079d581eSLawrence Tang\hline
1152*079d581eSLawrence Tangsp\_el1 & uint64 & Register SP (EL1).\\
1153*079d581eSLawrence Tang\hline
1154*079d581eSLawrence Tangspsr\_el1 & uint64 & Register SPSR (EL1).\\
1155*079d581eSLawrence Tang\hline
1156*079d581eSLawrence Tangtcr\_el1 & uint64 & Register TCR (EL1).\\
1157*079d581eSLawrence Tang\hline
1158*079d581eSLawrence Tangtpidr\_el0 & uint64 & Register TPIDR (EL0).\\
1159*079d581eSLawrence Tang\hline
1160*079d581eSLawrence Tangtpidr\_el1 & uint64 & Register TPIDR (EL1).\\
1161*079d581eSLawrence Tang\hline
1162*079d581eSLawrence Tangtpidrro\_el0 & uint64 & Register TPIDRRO (EL0).\\
1163*079d581eSLawrence Tang\hline
1164*079d581eSLawrence Tangttbr0\_el1 & uint64 & Register TTBR0 (EL1).\\
1165*079d581eSLawrence Tang\hline
1166*079d581eSLawrence Tangttbr1\_el1 & uint64 & Register TTBR1 (EL1).\\
1167*079d581eSLawrence Tang\jsontableend{ARM AARCH64 EL1 Context Registers structure field table.}
1168*079d581eSLawrence Tang
1169*079d581eSLawrence Tang% ARM AARCH64 EL2 Context Registers structure
1170*079d581eSLawrence Tang\subsection{ARM AARCH64 EL2 Context Registers Structure}
1171*079d581eSLawrence Tang\label{subsection:armaarch64el2contextregistersstructure}
1172*079d581eSLawrence TangThis structure describes the register array for AARCH64 EL2 context registers as part of an ARM Processor Context Info Structure (\ref{subsection:armprocessorcontextinfostructure}). This structure is included when the field \texttt{registerContextType.value} has the value 6.
1173*079d581eSLawrence Tang\jsontable{table:armaarch64el2contextregistersstructure}
1174*079d581eSLawrence Tangelr\_el2 & uint64 & Register ELR (EL2).\\
1175*079d581eSLawrence Tang\hline
1176*079d581eSLawrence Tangesr\_el2 & uint64 & Register ESR (EL2).\\
1177*079d581eSLawrence Tang\hline
1178*079d581eSLawrence Tangfar\_el2 & uint64 & Register FAR (EL2).\\
1179*079d581eSLawrence Tang\hline
1180*079d581eSLawrence Tanghacr\_el2 & uint64 & Register HACR (EL2).\\
1181*079d581eSLawrence Tang\hline
1182*079d581eSLawrence Tanghcr\_el2 & uint64 & Register HCR (EL2).\\
1183*079d581eSLawrence Tang\hline
1184*079d581eSLawrence Tanghpfar\_el2 & uint64 & Register HPFAR (EL2).\\
1185*079d581eSLawrence Tang\hline
1186*079d581eSLawrence Tangmair\_el2 & uint64 & Register MAIR (EL2).\\
1187*079d581eSLawrence Tang\hline
1188*079d581eSLawrence Tangsctlr\_el2 & uint64 & Register SCTLR (EL2).\\
1189*079d581eSLawrence Tang\hline
1190*079d581eSLawrence Tangsp\_el2 & uint64 & Register SP (EL2).\\
1191*079d581eSLawrence Tang\hline
1192*079d581eSLawrence Tangspsr\_el2 & uint64 & Register SPSR (EL2).\\
1193*079d581eSLawrence Tang\hline
1194*079d581eSLawrence Tangtcr\_el2 & uint64 & Register TCR (EL2).\\
1195*079d581eSLawrence Tang\hline
1196*079d581eSLawrence Tangtpidr\_el2 & uint64 & Register TPIDR (EL2).\\
1197*079d581eSLawrence Tang\hline
1198*079d581eSLawrence Tangttbr0\_el2 & uint64 & Register TTBR0 (EL2).\\
1199*079d581eSLawrence Tang\hline
1200*079d581eSLawrence Tangvtcr\_el2 & uint64 & Register VTCR (EL2).\\
1201*079d581eSLawrence Tang\hline
1202*079d581eSLawrence Tangvttbr\_el2 & uint64 & Register VTTBR (EL2).\\
1203*079d581eSLawrence Tang\jsontableend{ARM AARCH64 EL2 Context Registers structure field table.}
1204*079d581eSLawrence Tang
1205*079d581eSLawrence Tang% ARM AARCH64 EL3 Context Registers structure
1206*079d581eSLawrence Tang\subsection{ARM AARCH64 EL3 Context Registers Structure}
1207*079d581eSLawrence Tang\label{subsection:armaarch64el3contextregistersstructure}
1208*079d581eSLawrence TangThis structure describes the register array for AARCH64 EL3 context registers as part of an ARM Processor Context Info Structure (\ref{subsection:armprocessorcontextinfostructure}). This structure is included when the field \texttt{registerContextType.value} has the value 7.
1209*079d581eSLawrence Tang\jsontable{table:armaarch64el3contextregistersstructure}
1210*079d581eSLawrence Tangelr\_el3 & uint64 & Register ELR (EL3).\\
1211*079d581eSLawrence Tang\hline
1212*079d581eSLawrence Tangesr\_el3 & uint64 & Register ESR (EL3).\\
1213*079d581eSLawrence Tang\hline
1214*079d581eSLawrence Tangfar\_el3 & uint64 & Register FAR (EL3).\\
1215*079d581eSLawrence Tang\hline
1216*079d581eSLawrence Tangmair\_el3 & uint64 & Register MAIR (EL3).\\
1217*079d581eSLawrence Tang\hline
1218*079d581eSLawrence Tangsctlr\_el3 & uint64 & Register SCTLR (EL3).\\
1219*079d581eSLawrence Tang\hline
1220*079d581eSLawrence Tangsp\_el3 & uint64 & Register SP (EL3).\\
1221*079d581eSLawrence Tang\hline
1222*079d581eSLawrence Tangspsr\_el3 & uint64 & Register SPSR (EL3).\\
1223*079d581eSLawrence Tang\hline
1224*079d581eSLawrence Tangtcr\_el3 & uint64 & Register TCR (EL3).\\
1225*079d581eSLawrence Tang\hline
1226*079d581eSLawrence Tangtpidr\_el3 & uint64 & Register TPIDR (EL3).\\
1227*079d581eSLawrence Tang\hline
1228*079d581eSLawrence Tangttbr0\_el3 & uint64 & Register TTBR0 (EL3).\\
1229*079d581eSLawrence Tang\jsontableend{ARM AARCH64 EL3 Context Registers structure field table.}
1230*079d581eSLawrence Tang
1231*079d581eSLawrence Tang% ARM AARCH64 Miscellaneous Registers structure
1232*079d581eSLawrence Tang\subsection{ARM AARCH64 Miscellaneous Registers Structure}
1233*079d581eSLawrence Tang\label{subsection:armmiscregistersstructure}
1234*079d581eSLawrence TangThis structure describes the register array for miscellaneous ARM registers as part of an ARM Processor Context Info Structure (\ref{subsection:armprocessorcontextinfostructure}). This structure is included when the field \texttt{registerContextType.value} has the value 8.
1235*079d581eSLawrence Tang\jsontable{table:armmiscregistersstructure}
1236*079d581eSLawrence TangmrsEncoding.op2 & uint64 & MRS Encoding OP2.\\
1237*079d581eSLawrence Tang\hline
1238*079d581eSLawrence TangmrsEncoding.crm & uint64 & MRS Encoding CRm.\\
1239*079d581eSLawrence Tang\hline
1240*079d581eSLawrence TangmrsEncoding.crn & uint64 & MRS Encoding CRn.\\
1241*079d581eSLawrence Tang\hline
1242*079d581eSLawrence TangmrsEncoding.op1 & uint64 & MRS Encoding Op1.\\
1243*079d581eSLawrence Tang\hline
1244*079d581eSLawrence TangmrsEncoding.o0 & uint64 & MRS Encoding O0.\\
1245*079d581eSLawrence Tang\hline
1246*079d581eSLawrence Tangvalue & uint64 & Value of the single register.\\
1247*079d581eSLawrence Tang\jsontableend{ARM AARCH64 Miscellaneous Registers structure field table.}
1248*079d581eSLawrence Tang
1249*079d581eSLawrence Tang% ARM AARCH64 Unknown Registers structure
1250*079d581eSLawrence Tang\subsection{ARM AARCH64 Unknown Registers Structure}
1251*079d581eSLawrence Tang\label{subsection:armunknownregistersstructure}
1252*079d581eSLawrence TangThis structure describes the register array for unknown ARM registers as part of an ARM Processor Context Info Structure (\ref{subsection:armprocessorcontextinfostructure}). This structure is included when the field \texttt{registerContextType.value} has any value other than 0-8 (inclusive).
1253*079d581eSLawrence Tang\jsontable{table:armunknownregistersstructure}
1254*079d581eSLawrence Tangdata & string & A base64 representation of the unknown binary register array data.\\
1255*079d581eSLawrence Tang\jsontableend{ARM AARCH64 Unknown Registers structure field table.}
1256*079d581eSLawrence Tang
1257*079d581eSLawrence Tang% Memory error section.
1258*079d581eSLawrence Tang\section{Memory Error Section}
1259*079d581eSLawrence Tang\label{section:memoryerrorsection}
1260*079d581eSLawrence TangThis section describes the JSON format for a single Memory Error Section from a CPER record. The GUID used for Memory Error Sections is \texttt{\{ 0xa5bc1114, 0x6f64, 0x4ede, \{ 0xb8, 0x63, 0x3e, 0x83, 0xed, 0x7c, 0x83, 0xb1 \}\}}.
1261*079d581eSLawrence Tang\jsontable{table:memoryerrorsection}
1262*079d581eSLawrence TangvalidationBits & object & A Memory Error Validation structure, as described in Subsection \ref{subsection:memoryerrorvalidationstructure}.\\
1263*079d581eSLawrence Tang\hline
1264*079d581eSLawrence TangerrorStatus & object & A CPER Generic Error Status structure, as described in Subsection \ref{subsection:genericerrorstatusstructure}.\\
1265*079d581eSLawrence Tang\hline
1266*079d581eSLawrence Tangbank & object & Structure as described in one of Subsection \ref{subsection:memoryerrorstandardbankaddressstructure} or Subsection \ref{subsection:memoryerroraddressgroupbankaddressstructure}. Selected structure depends on the \texttt{validationBits.bankValid} field.\\
1267*079d581eSLawrence Tang\hline
1268*079d581eSLawrence TangmemoryErrorType.value & uint64 & The raw value of the memory error type.\\
1269*079d581eSLawrence TangmemoryErrorType.name & string & The human readable name, if available, of the memory error type.\\
1270*079d581eSLawrence Tang\hline
1271*079d581eSLawrence Tangextended.rowBit16 & boolean & Bit 16 of the row number of the memory error location.\\
1272*079d581eSLawrence Tangextended.rowBit17 & boolean & Bit 17 of the row number of the memory error location.\\
1273*079d581eSLawrence Tangextended.chipIdentification & int & The ID of the related chip.\\
1274*079d581eSLawrence Tang\hline
1275*079d581eSLawrence TangphysicalAddress & uint64 & The physical address at which the error occurred.\\
1276*079d581eSLawrence Tang\hline
1277*079d581eSLawrence TangphysicalAddressMask & uint64 & Defines the valid address bits in the \texttt{physicalAddress} field.\\
1278*079d581eSLawrence Tang\hline
1279*079d581eSLawrence Tangnode & uint64 & Identifies the node containing the memory error, if in a multi-node system.\\
1280*079d581eSLawrence Tang\hline
1281*079d581eSLawrence Tangcard & uint64 & The card number of the memory error location.\\
1282*079d581eSLawrence Tang\hline
1283*079d581eSLawrence TangmoduleRank & uint64 & The module or rank number of the offending memory error location.\\
1284*079d581eSLawrence Tang\hline
1285*079d581eSLawrence Tangdevice & uint64 & The device number of the memory associated with the error.\\
1286*079d581eSLawrence Tang\hline
1287*079d581eSLawrence Tangrow & uint64 & The first 16 bits of the row number of the memory location.\\
1288*079d581eSLawrence Tang\hline
1289*079d581eSLawrence Tangcolumn & uint64 & The column number of the memory error location.\\
1290*079d581eSLawrence Tang\hline
1291*079d581eSLawrence TangbitPosition & uint64 & The bit position at which the error occurred.\\
1292*079d581eSLawrence Tang\hline
1293*079d581eSLawrence TangrequestorID & uint64 & Hardware address of the device that initiated the errored transaction.\\
1294*079d581eSLawrence Tang\hline
1295*079d581eSLawrence TangresponderID & uint64 & Hardware address of the device that responded to the transaction.\\
1296*079d581eSLawrence Tang\hline
1297*079d581eSLawrence TangtargetID & uint64 & Hardware address of the intended target of the transaction.\\
1298*079d581eSLawrence Tang\hline
1299*079d581eSLawrence TangrankNumber & uint64 & The rank number of the memory error location.\\
1300*079d581eSLawrence Tang\hline
1301*079d581eSLawrence TangcardSmbiosHandle & uint64 & The SMBIOS handle for the memory card's Type 16 Memory Array Structure.\\
1302*079d581eSLawrence Tang\hline
1303*079d581eSLawrence TangmoduleSmbiosHandle & uint64 & The SMBIOS handle for the memory module's Type 17 Memory Device Structure.\\
1304*079d581eSLawrence Tang\jsontableend{Memory Error structure field table.}
1305*079d581eSLawrence Tang
1306*079d581eSLawrence Tang% Memory error validation structure.
1307*079d581eSLawrence Tang\subsection{Memory Error Validation Structure}
1308*079d581eSLawrence Tang\label{subsection:memoryerrorvalidationstructure}
1309*079d581eSLawrence TangThis structure describes whether fields in a single Memory Error (\ref{section:memoryerrorsection}) are valid, using boolean fields.
1310*079d581eSLawrence Tang\jsontable{table:memoryerrorvalidationstructure}
1311*079d581eSLawrence TangerrorStatusValid & boolean & Whether the "errorStatus" field of a Memory Error (\ref{section:memoryerrorsection}) is valid.\\
1312*079d581eSLawrence Tang\hline
1313*079d581eSLawrence TangphysicalAddressValid & boolean & Whether the "physicalAddress" field of a Memory Error (\ref{section:memoryerrorsection}) is valid.\\
1314*079d581eSLawrence Tang\hline
1315*079d581eSLawrence TangphysicalAddressMaskValid & boolean & Whether the "physicalAddressMask" field of a Memory Error (\ref{section:memoryerrorsection}) is valid.\\
1316*079d581eSLawrence Tang\hline
1317*079d581eSLawrence TangnodeValid & boolean & Whether the "node" field of a Memory Error (\ref{section:memoryerrorsection}) is valid.\\
1318*079d581eSLawrence Tang\hline
1319*079d581eSLawrence TangcardValid & boolean & Whether the "card" field of a Memory Error (\ref{section:memoryerrorsection}) is valid.\\
1320*079d581eSLawrence Tang\hline
1321*079d581eSLawrence TangmoduleValid & boolean & Whether the "module" field of a Memory Error (\ref{section:memoryerrorsection}) is valid.\\
1322*079d581eSLawrence Tang\hline
1323*079d581eSLawrence TangbankValid & boolean & Whether the "bank.value" field of a Memory Error (\ref{section:memoryerrorsection}) is valid. When the bank is addressed by group/address, refer to \texttt{bankGroupValid} and \texttt{bankAddressValid} instead.\\
1324*079d581eSLawrence Tang\hline
1325*079d581eSLawrence TangdeviceValid & boolean & Whether the "device" field of a Memory Error (\ref{section:memoryerrorsection}) is valid.\\
1326*079d581eSLawrence Tang\hline
1327*079d581eSLawrence TangrowValid & boolean & Whether the "row" field of a Memory Error (\ref{section:memoryerrorsection}) is valid.\\
1328*079d581eSLawrence Tang\hline
1329*079d581eSLawrence TangmemoryPlatformTargetValid & boolean & Whether the memory platform target of a Memory Error (\ref{section:memoryerrorsection}) is valid.\\
1330*079d581eSLawrence Tang\hline
1331*079d581eSLawrence TangmemoryErrorTypeValid & boolean & Whether the "memoryErrorType" field of a Memory Error (\ref{section:memoryerrorsection}) is valid.\\
1332*079d581eSLawrence Tang\hline
1333*079d581eSLawrence TangrankNumberValid & boolean & Whether the "rankNumber" field of a Memory Error (\ref{section:memoryerrorsection}) is valid.\\
1334*079d581eSLawrence Tang\hline
1335*079d581eSLawrence TangcardHandleValid & boolean & Whether the "cardSmbiosHandle" field of a Memory Error (\ref{section:memoryerrorsection}) is valid.\\
1336*079d581eSLawrence Tang\hline
1337*079d581eSLawrence TangmoduleHandleValid & boolean & Whether the "moduleSmbiosHandle" field of a Memory Error (\ref{section:memoryerrorsection}) is valid.\\
1338*079d581eSLawrence Tang\hline
1339*079d581eSLawrence TangextendedRowBitsValid & boolean & Whether the "extended.rowBit16" and "extended.rowBit17" field of a Memory Error (\ref{section:memoryerrorsection}) is valid.\\
1340*079d581eSLawrence Tang\hline
1341*079d581eSLawrence TangbankGroupValid & boolean & Whether the "bank.group" field of a Memory Error (\ref{section:memoryerrorsection}) is valid.\\
1342*079d581eSLawrence Tang\hline
1343*079d581eSLawrence TangbankAddressValid & boolean & Whether the "bank.address" field of a Memory Error (\ref{section:memoryerrorsection}) is valid.\\
1344*079d581eSLawrence Tang\hline
1345*079d581eSLawrence TangchipIdentificationValid & boolean & Whether the "extended.chipIdentification" field of a Memory Error (\ref{section:memoryerrorsection}) is valid.\\
1346*079d581eSLawrence Tang\jsontableend{Memory Error validation structure field table.}
1347*079d581eSLawrence Tang
1348*079d581eSLawrence Tang% Memory error normal bank addressing structure.
1349*079d581eSLawrence Tang\subsection{Memory Error Standard Bank Address Structure}
1350*079d581eSLawrence Tang\label{subsection:memoryerrorstandardbankaddressstructure}
1351*079d581eSLawrence TangThis structure describes a simple bank address for a Memory Error section (\ref{section:memoryerrorsection}). This structure is selected when the \texttt{bankValid} field in the corresponding Memory Error Validation Structure (\ref{subsection:memoryerrorvalidationstructure}) is set to "true".
1352*079d581eSLawrence Tang\jsontable{table:memoryerrorstandardbankaddressstructure}
1353*079d581eSLawrence Tangvalue & uint64 & The value of the bank address.\\
1354*079d581eSLawrence Tang\jsontableend{Memory Error Standard Bank Address structure field table.}
1355*079d581eSLawrence Tang
1356*079d581eSLawrence Tang% Memory error address/group bank addressing structure.
1357*079d581eSLawrence Tang\subsection{Memory Error Address/Group Bank Address Structure}
1358*079d581eSLawrence Tang\label{subsection:memoryerroraddressgroupbankaddressstructure}
1359*079d581eSLawrence TangThis structure describes an address/group bank address for a Memory Error section (\ref{section:memoryerrorsection}). This structure is selected when the \texttt{bankValid} field in the corresponding Memory Error Validation Structure (\ref{subsection:memoryerrorvalidationstructure}) is set to "false".
1360*079d581eSLawrence Tang\jsontable{table:memoryerroraddressgroupbankaddressstructure}
1361*079d581eSLawrence Tangaddress & uint64 & The address of the bank.\\
1362*079d581eSLawrence Tang\hline
1363*079d581eSLawrence Tanggroup & uint64 & The group of the bank.\\
1364*079d581eSLawrence Tang\jsontableend{Memory Error Address/Group Bank Address structure field table.}
1365*079d581eSLawrence Tang
1366*079d581eSLawrence Tang% Memory error 2 section.
1367*079d581eSLawrence Tang\section{Memory Error 2 Section}
1368*079d581eSLawrence Tang\label{section:memoryerror2section}
1369*079d581eSLawrence TangThis section describes the JSON format for a single Memory Error 2 Section from a CPER record. The GUID used for Memory Error 2 Sections is \texttt{\{ 0x61EC04FC, 0x48E6, 0xD813, \{ 0x25, 0xC9, 0x8D, 0xAA, 0x44, 0x75, 0x0B, 0x12 \}\}}.
1370*079d581eSLawrence Tang\jsontable{table:memoryerror2section}
1371*079d581eSLawrence TangvalidationBits & object & A Memory Error 2 Validation structure, as described in Subsection \ref{subsection:memoryerror2validationstructure}.\\
1372*079d581eSLawrence Tang\hline
1373*079d581eSLawrence TangerrorStatus & object & A CPER Generic Error Status structure, as described in Subsection \ref{subsection:genericerrorstatusstructure}.\\
1374*079d581eSLawrence Tang\hline
1375*079d581eSLawrence Tangbank & object & Structure as described in one of Subsection \ref{subsection:memoryerror2standardbankaddressstructure} or Subsection \ref{subsection:memoryerror2addressgroupbankaddressstructure}. Selected structure depends on the \texttt{validationBits.bankValid} field.\\
1376*079d581eSLawrence Tang\hline
1377*079d581eSLawrence TangmemoryErrorType.value & uint64 & The raw value of the memory error type.\\
1378*079d581eSLawrence TangmemoryErrorType.name & string & The human readable name, if available, of the memory error type.\\
1379*079d581eSLawrence Tang\hline
1380*079d581eSLawrence Tangstatus.value & int & The raw value of the memory error status.\\
1381*079d581eSLawrence Tangstatus.state & string & The human readable value, if available, of the memory error status (corrected/uncorrected).\\
1382*079d581eSLawrence Tang\hline
1383*079d581eSLawrence TangphysicalAddress & uint64 & The physical address at which the error occurred.\\
1384*079d581eSLawrence Tang\hline
1385*079d581eSLawrence TangphysicalAddressMask & uint64 & Defines the valid address bits in the \texttt{physicalAddress} field.\\
1386*079d581eSLawrence Tang\hline
1387*079d581eSLawrence Tangnode & uint64 & Identifies the node containing the memory error, if in a multi-node system.\\
1388*079d581eSLawrence Tang\hline
1389*079d581eSLawrence Tangcard & uint64 & The card number of the memory error location.\\
1390*079d581eSLawrence Tang\hline
1391*079d581eSLawrence Tangmodule & uint64 & The module of the offending memory error location.\\
1392*079d581eSLawrence Tang\hline
1393*079d581eSLawrence Tangdevice & uint64 & The device number of the memory associated with the error.\\
1394*079d581eSLawrence Tang\hline
1395*079d581eSLawrence Tangrow & uint64 & The first 16 bits of the row number of the memory location.\\
1396*079d581eSLawrence Tang\hline
1397*079d581eSLawrence Tangcolumn & uint64 & The column number of the memory error location.\\
1398*079d581eSLawrence Tang\hline
1399*079d581eSLawrence TangbitPosition & uint64 & The bit position at which the error occurred.\\
1400*079d581eSLawrence Tang\hline
1401*079d581eSLawrence Tangrank & uint64 & The rank number of the error location.\\
1402*079d581eSLawrence Tang\hline
1403*079d581eSLawrence TangchipID & uint64 & Chip identifier. Encoded field used to address the die in 3DS packages.\\
1404*079d581eSLawrence Tang\hline
1405*079d581eSLawrence TangrequestorID & uint64 & Hardware address of the device that initiated the errored transaction.\\
1406*079d581eSLawrence Tang\hline
1407*079d581eSLawrence TangresponderID & uint64 & Hardware address of the device that responded to the transaction.\\
1408*079d581eSLawrence Tang\hline
1409*079d581eSLawrence TangtargetID & uint64 & Hardware address of the intended target of the transaction.\\
1410*079d581eSLawrence Tang\hline
1411*079d581eSLawrence TangcardSmbiosHandle & uint64 & The SMBIOS handle for the memory card's Type 16 Memory Array Structure.\\
1412*079d581eSLawrence Tang\hline
1413*079d581eSLawrence TangmoduleSmbiosHandle & uint64 & The SMBIOS handle for the memory module's Type 17 Memory Device Structure.\\
1414*079d581eSLawrence Tang\jsontableend{Memory Error 2 structure field table.}
1415*079d581eSLawrence Tang
1416*079d581eSLawrence Tang% Memory error 2 validation structure.
1417*079d581eSLawrence Tang\subsection{Memory Error 2 Validation Structure}
1418*079d581eSLawrence Tang\label{subsection:memoryerror2validationstructure}
1419*079d581eSLawrence TangThis structure describes whether fields in a single Memory Error 2 (\ref{section:memoryerror2section}) are valid, using boolean fields.
1420*079d581eSLawrence Tang\jsontable{table:memoryerror2validationstructure}
1421*079d581eSLawrence TangerrorStatusValid & boolean & Whether the "errorStatus" field of a Memory Error 2 (\ref{section:memoryerror2section}) is valid.\\
1422*079d581eSLawrence Tang\hline
1423*079d581eSLawrence TangphysicalAddressValid & boolean & Whether the "physicalAddress" field of a Memory Error 2 (\ref{section:memoryerror2section}) is valid.\\
1424*079d581eSLawrence Tang\hline
1425*079d581eSLawrence TangphysicalAddressMaskValid & boolean & Whether the "physicalAddressMask" field of a Memory Error 2 (\ref{section:memoryerror2section}) is valid.\\
1426*079d581eSLawrence Tang\hline
1427*079d581eSLawrence TangnodeValid & boolean & Whether the "node" field of a Memory Error 2 (\ref{section:memoryerror2section}) is valid.\\
1428*079d581eSLawrence Tang\hline
1429*079d581eSLawrence TangcardValid & boolean & Whether the "card" field of a Memory Error 2 (\ref{section:memoryerror2section}) is valid.\\
1430*079d581eSLawrence Tang\hline
1431*079d581eSLawrence TangmoduleValid & boolean & Whether the "module" field of a Memory Error 2 (\ref{section:memoryerror2section}) is valid.\\
1432*079d581eSLawrence Tang\hline
1433*079d581eSLawrence TangbankValid & boolean & Whether the "bank.value" field of a Memory Error 2 (\ref{section:memoryerror2section}) is valid. When the bank is addressed by group/address, refer to \texttt{bankGroupValid} and \texttt{bankAddressValid} instead.\\
1434*079d581eSLawrence Tang\hline
1435*079d581eSLawrence TangdeviceValid & boolean & Whether the "device" field of a Memory Error 2 (\ref{section:memoryerror2section}) is valid.\\
1436*079d581eSLawrence Tang\hline
1437*079d581eSLawrence TangrowValid & boolean & Whether the "row" field of a Memory Error 2 (\ref{section:memoryerror2section}) is valid.\\
1438*079d581eSLawrence Tang\hline
1439*079d581eSLawrence TangcolumnValid & boolean & Whether the "column" field of a Memory Error 2 (\ref{section:memoryerror2section}) is valid.\\
1440*079d581eSLawrence Tang\hline
1441*079d581eSLawrence TangrankValid & boolean & Whether the "rank" field of a Memory Error 2 (\ref{section:memoryerror2section}) is valid.\\
1442*079d581eSLawrence Tang\hline
1443*079d581eSLawrence TangbitPositionValid & boolean & Whether the "bitPosition" field of a Memory Error 2 (\ref{section:memoryerror2section}) is valid.\\
1444*079d581eSLawrence Tang\hline
1445*079d581eSLawrence TangchipIDValid & boolean & Whether the "chipID" field of a Memory Error 2 (\ref{section:memoryerror2section}) is valid.\\
1446*079d581eSLawrence Tang\hline
1447*079d581eSLawrence TangmemoryErrorTypeValid & boolean & Whether the "memoryErrorType" field of a Memory Error 2 (\ref{section:memoryerror2section}) is valid.\\
1448*079d581eSLawrence Tang\hline
1449*079d581eSLawrence TangstatusValid & boolean & Whether the "status" field of a Memory Error 2 (\ref{section:memoryerror2section}) is valid.\\
1450*079d581eSLawrence Tang\hline
1451*079d581eSLawrence TangrequestorIDValid & boolean & Whether the "requestorID" field of a Memory Error 2 (\ref{section:memoryerror2section}) is valid.\\
1452*079d581eSLawrence Tang\hline
1453*079d581eSLawrence TangresponderIDValid & boolean & Whether the "responderID" field of a Memory Error 2 (\ref{section:memoryerror2section}) is valid.\\
1454*079d581eSLawrence Tang\hline
1455*079d581eSLawrence TangtargetIDValid & boolean & Whether the "targetID" field of a Memory Error 2 (\ref{section:memoryerror2section}) is valid.\\
1456*079d581eSLawrence Tang\hline
1457*079d581eSLawrence TangcardHandleValid & boolean & Whether the "cardSmbiosHandle" field of a Memory Error 2 (\ref{section:memoryerror2section}) is valid.\\
1458*079d581eSLawrence Tang\hline
1459*079d581eSLawrence TangmoduleHandleValid & boolean & Whether the "moduleSmbiosHandle" field of a Memory Error 2 (\ref{section:memoryerror2section}) is valid.\\
1460*079d581eSLawrence Tang\hline
1461*079d581eSLawrence TangbankGroupValid & boolean & Whether the "bankGroup" field of a Memory Error 2 (\ref{section:memoryerror2section}) is valid.\\
1462*079d581eSLawrence Tang\hline
1463*079d581eSLawrence TangbankAddressValid & boolean & Whether the "bankAddress" field of a Memory Error 2 (\ref{section:memoryerror2section}) is valid.\\
1464*079d581eSLawrence Tang\jsontableend{Memory Error 2 validation structure field table.}
1465*079d581eSLawrence Tang
1466*079d581eSLawrence Tang% Memory error 2 normal bank addressing structure.
1467*079d581eSLawrence Tang\subsection{Memory Error 2 Standard Bank Address Structure}
1468*079d581eSLawrence Tang\label{subsection:memoryerror2standardbankaddressstructure}
1469*079d581eSLawrence TangThis structure describes a simple bank address for a Memory Error 2 section (\ref{section:memoryerror2section}). This structure is selected when the \texttt{bankValid} field in the corresponding Memory Error 2 Validation Structure (\ref{subsection:memoryerror2validationstructure}) is set to "true".
1470*079d581eSLawrence Tang\jsontable{table:memoryerror2standardbankaddressstructure}
1471*079d581eSLawrence Tangvalue & uint64 & The value of the bank address.\\
1472*079d581eSLawrence Tang\jsontableend{Memory Error 2 Standard Bank Address structure field table.}
1473*079d581eSLawrence Tang
1474*079d581eSLawrence Tang% Memory error 2 address/group bank addressing structure.
1475*079d581eSLawrence Tang\subsection{Memory Error 2 Address/Group Bank Address Structure}
1476*079d581eSLawrence Tang\label{subsection:memoryerror2addressgroupbankaddressstructure}
1477*079d581eSLawrence TangThis structure describes an address/group bank address for a Memory Error 2 section (\ref{section:memoryerror2section}). This structure is selected when the \texttt{bankValid} field in the corresponding Memory Error 2 Validation Structure (\ref{subsection:memoryerror2validationstructure}) is set to "false".
1478*079d581eSLawrence Tang\jsontable{table:memoryerror2addressgroupbankaddressstructure}
1479*079d581eSLawrence Tangaddress & uint64 & The address of the bank.\\
1480*079d581eSLawrence Tang\hline
1481*079d581eSLawrence Tanggroup & uint64 & The group of the bank.\\
1482*079d581eSLawrence Tang\jsontableend{Memory Error 2 Address/Group Bank Address structure field table.}
1483*079d581eSLawrence Tang
1484*079d581eSLawrence Tang% PCIe error section.
1485*079d581eSLawrence Tang\section{PCIe Error Section}
1486*079d581eSLawrence Tang\label{section:pcieerrorsection}
1487*079d581eSLawrence TangThis section describes the JSON format for a single PCIe Error Section from a CPER record. The GUID used for PCIe Error Sections is \texttt{\{ 0xd995e954, 0xbbc1, 0x430f, \{ 0xad, 0x91, 0xb4, 0x4d, 0xcb, 0x3c, 0x6f, 0x35 \}\}}.
1488*079d581eSLawrence Tang\jsontable{table:pcieerrorsection}
1489*079d581eSLawrence TangvalidationBits & object & A PCIe Error Validation structure as defined in Subsection \ref{subsection:pcieerrorvalidationstructure}.\\
1490*079d581eSLawrence Tang\hline
1491*079d581eSLawrence TangportType.value & uint64 & The raw value of the port type for this error.\\
1492*079d581eSLawrence TangportType.name & string & The human readable name, if available, of the port type for this error.\\
1493*079d581eSLawrence Tang\hline
1494*079d581eSLawrence Tangversion.major & int & The major version number for the PCIe specification supported.\\
1495*079d581eSLawrence Tangversion.minor & int & The minor version number for the PCIe specification supported.\\
1496*079d581eSLawrence Tang\hline
1497*079d581eSLawrence TangcommandStatus.commandRegister & uint64 & The PCI command register value.\\
1498*079d581eSLawrence TangcommandStatus.statusRegister & uint64 & The PCI status register value.\\
1499*079d581eSLawrence Tang\hline
1500*079d581eSLawrence TangdeviceID & object & A PCIe Device ID structure as defined in Subsection \ref{subsection:pciedeviceidstructure}.\\
1501*079d581eSLawrence Tang\hline
1502*079d581eSLawrence TangdeviceSerialNumber & uint64 & The serial number of the device.\\
1503*079d581eSLawrence Tang\hline
1504*079d581eSLawrence TangbridgeControlStatus.secondaryStatusRegister & uint64 & The bridge secondary status register. \emph{This field is valid for bridges only.}\\
1505*079d581eSLawrence Tang\hline
1506*079d581eSLawrence TangbridgeControlStatus.controlRegister & uint64 & The bridge control register. \emph{This field is valid for bridges only.}\\
1507*079d581eSLawrence Tang\hline
1508*079d581eSLawrence TangcapabilityStructure.data & string & A base-64 formatted binary dump of the PCIe capability structure for this device. The structure could either be a PCIe 1.1 Capability Structure (36-byte, padded to 60 bytes) or a PCIe 2.0 Capability Structure (60-byte).\\
1509*079d581eSLawrence Tang\hline
1510*079d581eSLawrence TangaerInfo & object & A PCIe AER Extended Capability structure, as defined in Subsection \ref{subsection:pcieaerecstructure}.\\
1511*079d581eSLawrence Tang\jsontableend{PCIe Error structure field table.}
1512*079d581eSLawrence Tang
1513*079d581eSLawrence Tang% PCIe error validation structure.
1514*079d581eSLawrence Tang\subsection{PCIe Error Validation Structure}
1515*079d581eSLawrence Tang\label{subsection:pcieerrorvalidationstructure}
1516*079d581eSLawrence TangThis structure describes which fields within a PCIe Error section (\ref{section:pcieerrorsection}) are valid, using boolean fields.
1517*079d581eSLawrence Tang\jsontable{table:pcieerrorvalidationstructure}
1518*079d581eSLawrence TangportTypeValid & boolean & Whether the "portType" field within a PCIe Error section (\ref{section:pcieerrorsection}) is valid.\\
1519*079d581eSLawrence Tang\hline
1520*079d581eSLawrence TangversionValid & boolean & Whether the "version" field within a PCIe Error section (\ref{section:pcieerrorsection}) is valid.\\
1521*079d581eSLawrence Tang\hline
1522*079d581eSLawrence TangcommandStatusValid & boolean & Whether the "commandStatus" field within a PCIe Error section (\ref{section:pcieerrorsection}) is valid.\\
1523*079d581eSLawrence Tang\hline
1524*079d581eSLawrence TangdeviceIDValid & boolean & Whether the "deviceID" field within a PCIe Error section (\ref{section:pcieerrorsection}) is valid.\\
1525*079d581eSLawrence Tang\hline
1526*079d581eSLawrence TangdeviceSerialNumberValid & boolean & Whether the "deviceSerialNumber" field within a PCIe Error section (\ref{section:pcieerrorsection}) is valid.\\
1527*079d581eSLawrence Tang\hline
1528*079d581eSLawrence TangbridgeControlStatusValid & boolean & Whether the "bridgeControlStatus" field within a PCIe Error section (\ref{section:pcieerrorsection}) is valid.\\
1529*079d581eSLawrence Tang\hline
1530*079d581eSLawrence TangcapabilityStructureStatusValid & boolean & Whether the "capabilityStructure" field within a PCIe Error section (\ref{section:pcieerrorsection}) is valid.\\
1531*079d581eSLawrence Tang\hline
1532*079d581eSLawrence TangaerInfoValid & boolean & Whether the "aerInfo" field within a PCIe Error section (\ref{section:pcieerrorsection}) is valid.\\
1533*079d581eSLawrence Tang\hline
1534*079d581eSLawrence Tang\jsontableend{PCIe Error validation structure field table.}
1535*079d581eSLawrence Tang
1536*079d581eSLawrence Tang% PCIe Device ID structure.
1537*079d581eSLawrence Tang\subsection{PCIe Device ID Structure}
1538*079d581eSLawrence Tang\label{subsection:pciedeviceidstructure}
1539*079d581eSLawrence TangThis structure describes a PCIe device ID, for use in a PCI Error section (\ref{table:pcieerrorsection}).
1540*079d581eSLawrence Tang\jsontable{table:pciedeviceidstructure}
1541*079d581eSLawrence TangvendorID & uint64 & The vendor ID of the PCIe device.\\
1542*079d581eSLawrence Tang\hline
1543*079d581eSLawrence TangdeviceID & uint64 & The device ID of the PCIe device.\\
1544*079d581eSLawrence Tang\hline
1545*079d581eSLawrence TangclassCode & uint64 & The class code of the PCIe device.\\
1546*079d581eSLawrence Tang\hline
1547*079d581eSLawrence TangfunctionNumber & uint64 & The function number of the PCIe device.\\
1548*079d581eSLawrence Tang\hline
1549*079d581eSLawrence TangdeviceNumber & uint64 & The device number of the PCIe device.\\
1550*079d581eSLawrence Tang\hline
1551*079d581eSLawrence TangsegmentNumber & uint64 & The segment number of the PCIe device.\\
1552*079d581eSLawrence Tang\hline
1553*079d581eSLawrence TangprimaryOrDeviceBusNumber & uint64 & The root port/bridge primary bus number or device bus number of the PCIe device.\\
1554*079d581eSLawrence Tang\hline
1555*079d581eSLawrence TangsecondaryBusNumber & uint64 & The root port/bridge secondary bus number of the PCIe device.\\
1556*079d581eSLawrence Tang\hline
1557*079d581eSLawrence TangslotNumber & uint64 & The slot number of the PCIe device.\\
1558*079d581eSLawrence Tang\jsontableend{PCIe Device ID structure field table.}
1559*079d581eSLawrence Tang
1560*079d581eSLawrence Tang% PCIe Advanced Error Reporting Extended Capability structure.
1561*079d581eSLawrence Tang\subsection{PCIe AER Extended Capability Structure}
1562*079d581eSLawrence Tang\label{subsection:pcieaerecstructure}
1563*079d581eSLawrence TangThis structure describes a PCIe Advanced Error Reporting Extended Capability structure, for use in a PCI Error section (\ref{table:pcieerrorsection}).
1564*079d581eSLawrence Tang\jsontable{table:pcieaerecstructure}
1565*079d581eSLawrence TangcapabilityID & uint64 & The capability ID for this AER structure.\\
1566*079d581eSLawrence Tang\hline
1567*079d581eSLawrence TangcapabilityVersion & uint64 & The capability structure version for this AER structure.\\
1568*079d581eSLawrence Tang\hline
1569*079d581eSLawrence TanguncorrectableErrorStatusRegister & uint64 & The uncorrectable error status register value.\\
1570*079d581eSLawrence Tang\hline
1571*079d581eSLawrence TanguncorrectableErrorMaskRegister & uint64 & The uncorrectable error mask register value.\\
1572*079d581eSLawrence Tang\hline
1573*079d581eSLawrence TanguncorrectableErrorSeverityRegister & uint64 & The uncorrectable error severity register value.\\
1574*079d581eSLawrence Tang\hline
1575*079d581eSLawrence TangcorrectableErrorStatusRegister & uint64 & The correctable error status register value.\\
1576*079d581eSLawrence Tang\hline
1577*079d581eSLawrence TangcorrectableErrorMaskRegister & uint64 & The correctable error mask register value.\\
1578*079d581eSLawrence Tang\hline
1579*079d581eSLawrence TangaeccReg & uint64 & The AECC register value.\\
1580*079d581eSLawrence Tang\hline
1581*079d581eSLawrence TangheaderLogRegister & string & A base64-encoded binary dump of the header log register.\\
1582*079d581eSLawrence Tang\hline
1583*079d581eSLawrence TangrootErrorCommand & uint64 & The root error command.\\
1584*079d581eSLawrence Tang\hline
1585*079d581eSLawrence TangrootErrorStatus & uint64 & The root error status.\\
1586*079d581eSLawrence Tang\hline
1587*079d581eSLawrence TangerrorSourceIDRegister & uint64 & The error source ID register.\\
1588*079d581eSLawrence Tang\hline
1589*079d581eSLawrence TangcorrectableErrorSourceIDRegister & uint64 & The correctable error source ID register.\\
1590*079d581eSLawrence Tang\jsontableend{PCIe AER Extended Capability structure field table.}
1591*079d581eSLawrence Tang
1592*079d581eSLawrence Tang% PCI/PCI-X Bus error section.
1593*079d581eSLawrence Tang\section{PCI/PCI-X Bus Error Section}
1594*079d581eSLawrence Tang\label{section:pcibuserrorsection}
1595*079d581eSLawrence TangThis section describes the JSON format for a single PCI/PCI-X Bus Error Section from a CPER record. The GUID used for PCI/PCI-X Bus Error Sections is \texttt{\{ 0xc5753963, 0x3b84, 0x4095, \{ 0xbf, 0x78, 0xed, 0xda, 0xd3, 0xf9, 0xc9, 0xdd \}\}}.
1596*079d581eSLawrence Tang\jsontable{table:pcibuserrorsection}
1597*079d581eSLawrence TangvalidationBits & object & A PCI/PCI-X Bus Error Validation structure, as described in Subsection \ref{subsection:pcibuserrorvalidationstructure}.\\
1598*079d581eSLawrence Tang\hline
1599*079d581eSLawrence TangerrorStatus & object & A CPER Generic Error Status structure, as described in Subsection \ref{subsection:genericerrorstatusstructure}.\\
1600*079d581eSLawrence Tang\hline
1601*079d581eSLawrence TangerrorType.value & uint64 & The raw value of the error type for this bus error.\\
1602*079d581eSLawrence TangerrorType.name & string & The human readable name, if available, of the error type for this bus error.\\
1603*079d581eSLawrence Tang\hline
1604*079d581eSLawrence TangbusID.busNumber & int & The bus number of this bus ID.\\
1605*079d581eSLawrence TangbusID.segmentNumber & int & The segment number of this bus ID.\\
1606*079d581eSLawrence Tang\hline
1607*079d581eSLawrence TangbusAddress & uint64 & The memory or I/O address on the bus at the time of the error.\\
1608*079d581eSLawrence Tang\hline
1609*079d581eSLawrence TangbusData & uint64 & Data on the bus at the time of the error.\\
1610*079d581eSLawrence Tang\hline
1611*079d581eSLawrence TangbusCommandType & string & The type of command at the time of the error. Either "PCI" or "PCI-X".\\
1612*079d581eSLawrence Tang\hline
1613*079d581eSLawrence TangbusRequestorID & uint64 & The PCI bus requestor ID for the error.\\
1614*079d581eSLawrence Tang\hline
1615*079d581eSLawrence TangbusCompleterID & uint64 & The PCI bus completer ID for the error.\\
1616*079d581eSLawrence Tang\hline
1617*079d581eSLawrence TangtargetID & uint64 & The PCI bus intended target ID for the error.\\
1618*079d581eSLawrence Tang\jsontableend{PCI/PCI-X Bus Error structure field table.}
1619*079d581eSLawrence Tang
1620*079d581eSLawrence Tang% PCI/PCI-X Bus error validation structure.
1621*079d581eSLawrence Tang\subsection{PCI/PCI-X Bus Error Validation Structure}
1622*079d581eSLawrence Tang\label{subsection:pcibuserrorvalidationstructure}
1623*079d581eSLawrence TangThis structure describes which fields within a PCI/PCI-X Bus Error section (\ref{section:pcibuserrorsection}) are valid, using boolean fields.
1624*079d581eSLawrence Tang\jsontable{table:pcibuserrorvalidationstructure}
1625*079d581eSLawrence TangerrorStatusValid & boolean & Whether the "errorStatus" field of the PCI/PCI-X Bus Error section (\ref{section:pcibuserrorsection}) is valid.\\
1626*079d581eSLawrence Tang\hline
1627*079d581eSLawrence TangerrorTypeValid & boolean & Whether the "errorType" field of the PCI/PCI-X Bus Error section (\ref{section:pcibuserrorsection}) is valid.\\
1628*079d581eSLawrence Tang\hline
1629*079d581eSLawrence TangbusIDValid & boolean & Whether the "busID" field of the PCI/PCI-X Bus Error section (\ref{section:pcibuserrorsection}) is valid.\\
1630*079d581eSLawrence Tang\hline
1631*079d581eSLawrence TangbusAddressValid & boolean & Whether the "busAddress" field of the PCI/PCI-X Bus Error section (\ref{section:pcibuserrorsection}) is valid.\\
1632*079d581eSLawrence Tang\hline
1633*079d581eSLawrence TangbusDataValid & boolean & Whether the "busData" field of the PCI/PCI-X Bus Error section (\ref{section:pcibuserrorsection}) is valid.\\
1634*079d581eSLawrence Tang\hline
1635*079d581eSLawrence TangcommandValid & boolean & Whether the "busCommandType" field of the PCI/PCI-X Bus Error section (\ref{section:pcibuserrorsection}) is valid.\\
1636*079d581eSLawrence Tang\hline
1637*079d581eSLawrence TangrequestorIDValid & boolean & Whether the "busRequestorID" field of the PCI/PCI-X Bus Error section (\ref{section:pcibuserrorsection}) is valid.\\
1638*079d581eSLawrence Tang\hline
1639*079d581eSLawrence TangcompleterIDValid & boolean & Whether the "busCompleterID" field of the PCI/PCI-X Bus Error section (\ref{section:pcibuserrorsection}) is valid.\\
1640*079d581eSLawrence Tang\hline
1641*079d581eSLawrence TangtargetIDValid & boolean & Whether the "targetID" field of the PCI/PCI-X Bus Error section (\ref{section:pcibuserrorsection}) is valid.\\
1642*079d581eSLawrence Tang\jsontableend{PCI/PCI-X Bus Error validation structure field table.}
1643*079d581eSLawrence Tang
1644*079d581eSLawrence Tang% PCI/PCI-X Component error section.
1645*079d581eSLawrence Tang\section{PCI/PCI-X Component Error Section}
1646*079d581eSLawrence Tang\label{section:pcicomponenterrorsection}
1647*079d581eSLawrence TangThis section describes the JSON format for a single PCI/PCI-X Component Error Section from a CPER record. The GUID used for PCI/PCI-X Component Error Sections is \texttt{\{ 0xeb5e4685, 0xca66, 0x4769, \{ 0xb6, 0xa2, 0x26, 0x06, 0x8b, 0x00, 0x13, 0x26 \}\}}.
1648*079d581eSLawrence Tang\jsontable{table:pcicomponenterrorsection}
1649*079d581eSLawrence TangvalidationBits & object & A PCI/PCI-X Component Error Validation structure, as defined in Subsection \ref{subsection:pcicomponenterrorvalidationstructure}.\\
1650*079d581eSLawrence Tang\hline
1651*079d581eSLawrence TangerrorStatus & object & A CPER Generic Error Status structure, as described in Subsection \ref{subsection:genericerrorstatusstructure}.\\
1652*079d581eSLawrence Tang\hline
1653*079d581eSLawrence TangidInfo & object & A PCI/PCI-X Component ID structure, as defined in Subsection \ref{subsection:pcicomponentidstructure}.\\
1654*079d581eSLawrence Tang\hline
1655*079d581eSLawrence TangmemoryNumber & uint64 & The number of PCI/PCI-X component memory mapped register address/data pair values are present in this structure.\\
1656*079d581eSLawrence Tang\hline
1657*079d581eSLawrence TangioNumber & uint64 & The number of PCI/PCI-X component programmed I/O register address/data pair values are present in this structure.\\
1658*079d581eSLawrence Tang\hline
1659*079d581eSLawrence TangregisterDataPairs & array & An array of PCI/PCI-X Component Register Pair structures, as defined in Subsection \ref{subsection:pcicomponentregisterpairstructure}. The length corresponds to the amounts listed in fields \texttt{memoryNumber} and \texttt{ioNumber}.\\
1660*079d581eSLawrence Tang\jsontableend{PCI/PCI-X Component Error structure field table.}
1661*079d581eSLawrence Tang
1662*079d581eSLawrence Tang% PCI/PCI-X Component error validation structure.
1663*079d581eSLawrence Tang\subsection{PCI/PCI-X Component Error Validation Structure}
1664*079d581eSLawrence Tang\label{subsection:pcicomponenterrorvalidationstructure}
1665*079d581eSLawrence TangThis structure describes which fields within a PCI/PCI-X Component Error section (\ref{section:pcicomponenterrorsection}) are valid, using boolean fields.
1666*079d581eSLawrence Tang\jsontable{table:pcicomponenterrorvalidationstructure}
1667*079d581eSLawrence TangerrorStatusValid & boolean & Whether the "errorStatus" field of the PCI/PCI-X Component Error section (\ref{section:pcicomponenterrorsection}) is valid.\\
1668*079d581eSLawrence Tang\hline
1669*079d581eSLawrence TangidInfoValid & boolean & Whether the "idInfo" field of the PCI/PCI-X Component Error section (\ref{section:pcicomponenterrorsection}) is valid.\\
1670*079d581eSLawrence Tang\hline
1671*079d581eSLawrence TangmemoryNumberValid & boolean & Whether the "memoryNumber" field of the PCI/PCI-X Component Error section (\ref{section:pcicomponenterrorsection}) is valid.\\
1672*079d581eSLawrence Tang\hline
1673*079d581eSLawrence TangioNumberValid & boolean & Whether the "ioNumber" field of the PCI/PCI-X Component Error section (\ref{section:pcicomponenterrorsection}) is valid.\\
1674*079d581eSLawrence Tang\hline
1675*079d581eSLawrence TangregisterDataPairsValid & boolean & Whether the "registerDataPairs" field of the PCI/PCI-X Component Error section (\ref{section:pcicomponenterrorsection}) is valid.\\
1676*079d581eSLawrence Tang\jsontableend{PCI/PCI-X Component Error validation structure field table.}
1677*079d581eSLawrence Tang
1678*079d581eSLawrence Tang% PCI/PCI-X Component ID structure.
1679*079d581eSLawrence Tang\subsection{PCI/PCI-X Component ID Structure}
1680*079d581eSLawrence Tang\label{subsection:pcicomponentidstructure}
1681*079d581eSLawrence TangThis structure describes the ID of a single PCI/PCI-X component for use in a PCI/PCI-X Component Error section (\ref{section:pcicomponenterrorsection}).
1682*079d581eSLawrence Tang\jsontable{table:pcicomponentidstructure}
1683*079d581eSLawrence TangvendorID & uint64 & The vendor ID of this PCI/PCI-X component.\\
1684*079d581eSLawrence Tang\hline
1685*079d581eSLawrence TangdeviceID & uint64 & The device ID of this PCI/PCI-X component.\\
1686*079d581eSLawrence Tang\hline
1687*079d581eSLawrence TangclassCode & uint64 & The class code of this PCI/PCI-X component.\\
1688*079d581eSLawrence Tang\hline
1689*079d581eSLawrence TangfunctionNumber & uint64 & The function number of this PCI/PCI-X component.\\
1690*079d581eSLawrence Tang\hline
1691*079d581eSLawrence TangdeviceNumber & uint64 & The device number of this PCI/PCI-X component.\\
1692*079d581eSLawrence Tang\hline
1693*079d581eSLawrence TangbusNumber & uint64 & The bus number of this PCI/PCI-X component.\\
1694*079d581eSLawrence Tang\hline
1695*079d581eSLawrence TangsegmentNumber & uint64 & The segment number of this PCI/PCI-X component.\\
1696*079d581eSLawrence Tang\jsontableend{PCI/PCI-X Component ID structure field table.}
1697*079d581eSLawrence Tang
1698*079d581eSLawrence Tang% PCI/PCI-X Component Register Pair structure.
1699*079d581eSLawrence Tang\subsection{PCI/PCI-X Component Register Pair Structure}
1700*079d581eSLawrence Tang\label{subsection:pcicomponentregisterpairstructure}
1701*079d581eSLawrence TangThis structure describes a single pair of registers from a PCI/PCI-X component for use in a PCI/PCI-X Component Error section (\ref{section:pcicomponenterrorsection}). The actual "pairs" of address and data aren't necessarily all 16 bytes allocated long, and there is no field to indicate their length, so do not assume that the address is in the first field and the data in the second.
1702*079d581eSLawrence Tang\jsontable{table:pcicomponentregisterpairstructure}
1703*079d581eSLawrence TangfirstHalf & uint64 & The first 8 bytes of the 16 byte register pair structure.\\
1704*079d581eSLawrence Tang\hline
1705*079d581eSLawrence TangsecondHalf & uint64 & The second 8 bytes of the 16 byte register pair structure.\\
1706*079d581eSLawrence Tang\jsontableend{PCI/PCI-X Component Register Pair structure field table.}
1707*079d581eSLawrence Tang
1708*079d581eSLawrence Tang% Firmware error section.
1709*079d581eSLawrence Tang\section{Firmware Error Section}
1710*079d581eSLawrence Tang\label{section:firmwareerrorsection}
1711*079d581eSLawrence TangThis section describes the JSON format for a single Firmware Error Section from a CPER record. The GUID used for Firmware Error Sections is \texttt{\{ 0x81212a96, 0x09ed, 0x4996, \{ 0x94, 0x71, 0x8d, 0x72, 0x9c, 0x8e, 0x69, 0xed \}\}}.
1712*079d581eSLawrence Tang\jsontable{table:firmwareerrorsection}
1713*079d581eSLawrence TangerrorRecordType.value & uint64 & The raw value of the type of firmware error record this is.\\
1714*079d581eSLawrence TangerrorRecordType.name & string & The human readable name, if available, of the type of firmware error record this is.\\
1715*079d581eSLawrence Tang\hline
1716*079d581eSLawrence Tangrevision & int & The header revision of this record. For the referenced UEFI specification, this value is 2.\\
1717*079d581eSLawrence Tang\hline
1718*079d581eSLawrence TangrecordID & uint64 & Identifier for the referenced firmware error record. When the \texttt{revision} field is greater than 1 (which is expected here), this value will be null.\\
1719*079d581eSLawrence Tang\hline
1720*079d581eSLawrence TangrecordIDGUID & string & GUID of the firmware error record referenced by this section. \textbf{This field is only valid when the \texttt{errorRecordType} field has a value of 2.} Otherwise, this field is ignored.\\
1721*079d581eSLawrence Tang\jsontableend{Firmware Error structure field table.}
1722*079d581eSLawrence Tang
1723*079d581eSLawrence Tang% Generic DMAr error section.
1724*079d581eSLawrence Tang\section{Generic DMAr Error Section}
1725*079d581eSLawrence Tang\label{section:dmargenericerrorsection}
1726*079d581eSLawrence TangThis section describes the JSON format for a single Generic DMAr Error Section from a CPER record. The GUID used for Generic DMAr Error Sections is \texttt{\{ 0x5b51fef7, 0xc79d, 0x4434, \{ 0x8f, 0x1b, 0xaa, 0x62, 0xde, 0x3e, 0x2c, 0x64 \}\}}.
1727*079d581eSLawrence Tang\jsontable{table:dmargenericerrorsection}
1728*079d581eSLawrence TangrequesterID & int & The device ID associated with the fault condition.\\
1729*079d581eSLawrence Tang\hline
1730*079d581eSLawrence TangsegmentNumber & int & The segment number associated with the device.\\
1731*079d581eSLawrence Tang\hline
1732*079d581eSLawrence TangfaultReason.value & uint64 & The raw value of the reason for the fault.\\
1733*079d581eSLawrence TangfaultReason.name & string & The human readable name, if available, of the reason for the fault.\\
1734*079d581eSLawrence TangfaultReason.description & string & A human readable description, if available, of the reason for the fault.\\
1735*079d581eSLawrence Tang\hline
1736*079d581eSLawrence TangaccessType.value & uint64 & The raw value of the access type that caused the fault.\\
1737*079d581eSLawrence TangaccessType.name & string & The human readable name, if available, of the access type that caused the fault.\\
1738*079d581eSLawrence Tang\hline
1739*079d581eSLawrence TangaddressType.value & uint64 & The raw value of the addressing type that caused the fault.\\
1740*079d581eSLawrence TangaddressType.name & string & The human readable name, if available, of the addressing type that caused the fault.\\
1741*079d581eSLawrence Tang\hline
1742*079d581eSLawrence TangarchitectureType.value & uint64 & The raw value of the DMAr architecture type.\\
1743*079d581eSLawrence TangarchitectureType.name & string & The human readable name, if available, of the DMAr architecture type.\\
1744*079d581eSLawrence Tang\hline
1745*079d581eSLawrence TangdeviceAddress & uint64 & The 64-bit device virtual address contained in the faulted DMA request.\\
1746*079d581eSLawrence Tang\jsontableend{Generic DMAr Error structure field table.}
1747*079d581eSLawrence Tang
1748*079d581eSLawrence Tang% VT-d DMAr error section.
1749*079d581eSLawrence Tang\section{VT-d DMAr Error Section}
1750*079d581eSLawrence Tang\label{section:vtddmarerrorsection}
1751*079d581eSLawrence TangThis section describes the JSON format for a single VT-d DMAr Error Section from a CPER record. The GUID used for VT-d DMAr Error Sections is \texttt{\{ 0x71761d37, 0x32b2, 0x45cd, \{ 0xa7, 0xd0, 0xb0, 0xfe, 0xdd, 0x93, 0xe8, 0xcf \}\}}.
1752*079d581eSLawrence Tang\jsontable{table:vtddmarerrorsection}
1753*079d581eSLawrence Tangversion & int & Version register value as defined in the VT-d specification.\\
1754*079d581eSLawrence Tang\hline
1755*079d581eSLawrence Tangrevision & int & Revision field in VT-d specific DMA remapping reporting structure.\\
1756*079d581eSLawrence Tang\hline
1757*079d581eSLawrence TangoemID & uint64 & OEM ID field in VT-d specific DMA remapping reporting structure.\\
1758*079d581eSLawrence Tang\hline
1759*079d581eSLawrence TangcapabilityRegister & uint64 & Value of VT-d capability register.\\
1760*079d581eSLawrence Tang\hline
1761*079d581eSLawrence TangextendedCapabilityRegister & uint64 & Value of VT-d extended capability register.\\
1762*079d581eSLawrence Tang\hline
1763*079d581eSLawrence TangglobalCommandRegister & uint64 & Value of VT-d global command register.\\
1764*079d581eSLawrence Tang\hline
1765*079d581eSLawrence TangglobalStatusRegister & uint64 & Value of VT-d global status register.\\
1766*079d581eSLawrence Tang\hline
1767*079d581eSLawrence TangfaultStatusRegister & uint64 & Value of VT-d fault status register.\\
1768*079d581eSLawrence Tang\hline
1769*079d581eSLawrence TangfaultRecord & object & A VT-d DMAR Fault Record structure, as defined in Subsection \ref{subsection:vtddmarfaultrecordstructure}.\\
1770*079d581eSLawrence Tang\hline
1771*079d581eSLawrence TangrootEntry & string & A base64-represented binary dump of the root entry table for the associated requester ID.\\
1772*079d581eSLawrence Tang\hline
1773*079d581eSLawrence TangcontextEntry & string & A base64-represented binary dump of the context entry table for the associated requester ID.\\
1774*079d581eSLawrence Tang\hline
1775*079d581eSLawrence TangpageTableEntry\_Level6 & uint64 & The page table entry for the device virtual address in page level 6.\\
1776*079d581eSLawrence Tang\hline
1777*079d581eSLawrence TangpageTableEntry\_Level5 & uint64 & The page table entry for the device virtual address in page level 5.\\
1778*079d581eSLawrence Tang\hline
1779*079d581eSLawrence TangpageTableEntry\_Level4 & uint64 & The page table entry for the device virtual address in page level 4.\\
1780*079d581eSLawrence Tang\hline
1781*079d581eSLawrence TangpageTableEntry\_Level3 & uint64 & The page table entry for the device virtual address in page level 3.\\
1782*079d581eSLawrence Tang\hline
1783*079d581eSLawrence TangpageTableEntry\_Level2 & uint64 & The page table entry for the device virtual address in page level 2.\\
1784*079d581eSLawrence Tang\hline
1785*079d581eSLawrence TangpageTableEntry\_Level1 & uint64 & The page table entry for the device virtual address in page level 1.\\
1786*079d581eSLawrence Tang\jsontableend{VT-d DMAr Error structure field table.}
1787*079d581eSLawrence Tang
1788*079d581eSLawrence Tang% VT-d DMAR Fault Record structure.
1789*079d581eSLawrence Tang\subsection{VT-d DMAR Fault Record Structure}
1790*079d581eSLawrence Tang\label{subsection:vtddmarfaultrecordstructure}
1791*079d581eSLawrence TangThis structure describes a fault record, which forms part of a single VT-d DMAr Error section (\ref{section:vtddmarerrorsection}).
1792*079d581eSLawrence Tang\jsontable{table:vtddmarfaultrecordstructure}
1793*079d581eSLawrence TangfaultInformation & uint64 & Fault information field as defined in the VT-d specification.\\
1794*079d581eSLawrence Tang\hline
1795*079d581eSLawrence TangsourceIdentifier & uint64 & Identifier of the source of the VT-d fault.\\
1796*079d581eSLawrence Tang\hline
1797*079d581eSLawrence TangprivelegeModeRequested & boolean & Whether privelege mode was requested.\\
1798*079d581eSLawrence Tang\hline
1799*079d581eSLawrence TangexecutePermissionRequested & boolean & Whether execute permission was requested.\\
1800*079d581eSLawrence Tang\hline
1801*079d581eSLawrence TangpasidPresent & boolean & Whether the "pasidValue" field contains valid data.\\
1802*079d581eSLawrence Tang\hline
1803*079d581eSLawrence TangfaultReason & uint64 & The reason for the VT-d fault, as defined in the VT-d specification.\\
1804*079d581eSLawrence Tang\hline
1805*079d581eSLawrence TangpasidValue & uint64 & The PASID associated with the fault.\\
1806*079d581eSLawrence Tang\hline
1807*079d581eSLawrence TangaddressType & uint64 & The addressing type of the fault, as defined by the VT-d specification.\\
1808*079d581eSLawrence Tang\hline
1809*079d581eSLawrence Tangtype.value & uint64 & The raw value of the type of VT-d fault record.\\
1810*079d581eSLawrence Tangtype.name & string & The human readable name, if available, of the type of VT-d fault record.\\
1811*079d581eSLawrence Tang\jsontableend{VT-d DMAR Fault Record structure field table.}
1812*079d581eSLawrence Tang
1813*079d581eSLawrence Tang% IOMMU DMAr error section.
1814*079d581eSLawrence Tang\section{IOMMU DMAr Error Section}
1815*079d581eSLawrence Tang\label{section:iommudmarerrorsection}
1816*079d581eSLawrence TangThis section describes the JSON format for a single IOMMU DMAr Error Section from a CPER record. The GUID used for IOMMU DMAr Error Sections is \texttt{\{ 0x036f84e1, 0x7f37, 0x428c, \{ 0xa7, 0x9e, 0x57, 0x5f, 0xdf, 0xaa, 0x84, 0xec \}\}}.
1817*079d581eSLawrence Tang\jsontable{table:iommudmarerrorsection}
1818*079d581eSLawrence Tangrevision & int & The IOMMU specification revision.\\
1819*079d581eSLawrence Tang\hline
1820*079d581eSLawrence TangcontrolRegister & uint64 & The IOMMU control register value.\\
1821*079d581eSLawrence Tang\hline
1822*079d581eSLawrence TangstatusRegister & uint64 & The IOMMU status register value.\\
1823*079d581eSLawrence Tang\hline
1824*079d581eSLawrence TangeventLogEntry & string & A base-64 binary dump of the IOMMU fault-related event log entry, as defined in the IOMMU specification.\\
1825*079d581eSLawrence Tang\hline
1826*079d581eSLawrence TangdeviceTableEntry & string & A base-64 representation of the value from the device table for a given requester ID.\\
1827*079d581eSLawrence Tang\hline
1828*079d581eSLawrence TangpageTableEntry\_Level6 & uint64 & Page table entry for device virtual address in page level 6.\\
1829*079d581eSLawrence Tang\hline
1830*079d581eSLawrence TangpageTableEntry\_Level5 & uint64 & Page table entry for device virtual address in page level 5.\\
1831*079d581eSLawrence Tang\hline
1832*079d581eSLawrence TangpageTableEntry\_Level4 & uint64 & Page table entry for device virtual address in page level 4.\\
1833*079d581eSLawrence Tang\hline
1834*079d581eSLawrence TangpageTableEntry\_Level3 & uint64 & Page table entry for device virtual address in page level 3.\\
1835*079d581eSLawrence Tang\hline
1836*079d581eSLawrence TangpageTableEntry\_Level2 & uint64 & Page table entry for device virtual address in page level 2.\\
1837*079d581eSLawrence Tang\hline
1838*079d581eSLawrence TangpageTableEntry\_Level1 & uint64 & Page table entry for device virtual address in page level 1.\\
1839*079d581eSLawrence Tang\jsontableend{IOMMU DMAr Error structure field table.}
1840*079d581eSLawrence Tang
1841*079d581eSLawrence Tang% CCIX PER error section.
1842*079d581eSLawrence Tang\section{CCIX PER Error Section}
1843*079d581eSLawrence Tang\label{section:ccixpererrorsection}
1844*079d581eSLawrence TangThis section describes the JSON format for a single CCIX PER Error Section from a CPER record. The GUID used for CCIX PER Error Sections is \texttt{\{ 0x91335EF6, 0xEBFB, 0x4478, \{0xA6, 0xA6, 0x88, 0xB7, 0x28, 0xCF, 0x75, 0xD7 \}\}}.
1845*079d581eSLawrence Tang\jsontable{table:ccixpererrorsection}
1846*079d581eSLawrence Tanglength & uint64 & The length (in bytes) of the entire structure.\\
1847*079d581eSLawrence Tang\hline
1848*079d581eSLawrence TangvalidationBits & object & A CCIX PER Validation structure as described in Subsection \ref{subsection:ccixpervalidationstructure}.\\
1849*079d581eSLawrence Tang\hline
1850*079d581eSLawrence TangccixSourceID & int & If the agent is an HA, SA, or RA, this indicates the CCIX Agent ID of the reporting component. Otherwise, this is the CCIX Device ID.\\
1851*079d581eSLawrence Tang\hline
1852*079d581eSLawrence TangccixPortID & int & The CCIX Port ID that reported this error.\\
1853*079d581eSLawrence Tang\hline
1854*079d581eSLawrence TangccixPERLog & string & A base64-represented binary dump of the CCIX PER Log structure, as defined in Section 7.3.2 of the CCIX Base Specification (Rev. 1.0).\\
1855*079d581eSLawrence Tang\jsontableend{CCIX PER Error structure field table.}
1856*079d581eSLawrence Tang
1857*079d581eSLawrence Tang% CCIX PER Validation structure.
1858*079d581eSLawrence Tang\subsection{CCIX PER Validation Structure}
1859*079d581eSLawrence Tang\label{subsection:ccixpervalidationstructure}
1860*079d581eSLawrence TangThis structure describes which fields are valid in a CCIX PER Error section (\ref{section:ccixpererrorsection}) using boolean fields.
1861*079d581eSLawrence Tang\jsontable{table:ccixpervalidationstructure}
1862*079d581eSLawrence TangccixSourceIDValid & boolean & Whether the "ccixSourceID" field in the CCIX PER Error Section (\ref{section:ccixpererrorsection}) is valid.\\
1863*079d581eSLawrence Tang\hline
1864*079d581eSLawrence TangccixPortIDValid & boolean & Whether the "ccixPortID" field in the CCIX PER Error Section (\ref{section:ccixpererrorsection}) is valid.\\
1865*079d581eSLawrence Tang\hline
1866*079d581eSLawrence TangccixPERLogValid & boolean & Whether the "ccixPERLog" field in the CCIX PER Error Section (\ref{section:ccixpererrorsection}) is valid.\\
1867*079d581eSLawrence Tang\jsontableend{CCIX PER validation structure field table.}
1868*079d581eSLawrence Tang
1869*079d581eSLawrence Tang% CXL Protocol error section.
1870*079d581eSLawrence Tang\section{CXL Protocol Error Section}
1871*079d581eSLawrence Tang\label{section:cxlprotocolerrorsection}
1872*079d581eSLawrence TangThis section describes the JSON format for a single CXL Protocol Error Section from a CPER record. The GUID used for CXL Protocol Error Sections is \texttt{\{ 0x80B9EFB4, 0x52B5, 0x4DE3, \{ 0xA7, 0x77, 0x68, 0x78, 0x4B, 0x77, 0x10, 0x48 \}\}}.
1873*079d581eSLawrence Tang\jsontable{table:cxlprotocolerrorsection}
1874*079d581eSLawrence TangvalidationBits & object & A CXL Protocol Validation structure as defined in Subsection \ref{subsection:cxlprotocolvalidationstructure}.\\
1875*079d581eSLawrence Tang\hline
1876*079d581eSLawrence TangagentType.value & uint64 & The raw value of the detecting CXL agent type.\\
1877*079d581eSLawrence TangagentType.name & string & The human readable name, if available, of the CXL agent type.\\
1878*079d581eSLawrence Tang\hline
1879*079d581eSLawrence TangagentAddress & object & One of the structures described in Subsection \ref{subsection:cxlprotocoldeviceagentaddressstructure} or Subsection \ref{subsection:cxlprotocolrcrbaddressstructure}. Included structure is dependent on the \texttt{agentType.value} field.\\
1880*079d581eSLawrence Tang\hline
1881*079d581eSLawrence TangdeviceID & object & A CXL Device ID structure, as defined in Subsection \ref{subsection:cxlprotocoldeviceidstructure}.\\
1882*079d581eSLawrence Tang\hline
1883*079d581eSLawrence TangdeviceSerial & uint64 (\textbf{optional}) & The CXL device serial number. Only included if the detecting device is a CXL device (field \texttt{agentType.value} has value 0).\\
1884*079d581eSLawrence Tang\hline
1885*079d581eSLawrence TangcapabilityStructure & string & A base64-encoded binary dump of the CXL device's PCIe capability structure. This could either be a PCIe 1.1 Capability Structure (36-byte, padded to 60 bytes), or a PCIe 2.0 Capability Structure (60-byte). Only included if the detecting device is a CXL device (field \texttt{agentType.value} has value 0).\\
1886*079d581eSLawrence Tang\hline
1887*079d581eSLawrence TangdvsecLength & int & Length (in bytes) of the CXL DVSEC structure.\\
1888*079d581eSLawrence Tang\hline
1889*079d581eSLawrence TangerrorLogLength & int & Length (in bytes) of the CXL Error Log structure.\\
1890*079d581eSLawrence Tang\hline
1891*079d581eSLawrence TangcxlDVSEC & string & A base64-encoded dump of the CXL DVSEC structure. For CXL 1.1 devices, this is a "CXL DVSEC For Flex Bus Devices" structure as defined in the CXL 1.1 specification. For CXL 1.1 host downstream ports, this is the "CXL DVSEC For Flex Bus Port" structure as defined in the CXL 1.1 specification.\\
1892*079d581eSLawrence Tang\hline
1893*079d581eSLawrence TangcxlErrorLog & string & A base64-encoded dump of the CXL error log. This field contains a copy of "CXL RAS Capability Structure", as defined in the CXL 1.1 specification.\\
1894*079d581eSLawrence Tang\jsontableend{CXL Protocol Error structure field table.}
1895*079d581eSLawrence Tang
1896*079d581eSLawrence Tang% CXL Protocol Validation structure.
1897*079d581eSLawrence Tang\subsection{CXL Protocol Validation Structure}
1898*079d581eSLawrence Tang\label{subsection:cxlprotocolvalidationstructure}
1899*079d581eSLawrence TangThis structure describes which fields are valid in a CXL Protocol Error section (\ref{section:cxlprotocolerrorsection}) using boolean fields.
1900*079d581eSLawrence Tang\jsontable{table:cxlprotocolvalidationstructure}
1901*079d581eSLawrence TangcxlAgentTypeValid & boolean & Whether the "cxlAgentType" field in the CXL Protocol Error section (\ref{section:cxlprotocolerrorsection}) is valid.\\
1902*079d581eSLawrence Tang\hline
1903*079d581eSLawrence TangcxlAgentAddressValid & boolean & Whether the "cxlAgentAddress" field in the CXL Protocol Error section (\ref{section:cxlprotocolerrorsection}) is valid.\\
1904*079d581eSLawrence Tang\hline
1905*079d581eSLawrence TangdeviceIDValid & boolean & Whether the "deviceID" field in the CXL Protocol Error section (\ref{section:cxlprotocolerrorsection}) is valid.\\
1906*079d581eSLawrence Tang\hline
1907*079d581eSLawrence TangdeviceSerialValid & boolean & Whether the "deviceSerial" field in the CXL Protocol Error section (\ref{section:cxlprotocolerrorsection}) is valid.\\
1908*079d581eSLawrence Tang\hline
1909*079d581eSLawrence TangcapabiltyStructureValid & boolean & Whether the "capabilityStructure" field in the CXL Protocol Error section (\ref{section:cxlprotocolerrorsection}) is valid.\\
1910*079d581eSLawrence Tang\hline
1911*079d581eSLawrence TangcxlDVSECValid & boolean & Whether the "cxlDVSEC" field in the CXL Protocol Error section (\ref{section:cxlprotocolerrorsection}) is valid.\\
1912*079d581eSLawrence Tang\hline
1913*079d581eSLawrence TangcxlErrorLogValid & boolean & Whether the "cxlErrorLog" field in the CXL Protocol Error section (\ref{section:cxlprotocolerrorsection}) is valid.\\
1914*079d581eSLawrence Tang\jsontableend{CXL Protocol validation structure field table.}
1915*079d581eSLawrence Tang
1916*079d581eSLawrence Tang% CXL Protocol Device Agent Address structure.
1917*079d581eSLawrence Tang\subsection{CXL Protocol Device Agent Address Structure}
1918*079d581eSLawrence Tang\label{subsection:cxlprotocoldeviceagentaddressstructure}
1919*079d581eSLawrence TangThis structure describes the address of a single CXL device agent, for use in a CXL Protocol Error section (\ref{section:cxlprotocolerrorsection}). Included when the \texttt{agentType.value} field has the value "0".
1920*079d581eSLawrence Tang\jsontable{table:cxlprotocoldeviceagentaddressstructure}
1921*079d581eSLawrence TangfunctionNumber & uint64 & The function number of the CXL device.\\
1922*079d581eSLawrence Tang\hline
1923*079d581eSLawrence TangdeviceNumber & uint64 & The device number of the CXL device.\\
1924*079d581eSLawrence Tang\hline
1925*079d581eSLawrence TangbusNumber & uint64 & The bus number of the CXL device.\\
1926*079d581eSLawrence Tang\hline
1927*079d581eSLawrence TangsegmentNumber & uint64 & The segment number of the CXL device.\\
1928*079d581eSLawrence Tang\jsontableend{CXL Protocol Device Agent Address structure field table.}
1929*079d581eSLawrence Tang
1930*079d581eSLawrence Tang% CXL Protocol RCRB Base Address structure.
1931*079d581eSLawrence Tang\subsection{CXL Protocol RCRB Base Address Structure}
1932*079d581eSLawrence Tang\label{subsection:cxlprotocolrcrbaddressstructure}
1933*079d581eSLawrence TangThis structure describes an RCRB base address, for use in a CXL Protocol Error section (\ref{section:cxlprotocolerrorsection}). Included when the \texttt{agentType.value} field has the value "1".
1934*079d581eSLawrence Tang\jsontable{table:cxlprotocolrcrbaddressstructure}
1935*079d581eSLawrence Tangvalue & uint64 & The CXL port RCRB base address.\\
1936*079d581eSLawrence Tang\jsontableend{CXL Protocol RCRB Base Address structure field table.}
1937*079d581eSLawrence Tang
1938*079d581eSLawrence Tang% CXL Protocol Device ID structure.
1939*079d581eSLawrence Tang\subsection{CXL Protocol Device ID Structure}
1940*079d581eSLawrence Tang\label{subsection:cxlprotocoldeviceidstructure}
1941*079d581eSLawrence TangThis structure describes the ID of a CXL device, for use in a CXL Protocol Error section (\ref{section:cxlprotocolerrorsection}).
1942*079d581eSLawrence Tang\jsontable{table:cxlprotocoldeviceidstructure}
1943*079d581eSLawrence TangvendorID & uint64 & The vendor ID of the CXL device.\\
1944*079d581eSLawrence Tang\hline
1945*079d581eSLawrence TangdeviceID & uint64 & The device ID of the CXL device.\\
1946*079d581eSLawrence Tang\hline
1947*079d581eSLawrence TangsubsystemVendorID & uint64 & The subsystem vendor ID of the CXL device.\\
1948*079d581eSLawrence Tang\hline
1949*079d581eSLawrence TangsubsystemDeviceID & uint64 & The subsystem device ID of the CXL device.\\
1950*079d581eSLawrence Tang\hline
1951*079d581eSLawrence TangclassCode & uint64 & The class code of the CXL device.\\
1952*079d581eSLawrence Tang\hline
1953*079d581eSLawrence TangslotNumber & uint64 & The slot number of the CXL device.\\
1954*079d581eSLawrence Tang\jsontableend{CXL Protocol Device ID structure field table.}
1955*079d581eSLawrence Tang
1956*079d581eSLawrence Tang% CXL Component error section.
1957*079d581eSLawrence Tang\section{CXL Component Error Section}
1958*079d581eSLawrence Tang\label{section:cxlcomponenterrorsection}
1959*079d581eSLawrence TangThis section describes the JSON format for a single CXL Component Error Section from a CPER record. There are several GUIDs used for CXL Component Error Sections, of which defined are:\\
1960*079d581eSLawrence Tang\begin{itemize}
1961*079d581eSLawrence Tang    \item CXL General Media Error (\texttt{\{ 0xfbcd0a77, 0xc260, 0x417f, \{ 0x85, 0xa9, 0x08, 0x8b, 0x16, 0x21, 0xeb, 0xa6 \}\}})\\
1962*079d581eSLawrence Tang    \item CXL DRAM Event Error (\texttt{\{ 0x601dcbb3, 0x9c06, 0x4eab, \{ 0xb8, 0xaf, 0x4e, 0x9b, 0xfb, 0x5c, 0x96, 0x24 \}\}})\\
1963*079d581eSLawrence Tang    \item CXL Memory Module Error (\texttt{\{ 0xfe927475, 0xdd59, 0x4339, \{ 0xa5, 0x86, 0x79, 0xba, 0xb1, 0x13, 0xb7, 0x74 \}\}})\\
1964*079d581eSLawrence Tang    \item CXL Physical Switch Error (\texttt{\{ 0x77cf9271, 0x9c02, 0x470b, \{ 0x9f, 0xe4, 0xbc, 0x7b, 0x75, 0xf2, 0xda, 0x97 \}\}})\\
1965*079d581eSLawrence Tang    \item CXL Virtual Switch Error (\texttt{\{ 0x40d26425, 0x3396, 0x4c4d, \{ 0xa5, 0xda, 0x3d, 0x47, 0x26, 0x3a, 0xf4, 0x25 \}\}})\\
1966*079d581eSLawrence Tang    \item CXL MLD Port Error (\texttt{\{ 0x8dc44363, 0x0c96, 0x4710, \{ 0xb7, 0xbf, 0x04, 0xbb, 0x99, 0x53, 0x4c, 0x3f \}\}})\\
1967*079d581eSLawrence Tang\end{itemize}
1968*079d581eSLawrence Tang\jsontable{table:cxlcomponenterrorsection}
1969*079d581eSLawrence TangvalidationBits & object & A CXL Component Validation structure as described in Subsection \ref{subsection:cxlcomponentvalidationstructure}.\\
1970*079d581eSLawrence Tang\hline
1971*079d581eSLawrence TangdeviceID & object & A CXL Component Device ID structure as described in Subsection \ref{subsection:cxlcomponentdeviceidstructure}.\\
1972*079d581eSLawrence Tang\hline
1973*079d581eSLawrence TangdeviceSerial & uint64 & The serial of the CXL component.\\
1974*079d581eSLawrence Tang\hline
1975*079d581eSLawrence TangcxlComponentEventLog.data & string (\textbf{optional}) & If a CXL component event log is attached (\texttt{validationBits.cxlComponentEventLogValid} is true), this is a base64-represented binary dump of the CXL Component Event Log as described within CXL Specification Section 8.2.9.1.\\
1976*079d581eSLawrence Tang\jsontableend{CXL Component Error structure field table.}
1977*079d581eSLawrence Tang
1978*079d581eSLawrence Tang% CXL Component Validation structure.
1979*079d581eSLawrence Tang\subsection{CXL Component Validation Structure}
1980*079d581eSLawrence Tang\label{subsection:cxlcomponentvalidationstructure}
1981*079d581eSLawrence TangThis structure describes which fields are valid in a CXL Component Error section (\ref{section:cxlcomponenterrorsection}) using boolean fields.
1982*079d581eSLawrence Tang\jsontable{table:cxlcomponentvalidationstructure}
1983*079d581eSLawrence TangdeviceIDValid & boolean & Whether the "deviceID" field of the CXL Component Error section (\ref{section:cxlcomponenterrorsection}) is valid.\\
1984*079d581eSLawrence Tang\hline
1985*079d581eSLawrence TangdeviceSerialValid & boolean & Whether the "deviceSerial" field of the CXL Component Error section (\ref{section:cxlcomponenterrorsection}) is valid.\\
1986*079d581eSLawrence Tang\hline
1987*079d581eSLawrence TangcxlComponentEventLogValid & boolean & Whether the "cxlComponentEventLog" field of the CXL Component Error section (\ref{section:cxlcomponenterrorsection}) is valid.\\
1988*079d581eSLawrence Tang\jsontableend{CXL Component validation structure field table.}
1989*079d581eSLawrence Tang
1990*079d581eSLawrence Tang% CXL Component Device ID structure.
1991*079d581eSLawrence Tang\subsection{CXL Component Device ID Structure}
1992*079d581eSLawrence Tang\label{subsection:cxlcomponentdeviceidstructure}
1993*079d581eSLawrence TangThis structure describes the ID of a CXL component, for use in a CXL Component Error section (\ref{section:cxlcomponenterrorsection}).
1994*079d581eSLawrence Tang\jsontable{table:cxlcomponentdeviceidstructure}
1995*079d581eSLawrence TangvendorID & uint64 & The vendor ID of the CXL component.\\
1996*079d581eSLawrence Tang\hline
1997*079d581eSLawrence TangdeviceID & uint64 & The device ID of the CXL component.\\
1998*079d581eSLawrence Tang\hline
1999*079d581eSLawrence TangfunctionNumber & uint64 & The function number of the CXL component.\\
2000*079d581eSLawrence Tang\hline
2001*079d581eSLawrence TangdeviceNumber & uint64 & The device number of the CXL component.\\
2002*079d581eSLawrence Tang\hline
2003*079d581eSLawrence TangbusNumber & uint64 & The bus of the CXL component.\\
2004*079d581eSLawrence Tang\hline
2005*079d581eSLawrence TangsegmentNumber & uint64 & The segment of the CXL component.\\
2006*079d581eSLawrence Tang\hline
2007*079d581eSLawrence TangslotNumber & uint64 & The slot number of the CXL component.\\
2008*079d581eSLawrence Tang\jsontableend{CXL Component Device ID structure field table.}
2009*079d581eSLawrence Tang
2010*079d581eSLawrence Tang\end{document}