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