1079d581eSLawrence Tang\documentclass{report}
2079d581eSLawrence Tang\usepackage{hyperref}
3079d581eSLawrence Tang\usepackage{adjustbox}
4079d581eSLawrence Tang\usepackage{placeins}
5079d581eSLawrence Tang
6079d581eSLawrence Tang% Metadata.
7079d581eSLawrence Tang\title{CPER-JSON Specification}
8079d581eSLawrence Tang\author{\parbox{\linewidth}{\centering%
9079d581eSLawrence TangLawrence Tang\endgraf
10079d581eSLawrence TangLawrence.Tang@arm.com\endgraf\medskip}}
11079d581eSLawrence Tang\date{\parbox{\linewidth}{\centering%
12079d581eSLawrence TangRevision v0.0.1 (\today)\endgraf
13079d581eSLawrence TangFirst revision released [DATE].}}
14079d581eSLawrence Tang
15079d581eSLawrence Tang% Commands.
16079d581eSLawrence Tang\newcommand*{\thead}[1]{\multicolumn{1}{|c|}{\bfseries #1}}
17079d581eSLawrence Tang\newcommand*{\jsontable}[1]{
18079d581eSLawrence Tang    \begin{table}[!ht]
19079d581eSLawrence Tang    \label{#1}
20079d581eSLawrence Tang    \centering
21079d581eSLawrence Tang    \begin{adjustbox}{center}
22079d581eSLawrence Tang    \begin{tabular}{|l|c|p{8cm}|}
23079d581eSLawrence Tang    \hline
24079d581eSLawrence Tang    \thead{Field Name} & \thead{Type} & \thead{Description} \\
25079d581eSLawrence Tang    \hline
26079d581eSLawrence Tang}
27079d581eSLawrence Tang\newcommand*{\jsontableend}[1]{
28079d581eSLawrence Tang    \hline
29079d581eSLawrence Tang    \end{tabular}
30079d581eSLawrence Tang    \end{adjustbox}
31079d581eSLawrence Tang    \caption{#1}
32079d581eSLawrence Tang    \label{table:#1}
33079d581eSLawrence Tang    \end{table}
34079d581eSLawrence Tang    \FloatBarrier
35079d581eSLawrence Tang}
36079d581eSLawrence Tang
37079d581eSLawrence Tang\begin{document}
38079d581eSLawrence Tang\maketitle
39079d581eSLawrence Tang\tableofcontents
40079d581eSLawrence Tang\listoftables
41079d581eSLawrence Tang
42079d581eSLawrence Tang% Introductory section.
43079d581eSLawrence Tang\chapter{Preface}
44079d581eSLawrence Tang\section{Introduction \& Summary}
45079d581eSLawrence TangThis document lays out a structure for representing UEFI CPER records, as described in UEFI Appendix N
46079d581eSLawrence 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}.},
47079d581eSLawrence Tang in a human-readable JSON format, intended to be interoperable with standard CPER binary.
48079d581eSLawrence Tang\\\\
49079d581eSLawrence TangThe C library released with this specification allows for the conversion between UEFI CPER records, an intermediate format, and the JSON structures
50079d581eSLawrence 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}.
51079d581eSLawrence Tang
52079d581eSLawrence Tang% Specification section.
53079d581eSLawrence Tang\chapter{Main Structure Specification}
54617949e4SLawrence Tang\section{Parent Structure (Type 1): Full Log}
55617949e4SLawrence Tang\label{section:parentstructuretype1}
56079d581eSLawrence TangThis structure contains descriptions of the CPER log header, as well as the section descriptors and
57617949e4SLawrence Tangsection structures themselves within arrays, representing a full CPER log. This is the structure returned by \texttt{cper\_to\_ir(FILE* cper\_file)} as JSON IR.
58079d581eSLawrence Tang
59617949e4SLawrence Tang% Parent structure (type 1) table.
60617949e4SLawrence Tang\jsontable{table:parentstructuretype1}
61079d581eSLawrence Tangheader & object & A CPER header structure as defined in Section \ref{section:headerstructure}. \\
62079d581eSLawrence Tang\hline
63079d581eSLawrence TangsectionDescriptors & array & An array of section descriptor objects as defined in Section \ref{section:sectiondescriptorstructure}. \\
64079d581eSLawrence Tang\hline
65079d581eSLawrence 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.\\
66617949e4SLawrence Tang\jsontableend{Parent structure (type 1) field table.}
67617949e4SLawrence Tang
68617949e4SLawrence Tang\section{Parent Structure (Type 2): Single Section Log}
69617949e4SLawrence Tang\label{section:parentstructuretype2}
70617949e4SLawrence TangThis structure contains a single section descriptor and section, representing a single section CPER log.
71617949e4SLawrence TangThis is the structure returned by \texttt{cper\_single\_section\_to\_ir(FILE* cper\_file)} as JSON IR.
72617949e4SLawrence Tang
73617949e4SLawrence Tang% Parent structure (type 2) table.
74617949e4SLawrence Tang\jsontable{table:parentstructuretype2}
75617949e4SLawrence TangsectionDescriptor & object & A section descriptor object as defined in Section \ref{section:sectiondescriptorstructure}. \\
76617949e4SLawrence Tang\hline
77*a10d910fSLawrence Tangsection & object & A section object as defined in Chapter \ref{chapter:sectionchapter}.\\
78617949e4SLawrence Tang\jsontableend{Parent structure (type 2) field table.}
79079d581eSLawrence Tang
80079d581eSLawrence Tang% Header structure.
81079d581eSLawrence Tang\section{Header Structure}
82079d581eSLawrence Tang\label{section:headerstructure}
83079d581eSLawrence TangThis structure describes the JSON format of the standard CPER header as defined in section N.2.1 of the
84079d581eSLawrence TangUEFI specification.
85079d581eSLawrence Tang
86079d581eSLawrence Tang% Header structure table.
87079d581eSLawrence Tang\jsontable{table:headerstructure}
88079d581eSLawrence Tangrevision & object & A CPER revision object structure as defined in Subsection \ref{subsection:revisionstructure}. \\
89079d581eSLawrence Tang\hline
90079d581eSLawrence TangsectionCount & int & The number of sections that are described by the CPER record.\\
91079d581eSLawrence Tang\hline
92079d581eSLawrence Tangseverity & object & An error severity structure as described in \ref{subsection:headererrorseveritystructure}.\\
93079d581eSLawrence Tang\hline
94079d581eSLawrence TangvalidationBits & object & A CPER header validation bitfield as described in Subsection \ref{subsection:headervalidbitfieldstructure}.\\
95079d581eSLawrence Tang\hline
96079d581eSLawrence TangrecordLength & uint64 & The total length of the binary CPER record, including the header, in bytes.\\
97079d581eSLawrence Tang\hline
98079d581eSLawrence 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.\\
99079d581eSLawrence Tang\hline
100079d581eSLawrence TangtimestampIsPrecise & boolean (\textbf{optional}) & If a timestamp is attached, indicates whether the provided timestamp is precise.\\
101079d581eSLawrence Tang\hline
102079d581eSLawrence 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.\\
103079d581eSLawrence Tang\hline
104079d581eSLawrence TangpartitionID & string (\textbf{optional}) & If validation bit is set, GUID identifying the partition on which the error occurred.\\
105079d581eSLawrence Tang\hline
106079d581eSLawrence TangcreatorID & string & A GUID identifying the creator of the error record. May be overwritten by subsequent owners of the record.\\
107079d581eSLawrence Tang\hline
108079d581eSLawrence TangnotificationType & object & A CPER notification type structure as described in Subsection \ref{subsection:notificationtypestructure}.\\
109079d581eSLawrence Tang\hline
110079d581eSLawrence TangrecordID & uint64 & A unique value which, when combined with the \texttt{creatorID} field, uniquely identifies this error record on a given system.\\
111079d581eSLawrence Tang\hline
112079d581eSLawrence Tangflags & object & A CPER header flags structure, as defined in Subsection \ref{subsection:headerflagsstructure}.\\
113079d581eSLawrence Tang\hline
114079d581eSLawrence TangpersistenceInfo & uint64 & Produced and consumed by the creator of the error record identified by \texttt{creatorID}. Format undefined.\\
115079d581eSLawrence Tang\jsontableend{Header structure field table.}
116079d581eSLawrence Tang
117079d581eSLawrence Tang% Header error severity.
118079d581eSLawrence Tang\subsection{Header Error Severity Structure}
119079d581eSLawrence Tang\label{subsection:headererrorseveritystructure}
120079d581eSLawrence TangThis structure describes the error severity of a single CPER record.
121079d581eSLawrence Tang\jsontable{table:headererrorseveritystructure}
122079d581eSLawrence Tangname & string & The human readable name of this error severity, if known. \\
123079d581eSLawrence Tang\hline
124079d581eSLawrence Tangcode & uint64 & The integer value of this error severity. \\
125079d581eSLawrence Tang\jsontableend{Header error severity structure field table.}
126079d581eSLawrence Tang
127079d581eSLawrence Tang% Header validation bitfield.
128079d581eSLawrence Tang\subsection{Header Validation Bitfield Structure}
129079d581eSLawrence Tang\label{subsection:headervalidbitfieldstructure}
130079d581eSLawrence TangThis structure describes a bitfield for validating the fields of the header of a single CPER record.
131079d581eSLawrence Tang\jsontable{table:headervalidbitfieldstructure}
132079d581eSLawrence TangplatformIDValid & boolean & Whether the "platformID" field in the header structure (\ref{section:headerstructure}) is valid. \\
133079d581eSLawrence Tang\hline
134079d581eSLawrence TangtimestampValid & boolean & Whether the "timestamp" field in the header structure (\ref{section:headerstructure}) is valid. \\
135079d581eSLawrence Tang\hline
136079d581eSLawrence TangpartitionIDValid & boolean & Whether the "partitionID" field in the header structure (\ref{section:headerstructure}) is valid.\\
137079d581eSLawrence Tang\jsontableend{Header validation bitfield structure field table.}
138079d581eSLawrence Tang
139079d581eSLawrence Tang% Header notification type.
140079d581eSLawrence Tang\subsection{Notification Type Structure}
141079d581eSLawrence Tang\label{subsection:notificationtypestructure}
142079d581eSLawrence TangThis structure describes the notification type of a single CPER record.
143079d581eSLawrence Tang\jsontable{table:notificationtypestructure}
144079d581eSLawrence 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.\\
145079d581eSLawrence Tang\hline
146079d581eSLawrence Tangtype & string & A human readable name, if available, of the notification type for the given GUID.\\
147079d581eSLawrence Tang\jsontableend{Notification type structure field table.}
148079d581eSLawrence Tang
149079d581eSLawrence Tang% Header flags.
150079d581eSLawrence Tang\subsection{Header Flags Structure}
151079d581eSLawrence Tang\label{subsection:headerflagsstructure}
152079d581eSLawrence TangThis structure describes the enabled flag on a given CPER record header.
153079d581eSLawrence Tang\jsontable{table:headerflagsstructure}
154079d581eSLawrence Tangname & string & A human readable name, if available, of this flag.\\
155079d581eSLawrence Tang\hline
156079d581eSLawrence Tangvalue & uint64 & The integer value of this flag.\\
157079d581eSLawrence Tang\jsontableend{Header flags structure field table.}
158079d581eSLawrence Tang
159079d581eSLawrence Tang%Section descriptor structure.
160079d581eSLawrence Tang\section{Section Descriptor Structure}
161079d581eSLawrence Tang\label{section:sectiondescriptorstructure}
162079d581eSLawrence 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}.
163079d581eSLawrence Tang
164079d581eSLawrence Tang%Section descriptor structure table.
165079d581eSLawrence Tang\jsontable{table:sectiondescriptorstructure}
166079d581eSLawrence TangsectionOffset & uint64 & The offset (in bytes) of the section body this section descriptor describes from the base of the record header.\\
167079d581eSLawrence Tang\hline
168079d581eSLawrence TangsectionLength & uint64 & The length (in bytes) of the section body.\\
169079d581eSLawrence Tang\hline
170079d581eSLawrence Tangrevision & object & A CPER revision structure as defined in Subsection \ref{subsection:revisionstructure}.\\
171079d581eSLawrence Tang\hline
172079d581eSLawrence TangvalidationBits.fruIDValid & boolean & Whether the "fruID" field on this section descriptor contains valid data.\\
173079d581eSLawrence TangvalidationBits.fruStringValid & boolean & Whether the "fruString" field on this section descriptor contains valid data.\\
174079d581eSLawrence Tang\hline
175079d581eSLawrence Tangflags & object & A CPER section descriptor flags structure as described in Subsection \ref{subsection:sectiondescriptorflagsstructure}.\\
176079d581eSLawrence Tang\hline
177079d581eSLawrence TangsectionType.data & string & GUID data for the type of section body.\\
178079d581eSLawrence 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.\\
179079d581eSLawrence Tang\hline
180079d581eSLawrence TangfruID & string (\textbf{optional}) & If validation field set, the FRU ID of the section reporting the error.\\
181079d581eSLawrence Tang\hline
182079d581eSLawrence Tangseverity.code & uint64 & The integer value of the severity of the described section.\\
183079d581eSLawrence Tangseverity.name & string & If available, the human readable name for the severity of the described section.\\
184079d581eSLawrence Tang\hline
185079d581eSLawrence TangfruText & string (\textbf{optional}) & If validation field set, ASCII string identifying the FRU hardware.\\
186079d581eSLawrence Tang\jsontableend{Section descriptor structure field table.}
187079d581eSLawrence Tang
188079d581eSLawrence Tang% Section descriptor flags.
189079d581eSLawrence Tang\subsection{Section Descriptor Flags Structure}
190079d581eSLawrence Tang\label{subsection:sectiondescriptorflagsstructure}
191079d581eSLawrence TangThis structure describes the enabled flags on a given CPER section descriptor.
192079d581eSLawrence Tang\jsontable{table:sectiondescriptorflagsstructure}
193079d581eSLawrence Tangprimary & boolean & If true, indicates the section body should be associated with the error condition.\\
194079d581eSLawrence Tang\hline
195079d581eSLawrence TangcontainmentWarning & boolean & If true, the error was not contained within the processor or memory heirarchy, and may have propagated elsewhere.\\
196079d581eSLawrence Tang\hline
197079d581eSLawrence Tangreset & boolean & If true, indicates the component has been reset and must be re-initialised or re-enabled by the operating system.\\
198079d581eSLawrence Tang\hline
199079d581eSLawrence TangerrorThresholdExceeded & boolean & If true, indicates the operating system may choose to discontinue use of this resource.\\
200079d581eSLawrence Tang\hline
201079d581eSLawrence 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.\\
202079d581eSLawrence Tang\hline
203079d581eSLawrence 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.\\
204079d581eSLawrence Tang\hline
205079d581eSLawrence Tangpropagated & boolean & If true, indicates that the error has been propagated due to hardware poisoning.\\
206079d581eSLawrence Tang\hline
207079d581eSLawrence Tangoverflow & boolean & If true, overflow of data structures used to manage errors has been detected. Some error records may be lost.\\
208079d581eSLawrence Tang\jsontableend{Section descriptor flags structure field table.}
209079d581eSLawrence Tang
210079d581eSLawrence Tang% Generic CPER structures.
211079d581eSLawrence Tang\section{Generic CPER Structures}
212079d581eSLawrence TangThis section describes generic CPER structures that are re-used throughout the specification.
213079d581eSLawrence Tang
214079d581eSLawrence Tang% Revision.
215079d581eSLawrence Tang\subsection{Revision Structure}
216079d581eSLawrence Tang\label{subsection:revisionstructure}
217079d581eSLawrence TangThis structure describes the revision of a single CPER record or sub-structure.
218079d581eSLawrence Tang\jsontable{table:revisionstructure}
219079d581eSLawrence Tangmajor & int & The major version number. An increase in this revision indicates the changes are not backward compatible. \\
220079d581eSLawrence Tang\hline
221079d581eSLawrence 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. \\
222079d581eSLawrence Tang\jsontableend{CPER revision structure field table.}
223079d581eSLawrence Tang
224079d581eSLawrence Tang% Generic Error Status
225079d581eSLawrence Tang\subsection{Generic Error Status Structure}
226079d581eSLawrence Tang\label{subsection:genericerrorstatusstructure}
227079d581eSLawrence TangThis structure describes the a generic CPER error status, that can be used by any CPER section.
228079d581eSLawrence Tang\jsontable{table:genericerrorstatusstructure}
229079d581eSLawrence TangerrorType.value & uint64 & The raw value of the error type.\\
230079d581eSLawrence TangerrorType.name & string & The human readable name, if available, of the error type.\\
231079d581eSLawrence TangerrorType.description & string & A human readable description, if available, of the error type.\\
232079d581eSLawrence Tang\hline
233079d581eSLawrence TangaddressSignal & boolean & Whether the error was detected on the address signals/address portion of the transaction.\\
234079d581eSLawrence Tang\hline
235079d581eSLawrence TangcontrolSignal & boolean & Whether the error was detected on the control signals/control portion of the transaction.\\
236079d581eSLawrence Tang\hline
237079d581eSLawrence TangdataSignal & boolean & Whether the error was detected on the data signals/data portion of the transaction.\\
238079d581eSLawrence Tang\hline
239079d581eSLawrence TangdetectedByResponder & boolean & Whether the error was detected by the responder of the transaction.\\
240079d581eSLawrence Tang\hline
241079d581eSLawrence TangdetectedByRequester & boolean & Whether the error was detected by the requester of the transaction.\\
242079d581eSLawrence Tang\hline
243079d581eSLawrence 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.\\
244079d581eSLawrence Tang\hline
245079d581eSLawrence TangoverflowDroppedLogs & boolean & Additional errors occurred and were not logged due to lack of resources.\\
246079d581eSLawrence Tang\jsontableend{Generic Error Status structure field table.}
247079d581eSLawrence Tang
248079d581eSLawrence Tang%Sections.
249079d581eSLawrence Tang\chapter{Section Specification}
250079d581eSLawrence Tang\label{chapter:sectionchapter}
251079d581eSLawrence TangThis chapter defines section body formats for all of the sections defined within UEFI Specification section N.2.4.
252079d581eSLawrence Tang
253079d581eSLawrence Tang% Generic processor error section.
254079d581eSLawrence Tang\section{Generic Processor Error Section}
255079d581eSLawrence Tang\label{section:genericprocessorerrorsection}
256079d581eSLawrence 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\}\}}.
257079d581eSLawrence Tang\jsontable{table:genericprocessorerrorsection}
258079d581eSLawrence TangvalidationBits & object & A Generic Processor Error Validation Structure, as described in Subsection \ref{subsection:genericprocessorvalidationstructure}.\\
259079d581eSLawrence Tang\hline
260079d581eSLawrence TangprocessorType.name & string & If available, the human readable name of the processor type.\\
261079d581eSLawrence TangprocessorType.value & uint64 & The integer value of the processor type.\\
262079d581eSLawrence Tang\hline
263079d581eSLawrence TangprocessorISA.name & string & If available, the human readable name of the processor ISA.\\
264079d581eSLawrence TangprocessorISA.value & uint64 & The integer value corresponding to the processor ISA.\\
265079d581eSLawrence Tang\hline
266079d581eSLawrence TangerrorType.name & string & If available, the human readable name of the type of processor error this section describes.\\
267079d581eSLawrence TangerrorType.value & uint64 & The integer value corresponding to the processor error type.\\
268079d581eSLawrence Tang\hline
269079d581eSLawrence Tangoperation.name & string & If available, the human readable name of the operation.\\
270079d581eSLawrence Tangoperation.value & uint64 & The integer value corresponding to the operation.\\
271079d581eSLawrence Tang\hline
272079d581eSLawrence Tangflags & object & Flag information for the Generic Processor Error as described in Subsection \ref{subsection:genericprocessorflagsstructure}.\\
273079d581eSLawrence Tang\hline
274079d581eSLawrence Tanglevel & int & The level of the structure at which the error occurred.\\
275079d581eSLawrence Tang\hline
276079d581eSLawrence TangcpuVersionInfo & uint64 & The CPU version information as reported by CPUID with EAX=1. On ARM, this is MIDR\_EL1.\\
277079d581eSLawrence Tang\hline
278079d581eSLawrence TangcpuBrandString & string & The ASCII brand string of the CPU. This field is optional on ARM.\\
279079d581eSLawrence Tang\hline
280079d581eSLawrence TangprocessorID & uint64 & The unique identifier of the logical processor. On ARM, this is MPIDR\_EL1.\\
281079d581eSLawrence Tang\hline
282079d581eSLawrence TangtargetAddress & uint64 & The target address associated with the error.\\
283079d581eSLawrence Tang\hline
284079d581eSLawrence TangrequestorID & uint64 & ID of the requestor associated with the error.\\
285079d581eSLawrence Tang\hline
286079d581eSLawrence TangresponderID & uint64 & ID of the responder associated with the error.\\
287079d581eSLawrence Tang\hline
288079d581eSLawrence TanginstructionIP & uint64 & Identifies the instruction pointer at the point of error.\\
289079d581eSLawrence Tang\jsontableend{Generic Processor Error structure field table.}
290079d581eSLawrence Tang
291079d581eSLawrence Tang% Generic processor error validation structure.
292079d581eSLawrence Tang\subsection{Generic Processor Error Validation Structure}
293079d581eSLawrence Tang\label{subsection:genericprocessorvalidationstructure}
294079d581eSLawrence TangThis structure describes the valdation bits structure of a General Processor Error CPER section.
295079d581eSLawrence Tang\jsontable{table:genericprocessorvalidationstructure}
296079d581eSLawrence TangprocessorTypeValid & boolean & Whether the "processorType" field of the Generic Processor Error section (\ref{section:genericprocessorerrorsection}) is valid.\\
297079d581eSLawrence Tang\hline
298079d581eSLawrence TangprocessorISAValid & boolean & Whether the "processorISA" field of the Generic Processor Error section (\ref{section:genericprocessorerrorsection}) is valid.\\
299079d581eSLawrence Tang\hline
300d34f2b11SLawrence TangprocessorErrorTypeValid & boolean & Whether the "errorType" field of the Generic Processor Error section (\ref{section:genericprocessorerrorsection}) is valid.\\
301079d581eSLawrence Tang\hline
302079d581eSLawrence TangoperationValid & boolean & Whether the "operation" field of the Generic Processor Error section (\ref{section:genericprocessorerrorsection}) is valid.\\
303079d581eSLawrence Tang\hline
304079d581eSLawrence TangflagsValid & boolean & Whether the "flags" field of the Generic Processor Error section (\ref{section:genericprocessorerrorsection}) is valid.\\
305079d581eSLawrence Tang\hline
306079d581eSLawrence TanglevelValid & boolean & Whether the "levelValid" field of the Generic Processor Error section (\ref{section:genericprocessorerrorsection}) is valid.\\
307079d581eSLawrence Tang\hline
308079d581eSLawrence TangcpuVersionValid & boolean & Whether the "cpuVersion" field of the Generic Processor Error section (\ref{section:genericprocessorerrorsection}) is valid.\\
309079d581eSLawrence Tang\hline
310079d581eSLawrence TangcpuBrandInfoValid & boolean & Whether the "cpuBrandInfo" field of the Generic Processor Error section (\ref{section:genericprocessorerrorsection}) is valid.\\
311079d581eSLawrence Tang\hline
312079d581eSLawrence TangcpuIDValid & boolean & Whether the "cpuID" field of the Generic Processor Error section (\ref{section:genericprocessorerrorsection}) is valid.\\
313079d581eSLawrence Tang\hline
314079d581eSLawrence TangtargetAddressValid & boolean & Whether the "targetAddress" field of the Generic Processor Error section (\ref{section:genericprocessorerrorsection}) is valid.\\
315079d581eSLawrence Tang\hline
316079d581eSLawrence TangrequestorIDValid & boolean & Whether the "requestorID" field of the Generic Processor Error section (\ref{section:genericprocessorerrorsection}) is valid.\\
317079d581eSLawrence Tang\hline
318079d581eSLawrence TangresponderIDValid & boolean & Whether the "responderID" field of the Generic Processor Error section (\ref{section:genericprocessorerrorsection}) is valid.\\
319079d581eSLawrence Tang\hline
320079d581eSLawrence TanginstructionIPValid & boolean & Whether the "instructionIP" field of the Generic Processor Error section (\ref{section:genericprocessorerrorsection}) is valid.\\
321079d581eSLawrence Tang\jsontableend{Generic Processor Error validation structure field table.}
322079d581eSLawrence Tang
323079d581eSLawrence Tang% Generic processor error flags structure.
324079d581eSLawrence Tang\subsection{Generic Processor Error Flags Structure}
325079d581eSLawrence Tang\label{subsection:genericprocessorflagsstructure}
326079d581eSLawrence TangThis structure describes the flags structure of a General Processor Error CPER section.
327079d581eSLawrence Tang\jsontable{table:genericprocessorflagsstructure}
328079d581eSLawrence Tangrestartable & boolean & Whether program execution can be restarted reliably after the error.\\
329079d581eSLawrence Tang\hline
330079d581eSLawrence TangpreciseIP & boolean & Whether the instruction IP captured is directly associated with the error.\\
331079d581eSLawrence Tang\hline
332079d581eSLawrence Tangoverflow & boolean & Whether a machine check overflow occurred (multiple errors occurred at once).\\
333079d581eSLawrence Tang\hline
334079d581eSLawrence Tangcorrected & boolean & Whether the error was corrected by hardware/firmware.\\
335079d581eSLawrence Tang\jsontableend{Generic Processor Error flags structure field table.}
336079d581eSLawrence Tang
337079d581eSLawrence Tang% IA32/x64 error section.
338079d581eSLawrence Tang\section{IA32/x64 Processor Error Section}
339079d581eSLawrence Tang\label{section:ia32x64errorsection}
340079d581eSLawrence 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\}\}}.
341079d581eSLawrence Tang\jsontable{table:genericprocessorerrorsection}
342079d581eSLawrence TangvalidationBits & object & IA32/x64 Processor Error Validation Structure as described in Subsection \ref{subsection:ia32x64processorflagsstructure}.\\
343079d581eSLawrence Tang\hline
344079d581eSLawrence TanglocalAPICID & uint64 & The APIC ID of the processor.\\
345079d581eSLawrence Tang\hline
346079d581eSLawrence TangcpuidInfo & object & IA32/x64 CPUINFO Structure as defined in Subsection \ref{subsection:ia32x64cpuinfostructure}.\\
347079d581eSLawrence Tang\hline
348079d581eSLawrence TangprocessorErrorInfo & array & Array of IA32/x64 Processor Error Info Structures as described in Subsection \ref{subsection:ia32x64processorerrorinfostructure}.\\
349079d581eSLawrence Tang\hline
350079d581eSLawrence TangprocessorContextInfo & array & Array of IA32/x64 Processor Context Info Structures as described in Subsection \ref{subsection:ia32x64processorcontextinfostructure}.\\
351079d581eSLawrence Tang\jsontableend{IA32/x64 Processor Error structure field table.}
352079d581eSLawrence Tang
353079d581eSLawrence Tang% IA32/x64 validation bitfield structure.
354079d581eSLawrence Tang\subsection{IA32/x64 Processor Error Validation Structure}
355079d581eSLawrence Tang\label{subsection:ia32x64processorflagsstructure}
356079d581eSLawrence TangThis structure describes the validation bitfield structure of an IA32/x64 Error CPER section.
357079d581eSLawrence Tang\jsontable{table:ia32x64processorflagsstructure}
358079d581eSLawrence TanglocalAPICIDValid & boolean & Whether the "localAPICID" field of the IA32/x64 Error section (\ref{section:ia32x64errorsection}) is valid.\\
359079d581eSLawrence Tang\hline
360079d581eSLawrence TangcpuIDInfoValid & boolean & Whether the "cpuidInfo" field of the IA32/x64 Error section (\ref{section:ia32x64errorsection}) is valid.\\
361079d581eSLawrence Tang\hline
362079d581eSLawrence TangprocessorErrorInfoNum & int & The number of IA32/x64 Processor Error Info Structures (\ref{subsection:ia32x64processorerrorinfostructure}) that are included with this error section.\\
363079d581eSLawrence Tang\hline
364079d581eSLawrence TangprocessorContextInfoNum & int & The number of IA32/x64 Processor Context Info Structures (\ref{subsection:ia32x64processorcontextinfostructure}) that are included with this error section.\\
365079d581eSLawrence Tang\jsontableend{IA32/x64 Processor Error validation structure field table.}
366079d581eSLawrence Tang
367079d581eSLawrence Tang% IA32/x64 CPUINFO structure.
368079d581eSLawrence Tang\subsection{IA32/x64 CPUINFO Structure}
369079d581eSLawrence Tang\label{subsection:ia32x64cpuinfostructure}
370079d581eSLawrence TangThis structure describes the CPUINFO structure of an IA32/x64 Error CPER section.
371079d581eSLawrence Tang\jsontable{table:ia32x64cpuinfostructure}
372079d581eSLawrence Tangeax & uint64 & Value of the EAX register resulting from a call to CPUID with EAX=1.\\
373079d581eSLawrence Tang\hline
374079d581eSLawrence Tangebx & uint64 & Value of the EBX register resulting from a call to CPUID with EAX=1.\\
375079d581eSLawrence Tang\hline
376079d581eSLawrence Tangecx & uint64 & Value of the ECX register resulting from a call to CPUID with EAX=1.\\
377079d581eSLawrence Tang\hline
378079d581eSLawrence Tangedx & uint64 & Value of the EDX register resulting from a call to CPUID with EAX=1.\\
379079d581eSLawrence Tang\jsontableend{IA32/x64 CPUINFO structure field table.}
380079d581eSLawrence Tang
381079d581eSLawrence Tang% IA32/x64 Processor Error Info structure.
382079d581eSLawrence Tang\subsection{IA32/x64 Processor Error Info Structure}
383079d581eSLawrence Tang\label{subsection:ia32x64processorerrorinfostructure}
384079d581eSLawrence TangThis structure describes a single IA32/x64 Processor Error Info sub-section, which is part of the larger IA32/x64 record (\ref{section:ia32x64errorsection}).
385079d581eSLawrence Tang\jsontable{table:ia32x64processorerrorinfostructure}
3863592da71SLawrence Tangtype.guid & 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.\\
3873592da71SLawrence Tangtype.name & string & The human readable name, if available, of the type of processor error defined in this structure.\\
388079d581eSLawrence Tang\hline
389079d581eSLawrence TangvalidationBits & object & An IA32/x64 Processor Error Info Validation structure, as defined in Subsection \ref{subsection:ia32x64processorerrorinfovalidationstructure}.\\
390079d581eSLawrence Tang\hline
391079d581eSLawrence 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.\\
392079d581eSLawrence Tang\hline
393079d581eSLawrence TangtargetAddressID & uint64 & Identifies the target address associated with the error.\\
394079d581eSLawrence Tang\hline
395079d581eSLawrence TangrequestorID & uint64 & Identifies the requestor associated with the error.\\
396079d581eSLawrence Tang\hline
397079d581eSLawrence TangresponderID & uint64 & Identifies the responder associated with the error.\\
398079d581eSLawrence Tang\hline
399079d581eSLawrence TanginstructionPointer & uint64 & Identifies the instruction executing when the error occurred.\\
400079d581eSLawrence Tang\jsontableend{IA32/x64 Processor Error Info structure field table.}
401079d581eSLawrence Tang
402079d581eSLawrence Tang% IA32/x64 Processor Error Info Validation structure.
403079d581eSLawrence Tang\subsection{IA32/x64 Processor Error Info Validation Structure}
404079d581eSLawrence Tang\label{subsection:ia32x64processorerrorinfovalidationstructure}
405079d581eSLawrence TangThis structure describes a single IA32/x64 Processor Error Info structure's valid fields, as a set of boolean values.
406079d581eSLawrence Tang\jsontable{table:ia32x64processorerrorinfovalidationstructure}
407079d581eSLawrence TangcheckInfoValid & boolean & Whether the "checkInfo" field in the Processor Error Info structure (\ref{subsection:ia32x64processorerrorinfostructure}) is valid.\\
408079d581eSLawrence Tang\hline
409079d581eSLawrence TangtargetAddressIDValid & boolean & Whether the "targetAddressID" field in the Processor Error Info structure (\ref{subsection:ia32x64processorerrorinfostructure}) is valid.\\
410079d581eSLawrence Tang\hline
411079d581eSLawrence TangrequestorIDValid & boolean & Whether the "requestorID" field in the Processor Error Info structure (\ref{subsection:ia32x64processorerrorinfostructure}) is valid.\\
412079d581eSLawrence Tang\hline
413079d581eSLawrence TangresponderIDValid & boolean & Whether the "responderID" field in the Processor Error Info structure (\ref{subsection:ia32x64processorerrorinfostructure}) is valid.\\
414079d581eSLawrence Tang\hline
415079d581eSLawrence TanginstructionPointerValid & boolean & Whether the "instructionPointer" field in the Processor Error Info structure (\ref{subsection:ia32x64processorerrorinfostructure}) is valid.\\
416079d581eSLawrence Tang\hline
417079d581eSLawrence Tang\jsontableend{IA32/x64 Processor Error Info validation structure field table.}
418079d581eSLawrence Tang
419079d581eSLawrence Tang% IA32/x64 Processor Error Check Info (Cache/TLB Error)
420079d581eSLawrence Tang\subsection{IA32/x64 Processor Error Check Info (Cache/TLB Error) Structure}
421079d581eSLawrence Tang\label{subsection:ia32x64processorerrorcheckinfocachetlbstructure}
422079d581eSLawrence TangThis structure describes check info for an IA32/x64 Processor Error Info structure (\ref{subsection:ia32x64processorerrorinfostructure}) stemming from a cache or TLB error.
423079d581eSLawrence TangThe GUIDs for cache and TLB error check info structures can be found in the library repository's \texttt{edk/Cper.h}.
424079d581eSLawrence Tang\jsontable{table:ia32x64processorerrorcheckinfocachetlbstructure}
425079d581eSLawrence TangvalidationBits & object & An IA32/x64 Processor Error Check Info (Cache/TLB/Bus) Validation structure, as defined in Subsection \ref{subsection:ia32x64processorerrorcheckinfovalidationstructure}.\\
426079d581eSLawrence Tang\hline
427079d581eSLawrence TangtransactionType.value & uint64 & The raw value of the type of cache/TLB error that occurred.\\
428079d581eSLawrence TangtransactionType.name & string & The human readable name, if available, of the type of cache/TLB error that occurred.\\
429079d581eSLawrence Tang\hline
430079d581eSLawrence Tangoperation.value & uint64 & The raw value of the type of cache/TLB operation that caused the error.\\
431079d581eSLawrence Tangoperation.name & string & The human readable name, if available, of the type of cache/TLB operation that caused the error.\\
432079d581eSLawrence Tang\hline
433079d581eSLawrence Tanglevel & uint64 & The cache/TLB level at which the error occurred.\\
434079d581eSLawrence Tang\hline
435079d581eSLawrence TangprocessorContextCorrupt & boolean & Whether the processor context might have been corrupted.\\
436079d581eSLawrence Tang\hline
437079d581eSLawrence Tanguncorrected & boolean & Whether the error remained uncorrected.\\
438079d581eSLawrence Tang\hline
439079d581eSLawrence TangpreciseIP & boolean & Whether the instruction pointed pushed onto the stack is directly associated with the error.\\
440079d581eSLawrence Tang\hline
441079d581eSLawrence TangrestartableIP & boolean & Whether program execution can be restarted reliably at the instruction pointer pushed onto the stack.\\
442079d581eSLawrence Tang\hline
443079d581eSLawrence Tangoverflow & boolean & Whether an error overflow occurred (multiple errors within a short timeframe may cause this, can indicate loss of data).\\
444079d581eSLawrence Tang\jsontableend{IA32/x64 Processor Error Check Info (Cache/TLB Error) structure field table.}
445079d581eSLawrence Tang
446079d581eSLawrence Tang% IA32/x64 Processor Error Check Info (Bus Error)
447079d581eSLawrence Tang\subsection{IA32/x64 Processor Error Check Info (Bus Error) Structure}
448079d581eSLawrence Tang\label{subsection:ia32x64processorerrorcheckinfobusstructure}
449079d581eSLawrence TangThis structure describes check info for an IA32/x64 Processor Error Info structure (\ref{subsection:ia32x64processorerrorinfostructure}) stemming from a bus error.
450079d581eSLawrence TangThe GUID for bus error check info structures can be found in the library repository's \texttt{edk/Cper.h}.
451079d581eSLawrence Tang\jsontable{table:ia32x64processorerrorcheckinfobusstructure}
452079d581eSLawrence TangvalidationBits & object & An IA32/x64 Processor Error Check Info (Cache/TLB/Bus) Validation structure, as defined in Subsection \ref{subsection:ia32x64processorerrorcheckinfovalidationstructure}.\\
453079d581eSLawrence Tang\hline
454079d581eSLawrence TangtransactionType.value & uint64 & The raw value of the type of bus error that occurred.\\
455079d581eSLawrence TangtransactionType.name & string & The human readable name, if available, of the type of bus error that occurred.\\
456079d581eSLawrence Tang\hline
457079d581eSLawrence Tangoperation.value & uint64 & The raw value of the type of bus operation that caused the error.\\
458079d581eSLawrence Tangoperation.name & string & The human readable name, if available, of the type of bus operation that caused the error.\\
459079d581eSLawrence Tang\hline
460079d581eSLawrence Tanglevel & uint64 & The bus heirarchy level at which the error occurred.\\
461079d581eSLawrence Tang\hline
462079d581eSLawrence TangprocessorContextCorrupt & boolean & Whether the processor context might have been corrupted.\\
463079d581eSLawrence Tang\hline
464079d581eSLawrence Tanguncorrected & boolean & Whether the error remained uncorrected.\\
465079d581eSLawrence Tang\hline
466079d581eSLawrence TangpreciseIP & boolean & Whether the instruction pointed pushed onto the stack is directly associated with the error.\\
467079d581eSLawrence Tang\hline
468079d581eSLawrence TangrestartableIP & boolean & Whether program execution can be restarted reliably at the instruction pointer pushed onto the stack.\\
469079d581eSLawrence Tang\hline
470079d581eSLawrence Tangoverflow & boolean & Whether an error overflow occurred (multiple errors within a short timeframe may cause this, can indicate loss of data).\\
471079d581eSLawrence Tang\hline
472079d581eSLawrence TangparticipationType.value & uint64 & The raw value of the type of participation.\\
473079d581eSLawrence TangparticipationType.name & string & The human readable name, if available, of the type of participation.\\
474079d581eSLawrence Tang\hline
475079d581eSLawrence TangtimedOut & boolean & Whether the request timed out.\\
476079d581eSLawrence Tang\hline
477079d581eSLawrence TangaddressSpace.value & uint64 & The raw value of the address space the error was in.\\
478079d581eSLawrence TangaddressSpace.name  & string & The human readable name, if available, of the address space the error was in.\\
479079d581eSLawrence Tang\jsontableend{IA32/x64 Processor Error Check Info (Bus Error) structure field table.}
480079d581eSLawrence Tang
481079d581eSLawrence Tang% IA32/x64 Processor Error Check Info (MS Check Error)
482079d581eSLawrence Tang\subsection{IA32/x64 Processor Error Check Info (MS Check Error) Structure}
483079d581eSLawrence Tang\label{subsection:ia32x64processorerrorcheckinfomscheckstructure}
484079d581eSLawrence TangThis structure describes check info for an IA32/x64 Processor Error Info structure (\ref{subsection:ia32x64processorerrorinfostructure}) stemming from an MS check error.
485079d581eSLawrence TangThe GUID for MS check check info structures can be found in the library repository's \texttt{edk/Cper.h}.
486079d581eSLawrence Tang\jsontable{table:ia32x64processorerrorcheckinfomscheckstructure}
487079d581eSLawrence TangvalidationBits & object & An IA32/x64 Processor Error Check Info (MS Check) Validation structure, as defined in Subsection \ref{subsection:ia32x64processorerrorcheckinfomscheckvalidationstructure}.\\
488079d581eSLawrence Tang\hline
489079d581eSLawrence TangerrorType.value & uint64 & The raw value of the type of operation that caused the error.\\
490079d581eSLawrence TangerrorType.name & string & The human readable name, if available, of the type of operation that caused the error.\\
491079d581eSLawrence Tang\hline
492079d581eSLawrence TangprocessorContextCorrupt & boolean & Whether the processor context might have been corrupted.\\
493079d581eSLawrence Tang\hline
494079d581eSLawrence Tanguncorrected & boolean & Whether the error remained uncorrected.\\
495079d581eSLawrence Tang\hline
496079d581eSLawrence TangpreciseIP & boolean & Whether the instruction pointed pushed onto the stack is directly associated with the error.\\
497079d581eSLawrence Tang\hline
498079d581eSLawrence TangrestartableIP & boolean & Whether program execution can be restarted reliably at the instruction pointer pushed onto the stack.\\
499079d581eSLawrence Tang\hline
500079d581eSLawrence Tangoverflow & boolean & Whether an error overflow occurred (multiple errors within a short timeframe may cause this, can indicate loss of data).\\
501079d581eSLawrence Tang\jsontableend{IA32/x64 Processor Error Check Info (MS Check Error) structure field table.}
502079d581eSLawrence Tang
503079d581eSLawrence Tang% IA32/x64 Processor Error Check Info Validation structure.
504079d581eSLawrence Tang\subsection{IA32/x64 Processor Error Check Info (Cache/TLB/Bus) Validation Structure}
505079d581eSLawrence Tang\label{subsection:ia32x64processorerrorcheckinfovalidationstructure}
506079d581eSLawrence 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.
507079d581eSLawrence Tang\jsontable{table:ia32x64processorerrorcheckinfovalidationstructure}
508079d581eSLawrence TangtransactionTypeValid & boolean & Whether the "transactionType" field in a Processor Error Check Info structure is valid.\\
509079d581eSLawrence Tang\hline
510079d581eSLawrence TangoperationValid & boolean & Whether the "operation" field in a Processor Error Check Info structure is valid.\\
511079d581eSLawrence Tang\hline
512079d581eSLawrence TanglevelValid & boolean & Whether the "level" field in a Processor Error Check Info structure is valid.\\
513079d581eSLawrence Tang\hline
514079d581eSLawrence TangprocessorContextCorruptValid & boolean & Whether the "processorContextCorrupt" field in a Processor Error Check Info structure is valid.\\
515079d581eSLawrence Tang\hline
516079d581eSLawrence TanguncorrectedValid & boolean & Whether the "uncorrected" field in a Processor Error Check Info structure is valid.\\
517079d581eSLawrence Tang\hline
518079d581eSLawrence TangpreciseIPValid & boolean & Whether the "preciseIP" field in a Processor Error Check Info structure is valid.\\
519079d581eSLawrence Tang\hline
520079d581eSLawrence TangrestartableIPValid & boolean & Whether the "restartableIP" field in a Processor Error Check Info structure is valid.\\
521079d581eSLawrence Tang\hline
522079d581eSLawrence TangoverflowValid & boolean & Whether the "overflow" field in a Processor Error Check Info structure is valid.\\
523079d581eSLawrence Tang\hline
524079d581eSLawrence 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.}\\
525079d581eSLawrence Tang\hline
526079d581eSLawrence 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.}\\
527d34f2b11SLawrence Tang\hline
528d34f2b11SLawrence TangaddressSpaceValid & boolean (\textbf{optional}) & Whether the "addressSpace" 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.}\\
529079d581eSLawrence Tang\jsontableend{IA32/x64 Processor Error Check Info (Cache/TLB/Bus) validation structure field table.}
530079d581eSLawrence Tang
531079d581eSLawrence Tang% IA32/x64 Processor Error Check Info (MS Check) Validation structure.
532079d581eSLawrence Tang\subsection{IA32/x64 Processor Error Check Info (MS Check) Validation Structure}
533079d581eSLawrence Tang\label{subsection:ia32x64processorerrorcheckinfomscheckvalidationstructure}
534079d581eSLawrence 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.
535079d581eSLawrence Tang\jsontable{table:ia32x64processorerrorcheckinfomscheckvalidationstructure}
536079d581eSLawrence TangerrorTypeValid & boolean & Whether the "transactionType" field in a Processor Error Check Info (MS Check) (\ref{subsection:ia32x64processorerrorcheckinfomscheckstructure}) structure is valid.\\
537079d581eSLawrence Tang\hline
538079d581eSLawrence TangprocessorContextCorruptValid & boolean & Whether the "processorContextCorrupt" field in a Processor Error Check Info (MS Check) (\ref{subsection:ia32x64processorerrorcheckinfomscheckstructure}) structure is valid.\\
539079d581eSLawrence Tang\hline
540079d581eSLawrence TanguncorrectedValid & boolean & Whether the "uncorrected" field in a Processor Error Check Info (MS Check) (\ref{subsection:ia32x64processorerrorcheckinfomscheckstructure}) structure is valid.\\
541079d581eSLawrence Tang\hline
542079d581eSLawrence TangpreciseIPValid & boolean & Whether the "preciseIP" field in a Processor Error Check Info (MS Check) (\ref{subsection:ia32x64processorerrorcheckinfomscheckstructure}) structure is valid.\\
543079d581eSLawrence Tang\hline
544079d581eSLawrence TangrestartableIPValid & boolean & Whether the "restartableIP" field in a Processor Error Check Info (MS Check) (\ref{subsection:ia32x64processorerrorcheckinfomscheckstructure}) structure is valid.\\
545079d581eSLawrence Tang\hline
546079d581eSLawrence TangoverflowValid & boolean & Whether the "overflow" field in a Processor Error Check Info (MS Check) (\ref{subsection:ia32x64processorerrorcheckinfomscheckstructure}) structure is valid.\\
547079d581eSLawrence Tang\jsontableend{IA32/x64 Processor Error Check Info (MS Check) validation structure field table.}
548079d581eSLawrence Tang
549079d581eSLawrence Tang% IA32/x64 Processor Context Info structure.
550079d581eSLawrence Tang\subsection{IA32/x64 Processor Context Info Structure}
551079d581eSLawrence Tang\label{subsection:ia32x64processorcontextinfostructure}
552079d581eSLawrence TangThis structure describes a single IA32/x64 Processor Context Info sub-section, which is part of the larger IA32/x64 record (\ref{section:ia32x64errorsection}).
553079d581eSLawrence Tang\jsontable{table:ia32x64processorcontextinfostructure}
554079d581eSLawrence TangregisterContextType.value & uint64 & The raw value of the type of processor context state being reported.\\
555079d581eSLawrence TangregisterContextType.name & string & The human readable name, if available, of the type of processor context state being reported.\\
556079d581eSLawrence Tang\hline
557079d581eSLawrence TangregisterArraySize & uint64 & The total size of the array for the data type being reported, in bytes.\\
558079d581eSLawrence Tang\hline
559079d581eSLawrence TangmsrAddress & uint64 & The starting MSR address. Valid when the \texttt{registerContextType.value} field is "1" (MSR Registers).\\
560079d581eSLawrence Tang\hline
561079d581eSLawrence TangmmRegisterAddress & uint64 & The starting memory address for when the \texttt{registerContextType.value} field is "7" (Memory Mapped Registers).\\
562079d581eSLawrence Tang\hline
563079d581eSLawrence 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}.\\
564079d581eSLawrence Tang\jsontableend{IA32/x64 Processor Context Info structure field table.}
565079d581eSLawrence Tang
566079d581eSLawrence Tang% IA32/x64 IA32 Register State structure
567079d581eSLawrence Tang\subsection{IA32/x64 IA32 Register State Structure}
568079d581eSLawrence Tang\label{subsection:ia32x64ia32registerstatestructure}
569079d581eSLawrence 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".
570079d581eSLawrence Tang\jsontable{table:ia32x64ia32registerstatestructure}
571079d581eSLawrence Tangeax & uint64 & The EAX register. Real maximum is \texttt{UINT32}, null extended to \texttt{UINT64}.\\
572079d581eSLawrence Tang\hline
573079d581eSLawrence Tangebx & uint64 & The EBX register. Real maximum is \texttt{UINT32}, null extended to \texttt{UINT64}.\\
574079d581eSLawrence Tang\hline
575079d581eSLawrence Tangecx & uint64 & The ECX register. Real maximum is \texttt{UINT32}, null extended to \texttt{UINT64}.\\
576079d581eSLawrence Tang\hline
577079d581eSLawrence Tangedx & uint64 & The EDX register. Real maximum is \texttt{UINT32}, null extended to \texttt{UINT64}.\\
578079d581eSLawrence Tang\hline
579079d581eSLawrence Tangesi & uint64 & The ESI register. Real maximum is \texttt{UINT32}, null extended to \texttt{UINT64}.\\
580079d581eSLawrence Tang\hline
581079d581eSLawrence Tangedi & uint64 & The EDI register. Real maximum is \texttt{UINT32}, null extended to \texttt{UINT64}.\\
582079d581eSLawrence Tang\hline
583079d581eSLawrence Tangebp & uint64 & The EBP register. Real maximum is \texttt{UINT32}, null extended to \texttt{UINT64}.\\
584079d581eSLawrence Tang\hline
585079d581eSLawrence Tangesp & uint64 & The ESP register. Real maximum is \texttt{UINT32}, null extended to \texttt{UINT64}.\\
586079d581eSLawrence Tang\hline
587079d581eSLawrence Tangcs & uint64 & The CS register. Real maximum is \texttt{UINT32}, null extended to \texttt{UINT64}.\\
588079d581eSLawrence Tang\hline
589079d581eSLawrence Tangds & uint64 & The DS register. Real maximum is \texttt{UINT32}, null extended to \texttt{UINT64}.\\
590079d581eSLawrence Tang\hline
591079d581eSLawrence Tangss & uint64 & The SS register. Real maximum is \texttt{UINT32}, null extended to \texttt{UINT64}.\\
592079d581eSLawrence Tang\hline
593079d581eSLawrence Tanges & uint64 & The ES register. Real maximum is \texttt{UINT32}, null extended to \texttt{UINT64}.\\
594079d581eSLawrence Tang\hline
595079d581eSLawrence Tangfs & uint64 & The FS register. Real maximum is \texttt{UINT32}, null extended to \texttt{UINT64}.\\
596079d581eSLawrence Tang\hline
597079d581eSLawrence Tanggs & uint64 & The GS register. Real maximum is \texttt{UINT32}, null extended to \texttt{UINT64}.\\
598079d581eSLawrence Tang\hline
599079d581eSLawrence Tangeflags & uint64 & The EFLAGS register. Real maximum is \texttt{UINT32}, null extended to \texttt{UINT64}.\\
600079d581eSLawrence Tang\hline
601079d581eSLawrence Tangeip & uint64 & The EIP register. Real maximum is \texttt{UINT32}, null extended to \texttt{UINT64}.\\
602079d581eSLawrence Tang\hline
603079d581eSLawrence Tangcr0 & uint64 & The CR0 register. Real maximum is \texttt{UINT32}, null extended to \texttt{UINT64}.\\
604079d581eSLawrence Tang\hline
605079d581eSLawrence Tangcr1 & uint64 & The CR1 register. Real maximum is \texttt{UINT32}, null extended to \texttt{UINT64}.\\
606079d581eSLawrence Tang\hline
607079d581eSLawrence Tangcr2 & uint64 & The CR2 register. Real maximum is \texttt{UINT32}, null extended to \texttt{UINT64}.\\
608079d581eSLawrence Tang\hline
609079d581eSLawrence Tangcr3 & uint64 & The CR3 register. Real maximum is \texttt{UINT32}, null extended to \texttt{UINT64}.\\
610079d581eSLawrence Tang\hline
611079d581eSLawrence Tangcr4 & uint64 & The CR4 register. Real maximum is \texttt{UINT32}, null extended to \texttt{UINT64}.\\
612079d581eSLawrence Tang\hline
613079d581eSLawrence Tanggdtr & uint64 & The GDTR register.\\
614079d581eSLawrence Tang\hline
615079d581eSLawrence Tangidtr & uint64 & The IDTR register.\\
616079d581eSLawrence Tang\hline
617079d581eSLawrence Tangldtr & uint64 & The LDTR register.\\
618079d581eSLawrence Tang\hline
619079d581eSLawrence Tangtr & uint64 & The TR register. Real maximum is \texttt{UINT32}, null extended to \texttt{UINT64}.\\
620079d581eSLawrence Tang\jsontableend{IA32/x64 IA32 Register State structure field table.}
621079d581eSLawrence Tang
622079d581eSLawrence Tang% IA32/x64 x64 Register State structure
623079d581eSLawrence Tang\subsection{IA32/x64 x64 Register State Structure}
624079d581eSLawrence Tang\label{subsection:ia32x64x64registerstatestructure}
625079d581eSLawrence 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".
626079d581eSLawrence Tang\jsontable{table:ia32x64x64registerstatestructure}
627079d581eSLawrence Tangrax & uint64 & The RAX register.\\
628079d581eSLawrence Tang\hline
629079d581eSLawrence Tangrbx & uint64 & The RBX register.\\
630079d581eSLawrence Tang\hline
631079d581eSLawrence Tangrcx & uint64 & The RCX register.\\
632079d581eSLawrence Tang\hline
633079d581eSLawrence Tangrdx & uint64 & The RDX register.\\
634079d581eSLawrence Tang\hline
635079d581eSLawrence Tangrsi & uint64 & The RSI register.\\
636079d581eSLawrence Tang\hline
637079d581eSLawrence Tangrdi & uint64 & The RDI register.\\
638079d581eSLawrence Tang\hline
639079d581eSLawrence Tangrbp & uint64 & The RBP register.\\
640079d581eSLawrence Tang\hline
641079d581eSLawrence Tangrsp & uint64 & The RSP register.\\
642079d581eSLawrence Tang\hline
643079d581eSLawrence Tangr8 & uint64 & The R8 register.\\
644079d581eSLawrence Tang\hline
645079d581eSLawrence Tangr9 & uint64 & The R9 register.\\
646079d581eSLawrence Tang\hline
647079d581eSLawrence Tangr10 & uint64 & The R10 register.\\
648079d581eSLawrence Tang\hline
649079d581eSLawrence Tangr11 & uint64 & The R11 register.\\
650079d581eSLawrence Tang\hline
651079d581eSLawrence Tangr12 & uint64 & The R12 register.\\
652079d581eSLawrence Tang\hline
653079d581eSLawrence Tangr13 & uint64 & The R13 register.\\
654079d581eSLawrence Tang\hline
655079d581eSLawrence Tangr14 & uint64 & The R14 register.\\
656079d581eSLawrence Tang\hline
657079d581eSLawrence Tangr15 & uint64 & The R15 register.\\
658079d581eSLawrence Tang\hline
659079d581eSLawrence Tangcs & uint64 & The CS register.\\
660079d581eSLawrence Tang\hline
661079d581eSLawrence Tangds & uint64 & The DS register.\\
662079d581eSLawrence Tang\hline
663079d581eSLawrence Tangss & uint64 & The SS register.\\
664079d581eSLawrence Tang\hline
665079d581eSLawrence Tanges & uint64 & The ES register.\\
666079d581eSLawrence Tang\hline
667079d581eSLawrence Tangfs & uint64 & The FS register.\\
668079d581eSLawrence Tang\hline
669079d581eSLawrence Tanggs & uint64 & The GS register.\\
670079d581eSLawrence Tang\hline
671079d581eSLawrence Tangrflags & uint64 & The RFLAGS register.\\
672079d581eSLawrence Tang\hline
673079d581eSLawrence Tangeip & uint64 & The EIP register.\\
674079d581eSLawrence Tang\hline
675079d581eSLawrence Tangcr0 & uint64 & The CR0 register.\\
676079d581eSLawrence Tang\hline
677079d581eSLawrence Tangcr1 & uint64 & The CR1 register.\\
678079d581eSLawrence Tang\hline
679079d581eSLawrence Tangcr2 & uint64 & The CR2 register.\\
680079d581eSLawrence Tang\hline
681079d581eSLawrence Tangcr3 & uint64 & The CR3 register.\\
682079d581eSLawrence Tang\hline
683079d581eSLawrence Tangcr4 & uint64 & The CR4 register.\\
684079d581eSLawrence Tang\hline
685079d581eSLawrence Tangcr8 & uint64 & The CR8 register.\\
686079d581eSLawrence Tang\hline
687079d581eSLawrence Tanggdtr\_0 & uint64 & The first \texttt{UINT64} of the GDTR register.\\
688079d581eSLawrence Tang\hline
689079d581eSLawrence Tanggdtr\_1 & uint64 & The second \texttt{UINT64} of the GDTR register.\\
690079d581eSLawrence Tang\hline
691079d581eSLawrence Tangidtr\_0 & uint64 & The first \texttt{UINT64} of the IDTR register.\\
692079d581eSLawrence Tang\hline
693079d581eSLawrence Tangidtr\_1 & uint64 & The second \texttt{UINT64} of the IDTR register.\\
694079d581eSLawrence Tang\hline
695079d581eSLawrence Tangldtr & uint64 & The LDTR register.\\
696079d581eSLawrence Tang\hline
697079d581eSLawrence Tangtr & uint64 & The TR register.\\
698079d581eSLawrence Tang\jsontableend{IA32/x64 x64 Register State structure field table.}
699079d581eSLawrence Tang
700079d581eSLawrence Tang% IA32/x64 IA32 Register State structure
701079d581eSLawrence Tang\subsection{IA32/x64 Unformatted Register State Structure}
702079d581eSLawrence Tang\label{subsection:ia32x64unformattedregisterstatestructure}
703079d581eSLawrence 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".
704079d581eSLawrence Tang\jsontable{table:ia32x64unformattedregisterstatestructure}
705079d581eSLawrence Tangdata & string & A base64-formatted binary representation of the register array.\\
706079d581eSLawrence Tang\jsontableend{IA32/x64 Unformatted Register State structure field table.}
707079d581eSLawrence Tang
708079d581eSLawrence Tang% ARM processor error section.
709079d581eSLawrence Tang\section{ARM Processor Error Section}
710079d581eSLawrence Tang\label{section:armprocessorerrorsection}
711079d581eSLawrence 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 \}\}}.
712079d581eSLawrence Tang\jsontable{table:armprocessorerrorsection}
713079d581eSLawrence TangvalidationBits & object & An ARM Processor Error Validation structure, as defined in Subsection \ref{subsection:armprocessorerrorvalidationstructure}.\\
714079d581eSLawrence Tang\hline
715079d581eSLawrence TangerrorInfoNum & int & The number of error info structures attached to this error.\\
716079d581eSLawrence Tang\hline
717079d581eSLawrence TangcontextInfoNum & int & The number of context info structures attached to this error.\\
718079d581eSLawrence Tang\hline
719079d581eSLawrence TangsectionLength & uint64 & The total size (in bytes) of this error section.\\
720079d581eSLawrence Tang\hline
721079d581eSLawrence TangerrorAffinity.value & int & The raw value of the error affinity for this error.\\
722079d581eSLawrence 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.\\
723079d581eSLawrence Tang\hline
724079d581eSLawrence TangmpidrEl1 & uint64 & The processor ID (\texttt{MPIDR\_EL1}) for this error.\\
725079d581eSLawrence Tang\hline
726079d581eSLawrence TangmidrEl1 & uint64 & The chip ID (\texttt{MIDR\_EL1}) for this error.\\
727079d581eSLawrence Tang\hline
728079d581eSLawrence Tangrunning & boolean & Whether the processor is running or not. If true, the \texttt{psciState} field is not included.\\
729079d581eSLawrence Tang\hline
730079d581eSLawrence 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.\\
731079d581eSLawrence Tang\hline
732079d581eSLawrence TangerrorInfo & array & Array of ARM Processor Error Info structures, as defined in Subsection \ref{subsection:armprocessorerrorinfostructure}.\\
733079d581eSLawrence Tang\hline
734079d581eSLawrence TangcontextInfo & array & Array of ARM Processor Context Info structures, as defined in Subsection \ref{subsection:armprocessorcontextinfostructure}.\\
735079d581eSLawrence Tang\hline
736079d581eSLawrence TangvendorSpecificInfo.data & string (\textbf{optional}) & If it exists, a base64-encoded binary representation of any attached vendor specific information.\\
737079d581eSLawrence Tang\jsontableend{ARM Processor Error structure field table.}
738079d581eSLawrence Tang
739079d581eSLawrence Tang% ARM Processor Error Validation structure
740079d581eSLawrence Tang\subsection{ARM Processor Error Validation Structure}
741079d581eSLawrence Tang\label{subsection:armprocessorerrorvalidationstructure}
742079d581eSLawrence TangThis structure describes which fields are valid in a single ARM Processor Error structure (\ref{section:armprocessorerrorsection}) with boolean fields.
743079d581eSLawrence Tang\jsontable{table:armprocessorerrorvalidationstructure}
744079d581eSLawrence TangmpidrValid & boolean & Whether the "mpidrEl1" field in the ARM Processor Error structure (\ref{section:armprocessorerrorsection}) is valid.\\
745079d581eSLawrence Tang\hline
746079d581eSLawrence TangerrorAffinityLevelValid & boolean & Whether the "errorAffinity" field in the ARM Processor Error structure (\ref{section:armprocessorerrorsection}) is valid.\\
747079d581eSLawrence Tang\hline
748079d581eSLawrence TangrunningStateValid & boolean & Whether the "running" field in the ARM Processor Error structure (\ref{section:armprocessorerrorsection}) is valid.\\
749079d581eSLawrence Tang\hline
750079d581eSLawrence TangvendorSpecificInfoValid & boolean & Whether the trailing vendor specific info (if present) in the ARM Processor Error Structure (\ref{section:armprocessorerrorsection}) is valid.\\
751079d581eSLawrence Tang\jsontableend{ARM Processor Error validation structure field table.}
752079d581eSLawrence Tang
753079d581eSLawrence Tang% ARM Processor Error Info structure
754079d581eSLawrence Tang\subsection{ARM Processor Error Info Structure}
755079d581eSLawrence Tang\label{subsection:armprocessorerrorinfostructure}
756079d581eSLawrence TangThis structure describes a single ARM Processor Error Info structure, as part of a whole ARM Processor Error structure (\ref{section:armprocessorerrorsection}).
757079d581eSLawrence Tang\jsontable{table:armprocessorerrorinfostructure}
758079d581eSLawrence Tangversion & int & The version of the structure that is implemented.\\
759079d581eSLawrence Tang\hline
760079d581eSLawrence Tanglength & int & The length of the structure, in bytes. For version 0, this is 32.\\
761079d581eSLawrence Tang\hline
762079d581eSLawrence TangvalidationBits & object & An ARM Processor Error Info Validation structure as defined in Subsection \ref{subsection:armprocessorerrorinfovalidationstructure}.\\
763079d581eSLawrence Tang\hline
764079d581eSLawrence TangerrorType.value & uint64 & The raw value of the error type this error info describes.\\
765079d581eSLawrence TangerrorType.name & string & The human readable name, if available, of the error type this error info describes.\\
766079d581eSLawrence Tang\hline
767079d581eSLawrence 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.\\
768079d581eSLawrence TangmultipleError.type & string & The human readable value, if available, of what type of multiple error this is (single error, multiple error).\\
769079d581eSLawrence Tang\hline
770079d581eSLawrence Tangflags & object & An ARM Processor Error Info Flags structure as defined in Subsection \ref{subsection:armprocessorerrorinfoflagsstructure}.\\
771079d581eSLawrence Tang\hline
77271570a2aSLawrence TangerrorInformation & object & An error information structure, as defined in one of Subsections \ref{subsection:armprocessorerrorinfoerrorinformationcachetlbstructure} or \ref{subsection:armprocessorerrorinfoerrorinformationbusstructure}, or . Which structure this is depends on the \texttt{errorType.value} field.\\
773079d581eSLawrence Tang\hline
774079d581eSLawrence TangvirtualFaultAddress & uint64 & Indicates a virtual fault address associated with the error, such as when an error occurs in virtually indexed cache.\\
775079d581eSLawrence Tang\hline
776079d581eSLawrence TangphysicalFaultAddress & uint64 & Indicates a physical fault address associated with the error.\\
777079d581eSLawrence Tang\jsontableend{ARM Processor Error Info structure field table.}
778079d581eSLawrence Tang
779079d581eSLawrence Tang% ARM Processor Error Info Validation structure
780079d581eSLawrence Tang\subsection{ARM Processor Error Info Validation Structure}
781079d581eSLawrence Tang\label{subsection:armprocessorerrorinfovalidationstructure}
782079d581eSLawrence TangThis structure describes the valid fields in a single ARM Processor Error Info structure (\ref{subsection:armprocessorerrorinfostructure}), using boolean fields.
783079d581eSLawrence Tang\jsontable{table:armprocessorerrorinfovalidationstructure}
784079d581eSLawrence TangmultipleErrorValid & boolean & Whether the "multipleError" field in the ARM Processor Error Info structure (\ref{subsection:armprocessorerrorinfostructure}) is valid.\\
785079d581eSLawrence Tang\hline
786079d581eSLawrence TangflagsValid & boolean & Whether the "flags" field in the ARM Processor Error Info structure (\ref{subsection:armprocessorerrorinfostructure}) is valid.\\
787079d581eSLawrence Tang\hline
788079d581eSLawrence TangerrorInformationValid & boolean & Whether the "errorInformation" field in the ARM Processor Error Info structure (\ref{subsection:armprocessorerrorinfostructure}) is valid.\\
789079d581eSLawrence Tang\hline
790079d581eSLawrence TangvirtualFaultAddressValid & boolean & Whether the "virtualFaultAddress" field in the ARM Processor Error Info structure (\ref{subsection:armprocessorerrorinfostructure}) is valid.\\
791079d581eSLawrence Tang\hline
792079d581eSLawrence TangphysicalFaultAddressValid & boolean & Whether the "physicalFaultAddress" field in the ARM Processor Error Info structure (\ref{subsection:armprocessorerrorinfostructure}) is valid.\\
793079d581eSLawrence Tang\jsontableend{ARM Processor Error Info validation structure field table.}
794079d581eSLawrence Tang
795079d581eSLawrence Tang% ARM Processor Error Info Validation structure
796079d581eSLawrence Tang\subsection{ARM Processor Error Info Flags Structure}
797079d581eSLawrence Tang\label{subsection:armprocessorerrorinfoflagsstructure}
798079d581eSLawrence TangThis structure describes the flags in a single ARM Processor Error Info structure (\ref{subsection:armprocessorerrorinfostructure}), using boolean fields.
799079d581eSLawrence Tang\jsontable{table:armprocessorerrorinfoflagsstructure}
800079d581eSLawrence TangfirstErrorCaptured & boolean & Whether this is the first error captured.\\
801079d581eSLawrence Tang\hline
802079d581eSLawrence TanglastErrorCaptured & boolean & Whether this is the last error captured.\\
803079d581eSLawrence Tang\hline
804079d581eSLawrence Tangpropagated & boolean & Whether the error has propagated.\\
805079d581eSLawrence Tang\hline
806079d581eSLawrence 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.\\
807079d581eSLawrence Tang\jsontableend{ARM Processor Error Info Flags structure field table.}
808079d581eSLawrence Tang
809079d581eSLawrence Tang% ARM Processor Error Info Error Information (Cache/TLB) structure
810079d581eSLawrence Tang\subsection{ARM Processor Error Info Cache/TLB Information Structure}
811079d581eSLawrence Tang\label{subsection:armprocessorerrorinfoerrorinformationcachetlbstructure}
81271570a2aSLawrence TangThis structure describes cache/TLB error information for a single ARM Processor Error Info structure (\ref{subsection:armprocessorerrorinfostructure}). This structure is used when the \texttt{type} field of that structure has the value 0 or 1.
813079d581eSLawrence Tang\jsontable{table:armprocessorerrorinfoerrorinformationcachetlbstructure}
814079d581eSLawrence TangvalidationBits & object & An ARM Processor Info Cache/TLB Validation structure as defined in Subsection \ref{subsection:armprocessorerrorinfocachetlbvalidationstructure}.\\
815079d581eSLawrence Tang\hline
816079d581eSLawrence TangtransactionType.value & uint64 & The raw value of the type of cache/TLB error.\\
817079d581eSLawrence TangtransactionType.name & string & The human readable name, if available, of the type of cache/TLB error.\\
818079d581eSLawrence Tang\hline
819079d581eSLawrence Tangoperation.value & uint64 & The raw value of the cache/TLB operation that caused the error.\\
820079d581eSLawrence Tangoperation.name & string & The human readable name, if available, of the cache/TLB operation that caused the error.\\
821079d581eSLawrence Tang\hline
822079d581eSLawrence Tanglevel & int & The cache/TLB level that the error occurred at.\\
823079d581eSLawrence Tang\hline
824079d581eSLawrence TangprocessorContextCorrupt & boolean & Whether the processor context may have been corrupted.\\
825079d581eSLawrence Tang\hline
826079d581eSLawrence Tangcorrected & boolean & Whether the error was corrected.\\
827079d581eSLawrence Tang\hline
828079d581eSLawrence TangprecisePC & boolean & Whether the program counter is directly associated with the error.\\
829079d581eSLawrence Tang\hline
830079d581eSLawrence TangrestartablePC & boolean & Whether program execution can be restarted reliably at the program counter associated with the error.\\
831079d581eSLawrence Tang\jsontableend{ARM Processor Error Info Cache/TLB Information structure field table.}
832079d581eSLawrence Tang
833079d581eSLawrence Tang% ARM Processor Error Info Error Information (Cache/TLB) validation structure
834079d581eSLawrence Tang\subsection{ARM Processor Error Info Cache/TLB Validation Structure}
835079d581eSLawrence Tang\label{subsection:armprocessorerrorinfocachetlbvalidationstructure}
836079d581eSLawrence 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.
837079d581eSLawrence Tang\jsontable{table:armprocessorerrorinfocachetlbvalidationstructure}
838079d581eSLawrence TangtransactionTypeValid & boolean & Whether the "transactionType" field in the ARM Processor Info Cache/TLB Information structure (\ref{subsection:armprocessorerrorinfoerrorinformationcachetlbstructure}) is valid.\\
839079d581eSLawrence Tang\hline
840079d581eSLawrence TangoperationValid & boolean & Whether the "operation" field in the ARM Processor Info Cache/TLB Information structure (\ref{subsection:armprocessorerrorinfoerrorinformationcachetlbstructure}) is valid.\\
841079d581eSLawrence Tang\hline
842079d581eSLawrence TanglevelValid & boolean & Whether the "level" field in the ARM Processor Info Cache/TLB Information structure (\ref{subsection:armprocessorerrorinfoerrorinformationcachetlbstructure}) is valid.\\
843079d581eSLawrence Tang\hline
844079d581eSLawrence TangprocessorContextCorruptValid & boolean & Whether the "processorContextCorrupt" field in the ARM Processor Info Cache/TLB Information structure (\ref{subsection:armprocessorerrorinfoerrorinformationcachetlbstructure}) is valid.\\
845079d581eSLawrence Tang\hline
846079d581eSLawrence TangcorrectedValid & boolean & Whether the "corrected" field in the ARM Processor Info Cache/TLB Information structure (\ref{subsection:armprocessorerrorinfoerrorinformationcachetlbstructure}) is valid.\\
847079d581eSLawrence Tang\hline
848079d581eSLawrence TangprecisePCValid & boolean & Whether the "precisePC" field in the ARM Processor Info Cache/TLB Information structure (\ref{subsection:armprocessorerrorinfoerrorinformationcachetlbstructure}) is valid.\\
849079d581eSLawrence Tang\hline
850079d581eSLawrence TangrestartablePCValid & boolean & Whether the "restartablePC" field in the ARM Processor Info Cache/TLB Information structure (\ref{subsection:armprocessorerrorinfoerrorinformationcachetlbstructure}) is valid.\\
851079d581eSLawrence Tang\jsontableend{ARM Processor Error Info Cache/TLB validation structure field table.}
852079d581eSLawrence Tang
853079d581eSLawrence Tang% ARM Processor Error Info Error Information (Bus) structure
854079d581eSLawrence Tang\subsection{ARM Processor Error Info Bus Information Structure}
855079d581eSLawrence Tang\label{subsection:armprocessorerrorinfoerrorinformationbusstructure}
85671570a2aSLawrence TangThis structure describes bus error information for a single ARM Processor Error Info structure (\ref{subsection:armprocessorerrorinfostructure}). This structure is used when the \texttt{type} field of that structure has the value 2.
857079d581eSLawrence Tang\jsontable{table:armprocessorerrorinfoerrorinformationbusstructure}
858079d581eSLawrence TangvalidationBits & object & An ARM Processor Info Bus Validation structure as defined in Subsection \ref{subsection:armprocessorerrorinfobusvalidationstructure}.\\
859079d581eSLawrence Tang\hline
860079d581eSLawrence TangtransactionType.value & uint64 & The raw value of the type of bus error.\\
861079d581eSLawrence TangtransactionType.name & string & The human readable name, if available, of the type of bus error.\\
862079d581eSLawrence Tang\hline
863079d581eSLawrence Tangoperation.value & uint64 & The raw value of the bus operation that caused the error.\\
864079d581eSLawrence Tangoperation.name & string & The human readable name, if available, of the bus operation that caused the error.\\
865079d581eSLawrence Tang\hline
866079d581eSLawrence Tanglevel & int & The affinity level that the bus error occurred at.\\
867079d581eSLawrence Tang\hline
868079d581eSLawrence TangprocessorContextCorrupt & boolean & Whether the processor context may have been corrupted.\\
869079d581eSLawrence Tang\hline
870079d581eSLawrence Tangcorrected & boolean & Whether the error was corrected.\\
871079d581eSLawrence Tang\hline
872079d581eSLawrence TangprecisePC & boolean & Whether the program counter is directly associated with the error.\\
873079d581eSLawrence Tang\hline
874079d581eSLawrence TangrestartablePC & boolean & Whether program execution can be restarted reliably at the program counter associated with the error.\\
875079d581eSLawrence Tang\hline
876079d581eSLawrence TangtimedOut & boolean & Whether the request timed out.\\
877079d581eSLawrence Tang\hline
878079d581eSLawrence TangparticipationType.value & uint64 & The raw value of the type of participation that occurred in the bus error.\\
879079d581eSLawrence TangparticipationType.name & string & The human readable name, if available, of the type of participation that occurred in the bus error.\\
880079d581eSLawrence Tang\hline
881079d581eSLawrence TangaddressSpace.value & uint64 & The raw value of the address space in which the bus error occurred.\\
882079d581eSLawrence TangaddressSpace.name & string & The human readable name, if available, of the address space in which the bus error occurred.\\
883079d581eSLawrence Tang\hline
884079d581eSLawrence TangmemoryAttributes & int & Memory access attributes for this bus error as described in the ARM ARM.\\
885079d581eSLawrence Tang\hline
886079d581eSLawrence TangaccessMode.value & int & The raw value of the access mode of the bus request (secure/normal).\\
887079d581eSLawrence TangaccessMode.name & string & The human readable name, if available, of the access mode of the bus request (secure/normal).\\
888079d581eSLawrence Tang\jsontableend{ARM Processor Error Info Bus Information structure field table.}
889079d581eSLawrence Tang
890079d581eSLawrence Tang% ARM Processor Error Info Error Information (Bus) validation structure
891079d581eSLawrence Tang\subsection{ARM Processor Error Info Bus Validation Structure}
892079d581eSLawrence Tang\label{subsection:armprocessorerrorinfobusvalidationstructure}
893079d581eSLawrence 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.
894079d581eSLawrence Tang\jsontable{table:armprocessorerrorinfobusvalidationstructure}
895079d581eSLawrence TangtransactionTypeValid & boolean & Whether the "transactionType" field in the ARM Processor Info Bus Information structure (\ref{subsection:armprocessorerrorinfoerrorinformationbusstructure}) is valid.\\
896079d581eSLawrence Tang\hline
897079d581eSLawrence TangoperationValid & boolean & Whether the "operation" field in the ARM Processor Info Bus Information structure (\ref{subsection:armprocessorerrorinfoerrorinformationbusstructure}) is valid.\\
898079d581eSLawrence Tang\hline
899079d581eSLawrence TanglevelValid & boolean & Whether the "level" field in the ARM Processor Info Bus Information structure (\ref{subsection:armprocessorerrorinfoerrorinformationbusstructure}) is valid.\\
900079d581eSLawrence Tang\hline
901079d581eSLawrence TangprocessorContextCorruptValid & boolean & Whether the "processorContextCorrupt" field in the ARM Processor Info Bus Information structure (\ref{subsection:armprocessorerrorinfoerrorinformationbusstructure}) is valid.\\
902079d581eSLawrence Tang\hline
903079d581eSLawrence TangcorrectedValid & boolean & Whether the "corrected" field in the ARM Processor Info Bus Information structure (\ref{subsection:armprocessorerrorinfoerrorinformationbusstructure}) is valid.\\
904079d581eSLawrence Tang\hline
905079d581eSLawrence TangprecisePCValid & boolean & Whether the "precisePC" field in the ARM Processor Info Bus Information structure (\ref{subsection:armprocessorerrorinfoerrorinformationbusstructure}) is valid.\\
906079d581eSLawrence Tang\hline
907079d581eSLawrence TangrestartablePCValid & boolean & Whether the "restartablePC" field in the ARM Processor Info Bus Information structure (\ref{subsection:armprocessorerrorinfoerrorinformationbusstructure}) is valid.\\
908079d581eSLawrence Tang\hline
909079d581eSLawrence TangparticipationTypeValid & boolean & Whether the "participationType" field in the ARM Processor Info Bus Information structure (\ref{subsection:armprocessorerrorinfoerrorinformationbusstructure}) is valid.\\
910079d581eSLawrence Tang\hline
911079d581eSLawrence TangtimedOutValid & boolean & Whether the "timedOut" field in the ARM Processor Info Bus Information structure (\ref{subsection:armprocessorerrorinfoerrorinformationbusstructure}) is valid.\\
912079d581eSLawrence Tang\hline
913079d581eSLawrence TangaddressSpaceValid & boolean & Whether the "addressSpace" field in the ARM Processor Info Bus Information structure (\ref{subsection:armprocessorerrorinfoerrorinformationbusstructure}) is valid.\\
914079d581eSLawrence Tang\hline
915079d581eSLawrence TangmemoryAttributesValid & boolean & Whether the "memoryAttributes" field in the ARM Processor Info Bus Information structure (\ref{subsection:armprocessorerrorinfoerrorinformationbusstructure}) is valid.\\
916079d581eSLawrence Tang\hline
917079d581eSLawrence TangaccessModeValid & boolean & Whether the "accessMode" field in the ARM Processor Info Bus Information structure (\ref{subsection:armprocessorerrorinfoerrorinformationbusstructure}) is valid.\\
918079d581eSLawrence Tang\jsontableend{ARM Processor Error Info Bus validation structure field table.}
919079d581eSLawrence Tang
92071570a2aSLawrence Tang% ARM Processor Error Info Error Information (Microarchitecture/Undefined) structure
92171570a2aSLawrence Tang\subsection{ARM Processor Error Info Microarchitecture/Undefined Information Structure}
92271570a2aSLawrence Tang\label{subsection:armprocessorerrorinfoerrorinformationmicroarchundefinedstructure}
92371570a2aSLawrence TangThis structure describes microarchitecture/other undefined error information for a single ARM Processor Error Info structure (\ref{subsection:armprocessorerrorinfostructure}). This structure is used when the \texttt{type} field of that structure has a value other than 0-2 (inclusive).
92471570a2aSLawrence Tang\jsontable{table:armprocessorerrorinfoerrorinformationmicroarchundefinedstructure}
92571570a2aSLawrence Tangdata & uint64 & The unformatted data represented in the error information structure.\\
92671570a2aSLawrence Tang\jsontableend{ARM Processor Error Info Microarchitecture/Undefined Information structure field table.}
92771570a2aSLawrence Tang
928079d581eSLawrence Tang% ARM Processor Context Info structure
929079d581eSLawrence Tang\subsection{ARM Processor Context Info Structure}
930079d581eSLawrence Tang\label{subsection:armprocessorcontextinfostructure}
931079d581eSLawrence TangThis structure describes a single ARM Processor Context Info structure, as part of a whole ARM Processor Error structure (\ref{section:armprocessorerrorsection}).
932079d581eSLawrence Tang\jsontable{table:armprocessorcontextinfostructure}
93371570a2aSLawrence Tangversion & int & The version of the structure. In the referenced UEFI specification, this is 0.\\
93471570a2aSLawrence Tang\hline
935079d581eSLawrence TangregisterContextType.value & uint64 & The raw value of the type of processor context state being reported.\\
936079d581eSLawrence TangregisterContextType.name & string & The human readable name, if available, of the type of processor context state being reported.\\
937079d581eSLawrence Tang\hline
938079d581eSLawrence TangregisterArraySize & uint64 & The size of the attached register array, in bytes.\\
939079d581eSLawrence Tang\hline
940079d581eSLawrence 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.\\
941079d581eSLawrence Tang\jsontableend{ARM Processor Context Info structure field table.}
942079d581eSLawrence Tang
943079d581eSLawrence Tang% ARM AARCH32 General Purpose Registers structure
944079d581eSLawrence Tang\subsection{ARM AARCH32 General Purpose Registers Structure}
945079d581eSLawrence Tang\label{subsection:armaarch32gprstructure}
946079d581eSLawrence 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.
947079d581eSLawrence Tang\jsontable{table:armaarch32gprstructure}
948079d581eSLawrence Tangr0 & uint64 & Register R0. \texttt{UINT32} value null extended to \texttt{UINT64}.\\
949079d581eSLawrence Tang\hline
950079d581eSLawrence Tangr1 & uint64 & Register R1. \texttt{UINT32} value null extended to \texttt{UINT64}.\\
951079d581eSLawrence Tang\hline
952079d581eSLawrence Tangr2 & uint64 & Register R2. \texttt{UINT32} value null extended to \texttt{UINT64}.\\
953079d581eSLawrence Tang\hline
954079d581eSLawrence Tangr3 & uint64 & Register R3. \texttt{UINT32} value null extended to \texttt{UINT64}.\\
955079d581eSLawrence Tang\hline
956079d581eSLawrence Tangr4 & uint64 & Register R4. \texttt{UINT32} value null extended to \texttt{UINT64}.\\
957079d581eSLawrence Tang\hline
958079d581eSLawrence Tangr5 & uint64 & Register R5. \texttt{UINT32} value null extended to \texttt{UINT64}.\\
959079d581eSLawrence Tang\hline
960079d581eSLawrence Tangr6 & uint64 & Register R6. \texttt{UINT32} value null extended to \texttt{UINT64}.\\
961079d581eSLawrence Tang\hline
962079d581eSLawrence Tangr7 & uint64 & Register R7. \texttt{UINT32} value null extended to \texttt{UINT64}.\\
963079d581eSLawrence Tang\hline
964079d581eSLawrence Tangr8 & uint64 & Register R8. \texttt{UINT32} value null extended to \texttt{UINT64}.\\
965079d581eSLawrence Tang\hline
966079d581eSLawrence Tangr9 & uint64 & Register R9. \texttt{UINT32} value null extended to \texttt{UINT64}.\\
967079d581eSLawrence Tang\hline
968079d581eSLawrence Tangr10 & uint64 & Register R10. \texttt{UINT32} value null extended to \texttt{UINT64}.\\
969079d581eSLawrence Tang\hline
970079d581eSLawrence Tangr11 & uint64 & Register R11. \texttt{UINT32} value null extended to \texttt{UINT64}.\\
971079d581eSLawrence Tang\hline
972079d581eSLawrence Tangr12 & uint64 & Register R12. \texttt{UINT32} value null extended to \texttt{UINT64}.\\
973079d581eSLawrence Tang\hline
974079d581eSLawrence Tangr13\_sp & uint64 & Register R13 (SP). \texttt{UINT32} value null extended to \texttt{UINT64}.\\
975079d581eSLawrence Tang\hline
976079d581eSLawrence Tangr14\_lr & uint64 & Register R14 (LR). \texttt{UINT32} value null extended to \texttt{UINT64}.\\
977079d581eSLawrence Tang\hline
978079d581eSLawrence Tangr15\_pc & uint64 & Register R15 (PC). \texttt{UINT32} value null extended to \texttt{UINT64}.\\
979079d581eSLawrence Tang\jsontableend{ARM AARCH32 General Purpose Registers structure field table.}
980079d581eSLawrence Tang
981079d581eSLawrence Tang% ARM AARCH32 EL1 Context Registers structure
982079d581eSLawrence Tang\subsection{ARM AARCH32 EL1 Context Registers Structure}
983079d581eSLawrence Tang\label{subsection:armaarch32el1contextregistersstructure}
984079d581eSLawrence 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.
985079d581eSLawrence Tang\jsontable{table:armaarch32el1contextregistersstructure}
986079d581eSLawrence Tangdfar & uint64 & Register DFAR. \texttt{UINT32} value null extended to \texttt{UINT64}.\\
987079d581eSLawrence Tang\hline
988079d581eSLawrence Tangdfsr & uint64 & Register DFSR. \texttt{UINT32} value null extended to \texttt{UINT64}.\\
989079d581eSLawrence Tang\hline
990079d581eSLawrence Tangifar & uint64 & Register IFAR. \texttt{UINT32} value null extended to \texttt{UINT64}.\\
991079d581eSLawrence Tang\hline
992079d581eSLawrence Tangisr & uint64 & Register ISR. \texttt{UINT32} value null extended to \texttt{UINT64}.\\
993079d581eSLawrence Tang\hline
994079d581eSLawrence Tangmair0 & uint64 & Register MAIR0. \texttt{UINT32} value null extended to \texttt{UINT64}.\\
995079d581eSLawrence Tang\hline
996079d581eSLawrence Tangmair1 & uint64 & Register MAIR1. \texttt{UINT32} value null extended to \texttt{UINT64}.\\
997079d581eSLawrence Tang\hline
998079d581eSLawrence Tangmidr & uint64 & Register MIDR. \texttt{UINT32} value null extended to \texttt{UINT64}.\\
999079d581eSLawrence Tang\hline
1000079d581eSLawrence Tangmpidr & uint64 & Register MPIDR. \texttt{UINT32} value null extended to \texttt{UINT64}.\\
1001079d581eSLawrence Tang\hline
1002079d581eSLawrence Tangnmrr & uint64 & Register NMRR. \texttt{UINT32} value null extended to \texttt{UINT64}.\\
1003079d581eSLawrence Tang\hline
1004079d581eSLawrence Tangprrr & uint64 & Register PRRR. \texttt{UINT32} value null extended to \texttt{UINT64}.\\
1005079d581eSLawrence Tang\hline
1006079d581eSLawrence Tangsctlr\_ns & uint64 & Register SCTLR (NS). \texttt{UINT32} value null extended to \texttt{UINT64}.\\
1007079d581eSLawrence Tang\hline
1008079d581eSLawrence Tangspsr & uint64 & Register SPSR. \texttt{UINT32} value null extended to \texttt{UINT64}.\\
1009079d581eSLawrence Tang\hline
1010079d581eSLawrence Tangspsr\_abt & uint64 & Register SPSR (ABT). \texttt{UINT32} value null extended to \texttt{UINT64}.\\
1011079d581eSLawrence Tang\hline
1012079d581eSLawrence Tangspsr\_fiq & uint64 & Register SPSR (FIQ). \texttt{UINT32} value null extended to \texttt{UINT64}.\\
1013079d581eSLawrence Tang\hline
1014079d581eSLawrence Tangspsr\_irq & uint64 & Register SPSR (IRQ). \texttt{UINT32} value null extended to \texttt{UINT64}.\\
1015079d581eSLawrence Tang\hline
1016079d581eSLawrence Tangspsr\_svc & uint64 & Register SPSR (SVC). \texttt{UINT32} value null extended to \texttt{UINT64}.\\
1017079d581eSLawrence Tang\hline
1018079d581eSLawrence Tangspsr\_und & uint64 & Register SPSR (UND). \texttt{UINT32} value null extended to \texttt{UINT64}.\\
1019079d581eSLawrence Tang\hline
1020079d581eSLawrence Tangtpidrprw & uint64 & Register TPIDR (PRW). \texttt{UINT32} value null extended to \texttt{UINT64}.\\
1021079d581eSLawrence Tang\hline
1022079d581eSLawrence Tangtpidruro & uint64 & Register TPIDR (URO). \texttt{UINT32} value null extended to \texttt{UINT64}.\\
1023079d581eSLawrence Tang\hline
1024079d581eSLawrence Tangtpidrurw & uint64 & Register TPIDR (URW). \texttt{UINT32} value null extended to \texttt{UINT64}.\\
1025079d581eSLawrence Tang\hline
1026079d581eSLawrence Tangttbcr & uint64 & Register TTBCR. \texttt{UINT32} value null extended to \texttt{UINT64}.\\
1027079d581eSLawrence Tang\hline
1028079d581eSLawrence Tangttbr0 & uint64 & Register TTBR0. \texttt{UINT32} value null extended to \texttt{UINT64}.\\
1029079d581eSLawrence Tang\hline
1030079d581eSLawrence Tangttbr1 & uint64 & Register TTBR1. \texttt{UINT32} value null extended to \texttt{UINT64}.\\
1031079d581eSLawrence Tang\hline
1032079d581eSLawrence Tangdacr & uint64 & Register DACR. \texttt{UINT32} value null extended to \texttt{UINT64}.\\
1033079d581eSLawrence Tang\jsontableend{ARM AARCH32 EL1 Context Registers structure field table.}
1034079d581eSLawrence Tang
1035079d581eSLawrence Tang% ARM AARCH32 EL2 Context Registers structure
1036079d581eSLawrence Tang\subsection{ARM AARCH32 EL2 Context Registers Structure}
1037079d581eSLawrence Tang\label{subsection:armaarch32el2contextregistersstructure}
1038079d581eSLawrence 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.
1039079d581eSLawrence Tang\jsontable{table:armaarch32el2contextregistersstructure}
1040079d581eSLawrence Tangelr\_hyp & uint64 & Register ELR\_HYP. \texttt{UINT32} value null extended to \texttt{UINT64}.\\
1041079d581eSLawrence Tang\hline
1042079d581eSLawrence Tanghamair0 & uint64 & Register HAMAIR0. \texttt{UINT32} value null extended to \texttt{UINT64}.\\
1043079d581eSLawrence Tang\hline
1044079d581eSLawrence Tanghamair1 & uint64 & Register HAMAIR1. \texttt{UINT32} value null extended to \texttt{UINT64}.\\
1045079d581eSLawrence Tang\hline
1046079d581eSLawrence Tanghcr & uint64 & Register HCR. \texttt{UINT32} value null extended to \texttt{UINT64}.\\
1047079d581eSLawrence Tang\hline
1048079d581eSLawrence Tanghcr2 & uint64 & Register HCR2. \texttt{UINT32} value null extended to \texttt{UINT64}.\\
1049079d581eSLawrence Tang\hline
1050079d581eSLawrence Tanghdfar & uint64 & Register HDFAR. \texttt{UINT32} value null extended to \texttt{UINT64}.\\
1051079d581eSLawrence Tang\hline
1052079d581eSLawrence Tanghifar & uint64 & Register HIFAR. \texttt{UINT32} value null extended to \texttt{UINT64}.\\
1053079d581eSLawrence Tang\hline
1054079d581eSLawrence Tanghpfar & uint64 & Register HPFAR. \texttt{UINT32} value null extended to \texttt{UINT64}.\\
1055079d581eSLawrence Tang\hline
1056079d581eSLawrence Tanghsr & uint64 & Register HSR. \texttt{UINT32} value null extended to \texttt{UINT64}.\\
1057079d581eSLawrence Tang\hline
1058079d581eSLawrence Tanghtcr & uint64 & Register HTCR. \texttt{UINT32} value null extended to \texttt{UINT64}.\\
1059079d581eSLawrence Tang\hline
1060079d581eSLawrence Tanghtpidr & uint64 & Register HTPIDR. \texttt{UINT32} value null extended to \texttt{UINT64}.\\
1061079d581eSLawrence Tang\hline
1062079d581eSLawrence Tanghttbr & uint64 & Register HTTBR. \texttt{UINT32} value null extended to \texttt{UINT64}.\\
1063079d581eSLawrence Tang\hline
1064079d581eSLawrence Tangspsr\_hyp & uint64 & Register SPSR (HYP). \texttt{UINT32} value null extended to \texttt{UINT64}.\\
1065079d581eSLawrence Tang\hline
1066079d581eSLawrence Tangvtcr & uint64 & Register VTCR. \texttt{UINT32} value null extended to \texttt{UINT64}.\\
1067079d581eSLawrence Tang\hline
1068079d581eSLawrence Tangvttbr & uint64 & Register VTTBR. \texttt{UINT32} value null extended to \texttt{UINT64}.\\
1069079d581eSLawrence Tang\hline
1070079d581eSLawrence Tangdacr32\_el2 & uint64 & Register DACR32 (EL2). \texttt{UINT32} value null extended to \texttt{UINT64}.\\
1071079d581eSLawrence Tang\hline
1072079d581eSLawrence Tang\jsontableend{ARM AARCH32 EL2 Context Registers structure field table.}
1073079d581eSLawrence Tang
1074079d581eSLawrence Tang% ARM AARCH32 Secure Registers structure
1075079d581eSLawrence Tang\subsection{ARM AARCH32 Secure Registers Structure}
1076079d581eSLawrence Tang\label{subsection:armaarch32secureregistersstructure}
1077079d581eSLawrence 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.
1078079d581eSLawrence Tang\jsontable{table:armaarch32secureregistersstructure}
1079079d581eSLawrence Tangsctlr\_s & uint64 & Register SCTLR\_S. \texttt{UINT32} value null extended to \texttt{UINT64}.\\
1080079d581eSLawrence Tang\hline
1081079d581eSLawrence Tangspsr\_mon & uint64 & Register SPSR (MON). \texttt{UINT32} value null extended to \texttt{UINT64}.\\
1082079d581eSLawrence Tang\jsontableend{ARM AARCH32 Secure Registers structure field table.}
1083079d581eSLawrence Tang
1084079d581eSLawrence Tang% ARM AARCH64 General Purpose Registers structure
1085079d581eSLawrence Tang\subsection{ARM AARCH64 General Purpose Registers Structure}
1086079d581eSLawrence Tang\label{subsection:armaarch64gprstructure}
1087079d581eSLawrence 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.
1088079d581eSLawrence Tang\jsontable{table:armaarch64gprstructure}
1089079d581eSLawrence Tangx0 & uint64 & Register X0.\\
1090079d581eSLawrence Tang\hline
1091079d581eSLawrence Tangx1 & uint64 & Register X1.\\
1092079d581eSLawrence Tang\hline
1093079d581eSLawrence Tangx2 & uint64 & Register X2.\\
1094079d581eSLawrence Tang\hline
1095079d581eSLawrence Tangx3 & uint64 & Register X3.\\
1096079d581eSLawrence Tang\hline
1097079d581eSLawrence Tangx4 & uint64 & Register X4.\\
1098079d581eSLawrence Tang\hline
1099079d581eSLawrence Tangx5 & uint64 & Register X5.\\
1100079d581eSLawrence Tang\hline
1101079d581eSLawrence Tangx6 & uint64 & Register X6.\\
1102079d581eSLawrence Tang\hline
1103079d581eSLawrence Tangx7 & uint64 & Register X7.\\
1104079d581eSLawrence Tang\hline
1105079d581eSLawrence Tangx8 & uint64 & Register X8.\\
1106079d581eSLawrence Tang\hline
1107079d581eSLawrence Tangx9 & uint64 & Register X9.\\
1108079d581eSLawrence Tang\hline
1109079d581eSLawrence Tangx10 & uint64 & Register X10.\\
1110079d581eSLawrence Tang\hline
1111079d581eSLawrence Tangx11 & uint64 & Register X11.\\
1112079d581eSLawrence Tang\hline
1113079d581eSLawrence Tangx12 & uint64 & Register X12.\\
1114079d581eSLawrence Tang\hline
1115079d581eSLawrence Tangx13 & uint64 & Register X13.\\
1116079d581eSLawrence Tang\hline
1117079d581eSLawrence Tangx14 & uint64 & Register X14.\\
1118079d581eSLawrence Tang\hline
1119079d581eSLawrence Tangx15 & uint64 & Register X15.\\
1120079d581eSLawrence Tang\hline
1121079d581eSLawrence Tangx16 & uint64 & Register X16.\\
1122079d581eSLawrence Tang\hline
1123079d581eSLawrence Tangx17 & uint64 & Register X17.\\
1124079d581eSLawrence Tang\hline
1125079d581eSLawrence Tangx18 & uint64 & Register X18.\\
1126079d581eSLawrence Tang\hline
1127079d581eSLawrence Tangx19 & uint64 & Register X19.\\
1128079d581eSLawrence Tang\hline
1129079d581eSLawrence Tangx20 & uint64 & Register X20.\\
1130079d581eSLawrence Tang\hline
1131079d581eSLawrence Tangx21 & uint64 & Register X21.\\
1132079d581eSLawrence Tang\hline
1133079d581eSLawrence Tangx22 & uint64 & Register X22.\\
1134079d581eSLawrence Tang\hline
1135079d581eSLawrence Tangx23 & uint64 & Register X23.\\
1136079d581eSLawrence Tang\hline
1137079d581eSLawrence Tangx24 & uint64 & Register X24.\\
1138079d581eSLawrence Tang\hline
1139079d581eSLawrence Tangx25 & uint64 & Register X25.\\
1140079d581eSLawrence Tang\hline
1141079d581eSLawrence Tangx26 & uint64 & Register X26.\\
1142079d581eSLawrence Tang\hline
1143079d581eSLawrence Tangx27 & uint64 & Register X27.\\
1144079d581eSLawrence Tang\hline
1145079d581eSLawrence Tangx28 & uint64 & Register X28.\\
1146079d581eSLawrence Tang\hline
1147079d581eSLawrence Tangx29 & uint64 & Register X29.\\
1148079d581eSLawrence Tang\hline
1149079d581eSLawrence Tangx30 & uint64 & Register X30.\\
1150079d581eSLawrence Tang\hline
1151079d581eSLawrence Tangsp & uint64 & Register SP.\\
1152079d581eSLawrence Tang\jsontableend{ARM AARCH64 General Purpose Registers structure field table.}
1153079d581eSLawrence Tang
1154079d581eSLawrence Tang% ARM AARCH64 EL1 Context Registers structure
1155079d581eSLawrence Tang\subsection{ARM AARCH64 EL1 Context Registers Structure}
1156079d581eSLawrence Tang\label{subsection:armaarch64el1contextregistersstructure}
1157079d581eSLawrence 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.
1158079d581eSLawrence Tang\jsontable{table:armaarch64el1contextregistersstructure}
1159079d581eSLawrence Tangelr\_el1 & uint64 & Register ELR (EL1).\\
1160079d581eSLawrence Tang\hline
1161079d581eSLawrence Tangesr\_el1 & uint64 & Register ESR (EL1).\\
1162079d581eSLawrence Tang\hline
1163079d581eSLawrence Tangfar\_el1 & uint64 & Register FAR (EL1).\\
1164079d581eSLawrence Tang\hline
1165079d581eSLawrence Tangisr\_el1 & uint64 & Register ISR (EL1).\\
1166079d581eSLawrence Tang\hline
1167079d581eSLawrence Tangmair\_el1 & uint64 & Register MAIR (EL1).\\
1168079d581eSLawrence Tang\hline
1169079d581eSLawrence Tangmidr\_el1 & uint64 & Register MIDR (EL1).\\
1170079d581eSLawrence Tang\hline
1171079d581eSLawrence Tangmpidr\_el1 & uint64 & Register MPIDR (EL1).\\
1172079d581eSLawrence Tang\hline
1173079d581eSLawrence Tangsctlr\_el1 & uint64 & Register SCTLR (EL1).\\
1174079d581eSLawrence Tang\hline
1175079d581eSLawrence Tangsp\_el0 & uint64 & Register SP (EL0).\\
1176079d581eSLawrence Tang\hline
1177079d581eSLawrence Tangsp\_el1 & uint64 & Register SP (EL1).\\
1178079d581eSLawrence Tang\hline
1179079d581eSLawrence Tangspsr\_el1 & uint64 & Register SPSR (EL1).\\
1180079d581eSLawrence Tang\hline
1181079d581eSLawrence Tangtcr\_el1 & uint64 & Register TCR (EL1).\\
1182079d581eSLawrence Tang\hline
1183079d581eSLawrence Tangtpidr\_el0 & uint64 & Register TPIDR (EL0).\\
1184079d581eSLawrence Tang\hline
1185079d581eSLawrence Tangtpidr\_el1 & uint64 & Register TPIDR (EL1).\\
1186079d581eSLawrence Tang\hline
1187079d581eSLawrence Tangtpidrro\_el0 & uint64 & Register TPIDRRO (EL0).\\
1188079d581eSLawrence Tang\hline
1189079d581eSLawrence Tangttbr0\_el1 & uint64 & Register TTBR0 (EL1).\\
1190079d581eSLawrence Tang\hline
1191079d581eSLawrence Tangttbr1\_el1 & uint64 & Register TTBR1 (EL1).\\
1192079d581eSLawrence Tang\jsontableend{ARM AARCH64 EL1 Context Registers structure field table.}
1193079d581eSLawrence Tang
1194079d581eSLawrence Tang% ARM AARCH64 EL2 Context Registers structure
1195079d581eSLawrence Tang\subsection{ARM AARCH64 EL2 Context Registers Structure}
1196079d581eSLawrence Tang\label{subsection:armaarch64el2contextregistersstructure}
1197079d581eSLawrence 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.
1198079d581eSLawrence Tang\jsontable{table:armaarch64el2contextregistersstructure}
1199079d581eSLawrence Tangelr\_el2 & uint64 & Register ELR (EL2).\\
1200079d581eSLawrence Tang\hline
1201079d581eSLawrence Tangesr\_el2 & uint64 & Register ESR (EL2).\\
1202079d581eSLawrence Tang\hline
1203079d581eSLawrence Tangfar\_el2 & uint64 & Register FAR (EL2).\\
1204079d581eSLawrence Tang\hline
1205079d581eSLawrence Tanghacr\_el2 & uint64 & Register HACR (EL2).\\
1206079d581eSLawrence Tang\hline
1207079d581eSLawrence Tanghcr\_el2 & uint64 & Register HCR (EL2).\\
1208079d581eSLawrence Tang\hline
1209079d581eSLawrence Tanghpfar\_el2 & uint64 & Register HPFAR (EL2).\\
1210079d581eSLawrence Tang\hline
1211079d581eSLawrence Tangmair\_el2 & uint64 & Register MAIR (EL2).\\
1212079d581eSLawrence Tang\hline
1213079d581eSLawrence Tangsctlr\_el2 & uint64 & Register SCTLR (EL2).\\
1214079d581eSLawrence Tang\hline
1215079d581eSLawrence Tangsp\_el2 & uint64 & Register SP (EL2).\\
1216079d581eSLawrence Tang\hline
1217079d581eSLawrence Tangspsr\_el2 & uint64 & Register SPSR (EL2).\\
1218079d581eSLawrence Tang\hline
1219079d581eSLawrence Tangtcr\_el2 & uint64 & Register TCR (EL2).\\
1220079d581eSLawrence Tang\hline
1221079d581eSLawrence Tangtpidr\_el2 & uint64 & Register TPIDR (EL2).\\
1222079d581eSLawrence Tang\hline
1223079d581eSLawrence Tangttbr0\_el2 & uint64 & Register TTBR0 (EL2).\\
1224079d581eSLawrence Tang\hline
1225079d581eSLawrence Tangvtcr\_el2 & uint64 & Register VTCR (EL2).\\
1226079d581eSLawrence Tang\hline
1227079d581eSLawrence Tangvttbr\_el2 & uint64 & Register VTTBR (EL2).\\
1228079d581eSLawrence Tang\jsontableend{ARM AARCH64 EL2 Context Registers structure field table.}
1229079d581eSLawrence Tang
1230079d581eSLawrence Tang% ARM AARCH64 EL3 Context Registers structure
1231079d581eSLawrence Tang\subsection{ARM AARCH64 EL3 Context Registers Structure}
1232079d581eSLawrence Tang\label{subsection:armaarch64el3contextregistersstructure}
1233079d581eSLawrence 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.
1234079d581eSLawrence Tang\jsontable{table:armaarch64el3contextregistersstructure}
1235079d581eSLawrence Tangelr\_el3 & uint64 & Register ELR (EL3).\\
1236079d581eSLawrence Tang\hline
1237079d581eSLawrence Tangesr\_el3 & uint64 & Register ESR (EL3).\\
1238079d581eSLawrence Tang\hline
1239079d581eSLawrence Tangfar\_el3 & uint64 & Register FAR (EL3).\\
1240079d581eSLawrence Tang\hline
1241079d581eSLawrence Tangmair\_el3 & uint64 & Register MAIR (EL3).\\
1242079d581eSLawrence Tang\hline
1243079d581eSLawrence Tangsctlr\_el3 & uint64 & Register SCTLR (EL3).\\
1244079d581eSLawrence Tang\hline
1245079d581eSLawrence Tangsp\_el3 & uint64 & Register SP (EL3).\\
1246079d581eSLawrence Tang\hline
1247079d581eSLawrence Tangspsr\_el3 & uint64 & Register SPSR (EL3).\\
1248079d581eSLawrence Tang\hline
1249079d581eSLawrence Tangtcr\_el3 & uint64 & Register TCR (EL3).\\
1250079d581eSLawrence Tang\hline
1251079d581eSLawrence Tangtpidr\_el3 & uint64 & Register TPIDR (EL3).\\
1252079d581eSLawrence Tang\hline
1253079d581eSLawrence Tangttbr0\_el3 & uint64 & Register TTBR0 (EL3).\\
1254079d581eSLawrence Tang\jsontableend{ARM AARCH64 EL3 Context Registers structure field table.}
1255079d581eSLawrence Tang
1256079d581eSLawrence Tang% ARM AARCH64 Miscellaneous Registers structure
1257079d581eSLawrence Tang\subsection{ARM AARCH64 Miscellaneous Registers Structure}
1258079d581eSLawrence Tang\label{subsection:armmiscregistersstructure}
1259079d581eSLawrence 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.
1260079d581eSLawrence Tang\jsontable{table:armmiscregistersstructure}
1261079d581eSLawrence TangmrsEncoding.op2 & uint64 & MRS Encoding OP2.\\
1262079d581eSLawrence Tang\hline
1263079d581eSLawrence TangmrsEncoding.crm & uint64 & MRS Encoding CRm.\\
1264079d581eSLawrence Tang\hline
1265079d581eSLawrence TangmrsEncoding.crn & uint64 & MRS Encoding CRn.\\
1266079d581eSLawrence Tang\hline
1267079d581eSLawrence TangmrsEncoding.op1 & uint64 & MRS Encoding Op1.\\
1268079d581eSLawrence Tang\hline
1269079d581eSLawrence TangmrsEncoding.o0 & uint64 & MRS Encoding O0.\\
1270079d581eSLawrence Tang\hline
1271079d581eSLawrence Tangvalue & uint64 & Value of the single register.\\
1272079d581eSLawrence Tang\jsontableend{ARM AARCH64 Miscellaneous Registers structure field table.}
1273079d581eSLawrence Tang
1274079d581eSLawrence Tang% ARM AARCH64 Unknown Registers structure
1275079d581eSLawrence Tang\subsection{ARM AARCH64 Unknown Registers Structure}
1276079d581eSLawrence Tang\label{subsection:armunknownregistersstructure}
1277079d581eSLawrence 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).
1278079d581eSLawrence Tang\jsontable{table:armunknownregistersstructure}
1279079d581eSLawrence Tangdata & string & A base64 representation of the unknown binary register array data.\\
1280079d581eSLawrence Tang\jsontableend{ARM AARCH64 Unknown Registers structure field table.}
1281079d581eSLawrence Tang
1282079d581eSLawrence Tang% Memory error section.
1283079d581eSLawrence Tang\section{Memory Error Section}
1284079d581eSLawrence Tang\label{section:memoryerrorsection}
1285079d581eSLawrence 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 \}\}}.
1286079d581eSLawrence Tang\jsontable{table:memoryerrorsection}
1287079d581eSLawrence TangvalidationBits & object & A Memory Error Validation structure, as described in Subsection \ref{subsection:memoryerrorvalidationstructure}.\\
1288079d581eSLawrence Tang\hline
1289079d581eSLawrence TangerrorStatus & object & A CPER Generic Error Status structure, as described in Subsection \ref{subsection:genericerrorstatusstructure}.\\
1290079d581eSLawrence Tang\hline
1291079d581eSLawrence 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.\\
1292079d581eSLawrence Tang\hline
1293079d581eSLawrence TangmemoryErrorType.value & uint64 & The raw value of the memory error type.\\
1294079d581eSLawrence TangmemoryErrorType.name & string & The human readable name, if available, of the memory error type.\\
1295079d581eSLawrence Tang\hline
1296079d581eSLawrence Tangextended.rowBit16 & boolean & Bit 16 of the row number of the memory error location.\\
1297079d581eSLawrence Tangextended.rowBit17 & boolean & Bit 17 of the row number of the memory error location.\\
1298079d581eSLawrence Tangextended.chipIdentification & int & The ID of the related chip.\\
1299079d581eSLawrence Tang\hline
1300079d581eSLawrence TangphysicalAddress & uint64 & The physical address at which the error occurred.\\
1301079d581eSLawrence Tang\hline
1302079d581eSLawrence TangphysicalAddressMask & uint64 & Defines the valid address bits in the \texttt{physicalAddress} field.\\
1303079d581eSLawrence Tang\hline
1304079d581eSLawrence Tangnode & uint64 & Identifies the node containing the memory error, if in a multi-node system.\\
1305079d581eSLawrence Tang\hline
1306079d581eSLawrence Tangcard & uint64 & The card number of the memory error location.\\
1307079d581eSLawrence Tang\hline
1308079d581eSLawrence TangmoduleRank & uint64 & The module or rank number of the offending memory error location.\\
1309079d581eSLawrence Tang\hline
1310079d581eSLawrence Tangdevice & uint64 & The device number of the memory associated with the error.\\
1311079d581eSLawrence Tang\hline
1312079d581eSLawrence Tangrow & uint64 & The first 16 bits of the row number of the memory location.\\
1313079d581eSLawrence Tang\hline
1314079d581eSLawrence Tangcolumn & uint64 & The column number of the memory error location.\\
1315079d581eSLawrence Tang\hline
1316079d581eSLawrence TangbitPosition & uint64 & The bit position at which the error occurred.\\
1317079d581eSLawrence Tang\hline
1318079d581eSLawrence TangrequestorID & uint64 & Hardware address of the device that initiated the errored transaction.\\
1319079d581eSLawrence Tang\hline
1320079d581eSLawrence TangresponderID & uint64 & Hardware address of the device that responded to the transaction.\\
1321079d581eSLawrence Tang\hline
1322079d581eSLawrence TangtargetID & uint64 & Hardware address of the intended target of the transaction.\\
1323079d581eSLawrence Tang\hline
1324079d581eSLawrence TangrankNumber & uint64 & The rank number of the memory error location.\\
1325079d581eSLawrence Tang\hline
1326079d581eSLawrence TangcardSmbiosHandle & uint64 & The SMBIOS handle for the memory card's Type 16 Memory Array Structure.\\
1327079d581eSLawrence Tang\hline
1328079d581eSLawrence TangmoduleSmbiosHandle & uint64 & The SMBIOS handle for the memory module's Type 17 Memory Device Structure.\\
1329079d581eSLawrence Tang\jsontableend{Memory Error structure field table.}
1330079d581eSLawrence Tang
1331079d581eSLawrence Tang% Memory error validation structure.
1332079d581eSLawrence Tang\subsection{Memory Error Validation Structure}
1333079d581eSLawrence Tang\label{subsection:memoryerrorvalidationstructure}
1334079d581eSLawrence TangThis structure describes whether fields in a single Memory Error (\ref{section:memoryerrorsection}) are valid, using boolean fields.
1335079d581eSLawrence Tang\jsontable{table:memoryerrorvalidationstructure}
1336079d581eSLawrence TangerrorStatusValid & boolean & Whether the "errorStatus" field of a Memory Error (\ref{section:memoryerrorsection}) is valid.\\
1337079d581eSLawrence Tang\hline
1338079d581eSLawrence TangphysicalAddressValid & boolean & Whether the "physicalAddress" field of a Memory Error (\ref{section:memoryerrorsection}) is valid.\\
1339079d581eSLawrence Tang\hline
1340079d581eSLawrence TangphysicalAddressMaskValid & boolean & Whether the "physicalAddressMask" field of a Memory Error (\ref{section:memoryerrorsection}) is valid.\\
1341079d581eSLawrence Tang\hline
1342079d581eSLawrence TangnodeValid & boolean & Whether the "node" field of a Memory Error (\ref{section:memoryerrorsection}) is valid.\\
1343079d581eSLawrence Tang\hline
1344079d581eSLawrence TangcardValid & boolean & Whether the "card" field of a Memory Error (\ref{section:memoryerrorsection}) is valid.\\
1345079d581eSLawrence Tang\hline
1346079d581eSLawrence TangmoduleValid & boolean & Whether the "module" field of a Memory Error (\ref{section:memoryerrorsection}) is valid.\\
1347079d581eSLawrence Tang\hline
1348079d581eSLawrence 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.\\
1349079d581eSLawrence Tang\hline
1350079d581eSLawrence TangdeviceValid & boolean & Whether the "device" field of a Memory Error (\ref{section:memoryerrorsection}) is valid.\\
1351079d581eSLawrence Tang\hline
1352079d581eSLawrence TangrowValid & boolean & Whether the "row" field of a Memory Error (\ref{section:memoryerrorsection}) is valid.\\
1353079d581eSLawrence Tang\hline
1354079d581eSLawrence TangmemoryPlatformTargetValid & boolean & Whether the memory platform target of a Memory Error (\ref{section:memoryerrorsection}) is valid.\\
1355079d581eSLawrence Tang\hline
1356079d581eSLawrence TangmemoryErrorTypeValid & boolean & Whether the "memoryErrorType" field of a Memory Error (\ref{section:memoryerrorsection}) is valid.\\
1357079d581eSLawrence Tang\hline
1358079d581eSLawrence TangrankNumberValid & boolean & Whether the "rankNumber" field of a Memory Error (\ref{section:memoryerrorsection}) is valid.\\
1359079d581eSLawrence Tang\hline
1360079d581eSLawrence TangcardHandleValid & boolean & Whether the "cardSmbiosHandle" field of a Memory Error (\ref{section:memoryerrorsection}) is valid.\\
1361079d581eSLawrence Tang\hline
1362079d581eSLawrence TangmoduleHandleValid & boolean & Whether the "moduleSmbiosHandle" field of a Memory Error (\ref{section:memoryerrorsection}) is valid.\\
1363079d581eSLawrence Tang\hline
1364079d581eSLawrence TangextendedRowBitsValid & boolean & Whether the "extended.rowBit16" and "extended.rowBit17" field of a Memory Error (\ref{section:memoryerrorsection}) is valid.\\
1365079d581eSLawrence Tang\hline
1366079d581eSLawrence TangbankGroupValid & boolean & Whether the "bank.group" field of a Memory Error (\ref{section:memoryerrorsection}) is valid.\\
1367079d581eSLawrence Tang\hline
1368079d581eSLawrence TangbankAddressValid & boolean & Whether the "bank.address" field of a Memory Error (\ref{section:memoryerrorsection}) is valid.\\
1369079d581eSLawrence Tang\hline
1370079d581eSLawrence TangchipIdentificationValid & boolean & Whether the "extended.chipIdentification" field of a Memory Error (\ref{section:memoryerrorsection}) is valid.\\
1371079d581eSLawrence Tang\jsontableend{Memory Error validation structure field table.}
1372079d581eSLawrence Tang
1373079d581eSLawrence Tang% Memory error normal bank addressing structure.
1374079d581eSLawrence Tang\subsection{Memory Error Standard Bank Address Structure}
1375079d581eSLawrence Tang\label{subsection:memoryerrorstandardbankaddressstructure}
1376079d581eSLawrence 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".
1377079d581eSLawrence Tang\jsontable{table:memoryerrorstandardbankaddressstructure}
1378079d581eSLawrence Tangvalue & uint64 & The value of the bank address.\\
1379079d581eSLawrence Tang\jsontableend{Memory Error Standard Bank Address structure field table.}
1380079d581eSLawrence Tang
1381079d581eSLawrence Tang% Memory error address/group bank addressing structure.
1382079d581eSLawrence Tang\subsection{Memory Error Address/Group Bank Address Structure}
1383079d581eSLawrence Tang\label{subsection:memoryerroraddressgroupbankaddressstructure}
1384079d581eSLawrence 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".
1385079d581eSLawrence Tang\jsontable{table:memoryerroraddressgroupbankaddressstructure}
1386079d581eSLawrence Tangaddress & uint64 & The address of the bank.\\
1387079d581eSLawrence Tang\hline
1388079d581eSLawrence Tanggroup & uint64 & The group of the bank.\\
1389079d581eSLawrence Tang\jsontableend{Memory Error Address/Group Bank Address structure field table.}
1390079d581eSLawrence Tang
1391079d581eSLawrence Tang% Memory error 2 section.
1392079d581eSLawrence Tang\section{Memory Error 2 Section}
1393079d581eSLawrence Tang\label{section:memoryerror2section}
1394079d581eSLawrence 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 \}\}}.
1395079d581eSLawrence Tang\jsontable{table:memoryerror2section}
1396079d581eSLawrence TangvalidationBits & object & A Memory Error 2 Validation structure, as described in Subsection \ref{subsection:memoryerror2validationstructure}.\\
1397079d581eSLawrence Tang\hline
1398079d581eSLawrence TangerrorStatus & object & A CPER Generic Error Status structure, as described in Subsection \ref{subsection:genericerrorstatusstructure}.\\
1399079d581eSLawrence Tang\hline
1400079d581eSLawrence 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.\\
1401079d581eSLawrence Tang\hline
1402079d581eSLawrence TangmemoryErrorType.value & uint64 & The raw value of the memory error type.\\
1403079d581eSLawrence TangmemoryErrorType.name & string & The human readable name, if available, of the memory error type.\\
1404079d581eSLawrence Tang\hline
1405079d581eSLawrence Tangstatus.value & int & The raw value of the memory error status.\\
1406079d581eSLawrence Tangstatus.state & string & The human readable value, if available, of the memory error status (corrected/uncorrected).\\
1407079d581eSLawrence Tang\hline
1408079d581eSLawrence TangphysicalAddress & uint64 & The physical address at which the error occurred.\\
1409079d581eSLawrence Tang\hline
1410079d581eSLawrence TangphysicalAddressMask & uint64 & Defines the valid address bits in the \texttt{physicalAddress} field.\\
1411079d581eSLawrence Tang\hline
1412079d581eSLawrence Tangnode & uint64 & Identifies the node containing the memory error, if in a multi-node system.\\
1413079d581eSLawrence Tang\hline
1414079d581eSLawrence Tangcard & uint64 & The card number of the memory error location.\\
1415079d581eSLawrence Tang\hline
1416079d581eSLawrence Tangmodule & uint64 & The module of the offending memory error location.\\
1417079d581eSLawrence Tang\hline
1418079d581eSLawrence Tangdevice & uint64 & The device number of the memory associated with the error.\\
1419079d581eSLawrence Tang\hline
1420079d581eSLawrence Tangrow & uint64 & The first 16 bits of the row number of the memory location.\\
1421079d581eSLawrence Tang\hline
1422079d581eSLawrence Tangcolumn & uint64 & The column number of the memory error location.\\
1423079d581eSLawrence Tang\hline
1424079d581eSLawrence TangbitPosition & uint64 & The bit position at which the error occurred.\\
1425079d581eSLawrence Tang\hline
1426079d581eSLawrence Tangrank & uint64 & The rank number of the error location.\\
1427079d581eSLawrence Tang\hline
1428079d581eSLawrence TangchipID & uint64 & Chip identifier. Encoded field used to address the die in 3DS packages.\\
1429079d581eSLawrence Tang\hline
1430079d581eSLawrence TangrequestorID & uint64 & Hardware address of the device that initiated the errored transaction.\\
1431079d581eSLawrence Tang\hline
1432079d581eSLawrence TangresponderID & uint64 & Hardware address of the device that responded to the transaction.\\
1433079d581eSLawrence Tang\hline
1434079d581eSLawrence TangtargetID & uint64 & Hardware address of the intended target of the transaction.\\
1435079d581eSLawrence Tang\hline
1436079d581eSLawrence TangcardSmbiosHandle & uint64 & The SMBIOS handle for the memory card's Type 16 Memory Array Structure.\\
1437079d581eSLawrence Tang\hline
1438079d581eSLawrence TangmoduleSmbiosHandle & uint64 & The SMBIOS handle for the memory module's Type 17 Memory Device Structure.\\
1439079d581eSLawrence Tang\jsontableend{Memory Error 2 structure field table.}
1440079d581eSLawrence Tang
1441079d581eSLawrence Tang% Memory error 2 validation structure.
1442079d581eSLawrence Tang\subsection{Memory Error 2 Validation Structure}
1443079d581eSLawrence Tang\label{subsection:memoryerror2validationstructure}
1444079d581eSLawrence TangThis structure describes whether fields in a single Memory Error 2 (\ref{section:memoryerror2section}) are valid, using boolean fields.
1445079d581eSLawrence Tang\jsontable{table:memoryerror2validationstructure}
1446079d581eSLawrence TangerrorStatusValid & boolean & Whether the "errorStatus" field of a Memory Error 2 (\ref{section:memoryerror2section}) is valid.\\
1447079d581eSLawrence Tang\hline
1448079d581eSLawrence TangphysicalAddressValid & boolean & Whether the "physicalAddress" field of a Memory Error 2 (\ref{section:memoryerror2section}) is valid.\\
1449079d581eSLawrence Tang\hline
1450079d581eSLawrence TangphysicalAddressMaskValid & boolean & Whether the "physicalAddressMask" field of a Memory Error 2 (\ref{section:memoryerror2section}) is valid.\\
1451079d581eSLawrence Tang\hline
1452079d581eSLawrence TangnodeValid & boolean & Whether the "node" field of a Memory Error 2 (\ref{section:memoryerror2section}) is valid.\\
1453079d581eSLawrence Tang\hline
1454079d581eSLawrence TangcardValid & boolean & Whether the "card" field of a Memory Error 2 (\ref{section:memoryerror2section}) is valid.\\
1455079d581eSLawrence Tang\hline
1456079d581eSLawrence TangmoduleValid & boolean & Whether the "module" field of a Memory Error 2 (\ref{section:memoryerror2section}) is valid.\\
1457079d581eSLawrence Tang\hline
1458079d581eSLawrence 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.\\
1459079d581eSLawrence Tang\hline
1460079d581eSLawrence TangdeviceValid & boolean & Whether the "device" field of a Memory Error 2 (\ref{section:memoryerror2section}) is valid.\\
1461079d581eSLawrence Tang\hline
1462079d581eSLawrence TangrowValid & boolean & Whether the "row" field of a Memory Error 2 (\ref{section:memoryerror2section}) is valid.\\
1463079d581eSLawrence Tang\hline
1464079d581eSLawrence TangcolumnValid & boolean & Whether the "column" field of a Memory Error 2 (\ref{section:memoryerror2section}) is valid.\\
1465079d581eSLawrence Tang\hline
1466079d581eSLawrence TangrankValid & boolean & Whether the "rank" field of a Memory Error 2 (\ref{section:memoryerror2section}) is valid.\\
1467079d581eSLawrence Tang\hline
1468079d581eSLawrence TangbitPositionValid & boolean & Whether the "bitPosition" field of a Memory Error 2 (\ref{section:memoryerror2section}) is valid.\\
1469079d581eSLawrence Tang\hline
1470079d581eSLawrence TangchipIDValid & boolean & Whether the "chipID" field of a Memory Error 2 (\ref{section:memoryerror2section}) is valid.\\
1471079d581eSLawrence Tang\hline
1472079d581eSLawrence TangmemoryErrorTypeValid & boolean & Whether the "memoryErrorType" field of a Memory Error 2 (\ref{section:memoryerror2section}) is valid.\\
1473079d581eSLawrence Tang\hline
1474079d581eSLawrence TangstatusValid & boolean & Whether the "status" field of a Memory Error 2 (\ref{section:memoryerror2section}) is valid.\\
1475079d581eSLawrence Tang\hline
1476079d581eSLawrence TangrequestorIDValid & boolean & Whether the "requestorID" field of a Memory Error 2 (\ref{section:memoryerror2section}) is valid.\\
1477079d581eSLawrence Tang\hline
1478079d581eSLawrence TangresponderIDValid & boolean & Whether the "responderID" field of a Memory Error 2 (\ref{section:memoryerror2section}) is valid.\\
1479079d581eSLawrence Tang\hline
1480079d581eSLawrence TangtargetIDValid & boolean & Whether the "targetID" field of a Memory Error 2 (\ref{section:memoryerror2section}) is valid.\\
1481079d581eSLawrence Tang\hline
1482079d581eSLawrence TangcardHandleValid & boolean & Whether the "cardSmbiosHandle" field of a Memory Error 2 (\ref{section:memoryerror2section}) is valid.\\
1483079d581eSLawrence Tang\hline
1484079d581eSLawrence TangmoduleHandleValid & boolean & Whether the "moduleSmbiosHandle" field of a Memory Error 2 (\ref{section:memoryerror2section}) is valid.\\
1485079d581eSLawrence Tang\hline
1486079d581eSLawrence TangbankGroupValid & boolean & Whether the "bankGroup" field of a Memory Error 2 (\ref{section:memoryerror2section}) is valid.\\
1487079d581eSLawrence Tang\hline
1488079d581eSLawrence TangbankAddressValid & boolean & Whether the "bankAddress" field of a Memory Error 2 (\ref{section:memoryerror2section}) is valid.\\
1489079d581eSLawrence Tang\jsontableend{Memory Error 2 validation structure field table.}
1490079d581eSLawrence Tang
1491079d581eSLawrence Tang% Memory error 2 normal bank addressing structure.
1492079d581eSLawrence Tang\subsection{Memory Error 2 Standard Bank Address Structure}
1493079d581eSLawrence Tang\label{subsection:memoryerror2standardbankaddressstructure}
1494079d581eSLawrence 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".
1495079d581eSLawrence Tang\jsontable{table:memoryerror2standardbankaddressstructure}
1496079d581eSLawrence Tangvalue & uint64 & The value of the bank address.\\
1497079d581eSLawrence Tang\jsontableend{Memory Error 2 Standard Bank Address structure field table.}
1498079d581eSLawrence Tang
1499079d581eSLawrence Tang% Memory error 2 address/group bank addressing structure.
1500079d581eSLawrence Tang\subsection{Memory Error 2 Address/Group Bank Address Structure}
1501079d581eSLawrence Tang\label{subsection:memoryerror2addressgroupbankaddressstructure}
1502079d581eSLawrence 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".
1503079d581eSLawrence Tang\jsontable{table:memoryerror2addressgroupbankaddressstructure}
1504079d581eSLawrence Tangaddress & uint64 & The address of the bank.\\
1505079d581eSLawrence Tang\hline
1506079d581eSLawrence Tanggroup & uint64 & The group of the bank.\\
1507079d581eSLawrence Tang\jsontableend{Memory Error 2 Address/Group Bank Address structure field table.}
1508079d581eSLawrence Tang
1509079d581eSLawrence Tang% PCIe error section.
1510079d581eSLawrence Tang\section{PCIe Error Section}
1511079d581eSLawrence Tang\label{section:pcieerrorsection}
1512079d581eSLawrence 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 \}\}}.
1513079d581eSLawrence Tang\jsontable{table:pcieerrorsection}
1514079d581eSLawrence TangvalidationBits & object & A PCIe Error Validation structure as defined in Subsection \ref{subsection:pcieerrorvalidationstructure}.\\
1515079d581eSLawrence Tang\hline
1516079d581eSLawrence TangportType.value & uint64 & The raw value of the port type for this error.\\
1517079d581eSLawrence TangportType.name & string & The human readable name, if available, of the port type for this error.\\
1518079d581eSLawrence Tang\hline
1519079d581eSLawrence Tangversion.major & int & The major version number for the PCIe specification supported.\\
1520079d581eSLawrence Tangversion.minor & int & The minor version number for the PCIe specification supported.\\
1521079d581eSLawrence Tang\hline
1522079d581eSLawrence TangcommandStatus.commandRegister & uint64 & The PCI command register value.\\
1523079d581eSLawrence TangcommandStatus.statusRegister & uint64 & The PCI status register value.\\
1524079d581eSLawrence Tang\hline
1525079d581eSLawrence TangdeviceID & object & A PCIe Device ID structure as defined in Subsection \ref{subsection:pciedeviceidstructure}.\\
1526079d581eSLawrence Tang\hline
1527079d581eSLawrence TangdeviceSerialNumber & uint64 & The serial number of the device.\\
1528079d581eSLawrence Tang\hline
1529079d581eSLawrence TangbridgeControlStatus.secondaryStatusRegister & uint64 & The bridge secondary status register. \emph{This field is valid for bridges only.}\\
1530079d581eSLawrence Tang\hline
1531079d581eSLawrence TangbridgeControlStatus.controlRegister & uint64 & The bridge control register. \emph{This field is valid for bridges only.}\\
1532079d581eSLawrence Tang\hline
1533079d581eSLawrence 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).\\
1534079d581eSLawrence Tang\hline
15353ab351feSLawrence Tang% aerInfo & object & A PCIe AER Extended Capability structure, as defined in Subsection \ref{subsection:pcieaerecstructure}.\\
15363ab351feSLawrence TangaerInfo.data & string & A base64-formatted representation of a PCIe AER Extended Capability structure.\\
1537079d581eSLawrence Tang\jsontableend{PCIe Error structure field table.}
1538079d581eSLawrence Tang
1539079d581eSLawrence Tang% PCIe error validation structure.
1540079d581eSLawrence Tang\subsection{PCIe Error Validation Structure}
1541079d581eSLawrence Tang\label{subsection:pcieerrorvalidationstructure}
1542079d581eSLawrence TangThis structure describes which fields within a PCIe Error section (\ref{section:pcieerrorsection}) are valid, using boolean fields.
1543079d581eSLawrence Tang\jsontable{table:pcieerrorvalidationstructure}
1544079d581eSLawrence TangportTypeValid & boolean & Whether the "portType" field within a PCIe Error section (\ref{section:pcieerrorsection}) is valid.\\
1545079d581eSLawrence Tang\hline
1546079d581eSLawrence TangversionValid & boolean & Whether the "version" field within a PCIe Error section (\ref{section:pcieerrorsection}) is valid.\\
1547079d581eSLawrence Tang\hline
1548079d581eSLawrence TangcommandStatusValid & boolean & Whether the "commandStatus" field within a PCIe Error section (\ref{section:pcieerrorsection}) is valid.\\
1549079d581eSLawrence Tang\hline
1550079d581eSLawrence TangdeviceIDValid & boolean & Whether the "deviceID" field within a PCIe Error section (\ref{section:pcieerrorsection}) is valid.\\
1551079d581eSLawrence Tang\hline
1552079d581eSLawrence TangdeviceSerialNumberValid & boolean & Whether the "deviceSerialNumber" field within a PCIe Error section (\ref{section:pcieerrorsection}) is valid.\\
1553079d581eSLawrence Tang\hline
1554079d581eSLawrence TangbridgeControlStatusValid & boolean & Whether the "bridgeControlStatus" field within a PCIe Error section (\ref{section:pcieerrorsection}) is valid.\\
1555079d581eSLawrence Tang\hline
1556079d581eSLawrence TangcapabilityStructureStatusValid & boolean & Whether the "capabilityStructure" field within a PCIe Error section (\ref{section:pcieerrorsection}) is valid.\\
1557079d581eSLawrence Tang\hline
1558079d581eSLawrence TangaerInfoValid & boolean & Whether the "aerInfo" field within a PCIe Error section (\ref{section:pcieerrorsection}) is valid.\\
1559079d581eSLawrence Tang\hline
1560079d581eSLawrence Tang\jsontableend{PCIe Error validation structure field table.}
1561079d581eSLawrence Tang
1562079d581eSLawrence Tang% PCIe Device ID structure.
1563079d581eSLawrence Tang\subsection{PCIe Device ID Structure}
1564079d581eSLawrence Tang\label{subsection:pciedeviceidstructure}
1565079d581eSLawrence TangThis structure describes a PCIe device ID, for use in a PCI Error section (\ref{table:pcieerrorsection}).
1566079d581eSLawrence Tang\jsontable{table:pciedeviceidstructure}
1567079d581eSLawrence TangvendorID & uint64 & The vendor ID of the PCIe device.\\
1568079d581eSLawrence Tang\hline
1569079d581eSLawrence TangdeviceID & uint64 & The device ID of the PCIe device.\\
1570079d581eSLawrence Tang\hline
1571079d581eSLawrence TangclassCode & uint64 & The class code of the PCIe device.\\
1572079d581eSLawrence Tang\hline
1573079d581eSLawrence TangfunctionNumber & uint64 & The function number of the PCIe device.\\
1574079d581eSLawrence Tang\hline
1575079d581eSLawrence TangdeviceNumber & uint64 & The device number of the PCIe device.\\
1576079d581eSLawrence Tang\hline
1577079d581eSLawrence TangsegmentNumber & uint64 & The segment number of the PCIe device.\\
1578079d581eSLawrence Tang\hline
1579079d581eSLawrence TangprimaryOrDeviceBusNumber & uint64 & The root port/bridge primary bus number or device bus number of the PCIe device.\\
1580079d581eSLawrence Tang\hline
1581079d581eSLawrence TangsecondaryBusNumber & uint64 & The root port/bridge secondary bus number of the PCIe device.\\
1582079d581eSLawrence Tang\hline
1583079d581eSLawrence TangslotNumber & uint64 & The slot number of the PCIe device.\\
1584079d581eSLawrence Tang\jsontableend{PCIe Device ID structure field table.}
1585079d581eSLawrence Tang
15863ab351feSLawrence Tang% % PCIe Advanced Error Reporting Extended Capability structure.
15873ab351feSLawrence Tang% \subsection{PCIe AER Extended Capability Structure}
15883ab351feSLawrence Tang% \label{subsection:pcieaerecstructure}
15893ab351feSLawrence Tang% This structure describes a PCIe Advanced Error Reporting Extended Capability structure, for use in a PCI Error section (\ref{table:pcieerrorsection}).
15903ab351feSLawrence Tang% \jsontable{table:pcieaerecstructure}
15913ab351feSLawrence Tang% capabilityID & uint64 & The capability ID for this AER structure.\\
15923ab351feSLawrence Tang% \hline
15933ab351feSLawrence Tang% capabilityVersion & uint64 & The capability structure version for this AER structure.\\
15943ab351feSLawrence Tang% \hline
15953ab351feSLawrence Tang% uncorrectableErrorStatusRegister & uint64 & The uncorrectable error status register value.\\
15963ab351feSLawrence Tang% \hline
15973ab351feSLawrence Tang% uncorrectableErrorMaskRegister & uint64 & The uncorrectable error mask register value.\\
15983ab351feSLawrence Tang% \hline
15993ab351feSLawrence Tang% uncorrectableErrorSeverityRegister & uint64 & The uncorrectable error severity register value.\\
16003ab351feSLawrence Tang% \hline
16013ab351feSLawrence Tang% correctableErrorStatusRegister & uint64 & The correctable error status register value.\\
16023ab351feSLawrence Tang% \hline
16033ab351feSLawrence Tang% correctableErrorMaskRegister & uint64 & The correctable error mask register value.\\
16043ab351feSLawrence Tang% \hline
16053ab351feSLawrence Tang% aeccReg & uint64 & The AECC register value.\\
16063ab351feSLawrence Tang% \hline
16073ab351feSLawrence Tang% headerLogRegister & string & A base64-encoded binary dump of the header log register.\\
16083ab351feSLawrence Tang% \hline
16093ab351feSLawrence Tang% rootErrorCommand & uint64 & The root error command.\\
16103ab351feSLawrence Tang% \hline
16113ab351feSLawrence Tang% rootErrorStatus & uint64 & The root error status.\\
16123ab351feSLawrence Tang% \hline
16133ab351feSLawrence Tang% errorSourceIDRegister & uint64 & The error source ID register.\\
16143ab351feSLawrence Tang% \hline
16153ab351feSLawrence Tang% correctableErrorSourceIDRegister & uint64 & The correctable error source ID register.\\
16163ab351feSLawrence Tang% \jsontableend{PCIe AER Extended Capability structure field table.}
1617079d581eSLawrence Tang
1618079d581eSLawrence Tang% PCI/PCI-X Bus error section.
1619079d581eSLawrence Tang\section{PCI/PCI-X Bus Error Section}
1620079d581eSLawrence Tang\label{section:pcibuserrorsection}
1621079d581eSLawrence 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 \}\}}.
1622079d581eSLawrence Tang\jsontable{table:pcibuserrorsection}
1623079d581eSLawrence TangvalidationBits & object & A PCI/PCI-X Bus Error Validation structure, as described in Subsection \ref{subsection:pcibuserrorvalidationstructure}.\\
1624079d581eSLawrence Tang\hline
1625079d581eSLawrence TangerrorStatus & object & A CPER Generic Error Status structure, as described in Subsection \ref{subsection:genericerrorstatusstructure}.\\
1626079d581eSLawrence Tang\hline
1627079d581eSLawrence TangerrorType.value & uint64 & The raw value of the error type for this bus error.\\
1628079d581eSLawrence TangerrorType.name & string & The human readable name, if available, of the error type for this bus error.\\
1629079d581eSLawrence Tang\hline
1630079d581eSLawrence TangbusID.busNumber & int & The bus number of this bus ID.\\
1631079d581eSLawrence TangbusID.segmentNumber & int & The segment number of this bus ID.\\
1632079d581eSLawrence Tang\hline
1633079d581eSLawrence TangbusAddress & uint64 & The memory or I/O address on the bus at the time of the error.\\
1634079d581eSLawrence Tang\hline
1635079d581eSLawrence TangbusData & uint64 & Data on the bus at the time of the error.\\
1636079d581eSLawrence Tang\hline
1637079d581eSLawrence TangbusCommandType & string & The type of command at the time of the error. Either "PCI" or "PCI-X".\\
1638079d581eSLawrence Tang\hline
1639079d581eSLawrence TangbusRequestorID & uint64 & The PCI bus requestor ID for the error.\\
1640079d581eSLawrence Tang\hline
1641079d581eSLawrence TangbusCompleterID & uint64 & The PCI bus completer ID for the error.\\
1642079d581eSLawrence Tang\hline
1643079d581eSLawrence TangtargetID & uint64 & The PCI bus intended target ID for the error.\\
1644079d581eSLawrence Tang\jsontableend{PCI/PCI-X Bus Error structure field table.}
1645079d581eSLawrence Tang
1646079d581eSLawrence Tang% PCI/PCI-X Bus error validation structure.
1647079d581eSLawrence Tang\subsection{PCI/PCI-X Bus Error Validation Structure}
1648079d581eSLawrence Tang\label{subsection:pcibuserrorvalidationstructure}
1649079d581eSLawrence TangThis structure describes which fields within a PCI/PCI-X Bus Error section (\ref{section:pcibuserrorsection}) are valid, using boolean fields.
1650079d581eSLawrence Tang\jsontable{table:pcibuserrorvalidationstructure}
1651079d581eSLawrence TangerrorStatusValid & boolean & Whether the "errorStatus" field of the PCI/PCI-X Bus Error section (\ref{section:pcibuserrorsection}) is valid.\\
1652079d581eSLawrence Tang\hline
1653079d581eSLawrence TangerrorTypeValid & boolean & Whether the "errorType" field of the PCI/PCI-X Bus Error section (\ref{section:pcibuserrorsection}) is valid.\\
1654079d581eSLawrence Tang\hline
1655079d581eSLawrence TangbusIDValid & boolean & Whether the "busID" field of the PCI/PCI-X Bus Error section (\ref{section:pcibuserrorsection}) is valid.\\
1656079d581eSLawrence Tang\hline
1657079d581eSLawrence TangbusAddressValid & boolean & Whether the "busAddress" field of the PCI/PCI-X Bus Error section (\ref{section:pcibuserrorsection}) is valid.\\
1658079d581eSLawrence Tang\hline
1659079d581eSLawrence TangbusDataValid & boolean & Whether the "busData" field of the PCI/PCI-X Bus Error section (\ref{section:pcibuserrorsection}) is valid.\\
1660079d581eSLawrence Tang\hline
1661079d581eSLawrence TangcommandValid & boolean & Whether the "busCommandType" field of the PCI/PCI-X Bus Error section (\ref{section:pcibuserrorsection}) is valid.\\
1662079d581eSLawrence Tang\hline
1663079d581eSLawrence TangrequestorIDValid & boolean & Whether the "busRequestorID" field of the PCI/PCI-X Bus Error section (\ref{section:pcibuserrorsection}) is valid.\\
1664079d581eSLawrence Tang\hline
1665079d581eSLawrence TangcompleterIDValid & boolean & Whether the "busCompleterID" field of the PCI/PCI-X Bus Error section (\ref{section:pcibuserrorsection}) is valid.\\
1666079d581eSLawrence Tang\hline
1667079d581eSLawrence TangtargetIDValid & boolean & Whether the "targetID" field of the PCI/PCI-X Bus Error section (\ref{section:pcibuserrorsection}) is valid.\\
1668079d581eSLawrence Tang\jsontableend{PCI/PCI-X Bus Error validation structure field table.}
1669079d581eSLawrence Tang
1670079d581eSLawrence Tang% PCI/PCI-X Component error section.
1671079d581eSLawrence Tang\section{PCI/PCI-X Component Error Section}
1672079d581eSLawrence Tang\label{section:pcicomponenterrorsection}
1673079d581eSLawrence 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 \}\}}.
1674079d581eSLawrence Tang\jsontable{table:pcicomponenterrorsection}
1675079d581eSLawrence TangvalidationBits & object & A PCI/PCI-X Component Error Validation structure, as defined in Subsection \ref{subsection:pcicomponenterrorvalidationstructure}.\\
1676079d581eSLawrence Tang\hline
1677079d581eSLawrence TangerrorStatus & object & A CPER Generic Error Status structure, as described in Subsection \ref{subsection:genericerrorstatusstructure}.\\
1678079d581eSLawrence Tang\hline
1679079d581eSLawrence TangidInfo & object & A PCI/PCI-X Component ID structure, as defined in Subsection \ref{subsection:pcicomponentidstructure}.\\
1680079d581eSLawrence Tang\hline
1681079d581eSLawrence TangmemoryNumber & uint64 & The number of PCI/PCI-X component memory mapped register address/data pair values are present in this structure.\\
1682079d581eSLawrence Tang\hline
1683079d581eSLawrence TangioNumber & uint64 & The number of PCI/PCI-X component programmed I/O register address/data pair values are present in this structure.\\
1684079d581eSLawrence Tang\hline
1685079d581eSLawrence 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}.\\
1686079d581eSLawrence Tang\jsontableend{PCI/PCI-X Component Error structure field table.}
1687079d581eSLawrence Tang
1688079d581eSLawrence Tang% PCI/PCI-X Component error validation structure.
1689079d581eSLawrence Tang\subsection{PCI/PCI-X Component Error Validation Structure}
1690079d581eSLawrence Tang\label{subsection:pcicomponenterrorvalidationstructure}
1691079d581eSLawrence TangThis structure describes which fields within a PCI/PCI-X Component Error section (\ref{section:pcicomponenterrorsection}) are valid, using boolean fields.
1692079d581eSLawrence Tang\jsontable{table:pcicomponenterrorvalidationstructure}
1693079d581eSLawrence TangerrorStatusValid & boolean & Whether the "errorStatus" field of the PCI/PCI-X Component Error section (\ref{section:pcicomponenterrorsection}) is valid.\\
1694079d581eSLawrence Tang\hline
1695079d581eSLawrence TangidInfoValid & boolean & Whether the "idInfo" field of the PCI/PCI-X Component Error section (\ref{section:pcicomponenterrorsection}) is valid.\\
1696079d581eSLawrence Tang\hline
1697079d581eSLawrence TangmemoryNumberValid & boolean & Whether the "memoryNumber" field of the PCI/PCI-X Component Error section (\ref{section:pcicomponenterrorsection}) is valid.\\
1698079d581eSLawrence Tang\hline
1699079d581eSLawrence TangioNumberValid & boolean & Whether the "ioNumber" field of the PCI/PCI-X Component Error section (\ref{section:pcicomponenterrorsection}) is valid.\\
1700079d581eSLawrence Tang\hline
1701079d581eSLawrence TangregisterDataPairsValid & boolean & Whether the "registerDataPairs" field of the PCI/PCI-X Component Error section (\ref{section:pcicomponenterrorsection}) is valid.\\
1702079d581eSLawrence Tang\jsontableend{PCI/PCI-X Component Error validation structure field table.}
1703079d581eSLawrence Tang
1704079d581eSLawrence Tang% PCI/PCI-X Component ID structure.
1705079d581eSLawrence Tang\subsection{PCI/PCI-X Component ID Structure}
1706079d581eSLawrence Tang\label{subsection:pcicomponentidstructure}
1707079d581eSLawrence 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}).
1708079d581eSLawrence Tang\jsontable{table:pcicomponentidstructure}
1709079d581eSLawrence TangvendorID & uint64 & The vendor ID of this PCI/PCI-X component.\\
1710079d581eSLawrence Tang\hline
1711079d581eSLawrence TangdeviceID & uint64 & The device ID of this PCI/PCI-X component.\\
1712079d581eSLawrence Tang\hline
1713079d581eSLawrence TangclassCode & uint64 & The class code of this PCI/PCI-X component.\\
1714079d581eSLawrence Tang\hline
1715079d581eSLawrence TangfunctionNumber & uint64 & The function number of this PCI/PCI-X component.\\
1716079d581eSLawrence Tang\hline
1717079d581eSLawrence TangdeviceNumber & uint64 & The device number of this PCI/PCI-X component.\\
1718079d581eSLawrence Tang\hline
1719079d581eSLawrence TangbusNumber & uint64 & The bus number of this PCI/PCI-X component.\\
1720079d581eSLawrence Tang\hline
1721079d581eSLawrence TangsegmentNumber & uint64 & The segment number of this PCI/PCI-X component.\\
1722079d581eSLawrence Tang\jsontableend{PCI/PCI-X Component ID structure field table.}
1723079d581eSLawrence Tang
1724079d581eSLawrence Tang% PCI/PCI-X Component Register Pair structure.
1725079d581eSLawrence Tang\subsection{PCI/PCI-X Component Register Pair Structure}
1726079d581eSLawrence Tang\label{subsection:pcicomponentregisterpairstructure}
1727079d581eSLawrence 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.
1728079d581eSLawrence Tang\jsontable{table:pcicomponentregisterpairstructure}
1729079d581eSLawrence TangfirstHalf & uint64 & The first 8 bytes of the 16 byte register pair structure.\\
1730079d581eSLawrence Tang\hline
1731079d581eSLawrence TangsecondHalf & uint64 & The second 8 bytes of the 16 byte register pair structure.\\
1732079d581eSLawrence Tang\jsontableend{PCI/PCI-X Component Register Pair structure field table.}
1733079d581eSLawrence Tang
1734079d581eSLawrence Tang% Firmware error section.
1735079d581eSLawrence Tang\section{Firmware Error Section}
1736079d581eSLawrence Tang\label{section:firmwareerrorsection}
1737079d581eSLawrence 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 \}\}}.
1738079d581eSLawrence Tang\jsontable{table:firmwareerrorsection}
1739079d581eSLawrence TangerrorRecordType.value & uint64 & The raw value of the type of firmware error record this is.\\
1740079d581eSLawrence TangerrorRecordType.name & string & The human readable name, if available, of the type of firmware error record this is.\\
1741079d581eSLawrence Tang\hline
1742079d581eSLawrence Tangrevision & int & The header revision of this record. For the referenced UEFI specification, this value is 2.\\
1743079d581eSLawrence Tang\hline
1744079d581eSLawrence 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.\\
1745079d581eSLawrence Tang\hline
1746079d581eSLawrence 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.\\
1747079d581eSLawrence Tang\jsontableend{Firmware Error structure field table.}
1748079d581eSLawrence Tang
1749079d581eSLawrence Tang% Generic DMAr error section.
1750079d581eSLawrence Tang\section{Generic DMAr Error Section}
1751079d581eSLawrence Tang\label{section:dmargenericerrorsection}
1752079d581eSLawrence 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 \}\}}.
1753079d581eSLawrence Tang\jsontable{table:dmargenericerrorsection}
1754079d581eSLawrence TangrequesterID & int & The device ID associated with the fault condition.\\
1755079d581eSLawrence Tang\hline
1756079d581eSLawrence TangsegmentNumber & int & The segment number associated with the device.\\
1757079d581eSLawrence Tang\hline
1758079d581eSLawrence TangfaultReason.value & uint64 & The raw value of the reason for the fault.\\
1759079d581eSLawrence TangfaultReason.name & string & The human readable name, if available, of the reason for the fault.\\
17604237584eSLawrence TangfaultReason.description & string (\textbf{optional}) & A human readable description, if available, of the reason for the fault.\\
1761079d581eSLawrence Tang\hline
1762079d581eSLawrence TangaccessType.value & uint64 & The raw value of the access type that caused the fault.\\
1763079d581eSLawrence TangaccessType.name & string & The human readable name, if available, of the access type that caused the fault.\\
1764079d581eSLawrence Tang\hline
1765079d581eSLawrence TangaddressType.value & uint64 & The raw value of the addressing type that caused the fault.\\
1766079d581eSLawrence TangaddressType.name & string & The human readable name, if available, of the addressing type that caused the fault.\\
1767079d581eSLawrence Tang\hline
1768079d581eSLawrence TangarchitectureType.value & uint64 & The raw value of the DMAr architecture type.\\
1769079d581eSLawrence TangarchitectureType.name & string & The human readable name, if available, of the DMAr architecture type.\\
1770079d581eSLawrence Tang\hline
1771079d581eSLawrence TangdeviceAddress & uint64 & The 64-bit device virtual address contained in the faulted DMA request.\\
1772079d581eSLawrence Tang\jsontableend{Generic DMAr Error structure field table.}
1773079d581eSLawrence Tang
1774079d581eSLawrence Tang% VT-d DMAr error section.
1775079d581eSLawrence Tang\section{VT-d DMAr Error Section}
1776079d581eSLawrence Tang\label{section:vtddmarerrorsection}
1777079d581eSLawrence 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 \}\}}.
1778079d581eSLawrence Tang\jsontable{table:vtddmarerrorsection}
1779079d581eSLawrence Tangversion & int & Version register value as defined in the VT-d specification.\\
1780079d581eSLawrence Tang\hline
1781079d581eSLawrence Tangrevision & int & Revision field in VT-d specific DMA remapping reporting structure.\\
1782079d581eSLawrence Tang\hline
1783079d581eSLawrence TangoemID & uint64 & OEM ID field in VT-d specific DMA remapping reporting structure.\\
1784079d581eSLawrence Tang\hline
1785079d581eSLawrence TangcapabilityRegister & uint64 & Value of VT-d capability register.\\
1786079d581eSLawrence Tang\hline
1787079d581eSLawrence TangextendedCapabilityRegister & uint64 & Value of VT-d extended capability register.\\
1788079d581eSLawrence Tang\hline
1789079d581eSLawrence TangglobalCommandRegister & uint64 & Value of VT-d global command register.\\
1790079d581eSLawrence Tang\hline
1791079d581eSLawrence TangglobalStatusRegister & uint64 & Value of VT-d global status register.\\
1792079d581eSLawrence Tang\hline
1793079d581eSLawrence TangfaultStatusRegister & uint64 & Value of VT-d fault status register.\\
1794079d581eSLawrence Tang\hline
1795079d581eSLawrence TangfaultRecord & object & A VT-d DMAR Fault Record structure, as defined in Subsection \ref{subsection:vtddmarfaultrecordstructure}.\\
1796079d581eSLawrence Tang\hline
1797079d581eSLawrence TangrootEntry & string & A base64-represented binary dump of the root entry table for the associated requester ID.\\
1798079d581eSLawrence Tang\hline
1799079d581eSLawrence TangcontextEntry & string & A base64-represented binary dump of the context entry table for the associated requester ID.\\
1800079d581eSLawrence Tang\hline
1801079d581eSLawrence TangpageTableEntry\_Level6 & uint64 & The page table entry for the device virtual address in page level 6.\\
1802079d581eSLawrence Tang\hline
1803079d581eSLawrence TangpageTableEntry\_Level5 & uint64 & The page table entry for the device virtual address in page level 5.\\
1804079d581eSLawrence Tang\hline
1805079d581eSLawrence TangpageTableEntry\_Level4 & uint64 & The page table entry for the device virtual address in page level 4.\\
1806079d581eSLawrence Tang\hline
1807079d581eSLawrence TangpageTableEntry\_Level3 & uint64 & The page table entry for the device virtual address in page level 3.\\
1808079d581eSLawrence Tang\hline
1809079d581eSLawrence TangpageTableEntry\_Level2 & uint64 & The page table entry for the device virtual address in page level 2.\\
1810079d581eSLawrence Tang\hline
1811079d581eSLawrence TangpageTableEntry\_Level1 & uint64 & The page table entry for the device virtual address in page level 1.\\
1812079d581eSLawrence Tang\jsontableend{VT-d DMAr Error structure field table.}
1813079d581eSLawrence Tang
1814079d581eSLawrence Tang% VT-d DMAR Fault Record structure.
1815079d581eSLawrence Tang\subsection{VT-d DMAR Fault Record Structure}
1816079d581eSLawrence Tang\label{subsection:vtddmarfaultrecordstructure}
1817079d581eSLawrence TangThis structure describes a fault record, which forms part of a single VT-d DMAr Error section (\ref{section:vtddmarerrorsection}).
1818079d581eSLawrence Tang\jsontable{table:vtddmarfaultrecordstructure}
1819079d581eSLawrence TangfaultInformation & uint64 & Fault information field as defined in the VT-d specification.\\
1820079d581eSLawrence Tang\hline
1821079d581eSLawrence TangsourceIdentifier & uint64 & Identifier of the source of the VT-d fault.\\
1822079d581eSLawrence Tang\hline
1823079d581eSLawrence TangprivelegeModeRequested & boolean & Whether privelege mode was requested.\\
1824079d581eSLawrence Tang\hline
1825079d581eSLawrence TangexecutePermissionRequested & boolean & Whether execute permission was requested.\\
1826079d581eSLawrence Tang\hline
1827079d581eSLawrence TangpasidPresent & boolean & Whether the "pasidValue" field contains valid data.\\
1828079d581eSLawrence Tang\hline
1829079d581eSLawrence TangfaultReason & uint64 & The reason for the VT-d fault, as defined in the VT-d specification.\\
1830079d581eSLawrence Tang\hline
1831079d581eSLawrence TangpasidValue & uint64 & The PASID associated with the fault.\\
1832079d581eSLawrence Tang\hline
1833079d581eSLawrence TangaddressType & uint64 & The addressing type of the fault, as defined by the VT-d specification.\\
1834079d581eSLawrence Tang\hline
1835079d581eSLawrence Tangtype.value & uint64 & The raw value of the type of VT-d fault record.\\
1836079d581eSLawrence Tangtype.name & string & The human readable name, if available, of the type of VT-d fault record.\\
1837079d581eSLawrence Tang\jsontableend{VT-d DMAR Fault Record structure field table.}
1838079d581eSLawrence Tang
1839079d581eSLawrence Tang% IOMMU DMAr error section.
1840079d581eSLawrence Tang\section{IOMMU DMAr Error Section}
1841079d581eSLawrence Tang\label{section:iommudmarerrorsection}
1842079d581eSLawrence 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 \}\}}.
1843079d581eSLawrence Tang\jsontable{table:iommudmarerrorsection}
1844079d581eSLawrence Tangrevision & int & The IOMMU specification revision.\\
1845079d581eSLawrence Tang\hline
1846079d581eSLawrence TangcontrolRegister & uint64 & The IOMMU control register value.\\
1847079d581eSLawrence Tang\hline
1848079d581eSLawrence TangstatusRegister & uint64 & The IOMMU status register value.\\
1849079d581eSLawrence Tang\hline
1850079d581eSLawrence TangeventLogEntry & string & A base-64 binary dump of the IOMMU fault-related event log entry, as defined in the IOMMU specification.\\
1851079d581eSLawrence Tang\hline
1852079d581eSLawrence TangdeviceTableEntry & string & A base-64 representation of the value from the device table for a given requester ID.\\
1853079d581eSLawrence Tang\hline
1854079d581eSLawrence TangpageTableEntry\_Level6 & uint64 & Page table entry for device virtual address in page level 6.\\
1855079d581eSLawrence Tang\hline
1856079d581eSLawrence TangpageTableEntry\_Level5 & uint64 & Page table entry for device virtual address in page level 5.\\
1857079d581eSLawrence Tang\hline
1858079d581eSLawrence TangpageTableEntry\_Level4 & uint64 & Page table entry for device virtual address in page level 4.\\
1859079d581eSLawrence Tang\hline
1860079d581eSLawrence TangpageTableEntry\_Level3 & uint64 & Page table entry for device virtual address in page level 3.\\
1861079d581eSLawrence Tang\hline
1862079d581eSLawrence TangpageTableEntry\_Level2 & uint64 & Page table entry for device virtual address in page level 2.\\
1863079d581eSLawrence Tang\hline
1864079d581eSLawrence TangpageTableEntry\_Level1 & uint64 & Page table entry for device virtual address in page level 1.\\
1865079d581eSLawrence Tang\jsontableend{IOMMU DMAr Error structure field table.}
1866079d581eSLawrence Tang
1867079d581eSLawrence Tang% CCIX PER error section.
1868079d581eSLawrence Tang\section{CCIX PER Error Section}
1869079d581eSLawrence Tang\label{section:ccixpererrorsection}
1870079d581eSLawrence 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 \}\}}.
1871079d581eSLawrence Tang\jsontable{table:ccixpererrorsection}
1872079d581eSLawrence Tanglength & uint64 & The length (in bytes) of the entire structure.\\
1873079d581eSLawrence Tang\hline
1874079d581eSLawrence TangvalidationBits & object & A CCIX PER Validation structure as described in Subsection \ref{subsection:ccixpervalidationstructure}.\\
1875079d581eSLawrence Tang\hline
1876079d581eSLawrence 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.\\
1877079d581eSLawrence Tang\hline
1878079d581eSLawrence TangccixPortID & int & The CCIX Port ID that reported this error.\\
1879079d581eSLawrence Tang\hline
1880079d581eSLawrence 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).\\
1881079d581eSLawrence Tang\jsontableend{CCIX PER Error structure field table.}
1882079d581eSLawrence Tang
1883079d581eSLawrence Tang% CCIX PER Validation structure.
1884079d581eSLawrence Tang\subsection{CCIX PER Validation Structure}
1885079d581eSLawrence Tang\label{subsection:ccixpervalidationstructure}
1886079d581eSLawrence TangThis structure describes which fields are valid in a CCIX PER Error section (\ref{section:ccixpererrorsection}) using boolean fields.
1887079d581eSLawrence Tang\jsontable{table:ccixpervalidationstructure}
1888079d581eSLawrence TangccixSourceIDValid & boolean & Whether the "ccixSourceID" field in the CCIX PER Error Section (\ref{section:ccixpererrorsection}) is valid.\\
1889079d581eSLawrence Tang\hline
1890079d581eSLawrence TangccixPortIDValid & boolean & Whether the "ccixPortID" field in the CCIX PER Error Section (\ref{section:ccixpererrorsection}) is valid.\\
1891079d581eSLawrence Tang\hline
1892079d581eSLawrence TangccixPERLogValid & boolean & Whether the "ccixPERLog" field in the CCIX PER Error Section (\ref{section:ccixpererrorsection}) is valid.\\
1893079d581eSLawrence Tang\jsontableend{CCIX PER validation structure field table.}
1894079d581eSLawrence Tang
1895079d581eSLawrence Tang% CXL Protocol error section.
1896079d581eSLawrence Tang\section{CXL Protocol Error Section}
1897079d581eSLawrence Tang\label{section:cxlprotocolerrorsection}
1898079d581eSLawrence 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 \}\}}.
1899079d581eSLawrence Tang\jsontable{table:cxlprotocolerrorsection}
1900079d581eSLawrence TangvalidationBits & object & A CXL Protocol Validation structure as defined in Subsection \ref{subsection:cxlprotocolvalidationstructure}.\\
1901079d581eSLawrence Tang\hline
1902079d581eSLawrence TangagentType.value & uint64 & The raw value of the detecting CXL agent type.\\
1903079d581eSLawrence TangagentType.name & string & The human readable name, if available, of the CXL agent type.\\
1904079d581eSLawrence Tang\hline
19054237584eSLawrence TangcxlAgentAddress & 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.\\
1906079d581eSLawrence Tang\hline
1907079d581eSLawrence TangdeviceID & object & A CXL Device ID structure, as defined in Subsection \ref{subsection:cxlprotocoldeviceidstructure}.\\
1908079d581eSLawrence Tang\hline
1909079d581eSLawrence 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).\\
1910079d581eSLawrence Tang\hline
19114237584eSLawrence TangcapabilityStructure & string (\textbf{optional}) & 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).\\
1912079d581eSLawrence Tang\hline
1913079d581eSLawrence TangdvsecLength & int & Length (in bytes) of the CXL DVSEC structure.\\
1914079d581eSLawrence Tang\hline
1915079d581eSLawrence TangerrorLogLength & int & Length (in bytes) of the CXL Error Log structure.\\
1916079d581eSLawrence Tang\hline
1917079d581eSLawrence 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.\\
1918079d581eSLawrence Tang\hline
1919079d581eSLawrence 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.\\
1920079d581eSLawrence Tang\jsontableend{CXL Protocol Error structure field table.}
1921079d581eSLawrence Tang
1922079d581eSLawrence Tang% CXL Protocol Validation structure.
1923079d581eSLawrence Tang\subsection{CXL Protocol Validation Structure}
1924079d581eSLawrence Tang\label{subsection:cxlprotocolvalidationstructure}
1925079d581eSLawrence TangThis structure describes which fields are valid in a CXL Protocol Error section (\ref{section:cxlprotocolerrorsection}) using boolean fields.
1926079d581eSLawrence Tang\jsontable{table:cxlprotocolvalidationstructure}
1927079d581eSLawrence TangcxlAgentTypeValid & boolean & Whether the "cxlAgentType" field in the CXL Protocol Error section (\ref{section:cxlprotocolerrorsection}) is valid.\\
1928079d581eSLawrence Tang\hline
1929079d581eSLawrence TangcxlAgentAddressValid & boolean & Whether the "cxlAgentAddress" field in the CXL Protocol Error section (\ref{section:cxlprotocolerrorsection}) is valid.\\
1930079d581eSLawrence Tang\hline
1931079d581eSLawrence TangdeviceIDValid & boolean & Whether the "deviceID" field in the CXL Protocol Error section (\ref{section:cxlprotocolerrorsection}) is valid.\\
1932079d581eSLawrence Tang\hline
1933079d581eSLawrence TangdeviceSerialValid & boolean & Whether the "deviceSerial" field in the CXL Protocol Error section (\ref{section:cxlprotocolerrorsection}) is valid.\\
1934079d581eSLawrence Tang\hline
1935079d581eSLawrence TangcapabiltyStructureValid & boolean & Whether the "capabilityStructure" field in the CXL Protocol Error section (\ref{section:cxlprotocolerrorsection}) is valid.\\
1936079d581eSLawrence Tang\hline
1937079d581eSLawrence TangcxlDVSECValid & boolean & Whether the "cxlDVSEC" field in the CXL Protocol Error section (\ref{section:cxlprotocolerrorsection}) is valid.\\
1938079d581eSLawrence Tang\hline
1939079d581eSLawrence TangcxlErrorLogValid & boolean & Whether the "cxlErrorLog" field in the CXL Protocol Error section (\ref{section:cxlprotocolerrorsection}) is valid.\\
1940079d581eSLawrence Tang\jsontableend{CXL Protocol validation structure field table.}
1941079d581eSLawrence Tang
1942079d581eSLawrence Tang% CXL Protocol Device Agent Address structure.
1943079d581eSLawrence Tang\subsection{CXL Protocol Device Agent Address Structure}
1944079d581eSLawrence Tang\label{subsection:cxlprotocoldeviceagentaddressstructure}
1945079d581eSLawrence 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".
1946079d581eSLawrence Tang\jsontable{table:cxlprotocoldeviceagentaddressstructure}
1947079d581eSLawrence TangfunctionNumber & uint64 & The function number of the CXL device.\\
1948079d581eSLawrence Tang\hline
1949079d581eSLawrence TangdeviceNumber & uint64 & The device number of the CXL device.\\
1950079d581eSLawrence Tang\hline
1951079d581eSLawrence TangbusNumber & uint64 & The bus number of the CXL device.\\
1952079d581eSLawrence Tang\hline
1953079d581eSLawrence TangsegmentNumber & uint64 & The segment number of the CXL device.\\
1954079d581eSLawrence Tang\jsontableend{CXL Protocol Device Agent Address structure field table.}
1955079d581eSLawrence Tang
1956079d581eSLawrence Tang% CXL Protocol RCRB Base Address structure.
1957079d581eSLawrence Tang\subsection{CXL Protocol RCRB Base Address Structure}
1958079d581eSLawrence Tang\label{subsection:cxlprotocolrcrbaddressstructure}
1959079d581eSLawrence 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".
1960079d581eSLawrence Tang\jsontable{table:cxlprotocolrcrbaddressstructure}
1961079d581eSLawrence Tangvalue & uint64 & The CXL port RCRB base address.\\
1962079d581eSLawrence Tang\jsontableend{CXL Protocol RCRB Base Address structure field table.}
1963079d581eSLawrence Tang
1964079d581eSLawrence Tang% CXL Protocol Device ID structure.
1965079d581eSLawrence Tang\subsection{CXL Protocol Device ID Structure}
1966079d581eSLawrence Tang\label{subsection:cxlprotocoldeviceidstructure}
1967079d581eSLawrence TangThis structure describes the ID of a CXL device, for use in a CXL Protocol Error section (\ref{section:cxlprotocolerrorsection}).
1968079d581eSLawrence Tang\jsontable{table:cxlprotocoldeviceidstructure}
1969079d581eSLawrence TangvendorID & uint64 & The vendor ID of the CXL device.\\
1970079d581eSLawrence Tang\hline
1971079d581eSLawrence TangdeviceID & uint64 & The device ID of the CXL device.\\
1972079d581eSLawrence Tang\hline
1973079d581eSLawrence TangsubsystemVendorID & uint64 & The subsystem vendor ID of the CXL device.\\
1974079d581eSLawrence Tang\hline
1975079d581eSLawrence TangsubsystemDeviceID & uint64 & The subsystem device ID of the CXL device.\\
1976079d581eSLawrence Tang\hline
1977079d581eSLawrence TangclassCode & uint64 & The class code of the CXL device.\\
1978079d581eSLawrence Tang\hline
1979079d581eSLawrence TangslotNumber & uint64 & The slot number of the CXL device.\\
1980079d581eSLawrence Tang\jsontableend{CXL Protocol Device ID structure field table.}
1981079d581eSLawrence Tang
1982079d581eSLawrence Tang% CXL Component error section.
1983079d581eSLawrence Tang\section{CXL Component Error Section}
1984079d581eSLawrence Tang\label{section:cxlcomponenterrorsection}
1985079d581eSLawrence 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:\\
1986079d581eSLawrence Tang\begin{itemize}
1987079d581eSLawrence Tang    \item CXL General Media Error (\texttt{\{ 0xfbcd0a77, 0xc260, 0x417f, \{ 0x85, 0xa9, 0x08, 0x8b, 0x16, 0x21, 0xeb, 0xa6 \}\}})\\
1988079d581eSLawrence Tang    \item CXL DRAM Event Error (\texttt{\{ 0x601dcbb3, 0x9c06, 0x4eab, \{ 0xb8, 0xaf, 0x4e, 0x9b, 0xfb, 0x5c, 0x96, 0x24 \}\}})\\
1989079d581eSLawrence Tang    \item CXL Memory Module Error (\texttt{\{ 0xfe927475, 0xdd59, 0x4339, \{ 0xa5, 0x86, 0x79, 0xba, 0xb1, 0x13, 0xb7, 0x74 \}\}})\\
1990079d581eSLawrence Tang    \item CXL Physical Switch Error (\texttt{\{ 0x77cf9271, 0x9c02, 0x470b, \{ 0x9f, 0xe4, 0xbc, 0x7b, 0x75, 0xf2, 0xda, 0x97 \}\}})\\
1991079d581eSLawrence Tang    \item CXL Virtual Switch Error (\texttt{\{ 0x40d26425, 0x3396, 0x4c4d, \{ 0xa5, 0xda, 0x3d, 0x47, 0x26, 0x3a, 0xf4, 0x25 \}\}})\\
1992079d581eSLawrence Tang    \item CXL MLD Port Error (\texttt{\{ 0x8dc44363, 0x0c96, 0x4710, \{ 0xb7, 0xbf, 0x04, 0xbb, 0x99, 0x53, 0x4c, 0x3f \}\}})\\
1993079d581eSLawrence Tang\end{itemize}
1994079d581eSLawrence Tang\jsontable{table:cxlcomponenterrorsection}
19954237584eSLawrence Tanglength & uint64 & The length in bytes for the entire structure.\\
19964237584eSLawrence Tang\hline
1997079d581eSLawrence TangvalidationBits & object & A CXL Component Validation structure as described in Subsection \ref{subsection:cxlcomponentvalidationstructure}.\\
1998079d581eSLawrence Tang\hline
1999079d581eSLawrence TangdeviceID & object & A CXL Component Device ID structure as described in Subsection \ref{subsection:cxlcomponentdeviceidstructure}.\\
2000079d581eSLawrence Tang\hline
2001079d581eSLawrence TangdeviceSerial & uint64 & The serial of the CXL component.\\
2002079d581eSLawrence Tang\hline
2003079d581eSLawrence 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.\\
2004079d581eSLawrence Tang\jsontableend{CXL Component Error structure field table.}
2005079d581eSLawrence Tang
2006079d581eSLawrence Tang% CXL Component Validation structure.
2007079d581eSLawrence Tang\subsection{CXL Component Validation Structure}
2008079d581eSLawrence Tang\label{subsection:cxlcomponentvalidationstructure}
2009079d581eSLawrence TangThis structure describes which fields are valid in a CXL Component Error section (\ref{section:cxlcomponenterrorsection}) using boolean fields.
2010079d581eSLawrence Tang\jsontable{table:cxlcomponentvalidationstructure}
2011079d581eSLawrence TangdeviceIDValid & boolean & Whether the "deviceID" field of the CXL Component Error section (\ref{section:cxlcomponenterrorsection}) is valid.\\
2012079d581eSLawrence Tang\hline
2013079d581eSLawrence TangdeviceSerialValid & boolean & Whether the "deviceSerial" field of the CXL Component Error section (\ref{section:cxlcomponenterrorsection}) is valid.\\
2014079d581eSLawrence Tang\hline
2015079d581eSLawrence TangcxlComponentEventLogValid & boolean & Whether the "cxlComponentEventLog" field of the CXL Component Error section (\ref{section:cxlcomponenterrorsection}) is valid.\\
2016079d581eSLawrence Tang\jsontableend{CXL Component validation structure field table.}
2017079d581eSLawrence Tang
2018079d581eSLawrence Tang% CXL Component Device ID structure.
2019079d581eSLawrence Tang\subsection{CXL Component Device ID Structure}
2020079d581eSLawrence Tang\label{subsection:cxlcomponentdeviceidstructure}
2021079d581eSLawrence TangThis structure describes the ID of a CXL component, for use in a CXL Component Error section (\ref{section:cxlcomponenterrorsection}).
2022079d581eSLawrence Tang\jsontable{table:cxlcomponentdeviceidstructure}
2023079d581eSLawrence TangvendorID & uint64 & The vendor ID of the CXL component.\\
2024079d581eSLawrence Tang\hline
2025079d581eSLawrence TangdeviceID & uint64 & The device ID of the CXL component.\\
2026079d581eSLawrence Tang\hline
2027079d581eSLawrence TangfunctionNumber & uint64 & The function number of the CXL component.\\
2028079d581eSLawrence Tang\hline
2029079d581eSLawrence TangdeviceNumber & uint64 & The device number of the CXL component.\\
2030079d581eSLawrence Tang\hline
2031079d581eSLawrence TangbusNumber & uint64 & The bus of the CXL component.\\
2032079d581eSLawrence Tang\hline
2033079d581eSLawrence TangsegmentNumber & uint64 & The segment of the CXL component.\\
2034079d581eSLawrence Tang\hline
2035079d581eSLawrence TangslotNumber & uint64 & The slot number of the CXL component.\\
2036079d581eSLawrence Tang\jsontableend{CXL Component Device ID structure field table.}
2037079d581eSLawrence Tang
2038b44314c7SLawrence Tang% Undefined error section.
2039b44314c7SLawrence Tang\section{Undefined Error Section}
2040b44314c7SLawrence Tang\label{section:undefinederrorsection}
2041b44314c7SLawrence TangThis section describes the JSON format for a single undefined CPER section. This structure is used for all CPER sections that have \texttt{errorType} GUIDs which are not defined in UEFI Appendix N.
2042b44314c7SLawrence Tang\jsontable{table:ccixpererrorsection}
2043b44314c7SLawrence Tangdata & string & A base64-encoded binary dump of the undefined CPER section.\\
2044b44314c7SLawrence Tang\jsontableend{Undefined Error structure field table.}
2045b44314c7SLawrence Tang
2046079d581eSLawrence Tang\end{document}